@otto-code/protocol 0.8.10 → 0.8.12

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.
Files changed (60) hide show
  1. package/dist/agent-queue.d.ts +87 -0
  2. package/dist/agent-queue.js +106 -0
  3. package/dist/brain.d.ts +2321 -0
  4. package/dist/brain.js +1082 -0
  5. package/dist/client-capabilities.d.ts +2 -0
  6. package/dist/client-capabilities.js +10 -0
  7. package/dist/code-intelligence.d.ts +917 -0
  8. package/dist/code-intelligence.js +699 -0
  9. package/dist/communications.d.ts +1106 -0
  10. package/dist/communications.js +384 -0
  11. package/dist/context.d.ts +787 -0
  12. package/dist/context.js +295 -0
  13. package/dist/daemon-config.d.ts +377 -0
  14. package/dist/daemon-config.js +395 -0
  15. package/dist/file-operations.d.ts +380 -0
  16. package/dist/file-operations.js +282 -0
  17. package/dist/generated/validation/ws-outbound.aot.js +54927 -48878
  18. package/dist/git-hosting.d.ts +117 -0
  19. package/dist/git-hosting.js +109 -0
  20. package/dist/git-operations.d.ts +255 -0
  21. package/dist/git-operations.js +221 -0
  22. package/dist/integration-authorization.d.ts +195 -0
  23. package/dist/integration-authorization.js +125 -0
  24. package/dist/kanban.d.ts +341 -0
  25. package/dist/kanban.js +273 -0
  26. package/dist/loop/rpc-schemas.d.ts +6 -6
  27. package/dist/meetings.d.ts +95 -0
  28. package/dist/meetings.js +57 -0
  29. package/dist/messages.d.ts +21054 -24042
  30. package/dist/messages.js +4355 -8731
  31. package/dist/orchestration.d.ts +726 -0
  32. package/dist/orchestration.js +232 -0
  33. package/dist/personality-schemas.d.ts +221 -0
  34. package/dist/personality-schemas.js +340 -0
  35. package/dist/preview.d.ts +140 -0
  36. package/dist/preview.js +98 -0
  37. package/dist/project-knowledge.d.ts +740 -0
  38. package/dist/project-knowledge.js +229 -0
  39. package/dist/project-links.d.ts +102 -0
  40. package/dist/project-links.js +62 -0
  41. package/dist/provider-config.d.ts +87 -2
  42. package/dist/provider-config.js +110 -0
  43. package/dist/refine.d.ts +93 -0
  44. package/dist/refine.js +78 -0
  45. package/dist/schedule/rpc-schemas.d.ts +47 -47
  46. package/dist/schedule/types.d.ts +13 -13
  47. package/dist/speech.d.ts +180 -0
  48. package/dist/speech.js +177 -0
  49. package/dist/storage.d.ts +79 -0
  50. package/dist/storage.js +107 -0
  51. package/dist/suggested-tasks.d.ts +106 -0
  52. package/dist/suggested-tasks.js +81 -0
  53. package/dist/terminal-compatibility.d.ts +55 -0
  54. package/dist/terminal-compatibility.js +35 -0
  55. package/dist/usage-stats.d.ts +255 -0
  56. package/dist/usage-stats.js +162 -0
  57. package/dist/validation/ws-outbound-schema-metadata.d.ts +1404 -274
  58. package/dist/worktree-ops.d.ts +81 -0
  59. package/dist/worktree-ops.js +88 -0
  60. package/package.json +1 -1
@@ -0,0 +1,255 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Otto usage and activity-stats wire schemas: the usage.log.get and stats.activity.* RPCs, the usage event, and the activity counters push. Fork-only capability, so it owns its schemas; messages.ts re-exports them.
4
+ */
5
+ export declare const ActivityCountersSchema: z.ZodObject<{
6
+ messagesSent: z.ZodDefault<z.ZodNumber>;
7
+ messagesReceived: z.ZodDefault<z.ZodNumber>;
8
+ tokensSent: z.ZodDefault<z.ZodNumber>;
9
+ tokensReceived: z.ZodDefault<z.ZodNumber>;
10
+ agentsCreated: z.ZodDefault<z.ZodNumber>;
11
+ runsOrchestrated: z.ZodDefault<z.ZodNumber>;
12
+ subagentsInvoked: z.ZodDefault<z.ZodNumber>;
13
+ backgroundTasksInvoked: z.ZodDefault<z.ZodNumber>;
14
+ thoughts: z.ZodDefault<z.ZodNumber>;
15
+ toolsCalled: z.ZodDefault<z.ZodNumber>;
16
+ artifactsCreated: z.ZodDefault<z.ZodNumber>;
17
+ schedulesExecuted: z.ZodDefault<z.ZodNumber>;
18
+ costMicroUsd: z.ZodDefault<z.ZodNumber>;
19
+ mainChatTokensIn: z.ZodDefault<z.ZodNumber>;
20
+ mainChatTokensOut: z.ZodDefault<z.ZodNumber>;
21
+ mainChatCostMicroUsd: z.ZodDefault<z.ZodNumber>;
22
+ generationsTokensIn: z.ZodDefault<z.ZodNumber>;
23
+ generationsTokensOut: z.ZodDefault<z.ZodNumber>;
24
+ generationsCostMicroUsd: z.ZodDefault<z.ZodNumber>;
25
+ subagentTokensIn: z.ZodDefault<z.ZodNumber>;
26
+ subagentTokensOut: z.ZodDefault<z.ZodNumber>;
27
+ subagentCostMicroUsd: z.ZodDefault<z.ZodNumber>;
28
+ compactionTokensIn: z.ZodDefault<z.ZodNumber>;
29
+ compactionTokensOut: z.ZodDefault<z.ZodNumber>;
30
+ claudeTokensIn: z.ZodDefault<z.ZodNumber>;
31
+ claudeTokensOut: z.ZodDefault<z.ZodNumber>;
32
+ }, z.core.$strip>;
33
+ export declare const StatsActivityGetRequestMessageSchema: z.ZodObject<{
34
+ type: z.ZodLiteral<"stats.activity.get.request">;
35
+ requestId: z.ZodString;
36
+ }, z.core.$strip>;
37
+ export declare const StatsActivityGetResponseMessageSchema: z.ZodObject<{
38
+ type: z.ZodLiteral<"stats.activity.get.response">;
39
+ payload: z.ZodObject<{
40
+ requestId: z.ZodString;
41
+ today: z.ZodObject<{
42
+ messagesSent: z.ZodDefault<z.ZodNumber>;
43
+ messagesReceived: z.ZodDefault<z.ZodNumber>;
44
+ tokensSent: z.ZodDefault<z.ZodNumber>;
45
+ tokensReceived: z.ZodDefault<z.ZodNumber>;
46
+ agentsCreated: z.ZodDefault<z.ZodNumber>;
47
+ runsOrchestrated: z.ZodDefault<z.ZodNumber>;
48
+ subagentsInvoked: z.ZodDefault<z.ZodNumber>;
49
+ backgroundTasksInvoked: z.ZodDefault<z.ZodNumber>;
50
+ thoughts: z.ZodDefault<z.ZodNumber>;
51
+ toolsCalled: z.ZodDefault<z.ZodNumber>;
52
+ artifactsCreated: z.ZodDefault<z.ZodNumber>;
53
+ schedulesExecuted: z.ZodDefault<z.ZodNumber>;
54
+ costMicroUsd: z.ZodDefault<z.ZodNumber>;
55
+ mainChatTokensIn: z.ZodDefault<z.ZodNumber>;
56
+ mainChatTokensOut: z.ZodDefault<z.ZodNumber>;
57
+ mainChatCostMicroUsd: z.ZodDefault<z.ZodNumber>;
58
+ generationsTokensIn: z.ZodDefault<z.ZodNumber>;
59
+ generationsTokensOut: z.ZodDefault<z.ZodNumber>;
60
+ generationsCostMicroUsd: z.ZodDefault<z.ZodNumber>;
61
+ subagentTokensIn: z.ZodDefault<z.ZodNumber>;
62
+ subagentTokensOut: z.ZodDefault<z.ZodNumber>;
63
+ subagentCostMicroUsd: z.ZodDefault<z.ZodNumber>;
64
+ compactionTokensIn: z.ZodDefault<z.ZodNumber>;
65
+ compactionTokensOut: z.ZodDefault<z.ZodNumber>;
66
+ claudeTokensIn: z.ZodDefault<z.ZodNumber>;
67
+ claudeTokensOut: z.ZodDefault<z.ZodNumber>;
68
+ }, z.core.$strip>;
69
+ yesterday: z.ZodObject<{
70
+ messagesSent: z.ZodDefault<z.ZodNumber>;
71
+ messagesReceived: z.ZodDefault<z.ZodNumber>;
72
+ tokensSent: z.ZodDefault<z.ZodNumber>;
73
+ tokensReceived: z.ZodDefault<z.ZodNumber>;
74
+ agentsCreated: z.ZodDefault<z.ZodNumber>;
75
+ runsOrchestrated: z.ZodDefault<z.ZodNumber>;
76
+ subagentsInvoked: z.ZodDefault<z.ZodNumber>;
77
+ backgroundTasksInvoked: z.ZodDefault<z.ZodNumber>;
78
+ thoughts: z.ZodDefault<z.ZodNumber>;
79
+ toolsCalled: z.ZodDefault<z.ZodNumber>;
80
+ artifactsCreated: z.ZodDefault<z.ZodNumber>;
81
+ schedulesExecuted: z.ZodDefault<z.ZodNumber>;
82
+ costMicroUsd: z.ZodDefault<z.ZodNumber>;
83
+ mainChatTokensIn: z.ZodDefault<z.ZodNumber>;
84
+ mainChatTokensOut: z.ZodDefault<z.ZodNumber>;
85
+ mainChatCostMicroUsd: z.ZodDefault<z.ZodNumber>;
86
+ generationsTokensIn: z.ZodDefault<z.ZodNumber>;
87
+ generationsTokensOut: z.ZodDefault<z.ZodNumber>;
88
+ generationsCostMicroUsd: z.ZodDefault<z.ZodNumber>;
89
+ subagentTokensIn: z.ZodDefault<z.ZodNumber>;
90
+ subagentTokensOut: z.ZodDefault<z.ZodNumber>;
91
+ subagentCostMicroUsd: z.ZodDefault<z.ZodNumber>;
92
+ compactionTokensIn: z.ZodDefault<z.ZodNumber>;
93
+ compactionTokensOut: z.ZodDefault<z.ZodNumber>;
94
+ claudeTokensIn: z.ZodDefault<z.ZodNumber>;
95
+ claudeTokensOut: z.ZodDefault<z.ZodNumber>;
96
+ }, z.core.$strip>;
97
+ last7Days: z.ZodObject<{
98
+ messagesSent: z.ZodDefault<z.ZodNumber>;
99
+ messagesReceived: z.ZodDefault<z.ZodNumber>;
100
+ tokensSent: z.ZodDefault<z.ZodNumber>;
101
+ tokensReceived: z.ZodDefault<z.ZodNumber>;
102
+ agentsCreated: z.ZodDefault<z.ZodNumber>;
103
+ runsOrchestrated: z.ZodDefault<z.ZodNumber>;
104
+ subagentsInvoked: z.ZodDefault<z.ZodNumber>;
105
+ backgroundTasksInvoked: z.ZodDefault<z.ZodNumber>;
106
+ thoughts: z.ZodDefault<z.ZodNumber>;
107
+ toolsCalled: z.ZodDefault<z.ZodNumber>;
108
+ artifactsCreated: z.ZodDefault<z.ZodNumber>;
109
+ schedulesExecuted: z.ZodDefault<z.ZodNumber>;
110
+ costMicroUsd: z.ZodDefault<z.ZodNumber>;
111
+ mainChatTokensIn: z.ZodDefault<z.ZodNumber>;
112
+ mainChatTokensOut: z.ZodDefault<z.ZodNumber>;
113
+ mainChatCostMicroUsd: z.ZodDefault<z.ZodNumber>;
114
+ generationsTokensIn: z.ZodDefault<z.ZodNumber>;
115
+ generationsTokensOut: z.ZodDefault<z.ZodNumber>;
116
+ generationsCostMicroUsd: z.ZodDefault<z.ZodNumber>;
117
+ subagentTokensIn: z.ZodDefault<z.ZodNumber>;
118
+ subagentTokensOut: z.ZodDefault<z.ZodNumber>;
119
+ subagentCostMicroUsd: z.ZodDefault<z.ZodNumber>;
120
+ compactionTokensIn: z.ZodDefault<z.ZodNumber>;
121
+ compactionTokensOut: z.ZodDefault<z.ZodNumber>;
122
+ claudeTokensIn: z.ZodDefault<z.ZodNumber>;
123
+ claudeTokensOut: z.ZodDefault<z.ZodNumber>;
124
+ }, z.core.$strip>;
125
+ last30Days: z.ZodObject<{
126
+ messagesSent: z.ZodDefault<z.ZodNumber>;
127
+ messagesReceived: z.ZodDefault<z.ZodNumber>;
128
+ tokensSent: z.ZodDefault<z.ZodNumber>;
129
+ tokensReceived: z.ZodDefault<z.ZodNumber>;
130
+ agentsCreated: z.ZodDefault<z.ZodNumber>;
131
+ runsOrchestrated: z.ZodDefault<z.ZodNumber>;
132
+ subagentsInvoked: z.ZodDefault<z.ZodNumber>;
133
+ backgroundTasksInvoked: z.ZodDefault<z.ZodNumber>;
134
+ thoughts: z.ZodDefault<z.ZodNumber>;
135
+ toolsCalled: z.ZodDefault<z.ZodNumber>;
136
+ artifactsCreated: z.ZodDefault<z.ZodNumber>;
137
+ schedulesExecuted: z.ZodDefault<z.ZodNumber>;
138
+ costMicroUsd: z.ZodDefault<z.ZodNumber>;
139
+ mainChatTokensIn: z.ZodDefault<z.ZodNumber>;
140
+ mainChatTokensOut: z.ZodDefault<z.ZodNumber>;
141
+ mainChatCostMicroUsd: z.ZodDefault<z.ZodNumber>;
142
+ generationsTokensIn: z.ZodDefault<z.ZodNumber>;
143
+ generationsTokensOut: z.ZodDefault<z.ZodNumber>;
144
+ generationsCostMicroUsd: z.ZodDefault<z.ZodNumber>;
145
+ subagentTokensIn: z.ZodDefault<z.ZodNumber>;
146
+ subagentTokensOut: z.ZodDefault<z.ZodNumber>;
147
+ subagentCostMicroUsd: z.ZodDefault<z.ZodNumber>;
148
+ compactionTokensIn: z.ZodDefault<z.ZodNumber>;
149
+ compactionTokensOut: z.ZodDefault<z.ZodNumber>;
150
+ claudeTokensIn: z.ZodDefault<z.ZodNumber>;
151
+ claudeTokensOut: z.ZodDefault<z.ZodNumber>;
152
+ }, z.core.$strip>;
153
+ allTime: z.ZodObject<{
154
+ messagesSent: z.ZodDefault<z.ZodNumber>;
155
+ messagesReceived: z.ZodDefault<z.ZodNumber>;
156
+ tokensSent: z.ZodDefault<z.ZodNumber>;
157
+ tokensReceived: z.ZodDefault<z.ZodNumber>;
158
+ agentsCreated: z.ZodDefault<z.ZodNumber>;
159
+ runsOrchestrated: z.ZodDefault<z.ZodNumber>;
160
+ subagentsInvoked: z.ZodDefault<z.ZodNumber>;
161
+ backgroundTasksInvoked: z.ZodDefault<z.ZodNumber>;
162
+ thoughts: z.ZodDefault<z.ZodNumber>;
163
+ toolsCalled: z.ZodDefault<z.ZodNumber>;
164
+ artifactsCreated: z.ZodDefault<z.ZodNumber>;
165
+ schedulesExecuted: z.ZodDefault<z.ZodNumber>;
166
+ costMicroUsd: z.ZodDefault<z.ZodNumber>;
167
+ mainChatTokensIn: z.ZodDefault<z.ZodNumber>;
168
+ mainChatTokensOut: z.ZodDefault<z.ZodNumber>;
169
+ mainChatCostMicroUsd: z.ZodDefault<z.ZodNumber>;
170
+ generationsTokensIn: z.ZodDefault<z.ZodNumber>;
171
+ generationsTokensOut: z.ZodDefault<z.ZodNumber>;
172
+ generationsCostMicroUsd: z.ZodDefault<z.ZodNumber>;
173
+ subagentTokensIn: z.ZodDefault<z.ZodNumber>;
174
+ subagentTokensOut: z.ZodDefault<z.ZodNumber>;
175
+ subagentCostMicroUsd: z.ZodDefault<z.ZodNumber>;
176
+ compactionTokensIn: z.ZodDefault<z.ZodNumber>;
177
+ compactionTokensOut: z.ZodDefault<z.ZodNumber>;
178
+ claudeTokensIn: z.ZodDefault<z.ZodNumber>;
179
+ claudeTokensOut: z.ZodDefault<z.ZodNumber>;
180
+ }, z.core.$strip>;
181
+ }, z.core.$strip>;
182
+ }, z.core.$strip>;
183
+ export declare const ActivityStatsChangedSchema: z.ZodObject<{
184
+ type: z.ZodLiteral<"activity_stats_changed">;
185
+ }, z.core.$strip>;
186
+ export declare const UsageEventSchema: z.ZodObject<{
187
+ id: z.ZodString;
188
+ at: z.ZodNumber;
189
+ kind: z.ZodString;
190
+ subtype: z.ZodOptional<z.ZodString>;
191
+ provider: z.ZodString;
192
+ model: z.ZodOptional<z.ZodString>;
193
+ tokensIn: z.ZodDefault<z.ZodNumber>;
194
+ cachedTokensIn: z.ZodOptional<z.ZodNumber>;
195
+ tokensOut: z.ZodDefault<z.ZodNumber>;
196
+ costMicroUsd: z.ZodDefault<z.ZodNumber>;
197
+ compactionTokensIn: z.ZodOptional<z.ZodNumber>;
198
+ compactionTokensOut: z.ZodOptional<z.ZodNumber>;
199
+ agentId: z.ZodOptional<z.ZodString>;
200
+ rounds: z.ZodOptional<z.ZodNumber>;
201
+ startedAt: z.ZodOptional<z.ZodNumber>;
202
+ subagentKey: z.ZodOptional<z.ZodString>;
203
+ parentSubagentKey: z.ZodOptional<z.ZodString>;
204
+ }, z.core.$strip>;
205
+ export declare const UsageLogGetRequestMessageSchema: z.ZodObject<{
206
+ type: z.ZodLiteral<"usage.log.get.request">;
207
+ requestId: z.ZodString;
208
+ limit: z.ZodOptional<z.ZodNumber>;
209
+ before: z.ZodOptional<z.ZodNumber>;
210
+ }, z.core.$strip>;
211
+ export declare const UsageLogGetResponseMessageSchema: z.ZodObject<{
212
+ type: z.ZodLiteral<"usage.log.get.response">;
213
+ payload: z.ZodObject<{
214
+ requestId: z.ZodString;
215
+ events: z.ZodDefault<z.ZodArray<z.ZodObject<{
216
+ id: z.ZodString;
217
+ at: z.ZodNumber;
218
+ kind: z.ZodString;
219
+ subtype: z.ZodOptional<z.ZodString>;
220
+ provider: z.ZodString;
221
+ model: z.ZodOptional<z.ZodString>;
222
+ tokensIn: z.ZodDefault<z.ZodNumber>;
223
+ cachedTokensIn: z.ZodOptional<z.ZodNumber>;
224
+ tokensOut: z.ZodDefault<z.ZodNumber>;
225
+ costMicroUsd: z.ZodDefault<z.ZodNumber>;
226
+ compactionTokensIn: z.ZodOptional<z.ZodNumber>;
227
+ compactionTokensOut: z.ZodOptional<z.ZodNumber>;
228
+ agentId: z.ZodOptional<z.ZodString>;
229
+ rounds: z.ZodOptional<z.ZodNumber>;
230
+ startedAt: z.ZodOptional<z.ZodNumber>;
231
+ subagentKey: z.ZodOptional<z.ZodString>;
232
+ parentSubagentKey: z.ZodOptional<z.ZodString>;
233
+ }, z.core.$strip>>>;
234
+ hasMore: z.ZodDefault<z.ZodBoolean>;
235
+ }, z.core.$strip>;
236
+ }, z.core.$strip>;
237
+ export declare const StatsActivityResetRequestMessageSchema: z.ZodObject<{
238
+ type: z.ZodLiteral<"stats.activity.reset.request">;
239
+ requestId: z.ZodString;
240
+ }, z.core.$strip>;
241
+ export declare const StatsActivityResetResponseMessageSchema: z.ZodObject<{
242
+ type: z.ZodLiteral<"stats.activity.reset.response">;
243
+ payload: z.ZodObject<{
244
+ requestId: z.ZodString;
245
+ }, z.core.$strip>;
246
+ }, z.core.$strip>;
247
+ export type ActivityCounters = z.infer<typeof ActivityCountersSchema>;
248
+ export type StatsActivityGetResponseMessage = z.infer<typeof StatsActivityGetResponseMessageSchema>;
249
+ export type StatsActivityResetRequestMessage = z.infer<typeof StatsActivityResetRequestMessageSchema>;
250
+ export type StatsActivityResetResponseMessage = z.infer<typeof StatsActivityResetResponseMessageSchema>;
251
+ export type ActivityStatsChanged = z.infer<typeof ActivityStatsChangedSchema>;
252
+ export type UsageEvent = z.infer<typeof UsageEventSchema>;
253
+ export type UsageLogGetRequestMessage = z.infer<typeof UsageLogGetRequestMessageSchema>;
254
+ export type UsageLogGetResponseMessage = z.infer<typeof UsageLogGetResponseMessageSchema>;
255
+ //# sourceMappingURL=usage-stats.d.ts.map
@@ -0,0 +1,162 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Otto usage and activity-stats wire schemas: the usage.log.get and stats.activity.* RPCs, the usage event, and the activity counters push. Fork-only capability, so it owns its schemas; messages.ts re-exports them.
4
+ */
5
+ // Daemon-wide "fun stats" counters - see docs/data-model.md ActivityStatsStore.
6
+ // Every field defaults to 0 so old and new daemons/clients stay compatible as
7
+ // counters are added later.
8
+ export const ActivityCountersSchema = z.object({
9
+ messagesSent: z.number().default(0),
10
+ messagesReceived: z.number().default(0),
11
+ tokensSent: z.number().default(0),
12
+ tokensReceived: z.number().default(0),
13
+ agentsCreated: z.number().default(0),
14
+ runsOrchestrated: z.number().default(0),
15
+ subagentsInvoked: z.number().default(0),
16
+ backgroundTasksInvoked: z.number().default(0),
17
+ thoughts: z.number().default(0),
18
+ toolsCalled: z.number().default(0),
19
+ artifactsCreated: z.number().default(0),
20
+ schedulesExecuted: z.number().default(0),
21
+ // Usage & cost accounting (WP-G). Additive/defaulted like every counter above,
22
+ // so old daemons emit 0 and old clients drop the unknown leaves. "In"/"Out"
23
+ // are token totals; *CostMicroUsd are integer micro-USD (usd*1e6) to stay
24
+ // summable - populated only for turns reporting a real provider cost (Claude).
25
+ // The client detects whether the daemon actually populates these via
26
+ // features.usageCostCategories (see below).
27
+ costMicroUsd: z.number().default(0),
28
+ mainChatTokensIn: z.number().default(0),
29
+ mainChatTokensOut: z.number().default(0),
30
+ mainChatCostMicroUsd: z.number().default(0),
31
+ generationsTokensIn: z.number().default(0),
32
+ generationsTokensOut: z.number().default(0),
33
+ generationsCostMicroUsd: z.number().default(0),
34
+ subagentTokensIn: z.number().default(0),
35
+ subagentTokensOut: z.number().default(0),
36
+ subagentCostMicroUsd: z.number().default(0),
37
+ compactionTokensIn: z.number().default(0),
38
+ compactionTokensOut: z.number().default(0),
39
+ claudeTokensIn: z.number().default(0),
40
+ claudeTokensOut: z.number().default(0),
41
+ });
42
+ export const StatsActivityGetRequestMessageSchema = z.object({
43
+ type: z.literal("stats.activity.get.request"),
44
+ requestId: z.string(),
45
+ });
46
+ export const StatsActivityGetResponseMessageSchema = z.object({
47
+ type: z.literal("stats.activity.get.response"),
48
+ payload: z.object({
49
+ requestId: z.string(),
50
+ today: ActivityCountersSchema,
51
+ yesterday: ActivityCountersSchema,
52
+ last7Days: ActivityCountersSchema,
53
+ last30Days: ActivityCountersSchema,
54
+ allTime: ActivityCountersSchema,
55
+ }),
56
+ });
57
+ // Daemon-wide "activity counters moved" ping - broadcast to every client,
58
+ // coalesced at the daemon (at most once every few seconds) so bursts of
59
+ // increments don't get chatty. Carries no payload: clients re-fetch the
60
+ // rollups via stats.activity.get. Purely additive - old clients drop the
61
+ // unknown type with a warning, and against old daemons (which never send it)
62
+ // the stats screen degrades to today's focus/manual refresh. Rides the
63
+ // existing activityStats capability; no new feature flag needed because no
64
+ // client behavior depends on detecting it.
65
+ export const ActivityStatsChangedSchema = z.object({
66
+ type: z.literal("activity_stats_changed"),
67
+ });
68
+ // One itemized row of the usage ledger - a single token/cost-bearing activity
69
+ // (a chat turn, a sub-agent turn, or a background generation). The aggregate
70
+ // ActivityCounters above are the rollup of this same event stream; the ledger is
71
+ // the scrollable detail behind the tiles (usage-ledger project). `kind` and
72
+ // `provider` are plain strings (not enums) so an OLD client still parses a NEW
73
+ // daemon that emits a kind it hasn't heard of - it renders it generically rather
74
+ // than failing the whole message. All token/cost leaves default to 0.
75
+ export const UsageEventSchema = z.object({
76
+ /** Stable unique id for the row (daemon-generated). */
77
+ id: z.string(),
78
+ /** Epoch milliseconds when the activity was recorded. */
79
+ at: z.number(),
80
+ /** "chat" | "subagent" | "generation" today; open for future kinds. */
81
+ kind: z.string(),
82
+ /** Finer label within the kind (e.g. a generation's purpose, a sub-agent name). */
83
+ subtype: z.string().optional(),
84
+ /** Agent provider id (e.g. "claude", an openai-compat endpoint id). */
85
+ provider: z.string(),
86
+ /** Model id/name if known at the increment site. */
87
+ model: z.string().optional(),
88
+ /** input + cached + cache-creation tokens (same "in" split the counters use). */
89
+ tokensIn: z.number().default(0),
90
+ /**
91
+ * The portion of `tokensIn` served from the provider prompt cache (cache-read),
92
+ * billed at a fraction of fresh input. The fresh (full-rate) portion is
93
+ * `tokensIn - cachedTokensIn`. Absent when the provider reports no cache reads
94
+ * (e.g. openai-compat endpoints with no caching), which reads as all-fresh.
95
+ */
96
+ cachedTokensIn: z.number().optional(),
97
+ /** output tokens. */
98
+ tokensOut: z.number().default(0),
99
+ /** Real provider spend in integer micro-USD (usd*1e6); 0 for token-only providers. */
100
+ costMicroUsd: z.number().default(0),
101
+ /** Mid-turn compaction slice folded into this turn's usage, if any (token-only). */
102
+ compactionTokensIn: z.number().optional(),
103
+ compactionTokensOut: z.number().optional(),
104
+ /** The agent this activity belonged to, for tracing back to the chat. */
105
+ agentId: z.string().optional(),
106
+ /**
107
+ * How many model round-trips this row aggregates. A chat row is one query, but
108
+ * a sub-agent row covers a whole delegated task that internally ran many
109
+ * rounds - and each round re-reads the growing context, so `cachedTokensIn` is
110
+ * cumulative cache-READS, not a cache size. Surfacing the count is what makes a
111
+ * large cached figure legible instead of looking like a bug. Absent when the
112
+ * provider doesn't report it.
113
+ */
114
+ rounds: z.number().optional(),
115
+ /**
116
+ * Sub-agent rows only - the spawn-tree identity that lets the Log group rows
117
+ * the way a human reads the run (chat turn → its sub-agents → their
118
+ * sub-agents) instead of by settle time, which async sub-agents crossing turn
119
+ * boundaries makes wrong. `startedAt` is when the sub-agent was first
120
+ * observed (epoch ms; a row belongs to the turn that spawned it, not the turn
121
+ * it happened to settle in), `subagentKey` is its stable observed key, and
122
+ * `parentSubagentKey` is the spawning sub-agent's key - absent for depth-1
123
+ * sub-agents spawned by the chat itself.
124
+ */
125
+ startedAt: z.number().optional(),
126
+ subagentKey: z.string().optional(),
127
+ parentSubagentKey: z.string().optional(),
128
+ });
129
+ export const UsageLogGetRequestMessageSchema = z.object({
130
+ type: z.literal("usage.log.get.request"),
131
+ requestId: z.string(),
132
+ /** Max rows to return (daemon clamps). Newest-first. */
133
+ limit: z.number().optional(),
134
+ /** Cursor: return only rows strictly older than this epoch-ms (for "load more"). */
135
+ before: z.number().optional(),
136
+ });
137
+ export const UsageLogGetResponseMessageSchema = z.object({
138
+ type: z.literal("usage.log.get.response"),
139
+ payload: z.object({
140
+ requestId: z.string(),
141
+ /** Newest-first page of ledger rows. */
142
+ events: z.array(UsageEventSchema).default([]),
143
+ /** True when older rows exist beyond this page (paginate with `before`). */
144
+ hasMore: z.boolean().default(false),
145
+ }),
146
+ });
147
+ // Wipe every daemon-wide usage counter AND the itemized usage ledger back to
148
+ // zero - the "Reset" action on the Metrics screen. One RPC clears both sinks
149
+ // (the day-bucketed ActivityStatsStore and the UsageLogStore) so the tiles and
150
+ // the Log tab start fresh together. Gated behind features.statsReset so an old
151
+ // daemon (no handler) never receives a request the client thinks it can send.
152
+ export const StatsActivityResetRequestMessageSchema = z.object({
153
+ type: z.literal("stats.activity.reset.request"),
154
+ requestId: z.string(),
155
+ });
156
+ export const StatsActivityResetResponseMessageSchema = z.object({
157
+ type: z.literal("stats.activity.reset.response"),
158
+ payload: z.object({
159
+ requestId: z.string(),
160
+ }),
161
+ });
162
+ //# sourceMappingURL=usage-stats.js.map