apps 0.0.1-beta.10 → 0.0.1-beta.100

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 (195) hide show
  1. package/README.md +60 -42
  2. package/framework-reference.json +1 -1
  3. package/js/{chunk-Z5M2LQOZ.js → chunk-2CURR5Y7.js} +113 -58
  4. package/js/{chunk-72JNVHPK.js → chunk-2LSGC7XY.js} +4 -3
  5. package/js/{chunk-JU7VHODU.js → chunk-4PIQKACY.js} +65 -10
  6. package/js/chunk-4UPC36ZL.js +5185 -0
  7. package/js/{chunk-VFZKSM3T.js → chunk-4X2UI4R2.js} +3 -3
  8. package/js/chunk-5C6RAGAS.js +335 -0
  9. package/js/{chunk-KUMBKVJD.js → chunk-62NVUKED.js} +2 -2
  10. package/js/chunk-74H25C4X.js +95 -0
  11. package/js/chunk-7HG422GB.js +90 -0
  12. package/js/chunk-7STIP5CS.js +171 -0
  13. package/js/{chunk-UK573G7W.js → chunk-ACQXVKVQ.js} +87 -51
  14. package/js/{chunk-IJX4CYZO.js → chunk-DILSCQPJ.js} +228 -264
  15. package/js/chunk-ILYCJ3HV.js +449 -0
  16. package/js/chunk-K6TSCYAO.js +712 -0
  17. package/js/{chunk-M3B3DE4K.js → chunk-KLSEU35Y.js} +463 -218
  18. package/js/chunk-OD3KFKZD.js +1617 -0
  19. package/js/chunk-OWN3DP2W.js +88 -0
  20. package/js/{chunk-IPI4MFSN.js → chunk-PBGPES67.js} +2 -2
  21. package/js/{chunk-FL2QR3XW.js → chunk-QI66R4FP.js} +355 -76
  22. package/js/{chunk-V5KNQVCT.js → chunk-RN4YB4JT.js} +931 -289
  23. package/js/{chunk-ODEIDRGW.js → chunk-URKOTNDA.js} +795 -176
  24. package/js/{chunk-5T57N25Q.js → chunk-VAI3EVCS.js} +643 -69
  25. package/js/chunk-VCYWAA4N.js +49 -0
  26. package/js/{chunk-57RKNWL2.js → chunk-YDW7DX3A.js} +4 -4
  27. package/js/{chunk-RFVIONFX.js → chunk-YWVISRZD.js} +123 -44
  28. package/js/{chunk-CDL5PM2Q.js → chunk-ZKDXML77.js} +19239 -18404
  29. package/js/client.js +148 -84
  30. package/js/contracts.js +150 -21
  31. package/js/effect.js +18 -19
  32. package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
  33. package/js/graphql.js +49 -40
  34. package/js/host.js +85 -62
  35. package/js/index.js +212 -98
  36. package/js/mcp/effect.js +21 -21
  37. package/js/mcp.js +84 -57
  38. package/js/openapi.js +4189 -1411
  39. package/js/react.js +2 -3
  40. package/js/skills/effect.js +6 -3
  41. package/js/skills.js +208 -81
  42. package/js/storage/facet.js +1 -540
  43. package/js/ui/auth/contracts.js +2 -2
  44. package/js/ui/auth.js +5 -5
  45. package/js/ui/contracts.js +9 -8
  46. package/js/ui/serving.js +8609 -228
  47. package/package.json +3 -8
  48. package/runtime.json +1 -1
  49. package/types/app-cache/src/contracts/cache.d.ts +18 -0
  50. package/types/app-cache/src/index.d.ts +34 -2
  51. package/types/apps/src/contracts/api-response-error.d.ts +4 -0
  52. package/types/apps/src/contracts/app.d.ts +56 -11
  53. package/types/apps/src/contracts/cache.d.ts +20 -0
  54. package/types/apps/src/contracts/context.d.ts +60 -17
  55. package/types/apps/src/contracts/elicitation.d.ts +23 -7
  56. package/types/apps/src/contracts/events.d.ts +94 -0
  57. package/types/apps/src/contracts/failure.d.ts +30 -1
  58. package/types/apps/src/contracts/graphql.d.ts +2 -1
  59. package/types/apps/src/contracts/host.d.ts +1456 -20
  60. package/types/apps/src/contracts/icons.d.ts +28 -0
  61. package/types/apps/src/contracts/live.d.ts +2 -0
  62. package/types/apps/src/contracts/mcp.d.ts +81 -20
  63. package/types/apps/src/contracts/network.d.ts +120 -0
  64. package/types/apps/src/contracts/openapi-compile.d.ts +82 -3
  65. package/types/apps/src/contracts/openapi-document.d.ts +1 -1
  66. package/types/apps/src/contracts/openapi.d.ts +41 -9
  67. package/types/apps/src/contracts/operations.d.ts +14 -7
  68. package/types/apps/src/contracts/placement.d.ts +102 -0
  69. package/types/apps/src/contracts/protocol-version.d.ts +2 -2
  70. package/types/apps/src/contracts/protocols/1.d.ts +733 -81
  71. package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
  72. package/types/apps/src/contracts/protocols/11.d.ts +1149 -0
  73. package/types/apps/src/contracts/protocols/12.d.ts +3310 -0
  74. package/types/apps/src/contracts/protocols/2.d.ts +69 -26
  75. package/types/apps/src/contracts/protocols/3.d.ts +133 -33
  76. package/types/apps/src/contracts/protocols/4.d.ts +122 -45
  77. package/types/apps/src/contracts/protocols/5.d.ts +157 -47
  78. package/types/apps/src/contracts/protocols/6.d.ts +1629 -0
  79. package/types/apps/src/contracts/protocols/7.d.ts +1785 -0
  80. package/types/apps/src/contracts/protocols/8.d.ts +1182 -0
  81. package/types/apps/src/contracts/protocols/9.d.ts +1104 -0
  82. package/types/apps/src/contracts/protocols/current.d.ts +6857 -0
  83. package/types/apps/src/contracts/protocols/oauth-6.d.ts +74 -0
  84. package/types/apps/src/contracts/protocols/oauth.d.ts +134 -0
  85. package/types/apps/src/contracts/provider-error.d.ts +9 -0
  86. package/types/apps/src/contracts/provider.d.ts +90 -6
  87. package/types/apps/src/contracts/schedules.d.ts +7 -1
  88. package/types/apps/src/contracts/schema.d.ts +21 -0
  89. package/types/apps/src/contracts/shared-catalog.d.ts +11 -0
  90. package/types/apps/src/contracts/skills.d.ts +50 -13
  91. package/types/apps/src/contracts/sql.d.ts +63 -0
  92. package/types/apps/src/contracts/ui.d.ts +70 -30
  93. package/types/apps/src/contracts/webhooks.d.ts +24 -7
  94. package/types/apps/src/contracts/workflows.d.ts +56 -34
  95. package/types/apps/src/facet.d.ts +4 -5
  96. package/types/apps/src/host.d.ts +5 -0
  97. package/types/apps/src/implementation/account-router.d.ts +4 -3
  98. package/types/apps/src/implementation/app.d.ts +41 -14
  99. package/types/apps/src/implementation/authoring.d.ts +25 -5
  100. package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
  101. package/types/apps/src/implementation/cache.d.ts +29 -2
  102. package/types/apps/src/implementation/catalog-cache.d.ts +35 -4
  103. package/types/apps/src/implementation/elicitation.d.ts +18 -15
  104. package/types/apps/src/implementation/events.d.ts +64 -0
  105. package/types/apps/src/implementation/failure-detail.d.ts +28 -5
  106. package/types/apps/src/implementation/graphql-catalog.d.ts +3 -3
  107. package/types/apps/src/implementation/graphql.d.ts +4 -3
  108. package/types/apps/src/implementation/input-problems.d.ts +6 -2
  109. package/types/apps/src/implementation/invocation-timing.d.ts +18 -0
  110. package/types/apps/src/implementation/live.d.ts +2 -2
  111. package/types/apps/src/implementation/mcp-call.d.ts +6 -5
  112. package/types/apps/src/implementation/mcp-catalog.d.ts +6 -4
  113. package/types/apps/src/implementation/mcp-client.d.ts +17 -9
  114. package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
  115. package/types/apps/src/implementation/mcp.d.ts +20 -9
  116. package/types/apps/src/implementation/network.d.ts +16 -0
  117. package/types/apps/src/implementation/openapi-compile.d.ts +28 -7
  118. package/types/apps/src/implementation/openapi-document.d.ts +46 -19
  119. package/types/apps/src/implementation/openapi-names.d.ts +9 -4
  120. package/types/apps/src/implementation/openapi-request.d.ts +10 -2
  121. package/types/apps/src/implementation/openapi-source.d.ts +23 -1
  122. package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
  123. package/types/apps/src/implementation/operations.d.ts +58 -7
  124. package/types/apps/src/implementation/optimistic.d.ts +1 -1
  125. package/types/apps/src/implementation/placement.d.ts +60 -0
  126. package/types/apps/src/implementation/protocol-operations.d.ts +3 -0
  127. package/types/apps/src/implementation/provider-error.d.ts +28 -1
  128. package/types/apps/src/implementation/provider.d.ts +19 -4
  129. package/types/apps/src/implementation/query-commit.d.ts +1 -1
  130. package/types/apps/src/implementation/router-catalog.d.ts +20 -18
  131. package/types/apps/src/implementation/router.d.ts +24 -5
  132. package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
  133. package/types/apps/src/implementation/schedules.d.ts +39 -8
  134. package/types/apps/src/implementation/schema.d.ts +108 -11
  135. package/types/apps/src/implementation/skills.d.ts +18 -24
  136. package/types/apps/src/implementation/sql.d.ts +71 -0
  137. package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
  138. package/types/apps/src/implementation/ui-auth.d.ts +1 -1
  139. package/types/apps/src/implementation/ui-client.d.ts +3 -3
  140. package/types/apps/src/implementation/ui-document.d.ts +5 -0
  141. package/types/apps/src/implementation/ui-errors.d.ts +1 -1
  142. package/types/apps/src/implementation/ui-serving.d.ts +28 -11
  143. package/types/apps/src/implementation/ui-watch.d.ts +1 -1
  144. package/types/apps/src/implementation/upstream-error.d.ts +7 -0
  145. package/types/apps/src/implementation/webhooks.d.ts +15 -6
  146. package/types/apps/src/implementation/workflow-context.d.ts +6 -2
  147. package/types/apps/src/implementation/workflows.d.ts +11 -4
  148. package/types/apps/src/index.d.ts +68 -19
  149. package/types/apps/src/mcp.d.ts +20 -1
  150. package/types/apps/src/openapi.d.ts +6 -1
  151. package/types/apps/src/react.d.ts +1 -1
  152. package/types/apps/src/skills.d.ts +10 -8
  153. package/types/apps/src/ui-serving.d.ts +1 -1
  154. package/types/telemetry/src/app-records.d.ts +42 -0
  155. package/types/telemetry/src/browser-operations.d.ts +2 -2
  156. package/types/telemetry/src/browser.d.ts +8 -3
  157. package/types/telemetry/src/config.d.ts +2 -2
  158. package/types/telemetry/src/index.d.ts +2 -1
  159. package/types/telemetry/src/layer.d.ts +10 -4
  160. package/types/telemetry/src/measurements.d.ts +1 -1
  161. package/types/telemetry/src/ownership.d.ts +60 -0
  162. package/types/telemetry/src/recorded-failure.d.ts +29 -0
  163. package/types/telemetry/src/relay.d.ts +16 -6
  164. package/types/telemetry/src/span-attributes.d.ts +17 -1
  165. package/types/telemetry/src/transport.d.ts +8 -1
  166. package/types/utils/src/api-error.d.ts +55 -0
  167. package/types/utils/src/connection-failure.d.ts +33 -0
  168. package/types/utils/src/legacy-keys.d.ts +20 -0
  169. package/types/utils/src/recorded-message.d.ts +18 -0
  170. package/types/utils/src/schema-definitions.d.ts +13 -0
  171. package/types/utils/src/user-facing-error.d.ts +83 -0
  172. package/js/chunk-27F7W2LG.js +0 -34
  173. package/js/chunk-CRDWFA74.js +0 -299
  174. package/js/chunk-EPT3ZP52.js +0 -224
  175. package/js/chunk-MKWZPDR6.js +0 -63
  176. package/js/chunk-N7YDVXYJ.js +0 -186
  177. package/js/chunk-NKLWZJLE.js +0 -172
  178. package/js/chunk-PJJ24GU7.js +0 -877
  179. package/js/chunk-PZB6T6KU.js +0 -19
  180. package/js/chunk-R3EV5FTO.js +0 -97
  181. package/js/chunk-WLE7WX2U.js +0 -2645
  182. package/js/chunk-YXQHV65J.js +0 -242
  183. package/js/chunk-ZQINWV4W.js +0 -630
  184. package/js/mcp/stdio.js +0 -128
  185. package/types/app-data/src/implementation/cursor.d.ts +0 -10
  186. package/types/app-data/src/implementation/index-key.d.ts +0 -7
  187. package/types/app-data/src/implementation/promise.d.ts +0 -68
  188. package/types/app-data/src/implementation/range.d.ts +0 -8
  189. package/types/app-data/src/implementation/schema.d.ts +0 -18
  190. package/types/app-data/src/implementation/sqlite.d.ts +0 -11
  191. package/types/app-data/src/index.d.ts +0 -4
  192. package/types/apps/src/contracts/storage.d.ts +0 -68
  193. package/types/apps/src/implementation/mcp-stdio.d.ts +0 -4
  194. package/types/apps/src/implementation/storage.d.ts +0 -15
  195. package/types/apps/src/mcp-stdio.d.ts +0 -5
package/js/client.js CHANGED
@@ -1,39 +1,38 @@
1
1
  import {
2
2
  AppUiApi,
3
- HttpApiClient_exports,
4
3
  UiContext,
5
- UiDeploymentChanged,
6
- UiFailed
7
- } from "./chunk-IJX4CYZO.js";
4
+ UiFailed,
5
+ UiVersionChanged
6
+ } from "./chunk-74H25C4X.js";
8
7
  import {
9
8
  AsyncResult_exports,
10
9
  AtomRegistry_exports,
11
10
  Atom_exports,
12
11
  queryResult
13
- } from "./chunk-M3B3DE4K.js";
14
- import "./chunk-PJJ24GU7.js";
12
+ } from "./chunk-KLSEU35Y.js";
13
+ import {
14
+ decoderOf
15
+ } from "./chunk-VAI3EVCS.js";
15
16
  import {
16
17
  OtlpExporter_exports,
17
18
  externalTrace,
18
19
  pendingSpan,
19
20
  telemetryLayer,
20
21
  traceLinks
21
- } from "./chunk-ODEIDRGW.js";
22
+ } from "./chunk-URKOTNDA.js";
22
23
  import {
23
24
  FetchHttpClient_exports
24
- } from "./chunk-57RKNWL2.js";
25
- import {
26
- HttpClientError_exports
27
- } from "./chunk-UK573G7W.js";
25
+ } from "./chunk-YDW7DX3A.js";
26
+ import "./chunk-OWN3DP2W.js";
28
27
  import {
29
- decoderOf
30
- } from "./chunk-5T57N25Q.js";
28
+ JsonValue
29
+ } from "./chunk-7HG422GB.js";
31
30
  import {
32
- StorageName
33
- } from "./chunk-PZB6T6KU.js";
31
+ HttpApiClient_exports
32
+ } from "./chunk-DILSCQPJ.js";
34
33
  import {
35
- JsonValue
36
- } from "./chunk-27F7W2LG.js";
34
+ HttpClientError_exports
35
+ } from "./chunk-ACQXVKVQ.js";
37
36
  import {
38
37
  Cause_exports,
39
38
  Clock_exports,
@@ -46,25 +45,27 @@ import {
46
45
  Logger_exports,
47
46
  ManagedRuntime_exports,
48
47
  Option_exports,
48
+ Queue_exports,
49
49
  Schedule_exports,
50
50
  Schema_exports,
51
51
  Semaphore_exports,
52
52
  Stream_exports,
53
53
  Tracer_exports
54
- } from "./chunk-CDL5PM2Q.js";
54
+ } from "./chunk-ZKDXML77.js";
55
55
  import "./chunk-CZ7CSFO4.js";
56
56
 
57
57
  // src/contracts/live.ts
58
+ var OperationName = Schema_exports.NonEmptyString.check(Schema_exports.isMaxLength(200));
58
59
  var AppQueryFailed = class extends Schema_exports.TaggedError()("AppQueryFailed", {}) {
59
60
  };
60
61
 
61
62
  // src/implementation/live.ts
62
63
  var queryReference = (name) => ({
63
- name: Schema_exports.decodeUnknownSync(StorageName)(name),
64
+ name: Schema_exports.decodeUnknownSync(OperationName)(name),
64
65
  kind: "query"
65
66
  });
66
67
  var mutationReference = (name) => ({
67
- name: Schema_exports.decodeUnknownSync(StorageName)(name),
68
+ name: Schema_exports.decodeUnknownSync(OperationName)(name),
68
69
  kind: "mutation"
69
70
  });
70
71
  var liveQueryAtom = (reference, input, options) => Atom_exports.make(
@@ -475,6 +476,8 @@ var browserTelemetryLayer = (settings) => Layer_exports.unwrap(
475
476
  const onError = (event) => error("ui.error", event.error ?? new Error(event.message));
476
477
  const onRejection = (event) => error("ui.unhandled-rejection", event.reason);
477
478
  const onHidden = () => {
479
+ if (navigation !== void 0 && document.visibilityState === "hidden")
480
+ navigation.hidden = true;
478
481
  run(
479
482
  document.visibilityState === "hidden" ? performance.pause.pipe(Effect_exports.andThen(flush)) : performance.resume
480
483
  );
@@ -502,15 +505,27 @@ var browserTelemetryLayer = (settings) => Layer_exports.unwrap(
502
505
  return {
503
506
  flush,
504
507
  navigation: (event) => Effect_exports.sync(() => {
508
+ if (event.type === "load") return;
505
509
  if (event.type === "end") {
506
- if (navigation !== void 0) Deferred_exports.doneUnsafe(navigation, Effect_exports.void);
510
+ if (navigation !== void 0) Deferred_exports.doneUnsafe(navigation.done, Effect_exports.void);
507
511
  navigation = void 0;
508
512
  return;
509
513
  }
510
- if (navigation !== void 0) Deferred_exports.doneUnsafe(navigation, Effect_exports.interrupt);
511
- navigation = Deferred_exports.makeUnsafe();
514
+ if (navigation !== void 0)
515
+ Deferred_exports.doneUnsafe(navigation.done, Effect_exports.interrupt);
516
+ const current = {
517
+ done: Deferred_exports.makeUnsafe(),
518
+ hidden: document.visibilityState === "hidden"
519
+ };
520
+ navigation = current;
512
521
  run(
513
- Deferred_exports.await(navigation).pipe(
522
+ Deferred_exports.await(current.done).pipe(
523
+ // Record visibility however the navigation ends, including when a later one interrupts it.
524
+ Effect_exports.ensuring(
525
+ Effect_exports.suspend(
526
+ () => Effect_exports.annotateCurrentSpan("executor.navigation.hidden", current.hidden)
527
+ )
528
+ ),
514
529
  Effect_exports.withSpan("ui.navigation", {
515
530
  root: true,
516
531
  attributes: { "url.path": event.path }
@@ -520,7 +535,7 @@ var browserTelemetryLayer = (settings) => Layer_exports.unwrap(
520
535
  );
521
536
  }).pipe(
522
537
  Effect_exports.andThen(
523
- event.type === "start" ? performance.navigation(event.path) : Effect_exports.void
538
+ event.type === "end" ? Effect_exports.void : performance.navigation(event.path)
524
539
  )
525
540
  )
526
541
  };
@@ -793,12 +808,39 @@ var makeOptimisticClient = (transport) => {
793
808
  };
794
809
 
795
810
  // src/implementation/ui-client.ts
811
+ var resubscribeDelay = Schedule_exports.min([
812
+ Schedule_exports.exponential("1 second"),
813
+ Schedule_exports.spaced("1 minute")
814
+ ]).pipe(Schedule_exports.jittered);
815
+ var appFailure = (error) => Schema_exports.is(UiFailed)(error) && error.reason === "operation_failed";
816
+ var resubscribes = (error) => HttpClientError_exports.isHttpClientError(error) || Cause_exports.isTimeoutError(error) || Schema_exports.is(UiFailed)(error) && error.reason !== "account_required";
817
+ var Retrying = class {
818
+ constructor(error, previous) {
819
+ this.error = error;
820
+ this.previous = previous;
821
+ }
822
+ error;
823
+ previous;
824
+ };
825
+ var visibleResult = (result) => {
826
+ const current = AsyncResult_exports.value(result);
827
+ if (Option_exports.isNone(current) || !(current.value instanceof Retrying)) {
828
+ return result;
829
+ }
830
+ const previous = Option_exports.map(
831
+ Option_exports.fromUndefinedOr(current.value.previous),
832
+ AsyncResult_exports.success
833
+ );
834
+ return AsyncResult_exports.isSuccess(result) ? AsyncResult_exports.failureWithPrevious(Cause_exports.fail(current.value.error), { previous, waiting: true }) : AsyncResult_exports.failureWithPrevious(AsyncResult_exports.isFailure(result) ? result.cause : Cause_exports.empty, {
835
+ previous
836
+ });
837
+ };
796
838
  var createAppClient = () => {
797
839
  const { runtime, atoms } = makeBrowserTelemetry(
798
840
  browserSettings("/_executor/api/telemetry", "executor-app-web")
799
841
  );
800
842
  const browser = atoms(Layer_exports.empty);
801
- const deploymentChanged = Effect_exports.sync(() => {
843
+ const versionChanged = Effect_exports.sync(() => {
802
844
  window.dispatchEvent(new Event("executor:deployment-changed"));
803
845
  });
804
846
  let pendingWrites = 0;
@@ -840,14 +882,15 @@ var createAppClient = () => {
840
882
  const value = yield* api.ui[kind]({ payload: yield* payload(name, input) });
841
883
  return yield* Schema_exports.decodeUnknownEffect(decoderOf(output))(value);
842
884
  }).pipe(
843
- Effect_exports.tapErrorTag("UiDeploymentChanged", () => deploymentChanged),
885
+ Effect_exports.tapErrorTag("UiDeploymentChanged", () => versionChanged),
844
886
  Effect_exports.withSpan(`ui.app.${kind}`, { attributes: { "executor.operation.name": name } })
845
887
  );
846
888
  const source = (name, input, output) => browser.atom(
847
889
  Stream_exports.suspend(() => {
848
890
  let previous;
849
891
  let attempts = 0;
850
- return Stream_exports.unwrap(
892
+ let latest;
893
+ const subscription = Stream_exports.unwrap(
851
894
  Effect_exports.gen(function* () {
852
895
  const attempt = attempts++;
853
896
  const first = yield* pendingSpan("ui.app.first_result", {
@@ -895,73 +938,94 @@ var createAppClient = () => {
895
938
  Stream_exports.timeout("45 seconds"),
896
939
  Stream_exports.concat(Stream_exports.fail(new UiFailed({ reason: "unavailable" }))),
897
940
  Stream_exports.filter((frame) => frame.type !== "heartbeat"),
898
- Stream_exports.mapEffect((frame) => {
899
- if (frame.type === "failure") return Effect_exports.fail(frame.error);
900
- const server = externalTrace(frame.trace);
901
- return Effect_exports.gen(function* () {
902
- const value = yield* Schema_exports.decodeUnknownEffect(decoderOf(output))(
903
- frame.value
904
- ).pipe(Effect_exports.mapError(() => new UiFailed({ reason: "operation_failed" })));
905
- const received = yield* Effect_exports.currentSpan;
906
- const receivedAt = clock.currentTimeMillisUnsafe();
907
- const currentRevision = revision++;
908
- yield* Effect_exports.annotateCurrentSpan({
909
- "executor.operation.name": name,
910
- "executor.snapshot.revision": currentRevision,
911
- "browser.query.elapsed_ms": receivedAt - started,
912
- "executor.trace.context_valid": Option_exports.isSome(server)
913
- });
914
- yield* first.finish(Exit_exports.void);
915
- let committed = false;
916
- return {
917
- value,
918
- commit: () => {
919
- if (committed) return;
920
- committed = true;
921
- const committedAt = clock.currentTimeMillisUnsafe();
922
- runtime.runFork(
923
- Effect_exports.void.pipe(
924
- Effect_exports.withSpan("ui.app.result.commit", {
925
- parent: received,
926
- attributes: {
927
- "executor.operation.name": name,
928
- "executor.snapshot.revision": currentRevision,
929
- "browser.query.elapsed_ms": committedAt - started,
930
- "browser.query.receive_to_commit_ms": committedAt - receivedAt,
931
- "browser.page.hidden": document.visibilityState === "hidden"
932
- }
933
- })
934
- )
935
- );
936
- }
937
- };
938
- }).pipe(
939
- Effect_exports.withSpan("ui.app.result.receive", {
940
- parent: Option_exports.isSome(server) ? server.value : first.span,
941
- kind: "consumer"
942
- })
943
- );
944
- }),
941
+ Stream_exports.mapEffect(
942
+ (frame) => {
943
+ if (frame.type === "failure") return Effect_exports.fail(frame.error);
944
+ const server = externalTrace(frame.trace);
945
+ return Effect_exports.gen(function* () {
946
+ const value = yield* Schema_exports.decodeUnknownEffect(decoderOf(output))(
947
+ frame.value
948
+ ).pipe(Effect_exports.mapError(() => new AppQueryFailed()));
949
+ const received = yield* Effect_exports.currentSpan;
950
+ const receivedAt = clock.currentTimeMillisUnsafe();
951
+ const currentRevision = revision++;
952
+ yield* Effect_exports.annotateCurrentSpan({
953
+ "executor.operation.name": name,
954
+ "executor.snapshot.revision": currentRevision,
955
+ "browser.query.elapsed_ms": receivedAt - started,
956
+ "executor.trace.context_valid": Option_exports.isSome(server)
957
+ });
958
+ yield* first.finish(Exit_exports.void);
959
+ let committed = false;
960
+ return {
961
+ value,
962
+ commit: () => {
963
+ if (committed) return;
964
+ committed = true;
965
+ const committedAt = clock.currentTimeMillisUnsafe();
966
+ runtime.runFork(
967
+ Effect_exports.void.pipe(
968
+ Effect_exports.withSpan("ui.app.result.commit", {
969
+ parent: received,
970
+ attributes: {
971
+ "executor.operation.name": name,
972
+ "executor.snapshot.revision": currentRevision,
973
+ "browser.query.elapsed_ms": committedAt - started,
974
+ "browser.query.receive_to_commit_ms": committedAt - receivedAt,
975
+ "browser.page.hidden": document.visibilityState === "hidden"
976
+ }
977
+ })
978
+ )
979
+ );
980
+ }
981
+ };
982
+ }).pipe(
983
+ Effect_exports.withSpan("ui.app.result.receive", {
984
+ parent: Option_exports.isSome(server) ? server.value : first.span,
985
+ kind: "consumer"
986
+ })
987
+ );
988
+ }
989
+ ),
945
990
  Stream_exports.onExit(finish),
946
991
  Stream_exports.provideService(Tracer_exports.ParentSpan, first.span)
947
992
  );
948
993
  })
949
994
  ).pipe(
950
995
  // Keep the last snapshot while the watcher replaces the document.
951
- // Unmount or client disposal interrupts the deployment-change wait.
996
+ // Unmount or client disposal interrupts the version-change wait.
952
997
  Stream_exports.catch(
953
- (error) => Schema_exports.is(UiDeploymentChanged)(error) ? Stream_exports.unwrap(deploymentChanged.pipe(Effect_exports.as(Stream_exports.never))) : Stream_exports.fail(error)
998
+ (error) => Schema_exports.is(UiVersionChanged)(error) ? Stream_exports.unwrap(versionChanged.pipe(Effect_exports.as(Stream_exports.never))) : Stream_exports.fail(error)
954
999
  ),
955
- Stream_exports.retry(
956
- Schedule_exports.spaced("1 second").pipe(
957
- Schedule_exports.while(
958
- ({ input: input2 }) => HttpClientError_exports.isHttpClientError(input2) || Cause_exports.isTimeoutError(input2) || Schema_exports.is(UiFailed)(input2)
959
- )
960
- )
1000
+ Stream_exports.tap(
1001
+ (value) => Effect_exports.sync(() => {
1002
+ latest = value;
1003
+ })
961
1004
  )
962
1005
  );
1006
+ return Stream_exports.unwrap(
1007
+ Effect_exports.gen(function* () {
1008
+ const retrying = yield* Queue_exports.unbounded();
1009
+ return Stream_exports.merge(
1010
+ subscription.pipe(
1011
+ Stream_exports.retry(
1012
+ resubscribeDelay.pipe(
1013
+ Schedule_exports.while(
1014
+ ({ input: input2 }) => !resubscribes(input2) ? false : appFailure(input2) ? Queue_exports.offer(retrying, new Retrying(input2, latest)).pipe(
1015
+ Effect_exports.as(true)
1016
+ ) : true
1017
+ )
1018
+ )
1019
+ )
1020
+ ),
1021
+ // Shown outside the retried stream, so they do not reset its delay.
1022
+ Stream_exports.fromQueue(retrying),
1023
+ { haltStrategy: "left" }
1024
+ );
1025
+ })
1026
+ );
963
1027
  })
964
- ).pipe(Atom_exports.map(queryResult));
1028
+ ).pipe(Atom_exports.map((result) => queryResult(visibleResult(result))));
965
1029
  const optimistic = makeOptimisticClient({
966
1030
  source,
967
1031
  read: (name, input, output) => request("query", name, input, output),