@autohq/cli 0.1.575 → 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.575",
30883
+ version: "0.1.577",
30884
30884
  license: "SEE LICENSE IN README.md",
30885
30885
  publishConfig: {
30886
30886
  access: "public"
@@ -37791,6 +37791,16 @@ var OnboardingRunPhaseSchema = external_exports.string().trim().min(1).max(64).r
37791
37791
  "phase must be a lowercase slug (letters, digits, '_' or '-')"
37792
37792
  );
37793
37793
  var OnboardingRunEvidenceSchema = JsonObjectSchema;
37794
+ var OnboardingFirstChangesEvidenceSchema = external_exports.object({
37795
+ kind: external_exports.literal("github_pull_request_opened"),
37796
+ eventRecordId: external_exports.string().trim().min(1),
37797
+ pullRequestExternalId: external_exports.string().trim().min(1).max(1024),
37798
+ repository: external_exports.string().trim().min(1).max(256),
37799
+ pullRequestNumber: external_exports.number().int().positive(),
37800
+ sourceSessionId: external_exports.string().trim().min(1),
37801
+ sourceAttributionId: external_exports.string().trim().min(1),
37802
+ openedAt: external_exports.string().datetime()
37803
+ }).strict();
37794
37804
  var OnboardingKickoffReferenceSchema = external_exports.object({
37795
37805
  runId: external_exports.string().trim().min(1),
37796
37806
  correlationKey: external_exports.string().uuid(),
@@ -38953,6 +38963,134 @@ var RuntimeRestartDiagnosticRecordSchema = external_exports.object({
38953
38963
  createdAt: external_exports.string().datetime()
38954
38964
  });
38955
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
+
38956
39094
  // ../../packages/schemas/src/session-attribution-epochs.ts
38957
39095
  var ATTRIBUTION_GRADES = ["derived", "asserted"];
38958
39096
  var AttributionGradeSchema = external_exports.enum(ATTRIBUTION_GRADES);
@@ -38972,6 +39110,10 @@ var SessionAttributionEpochCreateSchema = external_exports.object({
38972
39110
  assertedBySessionId: SessionIdSchema2.nullable(),
38973
39111
  assertedByAgentResourceId: external_exports.string().trim().min(1).nullable(),
38974
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(),
38975
39117
  providerGrantId: ProviderGrantIdSchema.nullable(),
38976
39118
  userModelSubscriptionId: UserSubscriptionCredentialIdSchema.nullable()
38977
39119
  }).strict();
@@ -39110,11 +39252,26 @@ var ProjectUsageSubscriptionSummarySchema = UsageTotalsSchema.extend({
39110
39252
  userSubscriptionId: UserSubscriptionCredentialIdSchema.nullable(),
39111
39253
  coveredInferenceCostUsd: NonNegativeUsdSchema2
39112
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
+ });
39113
39266
  var ProjectUsageSubscriptionSliceSchema = external_exports.object({
39114
39267
  totals: UsageTotalsSchema.extend({
39115
39268
  coveredInferenceCostUsd: NonNegativeUsdSchema2
39116
39269
  }),
39117
- 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([])
39118
39275
  });
39119
39276
  var ProjectUsageRequesterAttributionSchema = external_exports.object({
39120
39277
  requesterKey: external_exports.string().trim().min(1).nullable(),
@@ -39937,134 +40094,6 @@ var ResourceReconciliationScopeSchema = external_exports.object({
39937
40094
  projectId: external_exports.string().trim().min(1).nullable()
39938
40095
  }).strict();
39939
40096
 
39940
- // ../../packages/schemas/src/user-subscriptions.ts
39941
- var ATTRIBUTION_COLD_BOUNDARY_IDLE_MS = 5 * 6e4;
39942
- var USER_SUBSCRIPTION_PROVIDERS = ["openai"];
39943
- var UserSubscriptionProviderSchema = external_exports.enum(
39944
- USER_SUBSCRIPTION_PROVIDERS
39945
- );
39946
- var USER_SUBSCRIPTION_CREDENTIAL_STATUSES = [
39947
- "active",
39948
- "unusable"
39949
- ];
39950
- var UserSubscriptionCredentialStatusSchema = external_exports.enum(
39951
- USER_SUBSCRIPTION_CREDENTIAL_STATUSES
39952
- );
39953
- var OpenAiUserSubscriptionCredentialSecretSchema = external_exports.object({
39954
- accessToken: external_exports.string().trim().min(1),
39955
- refreshToken: external_exports.string().trim().min(1),
39956
- idToken: external_exports.string().trim().min(1)
39957
- }).strict();
39958
- var UserSubscriptionCredentialSchema = external_exports.object({
39959
- id: UserSubscriptionCredentialIdSchema,
39960
- userId: UserIdSchema,
39961
- provider: external_exports.literal("openai"),
39962
- accountId: external_exports.string().trim().min(1),
39963
- planType: external_exports.string().trim().min(1),
39964
- status: UserSubscriptionCredentialStatusSchema,
39965
- accessTokenExpiresAt: external_exports.string().datetime(),
39966
- earliestRefreshAt: external_exports.string().datetime().nullable(),
39967
- secret: OpenAiUserSubscriptionCredentialSecretSchema
39968
- }).strict();
39969
- var USER_SUBSCRIPTION_POLICY_MODES = [
39970
- "own_sessions",
39971
- "own_and_automations",
39972
- "all_sessions"
39973
- ];
39974
- var UserSubscriptionPolicyModeSchema = external_exports.enum(
39975
- USER_SUBSCRIPTION_POLICY_MODES
39976
- );
39977
- var USER_SUBSCRIPTION_POLICY_ORIGINS = [
39978
- "user",
39979
- "attach_default"
39980
- ];
39981
- var UserSubscriptionPolicyOriginSchema = external_exports.enum(
39982
- USER_SUBSCRIPTION_POLICY_ORIGINS
39983
- );
39984
- var UserSubscriptionPolicySchema = external_exports.object({
39985
- credentialId: UserSubscriptionCredentialIdSchema,
39986
- organizationId: OrganizationIdSchema,
39987
- projectId: ProjectIdSchema.nullable(),
39988
- mode: UserSubscriptionPolicyModeSchema,
39989
- allowAgentAttribution: external_exports.boolean().default(false),
39990
- budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
39991
- quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([])
39992
- }).strict();
39993
- var UserSubscriptionFundingCandidateSchema = external_exports.object({
39994
- credentialId: UserSubscriptionCredentialIdSchema,
39995
- ownerUserId: UserIdSchema,
39996
- status: UserSubscriptionCredentialStatusSchema,
39997
- policyMode: UserSubscriptionPolicyModeSchema,
39998
- allowAgentAttribution: external_exports.boolean().default(false),
39999
- ownerIsScopeMember: external_exports.boolean(),
40000
- budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
40001
- quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([]),
40002
- quotaBudgetStatus: UserSubscriptionQuotaBudgetStatusSchema.default("under_budget")
40003
- }).strict();
40004
- var UserSubscriptionFundingDecisionInputSchema = external_exports.object({
40005
- harness: external_exports.enum(AGENT_HARNESSES),
40006
- provider: ModelApiTokenProviderSchema,
40007
- model: external_exports.string().trim().min(1),
40008
- requester: RequesterSchema.nullable(),
40009
- qualifiedRequesterUserId: UserIdSchema.nullable().default(null),
40010
- automationOwnerUserId: UserIdSchema.nullable(),
40011
- organizationMemberCount: external_exports.number().int().positive(),
40012
- userSubscription: UserSubscriptionFundingCandidateSchema.nullable(),
40013
- subscriptionRejectionReason: external_exports.enum(["agent_attribution_disabled", "agent_attribution_untrusted"]).nullable().default(null),
40014
- tenantProviderGrantId: ProviderGrantIdSchema.nullable()
40015
- }).strict();
40016
- var USER_SUBSCRIPTION_REJECTION_REASONS = [
40017
- "subscription_unavailable",
40018
- "credential_unusable",
40019
- "owner_not_scope_member",
40020
- "ineligible_harness",
40021
- "ineligible_provider",
40022
- "ineligible_model",
40023
- "agent_attribution_disabled",
40024
- "agent_attribution_untrusted",
40025
- "policy_not_applicable",
40026
- "quota_budget_reached",
40027
- "quota_snapshot_stale",
40028
- "quota_unknown"
40029
- ];
40030
- var UserSubscriptionRejectionReasonSchema = external_exports.enum(
40031
- USER_SUBSCRIPTION_REJECTION_REASONS
40032
- );
40033
- var USER_SUBSCRIPTION_SELECTION_REASONS = [
40034
- "requester_owner",
40035
- "owned_automation",
40036
- "sole_member_all_sessions"
40037
- ];
40038
- var UserSubscriptionSelectionReasonSchema = external_exports.enum(
40039
- USER_SUBSCRIPTION_SELECTION_REASONS
40040
- );
40041
- var UserSubscriptionFundingDecisionSchema = external_exports.discriminatedUnion(
40042
- "fundingSource",
40043
- [
40044
- external_exports.object({
40045
- fundingSource: external_exports.literal("user_subscription"),
40046
- userSubscriptionCredentialId: UserSubscriptionCredentialIdSchema,
40047
- modelCredentialProviderGrantId: external_exports.null(),
40048
- selectionReason: UserSubscriptionSelectionReasonSchema,
40049
- subscriptionRejectionReason: external_exports.null()
40050
- }),
40051
- external_exports.object({
40052
- fundingSource: external_exports.literal("tenant_provider_grant"),
40053
- userSubscriptionCredentialId: external_exports.null(),
40054
- modelCredentialProviderGrantId: ProviderGrantIdSchema,
40055
- selectionReason: external_exports.null(),
40056
- subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
40057
- }),
40058
- external_exports.object({
40059
- fundingSource: external_exports.literal("platform"),
40060
- userSubscriptionCredentialId: external_exports.null(),
40061
- modelCredentialProviderGrantId: external_exports.null(),
40062
- selectionReason: external_exports.null(),
40063
- subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
40064
- })
40065
- ]
40066
- );
40067
-
40068
40097
  // ../../packages/schemas/src/webhook-endpoints.ts
40069
40098
  var WEBHOOK_BIND_KEY_MAX_LENGTH = 200;
40070
40099
  var WebhookBindKeySchema = external_exports.string().trim().min(1).max(WEBHOOK_BIND_KEY_MAX_LENGTH).regex(
package/dist/index.js CHANGED
@@ -21755,7 +21755,7 @@ var init_model_credential_funding = __esm({
21755
21755
  });
21756
21756
 
21757
21757
  // ../../packages/schemas/src/onboarding-runs.ts
21758
- var ONBOARDING_RUN_SLUG_PATTERN, OnboardingRunTeamIdSchema, OnboardingRunPhaseSchema, OnboardingRunEvidenceSchema, OnboardingKickoffReferenceSchema, OnboardingKickoffApplyEventPayloadSchema, ProjectOnboardingRunSnapshotSchema;
21758
+ var ONBOARDING_RUN_SLUG_PATTERN, OnboardingRunTeamIdSchema, OnboardingRunPhaseSchema, OnboardingRunEvidenceSchema, OnboardingFirstChangesEvidenceSchema, OnboardingKickoffReferenceSchema, OnboardingKickoffApplyEventPayloadSchema, ProjectOnboardingRunSnapshotSchema;
21759
21759
  var init_onboarding_runs = __esm({
21760
21760
  "../../packages/schemas/src/onboarding-runs.ts"() {
21761
21761
  "use strict";
@@ -21771,6 +21771,16 @@ var init_onboarding_runs = __esm({
21771
21771
  "phase must be a lowercase slug (letters, digits, '_' or '-')"
21772
21772
  );
21773
21773
  OnboardingRunEvidenceSchema = JsonObjectSchema;
21774
+ OnboardingFirstChangesEvidenceSchema = external_exports.object({
21775
+ kind: external_exports.literal("github_pull_request_opened"),
21776
+ eventRecordId: external_exports.string().trim().min(1),
21777
+ pullRequestExternalId: external_exports.string().trim().min(1).max(1024),
21778
+ repository: external_exports.string().trim().min(1).max(256),
21779
+ pullRequestNumber: external_exports.number().int().positive(),
21780
+ sourceSessionId: external_exports.string().trim().min(1),
21781
+ sourceAttributionId: external_exports.string().trim().min(1),
21782
+ openedAt: external_exports.string().datetime()
21783
+ }).strict();
21774
21784
  OnboardingKickoffReferenceSchema = external_exports.object({
21775
21785
  runId: external_exports.string().trim().min(1),
21776
21786
  correlationKey: external_exports.string().uuid(),
@@ -23141,6 +23151,146 @@ var init_runtime_restart_diagnostics = __esm({
23141
23151
  }
23142
23152
  });
23143
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
+
23144
23294
  // ../../packages/schemas/src/session-attribution-epochs.ts
23145
23295
  var ATTRIBUTION_GRADES, AttributionGradeSchema, AttributionRequesterSnapshotSchema, SessionAttributionEpochCreateSchema, SessionAttributionEpochRecordSchema;
23146
23296
  var init_session_attribution_epochs = __esm({
@@ -23150,6 +23300,7 @@ var init_session_attribution_epochs = __esm({
23150
23300
  init_ids();
23151
23301
  init_model_credential_funding();
23152
23302
  init_requester();
23303
+ init_user_subscriptions();
23153
23304
  ATTRIBUTION_GRADES = ["derived", "asserted"];
23154
23305
  AttributionGradeSchema = external_exports.enum(ATTRIBUTION_GRADES);
23155
23306
  AttributionRequesterSnapshotSchema = external_exports.object({
@@ -23168,6 +23319,10 @@ var init_session_attribution_epochs = __esm({
23168
23319
  assertedBySessionId: SessionIdSchema.nullable(),
23169
23320
  assertedByAgentResourceId: external_exports.string().trim().min(1).nullable(),
23170
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(),
23171
23326
  providerGrantId: ProviderGrantIdSchema.nullable(),
23172
23327
  userModelSubscriptionId: UserSubscriptionCredentialIdSchema.nullable()
23173
23328
  }).strict();
@@ -23179,7 +23334,7 @@ var init_session_attribution_epochs = __esm({
23179
23334
  });
23180
23335
 
23181
23336
  // ../../packages/schemas/src/usage.ts
23182
- 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;
23183
23338
  var init_usage = __esm({
23184
23339
  "../../packages/schemas/src/usage.ts"() {
23185
23340
  "use strict";
@@ -23318,11 +23473,26 @@ var init_usage = __esm({
23318
23473
  userSubscriptionId: UserSubscriptionCredentialIdSchema.nullable(),
23319
23474
  coveredInferenceCostUsd: NonNegativeUsdSchema2
23320
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
+ });
23321
23487
  ProjectUsageSubscriptionSliceSchema = external_exports.object({
23322
23488
  totals: UsageTotalsSchema.extend({
23323
23489
  coveredInferenceCostUsd: NonNegativeUsdSchema2
23324
23490
  }),
23325
- 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([])
23326
23496
  });
23327
23497
  ProjectUsageRequesterAttributionSchema = external_exports.object({
23328
23498
  requesterKey: external_exports.string().trim().min(1).nullable(),
@@ -83035,146 +83205,6 @@ var init_temporal = __esm({
83035
83205
  }
83036
83206
  });
83037
83207
 
83038
- // ../../packages/schemas/src/user-subscriptions.ts
83039
- 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;
83040
- var init_user_subscriptions = __esm({
83041
- "../../packages/schemas/src/user-subscriptions.ts"() {
83042
- "use strict";
83043
- init_zod();
83044
- init_agents();
83045
- init_chatgpt_codex();
83046
- init_ids();
83047
- init_model_selection();
83048
- init_requester();
83049
- ATTRIBUTION_COLD_BOUNDARY_IDLE_MS = 5 * 6e4;
83050
- USER_SUBSCRIPTION_PROVIDERS = ["openai"];
83051
- UserSubscriptionProviderSchema = external_exports.enum(
83052
- USER_SUBSCRIPTION_PROVIDERS
83053
- );
83054
- USER_SUBSCRIPTION_CREDENTIAL_STATUSES = [
83055
- "active",
83056
- "unusable"
83057
- ];
83058
- UserSubscriptionCredentialStatusSchema = external_exports.enum(
83059
- USER_SUBSCRIPTION_CREDENTIAL_STATUSES
83060
- );
83061
- OpenAiUserSubscriptionCredentialSecretSchema = external_exports.object({
83062
- accessToken: external_exports.string().trim().min(1),
83063
- refreshToken: external_exports.string().trim().min(1),
83064
- idToken: external_exports.string().trim().min(1)
83065
- }).strict();
83066
- UserSubscriptionCredentialSchema = external_exports.object({
83067
- id: UserSubscriptionCredentialIdSchema,
83068
- userId: UserIdSchema,
83069
- provider: external_exports.literal("openai"),
83070
- accountId: external_exports.string().trim().min(1),
83071
- planType: external_exports.string().trim().min(1),
83072
- status: UserSubscriptionCredentialStatusSchema,
83073
- accessTokenExpiresAt: external_exports.string().datetime(),
83074
- earliestRefreshAt: external_exports.string().datetime().nullable(),
83075
- secret: OpenAiUserSubscriptionCredentialSecretSchema
83076
- }).strict();
83077
- USER_SUBSCRIPTION_POLICY_MODES = [
83078
- "own_sessions",
83079
- "own_and_automations",
83080
- "all_sessions"
83081
- ];
83082
- UserSubscriptionPolicyModeSchema = external_exports.enum(
83083
- USER_SUBSCRIPTION_POLICY_MODES
83084
- );
83085
- USER_SUBSCRIPTION_POLICY_ORIGINS = [
83086
- "user",
83087
- "attach_default"
83088
- ];
83089
- UserSubscriptionPolicyOriginSchema = external_exports.enum(
83090
- USER_SUBSCRIPTION_POLICY_ORIGINS
83091
- );
83092
- UserSubscriptionPolicySchema = external_exports.object({
83093
- credentialId: UserSubscriptionCredentialIdSchema,
83094
- organizationId: OrganizationIdSchema,
83095
- projectId: ProjectIdSchema.nullable(),
83096
- mode: UserSubscriptionPolicyModeSchema,
83097
- allowAgentAttribution: external_exports.boolean().default(false),
83098
- budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
83099
- quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([])
83100
- }).strict();
83101
- UserSubscriptionFundingCandidateSchema = external_exports.object({
83102
- credentialId: UserSubscriptionCredentialIdSchema,
83103
- ownerUserId: UserIdSchema,
83104
- status: UserSubscriptionCredentialStatusSchema,
83105
- policyMode: UserSubscriptionPolicyModeSchema,
83106
- allowAgentAttribution: external_exports.boolean().default(false),
83107
- ownerIsScopeMember: external_exports.boolean(),
83108
- budgetPercent: external_exports.number().int().min(1).max(100).nullable().default(null),
83109
- quotaWindowBudgets: UserSubscriptionQuotaWindowBudgetsSchema.default([]),
83110
- quotaBudgetStatus: UserSubscriptionQuotaBudgetStatusSchema.default("under_budget")
83111
- }).strict();
83112
- UserSubscriptionFundingDecisionInputSchema = external_exports.object({
83113
- harness: external_exports.enum(AGENT_HARNESSES),
83114
- provider: ModelApiTokenProviderSchema,
83115
- model: external_exports.string().trim().min(1),
83116
- requester: RequesterSchema.nullable(),
83117
- qualifiedRequesterUserId: UserIdSchema.nullable().default(null),
83118
- automationOwnerUserId: UserIdSchema.nullable(),
83119
- organizationMemberCount: external_exports.number().int().positive(),
83120
- userSubscription: UserSubscriptionFundingCandidateSchema.nullable(),
83121
- subscriptionRejectionReason: external_exports.enum(["agent_attribution_disabled", "agent_attribution_untrusted"]).nullable().default(null),
83122
- tenantProviderGrantId: ProviderGrantIdSchema.nullable()
83123
- }).strict();
83124
- USER_SUBSCRIPTION_REJECTION_REASONS = [
83125
- "subscription_unavailable",
83126
- "credential_unusable",
83127
- "owner_not_scope_member",
83128
- "ineligible_harness",
83129
- "ineligible_provider",
83130
- "ineligible_model",
83131
- "agent_attribution_disabled",
83132
- "agent_attribution_untrusted",
83133
- "policy_not_applicable",
83134
- "quota_budget_reached",
83135
- "quota_snapshot_stale",
83136
- "quota_unknown"
83137
- ];
83138
- UserSubscriptionRejectionReasonSchema = external_exports.enum(
83139
- USER_SUBSCRIPTION_REJECTION_REASONS
83140
- );
83141
- USER_SUBSCRIPTION_SELECTION_REASONS = [
83142
- "requester_owner",
83143
- "owned_automation",
83144
- "sole_member_all_sessions"
83145
- ];
83146
- UserSubscriptionSelectionReasonSchema = external_exports.enum(
83147
- USER_SUBSCRIPTION_SELECTION_REASONS
83148
- );
83149
- UserSubscriptionFundingDecisionSchema = external_exports.discriminatedUnion(
83150
- "fundingSource",
83151
- [
83152
- external_exports.object({
83153
- fundingSource: external_exports.literal("user_subscription"),
83154
- userSubscriptionCredentialId: UserSubscriptionCredentialIdSchema,
83155
- modelCredentialProviderGrantId: external_exports.null(),
83156
- selectionReason: UserSubscriptionSelectionReasonSchema,
83157
- subscriptionRejectionReason: external_exports.null()
83158
- }),
83159
- external_exports.object({
83160
- fundingSource: external_exports.literal("tenant_provider_grant"),
83161
- userSubscriptionCredentialId: external_exports.null(),
83162
- modelCredentialProviderGrantId: ProviderGrantIdSchema,
83163
- selectionReason: external_exports.null(),
83164
- subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
83165
- }),
83166
- external_exports.object({
83167
- fundingSource: external_exports.literal("platform"),
83168
- userSubscriptionCredentialId: external_exports.null(),
83169
- modelCredentialProviderGrantId: external_exports.null(),
83170
- selectionReason: external_exports.null(),
83171
- subscriptionRejectionReason: UserSubscriptionRejectionReasonSchema
83172
- })
83173
- ]
83174
- );
83175
- }
83176
- });
83177
-
83178
83208
  // ../../packages/schemas/src/webhook-endpoints.ts
83179
83209
  var WEBHOOK_BIND_KEY_MAX_LENGTH, WebhookBindKeySchema;
83180
83210
  var init_webhook_endpoints = __esm({
@@ -86023,7 +86053,7 @@ var init_package = __esm({
86023
86053
  "package.json"() {
86024
86054
  package_default = {
86025
86055
  name: "@autohq/cli",
86026
- version: "0.1.575",
86056
+ version: "0.1.577",
86027
86057
  license: "SEE LICENSE IN README.md",
86028
86058
  publishConfig: {
86029
86059
  access: "public"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.575",
3
+ "version": "0.1.577",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"