context-lens 0.3.2 → 0.4.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 (126) hide show
  1. package/README.md +52 -16
  2. package/dist/analysis/ingest.d.ts +13 -0
  3. package/dist/analysis/ingest.d.ts.map +1 -0
  4. package/dist/analysis/ingest.js +75 -0
  5. package/dist/analysis/ingest.js.map +1 -0
  6. package/dist/analysis/server.d.ts +10 -0
  7. package/dist/analysis/server.d.ts.map +1 -0
  8. package/dist/analysis/server.js +95 -0
  9. package/dist/analysis/server.js.map +1 -0
  10. package/dist/analysis/watcher.d.ts +55 -0
  11. package/dist/analysis/watcher.d.ts.map +1 -0
  12. package/dist/analysis/watcher.js +170 -0
  13. package/dist/analysis/watcher.js.map +1 -0
  14. package/dist/cli-utils.d.ts +16 -0
  15. package/dist/cli-utils.d.ts.map +1 -1
  16. package/dist/cli-utils.js +185 -3
  17. package/dist/cli-utils.js.map +1 -1
  18. package/dist/cli.js +629 -88
  19. package/dist/cli.js.map +1 -1
  20. package/dist/core/conversation.d.ts +8 -1
  21. package/dist/core/conversation.d.ts.map +1 -1
  22. package/dist/core/conversation.js +38 -12
  23. package/dist/core/conversation.js.map +1 -1
  24. package/dist/core/parse.d.ts.map +1 -1
  25. package/dist/core/parse.js +17 -1
  26. package/dist/core/parse.js.map +1 -1
  27. package/dist/core/session-analysis.d.ts +100 -0
  28. package/dist/core/session-analysis.d.ts.map +1 -0
  29. package/dist/core/session-analysis.js +435 -0
  30. package/dist/core/session-analysis.js.map +1 -0
  31. package/dist/core/session-format.d.ts +20 -0
  32. package/dist/core/session-format.d.ts.map +1 -0
  33. package/dist/core/session-format.js +298 -0
  34. package/dist/core/session-format.js.map +1 -0
  35. package/dist/core.d.ts +4 -0
  36. package/dist/core.d.ts.map +1 -1
  37. package/dist/core.js +2 -0
  38. package/dist/core.js.map +1 -1
  39. package/dist/lhar/reader.d.ts +22 -0
  40. package/dist/lhar/reader.d.ts.map +1 -0
  41. package/dist/lhar/reader.js +43 -0
  42. package/dist/lhar/reader.js.map +1 -0
  43. package/dist/lhar/record.d.ts.map +1 -1
  44. package/dist/lhar/record.js +3 -0
  45. package/dist/lhar/record.js.map +1 -1
  46. package/dist/lhar/response.d.ts +8 -0
  47. package/dist/lhar/response.d.ts.map +1 -1
  48. package/dist/lhar/response.js +44 -0
  49. package/dist/lhar/response.js.map +1 -1
  50. package/dist/lhar/tools.d.ts +17 -0
  51. package/dist/lhar/tools.d.ts.map +1 -0
  52. package/dist/lhar/tools.js +48 -0
  53. package/dist/lhar/tools.js.map +1 -0
  54. package/dist/lhar-types.generated.d.ts +34 -0
  55. package/dist/lhar-types.generated.d.ts.map +1 -1
  56. package/dist/lhar.d.ts +4 -1
  57. package/dist/lhar.d.ts.map +1 -1
  58. package/dist/lhar.js +5 -1
  59. package/dist/lhar.js.map +1 -1
  60. package/dist/proxy/capture.d.ts +40 -0
  61. package/dist/proxy/capture.d.ts.map +1 -0
  62. package/dist/proxy/capture.js +56 -0
  63. package/dist/proxy/capture.js.map +1 -0
  64. package/dist/proxy/config.d.ts +16 -0
  65. package/dist/proxy/config.d.ts.map +1 -0
  66. package/dist/proxy/config.js +34 -0
  67. package/dist/proxy/config.js.map +1 -0
  68. package/dist/proxy/forward.d.ts +20 -0
  69. package/dist/proxy/forward.d.ts.map +1 -0
  70. package/dist/proxy/forward.js +210 -0
  71. package/dist/proxy/forward.js.map +1 -0
  72. package/dist/proxy/headers.d.ts +16 -0
  73. package/dist/proxy/headers.d.ts.map +1 -0
  74. package/dist/proxy/headers.js +37 -0
  75. package/dist/proxy/headers.js.map +1 -0
  76. package/dist/proxy/routing.d.ts +44 -0
  77. package/dist/proxy/routing.d.ts.map +1 -0
  78. package/dist/proxy/routing.js +114 -0
  79. package/dist/proxy/routing.js.map +1 -0
  80. package/dist/proxy/server.d.ts +27 -0
  81. package/dist/proxy/server.d.ts.map +1 -0
  82. package/dist/proxy/server.js +55 -0
  83. package/dist/proxy/server.js.map +1 -0
  84. package/dist/schemas.d.ts +328 -0
  85. package/dist/schemas.d.ts.map +1 -0
  86. package/dist/schemas.js +249 -0
  87. package/dist/schemas.js.map +1 -0
  88. package/dist/server/api.d.ts +3 -4
  89. package/dist/server/api.d.ts.map +1 -1
  90. package/dist/server/api.js +195 -220
  91. package/dist/server/api.js.map +1 -1
  92. package/dist/server/store.d.ts +23 -7
  93. package/dist/server/store.d.ts.map +1 -1
  94. package/dist/server/store.js +141 -50
  95. package/dist/server/store.js.map +1 -1
  96. package/dist/server/webui.d.ts +5 -2
  97. package/dist/server/webui.d.ts.map +1 -1
  98. package/dist/server/webui.js +32 -13
  99. package/dist/server/webui.js.map +1 -1
  100. package/dist/server-utils.d.ts +1 -2
  101. package/dist/server-utils.d.ts.map +1 -1
  102. package/dist/server-utils.js +0 -2
  103. package/dist/server-utils.js.map +1 -1
  104. package/dist/types.d.ts +1 -1
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/version.generated.d.ts +1 -1
  107. package/dist/version.generated.js +1 -1
  108. package/mitm_addon.py +99 -28
  109. package/package.json +12 -5
  110. package/schema/lhar.schema.json +50 -0
  111. package/dist/server/config.d.ts +0 -13
  112. package/dist/server/config.d.ts.map +0 -1
  113. package/dist/server/config.js +0 -36
  114. package/dist/server/config.js.map +0 -1
  115. package/dist/server/proxy.d.ts +0 -13
  116. package/dist/server/proxy.d.ts.map +0 -1
  117. package/dist/server/proxy.js +0 -218
  118. package/dist/server/proxy.js.map +0 -1
  119. package/dist/server/static.d.ts +0 -9
  120. package/dist/server/static.d.ts.map +0 -1
  121. package/dist/server/static.js +0 -78
  122. package/dist/server/static.js.map +0 -1
  123. package/dist/server.d.ts +0 -3
  124. package/dist/server.d.ts.map +0 -1
  125. package/dist/server.js +0 -43
  126. package/dist/server.js.map +0 -1
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Valibot schemas for runtime validation of persisted and ingested data.
3
+ *
4
+ * These schemas validate data at trust boundaries:
5
+ * - State file (state.jsonl) loaded from disk
6
+ * - Ingest API (POST /api/ingest) from mitmproxy addon
7
+ * - Capture files from the proxy
8
+ *
9
+ * The TypeScript interfaces in types.ts remain the source of truth for
10
+ * in-memory types. These schemas validate external data before it enters
11
+ * the system.
12
+ */
13
+ import * as v from "valibot";
14
+ // ---------------------------------------------------------------------------
15
+ // Composition
16
+ // ---------------------------------------------------------------------------
17
+ const CompositionCategorySchema = v.picklist([
18
+ "system_prompt",
19
+ "tool_definitions",
20
+ "tool_results",
21
+ "tool_calls",
22
+ "assistant_text",
23
+ "user_text",
24
+ "thinking",
25
+ "system_injections",
26
+ "images",
27
+ "cache_markers",
28
+ "other",
29
+ ]);
30
+ const CompositionEntrySchema = v.object({
31
+ category: CompositionCategorySchema,
32
+ tokens: v.number(),
33
+ pct: v.number(),
34
+ count: v.number(),
35
+ });
36
+ // ---------------------------------------------------------------------------
37
+ // Content blocks (persisted in compacted form)
38
+ // ---------------------------------------------------------------------------
39
+ const TextBlockSchema = v.object({
40
+ type: v.literal("text"),
41
+ text: v.string(),
42
+ });
43
+ const ToolUseBlockSchema = v.object({
44
+ type: v.literal("tool_use"),
45
+ id: v.string(),
46
+ name: v.string(),
47
+ input: v.record(v.string(), v.unknown()),
48
+ });
49
+ // Content blocks can nest recursively (tool_result contains content blocks).
50
+ // Use a fallback schema for the nested array to avoid circular inference issues.
51
+ const NestedBlockSchema = v.looseObject({ type: v.string() });
52
+ const ToolResultBlockSchema = v.object({
53
+ type: v.literal("tool_result"),
54
+ tool_use_id: v.string(),
55
+ content: v.union([v.string(), v.array(NestedBlockSchema)]),
56
+ });
57
+ const ImageBlockSchema = v.object({
58
+ type: v.literal("image"),
59
+ });
60
+ const InputTextBlockSchema = v.object({
61
+ type: v.literal("input_text"),
62
+ text: v.string(),
63
+ });
64
+ // Thinking blocks are stored with a non-standard shape (type + thinking field).
65
+ // Accept any object with a type field as a fallback for forward compatibility.
66
+ const FallbackBlockSchema = v.looseObject({
67
+ type: v.string(),
68
+ });
69
+ const ContentBlockSchema = v.union([
70
+ TextBlockSchema,
71
+ ToolUseBlockSchema,
72
+ ToolResultBlockSchema,
73
+ ImageBlockSchema,
74
+ InputTextBlockSchema,
75
+ FallbackBlockSchema,
76
+ ]);
77
+ // ---------------------------------------------------------------------------
78
+ // Messages and context info (as persisted in state)
79
+ // ---------------------------------------------------------------------------
80
+ const ParsedMessageSchema = v.object({
81
+ role: v.string(),
82
+ content: v.string(),
83
+ contentBlocks: v.optional(v.nullable(v.array(ContentBlockSchema))),
84
+ tokens: v.number(),
85
+ });
86
+ const SystemPromptSchema = v.object({
87
+ content: v.string(),
88
+ });
89
+ const ContextInfoSchema = v.object({
90
+ provider: v.string(),
91
+ apiFormat: v.string(),
92
+ model: v.string(),
93
+ systemTokens: v.number(),
94
+ toolsTokens: v.number(),
95
+ messagesTokens: v.number(),
96
+ totalTokens: v.number(),
97
+ systemPrompts: v.array(SystemPromptSchema),
98
+ tools: v.array(v.unknown()),
99
+ messages: v.array(ParsedMessageSchema),
100
+ });
101
+ // ---------------------------------------------------------------------------
102
+ // Health scoring
103
+ // ---------------------------------------------------------------------------
104
+ const AuditResultSchema = v.object({
105
+ id: v.string(),
106
+ name: v.string(),
107
+ score: v.number(),
108
+ weight: v.number(),
109
+ description: v.string(),
110
+ });
111
+ const HealthScoreSchema = v.object({
112
+ overall: v.number(),
113
+ rating: v.picklist(["good", "needs-work", "poor"]),
114
+ audits: v.array(AuditResultSchema),
115
+ });
116
+ // ---------------------------------------------------------------------------
117
+ // Security alerts
118
+ // ---------------------------------------------------------------------------
119
+ const SecurityAlertSchema = v.object({
120
+ messageIndex: v.number(),
121
+ role: v.string(),
122
+ toolName: v.nullable(v.string()),
123
+ severity: v.picklist(["high", "medium", "info"]),
124
+ pattern: v.string(),
125
+ match: v.string(),
126
+ offset: v.number(),
127
+ length: v.number(),
128
+ });
129
+ // ---------------------------------------------------------------------------
130
+ // Timings
131
+ // ---------------------------------------------------------------------------
132
+ const TimingsSchema = v.object({
133
+ send_ms: v.number(),
134
+ wait_ms: v.number(),
135
+ receive_ms: v.number(),
136
+ total_ms: v.number(),
137
+ tokens_per_second: v.nullable(v.number()),
138
+ });
139
+ // ---------------------------------------------------------------------------
140
+ // Usage (projected form stored in compacted response)
141
+ // ---------------------------------------------------------------------------
142
+ const ProjectedUsageSchema = v.object({
143
+ inputTokens: v.number(),
144
+ outputTokens: v.number(),
145
+ cacheReadTokens: v.number(),
146
+ cacheWriteTokens: v.number(),
147
+ });
148
+ // ---------------------------------------------------------------------------
149
+ // State file line schemas
150
+ // ---------------------------------------------------------------------------
151
+ export const ConversationLineSchema = v.object({
152
+ type: v.literal("conversation"),
153
+ data: v.object({
154
+ id: v.string(),
155
+ label: v.string(),
156
+ source: v.string(),
157
+ workingDirectory: v.nullable(v.string()),
158
+ firstSeen: v.string(),
159
+ sessionId: v.optional(v.nullable(v.string())),
160
+ }),
161
+ });
162
+ /**
163
+ * Schema for an entry line in state.jsonl.
164
+ *
165
+ * Uses looseObject for `response` because the compacted response shape
166
+ * varies (streaming chunks, raw markers, parsed usage objects). We only
167
+ * need the usage fields to survive; the rest is best-effort.
168
+ */
169
+ export const EntryLineSchema = v.object({
170
+ type: v.literal("entry"),
171
+ data: v.object({
172
+ id: v.number(),
173
+ timestamp: v.string(),
174
+ contextInfo: ContextInfoSchema,
175
+ response: v.unknown(),
176
+ contextLimit: v.number(),
177
+ source: v.string(),
178
+ conversationId: v.nullable(v.string()),
179
+ agentKey: v.nullable(v.string()),
180
+ agentLabel: v.string(),
181
+ httpStatus: v.nullable(v.number()),
182
+ timings: v.nullable(TimingsSchema),
183
+ requestBytes: v.number(),
184
+ responseBytes: v.number(),
185
+ targetUrl: v.nullable(v.string()),
186
+ composition: v.array(CompositionEntrySchema),
187
+ costUsd: v.nullable(v.number()),
188
+ healthScore: v.nullable(HealthScoreSchema),
189
+ securityAlerts: v.optional(v.array(SecurityAlertSchema)),
190
+ usage: v.optional(v.nullable(ProjectedUsageSchema)),
191
+ responseModel: v.optional(v.nullable(v.string())),
192
+ stopReason: v.optional(v.nullable(v.string())),
193
+ }),
194
+ });
195
+ /**
196
+ * A single line in state.jsonl is either a conversation or an entry.
197
+ */
198
+ export const StateLineSchema = v.variant("type", [
199
+ ConversationLineSchema,
200
+ EntryLineSchema,
201
+ ]);
202
+ // ---------------------------------------------------------------------------
203
+ // Ingest API (POST /api/ingest)
204
+ // ---------------------------------------------------------------------------
205
+ /**
206
+ * Legacy ingest format (provider + body + response).
207
+ */
208
+ export const IngestLegacyPayloadSchema = v.object({
209
+ provider: v.optional(v.string(), "unknown"),
210
+ apiFormat: v.optional(v.string(), "unknown"),
211
+ source: v.optional(v.string(), "unknown"),
212
+ body: v.optional(v.record(v.string(), v.unknown()), {}),
213
+ response: v.optional(v.record(v.string(), v.unknown()), {}),
214
+ });
215
+ /**
216
+ * Capture-format ingest (same shape as proxy CaptureData).
217
+ * Sent by the mitmproxy addon. Includes headers, timings, streaming body.
218
+ */
219
+ export const IngestCapturePayloadSchema = v.object({
220
+ timestamp: v.string(),
221
+ method: v.optional(v.string(), "POST"),
222
+ path: v.string(),
223
+ source: v.optional(v.nullable(v.string()), "unknown"),
224
+ provider: v.string(),
225
+ apiFormat: v.optional(v.string(), "unknown"),
226
+ targetUrl: v.optional(v.string(), ""),
227
+ requestHeaders: v.optional(v.record(v.string(), v.string()), {}),
228
+ requestBody: v.optional(v.nullable(v.record(v.string(), v.unknown())), null),
229
+ requestBytes: v.optional(v.number(), 0),
230
+ responseStatus: v.optional(v.number(), 200),
231
+ responseHeaders: v.optional(v.record(v.string(), v.string()), {}),
232
+ responseBody: v.optional(v.string(), ""),
233
+ responseIsStreaming: v.optional(v.boolean(), false),
234
+ responseBytes: v.optional(v.number(), 0),
235
+ timings: v.optional(v.object({
236
+ send_ms: v.number(),
237
+ wait_ms: v.number(),
238
+ receive_ms: v.number(),
239
+ total_ms: v.number(),
240
+ }), { send_ms: 0, wait_ms: 0, receive_ms: 0, total_ms: 0 }),
241
+ });
242
+ /**
243
+ * Union: accept either capture-format or legacy format.
244
+ */
245
+ export const IngestPayloadSchema = v.union([
246
+ IngestCapturePayloadSchema,
247
+ IngestLegacyPayloadSchema,
248
+ ]);
249
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,yBAAyB,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC3C,eAAe;IACf,kBAAkB;IAClB,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,mBAAmB;IACnB,QAAQ;IACR,eAAe;IACf,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,yBAAyB;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;CACzC,CAAC,CAAC;AAEH,6EAA6E;AAC7E,iFAAiF;AACjF,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE9D,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAEH,gFAAgF;AAChF,+EAA+E;AAC/E,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC;IACjC,eAAe;IACf,kBAAkB;IAClB,qBAAqB;IACrB,gBAAgB;IAChB,oBAAoB;IACpB,mBAAmB;CACpB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,oDAAoD;AACpD,8EAA8E;AAE9E,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;CACvC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;CACnC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,iBAAiB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC1C,CAAC,CAAC;AAEH,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;CAC7B,CAAC,CAAC;AAEH,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAC9C,CAAC;CACH,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,WAAW,EAAE,iBAAiB;QAC9B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;QACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAC5C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC1C,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACxD,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACnD,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/C,CAAC;CACH,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE;IAC/C,sBAAsB;IACtB,eAAe;CAChB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;IACvD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;CAC5D,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;IACrC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IAChE,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;IAC5E,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;IAC3C,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IACjE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;IACxC,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;IACnD,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,QAAQ,CACjB,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,CAAC,EACF,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CACvD;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC;IACzC,0BAA0B;IAC1B,yBAAyB;CAC1B,CAAC,CAAC"}
@@ -1,8 +1,7 @@
1
- import type http from "node:http";
1
+ import { Hono } from "hono";
2
2
  import type { Store } from "./store.js";
3
3
  /**
4
- * Create an API-only request handler. Returns true if the request was handled,
5
- * false if it should fall through to static file serving.
4
+ * Create the Hono app with all API routes.
6
5
  */
7
- export declare function createApiHandler(store: Store): (req: http.IncomingMessage, res: http.ServerResponse) => boolean;
6
+ export declare function createApiApp(store: Store): Hono;
8
7
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAOlC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAiTxC;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,GACX,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,OAAO,CAuElE"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAmB5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AA0GxC;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAiO/C"}