@codemation/cli 0.0.5 → 0.0.11

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 (40) hide show
  1. package/README.md +20 -26
  2. package/dist/{CliBin-C3ar49fj.js → CliBin-BAnFX1wL.js} +1105 -366
  3. package/dist/bin.js +1 -1
  4. package/dist/index.d.ts +655 -207
  5. package/dist/index.js +1 -1
  6. package/package.json +14 -6
  7. package/src/CliProgramFactory.ts +23 -8
  8. package/src/Program.ts +7 -3
  9. package/src/bootstrap/CodemationCliApplicationSession.ts +17 -19
  10. package/src/commands/DevCommand.ts +203 -171
  11. package/src/commands/ServeWebCommand.ts +26 -1
  12. package/src/commands/ServeWorkerCommand.ts +46 -30
  13. package/src/commands/devCommandLifecycle.types.ts +7 -11
  14. package/src/database/ConsumerDatabaseConnectionResolver.ts +55 -9
  15. package/src/database/DatabaseMigrationsApplyService.ts +2 -2
  16. package/src/dev/Builder.ts +1 -14
  17. package/src/dev/CliDevProxyServer.ts +457 -0
  18. package/src/dev/CliDevProxyServerFactory.ts +10 -0
  19. package/src/dev/DevApiRuntimeFactory.ts +44 -0
  20. package/src/dev/DevApiRuntimeHost.ts +130 -0
  21. package/src/dev/DevApiRuntimeServer.ts +107 -0
  22. package/src/dev/DevApiRuntimeTypes.ts +24 -0
  23. package/src/dev/DevAuthSettingsLoader.ts +9 -3
  24. package/src/dev/DevBootstrapSummaryFetcher.ts +1 -1
  25. package/src/dev/DevHttpProbe.ts +2 -2
  26. package/src/dev/DevNextHostEnvironmentBuilder.ts +35 -5
  27. package/src/dev/DevRebuildQueue.ts +54 -0
  28. package/src/dev/DevRebuildQueueFactory.ts +7 -0
  29. package/src/dev/DevSessionPortsResolver.ts +2 -2
  30. package/src/dev/DevSessionServices.ts +0 -4
  31. package/src/dev/DevSourceChangeClassifier.ts +33 -13
  32. package/src/dev/ListenPortConflictDescriber.ts +83 -0
  33. package/src/dev/WatchRootsResolver.ts +6 -4
  34. package/src/runtime/NextHostConsumerServerCommandFactory.ts +11 -2
  35. package/src/user/CliDatabaseUrlDescriptor.ts +2 -2
  36. package/src/user/UserAdminCliBootstrap.ts +9 -21
  37. package/codemation-cli-0.0.3.tgz +0 -0
  38. package/src/dev/DevSourceRestartCoordinator.ts +0 -48
  39. package/src/dev/DevelopmentGatewayNotifier.ts +0 -35
  40. package/src/dev/RuntimeToolEntrypointResolver.ts +0 -47
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { createRequire } from "node:module";
2
2
  import "reflect-metadata";
3
3
  import { ChildProcess } from "node:child_process";
4
+ import { Hono } from "hono";
4
5
  import { ReadableStream } from "node:stream/web";
5
6
  import { DependencyContainer as Container, InjectionToken as TypeToken } from "tsyringe";
6
7
  import { AnyNull, AnyNullClass, DbNull, DbNullClass, Decimal, JsonNull, JsonNullClass, NullTypes as NullTypes$1, ObjectEnumValue, PrismaClientInitializationError, PrismaClientKnownRequestError, PrismaClientRustPanicError, PrismaClientUnknownRequestError, PrismaClientValidationError, RawValue, Sql, Value, empty, isAnyNull, isDbNull, isJsonNull, isObjectEnumValue, join, raw, sql as sqltag } from "@prisma/client-runtime-utils";
@@ -56,15 +57,123 @@ interface ExponentialRetryPolicySpec {
56
57
  }
57
58
  //#endregion
58
59
  //#region ../core/src/contracts/runTypes.d.ts
60
+ interface RunExecutionOptions {
61
+ /** Run-intent override: force the inline scheduler and bypass node-level offload decisions. */
62
+ localOnly?: boolean;
63
+ /** Marks runs started from webhook handling so orchestration can apply webhook-specific continuation rules. */
64
+ webhook?: boolean;
65
+ mode?: "manual" | "debug";
66
+ sourceWorkflowId?: WorkflowId;
67
+ sourceRunId?: RunId;
68
+ derivedFromRunId?: RunId;
69
+ isMutable?: boolean;
70
+ /** Set by the engine for this run: 0 = root, 1 = first child subworkflow, … */
71
+ subworkflowDepth?: number;
72
+ /** Effective cap after engine policy merge (successful node completions per run). */
73
+ maxNodeActivations?: number;
74
+ /** Effective cap after engine policy merge (subworkflow nesting). */
75
+ maxSubworkflowDepth?: number;
76
+ }
77
+ /** Engine-owned counters persisted with the run (worker-safe). */
78
+ interface EngineRunCounters {
79
+ completedNodeActivations: number;
80
+ }
81
+ type RunStopCondition = Readonly<{
82
+ kind: "workflowCompleted";
83
+ }> | Readonly<{
84
+ kind: "nodeCompleted";
85
+ nodeId: NodeId;
86
+ }>;
87
+ interface PersistedRunControlState {
88
+ stopCondition?: RunStopCondition;
89
+ }
90
+ interface PersistedWorkflowSnapshotNode {
91
+ id: NodeId;
92
+ kind: NodeKind;
93
+ name?: string;
94
+ nodeTokenId: PersistedTokenId;
95
+ configTokenId: PersistedTokenId;
96
+ tokenName?: string;
97
+ configTokenName?: string;
98
+ config: unknown;
99
+ }
100
+ interface PersistedWorkflowSnapshot {
101
+ id: WorkflowId;
102
+ name: string;
103
+ nodes: ReadonlyArray<PersistedWorkflowSnapshotNode>;
104
+ edges: ReadonlyArray<Edge>;
105
+ /** When the snapshot was built from a live workflow definition that configured a workflow error handler. */
106
+ workflowErrorHandlerConfigured?: boolean;
107
+ /** Connection metadata for child nodes not in the execution graph (e.g. AI agent attachments). */
108
+ connections?: ReadonlyArray<WorkflowNodeConnection>;
109
+ }
110
+ type PinnedNodeOutputsByPort = Readonly<Record<OutputPortKey, Items>>;
111
+ interface PersistedMutableNodeState {
112
+ pinnedOutputsByPort?: PinnedNodeOutputsByPort;
113
+ lastDebugInput?: Items;
114
+ }
115
+ interface PersistedMutableRunState {
116
+ nodesById: Readonly<Record<NodeId, PersistedMutableNodeState>>;
117
+ }
59
118
  type NodeInputsByPort = Readonly<Record<InputPortKey, Items>>;
119
+ interface RunQueueEntry {
120
+ nodeId: NodeId;
121
+ input: Items;
122
+ toInput?: InputPortKey;
123
+ batchId?: string;
124
+ from?: Readonly<{
125
+ nodeId: NodeId;
126
+ output: OutputPortKey;
127
+ }>;
128
+ collect?: Readonly<{
129
+ expectedInputs: ReadonlyArray<InputPortKey>;
130
+ received: Readonly<Record<InputPortKey, Items>>;
131
+ }>;
132
+ }
60
133
  type NodeExecutionStatus = "pending" | "queued" | "running" | "completed" | "failed" | "skipped";
61
134
  interface NodeExecutionError {
62
135
  message: string;
63
136
  name?: string;
64
137
  stack?: string;
65
138
  }
139
+ interface NodeExecutionSnapshot {
140
+ runId: RunId;
141
+ workflowId: WorkflowId;
142
+ nodeId: NodeId;
143
+ activationId?: NodeActivationId;
144
+ parent?: ParentExecutionRef;
145
+ status: NodeExecutionStatus;
146
+ usedPinnedOutput?: boolean;
147
+ queuedAt?: string;
148
+ startedAt?: string;
149
+ finishedAt?: string;
150
+ updatedAt: string;
151
+ inputsByPort?: NodeInputsByPort;
152
+ outputs?: NodeOutputs;
153
+ error?: NodeExecutionError;
154
+ }
66
155
  /** Stable id for a single connection invocation row in {@link ConnectionInvocationRecord}. */
67
156
  type ConnectionInvocationId = string;
157
+ /**
158
+ * One logical LLM or tool call under an owning workflow node (e.g. AI agent).
159
+ * The owning node defines what {@link managedInput} and {@link managedOutput} contain.
160
+ */
161
+ interface ConnectionInvocationRecord {
162
+ readonly invocationId: ConnectionInvocationId;
163
+ readonly runId: RunId;
164
+ readonly workflowId: WorkflowId;
165
+ readonly connectionNodeId: NodeId;
166
+ readonly parentAgentNodeId: NodeId;
167
+ readonly parentAgentActivationId: NodeActivationId;
168
+ readonly status: NodeExecutionStatus;
169
+ readonly managedInput?: JsonValue$1;
170
+ readonly managedOutput?: JsonValue$1;
171
+ readonly error?: NodeExecutionError;
172
+ readonly queuedAt?: string;
173
+ readonly startedAt?: string;
174
+ readonly finishedAt?: string;
175
+ readonly updatedAt: string;
176
+ }
68
177
  /** Arguments for appending a {@link ConnectionInvocationRecord} (engine fills run/workflow ids and timestamps). */
69
178
  type ConnectionInvocationAppendArgs = Readonly<{
70
179
  invocationId: ConnectionInvocationId;
@@ -79,6 +188,40 @@ type ConnectionInvocationAppendArgs = Readonly<{
79
188
  startedAt?: string;
80
189
  finishedAt?: string;
81
190
  }>;
191
+ type RunStatus = "running" | "pending" | "completed" | "failed";
192
+ interface PendingNodeExecution {
193
+ runId: RunId;
194
+ activationId: NodeActivationId;
195
+ workflowId: WorkflowId;
196
+ nodeId: NodeId;
197
+ itemsIn: number;
198
+ inputsByPort: NodeInputsByPort;
199
+ receiptId: string;
200
+ queue?: string;
201
+ batchId?: string;
202
+ enqueuedAt: string;
203
+ }
204
+ interface PersistedRunState {
205
+ runId: RunId;
206
+ workflowId: WorkflowId;
207
+ startedAt: string;
208
+ parent?: ParentExecutionRef;
209
+ executionOptions?: RunExecutionOptions;
210
+ control?: PersistedRunControlState;
211
+ workflowSnapshot?: PersistedWorkflowSnapshot;
212
+ mutableState?: PersistedMutableRunState;
213
+ /** Frozen at createRun from workflow + runtime defaults for prune/storage decisions. */
214
+ policySnapshot?: PersistedRunPolicySnapshot;
215
+ /** Successful node completions so far (for activation budget). */
216
+ engineCounters?: EngineRunCounters;
217
+ status: RunStatus;
218
+ pending?: PendingNodeExecution;
219
+ queue: RunQueueEntry[];
220
+ outputsByNode: Record<NodeId, NodeOutputs>;
221
+ nodeSnapshotsByNodeId: Record<NodeId, NodeExecutionSnapshot>;
222
+ /** Append-only history of connection invocations (LLM/tool) nested under owning nodes. */
223
+ connectionInvocations?: ReadonlyArray<ConnectionInvocationRecord>;
224
+ }
82
225
  //#endregion
83
226
  //#region ../core/src/contracts/runtimeTypes.d.ts
84
227
  interface NodeExecutionStatePublisher {
@@ -157,6 +300,7 @@ type WorkflowId = string;
157
300
  type NodeId = string;
158
301
  type OutputPortKey = string;
159
302
  type InputPortKey = string;
303
+ type PersistedTokenId = string;
160
304
  type NodeKind = "trigger" | "node";
161
305
  type JsonPrimitive = string | number | boolean | null;
162
306
  interface JsonObject$1 {
@@ -298,6 +442,11 @@ interface WorkflowPrunePolicySpec {
298
442
  readonly runDataRetentionSeconds?: number;
299
443
  readonly binaryRetentionSeconds?: number;
300
444
  }
445
+ interface PersistedRunPolicySnapshot {
446
+ readonly retentionSeconds?: number;
447
+ readonly binaryRetentionSeconds?: number;
448
+ readonly storagePolicy: WorkflowStoragePolicyMode;
449
+ }
301
450
  interface WorkflowErrorHandler {
302
451
  onError(ctx: WorkflowErrorContext): void | Promise<void>;
303
452
  }
@@ -439,6 +588,50 @@ type CredentialType<TPublicConfig extends CredentialJsonRecord = CredentialJsonR
439
588
  */
440
589
  type AnyCredentialType = CredentialType<any, any, unknown>;
441
590
  //#endregion
591
+ //#region ../core/src/events/runEvents.d.ts
592
+ type RunEvent = Readonly<{
593
+ kind: "runCreated";
594
+ runId: RunId;
595
+ workflowId: WorkflowId;
596
+ parent?: ParentExecutionRef;
597
+ at: string;
598
+ }> | Readonly<{
599
+ kind: "runSaved";
600
+ runId: RunId;
601
+ workflowId: WorkflowId;
602
+ parent?: ParentExecutionRef;
603
+ at: string;
604
+ state: PersistedRunState;
605
+ }> | Readonly<{
606
+ kind: "nodeQueued";
607
+ runId: RunId;
608
+ workflowId: WorkflowId;
609
+ parent?: ParentExecutionRef;
610
+ at: string;
611
+ snapshot: NodeExecutionSnapshot;
612
+ }> | Readonly<{
613
+ kind: "nodeStarted";
614
+ runId: RunId;
615
+ workflowId: WorkflowId;
616
+ parent?: ParentExecutionRef;
617
+ at: string;
618
+ snapshot: NodeExecutionSnapshot;
619
+ }> | Readonly<{
620
+ kind: "nodeCompleted";
621
+ runId: RunId;
622
+ workflowId: WorkflowId;
623
+ parent?: ParentExecutionRef;
624
+ at: string;
625
+ snapshot: NodeExecutionSnapshot;
626
+ }> | Readonly<{
627
+ kind: "nodeFailed";
628
+ runId: RunId;
629
+ workflowId: WorkflowId;
630
+ parent?: ParentExecutionRef;
631
+ at: string;
632
+ snapshot: NodeExecutionSnapshot;
633
+ }>;
634
+ //#endregion
442
635
  //#region ../core/src/policies/executionLimits/EngineExecutionLimitsPolicy.d.ts
443
636
  interface EngineExecutionLimitsPolicyConfig {
444
637
  readonly defaultMaxNodeActivations: number;
@@ -447,72 +640,34 @@ interface EngineExecutionLimitsPolicyConfig {
447
640
  readonly hardMaxSubworkflowDepth: number;
448
641
  }
449
642
  //#endregion
450
- //#region ../host/src/presentation/config/CodemationAuthConfig.d.ts
451
- /**
452
- * Consumer-declared authentication profile for the hosted UI + HTTP API.
453
- * NextAuth / Auth.js wires concrete providers from this configuration plus environment secrets.
454
- */
455
- type CodemationAuthKind = "local" | "oauth" | "oidc";
456
- interface CodemationAuthOAuthProviderConfig {
457
- readonly provider: "google" | "github" | "microsoft-entra-id";
458
- readonly clientIdEnv: string;
459
- readonly clientSecretEnv: string;
460
- /** Microsoft Entra ID tenant; environment variable name whose value is the tenant ID. */
461
- readonly tenantIdEnv?: string;
643
+ //#region ../host/src/presentation/config/CodemationClassToken.d.ts
644
+ type CodemationClassToken<TValue> = TypeToken<TValue> & (new (...args: never[]) => TValue);
645
+ //#endregion
646
+ //#region ../host/src/bootstrap/CodemationContainerRegistration.d.ts
647
+ interface CodemationContainerRegistrationBase<TValue> {
648
+ readonly token: TypeToken<TValue>;
462
649
  }
463
- interface CodemationAuthOidcProviderConfig {
464
- readonly id: string;
465
- readonly issuer: string;
466
- readonly clientIdEnv: string;
467
- readonly clientSecretEnv: string;
650
+ interface CodemationValueRegistration<TValue> extends CodemationContainerRegistrationBase<TValue> {
651
+ readonly useValue: TValue;
468
652
  }
469
- interface CodemationAuthConfig {
470
- readonly kind: CodemationAuthKind;
471
- /**
472
- * When true and NODE_ENV is not production, the API accepts requests without a real session
473
- * (synthetic principal only — never honored in production).
474
- */
475
- readonly allowUnauthenticatedInDevelopment?: boolean;
476
- readonly oauth?: ReadonlyArray<CodemationAuthOAuthProviderConfig>;
477
- readonly oidc?: ReadonlyArray<CodemationAuthOidcProviderConfig>;
653
+ interface CodemationClassRegistration<TValue> extends CodemationContainerRegistrationBase<TValue> {
654
+ readonly useClass: CodemationClassToken<TValue>;
478
655
  }
479
- //#endregion
480
- //#region ../host/src/presentation/config/CodemationWhitelabelConfig.d.ts
481
- /**
482
- * Optional host shell whitelabeling (sidebar, login, document title).
483
- * `logoPath` is resolved relative to the consumer project root.
484
- */
485
- interface CodemationWhitelabelConfig {
486
- readonly productName?: string;
487
- /** Relative to consumer project root, e.g. `branding/logo.svg`. */
488
- readonly logoPath?: string;
656
+ interface CodemationFactoryRegistration<TValue> extends CodemationContainerRegistrationBase<TValue> {
657
+ readonly useFactory: (container: Container) => TValue;
489
658
  }
659
+ type CodemationContainerRegistration<TValue = unknown> = CodemationValueRegistration<TValue> | CodemationClassRegistration<TValue> | CodemationFactoryRegistration<TValue>;
490
660
  //#endregion
491
- //#region ../host/src/presentation/config/AppConfig.d.ts
492
- interface AppConfig {
493
- readonly consumerRoot: string;
494
- readonly repoRoot: string;
495
- readonly env: Readonly<NodeJS.ProcessEnv>;
496
- readonly workflowSources: ReadonlyArray<string>;
497
- readonly databaseUrl?: string;
498
- readonly database?: CodemationDatabaseConfig;
499
- readonly scheduler: Readonly<{
500
- kind: CodemationSchedulerKind;
501
- queuePrefix?: string;
502
- workerQueues: ReadonlyArray<string>;
503
- redisUrl?: string;
504
- }>;
505
- readonly eventing: Readonly<{
506
- kind: CodemationEventBusKind;
507
- queuePrefix?: string;
508
- redisUrl?: string;
509
- }>;
510
- readonly auth?: CodemationAuthConfig;
511
- readonly whitelabel: CodemationWhitelabelConfig;
661
+ //#region ../host/src/application/logging/Logger.d.ts
662
+ interface Logger {
663
+ info(message: string, exception?: Error): void;
664
+ warn(message: string, exception?: Error): void;
665
+ error(message: string, exception?: Error): void;
666
+ debug(message: string, exception?: Error): void;
667
+ }
668
+ interface LoggerFactory {
669
+ create(scope: string): Logger;
512
670
  }
513
- //#endregion
514
- //#region ../host/src/presentation/config/CodemationClassToken.d.ts
515
- type CodemationClassToken<TValue> = TypeToken<TValue> & (new (...args: never[]) => TValue);
516
671
  //#endregion
517
672
  //#region ../host/src/presentation/config/CodemationAppContext.d.ts
518
673
  interface CodemationRegistrationContextBase {
@@ -529,17 +684,6 @@ interface CodemationAppContext extends CodemationRegistrationContextBase {
529
684
  discoverWorkflows(...directories: ReadonlyArray<string>): void;
530
685
  }
531
686
  //#endregion
532
- //#region ../host/src/application/logging/Logger.d.ts
533
- interface Logger {
534
- info(message: string, exception?: Error): void;
535
- warn(message: string, exception?: Error): void;
536
- error(message: string, exception?: Error): void;
537
- debug(message: string, exception?: Error): void;
538
- }
539
- interface LoggerFactory {
540
- create(scope: string): Logger;
541
- }
542
- //#endregion
543
687
  //#region ../host/src/presentation/config/CodemationPlugin.d.ts
544
688
  interface CodemationPluginContext extends CodemationRegistrationContextBase {
545
689
  readonly container: Container;
@@ -556,6 +700,36 @@ interface CodemationPlugin {
556
700
  register(context: CodemationPluginContext): void | Promise<void>;
557
701
  }
558
702
  //#endregion
703
+ //#region ../host/src/presentation/config/CodemationAuthConfig.d.ts
704
+ /**
705
+ * Consumer-declared authentication profile for the hosted UI + HTTP API.
706
+ * NextAuth / Auth.js wires concrete providers from this configuration plus environment secrets.
707
+ */
708
+ type CodemationAuthKind = "local" | "oauth" | "oidc";
709
+ interface CodemationAuthOAuthProviderConfig {
710
+ readonly provider: "google" | "github" | "microsoft-entra-id";
711
+ readonly clientIdEnv: string;
712
+ readonly clientSecretEnv: string;
713
+ /** Microsoft Entra ID tenant; environment variable name whose value is the tenant ID. */
714
+ readonly tenantIdEnv?: string;
715
+ }
716
+ interface CodemationAuthOidcProviderConfig {
717
+ readonly id: string;
718
+ readonly issuer: string;
719
+ readonly clientIdEnv: string;
720
+ readonly clientSecretEnv: string;
721
+ }
722
+ interface CodemationAuthConfig {
723
+ readonly kind: CodemationAuthKind;
724
+ /**
725
+ * When true and NODE_ENV is not production, the API accepts requests without a real session
726
+ * (synthetic principal only — never honored in production).
727
+ */
728
+ readonly allowUnauthenticatedInDevelopment?: boolean;
729
+ readonly oauth?: ReadonlyArray<CodemationAuthOAuthProviderConfig>;
730
+ readonly oidc?: ReadonlyArray<CodemationAuthOidcProviderConfig>;
731
+ }
732
+ //#endregion
559
733
  //#region ../host/src/presentation/config/CodemationLogConfig.d.ts
560
734
  /**
561
735
  * Minimum level for namespaces matched by {@link CodemationLogRule.filter}.
@@ -580,6 +754,17 @@ type CodemationLogConfig = Readonly<{
580
754
  rules: ReadonlyArray<CodemationLogRule>;
581
755
  }> | CodemationLogRule;
582
756
  //#endregion
757
+ //#region ../host/src/presentation/config/CodemationWhitelabelConfig.d.ts
758
+ /**
759
+ * Optional host shell whitelabeling (sidebar, login, document title).
760
+ * `logoPath` is resolved relative to the consumer project root.
761
+ */
762
+ interface CodemationWhitelabelConfig {
763
+ readonly productName?: string;
764
+ /** Relative to consumer project root, e.g. `branding/logo.svg`. */
765
+ readonly logoPath?: string;
766
+ }
767
+ //#endregion
583
768
  //#region ../host/src/presentation/config/CodemationWorkflowDiscovery.d.ts
584
769
  interface CodemationWorkflowDiscovery {
585
770
  readonly directories?: ReadonlyArray<string>;
@@ -656,8 +841,8 @@ interface CodemationConfig {
656
841
  readonly log?: CodemationLogConfig;
657
842
  }
658
843
  //#endregion
659
- //#region ../host/src/infrastructure/persistence/DatabasePersistenceResolver.d.ts
660
- type ResolvedDatabasePersistence = Readonly<{
844
+ //#region ../host/src/presentation/config/AppConfig.d.ts
845
+ type AppPersistenceConfig = Readonly<{
661
846
  kind: "none";
662
847
  }> | Readonly<{
663
848
  kind: "postgresql";
@@ -666,23 +851,36 @@ type ResolvedDatabasePersistence = Readonly<{
666
851
  kind: "pglite";
667
852
  dataDir: string;
668
853
  }>;
669
- /**
670
- * Resolves whether persistence uses TCP PostgreSQL, embedded PGlite, or in-memory stores.
671
- * Uses {@link CodemationConfig.runtime.database} as the source of truth; optional `CODEMATION_DATABASE_KIND`
672
- * and `CODEMATION_PGLITE_DATA_DIR` can override kind / PGlite directory. `DATABASE_URL` is not read here—put
673
- * connection strings in `runtime.database.url` (often sourced from `process.env` inside `codemation.config.ts`).
674
- */
675
- declare class DatabasePersistenceResolver {
676
- resolve(args: Readonly<{
677
- runtimeConfig: CodemationApplicationRuntimeConfig;
678
- env: NodeJS.ProcessEnv;
679
- consumerRoot: string;
680
- }>): ResolvedDatabasePersistence;
681
- resolveDatabaseKind(configured: CodemationDatabaseKind | undefined, env: NodeJS.ProcessEnv): CodemationDatabaseKind;
682
- private inferDatabaseKind;
683
- isPostgresUrl(value: string): boolean;
684
- isPgliteUrl(value: string): boolean;
685
- private resolvePgliteDataDirFromConfig;
854
+ interface AppConfig {
855
+ readonly consumerRoot: string;
856
+ readonly repoRoot: string;
857
+ readonly env: Readonly<NodeJS.ProcessEnv>;
858
+ readonly workflowSources: ReadonlyArray<string>;
859
+ readonly workflows: ReadonlyArray<WorkflowDefinition>;
860
+ readonly containerRegistrations: ReadonlyArray<CodemationContainerRegistration<unknown>>;
861
+ readonly credentialTypes: ReadonlyArray<AnyCredentialType>;
862
+ readonly plugins: ReadonlyArray<CodemationPlugin>;
863
+ readonly hasConfiguredCredentialSessionServiceRegistration: boolean;
864
+ readonly log?: CodemationLogConfig;
865
+ readonly engineExecutionLimits?: CodemationEngineExecutionLimitsConfig;
866
+ readonly databaseUrl?: string;
867
+ readonly database?: CodemationDatabaseConfig;
868
+ readonly persistence: AppPersistenceConfig;
869
+ readonly scheduler: Readonly<{
870
+ kind: CodemationSchedulerKind;
871
+ queuePrefix?: string;
872
+ workerQueues: ReadonlyArray<string>;
873
+ redisUrl?: string;
874
+ }>;
875
+ readonly eventing: Readonly<{
876
+ kind: CodemationEventBusKind;
877
+ queuePrefix?: string;
878
+ redisUrl?: string;
879
+ }>;
880
+ readonly auth?: CodemationAuthConfig;
881
+ readonly whitelabel: CodemationWhitelabelConfig;
882
+ readonly webSocketPort: number;
883
+ readonly webSocketBindHost: string;
686
884
  }
687
885
  declare namespace client_d_exports {
688
886
  export { Action, Aggregate, AllModelsToStringIndex, AnyNull, AnyNullClass, ApplyOmit, Args, Args_3, BaseDMMF, Bytes, Call, Cast, ClientArg, ClientArgs, ClientBuiltInProp, ClientOptionDef, ClientOtherOps, Compute, ComputeDeep, Count, DMMF, DbNull, DbNullClass, Debug, Decimal, DecimalJsLike, DefaultArgs, DefaultSelection, DevTypeMapDef, DevTypeMapFnDef, DynamicClientExtensionArgs, DynamicClientExtensionThis, DynamicClientExtensionThisBuiltin, DynamicModelExtensionArgs, DynamicModelExtensionFluentApi, DynamicModelExtensionFnResult, DynamicModelExtensionFnResultBase, DynamicModelExtensionFnResultNull, DynamicModelExtensionOperationFn, DynamicModelExtensionThis, DynamicQueryExtensionArgs, DynamicQueryExtensionCb, DynamicQueryExtensionCbArgs, DynamicQueryExtensionCbArgsArgs, DynamicResultExtensionArgs, DynamicResultExtensionData, DynamicResultExtensionNeeds, EmptyToUnknown, Equals, Exact, ExtendsHook, ExtensionArgs, Extensions, ExtractGlobalOmit, FieldRef$1 as FieldRef, Fn, GetAggregateResult, GetBatchResult, GetCountResult, GetFindResult, GetGroupByResult, GetOmit, GetPayloadResult, GetPayloadResultExtensionKeys, GetPayloadResultExtensionObject, GetPrismaClientConfig, GetResult, GetSelect, ITXClientDenyList, InputJsonArray, InputJsonObject, InputJsonValue, InternalArgs, JsArgs, JsInputValue, JsOutputValue, JsPromise, JsonArray, JsonBatchQuery, JsonConvertible, JsonNull, JsonNullClass, JsonObject, JsonQuery, JsonValue, MergeExtArgs, ModelArg, ModelArgs, ModelKey, ModelQueryOptionsCb, ModelQueryOptionsCbArgs, NameArgs, Narrow, Narrowable, NeverToUnknown, NullTypes$1 as NullTypes, ObjectEnumValue, Omission, Omit_2 as Omit, OmitValue, Operation, OperationPayload, Optional, OptionalFlat$1 as OptionalFlat, OptionalKeys, Or$1 as Or, Param, PatchFlat, Path, Payload, PayloadToResult, Pick_2 as Pick, PrismaClientInitializationError, PrismaClientKnownRequestError, PrismaClientOptions, PrismaClientRustPanicError, PrismaClientUnknownRequestError, PrismaClientValidationError, PrismaPromise, PrivateResultType, Public, QueryOptions, QueryOptionsCb, QueryOptionsCbArgs, RawParameters, RawQueryArgs, RawValue, ReadonlyDeep, Record_2 as Record, RenameAndNestPayloadKeys, RequiredExtensionArgs, RequiredKeys$1 as RequiredKeys, Result, ResultArg, ResultArgs, ResultArgsFieldCompute, ResultFieldDefinition, Result_2, Return, RuntimeDataModel, Select, SelectField, SelectablePayloadFields, Selection_2 as Selection, Sql, SqlCommenterContext, SqlCommenterPlugin, SqlCommenterQueryInfo, SqlCommenterSingleQueryInfo, SqlCommenterTags, SqlDriverAdapterFactory, ToTuple, TypeMapCbDef, TypeMapDef, TypedSql, Types, UnknownTypedSql, UnwrapPayload, UnwrapPromise, UnwrapTuple, RequiredExtensionArgs as UserArgs, Value, createParam, defineDmmfProperty, deserializeJsonObject, deserializeRawResult, dmmfToRuntimeDataModel, empty, getPrismaClient, getRuntime, isAnyNull, isDbNull, isJsonNull, isObjectEnumValue, isTypedSql, itxClientDenyList, join, makeStrictEnum, makeTypedQueryFactory, raw, serializeJsonQuery, skip, sqltag, warnOnce };
@@ -22646,35 +22844,146 @@ declare namespace Prisma {
22646
22844
  export const dmmf: BaseDMMF;
22647
22845
  }
22648
22846
  //#endregion
22649
- //#region ../host/src/application/dev/DevBootstrapSummaryJson.types.d.ts
22650
- type DevBootstrapSummaryJson = Readonly<{
22651
- logLevel: string;
22652
- codemationLogLevelEnv?: string;
22653
- databaseLabel: string;
22654
- schedulerLabel: string;
22655
- eventBusLabel: string;
22656
- redisUrlRedacted?: string;
22657
- activeWorkflows: ReadonlyArray<Readonly<{
22658
- id: string;
22659
- name: string;
22660
- }>>;
22847
+ //#region ../host/src/infrastructure/config/CodemationPluginRegistrar.d.ts
22848
+ declare class CodemationPluginRegistrar {
22849
+ apply(args: Readonly<{
22850
+ plugins: ReadonlyArray<CodemationPlugin>;
22851
+ container: Container;
22852
+ appConfig: AppConfig;
22853
+ registerCredentialType: (type: AnyCredentialType) => void;
22854
+ loggerFactory: LoggerFactory;
22855
+ }>): Promise<void>;
22856
+ }
22857
+ //#endregion
22858
+ //#region ../host/src/application/contracts/WorkflowWebsocketMessage.d.ts
22859
+ type WorkflowWebsocketMessage = Readonly<{
22860
+ kind: "event";
22861
+ event: RunEvent;
22862
+ }> | Readonly<{
22863
+ kind: "workflowChanged";
22864
+ workflowId: string;
22865
+ }> | Readonly<{
22866
+ kind: "devBuildStarted";
22867
+ workflowId: string;
22868
+ buildVersion?: string;
22869
+ }> | Readonly<{
22870
+ kind: "devBuildCompleted";
22871
+ workflowId: string;
22872
+ buildVersion: string;
22873
+ }> | Readonly<{
22874
+ kind: "devBuildFailed";
22875
+ workflowId: string;
22876
+ message: string;
22661
22877
  }>;
22662
22878
  //#endregion
22663
- //#region ../host/src/bootstrap/CodemationBootstrapRequest.d.ts
22664
- declare class CodemationBootstrapRequest {
22665
- readonly consumerRoot: string;
22666
- readonly repoRoot: string;
22667
- readonly workflowSources: ReadonlyArray<string>;
22668
- readonly env?: Readonly<NodeJS.ProcessEnv>;
22669
- constructor(args: Readonly<{
22670
- consumerRoot: string;
22879
+ //#region ../host/src/application/websocket/WorkflowWebsocketPublisher.d.ts
22880
+ interface WorkflowWebsocketPublisher {
22881
+ publishToRoom(roomId: string, message: WorkflowWebsocketMessage): Promise<void>;
22882
+ }
22883
+ //#endregion
22884
+ //#region ../host/src/presentation/websocket/WorkflowWebsocketServer.d.ts
22885
+ declare class WorkflowWebsocketServer implements WorkflowWebsocketPublisher {
22886
+ private readonly port;
22887
+ private readonly bindHost;
22888
+ private readonly logger;
22889
+ private websocketServer;
22890
+ private readonly sockets;
22891
+ private readonly roomIdsBySocket;
22892
+ private started;
22893
+ constructor(port: number, bindHost: string, logger: Logger);
22894
+ start(): Promise<void>;
22895
+ stop(): Promise<void>;
22896
+ publishToRoom(roomId: string, message: WorkflowWebsocketMessage): Promise<void>;
22897
+ private connect;
22898
+ private handleMessage;
22899
+ private awaitListening;
22900
+ private closeAfterFailedStart;
22901
+ private parseClientMessage;
22902
+ }
22903
+ //#endregion
22904
+ //#region ../host/src/bootstrap/CodemationContainerRegistrationRegistrar.d.ts
22905
+ declare class CodemationContainerRegistrationRegistrar {
22906
+ apply(container: Container, registrations: ReadonlyArray<CodemationContainerRegistration<unknown>>): void;
22907
+ private applyRegistration;
22908
+ private isValueRegistration;
22909
+ private isClassRegistration;
22910
+ }
22911
+ //#endregion
22912
+ //#region ../host/src/bootstrap/AppContainerFactory.d.ts
22913
+ type AppContainerInputs = Readonly<{
22914
+ appConfig: AppConfig;
22915
+ sharedWorkflowWebsocketServer: WorkflowWebsocketServer | null;
22916
+ }>;
22917
+ declare class AppContainerFactory {
22918
+ private readonly containerRegistrationRegistrar;
22919
+ private readonly pluginRegistrar;
22920
+ private static readonly honoRouteRegistrars;
22921
+ constructor(containerRegistrationRegistrar?: CodemationContainerRegistrationRegistrar, pluginRegistrar?: CodemationPluginRegistrar);
22922
+ create(inputs: AppContainerInputs): Promise<Container>;
22923
+ private collectCredentialTypes;
22924
+ private applyPlugins;
22925
+ private registerCredentialTypes;
22926
+ private registerConfiguredRegistrations;
22927
+ private registerCoreInfrastructure;
22928
+ private registerRepositoriesAndBuses;
22929
+ private registerApplicationServicesAndRoutes;
22930
+ private registerOperationalInfrastructure;
22931
+ private registerRuntimeInfrastructure;
22932
+ private resolvePrismaOwnership;
22933
+ private registerRuntimeNodeActivationScheduler;
22934
+ private createBinaryStorage;
22935
+ private createRuntimeSummary;
22936
+ private requireRedisUrl;
22937
+ private synchronizeLiveWorkflowRepository;
22938
+ }
22939
+ //#endregion
22940
+ //#region ../host/src/presentation/config/CodemationConfigNormalizer.d.ts
22941
+ type NormalizedCodemationConfig = CodemationConfig & Readonly<{
22942
+ containerRegistrations: ReadonlyArray<CodemationContainerRegistration<unknown>>;
22943
+ }>;
22944
+ //#endregion
22945
+ //#region ../host/src/bootstrap/runtime/AppConfigFactory.d.ts
22946
+ declare class AppConfigFactory {
22947
+ create(args: Readonly<{
22671
22948
  repoRoot: string;
22672
- workflowSources?: ReadonlyArray<string>;
22673
- env?: Readonly<NodeJS.ProcessEnv>;
22674
- }>);
22675
- resolveEnvironment(): NodeJS.ProcessEnv;
22949
+ consumerRoot: string;
22950
+ env: NodeJS.ProcessEnv;
22951
+ config: NormalizedCodemationConfig;
22952
+ workflowSources: ReadonlyArray<string>;
22953
+ }>): AppConfig;
22954
+ private resolvePersistence;
22955
+ private resolveDatabaseKind;
22956
+ private resolvePgliteDataDir;
22957
+ private resolveSchedulerKind;
22958
+ private resolveEventBusKind;
22959
+ private readSchedulerKind;
22960
+ private readEventBusKind;
22961
+ private resolveWebSocketPort;
22676
22962
  }
22677
22963
  //#endregion
22964
+ //#region ../host/src/presentation/frontend/CodemationFrontendAuthSnapshot.d.ts
22965
+ type CodemationFrontendAuthProviderSnapshot = Readonly<{
22966
+ id: string;
22967
+ name: string;
22968
+ }>;
22969
+ type CodemationFrontendAuthSnapshot = Readonly<{
22970
+ config: CodemationAuthConfig | undefined;
22971
+ credentialsEnabled: boolean;
22972
+ oauthProviders: ReadonlyArray<CodemationFrontendAuthProviderSnapshot>;
22973
+ secret: string | null;
22974
+ uiAuthEnabled: boolean;
22975
+ }>;
22976
+ //#endregion
22977
+ //#region ../host/src/presentation/frontend/FrontendAppConfig.d.ts
22978
+ /**
22979
+ * Frontend-safe projection of host app configuration for packaged Next UI and SSR.
22980
+ */
22981
+ type FrontendAppConfig = Readonly<{
22982
+ auth: CodemationFrontendAuthSnapshot;
22983
+ productName: string;
22984
+ logoUrl: string | null;
22985
+ }>;
22986
+ //#endregion
22678
22987
  //#region ../host/src/presentation/config/CodemationPackageManifest.d.ts
22679
22988
  interface CodemationPluginPackageManifest {
22680
22989
  readonly kind: "plugin";
@@ -22687,7 +22996,7 @@ interface CodemationPackageManifest {
22687
22996
  //#endregion
22688
22997
  //#region ../host/src/presentation/server/CodemationConsumerConfigLoader.d.ts
22689
22998
  type CodemationConsumerConfigResolution = Readonly<{
22690
- config: CodemationConfig;
22999
+ config: NormalizedCodemationConfig;
22691
23000
  bootstrapSource: string | null;
22692
23001
  workflowSources: ReadonlyArray<string>;
22693
23002
  }>;
@@ -22722,6 +23031,23 @@ declare class CodemationConsumerConfigLoader {
22722
23031
  private exists;
22723
23032
  }
22724
23033
  //#endregion
23034
+ //#region ../host/src/presentation/server/AppConfigLoader.d.ts
23035
+ type AppConfigLoadResult = Readonly<{
23036
+ appConfig: AppConfig;
23037
+ bootstrapSource: string | null;
23038
+ }>;
23039
+ declare class AppConfigLoader {
23040
+ private readonly consumerConfigLoader;
23041
+ private readonly appConfigFactory;
23042
+ constructor(consumerConfigLoader?: CodemationConsumerConfigLoader, appConfigFactory?: AppConfigFactory);
23043
+ load(args: Readonly<{
23044
+ consumerRoot: string;
23045
+ repoRoot: string;
23046
+ env: NodeJS.ProcessEnv;
23047
+ configPathOverride?: string;
23048
+ }>): Promise<AppConfigLoadResult>;
23049
+ }
23050
+ //#endregion
22725
23051
  //#region ../host/src/presentation/server/CodemationPluginDiscovery.d.ts
22726
23052
  type CodemationDiscoveredPluginPackage = Readonly<{
22727
23053
  packageName: string;
@@ -22746,17 +23072,39 @@ declare class CodemationPluginDiscovery {
22746
23072
  private resolveDevelopmentPluginEntry;
22747
23073
  }
22748
23074
  //#endregion
23075
+ //#region ../host/src/presentation/frontend/CodemationFrontendAuthSnapshotFactory.d.ts
23076
+ declare class CodemationFrontendAuthSnapshotFactory {
23077
+ createFromAppConfig(appConfig: AppConfig): CodemationFrontendAuthSnapshot;
23078
+ createFromResolvedInputs(args: Readonly<{
23079
+ authConfig: CodemationAuthConfig | undefined;
23080
+ env: NodeJS.ProcessEnv;
23081
+ uiAuthEnabled: boolean;
23082
+ }>): CodemationFrontendAuthSnapshot;
23083
+ private resolveUiAuthEnabled;
23084
+ private resolveAuthSecret;
23085
+ private createOauthProviders;
23086
+ private createOAuthProvider;
23087
+ private createOidcProvider;
23088
+ }
23089
+ //#endregion
23090
+ //#region ../host/src/presentation/frontend/FrontendAppConfigJsonCodec.d.ts
23091
+ declare class FrontendAppConfigJsonCodec {
23092
+ serialize(config: FrontendAppConfig): string;
23093
+ deserialize(serialized: string | undefined): FrontendAppConfig | null;
23094
+ private resolveAuthConfig;
23095
+ private resolveOauthProviders;
23096
+ }
23097
+ //#endregion
22749
23098
  //#region src/bootstrap/CodemationCliApplicationSession.d.ts
22750
23099
  /**
22751
- * Opens a {@link CodemationApplication} with persistence + command/query buses (no HTTP/WebSocket servers),
23100
+ * Opens an app container with persistence + command/query buses (no HTTP/WebSocket servers),
22752
23101
  * for CLI tools that dispatch application commands or queries (e.g. user admin).
22753
23102
  */
22754
23103
  declare class CodemationCliApplicationSession {
22755
- private readonly application;
23104
+ private readonly container;
22756
23105
  private constructor();
22757
23106
  static open(args: Readonly<{
22758
- resolution: CodemationConsumerConfigResolution;
22759
- bootstrap: CodemationBootstrapRequest;
23107
+ appConfig: AppConfig;
22760
23108
  }>): Promise<CodemationCliApplicationSession>;
22761
23109
  getPrismaClient(): PrismaClient | undefined;
22762
23110
  getCommandBus(): CommandBus;
@@ -22792,6 +23140,20 @@ declare class ConsumerBuildOptionsParser {
22792
23140
  private parseTarget;
22793
23141
  }
22794
23142
  //#endregion
23143
+ //#region ../host/src/application/dev/DevBootstrapSummaryJson.types.d.ts
23144
+ type DevBootstrapSummaryJson = Readonly<{
23145
+ logLevel: string;
23146
+ codemationLogLevelEnv?: string;
23147
+ databaseLabel: string;
23148
+ schedulerLabel: string;
23149
+ eventBusLabel: string;
23150
+ redisUrlRedacted?: string;
23151
+ activeWorkflows: ReadonlyArray<Readonly<{
23152
+ id: string;
23153
+ name: string;
23154
+ }>>;
23155
+ }>;
23156
+ //#endregion
22795
23157
  //#region src/consumer/ConsumerOutputBuilder.d.ts
22796
23158
  type ConsumerOutputBuildSnapshot = Readonly<{
22797
23159
  buildVersion: string;
@@ -22949,8 +23311,9 @@ declare class ConsumerCliTsconfigPreparation {
22949
23311
  * Resolves TCP PostgreSQL vs PGlite vs none from env + {@link CodemationConfig} (same rules as the host runtime).
22950
23312
  */
22951
23313
  declare class ConsumerDatabaseConnectionResolver {
22952
- private readonly resolver;
22953
- resolve(processEnv: NodeJS.ProcessEnv, config: CodemationConfig, consumerRoot: string): ResolvedDatabasePersistence;
23314
+ resolve(processEnv: NodeJS.ProcessEnv, config: CodemationConfig, consumerRoot: string): AppPersistenceConfig;
23315
+ private resolveDatabaseKind;
23316
+ private resolvePgliteDataDir;
22954
23317
  }
22955
23318
  //#endregion
22956
23319
  //#region src/user/CliDatabaseUrlDescriptor.d.ts
@@ -22958,7 +23321,7 @@ declare class ConsumerDatabaseConnectionResolver {
22958
23321
  * Formats a database URL for CLI messages without exposing credentials (no user/password).
22959
23322
  */
22960
23323
  declare class CliDatabaseUrlDescriptor {
22961
- describePersistence(persistence: ResolvedDatabasePersistence): string;
23324
+ describePersistence(persistence: AppPersistenceConfig): string;
22962
23325
  describeForDisplay(databaseUrl: string | undefined): string;
22963
23326
  }
22964
23327
  //#endregion
@@ -22976,7 +23339,7 @@ declare class UserAdminConsumerDotenvLoader {
22976
23339
  //#endregion
22977
23340
  //#region src/database/DatabaseMigrationsApplyService.d.ts
22978
23341
  type DatabaseMigrationDeployer = {
22979
- deployPersistence(persistence: ResolvedDatabasePersistence, env?: Readonly<NodeJS.ProcessEnv>): Promise<void>;
23342
+ deployPersistence(persistence: AppPersistenceConfig, env?: Readonly<NodeJS.ProcessEnv>): Promise<void>;
22980
23343
  };
22981
23344
  /**
22982
23345
  * Loads consumer config + env, resolves persistence, and runs Prisma migrations.
@@ -23018,14 +23381,110 @@ declare class DbMigrateCommand {
23018
23381
  execute(options: DbMigrateCommandOptions): Promise<void>;
23019
23382
  }
23020
23383
  //#endregion
23384
+ //#region src/dev/LoopbackPortAllocator.d.ts
23385
+ declare class LoopbackPortAllocator {
23386
+ allocate(): Promise<number>;
23387
+ }
23388
+ //#endregion
23389
+ //#region src/dev/DevApiRuntimeTypes.d.ts
23390
+ type DevApiRuntimeFactoryArgs = Readonly<{
23391
+ consumerRoot: string;
23392
+ env: NodeJS.ProcessEnv;
23393
+ runtimeWorkingDirectory: string;
23394
+ }>;
23395
+ type DevApiRuntimeServerHandle = Readonly<{
23396
+ buildVersion: string;
23397
+ httpPort: number;
23398
+ stop: () => Promise<void>;
23399
+ workflowIds: ReadonlyArray<string>;
23400
+ workflowWebSocketPort: number;
23401
+ }>;
23402
+ //#endregion
23403
+ //#region src/dev/DevApiRuntimeFactory.d.ts
23404
+ declare class DevApiRuntimeFactory {
23405
+ private readonly portAllocator;
23406
+ private readonly configLoader;
23407
+ private readonly pluginDiscovery;
23408
+ constructor(portAllocator: LoopbackPortAllocator, configLoader: AppConfigLoader, pluginDiscovery: CodemationPluginDiscovery);
23409
+ create(args: DevApiRuntimeFactoryArgs): Promise<DevApiRuntimeServerHandle>;
23410
+ }
23411
+ //#endregion
23021
23412
  //#region src/dev/DevBootstrapSummaryFetcher.d.ts
23022
23413
  /**
23023
- * Fetches {@link DevBootstrapSummaryJson} from the dev gateway (proxied to runtime-dev).
23414
+ * Fetches {@link DevBootstrapSummaryJson} from the stable CLI-owned dev endpoint.
23024
23415
  */
23025
23416
  declare class DevBootstrapSummaryFetcher {
23026
23417
  fetch(gatewayBaseUrl: string): Promise<DevBootstrapSummaryJson | null>;
23027
23418
  }
23028
23419
  //#endregion
23420
+ //#region src/dev/ListenPortConflictDescriber.d.ts
23421
+ declare class ListenPortConflictDescriber {
23422
+ private readonly platform;
23423
+ constructor(platform?: NodeJS.Platform);
23424
+ describeLoopbackPort(port: number): Promise<string | null>;
23425
+ private readLsofOutput;
23426
+ private parseLsofOutput;
23427
+ }
23428
+ //#endregion
23429
+ //#region src/dev/CliDevProxyServer.d.ts
23430
+ type ProxyRuntimeTarget = Readonly<{
23431
+ httpPort: number;
23432
+ workflowWebSocketPort: number;
23433
+ }>;
23434
+ type BuildStatus = "idle" | "building";
23435
+ declare class CliDevProxyServer {
23436
+ private readonly listenPort;
23437
+ private readonly listenPortConflictDescriber;
23438
+ private readonly proxy;
23439
+ private readonly devClients;
23440
+ private readonly devWss;
23441
+ private readonly workflowClients;
23442
+ private readonly workflowWss;
23443
+ private readonly roomIdsByWorkflowClient;
23444
+ private readonly workflowClientCountByRoomId;
23445
+ private activeRuntime;
23446
+ private activeBuildStatus;
23447
+ private childWorkflowSocket;
23448
+ private server;
23449
+ private uiProxyTarget;
23450
+ constructor(listenPort: number, listenPortConflictDescriber: ListenPortConflictDescriber);
23451
+ start(): Promise<void>;
23452
+ stop(): Promise<void>;
23453
+ setUiProxyTarget(target: string | null): void;
23454
+ activateRuntime(target: ProxyRuntimeTarget | null): Promise<void>;
23455
+ setBuildStatus(status: BuildStatus): void;
23456
+ broadcastBuildStarted(): void;
23457
+ broadcastBuildCompleted(buildVersion: string): void;
23458
+ broadcastBuildFailed(message: string): void;
23459
+ private bindDevWebSocket;
23460
+ private bindWorkflowWebSocket;
23461
+ private handleHttpRequest;
23462
+ private handleUpgrade;
23463
+ private safePathname;
23464
+ private rejectListenError;
23465
+ private broadcastDev;
23466
+ private broadcastWorkflowLifecycleToSubscribedRooms;
23467
+ private connectWorkflowClient;
23468
+ private disconnectWorkflowClient;
23469
+ private handleWorkflowClientMessage;
23470
+ private parseWorkflowClientMessage;
23471
+ private retainWorkflowRoom;
23472
+ private releaseWorkflowRoom;
23473
+ private sendToChildWorkflowSocket;
23474
+ private connectChildWorkflowSocket;
23475
+ private openChildWorkflowSocket;
23476
+ private disconnectChildWorkflowSocket;
23477
+ private handleChildWorkflowSocketMessage;
23478
+ private broadcastWorkflowTextToRoom;
23479
+ private broadcastWorkflowTextToAll;
23480
+ }
23481
+ //#endregion
23482
+ //#region src/dev/CliDevProxyServerFactory.d.ts
23483
+ declare class CliDevProxyServerFactory {
23484
+ private readonly listenPortConflictDescriber;
23485
+ create(gatewayPort: number): CliDevProxyServer;
23486
+ }
23487
+ //#endregion
23029
23488
  //#region src/dev/DevCliBannerRenderer.d.ts
23030
23489
  /**
23031
23490
  * Dev-only stdout branding (not the structured host logger).
@@ -23074,6 +23533,30 @@ declare class ConsumerEnvDotenvFilePredicate {
23074
23533
  matches(filePath: string): boolean;
23075
23534
  }
23076
23535
  //#endregion
23536
+ //#region src/dev/DevRebuildQueue.d.ts
23537
+ type DevRebuildRequest = Readonly<{
23538
+ changedPaths: ReadonlyArray<string>;
23539
+ shouldRepublishConsumerOutput: boolean;
23540
+ shouldRestartUi: boolean;
23541
+ }>;
23542
+ interface DevRebuildHandler {
23543
+ run(request: DevRebuildRequest): Promise<void>;
23544
+ }
23545
+ declare class DevRebuildQueue {
23546
+ private readonly handler;
23547
+ private pendingRequest;
23548
+ private drainPromise;
23549
+ constructor(handler: DevRebuildHandler);
23550
+ enqueue(request: DevRebuildRequest): Promise<void>;
23551
+ private drain;
23552
+ private mergePendingRequest;
23553
+ }
23554
+ //#endregion
23555
+ //#region src/dev/DevRebuildQueueFactory.d.ts
23556
+ declare class DevRebuildQueueFactory {
23557
+ create(handler: DevRebuildHandler): DevRebuildQueue;
23558
+ }
23559
+ //#endregion
23077
23560
  //#region src/consumer/ConsumerEnvLoader.d.ts
23078
23561
  /**
23079
23562
  * Loads the consumer project's dotenv files so `codemation dev` can forward them to the Next host.
@@ -23103,8 +23586,9 @@ type DevResolvedAuthSettings = Readonly<{
23103
23586
  }>;
23104
23587
  declare class DevAuthSettingsLoader {
23105
23588
  private readonly configLoader;
23589
+ private readonly consumerEnvLoader;
23106
23590
  static readonly defaultDevelopmentAuthSecret = "codemation-dev-auth-secret-not-for-production";
23107
- constructor(configLoader: CodemationConsumerConfigLoader);
23591
+ constructor(configLoader: CodemationConsumerConfigLoader, consumerEnvLoader: ConsumerEnvLoader);
23108
23592
  resolveDevelopmentServerToken(rawToken: string | undefined): string;
23109
23593
  loadForConsumer(consumerRoot: string): Promise<DevResolvedAuthSettings>;
23110
23594
  resolveDevelopmentAuthSecret(env: NodeJS.ProcessEnv): string;
@@ -23115,7 +23599,7 @@ declare class DevHttpProbe {
23115
23599
  waitUntilUrlRespondsOk(url: string): Promise<void>;
23116
23600
  waitUntilGatewayHealthy(gatewayBaseUrl: string): Promise<void>;
23117
23601
  /**
23118
- * Polls until the runtime child serves bootstrap summary (after gateway is up, the disposable runtime may still be wiring).
23602
+ * Polls until the active disposable runtime serves bootstrap summary through the stable CLI dev endpoint.
23119
23603
  */
23120
23604
  waitUntilBootstrapSummaryReady(gatewayBaseUrl: string): Promise<void>;
23121
23605
  private isRedirectStatus;
@@ -23125,7 +23609,9 @@ declare class DevHttpProbe {
23125
23609
  declare class DevNextHostEnvironmentBuilder {
23126
23610
  private readonly consumerEnvLoader;
23127
23611
  private readonly sourceMapNodeOptions;
23128
- constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions);
23612
+ private readonly frontendAuthSnapshotFactory;
23613
+ private readonly frontendAppConfigJsonCodec;
23614
+ constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions, frontendAuthSnapshotFactory?: CodemationFrontendAuthSnapshotFactory, frontendAppConfigJsonCodec?: FrontendAppConfigJsonCodec);
23129
23615
  buildConsumerUiProxy(args: Readonly<{
23130
23616
  authConfigJson: string;
23131
23617
  authSecret: string;
@@ -23140,6 +23626,7 @@ declare class DevNextHostEnvironmentBuilder {
23140
23626
  }>): NodeJS.ProcessEnv;
23141
23627
  build(args: Readonly<{
23142
23628
  authConfigJson: string;
23629
+ authSecret?: string;
23143
23630
  consumerRoot: string;
23144
23631
  developmentServerToken: string;
23145
23632
  nextPort: number;
@@ -23149,6 +23636,7 @@ declare class DevNextHostEnvironmentBuilder {
23149
23636
  /** Same manifest as `codemation build` / serve-web so @codemation/next-host can load consumer config (whitelabel, etc.). */
23150
23637
  consumerOutputManifestPath?: string;
23151
23638
  }>): NodeJS.ProcessEnv;
23639
+ private parseAuthConfig;
23152
23640
  }
23153
23641
  //#endregion
23154
23642
  //#region src/runtime/ListenPortResolver.d.ts
@@ -23165,18 +23653,13 @@ declare class ListenPortResolver {
23165
23653
  }>): number;
23166
23654
  }
23167
23655
  //#endregion
23168
- //#region src/dev/LoopbackPortAllocator.d.ts
23169
- declare class LoopbackPortAllocator {
23170
- allocate(): Promise<number>;
23171
- }
23172
- //#endregion
23173
23656
  //#region src/dev/DevSessionPortsResolver.d.ts
23174
23657
  declare class DevSessionPortsResolver {
23175
23658
  private readonly listenPorts;
23176
23659
  private readonly loopbackPorts;
23177
23660
  constructor(listenPorts: ListenPortResolver, loopbackPorts: LoopbackPortAllocator);
23178
23661
  resolve(args: Readonly<{
23179
- devMode: "consumer" | "framework";
23662
+ devMode: "packaged-ui" | "watch-framework";
23180
23663
  portEnv: string | undefined;
23181
23664
  gatewayPortEnv: string | undefined;
23182
23665
  }>): Promise<Readonly<{
@@ -23187,63 +23670,24 @@ declare class DevSessionPortsResolver {
23187
23670
  //#endregion
23188
23671
  //#region src/dev/DevSourceChangeClassifier.d.ts
23189
23672
  declare class DevSourceChangeClassifier {
23673
+ private static readonly configFileNames;
23190
23674
  shouldRepublishConsumerOutput(args: Readonly<{
23191
23675
  changedPaths: ReadonlyArray<string>;
23192
23676
  consumerRoot: string;
23193
23677
  }>): boolean;
23194
- requiresNextHostRestart(args: Readonly<{
23678
+ requiresUiRestart(args: Readonly<{
23195
23679
  changedPaths: ReadonlyArray<string>;
23196
23680
  consumerRoot: string;
23197
23681
  }>): boolean;
23198
- private resolveConfigPaths;
23199
23682
  private isPathInsideDirectory;
23200
- }
23201
- //#endregion
23202
- //#region src/dev/DevelopmentGatewayNotifier.d.ts
23203
- declare class DevelopmentGatewayNotifier {
23204
- private readonly cliLogger;
23205
- constructor(cliLogger: Logger);
23206
- notify(args: Readonly<{
23207
- gatewayBaseUrl: string;
23208
- developmentServerToken: string;
23209
- payload: Readonly<{
23210
- kind: "buildStarted" | "buildCompleted" | "buildFailed";
23211
- buildVersion?: string;
23212
- message?: string;
23213
- }>;
23214
- }>): Promise<void>;
23215
- }
23216
- //#endregion
23217
- //#region src/dev/DevSourceRestartCoordinator.d.ts
23218
- declare class DevSourceRestartCoordinator {
23219
- private readonly gatewayNotifier;
23220
- private readonly performanceDiagnosticsLogger;
23221
- private readonly cliLogger;
23222
- constructor(gatewayNotifier: DevelopmentGatewayNotifier, performanceDiagnosticsLogger: Logger, cliLogger: Logger);
23223
- runHandshakeAfterSourceChange(gatewayBaseUrl: string, developmentServerToken: string): Promise<void>;
23224
- }
23225
- //#endregion
23226
- //#region src/dev/RuntimeToolEntrypointResolver.d.ts
23227
- type ResolvedRuntimeToolEntrypoint = Readonly<{
23228
- args: ReadonlyArray<string>;
23229
- command: string;
23230
- env: Readonly<Record<string, string>>;
23231
- }>;
23232
- declare class RuntimeToolEntrypointResolver {
23233
- private readonly require;
23234
- resolve(args: Readonly<{
23235
- packageName: string;
23236
- repoRoot: string;
23237
- sourceEntrypoint: string;
23238
- }>): Promise<ResolvedRuntimeToolEntrypoint>;
23239
- private exists;
23683
+ private pathRequiresUiRestart;
23240
23684
  }
23241
23685
  //#endregion
23242
23686
  //#region src/dev/WatchRootsResolver.d.ts
23243
23687
  declare class WatchRootsResolver {
23244
23688
  resolve(args: Readonly<{
23245
23689
  consumerRoot: string;
23246
- devMode: "consumer" | "framework";
23690
+ devMode: "packaged-ui" | "watch-framework";
23247
23691
  repoRoot: string;
23248
23692
  }>): ReadonlyArray<string>;
23249
23693
  }
@@ -23258,13 +23702,11 @@ declare class DevSessionServices {
23258
23702
  readonly sessionPorts: DevSessionPortsResolver;
23259
23703
  readonly loopbackPortAllocator: LoopbackPortAllocator;
23260
23704
  readonly devHttpProbe: DevHttpProbe;
23261
- readonly runtimeEntrypointResolver: RuntimeToolEntrypointResolver;
23262
23705
  readonly devAuthLoader: DevAuthSettingsLoader;
23263
23706
  readonly nextHostEnvBuilder: DevNextHostEnvironmentBuilder;
23264
23707
  readonly watchRootsResolver: WatchRootsResolver;
23265
23708
  readonly sourceChangeClassifier: DevSourceChangeClassifier;
23266
- readonly sourceRestartCoordinator: DevSourceRestartCoordinator;
23267
- constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions, sessionPorts: DevSessionPortsResolver, loopbackPortAllocator: LoopbackPortAllocator, devHttpProbe: DevHttpProbe, runtimeEntrypointResolver: RuntimeToolEntrypointResolver, devAuthLoader: DevAuthSettingsLoader, nextHostEnvBuilder: DevNextHostEnvironmentBuilder, watchRootsResolver: WatchRootsResolver, sourceChangeClassifier: DevSourceChangeClassifier, sourceRestartCoordinator: DevSourceRestartCoordinator);
23709
+ constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions, sessionPorts: DevSessionPortsResolver, loopbackPortAllocator: LoopbackPortAllocator, devHttpProbe: DevHttpProbe, devAuthLoader: DevAuthSettingsLoader, nextHostEnvBuilder: DevNextHostEnvironmentBuilder, watchRootsResolver: WatchRootsResolver, sourceChangeClassifier: DevSourceChangeClassifier);
23268
23710
  }
23269
23711
  //#endregion
23270
23712
  //#region src/dev/DevLock.d.ts
@@ -23347,7 +23789,6 @@ declare class NextHostConsumerServerCommandFactory {
23347
23789
  //#region src/commands/DevCommand.d.ts
23348
23790
  declare class DevCommand {
23349
23791
  private readonly pathResolver;
23350
- private readonly pluginDiscovery;
23351
23792
  private readonly tsRuntime;
23352
23793
  private readonly devLockFactory;
23353
23794
  private readonly devSourceWatcherFactory;
@@ -23360,40 +23801,44 @@ declare class DevCommand {
23360
23801
  private readonly consumerEnvDotenvFilePredicate;
23361
23802
  private readonly devTrackedProcessTreeKiller;
23362
23803
  private readonly nextHostConsumerServerCommandFactory;
23804
+ private readonly devApiRuntimeFactory;
23805
+ private readonly cliDevProxyServerFactory;
23806
+ private readonly devRebuildQueueFactory;
23363
23807
  private readonly require;
23364
- constructor(pathResolver: CliPathResolver, pluginDiscovery: CodemationPluginDiscovery, tsRuntime: TypeScriptRuntimeConfigurator, devLockFactory: DevLockFactory, devSourceWatcherFactory: DevSourceWatcherFactory, cliLogger: Logger, session: DevSessionServices, databaseMigrationsApplyService: DatabaseMigrationsApplyService, devBootstrapSummaryFetcher: DevBootstrapSummaryFetcher, devCliBannerRenderer: DevCliBannerRenderer, devConsumerPublishBootstrap: DevConsumerPublishBootstrap, consumerEnvDotenvFilePredicate: ConsumerEnvDotenvFilePredicate, devTrackedProcessTreeKiller: DevTrackedProcessTreeKiller, nextHostConsumerServerCommandFactory: NextHostConsumerServerCommandFactory);
23365
- execute(consumerRoot: string): Promise<void>;
23366
- private resolveDevModeFromEnv;
23808
+ constructor(pathResolver: CliPathResolver, tsRuntime: TypeScriptRuntimeConfigurator, devLockFactory: DevLockFactory, devSourceWatcherFactory: DevSourceWatcherFactory, cliLogger: Logger, session: DevSessionServices, databaseMigrationsApplyService: DatabaseMigrationsApplyService, devBootstrapSummaryFetcher: DevBootstrapSummaryFetcher, devCliBannerRenderer: DevCliBannerRenderer, devConsumerPublishBootstrap: DevConsumerPublishBootstrap, consumerEnvDotenvFilePredicate: ConsumerEnvDotenvFilePredicate, devTrackedProcessTreeKiller: DevTrackedProcessTreeKiller, nextHostConsumerServerCommandFactory: NextHostConsumerServerCommandFactory, devApiRuntimeFactory: DevApiRuntimeFactory, cliDevProxyServerFactory: CliDevProxyServerFactory, devRebuildQueueFactory: DevRebuildQueueFactory);
23809
+ execute(args: Readonly<{
23810
+ consumerRoot: string;
23811
+ watchFramework?: boolean;
23812
+ }>): Promise<void>;
23813
+ private resolveDevMode;
23367
23814
  private prepareDevRuntime;
23368
23815
  private createInitialProcessState;
23369
23816
  private wireStopPromise;
23370
23817
  private gatewayBaseHttpUrl;
23371
- /**
23372
- * Consumer mode: run `next start` for the host UI and wait until it responds, so the gateway can proxy to it.
23373
- * Framework mode: no separate UI child (Next runs in dev later).
23374
- */
23375
- private startConsumerUiProxyWhenNeeded;
23376
- private spawnConsumerUiProxy;
23377
- private spawnGatewayChildAndWaitForHealth;
23818
+ private startPackagedUiWhenNeeded;
23819
+ private spawnPackagedUi;
23820
+ private startProxyServer;
23821
+ private bootInitialRuntime;
23378
23822
  private devDetachedChildSpawnOptions;
23379
23823
  private bindShutdownSignalsToChildProcesses;
23380
- /**
23381
- * Framework mode: run `next dev` for the Next host with HMR, pointed at the dev gateway runtime URL.
23382
- */
23383
- private spawnFrameworkNextHostWhenNeeded;
23384
- private spawnFrameworkNextHost;
23824
+ private spawnDevUiWhenNeeded;
23825
+ private spawnDevUi;
23385
23826
  private startWatcherForSourceRestart;
23386
- private restartNextHostForConfigChange;
23387
- private restartConsumerUiProxy;
23388
- private restartFrameworkNextHost;
23827
+ private runQueuedRebuild;
23828
+ private restartUiAfterSourceChange;
23829
+ private restartPackagedUi;
23830
+ private restartDevUi;
23389
23831
  private failDevSessionAfterIrrecoverableSourceError;
23390
- private stopLiveChildProcesses;
23391
- private logConsumerDevHintWhenNeeded;
23832
+ private stopLiveProcesses;
23833
+ private stopCurrentRuntime;
23834
+ private createRuntime;
23835
+ private logPackagedUiDevHintWhenNeeded;
23392
23836
  }
23393
23837
  //#endregion
23394
23838
  //#region src/commands/ServeWebCommand.d.ts
23395
23839
  declare class ServeWebCommand {
23396
23840
  private readonly pathResolver;
23841
+ private readonly configLoader;
23397
23842
  private readonly pluginDiscovery;
23398
23843
  private readonly artifactsPublisher;
23399
23844
  private readonly tsRuntime;
@@ -23402,17 +23847,21 @@ declare class ServeWebCommand {
23402
23847
  private readonly envLoader;
23403
23848
  private readonly listenPortResolver;
23404
23849
  private readonly nextHostConsumerServerCommandFactory;
23850
+ private readonly frontendAuthSnapshotFactory;
23851
+ private readonly frontendAppConfigJsonCodec;
23405
23852
  private readonly require;
23406
- constructor(pathResolver: CliPathResolver, pluginDiscovery: CodemationPluginDiscovery, artifactsPublisher: ConsumerBuildArtifactsPublisher, tsRuntime: TypeScriptRuntimeConfigurator, sourceMapNodeOptions: SourceMapNodeOptions, outputBuilderLoader: ConsumerOutputBuilderLoader, envLoader: ConsumerEnvLoader, listenPortResolver: ListenPortResolver, nextHostConsumerServerCommandFactory: NextHostConsumerServerCommandFactory);
23853
+ constructor(pathResolver: CliPathResolver, configLoader: CodemationConsumerConfigLoader, pluginDiscovery: CodemationPluginDiscovery, artifactsPublisher: ConsumerBuildArtifactsPublisher, tsRuntime: TypeScriptRuntimeConfigurator, sourceMapNodeOptions: SourceMapNodeOptions, outputBuilderLoader: ConsumerOutputBuilderLoader, envLoader: ConsumerEnvLoader, listenPortResolver: ListenPortResolver, nextHostConsumerServerCommandFactory: NextHostConsumerServerCommandFactory, frontendAuthSnapshotFactory: CodemationFrontendAuthSnapshotFactory, frontendAppConfigJsonCodec: FrontendAppConfigJsonCodec);
23407
23854
  execute(consumerRoot: string, buildOptions: ConsumerBuildOptions): Promise<void>;
23408
23855
  }
23409
23856
  //#endregion
23410
23857
  //#region src/commands/ServeWorkerCommand.d.ts
23411
23858
  declare class ServeWorkerCommand {
23412
- private readonly sourceMapNodeOptions;
23413
- private readonly require;
23414
- constructor(sourceMapNodeOptions: SourceMapNodeOptions);
23859
+ private readonly pathResolver;
23860
+ private readonly appConfigLoader;
23861
+ private readonly appContainerFactory;
23862
+ constructor(pathResolver: CliPathResolver, appConfigLoader: AppConfigLoader, appContainerFactory: AppContainerFactory);
23415
23863
  execute(consumerRoot: string, configPathOverride?: string): Promise<void>;
23864
+ private bindSignals;
23416
23865
  }
23417
23866
  //#endregion
23418
23867
  //#region src/user/UserAdminCliBootstrap.d.ts
@@ -23424,12 +23873,11 @@ type UserAdminCliOptions = Readonly<{
23424
23873
  * Shared env/config/session wiring for `codemation user *` commands (local auth + database).
23425
23874
  */
23426
23875
  declare class UserAdminCliBootstrap {
23427
- private readonly configLoader;
23876
+ private readonly appConfigLoader;
23428
23877
  private readonly pathResolver;
23429
23878
  private readonly consumerDotenvLoader;
23430
23879
  private readonly tsconfigPreparation;
23431
- private readonly databasePersistenceResolver;
23432
- constructor(configLoader: CodemationConsumerConfigLoader, pathResolver: CliPathResolver, consumerDotenvLoader: UserAdminConsumerDotenvLoader, tsconfigPreparation: ConsumerCliTsconfigPreparation, databasePersistenceResolver: DatabasePersistenceResolver);
23880
+ constructor(appConfigLoader: AppConfigLoader, pathResolver: CliPathResolver, consumerDotenvLoader: UserAdminConsumerDotenvLoader, tsconfigPreparation: ConsumerCliTsconfigPreparation);
23433
23881
  withSession<T$1>(options: UserAdminCliOptions, fn: (session: CodemationCliApplicationSession) => Promise<T$1>): Promise<T$1>;
23434
23882
  }
23435
23883
  //#endregion