@superblocksteam/vite-plugin-file-sync 2.0.153 → 2.0.154-next.1

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 (71) hide show
  1. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +13 -2
  2. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  3. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +31 -2
  4. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  5. package/dist/ai-service/agent/tools/apis/analysis.d.ts.map +1 -1
  6. package/dist/ai-service/agent/tools/apis/analysis.js +92 -4
  7. package/dist/ai-service/agent/tools/apis/analysis.js.map +1 -1
  8. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.d.ts +6 -0
  9. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.d.ts.map +1 -1
  10. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js +22 -4
  11. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js.map +1 -1
  12. package/dist/ai-service/agent/tools/build-debug.d.ts +13 -3
  13. package/dist/ai-service/agent/tools/build-debug.d.ts.map +1 -1
  14. package/dist/ai-service/agent/tools/build-debug.js +30 -1
  15. package/dist/ai-service/agent/tools/build-debug.js.map +1 -1
  16. package/dist/ai-service/agent/tools/debug-cache.d.ts +13 -0
  17. package/dist/ai-service/agent/tools/debug-cache.d.ts.map +1 -1
  18. package/dist/ai-service/agent/tools/debug-cache.js +42 -0
  19. package/dist/ai-service/agent/tools/debug-cache.js.map +1 -1
  20. package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.d.ts +2 -0
  21. package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.d.ts.map +1 -1
  22. package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.js +22 -3
  23. package/dist/ai-service/agent/tools2/tools/spawn-coding-subagents.js.map +1 -1
  24. package/dist/ai-service/app-interface/npm-package-lookup.d.ts +3 -2
  25. package/dist/ai-service/app-interface/npm-package-lookup.d.ts.map +1 -1
  26. package/dist/ai-service/app-interface/npm-package-lookup.js +18 -7
  27. package/dist/ai-service/app-interface/npm-package-lookup.js.map +1 -1
  28. package/dist/ai-service/app-interface/npm-registry.d.ts +20 -0
  29. package/dist/ai-service/app-interface/npm-registry.d.ts.map +1 -1
  30. package/dist/ai-service/app-interface/npm-registry.js +181 -3
  31. package/dist/ai-service/app-interface/npm-registry.js.map +1 -1
  32. package/dist/ai-service/features.d.ts +5 -0
  33. package/dist/ai-service/features.d.ts.map +1 -1
  34. package/dist/ai-service/features.js +7 -0
  35. package/dist/ai-service/features.js.map +1 -1
  36. package/dist/ai-service/index.d.ts +4 -2
  37. package/dist/ai-service/index.d.ts.map +1 -1
  38. package/dist/ai-service/index.js +62 -4
  39. package/dist/ai-service/index.js.map +1 -1
  40. package/dist/ai-service/llm/stream/observers/workflow-usage.d.ts +6 -22
  41. package/dist/ai-service/llm/stream/observers/workflow-usage.d.ts.map +1 -1
  42. package/dist/ai-service/llm/stream/observers/workflow-usage.js +18 -14
  43. package/dist/ai-service/llm/stream/observers/workflow-usage.js.map +1 -1
  44. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts +1 -1
  45. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts.map +1 -1
  46. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js +3 -2
  47. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js.map +1 -1
  48. package/dist/ai-service/state-machine/clark-fsm.d.ts +15 -1
  49. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  50. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  51. package/dist/ai-service/state-machine/handlers/llm-generating.js +4 -1
  52. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  53. package/dist/ai-service/state-machine/helpers/policy-gate-usage-metrics.d.ts +34 -0
  54. package/dist/ai-service/state-machine/helpers/policy-gate-usage-metrics.d.ts.map +1 -0
  55. package/dist/ai-service/state-machine/helpers/policy-gate-usage-metrics.js +83 -0
  56. package/dist/ai-service/state-machine/helpers/policy-gate-usage-metrics.js.map +1 -0
  57. package/dist/ai-service/state-machine/helpers/prompt-request-metrics.d.ts +7 -0
  58. package/dist/ai-service/state-machine/helpers/prompt-request-metrics.d.ts.map +1 -1
  59. package/dist/ai-service/state-machine/helpers/prompt-request-metrics.js +22 -4
  60. package/dist/ai-service/state-machine/helpers/prompt-request-metrics.js.map +1 -1
  61. package/dist/ai-service/util/scoped-token-utils.d.ts.map +1 -1
  62. package/dist/ai-service/util/scoped-token-utils.js +18 -12
  63. package/dist/ai-service/util/scoped-token-utils.js.map +1 -1
  64. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  65. package/dist/file-sync-vite-plugin.js +15 -5
  66. package/dist/file-sync-vite-plugin.js.map +1 -1
  67. package/dist/migration/restructure.d.ts +1 -0
  68. package/dist/migration/restructure.d.ts.map +1 -1
  69. package/dist/migration/restructure.js +18 -2
  70. package/dist/migration/restructure.js.map +1 -1
  71. package/package.json +8 -8
@@ -85,6 +85,7 @@ import { classificationHelper } from "./state-machine/helpers/classification.js"
85
85
  import { getContextId } from "./state-machine/helpers/context-id.js";
86
86
  import { sendUserGenerationStateChannel } from "./state-machine/helpers/peer.js";
87
87
  import { sendUserMessageChannel, clearPendingToolPermissionRequest, } from "./state-machine/helpers/peer.js";
88
+ import { collectPolicyGateLlmUsage, finalizePolicyGateUsageMetrics, policyGateFailureFromStream, recordPolicyGateAttempt, } from "./state-machine/helpers/policy-gate-usage-metrics.js";
88
89
  import { finalizePromptBillingMetrics } from "./state-machine/helpers/prompt-billing-metrics.js";
89
90
  import { paywallStopAdvice } from "./state-machine/helpers/prompt-failure.js";
90
91
  import { promptFailureFromStreamAbort, promptFailurePaywall, promptFailurePlatform, promptFailureUserCanceled, recordBaseCommitResolutionFailed, recordPromptAttempt, recordPromptEntryRejection, recordPromptOutcome, recordAwaitingUserHandoffDismissed, resolvePromptMetricLabels, resolvePromptOutcomeDedupeKey, resolvePromptRequestDedupeKey, setPromptRequestMetricIdentity, } from "./state-machine/helpers/prompt-request-metrics.js";
@@ -1721,6 +1722,7 @@ export class AiService extends TracedEventEmitter {
1721
1722
  origin: "app_migration",
1722
1723
  pendingSeedApiCount,
1723
1724
  retryMode,
1725
+ surface: "app",
1724
1726
  triggeredBy,
1725
1727
  };
1726
1728
  const baseCommitId = await this.resolveBaseCommitId(promptId);
@@ -2182,8 +2184,14 @@ export class AiService extends TracedEventEmitter {
2182
2184
  userInitiatedPromptAbort: undefined,
2183
2185
  // Third-party import turns are billed as app_migration; everything
2184
2186
  // else falls back to the default in-app Clark generation metadata.
2187
+ // Both are app building, so the surface matches the default that
2188
+ // this object replaces.
2185
2189
  usageMetadata: request.importSource
2186
- ? { origin: "app_migration", source: request.importSource }
2190
+ ? {
2191
+ origin: "app_migration",
2192
+ source: request.importSource,
2193
+ surface: "app",
2194
+ }
2187
2195
  : undefined,
2188
2196
  useMockGeneration: request.mockGeneration ?? false,
2189
2197
  planContext: mergePlanContexts(context.planContext, request.planContext),
@@ -3495,7 +3503,7 @@ export class AiService extends TracedEventEmitter {
3495
3503
  // are queued and flushed when the next peer connects.
3496
3504
  this.stablePeer.setInner({ peer: undefined });
3497
3505
  }
3498
- handleBuildSystemError(error) {
3506
+ handleBuildSystemError(error, phase) {
3499
3507
  // Explicitly copy error properties since they're not enumerable
3500
3508
  const errorWithTimestamp = {
3501
3509
  ...error, // Copy any custom enumerable properties (e.g., 'code', 'importPath')
@@ -3503,8 +3511,9 @@ export class AiService extends TracedEventEmitter {
3503
3511
  name: error.name,
3504
3512
  stack: error.stack,
3505
3513
  timestamp: Date.now(),
3514
+ phase,
3506
3515
  };
3507
- this.getLogger().info(`[ai-service] Received build system error: ${error.message}`);
3516
+ this.getLogger().info(`[ai-service] Received build system error phase=${phase ?? "unknown"}: ${error.message}`);
3508
3517
  this.clark.updateContext((context) => ({
3509
3518
  ...context,
3510
3519
  buildSystemErrors: [
@@ -3766,6 +3775,13 @@ export class AiService extends TracedEventEmitter {
3766
3775
  let textDeltaChars = 0;
3767
3776
  let modelName;
3768
3777
  let promptHash;
3778
+ // Hoisted so the outer catch can attribute a failed run to the same model
3779
+ // and provider as the attempt it belongs to, and can still price whatever
3780
+ // tokens the stream consumed before it threw.
3781
+ let coreModel;
3782
+ let providerName = "unknown";
3783
+ let streamResult;
3784
+ let attemptRecorded = false;
3769
3785
  const scanRoot = typeof this.appShell.appRootDirPath === "string"
3770
3786
  ? this.appShell.appRootDirPath
3771
3787
  : undefined;
@@ -3821,8 +3837,16 @@ export class AiService extends TracedEventEmitter {
3821
3837
  session_id: this.sessionId,
3822
3838
  trigger_type: "policy_gate",
3823
3839
  }));
3824
- const { model } = llmProvider.modelForTask("generateBroadEdit");
3840
+ const { model, providerConfig } = llmProvider.modelForTask("generateBroadEdit");
3825
3841
  modelName = typeof model === "string" ? model : model.modelId;
3842
+ providerName = providerConfig?.provider ?? "unknown";
3843
+ coreModel = llmConfig?.coreModel;
3844
+ // Counted as soon as the model resolves, because everything below is
3845
+ // inside this try and so is guaranteed a terminal outcome from the catch.
3846
+ // A throw above this line leaves no attempt and records no outcome, which
3847
+ // keeps the failure ratio free of outcomes with no denominator.
3848
+ recordPolicyGateAttempt({ coreModel });
3849
+ attemptRecorded = true;
3826
3850
  const availableIntegrations = await this.integrationStore.availableIntegrations();
3827
3851
  const integrations = availableIntegrations.map((i) => ({
3828
3852
  name: i.name,
@@ -3852,6 +3876,7 @@ export class AiService extends TracedEventEmitter {
3852
3876
  stopWhen: hasToolCall("reportReviewRun"),
3853
3877
  timeout: { totalMs: POLICY_GATE_MAX_TOTAL_TIME_MS },
3854
3878
  });
3879
+ streamResult = result;
3855
3880
  // Best-effort: surface the agent's latest tool/reasoning step in the editor
3856
3881
  // so a running policy row shows live activity instead of an opaque spinner.
3857
3882
  // Only meaningful when an editor session is connected; never blocks the run.
@@ -4041,6 +4066,18 @@ export class AiService extends TracedEventEmitter {
4041
4066
  }
4042
4067
  logger.info(`[ai-service] Policy gate execution complete: ${completedScanResult.findings.length} findings`);
4043
4068
  recordExecutionMetrics("success");
4069
+ await finalizePolicyGateUsageMetrics({
4070
+ aiAgentRunId: request.aiAgentRunId,
4071
+ chatSessionStore: this.chatSessionStore,
4072
+ coreModel,
4073
+ llmUsage: await collectPolicyGateLlmUsage({
4074
+ modelName: modelName ?? "unknown",
4075
+ providerName,
4076
+ result,
4077
+ }),
4078
+ logger,
4079
+ outcome: "success",
4080
+ });
4044
4081
  return {
4045
4082
  ...completedScanResult,
4046
4083
  runtimeMetadataJson: buildRuntimeMetadata(),
@@ -4050,6 +4087,27 @@ export class AiService extends TracedEventEmitter {
4050
4087
  if (!metricsRecorded) {
4051
4088
  recordExecutionMetrics("error");
4052
4089
  }
4090
+ // Only when the attempt was counted, so a failure that happened before
4091
+ // the model resolved cannot land as an outcome with no denominator.
4092
+ // Failing before the stream exists is still an outcome, just one with no
4093
+ // tokens to price.
4094
+ if (attemptRecorded) {
4095
+ await finalizePolicyGateUsageMetrics({
4096
+ aiAgentRunId: request.aiAgentRunId,
4097
+ chatSessionStore: this.chatSessionStore,
4098
+ coreModel,
4099
+ failure: policyGateFailureFromStream(streamErrors),
4100
+ llmUsage: streamResult
4101
+ ? await collectPolicyGateLlmUsage({
4102
+ modelName: modelName ?? "unknown",
4103
+ providerName,
4104
+ result: streamResult,
4105
+ })
4106
+ : [],
4107
+ logger,
4108
+ outcome: "failure",
4109
+ });
4110
+ }
4053
4111
  throw error;
4054
4112
  }
4055
4113
  }