@codemation/cli 0.0.5 → 0.0.7

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-Bx1lFBi5.js} +1041 -365
  3. package/dist/bin.js +1 -1
  4. package/dist/index.d.ts +644 -207
  5. package/dist/index.js +1 -1
  6. package/package.json +9 -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 +202 -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 +447 -0
  18. package/src/dev/CliDevProxyServerFactory.ts +7 -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/WatchRootsResolver.ts +6 -4
  33. package/src/runtime/NextHostConsumerServerCommandFactory.ts +11 -2
  34. package/src/runtime/TypeScriptRuntimeConfigurator.ts +7 -0
  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;
@@ -22921,6 +23283,7 @@ declare class CliPathResolver {
22921
23283
  //#region src/runtime/TypeScriptRuntimeConfigurator.d.ts
22922
23284
  declare class TypeScriptRuntimeConfigurator {
22923
23285
  configure(repoRoot: string): void;
23286
+ private hasExplicitOverride;
22924
23287
  }
22925
23288
  //#endregion
22926
23289
  //#region src/commands/BuildCommand.d.ts
@@ -22949,8 +23312,9 @@ declare class ConsumerCliTsconfigPreparation {
22949
23312
  * Resolves TCP PostgreSQL vs PGlite vs none from env + {@link CodemationConfig} (same rules as the host runtime).
22950
23313
  */
22951
23314
  declare class ConsumerDatabaseConnectionResolver {
22952
- private readonly resolver;
22953
- resolve(processEnv: NodeJS.ProcessEnv, config: CodemationConfig, consumerRoot: string): ResolvedDatabasePersistence;
23315
+ resolve(processEnv: NodeJS.ProcessEnv, config: CodemationConfig, consumerRoot: string): AppPersistenceConfig;
23316
+ private resolveDatabaseKind;
23317
+ private resolvePgliteDataDir;
22954
23318
  }
22955
23319
  //#endregion
22956
23320
  //#region src/user/CliDatabaseUrlDescriptor.d.ts
@@ -22958,7 +23322,7 @@ declare class ConsumerDatabaseConnectionResolver {
22958
23322
  * Formats a database URL for CLI messages without exposing credentials (no user/password).
22959
23323
  */
22960
23324
  declare class CliDatabaseUrlDescriptor {
22961
- describePersistence(persistence: ResolvedDatabasePersistence): string;
23325
+ describePersistence(persistence: AppPersistenceConfig): string;
22962
23326
  describeForDisplay(databaseUrl: string | undefined): string;
22963
23327
  }
22964
23328
  //#endregion
@@ -22976,7 +23340,7 @@ declare class UserAdminConsumerDotenvLoader {
22976
23340
  //#endregion
22977
23341
  //#region src/database/DatabaseMigrationsApplyService.d.ts
22978
23342
  type DatabaseMigrationDeployer = {
22979
- deployPersistence(persistence: ResolvedDatabasePersistence, env?: Readonly<NodeJS.ProcessEnv>): Promise<void>;
23343
+ deployPersistence(persistence: AppPersistenceConfig, env?: Readonly<NodeJS.ProcessEnv>): Promise<void>;
22980
23344
  };
22981
23345
  /**
22982
23346
  * Loads consumer config + env, resolves persistence, and runs Prisma migrations.
@@ -23018,14 +23382,98 @@ declare class DbMigrateCommand {
23018
23382
  execute(options: DbMigrateCommandOptions): Promise<void>;
23019
23383
  }
23020
23384
  //#endregion
23385
+ //#region src/dev/LoopbackPortAllocator.d.ts
23386
+ declare class LoopbackPortAllocator {
23387
+ allocate(): Promise<number>;
23388
+ }
23389
+ //#endregion
23390
+ //#region src/dev/DevApiRuntimeTypes.d.ts
23391
+ type DevApiRuntimeFactoryArgs = Readonly<{
23392
+ consumerRoot: string;
23393
+ env: NodeJS.ProcessEnv;
23394
+ runtimeWorkingDirectory: string;
23395
+ }>;
23396
+ type DevApiRuntimeServerHandle = Readonly<{
23397
+ buildVersion: string;
23398
+ httpPort: number;
23399
+ stop: () => Promise<void>;
23400
+ workflowIds: ReadonlyArray<string>;
23401
+ workflowWebSocketPort: number;
23402
+ }>;
23403
+ //#endregion
23404
+ //#region src/dev/DevApiRuntimeFactory.d.ts
23405
+ declare class DevApiRuntimeFactory {
23406
+ private readonly portAllocator;
23407
+ private readonly configLoader;
23408
+ private readonly pluginDiscovery;
23409
+ constructor(portAllocator: LoopbackPortAllocator, configLoader: AppConfigLoader, pluginDiscovery: CodemationPluginDiscovery);
23410
+ create(args: DevApiRuntimeFactoryArgs): Promise<DevApiRuntimeServerHandle>;
23411
+ }
23412
+ //#endregion
23021
23413
  //#region src/dev/DevBootstrapSummaryFetcher.d.ts
23022
23414
  /**
23023
- * Fetches {@link DevBootstrapSummaryJson} from the dev gateway (proxied to runtime-dev).
23415
+ * Fetches {@link DevBootstrapSummaryJson} from the stable CLI-owned dev endpoint.
23024
23416
  */
23025
23417
  declare class DevBootstrapSummaryFetcher {
23026
23418
  fetch(gatewayBaseUrl: string): Promise<DevBootstrapSummaryJson | null>;
23027
23419
  }
23028
23420
  //#endregion
23421
+ //#region src/dev/CliDevProxyServer.d.ts
23422
+ type ProxyRuntimeTarget = Readonly<{
23423
+ httpPort: number;
23424
+ workflowWebSocketPort: number;
23425
+ }>;
23426
+ type BuildStatus = "idle" | "building";
23427
+ declare class CliDevProxyServer {
23428
+ private readonly listenPort;
23429
+ private readonly proxy;
23430
+ private readonly devClients;
23431
+ private readonly devWss;
23432
+ private readonly workflowClients;
23433
+ private readonly workflowWss;
23434
+ private readonly roomIdsByWorkflowClient;
23435
+ private readonly workflowClientCountByRoomId;
23436
+ private activeRuntime;
23437
+ private activeBuildStatus;
23438
+ private childWorkflowSocket;
23439
+ private server;
23440
+ private uiProxyTarget;
23441
+ constructor(listenPort: number);
23442
+ start(): Promise<void>;
23443
+ stop(): Promise<void>;
23444
+ setUiProxyTarget(target: string | null): void;
23445
+ activateRuntime(target: ProxyRuntimeTarget | null): Promise<void>;
23446
+ setBuildStatus(status: BuildStatus): void;
23447
+ broadcastBuildStarted(): void;
23448
+ broadcastBuildCompleted(buildVersion: string): void;
23449
+ broadcastBuildFailed(message: string): void;
23450
+ private bindDevWebSocket;
23451
+ private bindWorkflowWebSocket;
23452
+ private handleHttpRequest;
23453
+ private handleUpgrade;
23454
+ private safePathname;
23455
+ private broadcastDev;
23456
+ private broadcastWorkflowLifecycleToSubscribedRooms;
23457
+ private connectWorkflowClient;
23458
+ private disconnectWorkflowClient;
23459
+ private handleWorkflowClientMessage;
23460
+ private parseWorkflowClientMessage;
23461
+ private retainWorkflowRoom;
23462
+ private releaseWorkflowRoom;
23463
+ private sendToChildWorkflowSocket;
23464
+ private connectChildWorkflowSocket;
23465
+ private openChildWorkflowSocket;
23466
+ private disconnectChildWorkflowSocket;
23467
+ private handleChildWorkflowSocketMessage;
23468
+ private broadcastWorkflowTextToRoom;
23469
+ private broadcastWorkflowTextToAll;
23470
+ }
23471
+ //#endregion
23472
+ //#region src/dev/CliDevProxyServerFactory.d.ts
23473
+ declare class CliDevProxyServerFactory {
23474
+ create(gatewayPort: number): CliDevProxyServer;
23475
+ }
23476
+ //#endregion
23029
23477
  //#region src/dev/DevCliBannerRenderer.d.ts
23030
23478
  /**
23031
23479
  * Dev-only stdout branding (not the structured host logger).
@@ -23074,6 +23522,30 @@ declare class ConsumerEnvDotenvFilePredicate {
23074
23522
  matches(filePath: string): boolean;
23075
23523
  }
23076
23524
  //#endregion
23525
+ //#region src/dev/DevRebuildQueue.d.ts
23526
+ type DevRebuildRequest = Readonly<{
23527
+ changedPaths: ReadonlyArray<string>;
23528
+ shouldRepublishConsumerOutput: boolean;
23529
+ shouldRestartUi: boolean;
23530
+ }>;
23531
+ interface DevRebuildHandler {
23532
+ run(request: DevRebuildRequest): Promise<void>;
23533
+ }
23534
+ declare class DevRebuildQueue {
23535
+ private readonly handler;
23536
+ private pendingRequest;
23537
+ private drainPromise;
23538
+ constructor(handler: DevRebuildHandler);
23539
+ enqueue(request: DevRebuildRequest): Promise<void>;
23540
+ private drain;
23541
+ private mergePendingRequest;
23542
+ }
23543
+ //#endregion
23544
+ //#region src/dev/DevRebuildQueueFactory.d.ts
23545
+ declare class DevRebuildQueueFactory {
23546
+ create(handler: DevRebuildHandler): DevRebuildQueue;
23547
+ }
23548
+ //#endregion
23077
23549
  //#region src/consumer/ConsumerEnvLoader.d.ts
23078
23550
  /**
23079
23551
  * Loads the consumer project's dotenv files so `codemation dev` can forward them to the Next host.
@@ -23103,8 +23575,9 @@ type DevResolvedAuthSettings = Readonly<{
23103
23575
  }>;
23104
23576
  declare class DevAuthSettingsLoader {
23105
23577
  private readonly configLoader;
23578
+ private readonly consumerEnvLoader;
23106
23579
  static readonly defaultDevelopmentAuthSecret = "codemation-dev-auth-secret-not-for-production";
23107
- constructor(configLoader: CodemationConsumerConfigLoader);
23580
+ constructor(configLoader: CodemationConsumerConfigLoader, consumerEnvLoader: ConsumerEnvLoader);
23108
23581
  resolveDevelopmentServerToken(rawToken: string | undefined): string;
23109
23582
  loadForConsumer(consumerRoot: string): Promise<DevResolvedAuthSettings>;
23110
23583
  resolveDevelopmentAuthSecret(env: NodeJS.ProcessEnv): string;
@@ -23115,7 +23588,7 @@ declare class DevHttpProbe {
23115
23588
  waitUntilUrlRespondsOk(url: string): Promise<void>;
23116
23589
  waitUntilGatewayHealthy(gatewayBaseUrl: string): Promise<void>;
23117
23590
  /**
23118
- * Polls until the runtime child serves bootstrap summary (after gateway is up, the disposable runtime may still be wiring).
23591
+ * Polls until the active disposable runtime serves bootstrap summary through the stable CLI dev endpoint.
23119
23592
  */
23120
23593
  waitUntilBootstrapSummaryReady(gatewayBaseUrl: string): Promise<void>;
23121
23594
  private isRedirectStatus;
@@ -23125,7 +23598,9 @@ declare class DevHttpProbe {
23125
23598
  declare class DevNextHostEnvironmentBuilder {
23126
23599
  private readonly consumerEnvLoader;
23127
23600
  private readonly sourceMapNodeOptions;
23128
- constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions);
23601
+ private readonly frontendAuthSnapshotFactory;
23602
+ private readonly frontendAppConfigJsonCodec;
23603
+ constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions, frontendAuthSnapshotFactory?: CodemationFrontendAuthSnapshotFactory, frontendAppConfigJsonCodec?: FrontendAppConfigJsonCodec);
23129
23604
  buildConsumerUiProxy(args: Readonly<{
23130
23605
  authConfigJson: string;
23131
23606
  authSecret: string;
@@ -23140,6 +23615,7 @@ declare class DevNextHostEnvironmentBuilder {
23140
23615
  }>): NodeJS.ProcessEnv;
23141
23616
  build(args: Readonly<{
23142
23617
  authConfigJson: string;
23618
+ authSecret?: string;
23143
23619
  consumerRoot: string;
23144
23620
  developmentServerToken: string;
23145
23621
  nextPort: number;
@@ -23149,6 +23625,7 @@ declare class DevNextHostEnvironmentBuilder {
23149
23625
  /** Same manifest as `codemation build` / serve-web so @codemation/next-host can load consumer config (whitelabel, etc.). */
23150
23626
  consumerOutputManifestPath?: string;
23151
23627
  }>): NodeJS.ProcessEnv;
23628
+ private parseAuthConfig;
23152
23629
  }
23153
23630
  //#endregion
23154
23631
  //#region src/runtime/ListenPortResolver.d.ts
@@ -23165,18 +23642,13 @@ declare class ListenPortResolver {
23165
23642
  }>): number;
23166
23643
  }
23167
23644
  //#endregion
23168
- //#region src/dev/LoopbackPortAllocator.d.ts
23169
- declare class LoopbackPortAllocator {
23170
- allocate(): Promise<number>;
23171
- }
23172
- //#endregion
23173
23645
  //#region src/dev/DevSessionPortsResolver.d.ts
23174
23646
  declare class DevSessionPortsResolver {
23175
23647
  private readonly listenPorts;
23176
23648
  private readonly loopbackPorts;
23177
23649
  constructor(listenPorts: ListenPortResolver, loopbackPorts: LoopbackPortAllocator);
23178
23650
  resolve(args: Readonly<{
23179
- devMode: "consumer" | "framework";
23651
+ devMode: "packaged-ui" | "watch-framework";
23180
23652
  portEnv: string | undefined;
23181
23653
  gatewayPortEnv: string | undefined;
23182
23654
  }>): Promise<Readonly<{
@@ -23187,63 +23659,24 @@ declare class DevSessionPortsResolver {
23187
23659
  //#endregion
23188
23660
  //#region src/dev/DevSourceChangeClassifier.d.ts
23189
23661
  declare class DevSourceChangeClassifier {
23662
+ private static readonly configFileNames;
23190
23663
  shouldRepublishConsumerOutput(args: Readonly<{
23191
23664
  changedPaths: ReadonlyArray<string>;
23192
23665
  consumerRoot: string;
23193
23666
  }>): boolean;
23194
- requiresNextHostRestart(args: Readonly<{
23667
+ requiresUiRestart(args: Readonly<{
23195
23668
  changedPaths: ReadonlyArray<string>;
23196
23669
  consumerRoot: string;
23197
23670
  }>): boolean;
23198
- private resolveConfigPaths;
23199
23671
  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;
23672
+ private pathRequiresUiRestart;
23240
23673
  }
23241
23674
  //#endregion
23242
23675
  //#region src/dev/WatchRootsResolver.d.ts
23243
23676
  declare class WatchRootsResolver {
23244
23677
  resolve(args: Readonly<{
23245
23678
  consumerRoot: string;
23246
- devMode: "consumer" | "framework";
23679
+ devMode: "packaged-ui" | "watch-framework";
23247
23680
  repoRoot: string;
23248
23681
  }>): ReadonlyArray<string>;
23249
23682
  }
@@ -23258,13 +23691,11 @@ declare class DevSessionServices {
23258
23691
  readonly sessionPorts: DevSessionPortsResolver;
23259
23692
  readonly loopbackPortAllocator: LoopbackPortAllocator;
23260
23693
  readonly devHttpProbe: DevHttpProbe;
23261
- readonly runtimeEntrypointResolver: RuntimeToolEntrypointResolver;
23262
23694
  readonly devAuthLoader: DevAuthSettingsLoader;
23263
23695
  readonly nextHostEnvBuilder: DevNextHostEnvironmentBuilder;
23264
23696
  readonly watchRootsResolver: WatchRootsResolver;
23265
23697
  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);
23698
+ constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions, sessionPorts: DevSessionPortsResolver, loopbackPortAllocator: LoopbackPortAllocator, devHttpProbe: DevHttpProbe, devAuthLoader: DevAuthSettingsLoader, nextHostEnvBuilder: DevNextHostEnvironmentBuilder, watchRootsResolver: WatchRootsResolver, sourceChangeClassifier: DevSourceChangeClassifier);
23268
23699
  }
23269
23700
  //#endregion
23270
23701
  //#region src/dev/DevLock.d.ts
@@ -23347,7 +23778,6 @@ declare class NextHostConsumerServerCommandFactory {
23347
23778
  //#region src/commands/DevCommand.d.ts
23348
23779
  declare class DevCommand {
23349
23780
  private readonly pathResolver;
23350
- private readonly pluginDiscovery;
23351
23781
  private readonly tsRuntime;
23352
23782
  private readonly devLockFactory;
23353
23783
  private readonly devSourceWatcherFactory;
@@ -23360,40 +23790,44 @@ declare class DevCommand {
23360
23790
  private readonly consumerEnvDotenvFilePredicate;
23361
23791
  private readonly devTrackedProcessTreeKiller;
23362
23792
  private readonly nextHostConsumerServerCommandFactory;
23793
+ private readonly devApiRuntimeFactory;
23794
+ private readonly cliDevProxyServerFactory;
23795
+ private readonly devRebuildQueueFactory;
23363
23796
  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;
23797
+ 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);
23798
+ execute(args: Readonly<{
23799
+ consumerRoot: string;
23800
+ watchFramework?: boolean;
23801
+ }>): Promise<void>;
23802
+ private resolveDevMode;
23367
23803
  private prepareDevRuntime;
23368
23804
  private createInitialProcessState;
23369
23805
  private wireStopPromise;
23370
23806
  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;
23807
+ private startPackagedUiWhenNeeded;
23808
+ private spawnPackagedUi;
23809
+ private startProxyServer;
23810
+ private bootInitialRuntime;
23378
23811
  private devDetachedChildSpawnOptions;
23379
23812
  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;
23813
+ private spawnDevUiWhenNeeded;
23814
+ private spawnDevUi;
23385
23815
  private startWatcherForSourceRestart;
23386
- private restartNextHostForConfigChange;
23387
- private restartConsumerUiProxy;
23388
- private restartFrameworkNextHost;
23816
+ private runQueuedRebuild;
23817
+ private restartUiAfterSourceChange;
23818
+ private restartPackagedUi;
23819
+ private restartDevUi;
23389
23820
  private failDevSessionAfterIrrecoverableSourceError;
23390
- private stopLiveChildProcesses;
23391
- private logConsumerDevHintWhenNeeded;
23821
+ private stopLiveProcesses;
23822
+ private stopCurrentRuntime;
23823
+ private createRuntime;
23824
+ private logPackagedUiDevHintWhenNeeded;
23392
23825
  }
23393
23826
  //#endregion
23394
23827
  //#region src/commands/ServeWebCommand.d.ts
23395
23828
  declare class ServeWebCommand {
23396
23829
  private readonly pathResolver;
23830
+ private readonly configLoader;
23397
23831
  private readonly pluginDiscovery;
23398
23832
  private readonly artifactsPublisher;
23399
23833
  private readonly tsRuntime;
@@ -23402,17 +23836,21 @@ declare class ServeWebCommand {
23402
23836
  private readonly envLoader;
23403
23837
  private readonly listenPortResolver;
23404
23838
  private readonly nextHostConsumerServerCommandFactory;
23839
+ private readonly frontendAuthSnapshotFactory;
23840
+ private readonly frontendAppConfigJsonCodec;
23405
23841
  private readonly require;
23406
- constructor(pathResolver: CliPathResolver, pluginDiscovery: CodemationPluginDiscovery, artifactsPublisher: ConsumerBuildArtifactsPublisher, tsRuntime: TypeScriptRuntimeConfigurator, sourceMapNodeOptions: SourceMapNodeOptions, outputBuilderLoader: ConsumerOutputBuilderLoader, envLoader: ConsumerEnvLoader, listenPortResolver: ListenPortResolver, nextHostConsumerServerCommandFactory: NextHostConsumerServerCommandFactory);
23842
+ 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
23843
  execute(consumerRoot: string, buildOptions: ConsumerBuildOptions): Promise<void>;
23408
23844
  }
23409
23845
  //#endregion
23410
23846
  //#region src/commands/ServeWorkerCommand.d.ts
23411
23847
  declare class ServeWorkerCommand {
23412
- private readonly sourceMapNodeOptions;
23413
- private readonly require;
23414
- constructor(sourceMapNodeOptions: SourceMapNodeOptions);
23848
+ private readonly pathResolver;
23849
+ private readonly appConfigLoader;
23850
+ private readonly appContainerFactory;
23851
+ constructor(pathResolver: CliPathResolver, appConfigLoader: AppConfigLoader, appContainerFactory: AppContainerFactory);
23415
23852
  execute(consumerRoot: string, configPathOverride?: string): Promise<void>;
23853
+ private bindSignals;
23416
23854
  }
23417
23855
  //#endregion
23418
23856
  //#region src/user/UserAdminCliBootstrap.d.ts
@@ -23424,12 +23862,11 @@ type UserAdminCliOptions = Readonly<{
23424
23862
  * Shared env/config/session wiring for `codemation user *` commands (local auth + database).
23425
23863
  */
23426
23864
  declare class UserAdminCliBootstrap {
23427
- private readonly configLoader;
23865
+ private readonly appConfigLoader;
23428
23866
  private readonly pathResolver;
23429
23867
  private readonly consumerDotenvLoader;
23430
23868
  private readonly tsconfigPreparation;
23431
- private readonly databasePersistenceResolver;
23432
- constructor(configLoader: CodemationConsumerConfigLoader, pathResolver: CliPathResolver, consumerDotenvLoader: UserAdminConsumerDotenvLoader, tsconfigPreparation: ConsumerCliTsconfigPreparation, databasePersistenceResolver: DatabasePersistenceResolver);
23869
+ constructor(appConfigLoader: AppConfigLoader, pathResolver: CliPathResolver, consumerDotenvLoader: UserAdminConsumerDotenvLoader, tsconfigPreparation: ConsumerCliTsconfigPreparation);
23433
23870
  withSession<T$1>(options: UserAdminCliOptions, fn: (session: CodemationCliApplicationSession) => Promise<T$1>): Promise<T$1>;
23434
23871
  }
23435
23872
  //#endregion