@bastani/atomic 0.9.28-alpha.4 → 0.9.28-alpha.5

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 (126) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  3. package/dist/builtin/intercom/README.md +3 -2
  4. package/dist/builtin/intercom/broker/broker.ts +90 -14
  5. package/dist/builtin/intercom/broker/paths.ts +4 -0
  6. package/dist/builtin/intercom/broker/socket-liveness.ts +32 -0
  7. package/dist/builtin/intercom/broker/socket-replacement-lock.ts +104 -0
  8. package/dist/builtin/intercom/broker/spawn.ts +108 -63
  9. package/dist/builtin/intercom/index.bundle.mjs +114 -61
  10. package/dist/builtin/intercom/package.json +1 -1
  11. package/dist/builtin/mcp/package.json +1 -1
  12. package/dist/builtin/subagents/package.json +1 -1
  13. package/dist/builtin/web-access/package.json +1 -1
  14. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  15. package/dist/builtin/workflows/builtin/{chunk-aqv8ny38.js → chunk-9ywkdsa9.js} +1 -1
  16. package/dist/builtin/workflows/builtin/{chunk-p6jagvyf.js → chunk-bnz4knhy.js} +1 -1
  17. package/dist/builtin/workflows/builtin/{chunk-br4ac9a3.js → chunk-dx5sjaxe.js} +1 -1
  18. package/dist/builtin/workflows/builtin/{chunk-p3xmajmj.js → chunk-v4scsq3y.js} +41 -13
  19. package/dist/builtin/workflows/builtin/goal.js +2 -2
  20. package/dist/builtin/workflows/builtin/index.js +3 -3
  21. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  22. package/dist/builtin/workflows/package.json +1 -1
  23. package/dist/builtin/workflows/src/extension/index.bundle.mjs +38 -14
  24. package/dist/builtin/workflows/src/index.js +38 -14
  25. package/dist/cli/startup-ui.d.ts +3 -2
  26. package/dist/cli/startup-ui.d.ts.map +1 -1
  27. package/dist/cli/startup-ui.js +19 -4
  28. package/dist/cli/startup-ui.js.map +1 -1
  29. package/dist/core/agent-session-runtime.d.ts +5 -1
  30. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  31. package/dist/core/agent-session-runtime.js +13 -9
  32. package/dist/core/agent-session-runtime.js.map +1 -1
  33. package/dist/core/extensions/session-events.d.ts +2 -0
  34. package/dist/core/extensions/session-events.d.ts.map +1 -1
  35. package/dist/core/extensions/session-events.js.map +1 -1
  36. package/dist/core/provider-alias.d.ts.map +1 -1
  37. package/dist/core/provider-alias.js +8 -0
  38. package/dist/core/provider-alias.js.map +1 -1
  39. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  40. package/dist/core/provider-composer-internal.js +6 -3
  41. package/dist/core/provider-composer-internal.js.map +1 -1
  42. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  43. package/dist/core/resource-loader-reload.js +1 -0
  44. package/dist/core/resource-loader-reload.js.map +1 -1
  45. package/dist/core/resource-loader-types.d.ts +1 -0
  46. package/dist/core/resource-loader-types.d.ts.map +1 -1
  47. package/dist/core/resource-loader-types.js.map +1 -1
  48. package/dist/extensions/herdr/index.d.ts.map +1 -1
  49. package/dist/extensions/herdr/index.js +20 -2
  50. package/dist/extensions/herdr/index.js.map +1 -1
  51. package/dist/extensions/herdr/pane-owner.d.ts +7 -0
  52. package/dist/extensions/herdr/pane-owner.d.ts.map +1 -1
  53. package/dist/extensions/herdr/pane-owner.js +53 -11
  54. package/dist/extensions/herdr/pane-owner.js.map +1 -1
  55. package/dist/main-deferred-startup.d.ts +8 -0
  56. package/dist/main-deferred-startup.d.ts.map +1 -1
  57. package/dist/main-deferred-startup.js +6 -0
  58. package/dist/main-deferred-startup.js.map +1 -1
  59. package/dist/main.d.ts.map +1 -1
  60. package/dist/main.js +11 -3
  61. package/dist/main.js.map +1 -1
  62. package/dist/modes/interactive/interactive-auth-routing.js +2 -2
  63. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  64. package/dist/modes/interactive/interactive-extension-dialogs.js +8 -0
  65. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  66. package/dist/modes/interactive/interactive-mode-base.d.ts +1 -0
  67. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  68. package/dist/modes/interactive/interactive-mode-base.js +1 -0
  69. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  70. package/dist/modes/interactive/interactive-mode-helpers.js +1 -1
  71. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  72. package/dist/modes/interactive/interactive-mode-types.d.ts +1 -0
  73. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  74. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  75. package/dist/modes/interactive/interactive-process-lifecycle.js +1 -1
  76. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  77. package/dist/modes/interactive/interactive-startup-trust.d.ts +6 -0
  78. package/dist/modes/interactive/interactive-startup-trust.d.ts.map +1 -0
  79. package/dist/modes/interactive/interactive-startup-trust.js +15 -0
  80. package/dist/modes/interactive/interactive-startup-trust.js.map +1 -0
  81. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  82. package/dist/modes/interactive/interactive-startup.js +3 -0
  83. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  84. package/dist/modes/interactive-engine/engine-child-liveness.d.ts +1 -0
  85. package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -1
  86. package/dist/modes/interactive-engine/engine-child-liveness.js +15 -1
  87. package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -1
  88. package/dist/modes/interactive-engine/engine-monitor.d.ts +4 -0
  89. package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
  90. package/dist/modes/interactive-engine/engine-monitor.js +17 -0
  91. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  92. package/dist/modes/interactive-engine/engine-quit-intent.d.ts +16 -0
  93. package/dist/modes/interactive-engine/engine-quit-intent.d.ts.map +1 -0
  94. package/dist/modes/interactive-engine/engine-quit-intent.js +27 -0
  95. package/dist/modes/interactive-engine/engine-quit-intent.js.map +1 -0
  96. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +1 -0
  97. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  98. package/dist/modes/interactive-engine/extension-ui-bridge.js +5 -0
  99. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  100. package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -1
  101. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  102. package/dist/modes/interactive-engine/isolated-runtime.js +19 -2
  103. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  104. package/dist/modes/interactive-engine/protocol.d.ts +18 -1
  105. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  106. package/dist/modes/interactive-engine/protocol.js +6 -0
  107. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  108. package/dist/modes/rpc/rpc-client.d.ts +11 -0
  109. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  110. package/dist/modes/rpc/rpc-client.js +42 -0
  111. package/dist/modes/rpc/rpc-client.js.map +1 -1
  112. package/dist/modes/rpc/rpc-input-scheduler.js +2 -2
  113. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  114. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  115. package/dist/modes/rpc/rpc-mode.js +23 -6
  116. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  117. package/dist/modes/rpc/rpc-provider-auth.js +1 -1
  118. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  119. package/docs/extensions/events.md +3 -0
  120. package/docs/herdr.md +11 -2
  121. package/docs/models.md +1 -1
  122. package/docs/providers.md +2 -0
  123. package/docs/sdk.md +1 -1
  124. package/docs/settings.md +1 -1
  125. package/npm-shrinkwrap.json +32 -32
  126. package/package.json +3 -3
@@ -38352,6 +38352,7 @@ class PostgresHealth {
38352
38352
  attempts = 0;
38353
38353
  nextRecoveryAt = 0;
38354
38354
  failure;
38355
+ failureUnanswered = false;
38355
38356
  healthySinceFailure = false;
38356
38357
  revision = 0;
38357
38358
  listeners = new Set;
@@ -38364,10 +38365,11 @@ class PostgresHealth {
38364
38365
  get endpoint() {
38365
38366
  return this.operations.url?.();
38366
38367
  }
38367
- retainFailure(error) {
38368
+ retainFailure(error, unanswered = false) {
38368
38369
  const message = error instanceof Error ? error.message : String(error);
38369
38370
  const safe = redactedDatabaseMessage(message, this.endpoint);
38370
38371
  this.failure = new Error(safe);
38372
+ this.failureUnanswered = unanswered;
38371
38373
  this.healthySinceFailure = false;
38372
38374
  }
38373
38375
  dependencyFailure(message) {
@@ -38395,7 +38397,7 @@ class PostgresHealth {
38395
38397
  await this.operations.validate?.(client);
38396
38398
  }
38397
38399
  } catch (error) {
38398
- this.retainFailure(error);
38400
+ this.retainFailure(error, isQueryReadTimeout(error));
38399
38401
  if (!isQueryReadTimeout(error)) {
38400
38402
  this.invalidate();
38401
38403
  if (this.endpoint === undefined)
@@ -38433,19 +38435,39 @@ class PostgresHealth {
38433
38435
  }
38434
38436
  async probe() {
38435
38437
  const revision = this.revision;
38438
+ const now = this.operations.now ?? Date.now;
38439
+ const wait = this.operations.wait ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
38436
38440
  let identity;
38437
38441
  try {
38438
38442
  identity = await this.operations.probe();
38439
38443
  } catch (error) {
38440
38444
  if (!(isMonitoringConnectionFailure(error) || isQueryReadTimeout(error)) || this.stopped)
38441
38445
  throw error;
38442
- try {
38443
- identity = await this.operations.probe();
38444
- } catch (retryError) {
38445
- if (isMonitoringConnectionTimeout(retryError) || !isMonitoringConnectionFailure(retryError))
38446
- throw retryError;
38447
- this.retainFailure(retryError);
38448
- return;
38446
+ const deadline = now() + MONITORING_PROBE_RETRY_WINDOW_MS;
38447
+ let delay = MONITORING_PROBE_RETRY_INITIAL_MS;
38448
+ let failure = error;
38449
+ for (;; ) {
38450
+ if (isMonitoringConnectionTimeout(failure) || isQueryReadTimeout(failure)) {
38451
+ if (now() >= deadline)
38452
+ throw failure;
38453
+ await wait(delay);
38454
+ delay = Math.min(delay * 2, MONITORING_PROBE_RETRY_MAX_MS);
38455
+ if (this.stopped)
38456
+ throw failure;
38457
+ }
38458
+ try {
38459
+ identity = await this.operations.probe();
38460
+ break;
38461
+ } catch (retryError) {
38462
+ if (isMonitoringConnectionTimeout(retryError) || isQueryReadTimeout(retryError)) {
38463
+ failure = retryError;
38464
+ continue;
38465
+ }
38466
+ if (!isMonitoringConnectionFailure(retryError))
38467
+ throw retryError;
38468
+ this.retainFailure(retryError);
38469
+ return;
38470
+ }
38449
38471
  }
38450
38472
  }
38451
38473
  if (revision !== this.revision)
@@ -38460,6 +38482,8 @@ class PostgresHealth {
38460
38482
  this.attempts = 0;
38461
38483
  this.nextRecoveryAt = 0;
38462
38484
  this.healthySinceFailure = true;
38485
+ if (this.failureUnanswered)
38486
+ this.failure = undefined;
38463
38487
  return identity.url;
38464
38488
  }
38465
38489
  async refresh() {
@@ -38469,7 +38493,7 @@ class PostgresHealth {
38469
38493
  return ready;
38470
38494
  } catch (error) {
38471
38495
  if (isQueryReadTimeout(error) || isMonitoringConnectionTimeout(error)) {
38472
- this.retainFailure(new Error("Managed PostgreSQL did not answer a health check in time."));
38496
+ this.retainFailure(new Error("Managed PostgreSQL did not answer a health check in time."), true);
38473
38497
  throw this.dependencyFailure("Managed PostgreSQL did not answer a health check in time.");
38474
38498
  }
38475
38499
  this.retainFailure(error);
@@ -38504,7 +38528,7 @@ class PostgresHealth {
38504
38528
  throw this.dependencyFailure("Managed Postgres is unavailable after bounded recovery. Preserve its data and ownership records.");
38505
38529
  }
38506
38530
  }
38507
- var HEALTH_INTERVAL_MS = 5000, RECOVERY_ATTEMPTS = 3;
38531
+ var HEALTH_INTERVAL_MS = 5000, RECOVERY_ATTEMPTS = 3, MONITORING_PROBE_RETRY_WINDOW_MS = 15000, MONITORING_PROBE_RETRY_INITIAL_MS = 250, MONITORING_PROBE_RETRY_MAX_MS = 2000;
38508
38532
  var init_dbos_postgres_health = __esm(() => {
38509
38533
  init_dbos_admission();
38510
38534
  });
@@ -38742,7 +38766,7 @@ async function probePostgresTimezoneData(port) {
38742
38766
  password: "atomic",
38743
38767
  database: "postgres",
38744
38768
  ssl: false,
38745
- connectionTimeoutMillis: 1000,
38769
+ connectionTimeoutMillis: POSTGRES_HEALTH_CONNECT_TIMEOUT_MS,
38746
38770
  query_timeout: POSTGRES_HEALTH_QUERY_TIMEOUT_MS,
38747
38771
  statement_timeout: POSTGRES_HEALTH_QUERY_TIMEOUT_MS
38748
38772
  });
@@ -38762,7 +38786,7 @@ async function probePostgresIdentity(port) {
38762
38786
  password: "atomic",
38763
38787
  database: "postgres",
38764
38788
  ssl: false,
38765
- connectionTimeoutMillis: 1000,
38789
+ connectionTimeoutMillis: POSTGRES_HEALTH_CONNECT_TIMEOUT_MS,
38766
38790
  query_timeout: POSTGRES_HEALTH_QUERY_TIMEOUT_MS,
38767
38791
  statement_timeout: POSTGRES_HEALTH_QUERY_TIMEOUT_MS
38768
38792
  });
@@ -38838,7 +38862,7 @@ async function verifyPostgresIdentity(metadata, port, expectedPid, probe = probe
38838
38862
  var POSTGRES_IDENTITY_SQL = `SELECT current_setting('data_directory') AS data_dir,
38839
38863
  inet_server_port() AS port, host(inet_server_addr()) AS host,
38840
38864
  split_part(pg_read_file('postmaster.pid'), E'\\n', 3) AS started,
38841
- system_identifier::text, current_setting('server_version') AS server_version FROM pg_control_system()`, POSTGRES_TIMEZONE_SQL = "SELECT set_config('timezone_abbreviations', 'Default', true)", POSTGRES_HEALTH_QUERY_TIMEOUT_MS = 3000;
38865
+ system_identifier::text, current_setting('server_version') AS server_version FROM pg_control_system()`, POSTGRES_TIMEZONE_SQL = "SELECT set_config('timezone_abbreviations', 'Default', true)", POSTGRES_HEALTH_QUERY_TIMEOUT_MS = 3000, POSTGRES_HEALTH_CONNECT_TIMEOUT_MS = 3000;
38842
38866
  var init_dbos_postgres_identity = __esm(() => {
38843
38867
  init_esm();
38844
38868
  init_dbos_postgres_health();
@@ -36837,6 +36837,7 @@ class PostgresHealth {
36837
36837
  attempts = 0;
36838
36838
  nextRecoveryAt = 0;
36839
36839
  failure;
36840
+ failureUnanswered = false;
36840
36841
  healthySinceFailure = false;
36841
36842
  revision = 0;
36842
36843
  listeners = new Set;
@@ -36849,10 +36850,11 @@ class PostgresHealth {
36849
36850
  get endpoint() {
36850
36851
  return this.operations.url?.();
36851
36852
  }
36852
- retainFailure(error) {
36853
+ retainFailure(error, unanswered = false) {
36853
36854
  const message = error instanceof Error ? error.message : String(error);
36854
36855
  const safe = redactedDatabaseMessage(message, this.endpoint);
36855
36856
  this.failure = new Error(safe);
36857
+ this.failureUnanswered = unanswered;
36856
36858
  this.healthySinceFailure = false;
36857
36859
  }
36858
36860
  dependencyFailure(message) {
@@ -36880,7 +36882,7 @@ class PostgresHealth {
36880
36882
  await this.operations.validate?.(client);
36881
36883
  }
36882
36884
  } catch (error) {
36883
- this.retainFailure(error);
36885
+ this.retainFailure(error, isQueryReadTimeout(error));
36884
36886
  if (!isQueryReadTimeout(error)) {
36885
36887
  this.invalidate();
36886
36888
  if (this.endpoint === undefined)
@@ -36918,19 +36920,39 @@ class PostgresHealth {
36918
36920
  }
36919
36921
  async probe() {
36920
36922
  const revision = this.revision;
36923
+ const now = this.operations.now ?? Date.now;
36924
+ const wait = this.operations.wait ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
36921
36925
  let identity;
36922
36926
  try {
36923
36927
  identity = await this.operations.probe();
36924
36928
  } catch (error) {
36925
36929
  if (!(isMonitoringConnectionFailure(error) || isQueryReadTimeout(error)) || this.stopped)
36926
36930
  throw error;
36927
- try {
36928
- identity = await this.operations.probe();
36929
- } catch (retryError) {
36930
- if (isMonitoringConnectionTimeout(retryError) || !isMonitoringConnectionFailure(retryError))
36931
- throw retryError;
36932
- this.retainFailure(retryError);
36933
- return;
36931
+ const deadline = now() + MONITORING_PROBE_RETRY_WINDOW_MS;
36932
+ let delay = MONITORING_PROBE_RETRY_INITIAL_MS;
36933
+ let failure = error;
36934
+ for (;; ) {
36935
+ if (isMonitoringConnectionTimeout(failure) || isQueryReadTimeout(failure)) {
36936
+ if (now() >= deadline)
36937
+ throw failure;
36938
+ await wait(delay);
36939
+ delay = Math.min(delay * 2, MONITORING_PROBE_RETRY_MAX_MS);
36940
+ if (this.stopped)
36941
+ throw failure;
36942
+ }
36943
+ try {
36944
+ identity = await this.operations.probe();
36945
+ break;
36946
+ } catch (retryError) {
36947
+ if (isMonitoringConnectionTimeout(retryError) || isQueryReadTimeout(retryError)) {
36948
+ failure = retryError;
36949
+ continue;
36950
+ }
36951
+ if (!isMonitoringConnectionFailure(retryError))
36952
+ throw retryError;
36953
+ this.retainFailure(retryError);
36954
+ return;
36955
+ }
36934
36956
  }
36935
36957
  }
36936
36958
  if (revision !== this.revision)
@@ -36945,6 +36967,8 @@ class PostgresHealth {
36945
36967
  this.attempts = 0;
36946
36968
  this.nextRecoveryAt = 0;
36947
36969
  this.healthySinceFailure = true;
36970
+ if (this.failureUnanswered)
36971
+ this.failure = undefined;
36948
36972
  return identity.url;
36949
36973
  }
36950
36974
  async refresh() {
@@ -36954,7 +36978,7 @@ class PostgresHealth {
36954
36978
  return ready;
36955
36979
  } catch (error) {
36956
36980
  if (isQueryReadTimeout(error) || isMonitoringConnectionTimeout(error)) {
36957
- this.retainFailure(new Error("Managed PostgreSQL did not answer a health check in time."));
36981
+ this.retainFailure(new Error("Managed PostgreSQL did not answer a health check in time."), true);
36958
36982
  throw this.dependencyFailure("Managed PostgreSQL did not answer a health check in time.");
36959
36983
  }
36960
36984
  this.retainFailure(error);
@@ -36989,7 +37013,7 @@ class PostgresHealth {
36989
37013
  throw this.dependencyFailure("Managed Postgres is unavailable after bounded recovery. Preserve its data and ownership records.");
36990
37014
  }
36991
37015
  }
36992
- var HEALTH_INTERVAL_MS = 5000, RECOVERY_ATTEMPTS = 3;
37016
+ var HEALTH_INTERVAL_MS = 5000, RECOVERY_ATTEMPTS = 3, MONITORING_PROBE_RETRY_WINDOW_MS = 15000, MONITORING_PROBE_RETRY_INITIAL_MS = 250, MONITORING_PROBE_RETRY_MAX_MS = 2000;
36993
37017
  var init_dbos_postgres_health = __esm(() => {
36994
37018
  init_dbos_admission();
36995
37019
  });
@@ -37227,7 +37251,7 @@ async function probePostgresTimezoneData(port) {
37227
37251
  password: "atomic",
37228
37252
  database: "postgres",
37229
37253
  ssl: false,
37230
- connectionTimeoutMillis: 1000,
37254
+ connectionTimeoutMillis: POSTGRES_HEALTH_CONNECT_TIMEOUT_MS,
37231
37255
  query_timeout: POSTGRES_HEALTH_QUERY_TIMEOUT_MS,
37232
37256
  statement_timeout: POSTGRES_HEALTH_QUERY_TIMEOUT_MS
37233
37257
  });
@@ -37247,7 +37271,7 @@ async function probePostgresIdentity(port) {
37247
37271
  password: "atomic",
37248
37272
  database: "postgres",
37249
37273
  ssl: false,
37250
- connectionTimeoutMillis: 1000,
37274
+ connectionTimeoutMillis: POSTGRES_HEALTH_CONNECT_TIMEOUT_MS,
37251
37275
  query_timeout: POSTGRES_HEALTH_QUERY_TIMEOUT_MS,
37252
37276
  statement_timeout: POSTGRES_HEALTH_QUERY_TIMEOUT_MS
37253
37277
  });
@@ -37323,7 +37347,7 @@ async function verifyPostgresIdentity(metadata, port, expectedPid, probe = probe
37323
37347
  var POSTGRES_IDENTITY_SQL = `SELECT current_setting('data_directory') AS data_dir,
37324
37348
  inet_server_port() AS port, host(inet_server_addr()) AS host,
37325
37349
  split_part(pg_read_file('postmaster.pid'), E'\\n', 3) AS started,
37326
- system_identifier::text, current_setting('server_version') AS server_version FROM pg_control_system()`, POSTGRES_TIMEZONE_SQL = "SELECT set_config('timezone_abbreviations', 'Default', true)", POSTGRES_HEALTH_QUERY_TIMEOUT_MS = 3000;
37350
+ system_identifier::text, current_setting('server_version') AS server_version FROM pg_control_system()`, POSTGRES_TIMEZONE_SQL = "SELECT set_config('timezone_abbreviations', 'Default', true)", POSTGRES_HEALTH_QUERY_TIMEOUT_MS = 3000, POSTGRES_HEALTH_CONNECT_TIMEOUT_MS = 3000;
37327
37351
  var init_dbos_postgres_identity = __esm(() => {
37328
37352
  init_esm();
37329
37353
  init_dbos_postgres_health();
@@ -1,4 +1,5 @@
1
1
  import { type TUI } from "@earendil-works/pi-tui";
2
+ import type { ExtensionUIDialogOptions } from "../core/extensions/index.js";
2
3
  import type { SettingsManager } from "../core/settings-manager.ts";
3
4
  import { type TerminalTheme } from "../modes/interactive/theme/theme.js";
4
5
  /**
@@ -13,6 +14,6 @@ export declare function showFirstTimeSetup(settingsManager: SettingsManager): Pr
13
14
  export declare function showStartupSelector<T>(settingsManager: SettingsManager, title: string, options: Array<{
14
15
  label: string;
15
16
  value: T;
16
- }>): Promise<T | undefined>;
17
- export declare function showStartupInput(settingsManager: SettingsManager, title: string, placeholder?: string): Promise<string | undefined>;
17
+ }>, dialogOptions?: ExtensionUIDialogOptions): Promise<T | undefined>;
18
+ export declare function showStartupInput(settingsManager: SettingsManager, title: string, placeholder?: string, dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
18
19
  //# sourceMappingURL=startup-ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"startup-ui.d.ts","sourceRoot":"","sources":["../../src/cli/startup-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAIN,KAAK,GAAG,EAER,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAOnE,OAAO,EAIN,KAAK,aAAa,EAClB,MAAM,qCAAqC,CAAC;AAiB7C;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,CAExE;AAED,mGAAmG;AACnG,wBAAgB,uBAAuB,CAAC,YAAY,GAAE,MAA0B,GAAG,OAAO,CAEzF;AAED,wBAAsB,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCxF;AAED,wBAAsB,mBAAmB,CAAC,CAAC,EAC1C,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,GACzC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA0BxB;AAED,wBAAsB,gBAAgB,CACrC,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2B7B"}
1
+ {"version":3,"file":"startup-ui.d.ts","sourceRoot":"","sources":["../../src/cli/startup-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAIN,KAAK,GAAG,EAER,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAOnE,OAAO,EAIN,KAAK,aAAa,EAClB,MAAM,qCAAqC,CAAC;AAiB7C;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,CAExE;AAED,mGAAmG;AACnG,wBAAgB,uBAAuB,CAAC,YAAY,GAAE,MAA0B,GAAG,OAAO,CAEzF;AAED,wBAAsB,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCxF;AAED,wBAAsB,mBAAmB,CAAC,CAAC,EAC1C,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,EAC3C,aAAa,CAAC,EAAE,wBAAwB,GACtC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAkCxB;AAED,wBAAsB,gBAAgB,CACrC,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,wBAAwB,GACtC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkC7B"}
@@ -71,8 +71,12 @@ export async function showFirstTimeSetup(settingsManager) {
71
71
  })();
72
72
  });
73
73
  }
74
- export async function showStartupSelector(settingsManager, title, options) {
74
+ export async function showStartupSelector(settingsManager, title, options, dialogOptions) {
75
75
  return new Promise((resolve) => {
76
+ if (dialogOptions?.signal?.aborted) {
77
+ resolve(undefined);
78
+ return;
79
+ }
76
80
  const ui = createStartupTui(settingsManager);
77
81
  let settled = false;
78
82
  const finish = async (result) => {
@@ -80,18 +84,26 @@ export async function showStartupSelector(settingsManager, title, options) {
80
84
  return;
81
85
  }
82
86
  settled = true;
87
+ dialogOptions?.signal?.removeEventListener("abort", abandon);
88
+ selector.dispose();
83
89
  await clearStartupTui(ui);
84
90
  ui.stop();
85
91
  resolve(result);
86
92
  };
87
- const selector = new ExtensionSelectorComponent(title, options.map((option) => option.label), (option) => void finish(options.find((entry) => entry.label === option)?.value), () => void finish(undefined), { tui: ui });
93
+ const abandon = () => void finish(undefined);
94
+ dialogOptions?.signal?.addEventListener("abort", abandon, { once: true });
95
+ const selector = new ExtensionSelectorComponent(title, options.map((option) => option.label), (option) => void finish(options.find((entry) => entry.label === option)?.value), () => void finish(undefined), { tui: ui, timeout: dialogOptions?.timeout });
88
96
  ui.addChild(selector);
89
97
  ui.setFocus(selector);
90
98
  ui.start();
91
99
  });
92
100
  }
93
- export async function showStartupInput(settingsManager, title, placeholder) {
101
+ export async function showStartupInput(settingsManager, title, placeholder, dialogOptions) {
94
102
  return new Promise((resolve) => {
103
+ if (dialogOptions?.signal?.aborted) {
104
+ resolve(undefined);
105
+ return;
106
+ }
95
107
  const ui = createStartupTui(settingsManager);
96
108
  let settled = false;
97
109
  const finish = async (result) => {
@@ -99,12 +111,15 @@ export async function showStartupInput(settingsManager, title, placeholder) {
99
111
  return;
100
112
  }
101
113
  settled = true;
114
+ dialogOptions?.signal?.removeEventListener("abort", abandon);
102
115
  input.dispose();
103
116
  await clearStartupTui(ui);
104
117
  ui.stop();
105
118
  resolve(result);
106
119
  };
107
- const input = new ExtensionInputComponent(title, placeholder, (value) => void finish(value), () => void finish(undefined), { tui: ui });
120
+ const abandon = () => void finish(undefined);
121
+ dialogOptions?.signal?.addEventListener("abort", abandon, { once: true });
122
+ const input = new ExtensionInputComponent(title, placeholder, (value) => void finish(value), () => void finish(undefined), { tui: ui, timeout: dialogOptions?.timeout });
108
123
  ui.addChild(input);
109
124
  ui.setFocus(input);
110
125
  ui.start();
@@ -1 +1 @@
1
- {"version":3,"file":"startup-ui.js","sourceRoot":"","sources":["../../src/cli/startup-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACN,eAAe,EACf,sBAAsB,EACtB,cAAc,EAEd,aAAa,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,uDAAuD,CAAC;AACnG,OAAO,EACN,uBAAuB,GAEvB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACN,0BAA0B,EAC1B,SAAS,EACT,QAAQ,GAER,MAAM,qCAAqC,CAAC;AAE7C,SAAS,gBAAgB,CAAC,eAAgC;IACzD,sBAAsB,CAAC,eAAe,CAAC,8BAA8B,EAAE,CAAC,CAAC;IACzE,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,IAAI,eAAe,EAAE,EAAE,eAAe,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5G,EAAE,CAAC,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAAO;IACrC,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,EAAE,CAAC,aAAa,EAAE,CAAC;IACnB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAO;IAC/C,OAAO,0BAA0B,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,uBAAuB,CAAC,YAAY,GAAW,eAAe,EAAE;IAC/E,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,eAAgC;IACxE,MAAM,EAAE,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAwC,EAAE,EAAE;YACjE,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,MAAM,EAAE,CAAC;gBACZ,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvC,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAC1D,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;YAC/B,CAAC;YACD,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;YAC1B,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QACF,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACnD,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,uBAAuB,CAAC;gBACzC,aAAa;gBACb,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;oBACxB,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACf,EAAE,CAAC,aAAa,EAAE,CAAC;gBACpB,CAAC;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;oBACpB,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrB,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE;oBACd,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC;aACD,CAAC,CAAC;YACH,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnB,EAAE,CAAC,aAAa,EAAE,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;IACN,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,eAAgC,EAChC,KAAa,EACb,OAA2C;IAE3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAE7C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAqB,EAAE,EAAE;YAC9C,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO;YACR,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;YAC1B,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,0BAA0B,CAC9C,KAAK,EACL,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EACrC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,EAC/E,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,EAC5B,EAAE,GAAG,EAAE,EAAE,EAAE,CACX,CAAC;QACF,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtB,EAAE,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,eAAgC,EAChC,KAAa,EACb,WAAoB;IAEpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAE7C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,KAAK,EAAE,MAA0B,EAAE,EAAE;YACnD,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO;YACR,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;YAC1B,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,uBAAuB,CACxC,KAAK,EACL,WAAW,EACX,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EAC7B,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,EAC5B,EAAE,GAAG,EAAE,EAAE,EAAE,CACX,CAAC;QACF,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnB,EAAE,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { existsSync } from \"node:fs\";\nimport {\n\tProcessTerminal,\n\tsetCapabilityOverrides,\n\tsetKeybindings,\n\ttype TUI,\n\tTuiMainScreen,\n} from \"@earendil-works/pi-tui\";\nimport { ENV_AGENT_DIR, getAgentDir, getEnvValue, getSettingsPath } from \"../config.js\";\nimport { KeybindingsManager } from \"../core/keybindings.ts\";\nimport type { SettingsManager } from \"../core/settings-manager.ts\";\nimport { ExtensionInputComponent } from \"../modes/interactive/components/extension-input.ts\";\nimport { ExtensionSelectorComponent } from \"../modes/interactive/components/extension-selector.ts\";\nimport {\n\tFirstTimeSetupComponent,\n\ttype FirstTimeSetupResult,\n} from \"../modes/interactive/components/first-time-setup.ts\";\nimport {\n\tdetectTerminalThemeForAuto,\n\tinitTheme,\n\tsetTheme,\n\ttype TerminalTheme,\n} from \"../modes/interactive/theme/theme.js\";\n\nfunction createStartupTui(settingsManager: SettingsManager): TUI {\n\tsetCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides());\n\tinitTheme(settingsManager.getTheme());\n\tsetKeybindings(KeybindingsManager.create());\n\tconst ui = new TuiMainScreen(new ProcessTerminal(), settingsManager.getShowHardwareCursor(), getAgentDir());\n\tui.setClearOnShrink(settingsManager.getClearOnShrink());\n\treturn ui;\n}\n\nasync function clearStartupTui(ui: TUI): Promise<void> {\n\tui.clear();\n\tui.requestRender();\n\tawait new Promise((resolve) => setTimeout(resolve, 25));\n}\n\n/**\n * Detect terminal appearance for first-run setup using one shared color query.\n * The terminal's background and foreground decide the result; unsupported\n * queries fall back to COLORFGBG and then dark.\n */\nexport async function detectStartupTheme(ui: TUI): Promise<TerminalTheme> {\n\treturn detectTerminalThemeForAuto({ ui, timeoutMs: 100 });\n}\n\n/** First-run setup is eligible only in the default agent directory before settings.json exists. */\nexport function shouldRunFirstTimeSetup(settingsPath: string = getSettingsPath()): boolean {\n\treturn !getEnvValue(ENV_AGENT_DIR) && !existsSync(settingsPath);\n}\n\nexport async function showFirstTimeSetup(settingsManager: SettingsManager): Promise<void> {\n\tconst ui = createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: FirstTimeSetupResult | undefined) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tif (result) {\n\t\t\t\tsettingsManager.setTheme(result.theme);\n\t\t\t\tsettingsManager.setEnableAnalytics(result.shareAnalytics);\n\t\t\t\tawait settingsManager.flush();\n\t\t\t}\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve();\n\t\t};\n\t\tvoid (async () => {\n\t\t\tui.start();\n\t\t\tconst detectedTheme = await detectStartupTheme(ui);\n\t\t\tsetTheme(detectedTheme);\n\t\t\tconst setup = new FirstTimeSetupComponent({\n\t\t\t\tdetectedTheme,\n\t\t\t\tonThemePreview: (name) => {\n\t\t\t\t\tsetTheme(name);\n\t\t\t\t\tui.requestRender();\n\t\t\t\t},\n\t\t\t\tonSubmit: (result) => {\n\t\t\t\t\tvoid finish(result);\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tvoid finish(undefined);\n\t\t\t\t},\n\t\t\t});\n\t\t\tui.addChild(setup);\n\t\t\tui.setFocus(setup);\n\t\t\tui.requestRender();\n\t\t})();\n\t});\n}\n\nexport async function showStartupSelector<T>(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\toptions: Array<{ label: string; value: T }>,\n): Promise<T | undefined> {\n\treturn new Promise((resolve) => {\n\t\tconst ui = createStartupTui(settingsManager);\n\n\t\tlet settled = false;\n\t\tconst finish = async (result: T | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\ttitle,\n\t\t\toptions.map((option) => option.label),\n\t\t\t(option) => void finish(options.find((entry) => entry.label === option)?.value),\n\t\t\t() => void finish(undefined),\n\t\t\t{ tui: ui },\n\t\t);\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector);\n\t\tui.start();\n\t});\n}\n\nexport async function showStartupInput(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\tplaceholder?: string,\n): Promise<string | undefined> {\n\treturn new Promise((resolve) => {\n\t\tconst ui = createStartupTui(settingsManager);\n\n\t\tlet settled = false;\n\t\tconst finish = async (result: string | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tinput.dispose();\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst input = new ExtensionInputComponent(\n\t\t\ttitle,\n\t\t\tplaceholder,\n\t\t\t(value) => void finish(value),\n\t\t\t() => void finish(undefined),\n\t\t\t{ tui: ui },\n\t\t);\n\t\tui.addChild(input);\n\t\tui.setFocus(input);\n\t\tui.start();\n\t});\n}\n"]}
1
+ {"version":3,"file":"startup-ui.js","sourceRoot":"","sources":["../../src/cli/startup-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport {\n\tProcessTerminal,\n\tsetCapabilityOverrides,\n\tsetKeybindings,\n\ttype TUI,\n\tTuiMainScreen,\n} from \"@earendil-works/pi-tui\";\nimport { ENV_AGENT_DIR, getAgentDir, getEnvValue, getSettingsPath } from \"../config.js\";\nimport type { ExtensionUIDialogOptions } from \"../core/extensions/index.js\";\nimport { KeybindingsManager } from \"../core/keybindings.ts\";\nimport type { SettingsManager } from \"../core/settings-manager.ts\";\nimport { ExtensionInputComponent } from \"../modes/interactive/components/extension-input.ts\";\nimport { ExtensionSelectorComponent } from \"../modes/interactive/components/extension-selector.ts\";\nimport {\n\tFirstTimeSetupComponent,\n\ttype FirstTimeSetupResult,\n} from \"../modes/interactive/components/first-time-setup.ts\";\nimport {\n\tdetectTerminalThemeForAuto,\n\tinitTheme,\n\tsetTheme,\n\ttype TerminalTheme,\n} from \"../modes/interactive/theme/theme.js\";\n\nfunction createStartupTui(settingsManager: SettingsManager): TUI {\n\tsetCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides());\n\tinitTheme(settingsManager.getTheme());\n\tsetKeybindings(KeybindingsManager.create());\n\tconst ui = new TuiMainScreen(new ProcessTerminal(), settingsManager.getShowHardwareCursor(), getAgentDir());\n\tui.setClearOnShrink(settingsManager.getClearOnShrink());\n\treturn ui;\n}\n\nasync function clearStartupTui(ui: TUI): Promise<void> {\n\tui.clear();\n\tui.requestRender();\n\tawait new Promise((resolve) => setTimeout(resolve, 25));\n}\n\n/**\n * Detect terminal appearance for first-run setup using one shared color query.\n * The terminal's background and foreground decide the result; unsupported\n * queries fall back to COLORFGBG and then dark.\n */\nexport async function detectStartupTheme(ui: TUI): Promise<TerminalTheme> {\n\treturn detectTerminalThemeForAuto({ ui, timeoutMs: 100 });\n}\n\n/** First-run setup is eligible only in the default agent directory before settings.json exists. */\nexport function shouldRunFirstTimeSetup(settingsPath: string = getSettingsPath()): boolean {\n\treturn !getEnvValue(ENV_AGENT_DIR) && !existsSync(settingsPath);\n}\n\nexport async function showFirstTimeSetup(settingsManager: SettingsManager): Promise<void> {\n\tconst ui = createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: FirstTimeSetupResult | undefined) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tif (result) {\n\t\t\t\tsettingsManager.setTheme(result.theme);\n\t\t\t\tsettingsManager.setEnableAnalytics(result.shareAnalytics);\n\t\t\t\tawait settingsManager.flush();\n\t\t\t}\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve();\n\t\t};\n\t\tvoid (async () => {\n\t\t\tui.start();\n\t\t\tconst detectedTheme = await detectStartupTheme(ui);\n\t\t\tsetTheme(detectedTheme);\n\t\t\tconst setup = new FirstTimeSetupComponent({\n\t\t\t\tdetectedTheme,\n\t\t\t\tonThemePreview: (name) => {\n\t\t\t\t\tsetTheme(name);\n\t\t\t\t\tui.requestRender();\n\t\t\t\t},\n\t\t\t\tonSubmit: (result) => {\n\t\t\t\t\tvoid finish(result);\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tvoid finish(undefined);\n\t\t\t\t},\n\t\t\t});\n\t\t\tui.addChild(setup);\n\t\t\tui.setFocus(setup);\n\t\t\tui.requestRender();\n\t\t})();\n\t});\n}\n\nexport async function showStartupSelector<T>(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\toptions: Array<{ label: string; value: T }>,\n\tdialogOptions?: ExtensionUIDialogOptions,\n): Promise<T | undefined> {\n\treturn new Promise((resolve) => {\n\t\tif (dialogOptions?.signal?.aborted) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst ui = createStartupTui(settingsManager);\n\n\t\tlet settled = false;\n\t\tconst finish = async (result: T | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tdialogOptions?.signal?.removeEventListener(\"abort\", abandon);\n\t\t\tselector.dispose();\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\t\tconst abandon = () => void finish(undefined);\n\t\tdialogOptions?.signal?.addEventListener(\"abort\", abandon, { once: true });\n\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\ttitle,\n\t\t\toptions.map((option) => option.label),\n\t\t\t(option) => void finish(options.find((entry) => entry.label === option)?.value),\n\t\t\t() => void finish(undefined),\n\t\t\t{ tui: ui, timeout: dialogOptions?.timeout },\n\t\t);\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector);\n\t\tui.start();\n\t});\n}\n\nexport async function showStartupInput(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\tplaceholder?: string,\n\tdialogOptions?: ExtensionUIDialogOptions,\n): Promise<string | undefined> {\n\treturn new Promise((resolve) => {\n\t\tif (dialogOptions?.signal?.aborted) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst ui = createStartupTui(settingsManager);\n\n\t\tlet settled = false;\n\t\tconst finish = async (result: string | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tdialogOptions?.signal?.removeEventListener(\"abort\", abandon);\n\t\t\tinput.dispose();\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\t\tconst abandon = () => void finish(undefined);\n\t\tdialogOptions?.signal?.addEventListener(\"abort\", abandon, { once: true });\n\n\t\tconst input = new ExtensionInputComponent(\n\t\t\ttitle,\n\t\t\tplaceholder,\n\t\t\t(value) => void finish(value),\n\t\t\t() => void finish(undefined),\n\t\t\t{ tui: ui, timeout: dialogOptions?.timeout },\n\t\t);\n\t\tui.addChild(input);\n\t\tui.setFocus(input);\n\t\tui.start();\n\t});\n}\n"]}
@@ -65,6 +65,7 @@ export declare class AgentSessionRuntime {
65
65
  private beforeSessionInvalidate?;
66
66
  private projectTrustContextFactory?;
67
67
  private closed;
68
+ private endedBySignal;
68
69
  private closing?;
69
70
  private cleanupFailures;
70
71
  private candidates;
@@ -119,6 +120,7 @@ export declare class AgentSessionRuntime {
119
120
  setBeforeSessionInvalidate(beforeSessionInvalidate?: () => void): void;
120
121
  private emitBeforeSwitch;
121
122
  private emitBeforeFork;
123
+ private quitEvent;
122
124
  private disposeCurrentSession;
123
125
  /**
124
126
  * Settle an active response before the session it belongs to is replaced, so the
@@ -165,7 +167,9 @@ export declare class AgentSessionRuntime {
165
167
  importFromJsonl(inputPath: string, cwdOverride?: string): Promise<{
166
168
  cancelled: boolean;
167
169
  }>;
168
- dispose(): Promise<void>;
170
+ dispose(options?: {
171
+ fromSignal?: boolean;
172
+ }): Promise<void>;
169
173
  }
170
174
  /**
171
175
  * Create the initial runtime from a runtime factory and initial session target.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-runtime.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session-runtime.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-runtime.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,7 @@ export class AgentSessionRuntime {
42
42
  beforeSessionInvalidate;
43
43
  projectTrustContextFactory;
44
44
  closed = false;
45
+ endedBySignal = false;
45
46
  closing;
46
47
  cleanupFailures = [];
47
48
  candidates = new Set();
@@ -62,7 +63,7 @@ export class AgentSessionRuntime {
62
63
  if (!this.retained.delete(session))
63
64
  return;
64
65
  const finalize = async () => {
65
- await emitSessionShutdownEvent(session.extensionRunner, { type: "session_shutdown", reason: "quit" });
66
+ await emitSessionShutdownEvent(session.extensionRunner, this.quitEvent());
66
67
  };
67
68
  if (hasCallingSessionWork(session)) {
68
69
  this.retainRetirementCleanup(session.dispose().then(finalize, async (error) => {
@@ -180,7 +181,7 @@ export class AgentSessionRuntime {
180
181
  this.candidates.add(candidate.session);
181
182
  if (this.closed) {
182
183
  try {
183
- await candidate.session.dispose();
184
+ await candidate.session._close(this.quitEvent());
184
185
  }
185
186
  catch (error) {
186
187
  this.cleanupFailures.push(error);
@@ -294,6 +295,11 @@ export class AgentSessionRuntime {
294
295
  this.assertOpen();
295
296
  return { cancelled: result?.cancel === true };
296
297
  }
298
+ quitEvent() {
299
+ return this.endedBySignal
300
+ ? { type: "session_shutdown", reason: "quit", fromSignal: true }
301
+ : { type: "session_shutdown", reason: "quit" };
302
+ }
297
303
  disposeCurrentSession(event) {
298
304
  const session = this.session;
299
305
  if (event.reason !== "quit")
@@ -384,10 +390,7 @@ export class AgentSessionRuntime {
384
390
  catch (cause) {
385
391
  if (this.candidates.delete(result.session)) {
386
392
  try {
387
- await result.session._close({
388
- type: "session_shutdown",
389
- reason: this.closed ? "quit" : "new",
390
- });
393
+ await result.session._close(this.closed ? this.quitEvent() : { type: "session_shutdown", reason: "new" });
391
394
  }
392
395
  catch (error) {
393
396
  this.cleanupFailures.push(error);
@@ -571,17 +574,18 @@ export class AgentSessionRuntime {
571
574
  return { cancelled: false };
572
575
  });
573
576
  }
574
- dispose() {
577
+ dispose(options) {
575
578
  if (this.closing)
576
579
  return this.closing;
577
580
  this.closed = true;
578
- const current = this.disposeCurrentSession({ type: "session_shutdown", reason: "quit" });
581
+ this.endedBySignal = options?.fromSignal === true;
582
+ const current = this.disposeCurrentSession(this.quitEvent());
579
583
  void current.catch(() => { });
580
584
  this.closing = (async () => {
581
585
  await drainSessionWork(this);
582
586
  for (const candidate of this.candidates) {
583
587
  try {
584
- await candidate.dispose();
588
+ await candidate._close(this.quitEvent());
585
589
  }
586
590
  catch (error) {
587
591
  this.cleanupFailures.push(error);