@codemation/cli 0.0.4 → 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-900C8Din.js → CliBin-Bx1lFBi5.js} +1125 -340
  3. package/dist/bin.js +1 -1
  4. package/dist/index.d.ts +669 -197
  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 +302 -158
  11. package/src/commands/ServeWebCommand.ts +26 -1
  12. package/src/commands/ServeWorkerCommand.ts +46 -30
  13. package/src/commands/devCommandLifecycle.types.ts +7 -9
  14. package/src/database/ConsumerDatabaseConnectionResolver.ts +55 -9
  15. package/src/database/DatabaseMigrationsApplyService.ts +2 -2
  16. package/src/dev/Builder.ts +3 -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 +8 -4
  26. package/src/dev/DevNextHostEnvironmentBuilder.ts +65 -3
  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 +2 -4
  31. package/src/dev/DevSourceChangeClassifier.ts +59 -0
  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,18 +23588,34 @@ 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>;
23594
+ private isRedirectStatus;
23121
23595
  }
23122
23596
  //#endregion
23123
23597
  //#region src/dev/DevNextHostEnvironmentBuilder.d.ts
23124
23598
  declare class DevNextHostEnvironmentBuilder {
23125
23599
  private readonly consumerEnvLoader;
23126
23600
  private readonly sourceMapNodeOptions;
23127
- constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions);
23601
+ private readonly frontendAuthSnapshotFactory;
23602
+ private readonly frontendAppConfigJsonCodec;
23603
+ constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions, frontendAuthSnapshotFactory?: CodemationFrontendAuthSnapshotFactory, frontendAppConfigJsonCodec?: FrontendAppConfigJsonCodec);
23604
+ buildConsumerUiProxy(args: Readonly<{
23605
+ authConfigJson: string;
23606
+ authSecret: string;
23607
+ consumerRoot: string;
23608
+ developmentServerToken: string;
23609
+ nextPort: number;
23610
+ publicBaseUrl: string;
23611
+ runtimeDevUrl: string;
23612
+ skipUiAuth: boolean;
23613
+ websocketPort: number;
23614
+ consumerOutputManifestPath?: string;
23615
+ }>): NodeJS.ProcessEnv;
23128
23616
  build(args: Readonly<{
23129
23617
  authConfigJson: string;
23618
+ authSecret?: string;
23130
23619
  consumerRoot: string;
23131
23620
  developmentServerToken: string;
23132
23621
  nextPort: number;
@@ -23136,6 +23625,7 @@ declare class DevNextHostEnvironmentBuilder {
23136
23625
  /** Same manifest as `codemation build` / serve-web so @codemation/next-host can load consumer config (whitelabel, etc.). */
23137
23626
  consumerOutputManifestPath?: string;
23138
23627
  }>): NodeJS.ProcessEnv;
23628
+ private parseAuthConfig;
23139
23629
  }
23140
23630
  //#endregion
23141
23631
  //#region src/runtime/ListenPortResolver.d.ts
@@ -23152,18 +23642,13 @@ declare class ListenPortResolver {
23152
23642
  }>): number;
23153
23643
  }
23154
23644
  //#endregion
23155
- //#region src/dev/LoopbackPortAllocator.d.ts
23156
- declare class LoopbackPortAllocator {
23157
- allocate(): Promise<number>;
23158
- }
23159
- //#endregion
23160
23645
  //#region src/dev/DevSessionPortsResolver.d.ts
23161
23646
  declare class DevSessionPortsResolver {
23162
23647
  private readonly listenPorts;
23163
23648
  private readonly loopbackPorts;
23164
23649
  constructor(listenPorts: ListenPortResolver, loopbackPorts: LoopbackPortAllocator);
23165
23650
  resolve(args: Readonly<{
23166
- devMode: "consumer" | "framework";
23651
+ devMode: "packaged-ui" | "watch-framework";
23167
23652
  portEnv: string | undefined;
23168
23653
  gatewayPortEnv: string | undefined;
23169
23654
  }>): Promise<Readonly<{
@@ -23172,51 +23657,26 @@ declare class DevSessionPortsResolver {
23172
23657
  }>>;
23173
23658
  }
23174
23659
  //#endregion
23175
- //#region src/dev/DevelopmentGatewayNotifier.d.ts
23176
- declare class DevelopmentGatewayNotifier {
23177
- private readonly cliLogger;
23178
- constructor(cliLogger: Logger);
23179
- notify(args: Readonly<{
23180
- gatewayBaseUrl: string;
23181
- developmentServerToken: string;
23182
- payload: Readonly<{
23183
- kind: "buildStarted" | "buildCompleted" | "buildFailed";
23184
- buildVersion?: string;
23185
- message?: string;
23186
- }>;
23187
- }>): Promise<void>;
23188
- }
23189
- //#endregion
23190
- //#region src/dev/DevSourceRestartCoordinator.d.ts
23191
- declare class DevSourceRestartCoordinator {
23192
- private readonly gatewayNotifier;
23193
- private readonly performanceDiagnosticsLogger;
23194
- private readonly cliLogger;
23195
- constructor(gatewayNotifier: DevelopmentGatewayNotifier, performanceDiagnosticsLogger: Logger, cliLogger: Logger);
23196
- runHandshakeAfterSourceChange(gatewayBaseUrl: string, developmentServerToken: string): Promise<void>;
23197
- }
23198
- //#endregion
23199
- //#region src/dev/RuntimeToolEntrypointResolver.d.ts
23200
- type ResolvedRuntimeToolEntrypoint = Readonly<{
23201
- args: ReadonlyArray<string>;
23202
- command: string;
23203
- env: Readonly<Record<string, string>>;
23204
- }>;
23205
- declare class RuntimeToolEntrypointResolver {
23206
- private readonly require;
23207
- resolve(args: Readonly<{
23208
- packageName: string;
23209
- repoRoot: string;
23210
- sourceEntrypoint: string;
23211
- }>): Promise<ResolvedRuntimeToolEntrypoint>;
23212
- private exists;
23660
+ //#region src/dev/DevSourceChangeClassifier.d.ts
23661
+ declare class DevSourceChangeClassifier {
23662
+ private static readonly configFileNames;
23663
+ shouldRepublishConsumerOutput(args: Readonly<{
23664
+ changedPaths: ReadonlyArray<string>;
23665
+ consumerRoot: string;
23666
+ }>): boolean;
23667
+ requiresUiRestart(args: Readonly<{
23668
+ changedPaths: ReadonlyArray<string>;
23669
+ consumerRoot: string;
23670
+ }>): boolean;
23671
+ private isPathInsideDirectory;
23672
+ private pathRequiresUiRestart;
23213
23673
  }
23214
23674
  //#endregion
23215
23675
  //#region src/dev/WatchRootsResolver.d.ts
23216
23676
  declare class WatchRootsResolver {
23217
23677
  resolve(args: Readonly<{
23218
23678
  consumerRoot: string;
23219
- devMode: "consumer" | "framework";
23679
+ devMode: "packaged-ui" | "watch-framework";
23220
23680
  repoRoot: string;
23221
23681
  }>): ReadonlyArray<string>;
23222
23682
  }
@@ -23231,12 +23691,11 @@ declare class DevSessionServices {
23231
23691
  readonly sessionPorts: DevSessionPortsResolver;
23232
23692
  readonly loopbackPortAllocator: LoopbackPortAllocator;
23233
23693
  readonly devHttpProbe: DevHttpProbe;
23234
- readonly runtimeEntrypointResolver: RuntimeToolEntrypointResolver;
23235
23694
  readonly devAuthLoader: DevAuthSettingsLoader;
23236
23695
  readonly nextHostEnvBuilder: DevNextHostEnvironmentBuilder;
23237
23696
  readonly watchRootsResolver: WatchRootsResolver;
23238
- readonly sourceRestartCoordinator: DevSourceRestartCoordinator;
23239
- constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions, sessionPorts: DevSessionPortsResolver, loopbackPortAllocator: LoopbackPortAllocator, devHttpProbe: DevHttpProbe, runtimeEntrypointResolver: RuntimeToolEntrypointResolver, devAuthLoader: DevAuthSettingsLoader, nextHostEnvBuilder: DevNextHostEnvironmentBuilder, watchRootsResolver: WatchRootsResolver, sourceRestartCoordinator: DevSourceRestartCoordinator);
23697
+ readonly sourceChangeClassifier: DevSourceChangeClassifier;
23698
+ constructor(consumerEnvLoader: ConsumerEnvLoader, sourceMapNodeOptions: SourceMapNodeOptions, sessionPorts: DevSessionPortsResolver, loopbackPortAllocator: LoopbackPortAllocator, devHttpProbe: DevHttpProbe, devAuthLoader: DevAuthSettingsLoader, nextHostEnvBuilder: DevNextHostEnvironmentBuilder, watchRootsResolver: WatchRootsResolver, sourceChangeClassifier: DevSourceChangeClassifier);
23240
23699
  }
23241
23700
  //#endregion
23242
23701
  //#region src/dev/DevLock.d.ts
@@ -23319,7 +23778,6 @@ declare class NextHostConsumerServerCommandFactory {
23319
23778
  //#region src/commands/DevCommand.d.ts
23320
23779
  declare class DevCommand {
23321
23780
  private readonly pathResolver;
23322
- private readonly pluginDiscovery;
23323
23781
  private readonly tsRuntime;
23324
23782
  private readonly devLockFactory;
23325
23783
  private readonly devSourceWatcherFactory;
@@ -23332,33 +23790,44 @@ declare class DevCommand {
23332
23790
  private readonly consumerEnvDotenvFilePredicate;
23333
23791
  private readonly devTrackedProcessTreeKiller;
23334
23792
  private readonly nextHostConsumerServerCommandFactory;
23793
+ private readonly devApiRuntimeFactory;
23794
+ private readonly cliDevProxyServerFactory;
23795
+ private readonly devRebuildQueueFactory;
23335
23796
  private readonly require;
23336
- 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);
23337
- execute(consumerRoot: string): Promise<void>;
23338
- 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;
23339
23803
  private prepareDevRuntime;
23340
23804
  private createInitialProcessState;
23341
23805
  private wireStopPromise;
23342
23806
  private gatewayBaseHttpUrl;
23343
- /**
23344
- * Consumer mode: run `next start` for the host UI and wait until it responds, so the gateway can proxy to it.
23345
- * Framework mode: no separate UI child (Next runs in dev later).
23346
- */
23347
- private startConsumerUiProxyWhenNeeded;
23348
- private spawnGatewayChildAndWaitForHealth;
23807
+ private startPackagedUiWhenNeeded;
23808
+ private spawnPackagedUi;
23809
+ private startProxyServer;
23810
+ private bootInitialRuntime;
23349
23811
  private devDetachedChildSpawnOptions;
23350
23812
  private bindShutdownSignalsToChildProcesses;
23351
- /**
23352
- * Framework mode: run `next dev` for the Next host with HMR, pointed at the dev gateway runtime URL.
23353
- */
23354
- private spawnFrameworkNextHostWhenNeeded;
23813
+ private spawnDevUiWhenNeeded;
23814
+ private spawnDevUi;
23355
23815
  private startWatcherForSourceRestart;
23356
- private logConsumerDevHintWhenNeeded;
23816
+ private runQueuedRebuild;
23817
+ private restartUiAfterSourceChange;
23818
+ private restartPackagedUi;
23819
+ private restartDevUi;
23820
+ private failDevSessionAfterIrrecoverableSourceError;
23821
+ private stopLiveProcesses;
23822
+ private stopCurrentRuntime;
23823
+ private createRuntime;
23824
+ private logPackagedUiDevHintWhenNeeded;
23357
23825
  }
23358
23826
  //#endregion
23359
23827
  //#region src/commands/ServeWebCommand.d.ts
23360
23828
  declare class ServeWebCommand {
23361
23829
  private readonly pathResolver;
23830
+ private readonly configLoader;
23362
23831
  private readonly pluginDiscovery;
23363
23832
  private readonly artifactsPublisher;
23364
23833
  private readonly tsRuntime;
@@ -23367,17 +23836,21 @@ declare class ServeWebCommand {
23367
23836
  private readonly envLoader;
23368
23837
  private readonly listenPortResolver;
23369
23838
  private readonly nextHostConsumerServerCommandFactory;
23839
+ private readonly frontendAuthSnapshotFactory;
23840
+ private readonly frontendAppConfigJsonCodec;
23370
23841
  private readonly require;
23371
- 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);
23372
23843
  execute(consumerRoot: string, buildOptions: ConsumerBuildOptions): Promise<void>;
23373
23844
  }
23374
23845
  //#endregion
23375
23846
  //#region src/commands/ServeWorkerCommand.d.ts
23376
23847
  declare class ServeWorkerCommand {
23377
- private readonly sourceMapNodeOptions;
23378
- private readonly require;
23379
- constructor(sourceMapNodeOptions: SourceMapNodeOptions);
23848
+ private readonly pathResolver;
23849
+ private readonly appConfigLoader;
23850
+ private readonly appContainerFactory;
23851
+ constructor(pathResolver: CliPathResolver, appConfigLoader: AppConfigLoader, appContainerFactory: AppContainerFactory);
23380
23852
  execute(consumerRoot: string, configPathOverride?: string): Promise<void>;
23853
+ private bindSignals;
23381
23854
  }
23382
23855
  //#endregion
23383
23856
  //#region src/user/UserAdminCliBootstrap.d.ts
@@ -23389,12 +23862,11 @@ type UserAdminCliOptions = Readonly<{
23389
23862
  * Shared env/config/session wiring for `codemation user *` commands (local auth + database).
23390
23863
  */
23391
23864
  declare class UserAdminCliBootstrap {
23392
- private readonly configLoader;
23865
+ private readonly appConfigLoader;
23393
23866
  private readonly pathResolver;
23394
23867
  private readonly consumerDotenvLoader;
23395
23868
  private readonly tsconfigPreparation;
23396
- private readonly databasePersistenceResolver;
23397
- constructor(configLoader: CodemationConsumerConfigLoader, pathResolver: CliPathResolver, consumerDotenvLoader: UserAdminConsumerDotenvLoader, tsconfigPreparation: ConsumerCliTsconfigPreparation, databasePersistenceResolver: DatabasePersistenceResolver);
23869
+ constructor(appConfigLoader: AppConfigLoader, pathResolver: CliPathResolver, consumerDotenvLoader: UserAdminConsumerDotenvLoader, tsconfigPreparation: ConsumerCliTsconfigPreparation);
23398
23870
  withSession<T$1>(options: UserAdminCliOptions, fn: (session: CodemationCliApplicationSession) => Promise<T$1>): Promise<T$1>;
23399
23871
  }
23400
23872
  //#endregion