opencarly 1.0.0

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 (59) hide show
  1. package/README.md +78 -0
  2. package/bin/install.js +304 -0
  3. package/commands/carly-manager.md +69 -0
  4. package/dist/config/discovery.d.ts +22 -0
  5. package/dist/config/discovery.d.ts.map +1 -0
  6. package/dist/config/discovery.js +43 -0
  7. package/dist/config/discovery.js.map +1 -0
  8. package/dist/config/index.d.ts +7 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +7 -0
  11. package/dist/config/index.js.map +1 -0
  12. package/dist/config/manifest.d.ts +39 -0
  13. package/dist/config/manifest.d.ts.map +1 -0
  14. package/dist/config/manifest.js +139 -0
  15. package/dist/config/manifest.js.map +1 -0
  16. package/dist/config/schema.d.ts +663 -0
  17. package/dist/config/schema.d.ts.map +1 -0
  18. package/dist/config/schema.js +208 -0
  19. package/dist/config/schema.js.map +1 -0
  20. package/dist/engine/brackets.d.ts +26 -0
  21. package/dist/engine/brackets.d.ts.map +1 -0
  22. package/dist/engine/brackets.js +49 -0
  23. package/dist/engine/brackets.js.map +1 -0
  24. package/dist/engine/index.d.ts +8 -0
  25. package/dist/engine/index.d.ts.map +1 -0
  26. package/dist/engine/index.js +8 -0
  27. package/dist/engine/index.js.map +1 -0
  28. package/dist/engine/loader.d.ts +82 -0
  29. package/dist/engine/loader.d.ts.map +1 -0
  30. package/dist/engine/loader.js +147 -0
  31. package/dist/engine/loader.js.map +1 -0
  32. package/dist/engine/matcher.d.ts +43 -0
  33. package/dist/engine/matcher.d.ts.map +1 -0
  34. package/dist/engine/matcher.js +174 -0
  35. package/dist/engine/matcher.js.map +1 -0
  36. package/dist/engine/trimmer.d.ts +91 -0
  37. package/dist/engine/trimmer.d.ts.map +1 -0
  38. package/dist/engine/trimmer.js +236 -0
  39. package/dist/engine/trimmer.js.map +1 -0
  40. package/dist/formatter/formatter.d.ts +23 -0
  41. package/dist/formatter/formatter.d.ts.map +1 -0
  42. package/dist/formatter/formatter.js +129 -0
  43. package/dist/formatter/formatter.js.map +1 -0
  44. package/dist/index.d.ts +15 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +484 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/session/session.d.ts +60 -0
  49. package/dist/session/session.d.ts.map +1 -0
  50. package/dist/session/session.js +394 -0
  51. package/dist/session/session.js.map +1 -0
  52. package/package.json +59 -0
  53. package/templates/.opencarly/commands.json +96 -0
  54. package/templates/.opencarly/context.json +44 -0
  55. package/templates/.opencarly/domains/development.md +13 -0
  56. package/templates/.opencarly/domains/global.md +13 -0
  57. package/templates/.opencarly/domains/security.md +14 -0
  58. package/templates/.opencarly/domains/testing.md +12 -0
  59. package/templates/.opencarly/manifest.json +43 -0
@@ -0,0 +1,663 @@
1
+ /**
2
+ * OpenCarly Configuration Schemas
3
+ *
4
+ * Zod schemas for all configuration files:
5
+ * - manifest.json (domain registry, settings)
6
+ * - commands.json (star-command definitions)
7
+ * - context.json (context bracket thresholds and rules)
8
+ * - sessions/*.json (per-session state)
9
+ */
10
+ import { z } from "zod";
11
+ export declare const DomainConfigSchema: z.ZodObject<{
12
+ /** Whether this domain is active */
13
+ state: z.ZodDefault<z.ZodEnum<["active", "inactive"]>>;
14
+ /** If true, domain rules load on every prompt (no keyword matching) */
15
+ alwaysOn: z.ZodDefault<z.ZodBoolean>;
16
+ /** Keywords that trigger this domain (substring match, case-insensitive) */
17
+ recall: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
18
+ /** Keywords that prevent this domain from loading */
19
+ exclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
20
+ /** File paths/globs that trigger this domain (e.g., ["*.tsx", "src/components/*"]) */
21
+ paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
22
+ /** Path to the domain rule file, relative to .opencarly/ */
23
+ file: z.ZodString;
24
+ }, "strip", z.ZodTypeAny, {
25
+ state: "active" | "inactive";
26
+ alwaysOn: boolean;
27
+ recall: string[];
28
+ exclude: string[];
29
+ paths: string[];
30
+ file: string;
31
+ }, {
32
+ file: string;
33
+ state?: "active" | "inactive" | undefined;
34
+ alwaysOn?: boolean | undefined;
35
+ recall?: string[] | undefined;
36
+ exclude?: string[] | undefined;
37
+ paths?: string[] | undefined;
38
+ }>;
39
+ export type DomainConfig = z.infer<typeof DomainConfigSchema>;
40
+ export declare const ManifestSchema: z.ZodObject<{
41
+ /** Schema version for forward compatibility */
42
+ version: z.ZodDefault<z.ZodLiteral<1>>;
43
+ /** Enable DEVMODE debug output */
44
+ devmode: z.ZodDefault<z.ZodBoolean>;
45
+ /** Global exclusion keywords - if any match, skip ALL domain matching */
46
+ globalExclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
47
+ /** Domain definitions */
48
+ domains: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
49
+ /** Whether this domain is active */
50
+ state: z.ZodDefault<z.ZodEnum<["active", "inactive"]>>;
51
+ /** If true, domain rules load on every prompt (no keyword matching) */
52
+ alwaysOn: z.ZodDefault<z.ZodBoolean>;
53
+ /** Keywords that trigger this domain (substring match, case-insensitive) */
54
+ recall: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
55
+ /** Keywords that prevent this domain from loading */
56
+ exclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
57
+ /** File paths/globs that trigger this domain (e.g., ["*.tsx", "src/components/*"]) */
58
+ paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
59
+ /** Path to the domain rule file, relative to .opencarly/ */
60
+ file: z.ZodString;
61
+ }, "strip", z.ZodTypeAny, {
62
+ state: "active" | "inactive";
63
+ alwaysOn: boolean;
64
+ recall: string[];
65
+ exclude: string[];
66
+ paths: string[];
67
+ file: string;
68
+ }, {
69
+ file: string;
70
+ state?: "active" | "inactive" | undefined;
71
+ alwaysOn?: boolean | undefined;
72
+ recall?: string[] | undefined;
73
+ exclude?: string[] | undefined;
74
+ paths?: string[] | undefined;
75
+ }>>>;
76
+ /** Whether star-commands system is enabled */
77
+ commands: z.ZodDefault<z.ZodObject<{
78
+ state: z.ZodDefault<z.ZodEnum<["active", "inactive"]>>;
79
+ }, "strip", z.ZodTypeAny, {
80
+ state: "active" | "inactive";
81
+ }, {
82
+ state?: "active" | "inactive" | undefined;
83
+ }>>;
84
+ /** Whether context bracket system is enabled */
85
+ context: z.ZodDefault<z.ZodObject<{
86
+ state: z.ZodDefault<z.ZodEnum<["active", "inactive"]>>;
87
+ }, "strip", z.ZodTypeAny, {
88
+ state: "active" | "inactive";
89
+ }, {
90
+ state?: "active" | "inactive" | undefined;
91
+ }>>;
92
+ }, "strip", z.ZodTypeAny, {
93
+ version: 1;
94
+ devmode: boolean;
95
+ globalExclude: string[];
96
+ domains: Record<string, {
97
+ state: "active" | "inactive";
98
+ alwaysOn: boolean;
99
+ recall: string[];
100
+ exclude: string[];
101
+ paths: string[];
102
+ file: string;
103
+ }>;
104
+ commands: {
105
+ state: "active" | "inactive";
106
+ };
107
+ context: {
108
+ state: "active" | "inactive";
109
+ };
110
+ }, {
111
+ version?: 1 | undefined;
112
+ devmode?: boolean | undefined;
113
+ globalExclude?: string[] | undefined;
114
+ domains?: Record<string, {
115
+ file: string;
116
+ state?: "active" | "inactive" | undefined;
117
+ alwaysOn?: boolean | undefined;
118
+ recall?: string[] | undefined;
119
+ exclude?: string[] | undefined;
120
+ paths?: string[] | undefined;
121
+ }> | undefined;
122
+ commands?: {
123
+ state?: "active" | "inactive" | undefined;
124
+ } | undefined;
125
+ context?: {
126
+ state?: "active" | "inactive" | undefined;
127
+ } | undefined;
128
+ }>;
129
+ export type Manifest = z.infer<typeof ManifestSchema>;
130
+ export declare const StarCommandSchema: z.ZodObject<{
131
+ /** Description of what this command does */
132
+ description: z.ZodOptional<z.ZodString>;
133
+ /** Rules injected when this command is invoked */
134
+ rules: z.ZodArray<z.ZodString, "many">;
135
+ }, "strip", z.ZodTypeAny, {
136
+ rules: string[];
137
+ description?: string | undefined;
138
+ }, {
139
+ rules: string[];
140
+ description?: string | undefined;
141
+ }>;
142
+ export type StarCommand = z.infer<typeof StarCommandSchema>;
143
+ export declare const CommandsFileSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
144
+ /** Description of what this command does */
145
+ description: z.ZodOptional<z.ZodString>;
146
+ /** Rules injected when this command is invoked */
147
+ rules: z.ZodArray<z.ZodString, "many">;
148
+ }, "strip", z.ZodTypeAny, {
149
+ rules: string[];
150
+ description?: string | undefined;
151
+ }, {
152
+ rules: string[];
153
+ description?: string | undefined;
154
+ }>>;
155
+ export type CommandsFile = z.infer<typeof CommandsFileSchema>;
156
+ export declare const ContextBracketSchema: z.ZodObject<{
157
+ /** Whether this bracket is enabled */
158
+ enabled: z.ZodDefault<z.ZodBoolean>;
159
+ /** Rules injected when this bracket is active */
160
+ rules: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
161
+ }, "strip", z.ZodTypeAny, {
162
+ rules: string[];
163
+ enabled: boolean;
164
+ }, {
165
+ rules?: string[] | undefined;
166
+ enabled?: boolean | undefined;
167
+ }>;
168
+ export type ContextBracket = z.infer<typeof ContextBracketSchema>;
169
+ export declare const TrimmingConfigSchema: z.ZodObject<{
170
+ /** Whether tool output trimming is enabled */
171
+ enabled: z.ZodDefault<z.ZodBoolean>;
172
+ /**
173
+ * Trimming aggressiveness mode:
174
+ * - conservative: only trims very stale/superseded outputs (threshold=20)
175
+ * - moderate: good balance of savings vs safety (threshold=40)
176
+ * - aggressive: trims most things beyond preserveLastN (threshold=60)
177
+ */
178
+ mode: z.ZodDefault<z.ZodEnum<["conservative", "moderate", "aggressive"]>>;
179
+ /** Hard floor: never trim tool outputs in the last N messages */
180
+ preserveLastN: z.ZodDefault<z.ZodNumber>;
181
+ }, "strip", z.ZodTypeAny, {
182
+ enabled: boolean;
183
+ mode: "conservative" | "moderate" | "aggressive";
184
+ preserveLastN: number;
185
+ }, {
186
+ enabled?: boolean | undefined;
187
+ mode?: "conservative" | "moderate" | "aggressive" | undefined;
188
+ preserveLastN?: number | undefined;
189
+ }>;
190
+ export type TrimmingConfig = z.infer<typeof TrimmingConfigSchema>;
191
+ export declare const StatsConfigSchema: z.ZodObject<{
192
+ /**
193
+ * Duration to track stats:
194
+ * - "all": All sessions (default)
195
+ * - "month": Only sessions from last 30 days
196
+ * - "week": Only sessions from last 7 days
197
+ */
198
+ trackDuration: z.ZodDefault<z.ZodEnum<["all", "month", "week"]>>;
199
+ }, "strip", z.ZodTypeAny, {
200
+ trackDuration: "all" | "month" | "week";
201
+ }, {
202
+ trackDuration?: "all" | "month" | "week" | undefined;
203
+ }>;
204
+ export type StatsConfig = z.infer<typeof StatsConfigSchema>;
205
+ /** Map trimming mode to score threshold */
206
+ export declare const TRIM_THRESHOLDS: Record<string, number>;
207
+ export declare const ContextFileSchema: z.ZodObject<{
208
+ /** Prompt count thresholds for bracket transitions */
209
+ thresholds: z.ZodDefault<z.ZodObject<{
210
+ moderate: z.ZodDefault<z.ZodNumber>;
211
+ depleted: z.ZodDefault<z.ZodNumber>;
212
+ critical: z.ZodDefault<z.ZodNumber>;
213
+ }, "strip", z.ZodTypeAny, {
214
+ moderate: number;
215
+ depleted: number;
216
+ critical: number;
217
+ }, {
218
+ moderate?: number | undefined;
219
+ depleted?: number | undefined;
220
+ critical?: number | undefined;
221
+ }>>;
222
+ /** Bracket definitions */
223
+ brackets: z.ZodDefault<z.ZodObject<{
224
+ fresh: z.ZodDefault<z.ZodObject<{
225
+ /** Whether this bracket is enabled */
226
+ enabled: z.ZodDefault<z.ZodBoolean>;
227
+ /** Rules injected when this bracket is active */
228
+ rules: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
229
+ }, "strip", z.ZodTypeAny, {
230
+ rules: string[];
231
+ enabled: boolean;
232
+ }, {
233
+ rules?: string[] | undefined;
234
+ enabled?: boolean | undefined;
235
+ }>>;
236
+ moderate: z.ZodDefault<z.ZodObject<{
237
+ /** Whether this bracket is enabled */
238
+ enabled: z.ZodDefault<z.ZodBoolean>;
239
+ /** Rules injected when this bracket is active */
240
+ rules: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
241
+ }, "strip", z.ZodTypeAny, {
242
+ rules: string[];
243
+ enabled: boolean;
244
+ }, {
245
+ rules?: string[] | undefined;
246
+ enabled?: boolean | undefined;
247
+ }>>;
248
+ depleted: z.ZodDefault<z.ZodObject<{
249
+ /** Whether this bracket is enabled */
250
+ enabled: z.ZodDefault<z.ZodBoolean>;
251
+ /** Rules injected when this bracket is active */
252
+ rules: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
253
+ }, "strip", z.ZodTypeAny, {
254
+ rules: string[];
255
+ enabled: boolean;
256
+ }, {
257
+ rules?: string[] | undefined;
258
+ enabled?: boolean | undefined;
259
+ }>>;
260
+ }, "strip", z.ZodTypeAny, {
261
+ moderate: {
262
+ rules: string[];
263
+ enabled: boolean;
264
+ };
265
+ depleted: {
266
+ rules: string[];
267
+ enabled: boolean;
268
+ };
269
+ fresh: {
270
+ rules: string[];
271
+ enabled: boolean;
272
+ };
273
+ }, {
274
+ moderate?: {
275
+ rules?: string[] | undefined;
276
+ enabled?: boolean | undefined;
277
+ } | undefined;
278
+ depleted?: {
279
+ rules?: string[] | undefined;
280
+ enabled?: boolean | undefined;
281
+ } | undefined;
282
+ fresh?: {
283
+ rules?: string[] | undefined;
284
+ enabled?: boolean | undefined;
285
+ } | undefined;
286
+ }>>;
287
+ /** Smart tool output trimming configuration */
288
+ trimming: z.ZodDefault<z.ZodObject<{
289
+ /** Whether tool output trimming is enabled */
290
+ enabled: z.ZodDefault<z.ZodBoolean>;
291
+ /**
292
+ * Trimming aggressiveness mode:
293
+ * - conservative: only trims very stale/superseded outputs (threshold=20)
294
+ * - moderate: good balance of savings vs safety (threshold=40)
295
+ * - aggressive: trims most things beyond preserveLastN (threshold=60)
296
+ */
297
+ mode: z.ZodDefault<z.ZodEnum<["conservative", "moderate", "aggressive"]>>;
298
+ /** Hard floor: never trim tool outputs in the last N messages */
299
+ preserveLastN: z.ZodDefault<z.ZodNumber>;
300
+ }, "strip", z.ZodTypeAny, {
301
+ enabled: boolean;
302
+ mode: "conservative" | "moderate" | "aggressive";
303
+ preserveLastN: number;
304
+ }, {
305
+ enabled?: boolean | undefined;
306
+ mode?: "conservative" | "moderate" | "aggressive" | undefined;
307
+ preserveLastN?: number | undefined;
308
+ }>>;
309
+ /** Token stats tracking configuration */
310
+ stats: z.ZodDefault<z.ZodObject<{
311
+ /**
312
+ * Duration to track stats:
313
+ * - "all": All sessions (default)
314
+ * - "month": Only sessions from last 30 days
315
+ * - "week": Only sessions from last 7 days
316
+ */
317
+ trackDuration: z.ZodDefault<z.ZodEnum<["all", "month", "week"]>>;
318
+ }, "strip", z.ZodTypeAny, {
319
+ trackDuration: "all" | "month" | "week";
320
+ }, {
321
+ trackDuration?: "all" | "month" | "week" | undefined;
322
+ }>>;
323
+ }, "strip", z.ZodTypeAny, {
324
+ thresholds: {
325
+ moderate: number;
326
+ depleted: number;
327
+ critical: number;
328
+ };
329
+ brackets: {
330
+ moderate: {
331
+ rules: string[];
332
+ enabled: boolean;
333
+ };
334
+ depleted: {
335
+ rules: string[];
336
+ enabled: boolean;
337
+ };
338
+ fresh: {
339
+ rules: string[];
340
+ enabled: boolean;
341
+ };
342
+ };
343
+ trimming: {
344
+ enabled: boolean;
345
+ mode: "conservative" | "moderate" | "aggressive";
346
+ preserveLastN: number;
347
+ };
348
+ stats: {
349
+ trackDuration: "all" | "month" | "week";
350
+ };
351
+ }, {
352
+ thresholds?: {
353
+ moderate?: number | undefined;
354
+ depleted?: number | undefined;
355
+ critical?: number | undefined;
356
+ } | undefined;
357
+ brackets?: {
358
+ moderate?: {
359
+ rules?: string[] | undefined;
360
+ enabled?: boolean | undefined;
361
+ } | undefined;
362
+ depleted?: {
363
+ rules?: string[] | undefined;
364
+ enabled?: boolean | undefined;
365
+ } | undefined;
366
+ fresh?: {
367
+ rules?: string[] | undefined;
368
+ enabled?: boolean | undefined;
369
+ } | undefined;
370
+ } | undefined;
371
+ trimming?: {
372
+ enabled?: boolean | undefined;
373
+ mode?: "conservative" | "moderate" | "aggressive" | undefined;
374
+ preserveLastN?: number | undefined;
375
+ } | undefined;
376
+ stats?: {
377
+ trackDuration?: "all" | "month" | "week" | undefined;
378
+ } | undefined;
379
+ }>;
380
+ export type ContextFile = z.infer<typeof ContextFileSchema>;
381
+ export declare const TokenStatsSchema: z.ZodObject<{
382
+ /** Total tokens saved by selective rule injection (all rules minus loaded rules) */
383
+ tokensSkippedBySelection: z.ZodDefault<z.ZodNumber>;
384
+ /** Total tokens of rules actually injected into the system prompt */
385
+ tokensInjected: z.ZodDefault<z.ZodNumber>;
386
+ /** Total tokens trimmed from conversation history (tool outputs) */
387
+ tokensTrimmedFromHistory: z.ZodDefault<z.ZodNumber>;
388
+ /** Total tokens trimmed from stale <carly-rules> blocks in history */
389
+ tokensTrimmedCarlyBlocks: z.ZodDefault<z.ZodNumber>;
390
+ /** Number of prompts processed */
391
+ promptsProcessed: z.ZodDefault<z.ZodNumber>;
392
+ /** Number of rules injected across all prompts */
393
+ rulesInjected: z.ZodDefault<z.ZodNumber>;
394
+ /** Baseline: tokens that would be used if all rules loaded every prompt */
395
+ baselineTokensPerPrompt: z.ZodDefault<z.ZodNumber>;
396
+ }, "strip", z.ZodTypeAny, {
397
+ tokensSkippedBySelection: number;
398
+ tokensInjected: number;
399
+ tokensTrimmedFromHistory: number;
400
+ tokensTrimmedCarlyBlocks: number;
401
+ promptsProcessed: number;
402
+ rulesInjected: number;
403
+ baselineTokensPerPrompt: number;
404
+ }, {
405
+ tokensSkippedBySelection?: number | undefined;
406
+ tokensInjected?: number | undefined;
407
+ tokensTrimmedFromHistory?: number | undefined;
408
+ tokensTrimmedCarlyBlocks?: number | undefined;
409
+ promptsProcessed?: number | undefined;
410
+ rulesInjected?: number | undefined;
411
+ baselineTokensPerPrompt?: number | undefined;
412
+ }>;
413
+ export type TokenStats = z.infer<typeof TokenStatsSchema>;
414
+ export declare const CumulativeSessionSummarySchema: z.ZodObject<{
415
+ sessionId: z.ZodString;
416
+ date: z.ZodString;
417
+ tokensSaved: z.ZodNumber;
418
+ promptsProcessed: z.ZodNumber;
419
+ tokensSkippedBySelection: z.ZodDefault<z.ZodNumber>;
420
+ tokensTrimmedFromHistory: z.ZodDefault<z.ZodNumber>;
421
+ tokensTrimmedCarlyBlocks: z.ZodDefault<z.ZodNumber>;
422
+ tokensInjected: z.ZodDefault<z.ZodNumber>;
423
+ rulesInjected: z.ZodDefault<z.ZodNumber>;
424
+ }, "strip", z.ZodTypeAny, {
425
+ date: string;
426
+ tokensSkippedBySelection: number;
427
+ tokensInjected: number;
428
+ tokensTrimmedFromHistory: number;
429
+ tokensTrimmedCarlyBlocks: number;
430
+ promptsProcessed: number;
431
+ rulesInjected: number;
432
+ sessionId: string;
433
+ tokensSaved: number;
434
+ }, {
435
+ date: string;
436
+ promptsProcessed: number;
437
+ sessionId: string;
438
+ tokensSaved: number;
439
+ tokensSkippedBySelection?: number | undefined;
440
+ tokensInjected?: number | undefined;
441
+ tokensTrimmedFromHistory?: number | undefined;
442
+ tokensTrimmedCarlyBlocks?: number | undefined;
443
+ rulesInjected?: number | undefined;
444
+ }>;
445
+ export type CumulativeSessionSummary = z.infer<typeof CumulativeSessionSummarySchema>;
446
+ export declare const CumulativeStatsSchema: z.ZodObject<{
447
+ version: z.ZodDefault<z.ZodNumber>;
448
+ cumulative: z.ZodDefault<z.ZodObject<{
449
+ tokensSkippedBySelection: z.ZodDefault<z.ZodNumber>;
450
+ tokensInjected: z.ZodDefault<z.ZodNumber>;
451
+ tokensTrimmedFromHistory: z.ZodDefault<z.ZodNumber>;
452
+ tokensTrimmedCarlyBlocks: z.ZodDefault<z.ZodNumber>;
453
+ totalTokensSaved: z.ZodDefault<z.ZodNumber>;
454
+ }, "strip", z.ZodTypeAny, {
455
+ tokensSkippedBySelection: number;
456
+ tokensInjected: number;
457
+ tokensTrimmedFromHistory: number;
458
+ tokensTrimmedCarlyBlocks: number;
459
+ totalTokensSaved: number;
460
+ }, {
461
+ tokensSkippedBySelection?: number | undefined;
462
+ tokensInjected?: number | undefined;
463
+ tokensTrimmedFromHistory?: number | undefined;
464
+ tokensTrimmedCarlyBlocks?: number | undefined;
465
+ totalTokensSaved?: number | undefined;
466
+ }>>;
467
+ sessions: z.ZodDefault<z.ZodArray<z.ZodObject<{
468
+ sessionId: z.ZodString;
469
+ date: z.ZodString;
470
+ tokensSaved: z.ZodNumber;
471
+ promptsProcessed: z.ZodNumber;
472
+ tokensSkippedBySelection: z.ZodDefault<z.ZodNumber>;
473
+ tokensTrimmedFromHistory: z.ZodDefault<z.ZodNumber>;
474
+ tokensTrimmedCarlyBlocks: z.ZodDefault<z.ZodNumber>;
475
+ tokensInjected: z.ZodDefault<z.ZodNumber>;
476
+ rulesInjected: z.ZodDefault<z.ZodNumber>;
477
+ }, "strip", z.ZodTypeAny, {
478
+ date: string;
479
+ tokensSkippedBySelection: number;
480
+ tokensInjected: number;
481
+ tokensTrimmedFromHistory: number;
482
+ tokensTrimmedCarlyBlocks: number;
483
+ promptsProcessed: number;
484
+ rulesInjected: number;
485
+ sessionId: string;
486
+ tokensSaved: number;
487
+ }, {
488
+ date: string;
489
+ promptsProcessed: number;
490
+ sessionId: string;
491
+ tokensSaved: number;
492
+ tokensSkippedBySelection?: number | undefined;
493
+ tokensInjected?: number | undefined;
494
+ tokensTrimmedFromHistory?: number | undefined;
495
+ tokensTrimmedCarlyBlocks?: number | undefined;
496
+ rulesInjected?: number | undefined;
497
+ }>, "many">>;
498
+ }, "strip", z.ZodTypeAny, {
499
+ version: number;
500
+ cumulative: {
501
+ tokensSkippedBySelection: number;
502
+ tokensInjected: number;
503
+ tokensTrimmedFromHistory: number;
504
+ tokensTrimmedCarlyBlocks: number;
505
+ totalTokensSaved: number;
506
+ };
507
+ sessions: {
508
+ date: string;
509
+ tokensSkippedBySelection: number;
510
+ tokensInjected: number;
511
+ tokensTrimmedFromHistory: number;
512
+ tokensTrimmedCarlyBlocks: number;
513
+ promptsProcessed: number;
514
+ rulesInjected: number;
515
+ sessionId: string;
516
+ tokensSaved: number;
517
+ }[];
518
+ }, {
519
+ version?: number | undefined;
520
+ cumulative?: {
521
+ tokensSkippedBySelection?: number | undefined;
522
+ tokensInjected?: number | undefined;
523
+ tokensTrimmedFromHistory?: number | undefined;
524
+ tokensTrimmedCarlyBlocks?: number | undefined;
525
+ totalTokensSaved?: number | undefined;
526
+ } | undefined;
527
+ sessions?: {
528
+ date: string;
529
+ promptsProcessed: number;
530
+ sessionId: string;
531
+ tokensSaved: number;
532
+ tokensSkippedBySelection?: number | undefined;
533
+ tokensInjected?: number | undefined;
534
+ tokensTrimmedFromHistory?: number | undefined;
535
+ tokensTrimmedCarlyBlocks?: number | undefined;
536
+ rulesInjected?: number | undefined;
537
+ }[] | undefined;
538
+ }>;
539
+ export type CumulativeStats = z.infer<typeof CumulativeStatsSchema>;
540
+ export declare const SessionOverrideSchema: z.ZodObject<{
541
+ /** Override DEVMODE for this session (null = inherit from manifest) */
542
+ devmode: z.ZodDefault<z.ZodNullable<z.ZodBoolean>>;
543
+ /** Per-domain state overrides (null = inherit from manifest) */
544
+ domainStates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodBoolean>>>;
545
+ }, "strip", z.ZodTypeAny, {
546
+ devmode: boolean | null;
547
+ domainStates: Record<string, boolean | null>;
548
+ }, {
549
+ devmode?: boolean | null | undefined;
550
+ domainStates?: Record<string, boolean | null> | undefined;
551
+ }>;
552
+ export type SessionOverride = z.infer<typeof SessionOverrideSchema>;
553
+ export declare const SessionConfigSchema: z.ZodObject<{
554
+ /** Session ID from OpenCode */
555
+ id: z.ZodString;
556
+ /** ISO timestamp when session was created */
557
+ started: z.ZodString;
558
+ /** Working directory for this session */
559
+ cwd: z.ZodString;
560
+ /** Short label derived from cwd (project directory name) */
561
+ label: z.ZodString;
562
+ /** User-editable session title (auto-generated from first prompt) */
563
+ title: z.ZodDefault<z.ZodNullable<z.ZodString>>;
564
+ /** Number of prompts processed in this session */
565
+ promptCount: z.ZodDefault<z.ZodNumber>;
566
+ /** ISO timestamp of last activity */
567
+ lastActivity: z.ZodString;
568
+ /** Files recently read or edited by tools in this session */
569
+ activeFiles: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
570
+ /** Session-specific overrides */
571
+ overrides: z.ZodDefault<z.ZodObject<{
572
+ /** Override DEVMODE for this session (null = inherit from manifest) */
573
+ devmode: z.ZodDefault<z.ZodNullable<z.ZodBoolean>>;
574
+ /** Per-domain state overrides (null = inherit from manifest) */
575
+ domainStates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodBoolean>>>;
576
+ }, "strip", z.ZodTypeAny, {
577
+ devmode: boolean | null;
578
+ domainStates: Record<string, boolean | null>;
579
+ }, {
580
+ devmode?: boolean | null | undefined;
581
+ domainStates?: Record<string, boolean | null> | undefined;
582
+ }>>;
583
+ /** Cumulative token savings stats for this session */
584
+ tokenStats: z.ZodDefault<z.ZodObject<{
585
+ /** Total tokens saved by selective rule injection (all rules minus loaded rules) */
586
+ tokensSkippedBySelection: z.ZodDefault<z.ZodNumber>;
587
+ /** Total tokens of rules actually injected into the system prompt */
588
+ tokensInjected: z.ZodDefault<z.ZodNumber>;
589
+ /** Total tokens trimmed from conversation history (tool outputs) */
590
+ tokensTrimmedFromHistory: z.ZodDefault<z.ZodNumber>;
591
+ /** Total tokens trimmed from stale <carly-rules> blocks in history */
592
+ tokensTrimmedCarlyBlocks: z.ZodDefault<z.ZodNumber>;
593
+ /** Number of prompts processed */
594
+ promptsProcessed: z.ZodDefault<z.ZodNumber>;
595
+ /** Number of rules injected across all prompts */
596
+ rulesInjected: z.ZodDefault<z.ZodNumber>;
597
+ /** Baseline: tokens that would be used if all rules loaded every prompt */
598
+ baselineTokensPerPrompt: z.ZodDefault<z.ZodNumber>;
599
+ }, "strip", z.ZodTypeAny, {
600
+ tokensSkippedBySelection: number;
601
+ tokensInjected: number;
602
+ tokensTrimmedFromHistory: number;
603
+ tokensTrimmedCarlyBlocks: number;
604
+ promptsProcessed: number;
605
+ rulesInjected: number;
606
+ baselineTokensPerPrompt: number;
607
+ }, {
608
+ tokensSkippedBySelection?: number | undefined;
609
+ tokensInjected?: number | undefined;
610
+ tokensTrimmedFromHistory?: number | undefined;
611
+ tokensTrimmedCarlyBlocks?: number | undefined;
612
+ promptsProcessed?: number | undefined;
613
+ rulesInjected?: number | undefined;
614
+ baselineTokensPerPrompt?: number | undefined;
615
+ }>>;
616
+ }, "strip", z.ZodTypeAny, {
617
+ id: string;
618
+ started: string;
619
+ cwd: string;
620
+ label: string;
621
+ title: string | null;
622
+ promptCount: number;
623
+ lastActivity: string;
624
+ activeFiles: string[];
625
+ overrides: {
626
+ devmode: boolean | null;
627
+ domainStates: Record<string, boolean | null>;
628
+ };
629
+ tokenStats: {
630
+ tokensSkippedBySelection: number;
631
+ tokensInjected: number;
632
+ tokensTrimmedFromHistory: number;
633
+ tokensTrimmedCarlyBlocks: number;
634
+ promptsProcessed: number;
635
+ rulesInjected: number;
636
+ baselineTokensPerPrompt: number;
637
+ };
638
+ }, {
639
+ id: string;
640
+ started: string;
641
+ cwd: string;
642
+ label: string;
643
+ lastActivity: string;
644
+ title?: string | null | undefined;
645
+ promptCount?: number | undefined;
646
+ activeFiles?: string[] | undefined;
647
+ overrides?: {
648
+ devmode?: boolean | null | undefined;
649
+ domainStates?: Record<string, boolean | null> | undefined;
650
+ } | undefined;
651
+ tokenStats?: {
652
+ tokensSkippedBySelection?: number | undefined;
653
+ tokensInjected?: number | undefined;
654
+ tokensTrimmedFromHistory?: number | undefined;
655
+ tokensTrimmedCarlyBlocks?: number | undefined;
656
+ promptsProcessed?: number | undefined;
657
+ rulesInjected?: number | undefined;
658
+ baselineTokensPerPrompt?: number | undefined;
659
+ } | undefined;
660
+ }>;
661
+ export type SessionConfig = z.infer<typeof SessionConfigSchema>;
662
+ export type BracketName = "FRESH" | "MODERATE" | "DEPLETED" | "CRITICAL";
663
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}