@autohq/cli 0.1.576 → 0.1.577

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.
@@ -30880,7 +30880,7 @@ Object.assign(lookup, {
30880
30880
  // package.json
30881
30881
  var package_default = {
30882
30882
  name: "@autohq/cli",
30883
- version: "0.1.576",
30883
+ version: "0.1.577",
30884
30884
  license: "SEE LICENSE IN README.md",
30885
30885
  publishConfig: {
30886
30886
  access: "public"
@@ -38963,6 +38963,134 @@ var RuntimeRestartDiagnosticRecordSchema = external_exports.object({
38963
38963
  createdAt: external_exports.string().datetime()
38964
38964
  });
38965
38965
 
38966
+ // ../../packages/schemas/src/user-subscriptions.ts
38967
+ var ATTRIBUTION_COLD_BOUNDARY_IDLE_MS = 5 * 6e4;
38968
+ var USER_SUBSCRIPTION_PROVIDERS = ["openai"];
38969
+ var UserSubscriptionProviderSchema = external_exports.enum(
38970
+ USER_SUBSCRIPTION_PROVIDERS
38971
+ );
38972
+ var USER_SUBSCRIPTION_CREDENTIAL_STATUSES = [
38973
+ "active",
38974
+ "unusable"
38975
+ ];
38976
+ var UserSubscriptionCredentialStatusSchema = external_exports.enum(
38977
+ USER_SUBSCRIPTION_CREDENTIAL_STATUSES
38978
+ );
38979
+ var OpenAiUserSubscriptionCredentialSecretSchema = external_exports.object({
38980
+ accessToken: external_exports.string().trim().min(1),
38981
+ refreshToken: external_exports.string().trim().min(1),
38982
+ idToken: external_exports.string().trim().min(1)
38983
+ }).strict();
38984
+ var UserSubscriptionCredentialSchema = external_exports.object({
38985
+ id: UserSubscriptionCredentialIdSchema,
38986
+ userId: UserIdSchema,
38987
+ provider: external_exports.literal("openai"),
38988
+ accountId: external_exports.string().trim().min(1),
38989
+ planType: external_exports.string().trim().min(1),
38990
+ status: UserSubscriptionCredentialStatusSchema,
38991
+ accessTokenExpiresAt: external_exports.string().datetime(),
38992
+ earliestRefreshAt: external_exports.string().datetime().nullable(),
38993
+ secret: OpenAiUserSubscriptionCredentialSecretSchema
38994
+ }).strict();
38995
+ var USER_SUBSCRIPTION_POLICY_MODES = [
38996
+ "own_sessions",
38997
+ "own_and_automations",
38998
+ "all_sessions"
38999
+ ];
39000
+ var UserSubscriptionPolicyModeSchema = external_exports.enum(
39001
+ USER_SUBSCRIPTION_POLICY_MODES
39002
+ );
39003
+ var USER_SUBSCRIPTION_POLICY_ORIGINS = [
39004
+ "user",
39005
+ "attach_default"
39006
+ ];
39007
+ var UserSubscriptionPolicyOriginSchema = external_exports.enum(
39008
+ USER_SUBSCRIPTION_POLICY_ORIGINS
39009
+ );
39010
+ var UserSubscriptionPolicySchema = external_exports.object({
39011
+ credentialId: UserSubscriptionCredentialIdSchema,
39012
+ organizationId: OrganizationIdSchema,
39013
+ projectId: ProjectIdSchema.nullable(),
39014
+ mode: UserSubscriptionPolicyModeSchema,
39015
+ allowAgentAttribution: external_exports.boolean().default(false),
39016
+ budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
39017
+ quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([])
39018
+ }).strict();
39019
+ var UserSubscriptionFundingCandidateSchema = external_exports.object({
39020
+ credentialId: UserSubscriptionCredentialIdSchema,
39021
+ ownerUserId: UserIdSchema,
39022
+ status: UserSubscriptionCredentialStatusSchema,
39023
+ policyMode: UserSubscriptionPolicyModeSchema,
39024
+ allowAgentAttribution: external_exports.boolean().default(false),
39025
+ ownerIsScopeMember: external_exports.boolean(),
39026
+ budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
39027
+ quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([]),
39028
+ quotaBudgetStatus: UserSubscriptionQuotaBudgetStatusSchema.default("under_budget")
39029
+ }).strict();
39030
+ var UserSubscriptionFundingDecisionInputSchema = external_exports.object({
39031
+ harness: external_exports.enum(AGENT_HARNESSES),
39032
+ provider: ModelApiTokenProviderSchema,
39033
+ model: external_exports.string().trim().min(1),
39034
+ requester: RequesterSchema.nullable(),
39035
+ qualifiedRequesterUserId: UserIdSchema.nullable().default(null),
39036
+ automationOwnerUserId: UserIdSchema.nullable(),
39037
+ organizationMemberCount: external_exports.number().int().positive(),
39038
+ userSubscription: UserSubscriptionFundingCandidateSchema.nullable(),
39039
+ subscriptionRejectionReason: external_exports.enum(["agent_attribution_disabled", "agent_attribution_untrusted"]).nullable().default(null),
39040
+ tenantProviderGrantId: ProviderGrantIdSchema.nullable()
39041
+ }).strict();
39042
+ var USER_SUBSCRIPTION_REJECTION_REASONS = [
39043
+ "subscription_unavailable",
39044
+ "credential_unusable",
39045
+ "owner_not_scope_member",
39046
+ "ineligible_harness",
39047
+ "ineligible_provider",
39048
+ "ineligible_model",
39049
+ "agent_attribution_disabled",
39050
+ "agent_attribution_untrusted",
39051
+ "policy_not_applicable",
39052
+ "quota_budget_reached",
39053
+ "quota_snapshot_stale",
39054
+ "quota_unknown"
39055
+ ];
39056
+ var UserSubscriptionRejectionReasonSchema = external_exports.enum(
39057
+ USER_SUBSCRIPTION_REJECTION_REASONS
39058
+ );
39059
+ var USER_SUBSCRIPTION_SELECTION_REASONS = [
39060
+ "requester_owner",
39061
+ "owned_automation",
39062
+ "sole_member_all_sessions"
39063
+ ];
39064
+ var UserSubscriptionSelectionReasonSchema = external_exports.enum(
39065
+ USER_SUBSCRIPTION_SELECTION_REASONS
39066
+ );
39067
+ var UserSubscriptionFundingDecisionSchema = external_exports.discriminatedUnion(
39068
+ "fundingSource",
39069
+ [
39070
+ external_exports.object({
39071
+ fundingSource: external_exports.literal("user_subscription"),
39072
+ userSubscriptionCredentialId: UserSubscriptionCredentialIdSchema,
39073
+ modelCredentialProviderGrantId: external_exports.null(),
39074
+ selectionReason: UserSubscriptionSelectionReasonSchema,
39075
+ subscriptionRejectionReason: external_exports.null()
39076
+ }),
39077
+ external_exports.object({
39078
+ fundingSource: external_exports.literal("tenant_provider_grant"),
39079
+ userSubscriptionCredentialId: external_exports.null(),
39080
+ modelCredentialProviderGrantId: ProviderGrantIdSchema,
39081
+ selectionReason: external_exports.null(),
39082
+ subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
39083
+ }),
39084
+ external_exports.object({
39085
+ fundingSource: external_exports.literal("platform"),
39086
+ userSubscriptionCredentialId: external_exports.null(),
39087
+ modelCredentialProviderGrantId: external_exports.null(),
39088
+ selectionReason: external_exports.null(),
39089
+ subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
39090
+ })
39091
+ ]
39092
+ );
39093
+
38966
39094
  // ../../packages/schemas/src/session-attribution-epochs.ts
38967
39095
  var ATTRIBUTION_GRADES = ["derived", "asserted"];
38968
39096
  var AttributionGradeSchema = external_exports.enum(ATTRIBUTION_GRADES);
@@ -38982,6 +39110,10 @@ var SessionAttributionEpochCreateSchema = external_exports.object({
38982
39110
  assertedBySessionId: SessionIdSchema2.nullable(),
38983
39111
  assertedByAgentResourceId: external_exports.string().trim().min(1).nullable(),
38984
39112
  fundingSource: ModelCredentialFundingSourceSchema.nullable(),
39113
+ // Why the owner's subscription was NOT selected for this epoch; null
39114
+ // when it funded the epoch or no subscription was in play. Optional so
39115
+ // pre-existing rows and cross-deploy writers stay parseable.
39116
+ fundingRejectionReason: UserSubscriptionRejectionReasonSchema.nullable().optional(),
38985
39117
  providerGrantId: ProviderGrantIdSchema.nullable(),
38986
39118
  userModelSubscriptionId: UserSubscriptionCredentialIdSchema.nullable()
38987
39119
  }).strict();
@@ -39120,11 +39252,26 @@ var ProjectUsageSubscriptionSummarySchema = UsageTotalsSchema.extend({
39120
39252
  userSubscriptionId: UserSubscriptionCredentialIdSchema.nullable(),
39121
39253
  coveredInferenceCostUsd: NonNegativeUsdSchema2
39122
39254
  });
39255
+ var ProjectUsageSubscriptionAgentSummarySchema = UsageTotalsSchema.extend({
39256
+ agentResourceId: external_exports.string().trim().min(1),
39257
+ // Same resolution contract as ProjectUsageAgentSummary: null only when
39258
+ // the agent row was hard-deleted.
39259
+ agentName: external_exports.string().trim().min(1).nullable(),
39260
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
39261
+ });
39262
+ var ProjectUsageSubscriptionModelSummarySchema = UsageTotalsSchema.extend({
39263
+ model: external_exports.string().trim().min(1),
39264
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
39265
+ });
39123
39266
  var ProjectUsageSubscriptionSliceSchema = external_exports.object({
39124
39267
  totals: UsageTotalsSchema.extend({
39125
39268
  coveredInferenceCostUsd: NonNegativeUsdSchema2
39126
39269
  }),
39127
- subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema)
39270
+ subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema),
39271
+ // Defaulted so a client deployed ahead of the server still parses the
39272
+ // slice while the split rollups are absent.
39273
+ byAgent: external_exports.array(ProjectUsageSubscriptionAgentSummarySchema).default([]),
39274
+ byModel: external_exports.array(ProjectUsageSubscriptionModelSummarySchema).default([])
39128
39275
  });
39129
39276
  var ProjectUsageRequesterAttributionSchema = external_exports.object({
39130
39277
  requesterKey: external_exports.string().trim().min(1).nullable(),
@@ -39947,134 +40094,6 @@ var ResourceReconciliationScopeSchema = external_exports.object({
39947
40094
  projectId: external_exports.string().trim().min(1).nullable()
39948
40095
  }).strict();
39949
40096
 
39950
- // ../../packages/schemas/src/user-subscriptions.ts
39951
- var ATTRIBUTION_COLD_BOUNDARY_IDLE_MS = 5 * 6e4;
39952
- var USER_SUBSCRIPTION_PROVIDERS = ["openai"];
39953
- var UserSubscriptionProviderSchema = external_exports.enum(
39954
- USER_SUBSCRIPTION_PROVIDERS
39955
- );
39956
- var USER_SUBSCRIPTION_CREDENTIAL_STATUSES = [
39957
- "active",
39958
- "unusable"
39959
- ];
39960
- var UserSubscriptionCredentialStatusSchema = external_exports.enum(
39961
- USER_SUBSCRIPTION_CREDENTIAL_STATUSES
39962
- );
39963
- var OpenAiUserSubscriptionCredentialSecretSchema = external_exports.object({
39964
- accessToken: external_exports.string().trim().min(1),
39965
- refreshToken: external_exports.string().trim().min(1),
39966
- idToken: external_exports.string().trim().min(1)
39967
- }).strict();
39968
- var UserSubscriptionCredentialSchema = external_exports.object({
39969
- id: UserSubscriptionCredentialIdSchema,
39970
- userId: UserIdSchema,
39971
- provider: external_exports.literal("openai"),
39972
- accountId: external_exports.string().trim().min(1),
39973
- planType: external_exports.string().trim().min(1),
39974
- status: UserSubscriptionCredentialStatusSchema,
39975
- accessTokenExpiresAt: external_exports.string().datetime(),
39976
- earliestRefreshAt: external_exports.string().datetime().nullable(),
39977
- secret: OpenAiUserSubscriptionCredentialSecretSchema
39978
- }).strict();
39979
- var USER_SUBSCRIPTION_POLICY_MODES = [
39980
- "own_sessions",
39981
- "own_and_automations",
39982
- "all_sessions"
39983
- ];
39984
- var UserSubscriptionPolicyModeSchema = external_exports.enum(
39985
- USER_SUBSCRIPTION_POLICY_MODES
39986
- );
39987
- var USER_SUBSCRIPTION_POLICY_ORIGINS = [
39988
- "user",
39989
- "attach_default"
39990
- ];
39991
- var UserSubscriptionPolicyOriginSchema = external_exports.enum(
39992
- USER_SUBSCRIPTION_POLICY_ORIGINS
39993
- );
39994
- var UserSubscriptionPolicySchema = external_exports.object({
39995
- credentialId: UserSubscriptionCredentialIdSchema,
39996
- organizationId: OrganizationIdSchema,
39997
- projectId: ProjectIdSchema.nullable(),
39998
- mode: UserSubscriptionPolicyModeSchema,
39999
- allowAgentAttribution: external_exports.boolean().default(false),
40000
- budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
40001
- quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([])
40002
- }).strict();
40003
- var UserSubscriptionFundingCandidateSchema = external_exports.object({
40004
- credentialId: UserSubscriptionCredentialIdSchema,
40005
- ownerUserId: UserIdSchema,
40006
- status: UserSubscriptionCredentialStatusSchema,
40007
- policyMode: UserSubscriptionPolicyModeSchema,
40008
- allowAgentAttribution: external_exports.boolean().default(false),
40009
- ownerIsScopeMember: external_exports.boolean(),
40010
- budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
40011
- quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([]),
40012
- quotaBudgetStatus: UserSubscriptionQuotaBudgetStatusSchema.default("under_budget")
40013
- }).strict();
40014
- var UserSubscriptionFundingDecisionInputSchema = external_exports.object({
40015
- harness: external_exports.enum(AGENT_HARNESSES),
40016
- provider: ModelApiTokenProviderSchema,
40017
- model: external_exports.string().trim().min(1),
40018
- requester: RequesterSchema.nullable(),
40019
- qualifiedRequesterUserId: UserIdSchema.nullable().default(null),
40020
- automationOwnerUserId: UserIdSchema.nullable(),
40021
- organizationMemberCount: external_exports.number().int().positive(),
40022
- userSubscription: UserSubscriptionFundingCandidateSchema.nullable(),
40023
- subscriptionRejectionReason: external_exports.enum(["agent_attribution_disabled", "agent_attribution_untrusted"]).nullable().default(null),
40024
- tenantProviderGrantId: ProviderGrantIdSchema.nullable()
40025
- }).strict();
40026
- var USER_SUBSCRIPTION_REJECTION_REASONS = [
40027
- "subscription_unavailable",
40028
- "credential_unusable",
40029
- "owner_not_scope_member",
40030
- "ineligible_harness",
40031
- "ineligible_provider",
40032
- "ineligible_model",
40033
- "agent_attribution_disabled",
40034
- "agent_attribution_untrusted",
40035
- "policy_not_applicable",
40036
- "quota_budget_reached",
40037
- "quota_snapshot_stale",
40038
- "quota_unknown"
40039
- ];
40040
- var UserSubscriptionRejectionReasonSchema = external_exports.enum(
40041
- USER_SUBSCRIPTION_REJECTION_REASONS
40042
- );
40043
- var USER_SUBSCRIPTION_SELECTION_REASONS = [
40044
- "requester_owner",
40045
- "owned_automation",
40046
- "sole_member_all_sessions"
40047
- ];
40048
- var UserSubscriptionSelectionReasonSchema = external_exports.enum(
40049
- USER_SUBSCRIPTION_SELECTION_REASONS
40050
- );
40051
- var UserSubscriptionFundingDecisionSchema = external_exports.discriminatedUnion(
40052
- "fundingSource",
40053
- [
40054
- external_exports.object({
40055
- fundingSource: external_exports.literal("user_subscription"),
40056
- userSubscriptionCredentialId: UserSubscriptionCredentialIdSchema,
40057
- modelCredentialProviderGrantId: external_exports.null(),
40058
- selectionReason: UserSubscriptionSelectionReasonSchema,
40059
- subscriptionRejectionReason: external_exports.null()
40060
- }),
40061
- external_exports.object({
40062
- fundingSource: external_exports.literal("tenant_provider_grant"),
40063
- userSubscriptionCredentialId: external_exports.null(),
40064
- modelCredentialProviderGrantId: ProviderGrantIdSchema,
40065
- selectionReason: external_exports.null(),
40066
- subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
40067
- }),
40068
- external_exports.object({
40069
- fundingSource: external_exports.literal("platform"),
40070
- userSubscriptionCredentialId: external_exports.null(),
40071
- modelCredentialProviderGrantId: external_exports.null(),
40072
- selectionReason: external_exports.null(),
40073
- subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
40074
- })
40075
- ]
40076
- );
40077
-
40078
40097
  // ../../packages/schemas/src/webhook-endpoints.ts
40079
40098
  var WEBHOOK_BIND_KEY_MAX_LENGTH = 200;
40080
40099
  var WebhookBindKeySchema = external_exports.string().trim().min(1).max(WEBHOOK_BIND_KEY_MAX_LENGTH).regex(
package/dist/index.js CHANGED
@@ -23151,6 +23151,146 @@ var init_runtime_restart_diagnostics = __esm({
23151
23151
  }
23152
23152
  });
23153
23153
 
23154
+ // ../../packages/schemas/src/user-subscriptions.ts
23155
+ var ATTRIBUTION_COLD_BOUNDARY_IDLE_MS, USER_SUBSCRIPTION_PROVIDERS, UserSubscriptionProviderSchema, USER_SUBSCRIPTION_CREDENTIAL_STATUSES, UserSubscriptionCredentialStatusSchema, OpenAiUserSubscriptionCredentialSecretSchema, UserSubscriptionCredentialSchema, USER_SUBSCRIPTION_POLICY_MODES, UserSubscriptionPolicyModeSchema, USER_SUBSCRIPTION_POLICY_ORIGINS, UserSubscriptionPolicyOriginSchema, UserSubscriptionPolicySchema, UserSubscriptionFundingCandidateSchema, UserSubscriptionFundingDecisionInputSchema, USER_SUBSCRIPTION_REJECTION_REASONS, UserSubscriptionRejectionReasonSchema, USER_SUBSCRIPTION_SELECTION_REASONS, UserSubscriptionSelectionReasonSchema, UserSubscriptionFundingDecisionSchema;
23156
+ var init_user_subscriptions = __esm({
23157
+ "../../packages/schemas/src/user-subscriptions.ts"() {
23158
+ "use strict";
23159
+ init_zod();
23160
+ init_agents();
23161
+ init_chatgpt_codex();
23162
+ init_ids();
23163
+ init_model_selection();
23164
+ init_requester();
23165
+ ATTRIBUTION_COLD_BOUNDARY_IDLE_MS = 5 * 6e4;
23166
+ USER_SUBSCRIPTION_PROVIDERS = ["openai"];
23167
+ UserSubscriptionProviderSchema = external_exports.enum(
23168
+ USER_SUBSCRIPTION_PROVIDERS
23169
+ );
23170
+ USER_SUBSCRIPTION_CREDENTIAL_STATUSES = [
23171
+ "active",
23172
+ "unusable"
23173
+ ];
23174
+ UserSubscriptionCredentialStatusSchema = external_exports.enum(
23175
+ USER_SUBSCRIPTION_CREDENTIAL_STATUSES
23176
+ );
23177
+ OpenAiUserSubscriptionCredentialSecretSchema = external_exports.object({
23178
+ accessToken: external_exports.string().trim().min(1),
23179
+ refreshToken: external_exports.string().trim().min(1),
23180
+ idToken: external_exports.string().trim().min(1)
23181
+ }).strict();
23182
+ UserSubscriptionCredentialSchema = external_exports.object({
23183
+ id: UserSubscriptionCredentialIdSchema,
23184
+ userId: UserIdSchema,
23185
+ provider: external_exports.literal("openai"),
23186
+ accountId: external_exports.string().trim().min(1),
23187
+ planType: external_exports.string().trim().min(1),
23188
+ status: UserSubscriptionCredentialStatusSchema,
23189
+ accessTokenExpiresAt: external_exports.string().datetime(),
23190
+ earliestRefreshAt: external_exports.string().datetime().nullable(),
23191
+ secret: OpenAiUserSubscriptionCredentialSecretSchema
23192
+ }).strict();
23193
+ USER_SUBSCRIPTION_POLICY_MODES = [
23194
+ "own_sessions",
23195
+ "own_and_automations",
23196
+ "all_sessions"
23197
+ ];
23198
+ UserSubscriptionPolicyModeSchema = external_exports.enum(
23199
+ USER_SUBSCRIPTION_POLICY_MODES
23200
+ );
23201
+ USER_SUBSCRIPTION_POLICY_ORIGINS = [
23202
+ "user",
23203
+ "attach_default"
23204
+ ];
23205
+ UserSubscriptionPolicyOriginSchema = external_exports.enum(
23206
+ USER_SUBSCRIPTION_POLICY_ORIGINS
23207
+ );
23208
+ UserSubscriptionPolicySchema = external_exports.object({
23209
+ credentialId: UserSubscriptionCredentialIdSchema,
23210
+ organizationId: OrganizationIdSchema,
23211
+ projectId: ProjectIdSchema.nullable(),
23212
+ mode: UserSubscriptionPolicyModeSchema,
23213
+ allowAgentAttribution: external_exports.boolean().default(false),
23214
+ budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
23215
+ quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([])
23216
+ }).strict();
23217
+ UserSubscriptionFundingCandidateSchema = external_exports.object({
23218
+ credentialId: UserSubscriptionCredentialIdSchema,
23219
+ ownerUserId: UserIdSchema,
23220
+ status: UserSubscriptionCredentialStatusSchema,
23221
+ policyMode: UserSubscriptionPolicyModeSchema,
23222
+ allowAgentAttribution: external_exports.boolean().default(false),
23223
+ ownerIsScopeMember: external_exports.boolean(),
23224
+ budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
23225
+ quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([]),
23226
+ quotaBudgetStatus: UserSubscriptionQuotaBudgetStatusSchema.default("under_budget")
23227
+ }).strict();
23228
+ UserSubscriptionFundingDecisionInputSchema = external_exports.object({
23229
+ harness: external_exports.enum(AGENT_HARNESSES),
23230
+ provider: ModelApiTokenProviderSchema,
23231
+ model: external_exports.string().trim().min(1),
23232
+ requester: RequesterSchema.nullable(),
23233
+ qualifiedRequesterUserId: UserIdSchema.nullable().default(null),
23234
+ automationOwnerUserId: UserIdSchema.nullable(),
23235
+ organizationMemberCount: external_exports.number().int().positive(),
23236
+ userSubscription: UserSubscriptionFundingCandidateSchema.nullable(),
23237
+ subscriptionRejectionReason: external_exports.enum(["agent_attribution_disabled", "agent_attribution_untrusted"]).nullable().default(null),
23238
+ tenantProviderGrantId: ProviderGrantIdSchema.nullable()
23239
+ }).strict();
23240
+ USER_SUBSCRIPTION_REJECTION_REASONS = [
23241
+ "subscription_unavailable",
23242
+ "credential_unusable",
23243
+ "owner_not_scope_member",
23244
+ "ineligible_harness",
23245
+ "ineligible_provider",
23246
+ "ineligible_model",
23247
+ "agent_attribution_disabled",
23248
+ "agent_attribution_untrusted",
23249
+ "policy_not_applicable",
23250
+ "quota_budget_reached",
23251
+ "quota_snapshot_stale",
23252
+ "quota_unknown"
23253
+ ];
23254
+ UserSubscriptionRejectionReasonSchema = external_exports.enum(
23255
+ USER_SUBSCRIPTION_REJECTION_REASONS
23256
+ );
23257
+ USER_SUBSCRIPTION_SELECTION_REASONS = [
23258
+ "requester_owner",
23259
+ "owned_automation",
23260
+ "sole_member_all_sessions"
23261
+ ];
23262
+ UserSubscriptionSelectionReasonSchema = external_exports.enum(
23263
+ USER_SUBSCRIPTION_SELECTION_REASONS
23264
+ );
23265
+ UserSubscriptionFundingDecisionSchema = external_exports.discriminatedUnion(
23266
+ "fundingSource",
23267
+ [
23268
+ external_exports.object({
23269
+ fundingSource: external_exports.literal("user_subscription"),
23270
+ userSubscriptionCredentialId: UserSubscriptionCredentialIdSchema,
23271
+ modelCredentialProviderGrantId: external_exports.null(),
23272
+ selectionReason: UserSubscriptionSelectionReasonSchema,
23273
+ subscriptionRejectionReason: external_exports.null()
23274
+ }),
23275
+ external_exports.object({
23276
+ fundingSource: external_exports.literal("tenant_provider_grant"),
23277
+ userSubscriptionCredentialId: external_exports.null(),
23278
+ modelCredentialProviderGrantId: ProviderGrantIdSchema,
23279
+ selectionReason: external_exports.null(),
23280
+ subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
23281
+ }),
23282
+ external_exports.object({
23283
+ fundingSource: external_exports.literal("platform"),
23284
+ userSubscriptionCredentialId: external_exports.null(),
23285
+ modelCredentialProviderGrantId: external_exports.null(),
23286
+ selectionReason: external_exports.null(),
23287
+ subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
23288
+ })
23289
+ ]
23290
+ );
23291
+ }
23292
+ });
23293
+
23154
23294
  // ../../packages/schemas/src/session-attribution-epochs.ts
23155
23295
  var ATTRIBUTION_GRADES, AttributionGradeSchema, AttributionRequesterSnapshotSchema, SessionAttributionEpochCreateSchema, SessionAttributionEpochRecordSchema;
23156
23296
  var init_session_attribution_epochs = __esm({
@@ -23160,6 +23300,7 @@ var init_session_attribution_epochs = __esm({
23160
23300
  init_ids();
23161
23301
  init_model_credential_funding();
23162
23302
  init_requester();
23303
+ init_user_subscriptions();
23163
23304
  ATTRIBUTION_GRADES = ["derived", "asserted"];
23164
23305
  AttributionGradeSchema = external_exports.enum(ATTRIBUTION_GRADES);
23165
23306
  AttributionRequesterSnapshotSchema = external_exports.object({
@@ -23178,6 +23319,10 @@ var init_session_attribution_epochs = __esm({
23178
23319
  assertedBySessionId: SessionIdSchema.nullable(),
23179
23320
  assertedByAgentResourceId: external_exports.string().trim().min(1).nullable(),
23180
23321
  fundingSource: ModelCredentialFundingSourceSchema.nullable(),
23322
+ // Why the owner's subscription was NOT selected for this epoch; null
23323
+ // when it funded the epoch or no subscription was in play. Optional so
23324
+ // pre-existing rows and cross-deploy writers stay parseable.
23325
+ fundingRejectionReason: UserSubscriptionRejectionReasonSchema.nullable().optional(),
23181
23326
  providerGrantId: ProviderGrantIdSchema.nullable(),
23182
23327
  userModelSubscriptionId: UserSubscriptionCredentialIdSchema.nullable()
23183
23328
  }).strict();
@@ -23189,7 +23334,7 @@ var init_session_attribution_epochs = __esm({
23189
23334
  });
23190
23335
 
23191
23336
  // ../../packages/schemas/src/usage.ts
23192
- var UsageHarnessSchema, NonNegativeTokenCountSchema, NonNegativeUsdSchema2, UsageEventSchema, UsageEventRecordSchema, UsageTotalsSchema, SessionUsageModelSummarySchema, UsageFundingSummarySchema, SessionModelFundingStateSchema, SessionUsageCurrentAttributionSchema, SessionUsageRequesterSummarySchema, SessionUsageResponseSchema, PROJECT_USAGE_RANGE_KEYS, ProjectUsageRangeKeySchema, UsageBucketKeySchema, ProjectUsageTotalsSchema, ProjectUsageAgentSummarySchema, ProjectUsageModelSummarySchema, ProjectUsageSubscriptionSummarySchema, ProjectUsageSubscriptionSliceSchema, ProjectUsageRequesterAttributionSchema, ProjectUsageRequesterSummarySchema, ProjectUsageDayAgentSliceSchema, ProjectUsageDayModelSliceSchema, ProjectUsageDayPointSchema, ProjectUsageResponseSchema;
23337
+ var UsageHarnessSchema, NonNegativeTokenCountSchema, NonNegativeUsdSchema2, UsageEventSchema, UsageEventRecordSchema, UsageTotalsSchema, SessionUsageModelSummarySchema, UsageFundingSummarySchema, SessionModelFundingStateSchema, SessionUsageCurrentAttributionSchema, SessionUsageRequesterSummarySchema, SessionUsageResponseSchema, PROJECT_USAGE_RANGE_KEYS, ProjectUsageRangeKeySchema, UsageBucketKeySchema, ProjectUsageTotalsSchema, ProjectUsageAgentSummarySchema, ProjectUsageModelSummarySchema, ProjectUsageSubscriptionSummarySchema, ProjectUsageSubscriptionAgentSummarySchema, ProjectUsageSubscriptionModelSummarySchema, ProjectUsageSubscriptionSliceSchema, ProjectUsageRequesterAttributionSchema, ProjectUsageRequesterSummarySchema, ProjectUsageDayAgentSliceSchema, ProjectUsageDayModelSliceSchema, ProjectUsageDayPointSchema, ProjectUsageResponseSchema;
23193
23338
  var init_usage = __esm({
23194
23339
  "../../packages/schemas/src/usage.ts"() {
23195
23340
  "use strict";
@@ -23328,11 +23473,26 @@ var init_usage = __esm({
23328
23473
  userSubscriptionId: UserSubscriptionCredentialIdSchema.nullable(),
23329
23474
  coveredInferenceCostUsd: NonNegativeUsdSchema2
23330
23475
  });
23476
+ ProjectUsageSubscriptionAgentSummarySchema = UsageTotalsSchema.extend({
23477
+ agentResourceId: external_exports.string().trim().min(1),
23478
+ // Same resolution contract as ProjectUsageAgentSummary: null only when
23479
+ // the agent row was hard-deleted.
23480
+ agentName: external_exports.string().trim().min(1).nullable(),
23481
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
23482
+ });
23483
+ ProjectUsageSubscriptionModelSummarySchema = UsageTotalsSchema.extend({
23484
+ model: external_exports.string().trim().min(1),
23485
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
23486
+ });
23331
23487
  ProjectUsageSubscriptionSliceSchema = external_exports.object({
23332
23488
  totals: UsageTotalsSchema.extend({
23333
23489
  coveredInferenceCostUsd: NonNegativeUsdSchema2
23334
23490
  }),
23335
- subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema)
23491
+ subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema),
23492
+ // Defaulted so a client deployed ahead of the server still parses the
23493
+ // slice while the split rollups are absent.
23494
+ byAgent: external_exports.array(ProjectUsageSubscriptionAgentSummarySchema).default([]),
23495
+ byModel: external_exports.array(ProjectUsageSubscriptionModelSummarySchema).default([])
23336
23496
  });
23337
23497
  ProjectUsageRequesterAttributionSchema = external_exports.object({
23338
23498
  requesterKey: external_exports.string().trim().min(1).nullable(),
@@ -83045,146 +83205,6 @@ var init_temporal = __esm({
83045
83205
  }
83046
83206
  });
83047
83207
 
83048
- // ../../packages/schemas/src/user-subscriptions.ts
83049
- var ATTRIBUTION_COLD_BOUNDARY_IDLE_MS, USER_SUBSCRIPTION_PROVIDERS, UserSubscriptionProviderSchema, USER_SUBSCRIPTION_CREDENTIAL_STATUSES, UserSubscriptionCredentialStatusSchema, OpenAiUserSubscriptionCredentialSecretSchema, UserSubscriptionCredentialSchema, USER_SUBSCRIPTION_POLICY_MODES, UserSubscriptionPolicyModeSchema, USER_SUBSCRIPTION_POLICY_ORIGINS, UserSubscriptionPolicyOriginSchema, UserSubscriptionPolicySchema, UserSubscriptionFundingCandidateSchema, UserSubscriptionFundingDecisionInputSchema, USER_SUBSCRIPTION_REJECTION_REASONS, UserSubscriptionRejectionReasonSchema, USER_SUBSCRIPTION_SELECTION_REASONS, UserSubscriptionSelectionReasonSchema, UserSubscriptionFundingDecisionSchema;
83050
- var init_user_subscriptions = __esm({
83051
- "../../packages/schemas/src/user-subscriptions.ts"() {
83052
- "use strict";
83053
- init_zod();
83054
- init_agents();
83055
- init_chatgpt_codex();
83056
- init_ids();
83057
- init_model_selection();
83058
- init_requester();
83059
- ATTRIBUTION_COLD_BOUNDARY_IDLE_MS = 5 * 6e4;
83060
- USER_SUBSCRIPTION_PROVIDERS = ["openai"];
83061
- UserSubscriptionProviderSchema = external_exports.enum(
83062
- USER_SUBSCRIPTION_PROVIDERS
83063
- );
83064
- USER_SUBSCRIPTION_CREDENTIAL_STATUSES = [
83065
- "active",
83066
- "unusable"
83067
- ];
83068
- UserSubscriptionCredentialStatusSchema = external_exports.enum(
83069
- USER_SUBSCRIPTION_CREDENTIAL_STATUSES
83070
- );
83071
- OpenAiUserSubscriptionCredentialSecretSchema = external_exports.object({
83072
- accessToken: external_exports.string().trim().min(1),
83073
- refreshToken: external_exports.string().trim().min(1),
83074
- idToken: external_exports.string().trim().min(1)
83075
- }).strict();
83076
- UserSubscriptionCredentialSchema = external_exports.object({
83077
- id: UserSubscriptionCredentialIdSchema,
83078
- userId: UserIdSchema,
83079
- provider: external_exports.literal("openai"),
83080
- accountId: external_exports.string().trim().min(1),
83081
- planType: external_exports.string().trim().min(1),
83082
- status: UserSubscriptionCredentialStatusSchema,
83083
- accessTokenExpiresAt: external_exports.string().datetime(),
83084
- earliestRefreshAt: external_exports.string().datetime().nullable(),
83085
- secret: OpenAiUserSubscriptionCredentialSecretSchema
83086
- }).strict();
83087
- USER_SUBSCRIPTION_POLICY_MODES = [
83088
- "own_sessions",
83089
- "own_and_automations",
83090
- "all_sessions"
83091
- ];
83092
- UserSubscriptionPolicyModeSchema = external_exports.enum(
83093
- USER_SUBSCRIPTION_POLICY_MODES
83094
- );
83095
- USER_SUBSCRIPTION_POLICY_ORIGINS = [
83096
- "user",
83097
- "attach_default"
83098
- ];
83099
- UserSubscriptionPolicyOriginSchema = external_exports.enum(
83100
- USER_SUBSCRIPTION_POLICY_ORIGINS
83101
- );
83102
- UserSubscriptionPolicySchema = external_exports.object({
83103
- credentialId: UserSubscriptionCredentialIdSchema,
83104
- organizationId: OrganizationIdSchema,
83105
- projectId: ProjectIdSchema.nullable(),
83106
- mode: UserSubscriptionPolicyModeSchema,
83107
- allowAgentAttribution: external_exports.boolean().default(false),
83108
- budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
83109
- quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([])
83110
- }).strict();
83111
- UserSubscriptionFundingCandidateSchema = external_exports.object({
83112
- credentialId: UserSubscriptionCredentialIdSchema,
83113
- ownerUserId: UserIdSchema,
83114
- status: UserSubscriptionCredentialStatusSchema,
83115
- policyMode: UserSubscriptionPolicyModeSchema,
83116
- allowAgentAttribution: external_exports.boolean().default(false),
83117
- ownerIsScopeMember: external_exports.boolean(),
83118
- budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
83119
- quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([]),
83120
- quotaBudgetStatus: UserSubscriptionQuotaBudgetStatusSchema.default("under_budget")
83121
- }).strict();
83122
- UserSubscriptionFundingDecisionInputSchema = external_exports.object({
83123
- harness: external_exports.enum(AGENT_HARNESSES),
83124
- provider: ModelApiTokenProviderSchema,
83125
- model: external_exports.string().trim().min(1),
83126
- requester: RequesterSchema.nullable(),
83127
- qualifiedRequesterUserId: UserIdSchema.nullable().default(null),
83128
- automationOwnerUserId: UserIdSchema.nullable(),
83129
- organizationMemberCount: external_exports.number().int().positive(),
83130
- userSubscription: UserSubscriptionFundingCandidateSchema.nullable(),
83131
- subscriptionRejectionReason: external_exports.enum(["agent_attribution_disabled", "agent_attribution_untrusted"]).nullable().default(null),
83132
- tenantProviderGrantId: ProviderGrantIdSchema.nullable()
83133
- }).strict();
83134
- USER_SUBSCRIPTION_REJECTION_REASONS = [
83135
- "subscription_unavailable",
83136
- "credential_unusable",
83137
- "owner_not_scope_member",
83138
- "ineligible_harness",
83139
- "ineligible_provider",
83140
- "ineligible_model",
83141
- "agent_attribution_disabled",
83142
- "agent_attribution_untrusted",
83143
- "policy_not_applicable",
83144
- "quota_budget_reached",
83145
- "quota_snapshot_stale",
83146
- "quota_unknown"
83147
- ];
83148
- UserSubscriptionRejectionReasonSchema = external_exports.enum(
83149
- USER_SUBSCRIPTION_REJECTION_REASONS
83150
- );
83151
- USER_SUBSCRIPTION_SELECTION_REASONS = [
83152
- "requester_owner",
83153
- "owned_automation",
83154
- "sole_member_all_sessions"
83155
- ];
83156
- UserSubscriptionSelectionReasonSchema = external_exports.enum(
83157
- USER_SUBSCRIPTION_SELECTION_REASONS
83158
- );
83159
- UserSubscriptionFundingDecisionSchema = external_exports.discriminatedUnion(
83160
- "fundingSource",
83161
- [
83162
- external_exports.object({
83163
- fundingSource: external_exports.literal("user_subscription"),
83164
- userSubscriptionCredentialId: UserSubscriptionCredentialIdSchema,
83165
- modelCredentialProviderGrantId: external_exports.null(),
83166
- selectionReason: UserSubscriptionSelectionReasonSchema,
83167
- subscriptionRejectionReason: external_exports.null()
83168
- }),
83169
- external_exports.object({
83170
- fundingSource: external_exports.literal("tenant_provider_grant"),
83171
- userSubscriptionCredentialId: external_exports.null(),
83172
- modelCredentialProviderGrantId: ProviderGrantIdSchema,
83173
- selectionReason: external_exports.null(),
83174
- subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
83175
- }),
83176
- external_exports.object({
83177
- fundingSource: external_exports.literal("platform"),
83178
- userSubscriptionCredentialId: external_exports.null(),
83179
- modelCredentialProviderGrantId: external_exports.null(),
83180
- selectionReason: external_exports.null(),
83181
- subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
83182
- })
83183
- ]
83184
- );
83185
- }
83186
- });
83187
-
83188
83208
  // ../../packages/schemas/src/webhook-endpoints.ts
83189
83209
  var WEBHOOK_BIND_KEY_MAX_LENGTH, WebhookBindKeySchema;
83190
83210
  var init_webhook_endpoints = __esm({
@@ -86033,7 +86053,7 @@ var init_package = __esm({
86033
86053
  "package.json"() {
86034
86054
  package_default = {
86035
86055
  name: "@autohq/cli",
86036
- version: "0.1.576",
86056
+ version: "0.1.577",
86037
86057
  license: "SEE LICENSE IN README.md",
86038
86058
  publishConfig: {
86039
86059
  access: "public"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.576",
3
+ "version": "0.1.577",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"