diff --git a/packages/shared/src/api.ts b/packages/shared/src/api.ts index fbd59c84..e86fc6bf 100644 --- a/packages/shared/src/api.ts +++ b/packages/shared/src/api.ts @@ -11,4 +11,5 @@ export const API = { costs: `${API_PREFIX}/costs`, activity: `${API_PREFIX}/activity`, dashboard: `${API_PREFIX}/dashboard`, + sidebarBadges: `${API_PREFIX}/sidebar-badges`, } as const; diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 84d30996..500d4ddf 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -38,6 +38,7 @@ export type { Agent, AgentPermissions, AgentKeyCreated, + AgentConfigRevision, Project, Issue, IssueComment, @@ -46,6 +47,7 @@ export type { ApprovalComment, CostEvent, CostSummary, + CostByAgent, HeartbeatRun, HeartbeatRunEvent, AgentRuntimeState, @@ -53,6 +55,7 @@ export type { LiveEvent, DashboardSummary, ActivityEvent, + SidebarBadges, } from "./types/index.js"; export { @@ -61,12 +64,14 @@ export { type CreateCompany, type UpdateCompany, createAgentSchema, + createAgentHireSchema, updateAgentSchema, createAgentKeySchema, wakeAgentSchema, agentPermissionsSchema, updateAgentPermissionsSchema, type CreateAgent, + type CreateAgentHire, type UpdateAgent, type CreateAgentKey, type WakeAgent, @@ -79,10 +84,12 @@ export { updateIssueSchema, checkoutIssueSchema, addIssueCommentSchema, + linkIssueApprovalSchema, type CreateIssue, type UpdateIssue, type CheckoutIssue, type AddIssueComment, + type LinkIssueApproval, createGoalSchema, updateGoalSchema, type CreateGoal, diff --git a/packages/shared/src/types/agent.ts b/packages/shared/src/types/agent.ts index 7f4daefe..816d6cc0 100644 --- a/packages/shared/src/types/agent.ts +++ b/packages/shared/src/types/agent.ts @@ -35,3 +35,17 @@ export interface AgentKeyCreated { token: string; createdAt: Date; } + +export interface AgentConfigRevision { + id: string; + companyId: string; + agentId: string; + createdByAgentId: string | null; + createdByUserId: string | null; + source: string; + rolledBackFromRevisionId: string | null; + changedKeys: string[]; + beforeConfig: Record; + afterConfig: Record; + createdAt: Date; +} diff --git a/packages/shared/src/types/cost.ts b/packages/shared/src/types/cost.ts index 73ac2db7..303745ca 100644 --- a/packages/shared/src/types/cost.ts +++ b/packages/shared/src/types/cost.ts @@ -17,7 +17,16 @@ export interface CostEvent { export interface CostSummary { companyId: string; - monthSpendCents: number; - monthBudgetCents: number; - monthUtilizationPercent: number; + spendCents: number; + budgetCents: number; + utilizationPercent: number; +} + +export interface CostByAgent { + agentId: string; + agentName: string | null; + agentStatus: string | null; + costCents: number; + inputTokens: number; + outputTokens: number; } diff --git a/packages/shared/src/types/index.ts b/packages/shared/src/types/index.ts index 4e404b5f..4d546867 100644 --- a/packages/shared/src/types/index.ts +++ b/packages/shared/src/types/index.ts @@ -1,10 +1,10 @@ export type { Company } from "./company.js"; -export type { Agent, AgentKeyCreated } from "./agent.js"; +export type { Agent, AgentPermissions, AgentKeyCreated, AgentConfigRevision } from "./agent.js"; export type { Project } from "./project.js"; export type { Issue, IssueComment, IssueAncestor } from "./issue.js"; export type { Goal } from "./goal.js"; export type { Approval, ApprovalComment } from "./approval.js"; -export type { CostEvent, CostSummary } from "./cost.js"; +export type { CostEvent, CostSummary, CostByAgent } from "./cost.js"; export type { HeartbeatRun, HeartbeatRunEvent, @@ -14,3 +14,4 @@ export type { export type { LiveEvent } from "./live.js"; export type { DashboardSummary } from "./dashboard.js"; export type { ActivityEvent } from "./activity.js"; +export type { SidebarBadges } from "./sidebar-badges.js"; diff --git a/packages/shared/src/types/sidebar-badges.ts b/packages/shared/src/types/sidebar-badges.ts new file mode 100644 index 00000000..18c0610b --- /dev/null +++ b/packages/shared/src/types/sidebar-badges.ts @@ -0,0 +1,4 @@ +export interface SidebarBadges { + inbox: number; + approvals: number; +} diff --git a/packages/shared/src/validators/agent.ts b/packages/shared/src/validators/agent.ts index 10d2bd04..8665538c 100644 --- a/packages/shared/src/validators/agent.ts +++ b/packages/shared/src/validators/agent.ts @@ -25,9 +25,18 @@ export const createAgentSchema = z.object({ export type CreateAgent = z.infer; +export const createAgentHireSchema = createAgentSchema.extend({ + sourceIssueId: z.string().uuid().optional().nullable(), + sourceIssueIds: z.array(z.string().uuid()).optional(), +}); + +export type CreateAgentHire = z.infer; + export const updateAgentSchema = createAgentSchema + .omit({ permissions: true }) .partial() .extend({ + permissions: z.never().optional(), status: z.enum(AGENT_STATUSES).optional(), spentMonthlyCents: z.number().int().nonnegative().optional(), }); diff --git a/packages/shared/src/validators/approval.ts b/packages/shared/src/validators/approval.ts index f9228000..d6a6cf0d 100644 --- a/packages/shared/src/validators/approval.ts +++ b/packages/shared/src/validators/approval.ts @@ -5,6 +5,7 @@ export const createApprovalSchema = z.object({ type: z.enum(APPROVAL_TYPES), requestedByAgentId: z.string().uuid().optional().nullable(), payload: z.record(z.unknown()), + issueIds: z.array(z.string().uuid()).optional(), }); export type CreateApproval = z.infer; diff --git a/packages/shared/src/validators/index.ts b/packages/shared/src/validators/index.ts index 7e498f80..40589392 100644 --- a/packages/shared/src/validators/index.ts +++ b/packages/shared/src/validators/index.ts @@ -7,12 +7,14 @@ export { export { createAgentSchema, + createAgentHireSchema, updateAgentSchema, createAgentKeySchema, wakeAgentSchema, agentPermissionsSchema, updateAgentPermissionsSchema, type CreateAgent, + type CreateAgentHire, type UpdateAgent, type CreateAgentKey, type WakeAgent, @@ -31,10 +33,12 @@ export { updateIssueSchema, checkoutIssueSchema, addIssueCommentSchema, + linkIssueApprovalSchema, type CreateIssue, type UpdateIssue, type CheckoutIssue, type AddIssueComment, + type LinkIssueApproval, } from "./issue.js"; export { diff --git a/packages/shared/src/validators/issue.ts b/packages/shared/src/validators/issue.ts index 2776b742..ef373dc1 100644 --- a/packages/shared/src/validators/issue.ts +++ b/packages/shared/src/validators/issue.ts @@ -35,3 +35,9 @@ export const addIssueCommentSchema = z.object({ }); export type AddIssueComment = z.infer; + +export const linkIssueApprovalSchema = z.object({ + approvalId: z.string().uuid(), +}); + +export type LinkIssueApproval = z.infer;