oysterun 1.6.0-beta.2 → 1.6.0-beta.4

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 (46) hide show
  1. package/dev/client/web/index.html +73 -50
  2. package/dev/client/web-chat/dist/assets/{ReactPrism-BwJhidYf.js → ReactPrism-BuUmuUha.js} +1 -1
  3. package/dev/client/web-chat/dist/assets/{ReactPrism-BwJhidYf.js.map → ReactPrism-BuUmuUha.js.map} +1 -1
  4. package/dev/client/web-chat/dist/assets/{index-DzIClZ3T.js → index-B8DZaf0p.js} +2 -2
  5. package/dev/client/web-chat/dist/assets/{index-DzIClZ3T.js.map → index-B8DZaf0p.js.map} +1 -1
  6. package/dev/client/web-chat/dist/assets/{index-NYnaSGBb.css → index-B9ymKor4.css} +1 -1
  7. package/dev/client/web-chat/dist/assets/{index--1xmQ99x.js → index-BH_BhJkj.js} +1 -1
  8. package/dev/client/web-chat/dist/assets/{index--1xmQ99x.js.map → index-BH_BhJkj.js.map} +1 -1
  9. package/dev/client/web-chat/dist/assets/{index-Ce9NZBZf.js → index-CU330HS9.js} +85 -85
  10. package/dev/client/web-chat/dist/assets/index-CU330HS9.js.map +1 -0
  11. package/dev/client/web-chat/dist/assets/{pdf-ZjtalfgI.js → pdf-CvhY1cT6.js} +3 -3
  12. package/dev/client/web-chat/dist/assets/{pdf-ZjtalfgI.js.map → pdf-CvhY1cT6.js.map} +1 -1
  13. package/dev/client/web-chat/dist/assets/{web-c70YaskK.js → web-BhUj2o7d.js} +1 -1
  14. package/dev/client/web-chat/dist/assets/{web-c70YaskK.js.map → web-BhUj2o7d.js.map} +1 -1
  15. package/dev/client/web-chat/dist/assets/{web-BzHcZK2M.js → web-CLjeBhsF.js} +1 -1
  16. package/dev/client/web-chat/dist/assets/{web-BzHcZK2M.js.map → web-CLjeBhsF.js.map} +1 -1
  17. package/dev/client/web-chat/dist/index.html +4 -10
  18. package/host-service/assets/product-skills/Oysterun/modules/oysterun-find-context/SKILL.md +7 -0
  19. package/host-service/assets/product-skills/Oysterun/modules/oysterun-session-chat/SKILL.md +7 -0
  20. package/host-service/assets/product-skills/Oysterun/modules/oysterun-sessions/SKILL.md +7 -0
  21. package/host-service/assets/product-skills/Oysterun/modules/oysterun-website/SKILL.md +7 -0
  22. package/host-service/assets/product-skills/oysterun-find-context/SKILL.md +7 -0
  23. package/host-service/assets/product-skills/oysterun-session-chat/SKILL.md +7 -0
  24. package/host-service/assets/product-skills/oysterun-sessions/SKILL.md +7 -0
  25. package/host-service/assets/product-skills/oysterun-website/SKILL.md +7 -0
  26. package/host-service/frp-agent.mjs +9 -9
  27. package/host-service/host-lifecycle-recovery.mjs +37 -0
  28. package/host-service/lifecycle-continuity-assets.mjs +158 -0
  29. package/host-service/lifecycle-continuity-probe.mjs +97 -0
  30. package/host-service/lifecycle-continuity-projection.mjs +22 -0
  31. package/host-service/lifecycle-continuity-runner.mjs +95 -0
  32. package/host-service/lifecycle-continuity.mjs +290 -0
  33. package/host-service/lifecycle-service-render-bundle.mjs +120 -0
  34. package/host-service/package.json +1 -1
  35. package/host-service/product-runtime-host-origin.mjs +22 -0
  36. package/host-service/server.mjs +430 -175
  37. package/host-service/service-definition-migration.mjs +5 -1
  38. package/host-service/update-reminder-state.mjs +5 -0
  39. package/package.json +1 -1
  40. package/tool_scripts/install_oysterun_update.mjs +78 -13
  41. package/tool_scripts/oysterun_continuity_transaction.mjs +313 -0
  42. package/tool_scripts/oysterun_npm_package_manifest.mjs +10 -0
  43. package/tool_scripts/oysterun_update_restart_runner.mjs +16 -1
  44. package/tool_scripts/p233_legacy_bootstrap.mjs +254 -0
  45. package/tool_scripts/restart_oysterun.sh +6 -0
  46. package/dev/client/web-chat/dist/assets/index-Ce9NZBZf.js.map +0 -1
@@ -563,6 +563,10 @@
563
563
  min-width: 150px;
564
564
  }
565
565
 
566
+ #host-restart-status:empty {
567
+ display: none;
568
+ }
569
+
566
570
  .host-restart-copy-region {
567
571
  display: grid;
568
572
  min-height: 72px;
@@ -9579,13 +9583,20 @@
9579
9583
  >
9580
9584
  Restart Host
9581
9585
  </button>
9586
+ <div
9587
+ class="field-hint"
9588
+ id="host-restart-status"
9589
+ role="status"
9590
+ aria-live="polite"
9591
+ ></div>
9582
9592
  <div class="host-restart-copy-region">
9583
9593
  <div
9584
9594
  class="field-hint"
9585
9595
  id="host-restart-default-copy"
9586
9596
  >
9587
- Existing sessions and enabled in-session loops
9588
- will be restored after restart.
9597
+ Existing Sessions will be restored after
9598
+ restart. Loops remain off; active work is not
9599
+ replayed.
9589
9600
  </div>
9590
9601
  <div
9591
9602
  class="host-restart-handoff"
@@ -9948,11 +9959,10 @@
9948
9959
  id="host-update-confirmation-warning"
9949
9960
  >
9950
9961
  Oysterun will prepare restore state for existing
9951
- sessions and enabled in-session loops before
9952
- restarting Host. Active provider replies,
9953
- terminal commands, loop turns, and scheduler
9954
- work may be marked interrupted and will not be
9955
- replayed.
9962
+ Sessions before restarting Host. Loops remain
9963
+ off. Active provider replies, terminal commands,
9964
+ loop turns, and scheduler work may be marked
9965
+ interrupted and will not be replayed.
9956
9966
  </div>
9957
9967
  <div
9958
9968
  class="field-hint host-update-confirmation-warning hidden"
@@ -14930,6 +14940,12 @@ Waiting for Claude login output…</pre
14930
14940
  let hostRestartLoginGatePollTimer = null;
14931
14941
  let hostRestartLoginGatePollGeneration = 0;
14932
14942
  let hostRestartLoginReturnPending = false;
14943
+ const HOST_LIFECYCLE_RECOVERY_MODES = Object.freeze([
14944
+ "restart_only",
14945
+ "complete_update_and_restart",
14946
+ "repair_and_restart",
14947
+ "restore_and_restart",
14948
+ ]);
14933
14949
  const HOST_RESTART_HANDOFF_COPY =
14934
14950
  "Please wait while Oysterun restarts. This usually takes about 30 seconds.";
14935
14951
  const HOST_RESTART_LOGIN_BLOCKED_COPY =
@@ -32323,8 +32339,9 @@ Waiting for Claude login output…</pre
32323
32339
  function getOysterunUpdatePhase(update) {
32324
32340
  const operation = update?.update_operation || null;
32325
32341
  if (
32326
- operation?.status === "update_recovery_required" ||
32327
- operation?.status === "restart_recovery_required"
32342
+ !operation?.root_failure &&
32343
+ (operation?.status === "update_recovery_required" ||
32344
+ operation?.status === "restart_recovery_required")
32328
32345
  ) {
32329
32346
  return (
32330
32347
  update?.recovery_plan?.user_action?.title ||
@@ -32344,7 +32361,10 @@ Waiting for Claude login output…</pre
32344
32361
  : "Oysterun update completed.";
32345
32362
  }
32346
32363
  if (operation.status === "restart_complete") {
32347
- return "Host restart completed.";
32364
+ return (
32365
+ operation.recovery_result?.safe_message ||
32366
+ "Host restart completed; all Sessions, history and route verified."
32367
+ );
32348
32368
  }
32349
32369
  if (operation.status === "superseded_reconciled") {
32350
32370
  return operation.superseded_by_version
@@ -32364,11 +32384,13 @@ Waiting for Claude login output…</pre
32364
32384
  const rollbackText = operation.rollback_result?.safe_message || "";
32365
32385
  const recoveryText = operation.recovery_result?.safe_message || "";
32366
32386
  const cleanupText = operation.cleanup_result?.safe_message || "";
32367
- return `Failed check: ${rootFailure.check}. ${
32368
- rootFailure.safe_message
32369
- } ${restartText}${rollbackText ? ` ${rollbackText}` : ""}${
32370
- recoveryText ? ` ${recoveryText}` : ""
32371
- }${cleanupText ? ` ${cleanupText}` : ""}`;
32387
+ return `Failed check: ${rootFailure.check} (stage: ${
32388
+ rootFailure.stage || "lifecycle"
32389
+ }). ${rootFailure.safe_message} ${restartText}${
32390
+ rollbackText ? ` ${rollbackText}` : ""
32391
+ }${recoveryText ? ` ${recoveryText}` : ""}${
32392
+ cleanupText ? ` ${cleanupText}` : ""
32393
+ }`;
32372
32394
  }
32373
32395
  if (operation.status === "rolled_back") {
32374
32396
  return operation.final_observed_version
@@ -45974,8 +45996,6 @@ Waiting for Claude login output…</pre
45974
45996
  ? `QR will use Oysterun Managed Endpoint ${hostPreferencesState.managedEndpoint}.`
45975
45997
  : hostPreferencesState.managedTunnelStatusDetail ||
45976
45998
  "Managed Endpoint must be Ready before generating a login QR.";
45977
- } else if (hostPreferencesState.restartStatus) {
45978
- directAccessStatus = hostPreferencesState.restartStatus;
45979
45999
  } else if (hostPreferencesState.directHostUrlRestartRequired) {
45980
46000
  directAccessStatus =
45981
46001
  "Saved URL differs from the running Host URL. Restart Host before using the new app connection URL.";
@@ -46051,6 +46071,8 @@ Waiting for Claude login output…</pre
46051
46071
  : {};
46052
46072
  const betaUpdateVisible =
46053
46073
  hostPreferencesState.debugHostPreferencesBetaUpdateEnabled === true;
46074
+ const restartOperation =
46075
+ update.update_operation?.transaction_kind === "restart_only";
46054
46076
  setVisible("host-update-beta-label", betaUpdateVisible);
46055
46077
  setVisible("host-update-beta-value", betaUpdateVisible);
46056
46078
  setText("host-update-current", update.current_version || "--");
@@ -46060,7 +46082,7 @@ Waiting for Claude login output…</pre
46060
46082
  let updateStatus =
46061
46083
  hostPreferencesState.updateError ||
46062
46084
  hostPreferencesState.updateStatus ||
46063
- update.error ||
46085
+ (!restartOperation && update.error) ||
46064
46086
  "";
46065
46087
  if (!updateStatus) {
46066
46088
  if (update.update_available === true) {
@@ -46105,7 +46127,12 @@ Waiting for Claude login output…</pre
46105
46127
  betaUpdateVisible && hostPreferencesState.betaUpdateRefreshing
46106
46128
  );
46107
46129
  const updatePhase = getOysterunUpdatePhase(update);
46108
- setText("host-update-phase", updatePhase);
46130
+ setText(
46131
+ "host-restart-status",
46132
+ hostPreferencesState.restartStatus ||
46133
+ (restartOperation ? updatePhase : "")
46134
+ );
46135
+ setText("host-update-phase", restartOperation ? "" : updatePhase);
46109
46136
  setText(
46110
46137
  "host-update-last-checked",
46111
46138
  formatOysterunUpdateCheckedAt(update)
@@ -46155,11 +46182,7 @@ Waiting for Claude login output…</pre
46155
46182
  betaUpdate.update_supported === true &&
46156
46183
  betaUpdate.install_available === true &&
46157
46184
  betaUpdate.relation === "newer";
46158
- const recoveryActionKinds = [
46159
- "complete_update_and_restart",
46160
- "repair_and_restart",
46161
- "restore_and_restart",
46162
- ];
46185
+ const recoveryActionKinds = HOST_LIFECYCLE_RECOVERY_MODES;
46163
46186
  const updateHandoffActive =
46164
46187
  restartHandoff?.mode === "latest" ||
46165
46188
  restartHandoff?.mode === "beta" ||
@@ -46183,7 +46206,8 @@ Waiting for Claude login output…</pre
46183
46206
  : updateCanRun;
46184
46207
  const updateTargetVersion =
46185
46208
  (recoveryConfirmation
46186
- ? update.update_operation?.target_version ||
46209
+ ? recoveryAction?.target_version ||
46210
+ update.update_operation?.target_version ||
46187
46211
  update.update_operation?.last_working_version
46188
46212
  : updateConfirmationMode === "beta"
46189
46213
  ? betaUpdate.beta_version || betaUpdate.target_version
@@ -46601,7 +46625,7 @@ Waiting for Claude login output…</pre
46601
46625
  ...hostPreferencesState,
46602
46626
  restartLoading: true,
46603
46627
  restartStatus:
46604
- "Preparing restore state for existing sessions and enabled loops...",
46628
+ "Preparing existing Sessions for restore. Loops will remain off; prompts will not replay...",
46605
46629
  loginQrError: "",
46606
46630
  };
46607
46631
  renderHostPreferences();
@@ -46618,8 +46642,13 @@ Waiting for Claude login output…</pre
46618
46642
  hostPreferencesState = {
46619
46643
  ...hostPreferencesState,
46620
46644
  restartLoading: false,
46621
- restartStatus: "",
46622
- loginQrError: err.message,
46645
+ restartStatus: err.data?.update_operation ? "" : err.message,
46646
+ loginQrError: "",
46647
+ updateStatus: "",
46648
+ updateError: "",
46649
+ update: err.data?.update_operation
46650
+ ? normalizeOysterunUpdatePayload(err.data)
46651
+ : { ...hostPreferencesState.update, update_operation: null },
46623
46652
  };
46624
46653
  renderHostPreferences();
46625
46654
  }
@@ -46754,6 +46783,7 @@ Waiting for Claude login output…</pre
46754
46783
  updateConfirmationCurrentVersion:
46755
46784
  update.current_version || "the current version",
46756
46785
  updateConfirmationTargetVersion:
46786
+ action.target_version ||
46757
46787
  update.update_operation?.target_version ||
46758
46788
  update.update_operation?.last_working_version ||
46759
46789
  "the retained version",
@@ -46892,11 +46922,8 @@ Waiting for Claude login output…</pre
46892
46922
  };
46893
46923
  renderHostPreferences();
46894
46924
  window.setTimeout(() => {
46895
- const recoveryMode = [
46896
- "complete_update_and_restart",
46897
- "repair_and_restart",
46898
- "restore_and_restart",
46899
- ].includes(confirmationMode);
46925
+ const recoveryMode =
46926
+ HOST_LIFECYCLE_RECOVERY_MODES.includes(confirmationMode);
46900
46927
  $(
46901
46928
  recoveryMode
46902
46929
  ? "host-update-recovery-btn"
@@ -46908,11 +46935,7 @@ Waiting for Claude login output…</pre
46908
46935
  }
46909
46936
 
46910
46937
  async function confirmOysterunUpdateRestart() {
46911
- const recoveryModes = [
46912
- "complete_update_and_restart",
46913
- "repair_and_restart",
46914
- "restore_and_restart",
46915
- ];
46938
+ const recoveryModes = HOST_LIFECYCLE_RECOVERY_MODES;
46916
46939
  const requestedMode = hostPreferencesState.updateConfirmationMode;
46917
46940
  const confirmationMode =
46918
46941
  requestedMode === "beta"
@@ -46948,22 +46971,17 @@ Waiting for Claude login output…</pre
46948
46971
  cancelOysterunUpdateConfirmation();
46949
46972
  return;
46950
46973
  }
46974
+ // Freeze the exact version visible in the confirmation, even if a
46975
+ // background check refreshes the surrounding Preferences state.
46951
46976
  const targetVersion =
46952
- (recoveryConfirmation
46953
- ? update.update_operation?.target_version ||
46954
- update.update_operation?.last_working_version
46955
- : confirmationMode === "beta"
46956
- ? update.beta_version || update.target_version
46957
- : update.newest_version || update.latest_version) ||
46958
- hostPreferencesState.updateConfirmationTargetVersion ||
46959
- "the newest version";
46977
+ hostPreferencesState.updateConfirmationTargetVersion;
46978
+ const confirmedCurrentVersion =
46979
+ hostPreferencesState.updateConfirmationCurrentVersion;
46960
46980
  hostPreferencesState = {
46961
46981
  ...hostPreferencesState,
46962
46982
  updateConfirmationVisible: false,
46963
46983
  updateConfirmationMode: confirmationMode,
46964
- updateConfirmationCurrentVersion:
46965
- update.current_version ||
46966
- hostPreferencesState.updateConfirmationCurrentVersion,
46984
+ updateConfirmationCurrentVersion: confirmedCurrentVersion,
46967
46985
  updateConfirmationTargetVersion: targetVersion,
46968
46986
  updateRunning: true,
46969
46987
  updateRequestPending: true,
@@ -46987,7 +47005,12 @@ Waiting for Claude login output…</pre
46987
47005
  : confirmationMode === "beta"
46988
47006
  ? "/admin/update-beta-run"
46989
47007
  : "/admin/update-run",
46990
- recoveryConfirmation ? { kind: confirmationMode } : {}
47008
+ recoveryConfirmation
47009
+ ? { kind: confirmationMode }
47010
+ : {
47011
+ expected_current_version: confirmedCurrentVersion,
47012
+ expected_target_version: targetVersion,
47013
+ }
46991
47014
  );
46992
47015
  const normalized =
46993
47016
  confirmationMode === "beta" && !recoveryConfirmation
@@ -1,4 +1,4 @@
1
- import{g as ee,c as Y,r as K,j as Z}from"./index-Ce9NZBZf.js";var X={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/**
1
+ import{g as ee,c as Y,r as K,j as Z}from"./index-CU330HS9.js";var X={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/**
2
2
  * Prism: Lightweight, robust, elegant syntax highlighting
3
3
  *
4
4
  * @license MIT <https://opensource.org/licenses/MIT>