@superblocksteam/vite-plugin-file-sync 2.0.138 → 2.0.139-next.0

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 (48) hide show
  1. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js +1 -1
  2. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -1
  3. package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
  4. package/dist/ai-service/app-skills/helpers.js +2 -0
  5. package/dist/ai-service/app-skills/helpers.js.map +1 -1
  6. package/dist/ai-service/index.d.ts.map +1 -1
  7. package/dist/ai-service/index.js +107 -25
  8. package/dist/ai-service/index.js.map +1 -1
  9. package/dist/ai-service/state-machine/clark-fsm.d.ts +19 -1
  10. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  11. package/dist/ai-service/state-machine/clark-fsm.js +4 -0
  12. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  13. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  14. package/dist/ai-service/state-machine/handlers/agent-planning.js +25 -0
  15. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  16. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
  17. package/dist/ai-service/state-machine/handlers/awaiting-user.js +21 -0
  18. package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
  19. package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -1
  20. package/dist/ai-service/state-machine/handlers/idle.js +16 -1
  21. package/dist/ai-service/state-machine/handlers/idle.js.map +1 -1
  22. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  23. package/dist/ai-service/state-machine/handlers/llm-generating.js +10 -1
  24. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  25. package/dist/ai-service/state-machine/helpers/prompt-failure.d.ts +51 -0
  26. package/dist/ai-service/state-machine/helpers/prompt-failure.d.ts.map +1 -0
  27. package/dist/ai-service/state-machine/helpers/prompt-failure.js +149 -0
  28. package/dist/ai-service/state-machine/helpers/prompt-failure.js.map +1 -0
  29. package/dist/ai-service/state-machine/helpers/prompt-request-metrics.d.ts +70 -0
  30. package/dist/ai-service/state-machine/helpers/prompt-request-metrics.d.ts.map +1 -0
  31. package/dist/ai-service/state-machine/helpers/prompt-request-metrics.js +201 -0
  32. package/dist/ai-service/state-machine/helpers/prompt-request-metrics.js.map +1 -0
  33. package/dist/ai-service/state-machine/helpers/transition.d.ts.map +1 -1
  34. package/dist/ai-service/state-machine/helpers/transition.js +5 -1
  35. package/dist/ai-service/state-machine/helpers/transition.js.map +1 -1
  36. package/dist/ai-service/state-machine/traced-fsm.d.ts +6 -1
  37. package/dist/ai-service/state-machine/traced-fsm.d.ts.map +1 -1
  38. package/dist/ai-service/state-machine/traced-fsm.js +13 -3
  39. package/dist/ai-service/state-machine/traced-fsm.js.map +1 -1
  40. package/dist/sync-service/index.d.ts +16 -9
  41. package/dist/sync-service/index.d.ts.map +1 -1
  42. package/dist/sync-service/index.js +154 -4
  43. package/dist/sync-service/index.js.map +1 -1
  44. package/dist/util/logger.d.ts +7 -0
  45. package/dist/util/logger.d.ts.map +1 -1
  46. package/dist/util/logger.js +29 -0
  47. package/dist/util/logger.js.map +1 -1
  48. package/package.json +8 -8
@@ -0,0 +1,201 @@
1
+ import { metrics } from "@opentelemetry/api";
2
+ import { AGENT_CANCELED, AGENT_NEEDS_USER_INPUT, APP_RUNTIME_UPDATED_WITHOUT_EDITS, RUNTIME_REVIEW_FINISHED, USER_CANCELED, V3_AGENT_FINISHED, } from "../clark-fsm.js";
3
+ import { promptFailureAttributes, promptFailurePlatform, promptFailureUserCanceled, promptOutcomeTagsFromFailure, PROMPT_OUTCOME_TAG, } from "./prompt-failure.js";
4
+ export const PROMPT_OUTCOMES = ["failure", "success"];
5
+ export { PROMPT_OUTCOME_TAG, promptOutcomeTagsFromFailure, } from "./prompt-failure.js";
6
+ export { failureDetailFromPromptFailure, PLATFORM_PROMPT_FAILURE_REASONS, PROMPT_FAILURE_ORIGINS, TELEMETRY_FAILURE_ORIGINS, telemetryFailureOrigin, isUserInitiatedPromptAbort, promptFailureFromLlmError, promptFailureFromStreamAbort, promptFailureLlmProviderUnknown, promptFailurePaywall, promptFailurePlatform, promptFailureUserCanceled, USER_PROMPT_FAILURE_REASONS, } from "./prompt-failure.js";
7
+ const METER_NAME = "superblocks.clark.prompt";
8
+ const METRIC_ATTEMPTS = "superblocks.clark.prompt.attempts_total";
9
+ const METRIC_OUTCOMES = "superblocks.clark.prompt.outcomes_total";
10
+ export const METRIC_AWAITING_USER_DISMISSED = "superblocks.clark.prompt.awaiting_user_dismissed_total";
11
+ export const AWAITING_USER_DISMISS_REASONS = ["cancel", "new_prompt"];
12
+ export const AWAITING_USER_DISMISS_REASON_TAG = "dismiss_reason";
13
+ class PromptRequestMetrics {
14
+ cachedMeter;
15
+ cachedInstruments;
16
+ recordedAwaitingUserDismissedKeys = new Set();
17
+ recordedOutcomeKeys = new Set();
18
+ getInstruments() {
19
+ const meter = metrics.getMeter(METER_NAME);
20
+ if (meter === this.cachedMeter && this.cachedInstruments) {
21
+ return this.cachedInstruments;
22
+ }
23
+ this.cachedMeter = meter;
24
+ this.cachedInstruments = {
25
+ attemptCounter: meter.createCounter(METRIC_ATTEMPTS, {
26
+ description: "User prompt requests accepted by the Clark agent loop entrypoint.",
27
+ unit: "1",
28
+ }),
29
+ outcomeCounter: meter.createCounter(METRIC_OUTCOMES, {
30
+ description: "Terminal outcomes for user prompt requests in the Clark agent loop.",
31
+ unit: "1",
32
+ }),
33
+ awaitingUserDismissedCounter: meter.createCounter(METRIC_AWAITING_USER_DISMISSED, {
34
+ description: "User canceled or dismissed Clark while awaiting input after a successful handoff.",
35
+ unit: "1",
36
+ }),
37
+ };
38
+ return this.cachedInstruments;
39
+ }
40
+ recordAttempt() {
41
+ this.getInstruments().attemptCounter.add(1);
42
+ }
43
+ /** Allow a new terminal outcome when the same request is retried. */
44
+ forgetOutcomeDedupeKey(dedupeKey) {
45
+ this.recordedOutcomeKeys.delete(dedupeKey);
46
+ }
47
+ recordAwaitingUserDismissed(params) {
48
+ if (this.recordedAwaitingUserDismissedKeys.has(params.dedupeKey)) {
49
+ return;
50
+ }
51
+ this.recordedAwaitingUserDismissedKeys.add(params.dedupeKey);
52
+ this.getInstruments().awaitingUserDismissedCounter.add(1, {
53
+ [AWAITING_USER_DISMISS_REASON_TAG]: params.reason,
54
+ });
55
+ }
56
+ recordOutcome(params) {
57
+ if (this.recordedOutcomeKeys.has(params.dedupeKey)) {
58
+ return;
59
+ }
60
+ this.recordedOutcomeKeys.add(params.dedupeKey);
61
+ const attributes = { outcome: params.outcome };
62
+ if (params.outcome === "failure" && params.failure) {
63
+ Object.assign(attributes, promptFailureAttributes(params.failure));
64
+ }
65
+ this.getInstruments().outcomeCounter.add(1, attributes);
66
+ }
67
+ /** One attempt + failure outcome per dedupe key for pre-FSM entry rejections. */
68
+ recordEntryRejection(params) {
69
+ if (this.recordedOutcomeKeys.has(params.dedupeKey)) {
70
+ return;
71
+ }
72
+ this.recordedOutcomeKeys.add(params.dedupeKey);
73
+ this.getInstruments().attemptCounter.add(1);
74
+ this.getInstruments().outcomeCounter.add(1, {
75
+ outcome: "failure",
76
+ ...promptFailureAttributes(params.failure),
77
+ });
78
+ }
79
+ _resetForTesting() {
80
+ this.cachedMeter = undefined;
81
+ this.cachedInstruments = undefined;
82
+ this.recordedAwaitingUserDismissedKeys.clear();
83
+ this.recordedOutcomeKeys.clear();
84
+ }
85
+ }
86
+ const promptRequestMetrics = new PromptRequestMetrics();
87
+ export function recordPromptAttempt(outcomeDedupeKey) {
88
+ if (outcomeDedupeKey) {
89
+ promptRequestMetrics.forgetOutcomeDedupeKey(outcomeDedupeKey);
90
+ }
91
+ promptRequestMetrics.recordAttempt();
92
+ }
93
+ export function resolvePromptOutcomeDedupeKey(context) {
94
+ return context.promptOutcomeDedupeKey ?? context.promptId;
95
+ }
96
+ export function recordPromptOutcome(params) {
97
+ if (!params.dedupeKey) {
98
+ return;
99
+ }
100
+ promptRequestMetrics.recordOutcome({
101
+ dedupeKey: params.dedupeKey,
102
+ outcome: params.outcome,
103
+ failure: params.failure,
104
+ });
105
+ }
106
+ export function resolvePromptRequestDedupeKey(request) {
107
+ return request.requestId ?? `ephemeral:${request.prompt}`;
108
+ }
109
+ /**
110
+ * Tags for the Clark root span when a prompt cycle ends via a terminal FSM
111
+ * transition (pre-FSM entry rejections have no root span).
112
+ */
113
+ export function promptOutcomeTagsFromTerminalEvent(event) {
114
+ switch (event.type) {
115
+ case AGENT_CANCELED:
116
+ return event.failure
117
+ ? promptOutcomeTagsFromFailure(event.failure)
118
+ : { [PROMPT_OUTCOME_TAG]: "failure" };
119
+ case USER_CANCELED:
120
+ return promptOutcomeTagsFromFailure(event.failure ?? promptFailureUserCanceled());
121
+ case AGENT_NEEDS_USER_INPUT:
122
+ return promptOutcomeTagsFromAgentNeedsUserInput(event);
123
+ case APP_RUNTIME_UPDATED_WITHOUT_EDITS:
124
+ case RUNTIME_REVIEW_FINISHED:
125
+ case V3_AGENT_FINISHED:
126
+ return { [PROMPT_OUTCOME_TAG]: "success" };
127
+ default:
128
+ return {};
129
+ }
130
+ }
131
+ export function promptOutcomeTagsFromAgentNeedsUserInput(event) {
132
+ if (event.countsAsPromptSuccess) {
133
+ return { [PROMPT_OUTCOME_TAG]: "success" };
134
+ }
135
+ if (event.advice) {
136
+ return promptOutcomeTagsFromFailure(promptFailurePlatform("unexpected"));
137
+ }
138
+ return {};
139
+ }
140
+ export function recordAwaitingUserDismissed(params) {
141
+ if (!params.dedupeKey) {
142
+ return;
143
+ }
144
+ promptRequestMetrics.recordAwaitingUserDismissed({
145
+ dedupeKey: params.dedupeKey,
146
+ reason: params.reason,
147
+ });
148
+ }
149
+ export function isOrganicPromptDuringAwaitingUserHandoff(params) {
150
+ if (!params.awaitingUserHandoffRecorded || params.internal) {
151
+ return false;
152
+ }
153
+ return params.responseMetadata == null;
154
+ }
155
+ export function awaitingUserHandoffDedupeKey(context) {
156
+ return (context.awaitingUserHandoffPromptId ??
157
+ resolvePromptOutcomeDedupeKey(context));
158
+ }
159
+ export function recordAwaitingUserHandoffDismissed(params) {
160
+ if (!params.awaitingUserHandoffRecorded) {
161
+ return;
162
+ }
163
+ recordAwaitingUserDismissed({
164
+ dedupeKey: awaitingUserHandoffDedupeKey(params),
165
+ reason: params.reason,
166
+ });
167
+ }
168
+ export function recordAwaitingUserPromptOutcome(params) {
169
+ if (!params.dedupeKey) {
170
+ return false;
171
+ }
172
+ if (params.countsAsPromptSuccess) {
173
+ recordPromptOutcome({
174
+ dedupeKey: params.dedupeKey,
175
+ outcome: "success",
176
+ });
177
+ return true;
178
+ }
179
+ if (params.advice) {
180
+ recordPromptOutcome({
181
+ dedupeKey: params.dedupeKey,
182
+ outcome: "failure",
183
+ failure: promptFailurePlatform("unexpected"),
184
+ });
185
+ }
186
+ return false;
187
+ }
188
+ /** Record attempt + immediate failure for pre-FSM entry rejections (no promptId yet). */
189
+ export function recordPromptEntryRejection(params) {
190
+ if (!params.dedupeKey) {
191
+ return;
192
+ }
193
+ promptRequestMetrics.recordEntryRejection({
194
+ dedupeKey: params.dedupeKey,
195
+ failure: params.failure,
196
+ });
197
+ }
198
+ export function _resetPromptRequestMetricsForTesting() {
199
+ promptRequestMetrics._resetForTesting();
200
+ }
201
+ //# sourceMappingURL=prompt-request-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-request-metrics.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/prompt-request-metrics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/transition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,KAAK,EACL,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAGzB,KAAK,kBAAkB,CAAC,IAAI,SAAS,UAAU,IAAI;KAChD,GAAG,IAAI,UAAU,GAAG;SAClB,SAAS,IAAI,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,GAC7F,OAAO,CAAC,UAAU,EAAE;YAAE,IAAI,EAAE,SAAS,CAAA;SAAE,CAAC,GACxC,KAAK;KACV,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;CACnC,CAAC,UAAU,CAAC,CAAC;AAGd,KAAK,sBAAsB,CACzB,GAAG,SAAS,UAAU,EACtB,IAAI,SAAS,UAAU,IACrB,mBAAmB,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAExD,eAAO,MAAM,cAAc,GAAI,GAAG,SAAS,UAAU,EAAE,OAAO,KAAK,MACzD,IAAI,SAAS,UAAU,EAC7B,OAAO,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,kBAY3C,CAAC"}
1
+ {"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/transition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,KAAK,EACL,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAIzB,KAAK,kBAAkB,CAAC,IAAI,SAAS,UAAU,IAAI;KAChD,GAAG,IAAI,UAAU,GAAG;SAClB,SAAS,IAAI,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,GAC7F,OAAO,CAAC,UAAU,EAAE;YAAE,IAAI,EAAE,SAAS,CAAA;SAAE,CAAC,GACxC,KAAK;KACV,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;CACnC,CAAC,UAAU,CAAC,CAAC;AAGd,KAAK,sBAAsB,CACzB,GAAG,SAAS,UAAU,EACtB,IAAI,SAAS,UAAU,IACrB,mBAAmB,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAExD,eAAO,MAAM,cAAc,GAAI,GAAG,SAAS,UAAU,EAAE,OAAO,KAAK,MACzD,IAAI,SAAS,UAAU,EAC7B,OAAO,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,kBAe3C,CAAC"}
@@ -1,11 +1,15 @@
1
1
  import { AGENT_CANCELED, USER_CANCELED } from "../clark-fsm.js";
2
+ import { promptFailureFromStreamAbort } from "./prompt-failure.js";
2
3
  export const transitionFrom = (clark) => {
3
4
  return (event) => {
4
5
  if (clark.context.abortController?.signal.aborted &&
5
6
  event.type !== USER_CANCELED &&
6
7
  event.type !== AGENT_CANCELED) {
7
8
  // abort signal was not explicitly handled by previous state
8
- return clark.send({ type: USER_CANCELED });
9
+ return clark.send({
10
+ type: USER_CANCELED,
11
+ failure: promptFailureFromStreamAbort(clark.context),
12
+ });
9
13
  }
10
14
  return clark.send(event);
11
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transition.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/transition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAwBhE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAyB,KAAY,EAAE,EAAE;IACrE,OAAO,CACL,KAAwC,EACxC,EAAE;QACF,IACE,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO;YAC7C,KAAK,CAAC,IAAI,KAAK,aAAa;YAC5B,KAAK,CAAC,IAAI,KAAK,cAAc,EAC7B,CAAC;YACD,4DAA4D;YAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"transition.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/transition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAiBnE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAyB,KAAY,EAAE,EAAE;IACrE,OAAO,CACL,KAAwC,EACxC,EAAE;QACF,IACE,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO;YAC7C,KAAK,CAAC,IAAI,KAAK,aAAa;YAC5B,KAAK,CAAC,IAAI,KAAK,cAAc,EAC7B,CAAC;YACD,4DAA4D;YAC5D,OAAO,KAAK,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,4BAA4B,CAAC,KAAK,CAAC,OAAO,CAAC;aACrD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type Logger } from "../../util/logger.js";
2
2
  import { type ExportedLLMObsSpan, type LLMObsNamedSpanOptions, LLMObsTracer } from "../llmobs/index.js";
3
- import { FSM, type FSMConfig, type FSMState, type FSMEventBase } from "./fsm.js";
3
+ import { FSM, type FSMOnTransitionParams, type FSMConfig, type FSMState, type FSMEventBase } from "./fsm.js";
4
4
  export type TracedFSMConfig<S extends FSMState, E extends FSMEventBase, C> = FSMConfig<S, E, C> & {
5
5
  /**
6
6
  * Create a provider function that returns tags to be added to every span.
@@ -66,6 +66,11 @@ export declare abstract class TracedFSM<S extends string, E extends {
66
66
  * before attaching it to the trace.
67
67
  * */
68
68
  protected abstract sanitizeEvent(event: E): Partial<E>;
69
+ /**
70
+ * Extra tags applied when finishing the root span on a terminal transition.
71
+ * Invoked before the terminal-state handler runs.
72
+ */
73
+ protected getRootSpanFinishTags(_params: FSMOnTransitionParams<S, E>): Tags;
69
74
  private handleTransitionTracing;
70
75
  private startRootSpanIfNeeded;
71
76
  private finishRootSpanIfOpen;
@@ -1 +1 @@
1
- {"version":3,"file":"traced-fsm.d.ts","sourceRoot":"","sources":["../../../src/ai-service/state-machine/traced-fsm.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,GAAG,EAEH,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,YAAY,EAClB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,eAAe,CACzB,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,YAAY,EACtB,CAAC,IACC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;IACvB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,GAAG,UAAU,CAAC;AAE5E,MAAM,MAAM,2BAA2B,CACrC,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,YAAY,EACtB,CAAC,IACC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,8BAAsB,SAAS,CAC7B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1B,CAAC,CACD,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpB,OAAO,CAAC,KAAK,CAIX;IAEF,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,CAAc;gBAG3B,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChC,MAAM,GAAE,YAAoC,EAC5C,MAAM,GAAE,MAAoB;IAiC9B;;OAEG;IACH,IAAW,QAAQ,IAAI,kBAAkB,GAAG,SAAS,CAEpD;IAED;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CACnC,YAAY,EAAE,CAAC,GACd,sBAAsB;IAEzB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,GAAG,yBAAyB;IAE3E;;;SAGK;IACL,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAExC,uBAAuB;IA2BrC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,YAAY;CASrB;AACD,MAAM,MAAM,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC"}
1
+ {"version":3,"file":"traced-fsm.d.ts","sourceRoot":"","sources":["../../../src/ai-service/state-machine/traced-fsm.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,GAAG,EACH,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,YAAY,EAClB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,eAAe,CACzB,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,YAAY,EACtB,CAAC,IACC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;IACvB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,GAAG,UAAU,CAAC;AAE5E,MAAM,MAAM,2BAA2B,CACrC,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,YAAY,EACtB,CAAC,IACC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,8BAAsB,SAAS,CAC7B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1B,CAAC,CACD,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpB,OAAO,CAAC,KAAK,CAIX;IAEF,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,CAAc;gBAG3B,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChC,MAAM,GAAE,YAAoC,EAC5C,MAAM,GAAE,MAAoB;IAiC9B;;OAEG;IACH,IAAW,QAAQ,IAAI,kBAAkB,GAAG,SAAS,CAEpD;IAED;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CACnC,YAAY,EAAE,CAAC,GACd,sBAAsB;IAEzB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,GAAG,yBAAyB;IAE3E;;;SAGK;IACL,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAEtD;;;OAGG;IACH,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;YAI7D,uBAAuB;IA2BrC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,YAAY;CASrB;AACD,MAAM,MAAM,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC"}
@@ -58,6 +58,13 @@ export class TracedFSM extends FSM {
58
58
  get rootSpan() {
59
59
  return this.spans.exportedRootSpan;
60
60
  }
61
+ /**
62
+ * Extra tags applied when finishing the root span on a terminal transition.
63
+ * Invoked before the terminal-state handler runs.
64
+ */
65
+ getRootSpanFinishTags(_params) {
66
+ return {};
67
+ }
61
68
  async handleTransitionTracing(next, params) {
62
69
  this.finishStateSpanIfOpen(params);
63
70
  const options = this.getStateSpanOptions(params.to);
@@ -95,7 +102,10 @@ export class TracedFSM extends FSM {
95
102
  // No active root span to finish
96
103
  return;
97
104
  }
98
- this.finishSpan(span, paramsOrError);
105
+ const extraTags = this.isTransitionParams(paramsOrError)
106
+ ? this.getRootSpanFinishTags(paramsOrError)
107
+ : {};
108
+ this.finishSpan(span, paramsOrError, extraTags);
99
109
  this.spans.rootSpan = undefined;
100
110
  this.tracer.rootSpan = undefined;
101
111
  }
@@ -123,8 +133,8 @@ export class TracedFSM extends FSM {
123
133
  });
124
134
  return span;
125
135
  }
126
- finishSpan(span, paramsOrError) {
127
- const tags = this.getTags();
136
+ finishSpan(span, paramsOrError, extraTags = {}) {
137
+ const tags = { ...this.getTags(), ...extraTags };
128
138
  if (this.isTransitionParams(paramsOrError)) {
129
139
  const sanitizedEvent = this.sanitizeEvent(paramsOrError.event);
130
140
  this.tracer.annotate(span, {
@@ -1 +1 @@
1
- {"version":3,"file":"traced-fsm.js","sourceRoot":"","sources":["../../../src/ai-service/state-machine/traced-fsm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traced-fsm.js","sourceRoot":"","sources":["../../../src/ai-service/state-machine/traced-fsm.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Tracer } from "@opentelemetry/api";
2
2
  import { SyncronizationStatus } from "@superblocksteam/library-shared/types";
3
- import { type DegradedMode, type ApplicationHashChangeSource, TracedEventEmitter } from "@superblocksteam/shared";
3
+ import { type DegradedMode, type ApplicationHashChangeSource, type CheckpointSkipReason, TracedEventEmitter } from "@superblocksteam/shared";
4
4
  import type { DraftEventMap, DraftInterface } from "../draft-interface.js";
5
5
  import { type ErrorEventMap } from "../errors/error-handler.js";
6
6
  import type { LockService } from "../lock-service/index.js";
@@ -32,6 +32,11 @@ export interface SyncServiceConfig {
32
32
  rpcClient: AutoConnectingRpcClient;
33
33
  logger: Logger;
34
34
  }
35
+ type UploadDirectoryResult = {
36
+ checkpointSkipped?: CheckpointSkipReason;
37
+ commitId?: string;
38
+ directoryHash: string;
39
+ };
35
40
  interface EventMap extends ErrorEventMap, DraftEventMap {
36
41
  /** Emitted when the sync service status changes, which indicates what the service is currently doing */
37
42
  statusChange: [
@@ -70,6 +75,7 @@ interface EventMap extends ErrorEventMap, DraftEventMap {
70
75
  * seed re-fires for the new branch.
71
76
  */
72
77
  export declare function shouldSeedLastCommitId(currentLastCommitId: string | undefined, incomingCommitId: string | undefined): incomingCommitId is string;
78
+ export declare function isTransientAiAcceptUploadError(error: unknown): boolean;
73
79
  export declare class SyncService extends TracedEventEmitter<EventMap> implements DraftInterface {
74
80
  private readonly appRootDirPath;
75
81
  readonly applicationId: string;
@@ -138,10 +144,7 @@ export declare class SyncService extends TracedEventEmitter<EventMap> implements
138
144
  *
139
145
  * @returns the dbfs hash of the most recent sync
140
146
  */
141
- uploadDirectoryNowIfNeeded(source: ApplicationHashChangeSource): Promise<{
142
- directoryHash: string;
143
- commitId?: string;
144
- }>;
147
+ uploadDirectoryNowIfNeeded(source: ApplicationHashChangeSource): Promise<UploadDirectoryResult>;
145
148
  /**
146
149
  * Immediately sync the current local application directory to the server,
147
150
  * including local draft files, even when autosync has no pending snapshot.
@@ -150,10 +153,7 @@ export declare class SyncService extends TracedEventEmitter<EventMap> implements
150
153
  * `uploadDirectoryNowIfNeeded` is only an autosync drain; it can legally
151
154
  * return the last synced hash when no autosync is pending.
152
155
  */
153
- syncCurrentDirectoryWithDraftsNow(source: ApplicationHashChangeSource): Promise<{
154
- directoryHash: string;
155
- commitId?: string;
156
- }>;
156
+ syncCurrentDirectoryWithDraftsNow(source: ApplicationHashChangeSource): Promise<UploadDirectoryResult>;
157
157
  private scheduleUploadDirectory;
158
158
  cancelPendingSync(): void;
159
159
  /**
@@ -319,6 +319,13 @@ export declare class SyncService extends TracedEventEmitter<EventMap> implements
319
319
  commitLocalDraftChanges(source: ApplicationHashChangeSource): Promise<{
320
320
  commitId: string;
321
321
  } | undefined>;
322
+ private uploadCommittedDraftForSource;
323
+ private uploadCommittedDraft;
324
+ private uploadCommittedDraftWithRetry;
325
+ private logAiAcceptCheckpointOutcome;
326
+ private aiAcceptCheckpointOutcomeFromLog;
327
+ private logWarnStructured;
328
+ private logInfoStructured;
322
329
  /**
323
330
  * Reports draft state to the server
324
331
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync-service/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync-service/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  import { normalizePath } from "vite";
2
3
  import { SyncronizationStatus } from "@superblocksteam/library-shared/types";
3
4
  import { addTracingToMethods, TracedEventEmitter, } from "@superblocksteam/shared";
@@ -16,6 +17,8 @@ import { HashCache } from "./hash-cache.js";
16
17
  import { snapshotLocalDirectory, snapshotLocalDirectoryWithDrafts, } from "./snapshot/take-snapshot.js";
17
18
  import { uploadDirectorySnapshot } from "./snapshot/upload-snapshot.js";
18
19
  const SYNC_INTERVAL_MS = 10_000;
20
+ const AI_ACCEPT_UPLOAD_MAX_ATTEMPTS = 3;
21
+ const AI_ACCEPT_UPLOAD_RETRY_DELAY_MS = 500;
19
22
  export var SyncServiceStatus;
20
23
  (function (SyncServiceStatus) {
21
24
  /** The sync service is not currently syncing or scheduled to sync */
@@ -80,6 +83,14 @@ function logSyncError(logger, error, message) {
80
83
  logger.error(message, getErrorMeta(error));
81
84
  }
82
85
  }
86
+ export function isTransientAiAcceptUploadError(error) {
87
+ const msg = error?.message ?? "";
88
+ return (msg.includes("Connection closed") ||
89
+ msg.includes("RPC client is shutting down") ||
90
+ msg.includes("RPC timeout") ||
91
+ msg.toLowerCase().includes("deadline exceeded"));
92
+ }
93
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
83
94
  export class SyncService extends TracedEventEmitter {
84
95
  appRootDirPath;
85
96
  applicationId;
@@ -536,7 +547,11 @@ export class SyncService extends TracedEventEmitter {
536
547
  this.lastCommitId = commitId;
537
548
  this.emit("commitIdChanged", commitId);
538
549
  }
539
- return { directoryHash: directorySnapshot.hash, commitId };
550
+ return {
551
+ checkpointSkipped,
552
+ commitId,
553
+ directoryHash: directorySnapshot.hash,
554
+ };
540
555
  }
541
556
  finally {
542
557
  this.status = SyncServiceStatus.IDLE;
@@ -766,20 +781,155 @@ export class SyncService extends TracedEventEmitter {
766
781
  * @returns A promise that resolves when all drafts have been committed.
767
782
  */
768
783
  async commitLocalDraftChanges(source) {
769
- this.getLogger().info(`[sync-service] Committing local draft changes (source=${source})`);
784
+ const checkpointAttemptId = source === "ai:accept" ? randomUUID() : undefined;
785
+ if (checkpointAttemptId) {
786
+ this.getLogger().info(`[sync-service] Committing local draft changes (source=${source})`, { checkpointAttemptId });
787
+ }
788
+ else {
789
+ this.getLogger().info(`[sync-service] Committing local draft changes (source=${source})`);
790
+ }
770
791
  await this.fsOperation(async () => {
771
792
  await commitAllDrafts(this.appRootDirPath);
772
793
  this.getLogger().info("[sync-service] Local draft changes committed");
773
794
  });
774
- await this.uploadDirectory(source);
775
- const result = await this.uploadDirectoryNowIfNeeded(source);
795
+ const uploadResult = await this.uploadCommittedDraftForSource(source, checkpointAttemptId);
796
+ const result = uploadResult.result;
776
797
  this.emit("draftStateChanged", false);
777
798
  this.getLogger().info(`[sync-service] commitLocalDraftChanges upload result commitId=${result.commitId ?? "none"}`);
799
+ if (source === "ai:accept") {
800
+ const checkpointLog = classifyCheckpointResult(result.commitId, result.checkpointSkipped);
801
+ this.logAiAcceptCheckpointOutcome({
802
+ attempts: uploadResult.attempts,
803
+ checkpointAttemptId,
804
+ checkpointSkipReason: checkpointLog.level === "info" ? checkpointLog.reason : undefined,
805
+ commitId: result.commitId,
806
+ outcome: this.aiAcceptCheckpointOutcomeFromLog(checkpointLog),
807
+ });
808
+ }
778
809
  if (result.commitId) {
779
810
  return { commitId: result.commitId };
780
811
  }
781
812
  return undefined;
782
813
  }
814
+ async uploadCommittedDraftForSource(source, checkpointAttemptId) {
815
+ return source === "ai:accept"
816
+ ? await this.uploadCommittedDraftWithRetry(source, checkpointAttemptId)
817
+ : { result: await this.uploadCommittedDraft(source), attempts: 1 };
818
+ }
819
+ async uploadCommittedDraft(source) {
820
+ await this.uploadDirectory(source);
821
+ return await this.uploadDirectoryNowIfNeeded(source);
822
+ }
823
+ async uploadCommittedDraftWithRetry(source, checkpointAttemptId) {
824
+ for (let attempt = 1;; attempt++) {
825
+ try {
826
+ return {
827
+ result: await this.uploadCommittedDraft(source),
828
+ attempts: attempt,
829
+ };
830
+ }
831
+ catch (error) {
832
+ if (!isTransientAiAcceptUploadError(error)) {
833
+ this.logAiAcceptCheckpointOutcome({
834
+ attempts: attempt,
835
+ checkpointAttemptId,
836
+ error,
837
+ outcome: "upload_failed",
838
+ });
839
+ throw error;
840
+ }
841
+ if (attempt >= AI_ACCEPT_UPLOAD_MAX_ATTEMPTS) {
842
+ this.getLogger().error(`[sync-service] Committed draft upload failed after max retry attempts (source=${source} maxAttempts=${AI_ACCEPT_UPLOAD_MAX_ATTEMPTS}) [expected]`, getErrorMeta(error));
843
+ this.logAiAcceptCheckpointOutcome({
844
+ attempts: attempt,
845
+ checkpointAttemptId,
846
+ error,
847
+ logError: false,
848
+ outcome: "upload_failed",
849
+ });
850
+ throw error;
851
+ }
852
+ // Intermediate retries are expected transient transport noise; final
853
+ // exhaustion is logged above as an error-level signal.
854
+ const errorMeta = getErrorMeta(error);
855
+ this.getLogger().info("[sync-service] Retrying committed draft upload after transient error [expected]", {
856
+ applicationId: this.applicationId,
857
+ branchName: this._branchName,
858
+ checkpointAttemptId,
859
+ errorKind: errorMeta.error.kind,
860
+ errorMessage: errorMeta.error.message,
861
+ nextAttempt: attempt + 1,
862
+ source,
863
+ });
864
+ await sleep(AI_ACCEPT_UPLOAD_RETRY_DELAY_MS);
865
+ }
866
+ }
867
+ }
868
+ logAiAcceptCheckpointOutcome({ attempts, checkpointAttemptId, checkpointSkipReason, commitId, error, logError = true, outcome, }) {
869
+ const logFields = {
870
+ applicationId: this.applicationId,
871
+ attempts,
872
+ branchName: this._branchName,
873
+ outcome,
874
+ source: "ai:accept",
875
+ };
876
+ if (checkpointAttemptId) {
877
+ logFields.checkpointAttemptId = checkpointAttemptId;
878
+ }
879
+ if (commitId) {
880
+ logFields.commitId = commitId;
881
+ }
882
+ if (checkpointSkipReason) {
883
+ logFields.checkpointSkipReason = checkpointSkipReason;
884
+ }
885
+ if (outcome === "upload_failed") {
886
+ this.logWarnStructured("[sync-service] ai:accept checkpoint upload failed", logFields);
887
+ if (logError && error) {
888
+ this.getLogger().error("[sync-service] ai:accept checkpoint upload failed", getErrorMeta(error));
889
+ }
890
+ }
891
+ else if (outcome === "no_commit_id") {
892
+ this.logWarnStructured("[sync-service] ai:accept checkpoint upload completed without commit", logFields);
893
+ }
894
+ else if (outcome.startsWith("skipped_")) {
895
+ this.logInfoStructured("[sync-service] ai:accept checkpoint skipped by design", logFields);
896
+ }
897
+ else {
898
+ this.logInfoStructured("[sync-service] ai:accept checkpoint upload completed", logFields);
899
+ }
900
+ }
901
+ aiAcceptCheckpointOutcomeFromLog(checkpointLog) {
902
+ if (checkpointLog.level === "none") {
903
+ return "commit_created";
904
+ }
905
+ if (checkpointLog.level === "warn") {
906
+ return "no_commit_id";
907
+ }
908
+ switch (checkpointLog.reason) {
909
+ case "draft-autosave":
910
+ return "skipped_draft_state";
911
+ case "no-changes":
912
+ return "skipped_no_changes";
913
+ case "no-op-source":
914
+ return "skipped_no_op_source";
915
+ }
916
+ }
917
+ logWarnStructured(message, attributes) {
918
+ const logger = this.getLogger();
919
+ if (logger.warnStructured) {
920
+ logger.warnStructured(message, attributes);
921
+ return;
922
+ }
923
+ logger.warn(message, attributes);
924
+ }
925
+ logInfoStructured(message, attributes) {
926
+ const logger = this.getLogger();
927
+ if (logger.infoStructured) {
928
+ logger.infoStructured(message, attributes);
929
+ return;
930
+ }
931
+ logger.info(message, attributes);
932
+ }
783
933
  /**
784
934
  * Reports draft state to the server
785
935
  */