@autohq/cli 0.1.504 → 0.1.506

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.
@@ -30866,7 +30866,7 @@ Object.assign(lookup, {
30866
30866
  // package.json
30867
30867
  var package_default = {
30868
30868
  name: "@autohq/cli",
30869
- version: "0.1.504",
30869
+ version: "0.1.506",
30870
30870
  license: "SEE LICENSE IN README.md",
30871
30871
  publishConfig: {
30872
30872
  access: "public"
@@ -32540,10 +32540,18 @@ var ChatGptCodexQuotaMeasurementResultSchema = external_exports.discriminatedUni
32540
32540
  }).strict()
32541
32541
  ]
32542
32542
  );
32543
+ var USER_SUBSCRIPTION_QUOTA_MAX_AGE_MS = 5 * 6e4;
32544
+ var UserSubscriptionQuotaBudgetStatusSchema = external_exports.enum([
32545
+ "under_budget",
32546
+ "quota_budget_reached",
32547
+ "quota_snapshot_stale",
32548
+ "quota_unknown"
32549
+ ]);
32543
32550
  var UserSubscriptionOperationalStateSchema = external_exports.object({
32544
32551
  version: external_exports.literal(1),
32545
32552
  earliestRefreshAt: external_exports.string().nullable().catch(null),
32546
32553
  latestQuota: ChatGptCodexQuotaMetadataSchema.nullable().catch(null),
32554
+ latestQuotaMeasurement: ChatGptCodexQuotaMeasurementResultSchema.nullable().catch(null),
32547
32555
  error: external_exports.enum(["quota_exhausted", "refresh_failed", "unusable_credential"]).nullable().catch(null),
32548
32556
  quotaExhaustedAt: external_exports.string().nullable().catch(null).default(null)
32549
32557
  }).passthrough();
@@ -38436,6 +38444,11 @@ var SessionAttributionEpochCreateSchema = external_exports.object({
38436
38444
  providerGrantId: ProviderGrantIdSchema.nullable(),
38437
38445
  userModelSubscriptionId: UserSubscriptionCredentialIdSchema.nullable()
38438
38446
  }).strict();
38447
+ var SessionAttributionEpochAssertionSchema = SessionAttributionEpochCreateSchema.omit({
38448
+ fundingSource: true,
38449
+ providerGrantId: true,
38450
+ userModelSubscriptionId: true
38451
+ }).strict();
38439
38452
  var SessionAttributionEpochRecordSchema = SessionAttributionEpochCreateSchema.extend({
38440
38453
  id: SessionAttributionEpochIdSchema,
38441
38454
  createdAt: external_exports.string().datetime()
@@ -38718,6 +38731,22 @@ var ProjectUsageSubscriptionSliceSchema = external_exports.object({
38718
38731
  }),
38719
38732
  subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema)
38720
38733
  });
38734
+ var ProjectUsageRequesterAttributionSchema = external_exports.object({
38735
+ requesterKey: external_exports.string().trim().min(1).nullable(),
38736
+ requesterDisplayName: external_exports.string().trim().min(1).nullable(),
38737
+ attributionEpochIds: external_exports.array(SessionAttributionEpochIdSchema),
38738
+ attributionGrades: external_exports.array(AttributionGradeSchema)
38739
+ });
38740
+ var ProjectUsageRequesterSummarySchema = UsageTotalsSchema.extend({
38741
+ ...ProjectUsageRequesterAttributionSchema.shape,
38742
+ sessionCount: NonNegativeTokenCountSchema
38743
+ });
38744
+ var ProjectUsageSharedSessionRequesterSchema = UsageTotalsSchema.extend(ProjectUsageRequesterAttributionSchema.shape);
38745
+ var ProjectUsageSharedSessionSchema = external_exports.object({
38746
+ sessionId: SessionIdSchema2,
38747
+ totals: UsageTotalsSchema,
38748
+ requesters: external_exports.array(ProjectUsageSharedSessionRequesterSchema).min(2)
38749
+ });
38721
38750
  var ProjectUsageDayAgentSliceSchema = external_exports.object({
38722
38751
  agentResourceId: external_exports.string().trim().min(1),
38723
38752
  billedCostUsd: NonNegativeUsdSchema2
@@ -38744,8 +38773,40 @@ var ProjectUsageResponseSchema = external_exports.object({
38744
38773
  byModel: external_exports.array(ProjectUsageModelSummarySchema),
38745
38774
  byFundingSource: external_exports.array(UsageFundingSummarySchema),
38746
38775
  subscriptionUsage: ProjectUsageSubscriptionSliceSchema,
38776
+ byRequester: external_exports.array(ProjectUsageRequesterSummarySchema),
38777
+ sharedSessions: external_exports.array(ProjectUsageSharedSessionSchema),
38747
38778
  daily: external_exports.array(ProjectUsageDayPointSchema)
38779
+ }).superRefine((usage, context) => {
38780
+ if (!billedCostUsdReconciles(usage.byRequester, usage.totals.billedCostUsd)) {
38781
+ context.addIssue({
38782
+ code: "custom",
38783
+ message: "Requester spend must reconcile to project spend",
38784
+ path: ["byRequester"]
38785
+ });
38786
+ }
38787
+ usage.sharedSessions.forEach((session, index) => {
38788
+ if (!billedCostUsdReconciles(
38789
+ session.requesters,
38790
+ session.totals.billedCostUsd
38791
+ )) {
38792
+ context.addIssue({
38793
+ code: "custom",
38794
+ message: "Requester spend must reconcile to shared-session spend",
38795
+ path: ["sharedSessions", index, "requesters"]
38796
+ });
38797
+ }
38798
+ });
38748
38799
  });
38800
+ var USD_RECONCILIATION_TOLERANCE = 1e-8;
38801
+ function billedCostUsdReconciles(rows, expectedTotal) {
38802
+ return Math.abs(sumBilledCostUsd(rows) - roundUsd(expectedTotal)) <= USD_RECONCILIATION_TOLERANCE;
38803
+ }
38804
+ function sumBilledCostUsd(rows) {
38805
+ return roundUsd(rows.reduce((total, row) => total + row.billedCostUsd, 0));
38806
+ }
38807
+ function roundUsd(value2) {
38808
+ return Number(value2.toFixed(10));
38809
+ }
38749
38810
 
38750
38811
  // ../../packages/schemas/src/user-subscriptions.ts
38751
38812
  var USER_SUBSCRIPTION_PROVIDERS = ["openai"];
@@ -38788,7 +38849,8 @@ var UserSubscriptionPolicySchema = external_exports.object({
38788
38849
  organizationId: OrganizationIdSchema,
38789
38850
  projectId: ProjectIdSchema.nullable(),
38790
38851
  mode: UserSubscriptionPolicyModeSchema,
38791
- allowAgentAttribution: external_exports.boolean().default(false)
38852
+ allowAgentAttribution: external_exports.boolean().default(false),
38853
+ budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null)
38792
38854
  }).strict();
38793
38855
  var UserSubscriptionFundingCandidateSchema = external_exports.object({
38794
38856
  credentialId: UserSubscriptionCredentialIdSchema,
@@ -38796,7 +38858,9 @@ var UserSubscriptionFundingCandidateSchema = external_exports.object({
38796
38858
  status: UserSubscriptionCredentialStatusSchema,
38797
38859
  policyMode: UserSubscriptionPolicyModeSchema,
38798
38860
  allowAgentAttribution: external_exports.boolean().default(false),
38799
- ownerIsScopeMember: external_exports.boolean()
38861
+ ownerIsScopeMember: external_exports.boolean(),
38862
+ budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
38863
+ quotaBudgetStatus: UserSubscriptionQuotaBudgetStatusSchema.default("under_budget")
38800
38864
  }).strict();
38801
38865
  var UserSubscriptionFundingDecisionInputSchema = external_exports.object({
38802
38866
  harness: external_exports.enum(AGENT_HARNESSES),
@@ -38819,7 +38883,10 @@ var USER_SUBSCRIPTION_REJECTION_REASONS = [
38819
38883
  "ineligible_model",
38820
38884
  "agent_attribution_disabled",
38821
38885
  "agent_attribution_untrusted",
38822
- "policy_not_applicable"
38886
+ "policy_not_applicable",
38887
+ "quota_budget_reached",
38888
+ "quota_snapshot_stale",
38889
+ "quota_unknown"
38823
38890
  ];
38824
38891
  var UserSubscriptionRejectionReasonSchema = external_exports.enum(
38825
38892
  USER_SUBSCRIPTION_REJECTION_REASONS
package/dist/index.js CHANGED
@@ -16128,7 +16128,7 @@ var init_chat = __esm({
16128
16128
  });
16129
16129
 
16130
16130
  // ../../packages/schemas/src/chatgpt-codex.ts
16131
- var CHATGPT_CODEX_BACKEND_BASE_URL, CHATGPT_CODEX_RESPONSES_ENDPOINT, CHATGPT_CODEX_SSE_EVENT_SEQUENCE, ChatGptCodexSseEventSchema, ChatGptCodexStreamingRequestSchema, CHATGPT_CODEX_ELIGIBLE_MODELS, ChatGptCodexEligibleModelSchema, ChatGptCodexCompletionUsageSchema, ChatGptCodexErrorResponseSchema, CHATGPT_CODEX_ERROR_KINDS, ChatGptCodexErrorKindSchema, ChatGptCodexQuotaWindowSchema, ChatGptCodexQuotaMetadataSchema, ChatGptCodexQuotaMeasurementWindowSchema, ChatGptCodexQuotaMeasurementUnavailableReasonSchema, ChatGptCodexQuotaMeasurementResultSchema, UserSubscriptionOperationalStateSchema, CHATGPT_CODEX_OAUTH_CLIENT_ID, CHATGPT_CODEX_OAUTH_SCOPE, ChatGptCodexRefreshRequestSchema, ChatGptCodexRefreshResponseSchema, ChatGptCodexAccessTokenAuthClaimSchema;
16131
+ var CHATGPT_CODEX_BACKEND_BASE_URL, CHATGPT_CODEX_RESPONSES_ENDPOINT, CHATGPT_CODEX_SSE_EVENT_SEQUENCE, ChatGptCodexSseEventSchema, ChatGptCodexStreamingRequestSchema, CHATGPT_CODEX_ELIGIBLE_MODELS, ChatGptCodexEligibleModelSchema, ChatGptCodexCompletionUsageSchema, ChatGptCodexErrorResponseSchema, CHATGPT_CODEX_ERROR_KINDS, ChatGptCodexErrorKindSchema, ChatGptCodexQuotaWindowSchema, ChatGptCodexQuotaMetadataSchema, ChatGptCodexQuotaMeasurementWindowSchema, ChatGptCodexQuotaMeasurementUnavailableReasonSchema, ChatGptCodexQuotaMeasurementResultSchema, USER_SUBSCRIPTION_QUOTA_MAX_AGE_MS, UserSubscriptionQuotaBudgetStatusSchema, UserSubscriptionOperationalStateSchema, CHATGPT_CODEX_OAUTH_CLIENT_ID, CHATGPT_CODEX_OAUTH_SCOPE, ChatGptCodexRefreshRequestSchema, ChatGptCodexRefreshResponseSchema, ChatGptCodexAccessTokenAuthClaimSchema;
16132
16132
  var init_chatgpt_codex = __esm({
16133
16133
  "../../packages/schemas/src/chatgpt-codex.ts"() {
16134
16134
  "use strict";
@@ -16220,10 +16220,18 @@ var init_chatgpt_codex = __esm({
16220
16220
  }).strict()
16221
16221
  ]
16222
16222
  );
16223
+ USER_SUBSCRIPTION_QUOTA_MAX_AGE_MS = 5 * 6e4;
16224
+ UserSubscriptionQuotaBudgetStatusSchema = external_exports.enum([
16225
+ "under_budget",
16226
+ "quota_budget_reached",
16227
+ "quota_snapshot_stale",
16228
+ "quota_unknown"
16229
+ ]);
16223
16230
  UserSubscriptionOperationalStateSchema = external_exports.object({
16224
16231
  version: external_exports.literal(1),
16225
16232
  earliestRefreshAt: external_exports.string().nullable().catch(null),
16226
16233
  latestQuota: ChatGptCodexQuotaMetadataSchema.nullable().catch(null),
16234
+ latestQuotaMeasurement: ChatGptCodexQuotaMeasurementResultSchema.nullable().catch(null),
16227
16235
  error: external_exports.enum(["quota_exhausted", "refresh_failed", "unusable_credential"]).nullable().catch(null),
16228
16236
  quotaExhaustedAt: external_exports.string().nullable().catch(null).default(null)
16229
16237
  }).passthrough();
@@ -22817,7 +22825,7 @@ var init_runtimes = __esm({
22817
22825
  });
22818
22826
 
22819
22827
  // ../../packages/schemas/src/session-attribution-epochs.ts
22820
- var ATTRIBUTION_GRADES, AttributionGradeSchema, AttributionRequesterSnapshotSchema, SessionAttributionEpochCreateSchema, SessionAttributionEpochRecordSchema;
22828
+ var ATTRIBUTION_GRADES, AttributionGradeSchema, AttributionRequesterSnapshotSchema, SessionAttributionEpochCreateSchema, SessionAttributionEpochAssertionSchema, SessionAttributionEpochRecordSchema;
22821
22829
  var init_session_attribution_epochs = __esm({
22822
22830
  "../../packages/schemas/src/session-attribution-epochs.ts"() {
22823
22831
  "use strict";
@@ -22846,6 +22854,11 @@ var init_session_attribution_epochs = __esm({
22846
22854
  providerGrantId: ProviderGrantIdSchema.nullable(),
22847
22855
  userModelSubscriptionId: UserSubscriptionCredentialIdSchema.nullable()
22848
22856
  }).strict();
22857
+ SessionAttributionEpochAssertionSchema = SessionAttributionEpochCreateSchema.omit({
22858
+ fundingSource: true,
22859
+ providerGrantId: true,
22860
+ userModelSubscriptionId: true
22861
+ }).strict();
22849
22862
  SessionAttributionEpochRecordSchema = SessionAttributionEpochCreateSchema.extend({
22850
22863
  id: SessionAttributionEpochIdSchema,
22851
22864
  createdAt: external_exports.string().datetime()
@@ -60599,7 +60612,16 @@ var init_temporal = __esm({
60599
60612
  });
60600
60613
 
60601
60614
  // ../../packages/schemas/src/usage.ts
60602
- var UsageHarnessSchema, NonNegativeTokenCountSchema, NonNegativeUsdSchema2, UsageEventSchema, UsageEventRecordSchema, UsageTotalsSchema, SessionUsageModelSummarySchema, UsageFundingSummarySchema, SessionModelFundingStateSchema, SessionUsageResponseSchema, PROJECT_USAGE_RANGE_KEYS, ProjectUsageRangeKeySchema, UtcDateSchema, ProjectUsageTotalsSchema, ProjectUsageAgentSummarySchema, ProjectUsageModelSummarySchema, ProjectUsageSubscriptionSummarySchema, ProjectUsageSubscriptionSliceSchema, ProjectUsageDayAgentSliceSchema, ProjectUsageDayModelSliceSchema, ProjectUsageDayPointSchema, ProjectUsageResponseSchema;
60615
+ function billedCostUsdReconciles(rows, expectedTotal) {
60616
+ return Math.abs(sumBilledCostUsd(rows) - roundUsd(expectedTotal)) <= USD_RECONCILIATION_TOLERANCE;
60617
+ }
60618
+ function sumBilledCostUsd(rows) {
60619
+ return roundUsd(rows.reduce((total, row) => total + row.billedCostUsd, 0));
60620
+ }
60621
+ function roundUsd(value) {
60622
+ return Number(value.toFixed(10));
60623
+ }
60624
+ var UsageHarnessSchema, NonNegativeTokenCountSchema, NonNegativeUsdSchema2, UsageEventSchema, UsageEventRecordSchema, UsageTotalsSchema, SessionUsageModelSummarySchema, UsageFundingSummarySchema, SessionModelFundingStateSchema, SessionUsageResponseSchema, PROJECT_USAGE_RANGE_KEYS, ProjectUsageRangeKeySchema, UtcDateSchema, ProjectUsageTotalsSchema, ProjectUsageAgentSummarySchema, ProjectUsageModelSummarySchema, ProjectUsageSubscriptionSummarySchema, ProjectUsageSubscriptionSliceSchema, ProjectUsageRequesterAttributionSchema, ProjectUsageRequesterSummarySchema, ProjectUsageSharedSessionRequesterSchema, ProjectUsageSharedSessionSchema, ProjectUsageDayAgentSliceSchema, ProjectUsageDayModelSliceSchema, ProjectUsageDayPointSchema, ProjectUsageResponseSchema, USD_RECONCILIATION_TOLERANCE;
60603
60625
  var init_usage = __esm({
60604
60626
  "../../packages/schemas/src/usage.ts"() {
60605
60627
  "use strict";
@@ -60722,6 +60744,22 @@ var init_usage = __esm({
60722
60744
  }),
60723
60745
  subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema)
60724
60746
  });
60747
+ ProjectUsageRequesterAttributionSchema = external_exports.object({
60748
+ requesterKey: external_exports.string().trim().min(1).nullable(),
60749
+ requesterDisplayName: external_exports.string().trim().min(1).nullable(),
60750
+ attributionEpochIds: external_exports.array(SessionAttributionEpochIdSchema),
60751
+ attributionGrades: external_exports.array(AttributionGradeSchema)
60752
+ });
60753
+ ProjectUsageRequesterSummarySchema = UsageTotalsSchema.extend({
60754
+ ...ProjectUsageRequesterAttributionSchema.shape,
60755
+ sessionCount: NonNegativeTokenCountSchema
60756
+ });
60757
+ ProjectUsageSharedSessionRequesterSchema = UsageTotalsSchema.extend(ProjectUsageRequesterAttributionSchema.shape);
60758
+ ProjectUsageSharedSessionSchema = external_exports.object({
60759
+ sessionId: SessionIdSchema,
60760
+ totals: UsageTotalsSchema,
60761
+ requesters: external_exports.array(ProjectUsageSharedSessionRequesterSchema).min(2)
60762
+ });
60725
60763
  ProjectUsageDayAgentSliceSchema = external_exports.object({
60726
60764
  agentResourceId: external_exports.string().trim().min(1),
60727
60765
  billedCostUsd: NonNegativeUsdSchema2
@@ -60748,8 +60786,31 @@ var init_usage = __esm({
60748
60786
  byModel: external_exports.array(ProjectUsageModelSummarySchema),
60749
60787
  byFundingSource: external_exports.array(UsageFundingSummarySchema),
60750
60788
  subscriptionUsage: ProjectUsageSubscriptionSliceSchema,
60789
+ byRequester: external_exports.array(ProjectUsageRequesterSummarySchema),
60790
+ sharedSessions: external_exports.array(ProjectUsageSharedSessionSchema),
60751
60791
  daily: external_exports.array(ProjectUsageDayPointSchema)
60792
+ }).superRefine((usage, context) => {
60793
+ if (!billedCostUsdReconciles(usage.byRequester, usage.totals.billedCostUsd)) {
60794
+ context.addIssue({
60795
+ code: "custom",
60796
+ message: "Requester spend must reconcile to project spend",
60797
+ path: ["byRequester"]
60798
+ });
60799
+ }
60800
+ usage.sharedSessions.forEach((session, index) => {
60801
+ if (!billedCostUsdReconciles(
60802
+ session.requesters,
60803
+ session.totals.billedCostUsd
60804
+ )) {
60805
+ context.addIssue({
60806
+ code: "custom",
60807
+ message: "Requester spend must reconcile to shared-session spend",
60808
+ path: ["sharedSessions", index, "requesters"]
60809
+ });
60810
+ }
60811
+ });
60752
60812
  });
60813
+ USD_RECONCILIATION_TOLERANCE = 1e-8;
60753
60814
  }
60754
60815
  });
60755
60816
 
@@ -60804,7 +60865,8 @@ var init_user_subscriptions = __esm({
60804
60865
  organizationId: OrganizationIdSchema,
60805
60866
  projectId: ProjectIdSchema.nullable(),
60806
60867
  mode: UserSubscriptionPolicyModeSchema,
60807
- allowAgentAttribution: external_exports.boolean().default(false)
60868
+ allowAgentAttribution: external_exports.boolean().default(false),
60869
+ budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null)
60808
60870
  }).strict();
60809
60871
  UserSubscriptionFundingCandidateSchema = external_exports.object({
60810
60872
  credentialId: UserSubscriptionCredentialIdSchema,
@@ -60812,7 +60874,9 @@ var init_user_subscriptions = __esm({
60812
60874
  status: UserSubscriptionCredentialStatusSchema,
60813
60875
  policyMode: UserSubscriptionPolicyModeSchema,
60814
60876
  allowAgentAttribution: external_exports.boolean().default(false),
60815
- ownerIsScopeMember: external_exports.boolean()
60877
+ ownerIsScopeMember: external_exports.boolean(),
60878
+ budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
60879
+ quotaBudgetStatus: UserSubscriptionQuotaBudgetStatusSchema.default("under_budget")
60816
60880
  }).strict();
60817
60881
  UserSubscriptionFundingDecisionInputSchema = external_exports.object({
60818
60882
  harness: external_exports.enum(AGENT_HARNESSES),
@@ -60835,7 +60899,10 @@ var init_user_subscriptions = __esm({
60835
60899
  "ineligible_model",
60836
60900
  "agent_attribution_disabled",
60837
60901
  "agent_attribution_untrusted",
60838
- "policy_not_applicable"
60902
+ "policy_not_applicable",
60903
+ "quota_budget_reached",
60904
+ "quota_snapshot_stale",
60905
+ "quota_unknown"
60839
60906
  ];
60840
60907
  UserSubscriptionRejectionReasonSchema = external_exports.enum(
60841
60908
  USER_SUBSCRIPTION_REJECTION_REASONS
@@ -63719,7 +63786,7 @@ var init_package = __esm({
63719
63786
  "package.json"() {
63720
63787
  package_default = {
63721
63788
  name: "@autohq/cli",
63722
- version: "0.1.504",
63789
+ version: "0.1.506",
63723
63790
  license: "SEE LICENSE IN README.md",
63724
63791
  publishConfig: {
63725
63792
  access: "public"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.504",
3
+ "version": "0.1.506",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"