@autohq/cli 0.1.563 → 0.1.565

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.
@@ -30870,7 +30870,7 @@ Object.assign(lookup, {
30870
30870
  // package.json
30871
30871
  var package_default = {
30872
30872
  name: "@autohq/cli",
30873
- version: "0.1.563",
30873
+ version: "0.1.565",
30874
30874
  license: "SEE LICENSE IN README.md",
30875
30875
  publishConfig: {
30876
30876
  access: "public"
@@ -30973,7 +30973,8 @@ var AgentBridgeOutputAckTimeoutError = class extends Error {
30973
30973
  this.name = "AgentBridgeOutputAckTimeoutError";
30974
30974
  }
30975
30975
  };
30976
- var AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_TIMEOUT_MS = 6e4;
30976
+ var AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_NO_PROGRESS_TIMEOUT_MS = 6e4;
30977
+ var AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_ABSOLUTE_TIMEOUT_MS = 30 * 6e4;
30977
30978
  var AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_REDIAL_MS = 1e3;
30978
30979
  async function runAgentBridgeSocket(options) {
30979
30980
  const socket = lookup(`${options.bridgeUrl}${RUNTIME_BRIDGE_NAMESPACE}`, {
@@ -31050,6 +31051,7 @@ async function runAgentBridgeSocket(options) {
31050
31051
  onBootstrap: options.onBootstrap,
31051
31052
  createHandler: (bootstrap) => options.createHandler({
31052
31053
  emitOutput: (output) => emitOutputWithAck(socket, output, options.runtimeLogger),
31054
+ onOutputAckProgress: terminalAuthDrain.handleOutputAckProgress,
31053
31055
  cycleSocket: () => {
31054
31056
  options.writeOutput?.(
31055
31057
  "agent_bridge_socket_cycle reason=output_ack_retries_exhausted"
@@ -31336,7 +31338,12 @@ function createTerminalAuthDrainController(input) {
31336
31338
  if (!current) {
31337
31339
  return;
31338
31340
  }
31339
- clearTimeout(current.timeout);
31341
+ if (current.absoluteTimeout) {
31342
+ clearTimeout(current.absoluteTimeout);
31343
+ }
31344
+ if (current.noProgressTimeout) {
31345
+ clearTimeout(current.noProgressTimeout);
31346
+ }
31340
31347
  if (current.redialTimer) {
31341
31348
  clearTimeout(current.redialTimer);
31342
31349
  }
@@ -31362,6 +31369,34 @@ function createTerminalAuthDrainController(input) {
31362
31369
  context
31363
31370
  );
31364
31371
  };
31372
+ const timeoutDrain = (current, input2) => {
31373
+ if (state !== current) {
31374
+ return;
31375
+ }
31376
+ logDroppedPendingOutputs(input2.reason);
31377
+ settle(() => current.reject(new Error(input2.error)));
31378
+ };
31379
+ const scheduleNoProgressTimeout = (current) => {
31380
+ if (current.noProgressTimeout) {
31381
+ clearTimeout(current.noProgressTimeout);
31382
+ }
31383
+ current.noProgressTimeout = setTimeout(() => {
31384
+ timeoutDrain(current, {
31385
+ reason: "drain_no_progress_timeout",
31386
+ error: `Timed out draining pending bridge output after terminal auth with no output ack progress for ${AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_NO_PROGRESS_TIMEOUT_MS}ms`
31387
+ });
31388
+ }, AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_NO_PROGRESS_TIMEOUT_MS);
31389
+ current.noProgressTimeout.unref?.();
31390
+ };
31391
+ const scheduleAbsoluteTimeout = (current) => {
31392
+ current.absoluteTimeout = setTimeout(() => {
31393
+ timeoutDrain(current, {
31394
+ reason: "drain_absolute_timeout",
31395
+ error: `Timed out draining pending bridge output after terminal auth at the ${AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_ABSOLUTE_TIMEOUT_MS}ms absolute safety bound`
31396
+ });
31397
+ }, AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_ABSOLUTE_TIMEOUT_MS);
31398
+ current.absoluteTimeout.unref?.();
31399
+ };
31365
31400
  const scheduleRedial = () => {
31366
31401
  const current = state;
31367
31402
  if (!current || current.redialTimer) {
@@ -31401,25 +31436,18 @@ function createTerminalAuthDrainController(input) {
31401
31436
  resolveDrain = resolve4;
31402
31437
  rejectDrain = reject;
31403
31438
  });
31404
- const timeout = setTimeout(() => {
31405
- logDroppedPendingOutputs("drain_timeout");
31406
- settle(() => {
31407
- rejectDrain(
31408
- new Error(
31409
- `Timed out draining pending bridge output after terminal auth in ${AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_TIMEOUT_MS}ms`
31410
- )
31411
- );
31412
- });
31413
- }, AGENT_BRIDGE_TERMINAL_AUTH_DRAIN_TIMEOUT_MS);
31414
- timeout.unref?.();
31415
- state = {
31439
+ const current = {
31440
+ absoluteTimeout: null,
31441
+ noProgressTimeout: null,
31416
31442
  promise: promise2,
31417
31443
  redialTimer: null,
31418
31444
  reject: rejectDrain,
31419
31445
  resolve: resolveDrain,
31420
- startedAt,
31421
- timeout
31446
+ startedAt
31422
31447
  };
31448
+ state = current;
31449
+ scheduleNoProgressTimeout(current);
31450
+ scheduleAbsoluteTimeout(current);
31423
31451
  input.writeOutput?.("agent_bridge_terminal_auth_drain_started");
31424
31452
  input.runtimeLogger?.warn("agent_bridge_terminal_auth_drain_started");
31425
31453
  input.socket.auth = { token: input.token, terminalDrain: true };
@@ -31487,11 +31515,20 @@ function createTerminalAuthDrainController(input) {
31487
31515
  }
31488
31516
  return terminalAuthExit;
31489
31517
  };
31518
+ const handleOutputAckProgress = () => {
31519
+ const current = state;
31520
+ if (!current) {
31521
+ return false;
31522
+ }
31523
+ scheduleNoProgressTimeout(current);
31524
+ return true;
31525
+ };
31490
31526
  return {
31491
31527
  begin,
31492
31528
  handleConnected,
31493
31529
  handleConnectError,
31494
31530
  handleDisconnect,
31531
+ handleOutputAckProgress,
31495
31532
  suppressesReconnect: () => terminalAuthExit || state !== null
31496
31533
  };
31497
31534
  }
@@ -38619,6 +38656,210 @@ var RuntimeRestartDiagnosticRecordSchema = external_exports.object({
38619
38656
  createdAt: external_exports.string().datetime()
38620
38657
  });
38621
38658
 
38659
+ // ../../packages/schemas/src/session-attribution-epochs.ts
38660
+ var ATTRIBUTION_GRADES = ["derived", "asserted"];
38661
+ var AttributionGradeSchema = external_exports.enum(ATTRIBUTION_GRADES);
38662
+ var AttributionRequesterSnapshotSchema = external_exports.object({
38663
+ origin: RequesterRootOriginSchema,
38664
+ userId: UserIdSchema.nullable()
38665
+ }).strict();
38666
+ var SessionAttributionEpochCreateSchema = external_exports.object({
38667
+ organizationId: OrganizationIdSchema,
38668
+ projectId: ProjectIdSchema.nullable(),
38669
+ sessionId: SessionIdSchema2,
38670
+ sourceCommandId: SessionCommandIdSchema2,
38671
+ requesterKey: external_exports.string().trim().min(1),
38672
+ requesterSnapshot: AttributionRequesterSnapshotSchema.nullable(),
38673
+ attributionGrade: AttributionGradeSchema,
38674
+ assertedByCommandId: SessionCommandIdSchema2.nullable(),
38675
+ assertedBySessionId: SessionIdSchema2.nullable(),
38676
+ assertedByAgentResourceId: external_exports.string().trim().min(1).nullable(),
38677
+ fundingSource: ModelCredentialFundingSourceSchema.nullable(),
38678
+ providerGrantId: ProviderGrantIdSchema.nullable(),
38679
+ userModelSubscriptionId: UserSubscriptionCredentialIdSchema.nullable()
38680
+ }).strict();
38681
+ var SessionAttributionEpochRecordSchema = SessionAttributionEpochCreateSchema.extend({
38682
+ id: SessionAttributionEpochIdSchema,
38683
+ createdAt: external_exports.string().datetime()
38684
+ }).strict();
38685
+
38686
+ // ../../packages/schemas/src/usage.ts
38687
+ var UsageHarnessSchema = external_exports.enum(AGENT_HARNESSES);
38688
+ var NonNegativeTokenCountSchema = external_exports.number().int().nonnegative();
38689
+ var NonNegativeUsdSchema2 = external_exports.number().nonnegative();
38690
+ var UsageEventSchema = external_exports.object({
38691
+ // Tenant + lineage attribution. projectId is nullable because a resource can
38692
+ // belong directly to an organization with no project.
38693
+ organizationId: OrganizationIdSchema,
38694
+ projectId: ProjectIdSchema.nullable(),
38695
+ sessionId: SessionIdSchema2,
38696
+ agentResourceId: external_exports.string().trim().min(1),
38697
+ harness: UsageHarnessSchema,
38698
+ // The concrete model id the call billed against (e.g. "claude-opus-4-8"),
38699
+ // taken from the response rather than any selection layer — a single run can
38700
+ // touch multiple models, so this is per-call, never per-run.
38701
+ model: external_exports.string().trim().min(1),
38702
+ inputTokens: NonNegativeTokenCountSchema,
38703
+ outputTokens: NonNegativeTokenCountSchema,
38704
+ cacheCreationTokens: NonNegativeTokenCountSchema,
38705
+ cacheReadTokens: NonNegativeTokenCountSchema,
38706
+ // The provider's own cost when it reports one, kept only for reconciliation.
38707
+ // Nullable/absent because it can be 0 or missing — never the billing source.
38708
+ providerCostUsd: NonNegativeUsdSchema2.nullable(),
38709
+ // Platform-derived cost and the rate-card version it was derived under, so a
38710
+ // later rate-card change never silently rewrites historical cost.
38711
+ derivedCostUsd: NonNegativeUsdSchema2,
38712
+ pricingVersion: external_exports.string().trim().min(1),
38713
+ // What this call debits from the organization's credit balance, and the fee
38714
+ // card it was derived under (see `./billing`). Required — a writer that
38715
+ // forgets it would silently record unbilled usage, so there is no default.
38716
+ billedCostUsd: NonNegativeUsdSchema2,
38717
+ billingFeeVersion: external_exports.string().trim().min(1),
38718
+ // Historical funding attribution for the model call. The provider grant id is
38719
+ // denormalized and nullable for platform-funded usage, matching the ledger's
38720
+ // no-FK audit-trail contract.
38721
+ fundingSource: ModelCredentialFundingSourceSchema.default("platform"),
38722
+ modelCredentialProviderGrantId: ProviderGrantIdSchema.nullable().default(null),
38723
+ // Optional during the cross-chunk rollout: B1 defines the attribution field
38724
+ // before B3 deploys its persistence column and D3 begins populating it.
38725
+ modelCredentialUserSubscriptionId: UserSubscriptionCredentialIdSchema.nullable().optional(),
38726
+ attributionEpochId: SessionAttributionEpochIdSchema.nullable().optional(),
38727
+ requesterKey: external_exports.string().trim().min(1).nullable().optional(),
38728
+ attributionGrade: AttributionGradeSchema.nullable().optional(),
38729
+ occurredAt: external_exports.string().datetime()
38730
+ });
38731
+ var UsageEventRecordSchema = UsageEventSchema.extend({
38732
+ id: external_exports.string().trim().min(1),
38733
+ attributionEpochId: SessionAttributionEpochIdSchema.nullable().default(null),
38734
+ requesterKey: external_exports.string().trim().min(1).nullable().default(null),
38735
+ attributionGrade: AttributionGradeSchema.nullable().default(null),
38736
+ // Set on append-only correction rows: this row replaces the pointed-at row's
38737
+ // amounts, and ledger readers exclude any row another row supersedes.
38738
+ supersedesUsageEventId: external_exports.string().trim().min(1).nullable().default(null),
38739
+ createdAt: external_exports.string().datetime()
38740
+ });
38741
+ var UsageTotalsSchema = external_exports.object({
38742
+ eventCount: NonNegativeTokenCountSchema,
38743
+ inputTokens: NonNegativeTokenCountSchema,
38744
+ outputTokens: NonNegativeTokenCountSchema,
38745
+ cacheCreationTokens: NonNegativeTokenCountSchema,
38746
+ cacheReadTokens: NonNegativeTokenCountSchema,
38747
+ totalTokens: NonNegativeTokenCountSchema,
38748
+ billedCostUsd: NonNegativeUsdSchema2
38749
+ });
38750
+ var SessionUsageModelSummarySchema = UsageTotalsSchema.extend({
38751
+ model: external_exports.string().trim().min(1)
38752
+ });
38753
+ var UsageFundingSummarySchema = UsageTotalsSchema.extend({
38754
+ fundingSource: ModelCredentialFundingSourceSchema,
38755
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
38756
+ });
38757
+ var SessionModelFundingStateSchema = external_exports.object({
38758
+ fundingSource: ModelCredentialFundingSourceSchema,
38759
+ provider: external_exports.string().trim().min(1),
38760
+ // The subscription owner's display name for user_subscription funding, so
38761
+ // the session header can say whose key is being used. Optional for old
38762
+ // writers; null when the name cannot resolve.
38763
+ ownerDisplayName: external_exports.string().trim().min(1).nullable().optional()
38764
+ });
38765
+ var SessionUsageCurrentAttributionSchema = external_exports.object({
38766
+ requesterKey: external_exports.string().trim().min(1),
38767
+ requesterDisplayName: external_exports.string().trim().min(1).nullable(),
38768
+ attributionGrade: AttributionGradeSchema
38769
+ }).strip();
38770
+ var SessionUsageRequesterSummarySchema = external_exports.object({
38771
+ requesterKey: external_exports.string().trim().min(1).nullable(),
38772
+ requesterDisplayName: external_exports.string().trim().min(1).nullable(),
38773
+ billedCostUsd: NonNegativeUsdSchema2,
38774
+ attributionGrades: external_exports.array(AttributionGradeSchema)
38775
+ }).strip();
38776
+ var SessionUsageResponseSchema = external_exports.object({
38777
+ sessionId: SessionIdSchema2,
38778
+ totals: UsageTotalsSchema,
38779
+ models: external_exports.array(SessionUsageModelSummarySchema),
38780
+ byFundingSource: external_exports.array(UsageFundingSummarySchema),
38781
+ byRequester: external_exports.array(SessionUsageRequesterSummarySchema).optional().default([]),
38782
+ currentAttribution: SessionUsageCurrentAttributionSchema.nullable().optional().default(null),
38783
+ funding: SessionModelFundingStateSchema.nullable(),
38784
+ firstUsageAt: external_exports.string().datetime().nullable(),
38785
+ lastUsageAt: external_exports.string().datetime().nullable()
38786
+ }).strip();
38787
+ var PROJECT_USAGE_RANGE_KEYS = ["7d", "30d"];
38788
+ var ProjectUsageRangeKeySchema = external_exports.enum(PROJECT_USAGE_RANGE_KEYS);
38789
+ var UtcDateSchema = external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/);
38790
+ var ProjectUsageTotalsSchema = UsageTotalsSchema.extend({
38791
+ sessionCount: NonNegativeTokenCountSchema,
38792
+ // Share of all tokens served from prompt-cache reads (0..1); 0 when the
38793
+ // window has no tokens at all.
38794
+ cacheReadShare: external_exports.number().min(0).max(1)
38795
+ });
38796
+ var ProjectUsageAgentSummarySchema = UsageTotalsSchema.extend({
38797
+ agentResourceId: external_exports.string().trim().min(1),
38798
+ // Resolved from the agent resource (archived agents included); null only
38799
+ // when the agent row no longer exists at all — the ledger deliberately
38800
+ // outlives its attribution targets.
38801
+ agentName: external_exports.string().trim().min(1).nullable(),
38802
+ sessionCount: NonNegativeTokenCountSchema
38803
+ });
38804
+ var ProjectUsageModelSummarySchema = UsageTotalsSchema.extend({
38805
+ model: external_exports.string().trim().min(1)
38806
+ });
38807
+ var ProjectUsageSubscriptionSummarySchema = UsageTotalsSchema.extend({
38808
+ userSubscriptionId: UserSubscriptionCredentialIdSchema.nullable(),
38809
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
38810
+ });
38811
+ var ProjectUsageSubscriptionSliceSchema = external_exports.object({
38812
+ totals: UsageTotalsSchema.extend({
38813
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
38814
+ }),
38815
+ subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema)
38816
+ });
38817
+ var ProjectUsageRequesterAttributionSchema = external_exports.object({
38818
+ requesterKey: external_exports.string().trim().min(1).nullable(),
38819
+ requesterDisplayName: external_exports.string().trim().min(1).nullable(),
38820
+ attributionEpochIds: external_exports.array(SessionAttributionEpochIdSchema),
38821
+ attributionGrades: external_exports.array(AttributionGradeSchema)
38822
+ });
38823
+ var ProjectUsageRequesterSummarySchema = UsageTotalsSchema.extend({
38824
+ ...ProjectUsageRequesterAttributionSchema.shape,
38825
+ sessionCount: NonNegativeTokenCountSchema
38826
+ });
38827
+ var ProjectUsageDayAgentSliceSchema = external_exports.object({
38828
+ agentResourceId: external_exports.string().trim().min(1),
38829
+ billedCostUsd: NonNegativeUsdSchema2
38830
+ });
38831
+ var ProjectUsageDayModelSliceSchema = external_exports.object({
38832
+ model: external_exports.string().trim().min(1),
38833
+ billedCostUsd: NonNegativeUsdSchema2
38834
+ });
38835
+ var ProjectUsageDayPointSchema = UsageTotalsSchema.extend({
38836
+ date: UtcDateSchema,
38837
+ byAgent: external_exports.array(ProjectUsageDayAgentSliceSchema),
38838
+ byModel: external_exports.array(ProjectUsageDayModelSliceSchema)
38839
+ });
38840
+ var ProjectUsageResponseSchema = external_exports.object({
38841
+ organizationId: OrganizationIdSchema,
38842
+ projectId: ProjectIdSchema,
38843
+ range: external_exports.object({
38844
+ key: ProjectUsageRangeKeySchema,
38845
+ since: external_exports.string().datetime(),
38846
+ until: external_exports.string().datetime()
38847
+ }),
38848
+ totals: ProjectUsageTotalsSchema,
38849
+ taskThroughput: external_exports.object({
38850
+ created: external_exports.number().int().nonnegative(),
38851
+ completed: external_exports.number().int().nonnegative(),
38852
+ dropped: external_exports.number().int().nonnegative(),
38853
+ costPerCompletedTaskUsd: NonNegativeUsdSchema2.nullable()
38854
+ }).optional(),
38855
+ byAgent: external_exports.array(ProjectUsageAgentSummarySchema),
38856
+ byModel: external_exports.array(ProjectUsageModelSummarySchema),
38857
+ byFundingSource: external_exports.array(UsageFundingSummarySchema),
38858
+ subscriptionUsage: ProjectUsageSubscriptionSliceSchema,
38859
+ byRequester: external_exports.array(ProjectUsageRequesterSummarySchema),
38860
+ daily: external_exports.array(ProjectUsageDayPointSchema)
38861
+ });
38862
+
38622
38863
  // ../../packages/schemas/src/session-introspection.ts
38623
38864
  var TruncatedValueSchema = external_exports.object({
38624
38865
  truncated: external_exports.literal(true),
@@ -38771,6 +39012,44 @@ var RunModelFallbackSchema = external_exports.object({
38771
39012
  activatedAt: external_exports.string().datetime().nullable(),
38772
39013
  fallbackModelId: external_exports.string().nullable()
38773
39014
  });
39015
+ var RUN_USAGE_BREAKDOWN_LIMIT = 8;
39016
+ var RunUsageTotalsSchema = external_exports.object({
39017
+ eventCount: external_exports.number().int().nonnegative(),
39018
+ inputTokens: external_exports.number().int().nonnegative(),
39019
+ outputTokens: external_exports.number().int().nonnegative(),
39020
+ cacheCreationTokens: external_exports.number().int().nonnegative(),
39021
+ cacheReadTokens: external_exports.number().int().nonnegative(),
39022
+ /**
39023
+ * Stored rate-card-derived model cost; never recomputed by this read.
39024
+ * Omitted when the caller lacks `billing:read`.
39025
+ */
39026
+ derivedCostUsd: external_exports.number().nonnegative().optional(),
39027
+ /**
39028
+ * Sum of provider-reported costs only when every included event reported
39029
+ * one; null for empty, legacy, or partially reported groups, and omitted
39030
+ * when the caller lacks `billing:read`.
39031
+ */
39032
+ providerCostUsd: external_exports.number().nonnegative().nullable().optional()
39033
+ });
39034
+ var RunUsageHarnessModelSchema = RunUsageTotalsSchema.extend({
39035
+ harness: UsageHarnessSchema,
39036
+ model: external_exports.string().trim().min(1)
39037
+ });
39038
+ var RunUsageSummarySchema = external_exports.object({
39039
+ totals: RunUsageTotalsSchema,
39040
+ /**
39041
+ * Cache reads divided by prompt-side tokens: input + cache creation/write +
39042
+ * cache read. Output tokens are excluded; value is null when the exposed
39043
+ * denominator is zero.
39044
+ */
39045
+ cacheReadRatio: external_exports.object({
39046
+ denominatorTokens: external_exports.number().int().nonnegative(),
39047
+ value: external_exports.number().min(0).max(1).nullable()
39048
+ }),
39049
+ /** Highest derived-cost harness/model groups, in descending spend order. */
39050
+ byHarnessModel: external_exports.array(RunUsageHarnessModelSchema).max(RUN_USAGE_BREAKDOWN_LIMIT),
39051
+ breakdownTruncated: external_exports.boolean()
39052
+ });
38774
39053
  var RunSummarySchema = external_exports.object({
38775
39054
  session: external_exports.object({
38776
39055
  id: SessionIdSchema2,
@@ -38886,7 +39165,9 @@ var RunSummarySchema = external_exports.object({
38886
39165
  recent: external_exports.array(RunRuntimeRestartSchema)
38887
39166
  }),
38888
39167
  /** Latest same-provider model-fallback activation for the session, if any. */
38889
- modelFallback: RunModelFallbackSchema
39168
+ modelFallback: RunModelFallbackSchema,
39169
+ /** Current unsuperseded model usage for the session. */
39170
+ usage: RunUsageSummarySchema
38890
39171
  });
38891
39172
 
38892
39173
  // ../../packages/schemas/src/session-turns.ts
@@ -39183,33 +39464,6 @@ var SessionCommandDebounceRevertInputSchema = external_exports.object({
39183
39464
  }).strip();
39184
39465
  var RealtimeRunCursorSchema = external_exports.string().regex(/^rt:(0|[1-9]\d*)$/);
39185
39466
 
39186
- // ../../packages/schemas/src/session-attribution-epochs.ts
39187
- var ATTRIBUTION_GRADES = ["derived", "asserted"];
39188
- var AttributionGradeSchema = external_exports.enum(ATTRIBUTION_GRADES);
39189
- var AttributionRequesterSnapshotSchema = external_exports.object({
39190
- origin: RequesterRootOriginSchema,
39191
- userId: UserIdSchema.nullable()
39192
- }).strict();
39193
- var SessionAttributionEpochCreateSchema = external_exports.object({
39194
- organizationId: OrganizationIdSchema,
39195
- projectId: ProjectIdSchema.nullable(),
39196
- sessionId: SessionIdSchema2,
39197
- sourceCommandId: SessionCommandIdSchema2,
39198
- requesterKey: external_exports.string().trim().min(1),
39199
- requesterSnapshot: AttributionRequesterSnapshotSchema.nullable(),
39200
- attributionGrade: AttributionGradeSchema,
39201
- assertedByCommandId: SessionCommandIdSchema2.nullable(),
39202
- assertedBySessionId: SessionIdSchema2.nullable(),
39203
- assertedByAgentResourceId: external_exports.string().trim().min(1).nullable(),
39204
- fundingSource: ModelCredentialFundingSourceSchema.nullable(),
39205
- providerGrantId: ProviderGrantIdSchema.nullable(),
39206
- userModelSubscriptionId: UserSubscriptionCredentialIdSchema.nullable()
39207
- }).strict();
39208
- var SessionAttributionEpochRecordSchema = SessionAttributionEpochCreateSchema.extend({
39209
- id: SessionAttributionEpochIdSchema,
39210
- createdAt: external_exports.string().datetime()
39211
- }).strict();
39212
-
39213
39467
  // ../../packages/schemas/src/spend-cap-runtime.ts
39214
39468
  var SpendCapOverrideStateSchema = external_exports.object({
39215
39469
  active: external_exports.boolean(),
@@ -39361,183 +39615,6 @@ var ResourceReconciliationScopeSchema = external_exports.object({
39361
39615
  projectId: external_exports.string().trim().min(1).nullable()
39362
39616
  }).strict();
39363
39617
 
39364
- // ../../packages/schemas/src/usage.ts
39365
- var UsageHarnessSchema = external_exports.enum(AGENT_HARNESSES);
39366
- var NonNegativeTokenCountSchema = external_exports.number().int().nonnegative();
39367
- var NonNegativeUsdSchema2 = external_exports.number().nonnegative();
39368
- var UsageEventSchema = external_exports.object({
39369
- // Tenant + lineage attribution. projectId is nullable because a resource can
39370
- // belong directly to an organization with no project.
39371
- organizationId: OrganizationIdSchema,
39372
- projectId: ProjectIdSchema.nullable(),
39373
- sessionId: SessionIdSchema2,
39374
- agentResourceId: external_exports.string().trim().min(1),
39375
- harness: UsageHarnessSchema,
39376
- // The concrete model id the call billed against (e.g. "claude-opus-4-8"),
39377
- // taken from the response rather than any selection layer — a single run can
39378
- // touch multiple models, so this is per-call, never per-run.
39379
- model: external_exports.string().trim().min(1),
39380
- inputTokens: NonNegativeTokenCountSchema,
39381
- outputTokens: NonNegativeTokenCountSchema,
39382
- cacheCreationTokens: NonNegativeTokenCountSchema,
39383
- cacheReadTokens: NonNegativeTokenCountSchema,
39384
- // The provider's own cost when it reports one, kept only for reconciliation.
39385
- // Nullable/absent because it can be 0 or missing — never the billing source.
39386
- providerCostUsd: NonNegativeUsdSchema2.nullable(),
39387
- // Platform-derived cost and the rate-card version it was derived under, so a
39388
- // later rate-card change never silently rewrites historical cost.
39389
- derivedCostUsd: NonNegativeUsdSchema2,
39390
- pricingVersion: external_exports.string().trim().min(1),
39391
- // What this call debits from the organization's credit balance, and the fee
39392
- // card it was derived under (see `./billing`). Required — a writer that
39393
- // forgets it would silently record unbilled usage, so there is no default.
39394
- billedCostUsd: NonNegativeUsdSchema2,
39395
- billingFeeVersion: external_exports.string().trim().min(1),
39396
- // Historical funding attribution for the model call. The provider grant id is
39397
- // denormalized and nullable for platform-funded usage, matching the ledger's
39398
- // no-FK audit-trail contract.
39399
- fundingSource: ModelCredentialFundingSourceSchema.default("platform"),
39400
- modelCredentialProviderGrantId: ProviderGrantIdSchema.nullable().default(null),
39401
- // Optional during the cross-chunk rollout: B1 defines the attribution field
39402
- // before B3 deploys its persistence column and D3 begins populating it.
39403
- modelCredentialUserSubscriptionId: UserSubscriptionCredentialIdSchema.nullable().optional(),
39404
- attributionEpochId: SessionAttributionEpochIdSchema.nullable().optional(),
39405
- requesterKey: external_exports.string().trim().min(1).nullable().optional(),
39406
- attributionGrade: AttributionGradeSchema.nullable().optional(),
39407
- occurredAt: external_exports.string().datetime()
39408
- });
39409
- var UsageEventRecordSchema = UsageEventSchema.extend({
39410
- id: external_exports.string().trim().min(1),
39411
- attributionEpochId: SessionAttributionEpochIdSchema.nullable().default(null),
39412
- requesterKey: external_exports.string().trim().min(1).nullable().default(null),
39413
- attributionGrade: AttributionGradeSchema.nullable().default(null),
39414
- // Set on append-only correction rows: this row replaces the pointed-at row's
39415
- // amounts, and ledger readers exclude any row another row supersedes.
39416
- supersedesUsageEventId: external_exports.string().trim().min(1).nullable().default(null),
39417
- createdAt: external_exports.string().datetime()
39418
- });
39419
- var UsageTotalsSchema = external_exports.object({
39420
- eventCount: NonNegativeTokenCountSchema,
39421
- inputTokens: NonNegativeTokenCountSchema,
39422
- outputTokens: NonNegativeTokenCountSchema,
39423
- cacheCreationTokens: NonNegativeTokenCountSchema,
39424
- cacheReadTokens: NonNegativeTokenCountSchema,
39425
- totalTokens: NonNegativeTokenCountSchema,
39426
- billedCostUsd: NonNegativeUsdSchema2
39427
- });
39428
- var SessionUsageModelSummarySchema = UsageTotalsSchema.extend({
39429
- model: external_exports.string().trim().min(1)
39430
- });
39431
- var UsageFundingSummarySchema = UsageTotalsSchema.extend({
39432
- fundingSource: ModelCredentialFundingSourceSchema,
39433
- coveredInferenceCostUsd: NonNegativeUsdSchema2
39434
- });
39435
- var SessionModelFundingStateSchema = external_exports.object({
39436
- fundingSource: ModelCredentialFundingSourceSchema,
39437
- provider: external_exports.string().trim().min(1),
39438
- // The subscription owner's display name for user_subscription funding, so
39439
- // the session header can say whose key is being used. Optional for old
39440
- // writers; null when the name cannot resolve.
39441
- ownerDisplayName: external_exports.string().trim().min(1).nullable().optional()
39442
- });
39443
- var SessionUsageCurrentAttributionSchema = external_exports.object({
39444
- requesterKey: external_exports.string().trim().min(1),
39445
- requesterDisplayName: external_exports.string().trim().min(1).nullable(),
39446
- attributionGrade: AttributionGradeSchema
39447
- }).strip();
39448
- var SessionUsageRequesterSummarySchema = external_exports.object({
39449
- requesterKey: external_exports.string().trim().min(1).nullable(),
39450
- requesterDisplayName: external_exports.string().trim().min(1).nullable(),
39451
- billedCostUsd: NonNegativeUsdSchema2,
39452
- attributionGrades: external_exports.array(AttributionGradeSchema)
39453
- }).strip();
39454
- var SessionUsageResponseSchema = external_exports.object({
39455
- sessionId: SessionIdSchema2,
39456
- totals: UsageTotalsSchema,
39457
- models: external_exports.array(SessionUsageModelSummarySchema),
39458
- byFundingSource: external_exports.array(UsageFundingSummarySchema),
39459
- byRequester: external_exports.array(SessionUsageRequesterSummarySchema).optional().default([]),
39460
- currentAttribution: SessionUsageCurrentAttributionSchema.nullable().optional().default(null),
39461
- funding: SessionModelFundingStateSchema.nullable(),
39462
- firstUsageAt: external_exports.string().datetime().nullable(),
39463
- lastUsageAt: external_exports.string().datetime().nullable()
39464
- }).strip();
39465
- var PROJECT_USAGE_RANGE_KEYS = ["7d", "30d"];
39466
- var ProjectUsageRangeKeySchema = external_exports.enum(PROJECT_USAGE_RANGE_KEYS);
39467
- var UtcDateSchema = external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/);
39468
- var ProjectUsageTotalsSchema = UsageTotalsSchema.extend({
39469
- sessionCount: NonNegativeTokenCountSchema,
39470
- // Share of all tokens served from prompt-cache reads (0..1); 0 when the
39471
- // window has no tokens at all.
39472
- cacheReadShare: external_exports.number().min(0).max(1)
39473
- });
39474
- var ProjectUsageAgentSummarySchema = UsageTotalsSchema.extend({
39475
- agentResourceId: external_exports.string().trim().min(1),
39476
- // Resolved from the agent resource (archived agents included); null only
39477
- // when the agent row no longer exists at all — the ledger deliberately
39478
- // outlives its attribution targets.
39479
- agentName: external_exports.string().trim().min(1).nullable(),
39480
- sessionCount: NonNegativeTokenCountSchema
39481
- });
39482
- var ProjectUsageModelSummarySchema = UsageTotalsSchema.extend({
39483
- model: external_exports.string().trim().min(1)
39484
- });
39485
- var ProjectUsageSubscriptionSummarySchema = UsageTotalsSchema.extend({
39486
- userSubscriptionId: UserSubscriptionCredentialIdSchema.nullable(),
39487
- coveredInferenceCostUsd: NonNegativeUsdSchema2
39488
- });
39489
- var ProjectUsageSubscriptionSliceSchema = external_exports.object({
39490
- totals: UsageTotalsSchema.extend({
39491
- coveredInferenceCostUsd: NonNegativeUsdSchema2
39492
- }),
39493
- subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema)
39494
- });
39495
- var ProjectUsageRequesterAttributionSchema = external_exports.object({
39496
- requesterKey: external_exports.string().trim().min(1).nullable(),
39497
- requesterDisplayName: external_exports.string().trim().min(1).nullable(),
39498
- attributionEpochIds: external_exports.array(SessionAttributionEpochIdSchema),
39499
- attributionGrades: external_exports.array(AttributionGradeSchema)
39500
- });
39501
- var ProjectUsageRequesterSummarySchema = UsageTotalsSchema.extend({
39502
- ...ProjectUsageRequesterAttributionSchema.shape,
39503
- sessionCount: NonNegativeTokenCountSchema
39504
- });
39505
- var ProjectUsageDayAgentSliceSchema = external_exports.object({
39506
- agentResourceId: external_exports.string().trim().min(1),
39507
- billedCostUsd: NonNegativeUsdSchema2
39508
- });
39509
- var ProjectUsageDayModelSliceSchema = external_exports.object({
39510
- model: external_exports.string().trim().min(1),
39511
- billedCostUsd: NonNegativeUsdSchema2
39512
- });
39513
- var ProjectUsageDayPointSchema = UsageTotalsSchema.extend({
39514
- date: UtcDateSchema,
39515
- byAgent: external_exports.array(ProjectUsageDayAgentSliceSchema),
39516
- byModel: external_exports.array(ProjectUsageDayModelSliceSchema)
39517
- });
39518
- var ProjectUsageResponseSchema = external_exports.object({
39519
- organizationId: OrganizationIdSchema,
39520
- projectId: ProjectIdSchema,
39521
- range: external_exports.object({
39522
- key: ProjectUsageRangeKeySchema,
39523
- since: external_exports.string().datetime(),
39524
- until: external_exports.string().datetime()
39525
- }),
39526
- totals: ProjectUsageTotalsSchema,
39527
- taskThroughput: external_exports.object({
39528
- created: external_exports.number().int().nonnegative(),
39529
- completed: external_exports.number().int().nonnegative(),
39530
- dropped: external_exports.number().int().nonnegative(),
39531
- costPerCompletedTaskUsd: NonNegativeUsdSchema2.nullable()
39532
- }).optional(),
39533
- byAgent: external_exports.array(ProjectUsageAgentSummarySchema),
39534
- byModel: external_exports.array(ProjectUsageModelSummarySchema),
39535
- byFundingSource: external_exports.array(UsageFundingSummarySchema),
39536
- subscriptionUsage: ProjectUsageSubscriptionSliceSchema,
39537
- byRequester: external_exports.array(ProjectUsageRequesterSummarySchema),
39538
- daily: external_exports.array(ProjectUsageDayPointSchema)
39539
- });
39540
-
39541
39618
  // ../../packages/schemas/src/user-subscriptions.ts
39542
39619
  var ATTRIBUTION_COLD_BOUNDARY_IDLE_MS = 5 * 6e4;
39543
39620
  var USER_SUBSCRIPTION_PROVIDERS = ["openai"];
@@ -72602,6 +72679,7 @@ var AgentBridgeOutputBuffer = class {
72602
72679
  if (isSuccessfulOutputAck(ack)) {
72603
72680
  this.pendingOutputs.delete(output.outputSeq);
72604
72681
  this.discardOnFailureOutputSeqs.delete(output.outputSeq);
72682
+ this.input.onOutputAckProgress?.();
72605
72683
  this.input.runtimeLogger?.info(
72606
72684
  "agent_bridge_output_buffer_emit_ready",
72607
72685
  this.outputLogContext(output, {
@@ -77921,6 +77999,7 @@ function createHarnessCommandHandler(input) {
77921
77999
  const config2 = resolveHarnessConfig(input.bootstrap);
77922
78000
  const base = {
77923
78001
  emitOutput: input.emitOutput,
78002
+ ...input.onOutputAckProgress ? { onOutputAckProgress: input.onOutputAckProgress } : {},
77924
78003
  ...input.cycleSocket ? { cycleSocket: input.cycleSocket } : {},
77925
78004
  ...input.outputSeqStart !== void 0 ? { outputSeqStart: input.outputSeqStart } : {},
77926
78005
  ...input.runtimeLogger ? { runtimeLogger: input.runtimeLogger } : {},