@posthog/agent 1.16.6 → 1.18.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 (227) hide show
  1. package/README.md +6 -2
  2. package/dist/claude-cli/cli.js +3617 -0
  3. package/dist/claude-cli/package.json +3 -0
  4. package/dist/index.d.ts +1 -3
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/src/agent.d.ts +0 -3
  7. package/dist/src/agent.d.ts.map +1 -1
  8. package/dist/src/agent.js +6 -27
  9. package/dist/src/agent.js.map +1 -1
  10. package/dist/src/agents/research.d.ts +1 -1
  11. package/dist/src/agents/research.d.ts.map +1 -1
  12. package/dist/src/agents/research.js +84 -53
  13. package/dist/src/agents/research.js.map +1 -1
  14. package/dist/src/file-manager.d.ts +3 -21
  15. package/dist/src/file-manager.d.ts.map +1 -1
  16. package/dist/src/file-manager.js +15 -47
  17. package/dist/src/file-manager.js.map +1 -1
  18. package/dist/src/git-manager.d.ts.map +1 -1
  19. package/dist/src/git-manager.js +8 -1
  20. package/dist/src/git-manager.js.map +1 -1
  21. package/dist/src/posthog-api.d.ts +6 -1
  22. package/dist/src/posthog-api.d.ts.map +1 -1
  23. package/dist/src/posthog-api.js +28 -0
  24. package/dist/src/posthog-api.js.map +1 -1
  25. package/dist/src/task-progress-reporter.d.ts.map +1 -1
  26. package/dist/src/task-progress-reporter.js +0 -1
  27. package/dist/src/task-progress-reporter.js.map +1 -1
  28. package/dist/src/types.d.ts +21 -2
  29. package/dist/src/types.d.ts.map +1 -1
  30. package/dist/src/types.js.map +1 -1
  31. package/dist/src/workflow/steps/plan.d.ts.map +1 -1
  32. package/dist/src/workflow/steps/plan.js +26 -18
  33. package/dist/src/workflow/steps/plan.js.map +1 -1
  34. package/dist/src/workflow/steps/research.d.ts.map +1 -1
  35. package/dist/src/workflow/steps/research.js +100 -66
  36. package/dist/src/workflow/steps/research.js.map +1 -1
  37. package/dist/src/workflow/types.d.ts +0 -2
  38. package/dist/src/workflow/types.d.ts.map +1 -1
  39. package/dist/templates/plan-template.md +1 -5
  40. package/package.json +2 -6
  41. package/src/agent.ts +7 -31
  42. package/src/agents/research.ts +84 -53
  43. package/src/file-manager.ts +18 -73
  44. package/src/git-manager.ts +7 -1
  45. package/src/posthog-api.ts +33 -1
  46. package/src/task-progress-reporter.ts +0 -1
  47. package/src/templates/plan-template.md +1 -5
  48. package/src/types.ts +25 -2
  49. package/src/workflow/steps/plan.ts +28 -21
  50. package/src/workflow/steps/research.ts +109 -74
  51. package/src/workflow/types.ts +0 -2
  52. package/dist/_virtual/_commonjsHelpers.js +0 -6
  53. package/dist/_virtual/_commonjsHelpers.js.map +0 -1
  54. package/dist/_virtual/index.js +0 -4
  55. package/dist/_virtual/index.js.map +0 -1
  56. package/dist/node_modules/@ai-sdk/anthropic/dist/index.js +0 -1154
  57. package/dist/node_modules/@ai-sdk/anthropic/dist/index.js.map +0 -1
  58. package/dist/node_modules/@ai-sdk/provider/dist/index.js +0 -296
  59. package/dist/node_modules/@ai-sdk/provider/dist/index.js.map +0 -1
  60. package/dist/node_modules/@ai-sdk/provider-utils/dist/index.js +0 -576
  61. package/dist/node_modules/@ai-sdk/provider-utils/dist/index.js.map +0 -1
  62. package/dist/node_modules/@ai-sdk/ui-utils/dist/index.js +0 -741
  63. package/dist/node_modules/@ai-sdk/ui-utils/dist/index.js.map +0 -1
  64. package/dist/node_modules/@opentelemetry/api/build/esm/api/context.js +0 -112
  65. package/dist/node_modules/@opentelemetry/api/build/esm/api/context.js.map +0 -1
  66. package/dist/node_modules/@opentelemetry/api/build/esm/api/diag.js +0 -123
  67. package/dist/node_modules/@opentelemetry/api/build/esm/api/diag.js.map +0 -1
  68. package/dist/node_modules/@opentelemetry/api/build/esm/api/metrics.js +0 -62
  69. package/dist/node_modules/@opentelemetry/api/build/esm/api/metrics.js.map +0 -1
  70. package/dist/node_modules/@opentelemetry/api/build/esm/api/propagation.js +0 -91
  71. package/dist/node_modules/@opentelemetry/api/build/esm/api/propagation.js.map +0 -1
  72. package/dist/node_modules/@opentelemetry/api/build/esm/api/trace.js +0 -79
  73. package/dist/node_modules/@opentelemetry/api/build/esm/api/trace.js.map +0 -1
  74. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js +0 -59
  75. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js.map +0 -1
  76. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js +0 -99
  77. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js.map +0 -1
  78. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/utils.js +0 -31
  79. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/utils.js.map +0 -1
  80. package/dist/node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js +0 -69
  81. package/dist/node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js.map +0 -1
  82. package/dist/node_modules/@opentelemetry/api/build/esm/context/context.js +0 -54
  83. package/dist/node_modules/@opentelemetry/api/build/esm/context/context.js.map +0 -1
  84. package/dist/node_modules/@opentelemetry/api/build/esm/context-api.js +0 -22
  85. package/dist/node_modules/@opentelemetry/api/build/esm/context-api.js.map +0 -1
  86. package/dist/node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js +0 -104
  87. package/dist/node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js.map +0 -1
  88. package/dist/node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js +0 -44
  89. package/dist/node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js.map +0 -1
  90. package/dist/node_modules/@opentelemetry/api/build/esm/diag/types.js +0 -43
  91. package/dist/node_modules/@opentelemetry/api/build/esm/diag/types.js.map +0 -1
  92. package/dist/node_modules/@opentelemetry/api/build/esm/diag-api.js +0 -27
  93. package/dist/node_modules/@opentelemetry/api/build/esm/diag-api.js.map +0 -1
  94. package/dist/node_modules/@opentelemetry/api/build/esm/internal/global-utils.js +0 -62
  95. package/dist/node_modules/@opentelemetry/api/build/esm/internal/global-utils.js.map +0 -1
  96. package/dist/node_modules/@opentelemetry/api/build/esm/internal/semver.js +0 -121
  97. package/dist/node_modules/@opentelemetry/api/build/esm/internal/semver.js.map +0 -1
  98. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js +0 -167
  99. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js.map +0 -1
  100. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js +0 -33
  101. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js.map +0 -1
  102. package/dist/node_modules/@opentelemetry/api/build/esm/metrics-api.js +0 -22
  103. package/dist/node_modules/@opentelemetry/api/build/esm/metrics-api.js.map +0 -1
  104. package/dist/node_modules/@opentelemetry/api/build/esm/platform/node/globalThis.js +0 -21
  105. package/dist/node_modules/@opentelemetry/api/build/esm/platform/node/globalThis.js.map +0 -1
  106. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js +0 -35
  107. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js.map +0 -1
  108. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js +0 -40
  109. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js.map +0 -1
  110. package/dist/node_modules/@opentelemetry/api/build/esm/propagation-api.js +0 -22
  111. package/dist/node_modules/@opentelemetry/api/build/esm/propagation-api.js.map +0 -1
  112. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js +0 -70
  113. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js.map +0 -1
  114. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js +0 -78
  115. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js.map +0 -1
  116. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js +0 -34
  117. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js.map +0 -1
  118. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js +0 -55
  119. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js.map +0 -1
  120. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js +0 -56
  121. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js.map +0 -1
  122. package/dist/node_modules/@opentelemetry/api/build/esm/trace/context-utils.js +0 -76
  123. package/dist/node_modules/@opentelemetry/api/build/esm/trace/context-utils.js.map +0 -1
  124. package/dist/node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js +0 -27
  125. package/dist/node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js.map +0 -1
  126. package/dist/node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js +0 -45
  127. package/dist/node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js.map +0 -1
  128. package/dist/node_modules/@opentelemetry/api/build/esm/trace/status.js +0 -22
  129. package/dist/node_modules/@opentelemetry/api/build/esm/trace/status.js.map +0 -1
  130. package/dist/node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js +0 -25
  131. package/dist/node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js.map +0 -1
  132. package/dist/node_modules/@opentelemetry/api/build/esm/trace-api.js +0 -24
  133. package/dist/node_modules/@opentelemetry/api/build/esm/trace-api.js.map +0 -1
  134. package/dist/node_modules/@opentelemetry/api/build/esm/version.js +0 -20
  135. package/dist/node_modules/@opentelemetry/api/build/esm/version.js.map +0 -1
  136. package/dist/node_modules/ai/dist/index.js +0 -2870
  137. package/dist/node_modules/ai/dist/index.js.map +0 -1
  138. package/dist/node_modules/nanoid/non-secure/index.js +0 -13
  139. package/dist/node_modules/nanoid/non-secure/index.js.map +0 -1
  140. package/dist/node_modules/secure-json-parse/index.js +0 -133
  141. package/dist/node_modules/secure-json-parse/index.js.map +0 -1
  142. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js +0 -37
  143. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js.map +0 -1
  144. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js +0 -26
  145. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +0 -1
  146. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +0 -17
  147. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +0 -1
  148. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +0 -11
  149. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +0 -1
  150. package/dist/node_modules/zod-to-json-schema/dist/esm/index.js +0 -8
  151. package/dist/node_modules/zod-to-json-schema/dist/esm/index.js.map +0 -1
  152. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js +0 -66
  153. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +0 -1
  154. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +0 -21
  155. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +0 -1
  156. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +0 -30
  157. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +0 -1
  158. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +0 -53
  159. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +0 -1
  160. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +0 -8
  161. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +0 -1
  162. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +0 -8
  163. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +0 -1
  164. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +0 -8
  165. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +0 -1
  166. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +0 -50
  167. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +0 -1
  168. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +0 -11
  169. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +0 -1
  170. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +0 -11
  171. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +0 -1
  172. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +0 -9
  173. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +0 -1
  174. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +0 -56
  175. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +0 -1
  176. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +0 -24
  177. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +0 -1
  178. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +0 -30
  179. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +0 -1
  180. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +0 -19
  181. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +0 -1
  182. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +0 -15
  183. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +0 -1
  184. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +0 -13
  185. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +0 -1
  186. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +0 -37
  187. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +0 -1
  188. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +0 -56
  189. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +0 -1
  190. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +0 -76
  191. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +0 -1
  192. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +0 -25
  193. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +0 -1
  194. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +0 -24
  195. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +0 -1
  196. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +0 -8
  197. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +0 -1
  198. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +0 -8
  199. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +0 -1
  200. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +0 -65
  201. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +0 -1
  202. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +0 -24
  203. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +0 -1
  204. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +0 -350
  205. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +0 -1
  206. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +0 -36
  207. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +0 -1
  208. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +0 -10
  209. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +0 -1
  210. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +0 -84
  211. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +0 -1
  212. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +0 -8
  213. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +0 -1
  214. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js +0 -110
  215. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +0 -1
  216. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +0 -90
  217. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +0 -1
  218. package/dist/src/structured-extraction.d.ts +0 -28
  219. package/dist/src/structured-extraction.d.ts.map +0 -1
  220. package/dist/src/structured-extraction.js +0 -77
  221. package/dist/src/structured-extraction.js.map +0 -1
  222. package/dist/src/utils/ai-sdk.d.ts +0 -14
  223. package/dist/src/utils/ai-sdk.d.ts.map +0 -1
  224. package/dist/src/utils/ai-sdk.js +0 -38
  225. package/dist/src/utils/ai-sdk.js.map +0 -1
  226. package/src/structured-extraction.ts +0 -117
  227. package/src/utils/ai-sdk.ts +0 -47
@@ -1,110 +0,0 @@
1
- import { ZodFirstPartyTypeKind } from 'zod';
2
- import { parseAnyDef } from './parsers/any.js';
3
- import { parseArrayDef } from './parsers/array.js';
4
- import { parseBigintDef } from './parsers/bigint.js';
5
- import { parseBooleanDef } from './parsers/boolean.js';
6
- import { parseBrandedDef } from './parsers/branded.js';
7
- import { parseCatchDef } from './parsers/catch.js';
8
- import { parseDateDef } from './parsers/date.js';
9
- import { parseDefaultDef } from './parsers/default.js';
10
- import { parseEffectsDef } from './parsers/effects.js';
11
- import { parseEnumDef } from './parsers/enum.js';
12
- import { parseIntersectionDef } from './parsers/intersection.js';
13
- import { parseLiteralDef } from './parsers/literal.js';
14
- import { parseMapDef } from './parsers/map.js';
15
- import { parseNativeEnumDef } from './parsers/nativeEnum.js';
16
- import { parseNeverDef } from './parsers/never.js';
17
- import { parseNullDef } from './parsers/null.js';
18
- import { parseNullableDef } from './parsers/nullable.js';
19
- import { parseNumberDef } from './parsers/number.js';
20
- import { parseObjectDef } from './parsers/object.js';
21
- import { parseOptionalDef } from './parsers/optional.js';
22
- import { parsePipelineDef } from './parsers/pipeline.js';
23
- import { parsePromiseDef } from './parsers/promise.js';
24
- import { parseRecordDef } from './parsers/record.js';
25
- import { parseSetDef } from './parsers/set.js';
26
- import { parseStringDef } from './parsers/string.js';
27
- import { parseTupleDef } from './parsers/tuple.js';
28
- import { parseUndefinedDef } from './parsers/undefined.js';
29
- import { parseUnionDef } from './parsers/union.js';
30
- import { parseUnknownDef } from './parsers/unknown.js';
31
- import { parseReadonlyDef } from './parsers/readonly.js';
32
-
33
- const selectParser = (def, typeName, refs) => {
34
- switch (typeName) {
35
- case ZodFirstPartyTypeKind.ZodString:
36
- return parseStringDef(def, refs);
37
- case ZodFirstPartyTypeKind.ZodNumber:
38
- return parseNumberDef(def, refs);
39
- case ZodFirstPartyTypeKind.ZodObject:
40
- return parseObjectDef(def, refs);
41
- case ZodFirstPartyTypeKind.ZodBigInt:
42
- return parseBigintDef(def, refs);
43
- case ZodFirstPartyTypeKind.ZodBoolean:
44
- return parseBooleanDef();
45
- case ZodFirstPartyTypeKind.ZodDate:
46
- return parseDateDef(def, refs);
47
- case ZodFirstPartyTypeKind.ZodUndefined:
48
- return parseUndefinedDef(refs);
49
- case ZodFirstPartyTypeKind.ZodNull:
50
- return parseNullDef(refs);
51
- case ZodFirstPartyTypeKind.ZodArray:
52
- return parseArrayDef(def, refs);
53
- case ZodFirstPartyTypeKind.ZodUnion:
54
- case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:
55
- return parseUnionDef(def, refs);
56
- case ZodFirstPartyTypeKind.ZodIntersection:
57
- return parseIntersectionDef(def, refs);
58
- case ZodFirstPartyTypeKind.ZodTuple:
59
- return parseTupleDef(def, refs);
60
- case ZodFirstPartyTypeKind.ZodRecord:
61
- return parseRecordDef(def, refs);
62
- case ZodFirstPartyTypeKind.ZodLiteral:
63
- return parseLiteralDef(def, refs);
64
- case ZodFirstPartyTypeKind.ZodEnum:
65
- return parseEnumDef(def);
66
- case ZodFirstPartyTypeKind.ZodNativeEnum:
67
- return parseNativeEnumDef(def);
68
- case ZodFirstPartyTypeKind.ZodNullable:
69
- return parseNullableDef(def, refs);
70
- case ZodFirstPartyTypeKind.ZodOptional:
71
- return parseOptionalDef(def, refs);
72
- case ZodFirstPartyTypeKind.ZodMap:
73
- return parseMapDef(def, refs);
74
- case ZodFirstPartyTypeKind.ZodSet:
75
- return parseSetDef(def, refs);
76
- case ZodFirstPartyTypeKind.ZodLazy:
77
- return () => def.getter()._def;
78
- case ZodFirstPartyTypeKind.ZodPromise:
79
- return parsePromiseDef(def, refs);
80
- case ZodFirstPartyTypeKind.ZodNaN:
81
- case ZodFirstPartyTypeKind.ZodNever:
82
- return parseNeverDef(refs);
83
- case ZodFirstPartyTypeKind.ZodEffects:
84
- return parseEffectsDef(def, refs);
85
- case ZodFirstPartyTypeKind.ZodAny:
86
- return parseAnyDef(refs);
87
- case ZodFirstPartyTypeKind.ZodUnknown:
88
- return parseUnknownDef(refs);
89
- case ZodFirstPartyTypeKind.ZodDefault:
90
- return parseDefaultDef(def, refs);
91
- case ZodFirstPartyTypeKind.ZodBranded:
92
- return parseBrandedDef(def, refs);
93
- case ZodFirstPartyTypeKind.ZodReadonly:
94
- return parseReadonlyDef(def, refs);
95
- case ZodFirstPartyTypeKind.ZodCatch:
96
- return parseCatchDef(def, refs);
97
- case ZodFirstPartyTypeKind.ZodPipeline:
98
- return parsePipelineDef(def, refs);
99
- case ZodFirstPartyTypeKind.ZodFunction:
100
- case ZodFirstPartyTypeKind.ZodVoid:
101
- case ZodFirstPartyTypeKind.ZodSymbol:
102
- return undefined;
103
- default:
104
- /* c8 ignore next */
105
- return ((_) => undefined)();
106
- }
107
- };
108
-
109
- export { selectParser };
110
- //# sourceMappingURL=selectParser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectParser.js","sources":["../../../../../node_modules/zod-to-json-schema/dist/esm/selectParser.js"],"sourcesContent":["import { ZodFirstPartyTypeKind } from \"zod\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def, refs);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef(refs);\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef(refs);\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def, refs);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => def.getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef(refs);\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef(refs);\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef(refs);\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n /* c8 ignore next */\n return ((_) => undefined)(typeName);\n }\n};\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,90 +0,0 @@
1
- import { parseDef } from './parseDef.js';
2
- import { getRefs } from './Refs.js';
3
- import { parseAnyDef } from './parsers/any.js';
4
-
5
- const zodToJsonSchema = (schema, options) => {
6
- const refs = getRefs(options);
7
- let definitions = typeof options === "object" && options.definitions
8
- ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({
9
- ...acc,
10
- [name]: parseDef(schema._def, {
11
- ...refs,
12
- currentPath: [...refs.basePath, refs.definitionPath, name],
13
- }, true) ?? parseAnyDef(refs),
14
- }), {})
15
- : undefined;
16
- const name = typeof options === "string"
17
- ? options
18
- : options?.nameStrategy === "title"
19
- ? undefined
20
- : options?.name;
21
- const main = parseDef(schema._def, name === undefined
22
- ? refs
23
- : {
24
- ...refs,
25
- currentPath: [...refs.basePath, refs.definitionPath, name],
26
- }, false) ?? parseAnyDef(refs);
27
- const title = typeof options === "object" &&
28
- options.name !== undefined &&
29
- options.nameStrategy === "title"
30
- ? options.name
31
- : undefined;
32
- if (title !== undefined) {
33
- main.title = title;
34
- }
35
- if (refs.flags.hasReferencedOpenAiAnyType) {
36
- if (!definitions) {
37
- definitions = {};
38
- }
39
- if (!definitions[refs.openAiAnyTypeName]) {
40
- definitions[refs.openAiAnyTypeName] = {
41
- // Skipping "object" as no properties can be defined and additionalProperties must be "false"
42
- type: ["string", "number", "integer", "boolean", "array", "null"],
43
- items: {
44
- $ref: refs.$refStrategy === "relative"
45
- ? "1"
46
- : [
47
- ...refs.basePath,
48
- refs.definitionPath,
49
- refs.openAiAnyTypeName,
50
- ].join("/"),
51
- },
52
- };
53
- }
54
- }
55
- const combined = name === undefined
56
- ? definitions
57
- ? {
58
- ...main,
59
- [refs.definitionPath]: definitions,
60
- }
61
- : main
62
- : {
63
- $ref: [
64
- ...(refs.$refStrategy === "relative" ? [] : refs.basePath),
65
- refs.definitionPath,
66
- name,
67
- ].join("/"),
68
- [refs.definitionPath]: {
69
- ...definitions,
70
- [name]: main,
71
- },
72
- };
73
- if (refs.target === "jsonSchema7") {
74
- combined.$schema = "http://json-schema.org/draft-07/schema#";
75
- }
76
- else if (refs.target === "jsonSchema2019-09" || refs.target === "openAi") {
77
- combined.$schema = "https://json-schema.org/draft/2019-09/schema#";
78
- }
79
- if (refs.target === "openAi" &&
80
- ("anyOf" in combined ||
81
- "oneOf" in combined ||
82
- "allOf" in combined ||
83
- ("type" in combined && Array.isArray(combined.type)))) {
84
- console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");
85
- }
86
- return combined;
87
- };
88
-
89
- export { zodToJsonSchema };
90
- //# sourceMappingURL=zodToJsonSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zodToJsonSchema.js","sources":["../../../../../node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js"],"sourcesContent":["import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions\n ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n ...acc,\n [name]: parseDef(schema._def, {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, true) ?? parseAnyDef(refs),\n }), {})\n : undefined;\n const name = typeof options === \"string\"\n ? options\n : options?.nameStrategy === \"title\"\n ? undefined\n : options?.name;\n const main = parseDef(schema._def, name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, false) ?? parseAnyDef(refs);\n const title = typeof options === \"object\" &&\n options.name !== undefined &&\n options.nameStrategy === \"title\"\n ? options.name\n : undefined;\n if (title !== undefined) {\n main.title = title;\n }\n if (refs.flags.hasReferencedOpenAiAnyType) {\n if (!definitions) {\n definitions = {};\n }\n if (!definitions[refs.openAiAnyTypeName]) {\n definitions[refs.openAiAnyTypeName] = {\n // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n items: {\n $ref: refs.$refStrategy === \"relative\"\n ? \"1\"\n : [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ].join(\"/\"),\n },\n };\n }\n }\n const combined = name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n if (refs.target === \"jsonSchema7\") {\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n }\n if (refs.target === \"openAi\" &&\n (\"anyOf\" in combined ||\n \"oneOf\" in combined ||\n \"allOf\" in combined ||\n (\"type\" in combined && Array.isArray(combined.type)))) {\n console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n }\n return combined;\n};\nexport { zodToJsonSchema };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,28 +0,0 @@
1
- import { Logger } from './utils/logger.js';
2
- export interface ExtractedQuestion {
3
- id: string;
4
- question: string;
5
- options: string[];
6
- }
7
- export interface ExtractedQuestionWithAnswer extends ExtractedQuestion {
8
- recommendedAnswer: string;
9
- justification: string;
10
- }
11
- export interface StructuredExtractor {
12
- extractQuestions(researchContent: string): Promise<ExtractedQuestion[]>;
13
- extractQuestionsWithAnswers(researchContent: string): Promise<ExtractedQuestionWithAnswer[]>;
14
- }
15
- export type StructuredExtractorConfig = {
16
- apiKey: string;
17
- gatewayUrl: string;
18
- modelName?: string;
19
- logger?: Logger;
20
- };
21
- export declare class AISDKExtractor implements StructuredExtractor {
22
- private logger;
23
- private model;
24
- constructor(config: StructuredExtractorConfig);
25
- extractQuestions(researchContent: string): Promise<ExtractedQuestion[]>;
26
- extractQuestionsWithAnswers(researchContent: string): Promise<ExtractedQuestionWithAnswer[]>;
27
- }
28
- //# sourceMappingURL=structured-extraction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"structured-extraction.d.ts","sourceRoot":"","sources":["../../src/structured-extraction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAwBD,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxE,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC;CAC9F;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,qBAAa,cAAe,YAAW,mBAAmB;IACxD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAM;gBAEP,MAAM,EAAE,yBAAyB;IAmBvC,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAqBvE,2BAA2B,CAC/B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,2BAA2B,EAAE,CAAC;CAoB1C"}
@@ -1,77 +0,0 @@
1
- import { generateObject } from '../node_modules/ai/dist/index.js';
2
- import { z } from 'zod';
3
- import { Logger } from './utils/logger.js';
4
- import { getAnthropicModel } from './utils/ai-sdk.js';
5
-
6
- const questionsOnlySchema = z.object({
7
- questions: z.array(z.object({
8
- id: z.string(),
9
- question: z.string(),
10
- options: z.array(z.string()),
11
- })),
12
- });
13
- const questionsWithAnswersSchema = z.object({
14
- questions: z.array(z.object({
15
- id: z.string(),
16
- question: z.string(),
17
- options: z.array(z.string()),
18
- recommendedAnswer: z.string().describe('The letter of the recommended option (e.g., "a", "b", "c")'),
19
- justification: z.string().describe('Brief explanation for the recommended answer'),
20
- })),
21
- });
22
- class AISDKExtractor {
23
- logger;
24
- model;
25
- constructor(config) {
26
- this.logger = config.logger || new Logger({ debug: false, prefix: '[AISDKExtractor]' });
27
- if (!config.apiKey) {
28
- throw new Error('Missing API key for structured extraction. Ensure the LLM gateway is configured.');
29
- }
30
- this.model = getAnthropicModel({
31
- apiKey: config.apiKey,
32
- gatewayUrl: config.gatewayUrl,
33
- modelName: config.modelName || 'claude-haiku-4-5',
34
- });
35
- this.logger.debug('Using PostHog LLM gateway for structured extraction', {
36
- modelName: config.modelName || 'claude-haiku-4-5',
37
- gatewayUrl: config.gatewayUrl
38
- });
39
- }
40
- async extractQuestions(researchContent) {
41
- this.logger.debug('Extracting questions from research content', {
42
- contentLength: researchContent.length,
43
- });
44
- const { object } = await generateObject({
45
- model: this.model,
46
- schema: questionsOnlySchema,
47
- schemaName: 'ResearchQuestions',
48
- schemaDescription: 'Research questions extracted from markdown content',
49
- system: 'Extract the research questions from the provided markdown. Return a JSON object matching the schema.',
50
- prompt: researchContent,
51
- });
52
- this.logger.info('Successfully extracted questions', {
53
- questionCount: object.questions.length,
54
- });
55
- return object.questions;
56
- }
57
- async extractQuestionsWithAnswers(researchContent) {
58
- this.logger.debug('Extracting questions with recommended answers', {
59
- contentLength: researchContent.length,
60
- });
61
- const { object } = await generateObject({
62
- model: this.model,
63
- schema: questionsWithAnswersSchema,
64
- schemaName: 'ResearchQuestionsWithAnswers',
65
- schemaDescription: 'Research questions with recommended answers extracted from markdown',
66
- system: 'Extract the research questions from the markdown and provide recommended answers based on the analysis. For each question, include a recommendedAnswer (the letter: a, b, c, etc.) and a brief justification. Return a JSON object matching the schema.',
67
- prompt: researchContent,
68
- });
69
- this.logger.info('Successfully extracted questions with answers', {
70
- questionCount: object.questions.length,
71
- });
72
- return object.questions;
73
- }
74
- }
75
-
76
- export { AISDKExtractor };
77
- //# sourceMappingURL=structured-extraction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"structured-extraction.js","sources":["../../src/structured-extraction.ts"],"sourcesContent":["import { generateObject } from 'ai';\nimport { z } from 'zod';\nimport { Logger } from './utils/logger.js';\nimport { getAnthropicModel } from './utils/ai-sdk.js';\n\nexport interface ExtractedQuestion {\n id: string;\n question: string;\n options: string[];\n}\n\nexport interface ExtractedQuestionWithAnswer extends ExtractedQuestion {\n recommendedAnswer: string;\n justification: string;\n}\n\nconst questionsOnlySchema = z.object({\n questions: z.array(\n z.object({\n id: z.string(),\n question: z.string(),\n options: z.array(z.string()),\n })\n ),\n});\n\nconst questionsWithAnswersSchema = z.object({\n questions: z.array(\n z.object({\n id: z.string(),\n question: z.string(),\n options: z.array(z.string()),\n recommendedAnswer: z.string().describe('The letter of the recommended option (e.g., \"a\", \"b\", \"c\")'),\n justification: z.string().describe('Brief explanation for the recommended answer'),\n })\n ),\n});\n\nexport interface StructuredExtractor {\n extractQuestions(researchContent: string): Promise<ExtractedQuestion[]>;\n extractQuestionsWithAnswers(researchContent: string): Promise<ExtractedQuestionWithAnswer[]>;\n}\n\nexport type StructuredExtractorConfig = {\n apiKey: string;\n gatewayUrl: string;\n modelName?: string;\n logger?: Logger;\n}\n\nexport class AISDKExtractor implements StructuredExtractor {\n private logger: Logger;\n private model: any;\n\n constructor(config: StructuredExtractorConfig) {\n this.logger = config.logger || new Logger({ debug: false, prefix: '[AISDKExtractor]' });\n\n if (!config.apiKey) {\n throw new Error('Missing API key for structured extraction. Ensure the LLM gateway is configured.');\n }\n\n this.model = getAnthropicModel({\n apiKey: config.apiKey,\n gatewayUrl: config.gatewayUrl,\n modelName: config.modelName || 'claude-haiku-4-5',\n });\n\n this.logger.debug('Using PostHog LLM gateway for structured extraction', {\n modelName: config.modelName || 'claude-haiku-4-5',\n gatewayUrl: config.gatewayUrl\n });\n }\n\n async extractQuestions(researchContent: string): Promise<ExtractedQuestion[]> {\n this.logger.debug('Extracting questions from research content', {\n contentLength: researchContent.length,\n });\n\n const { object } = await generateObject({\n model: this.model,\n schema: questionsOnlySchema,\n schemaName: 'ResearchQuestions',\n schemaDescription: 'Research questions extracted from markdown content',\n system: 'Extract the research questions from the provided markdown. Return a JSON object matching the schema.',\n prompt: researchContent,\n });\n\n this.logger.info('Successfully extracted questions', {\n questionCount: object.questions.length,\n });\n\n return object.questions;\n }\n\n async extractQuestionsWithAnswers(\n researchContent: string,\n ): Promise<ExtractedQuestionWithAnswer[]> {\n this.logger.debug('Extracting questions with recommended answers', {\n contentLength: researchContent.length,\n });\n\n const { object } = await generateObject({\n model: this.model,\n schema: questionsWithAnswersSchema,\n schemaName: 'ResearchQuestionsWithAnswers',\n schemaDescription: 'Research questions with recommended answers extracted from markdown',\n system: 'Extract the research questions from the markdown and provide recommended answers based on the analysis. For each question, include a recommendedAnswer (the letter: a, b, c, etc.) and a brief justification. Return a JSON object matching the schema.',\n prompt: researchContent,\n });\n\n this.logger.info('Successfully extracted questions with answers', {\n questionCount: object.questions.length,\n });\n\n return object.questions;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- export interface PostHogGatewayConfig {
2
- apiKey: string;
3
- gatewayUrl: string;
4
- modelName?: string;
5
- }
6
- /**
7
- * Creates an Anthropic model configured for PostHog LLM gateway.
8
- *
9
- * Handles two key differences between AI SDK and PostHog gateway:
10
- * 1. Appends /v1 to baseURL (gateway expects /v1/messages, SDK appends /messages)
11
- * 2. Converts x-api-key header to Authorization Bearer token
12
- */
13
- export declare function getAnthropicModel(config: PostHogGatewayConfig): import("ai").LanguageModelV1;
14
- //# sourceMappingURL=ai-sdk.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-sdk.d.ts","sourceRoot":"","sources":["../../../src/utils/ai-sdk.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,gCA+B7D"}
@@ -1,38 +0,0 @@
1
- import { createAnthropic } from '../../node_modules/@ai-sdk/anthropic/dist/index.js';
2
-
3
- /**
4
- * Creates an Anthropic model configured for PostHog LLM gateway.
5
- *
6
- * Handles two key differences between AI SDK and PostHog gateway:
7
- * 1. Appends /v1 to baseURL (gateway expects /v1/messages, SDK appends /messages)
8
- * 2. Converts x-api-key header to Authorization Bearer token
9
- */
10
- function getAnthropicModel(config) {
11
- const modelName = config.modelName || 'claude-haiku-4-5';
12
- // PostHog gateway expects /v1/messages, but AI SDK appends /messages
13
- // So we need to append /v1 to the baseURL
14
- const baseURL = config.gatewayUrl ? `${config.gatewayUrl}/v1` : undefined;
15
- // Custom fetch to convert x-api-key header to Authorization Bearer
16
- // PostHog gateway expects Bearer token, but Anthropic SDK sends x-api-key
17
- const customFetch = async (url, init) => {
18
- const headers = new Headers(init?.headers);
19
- if (headers.has('x-api-key')) {
20
- headers.delete('x-api-key');
21
- headers.set('Authorization', `Bearer ${config.apiKey}`);
22
- }
23
- return fetch(url, {
24
- ...init,
25
- headers,
26
- });
27
- };
28
- const anthropic = createAnthropic({
29
- apiKey: config.apiKey,
30
- baseURL,
31
- //@ts-ignore
32
- fetch: customFetch,
33
- });
34
- return anthropic(modelName);
35
- }
36
-
37
- export { getAnthropicModel };
38
- //# sourceMappingURL=ai-sdk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-sdk.js","sources":["../../../src/utils/ai-sdk.ts"],"sourcesContent":["import { createAnthropic } from '@ai-sdk/anthropic';\n\nexport interface PostHogGatewayConfig {\n apiKey: string;\n gatewayUrl: string;\n modelName?: string;\n}\n\n/**\n * Creates an Anthropic model configured for PostHog LLM gateway.\n * \n * Handles two key differences between AI SDK and PostHog gateway:\n * 1. Appends /v1 to baseURL (gateway expects /v1/messages, SDK appends /messages)\n * 2. Converts x-api-key header to Authorization Bearer token\n */\nexport function getAnthropicModel(config: PostHogGatewayConfig) {\n const modelName = config.modelName || 'claude-haiku-4-5';\n \n // PostHog gateway expects /v1/messages, but AI SDK appends /messages\n // So we need to append /v1 to the baseURL\n const baseURL = config.gatewayUrl ? `${config.gatewayUrl}/v1` : undefined;\n\n // Custom fetch to convert x-api-key header to Authorization Bearer\n // PostHog gateway expects Bearer token, but Anthropic SDK sends x-api-key\n const customFetch = async (url: RequestInfo, init?: RequestInit): Promise<Response> => {\n const headers = new Headers(init?.headers);\n\n if (headers.has('x-api-key')) {\n headers.delete('x-api-key');\n headers.set('Authorization', `Bearer ${config.apiKey}`);\n }\n\n return fetch(url, {\n ...init,\n headers,\n });\n };\n\n const anthropic = createAnthropic({\n apiKey: config.apiKey,\n baseURL,\n //@ts-ignore\n fetch: customFetch,\n });\n\n return anthropic(modelName);\n}\n"],"names":[],"mappings":";;AAQA;;;;;;AAMG;AACG,SAAU,iBAAiB,CAAC,MAA4B,EAAA;AAC5D,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,kBAAkB;;;AAIxD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,CAAA,EAAG,MAAM,CAAC,UAAU,CAAA,GAAA,CAAK,GAAG,SAAS;;;IAIzE,MAAM,WAAW,GAAG,OAAO,GAAgB,EAAE,IAAkB,KAAuB;QACpF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;AAE1C,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AAC5B,YAAA,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAA,OAAA,EAAU,MAAM,CAAC,MAAM,CAAA,CAAE,CAAC;QACzD;QAEA,OAAO,KAAK,CAAC,GAAG,EAAE;AAChB,YAAA,GAAG,IAAI;YACP,OAAO;AACR,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO;;AAEP,QAAA,KAAK,EAAE,WAAW;AACnB,KAAA,CAAC;AAEF,IAAA,OAAO,SAAS,CAAC,SAAS,CAAC;AAC7B;;;;"}
@@ -1,117 +0,0 @@
1
- import { generateObject } from 'ai';
2
- import { z } from 'zod';
3
- import { Logger } from './utils/logger.js';
4
- import { getAnthropicModel } from './utils/ai-sdk.js';
5
-
6
- export interface ExtractedQuestion {
7
- id: string;
8
- question: string;
9
- options: string[];
10
- }
11
-
12
- export interface ExtractedQuestionWithAnswer extends ExtractedQuestion {
13
- recommendedAnswer: string;
14
- justification: string;
15
- }
16
-
17
- const questionsOnlySchema = z.object({
18
- questions: z.array(
19
- z.object({
20
- id: z.string(),
21
- question: z.string(),
22
- options: z.array(z.string()),
23
- })
24
- ),
25
- });
26
-
27
- const questionsWithAnswersSchema = z.object({
28
- questions: z.array(
29
- z.object({
30
- id: z.string(),
31
- question: z.string(),
32
- options: z.array(z.string()),
33
- recommendedAnswer: z.string().describe('The letter of the recommended option (e.g., "a", "b", "c")'),
34
- justification: z.string().describe('Brief explanation for the recommended answer'),
35
- })
36
- ),
37
- });
38
-
39
- export interface StructuredExtractor {
40
- extractQuestions(researchContent: string): Promise<ExtractedQuestion[]>;
41
- extractQuestionsWithAnswers(researchContent: string): Promise<ExtractedQuestionWithAnswer[]>;
42
- }
43
-
44
- export type StructuredExtractorConfig = {
45
- apiKey: string;
46
- gatewayUrl: string;
47
- modelName?: string;
48
- logger?: Logger;
49
- }
50
-
51
- export class AISDKExtractor implements StructuredExtractor {
52
- private logger: Logger;
53
- private model: any;
54
-
55
- constructor(config: StructuredExtractorConfig) {
56
- this.logger = config.logger || new Logger({ debug: false, prefix: '[AISDKExtractor]' });
57
-
58
- if (!config.apiKey) {
59
- throw new Error('Missing API key for structured extraction. Ensure the LLM gateway is configured.');
60
- }
61
-
62
- this.model = getAnthropicModel({
63
- apiKey: config.apiKey,
64
- gatewayUrl: config.gatewayUrl,
65
- modelName: config.modelName || 'claude-haiku-4-5',
66
- });
67
-
68
- this.logger.debug('Using PostHog LLM gateway for structured extraction', {
69
- modelName: config.modelName || 'claude-haiku-4-5',
70
- gatewayUrl: config.gatewayUrl
71
- });
72
- }
73
-
74
- async extractQuestions(researchContent: string): Promise<ExtractedQuestion[]> {
75
- this.logger.debug('Extracting questions from research content', {
76
- contentLength: researchContent.length,
77
- });
78
-
79
- const { object } = await generateObject({
80
- model: this.model,
81
- schema: questionsOnlySchema,
82
- schemaName: 'ResearchQuestions',
83
- schemaDescription: 'Research questions extracted from markdown content',
84
- system: 'Extract the research questions from the provided markdown. Return a JSON object matching the schema.',
85
- prompt: researchContent,
86
- });
87
-
88
- this.logger.info('Successfully extracted questions', {
89
- questionCount: object.questions.length,
90
- });
91
-
92
- return object.questions;
93
- }
94
-
95
- async extractQuestionsWithAnswers(
96
- researchContent: string,
97
- ): Promise<ExtractedQuestionWithAnswer[]> {
98
- this.logger.debug('Extracting questions with recommended answers', {
99
- contentLength: researchContent.length,
100
- });
101
-
102
- const { object } = await generateObject({
103
- model: this.model,
104
- schema: questionsWithAnswersSchema,
105
- schemaName: 'ResearchQuestionsWithAnswers',
106
- schemaDescription: 'Research questions with recommended answers extracted from markdown',
107
- system: 'Extract the research questions from the markdown and provide recommended answers based on the analysis. For each question, include a recommendedAnswer (the letter: a, b, c, etc.) and a brief justification. Return a JSON object matching the schema.',
108
- prompt: researchContent,
109
- });
110
-
111
- this.logger.info('Successfully extracted questions with answers', {
112
- questionCount: object.questions.length,
113
- });
114
-
115
- return object.questions;
116
- }
117
- }
@@ -1,47 +0,0 @@
1
- import { createAnthropic } from '@ai-sdk/anthropic';
2
-
3
- export interface PostHogGatewayConfig {
4
- apiKey: string;
5
- gatewayUrl: string;
6
- modelName?: string;
7
- }
8
-
9
- /**
10
- * Creates an Anthropic model configured for PostHog LLM gateway.
11
- *
12
- * Handles two key differences between AI SDK and PostHog gateway:
13
- * 1. Appends /v1 to baseURL (gateway expects /v1/messages, SDK appends /messages)
14
- * 2. Converts x-api-key header to Authorization Bearer token
15
- */
16
- export function getAnthropicModel(config: PostHogGatewayConfig) {
17
- const modelName = config.modelName || 'claude-haiku-4-5';
18
-
19
- // PostHog gateway expects /v1/messages, but AI SDK appends /messages
20
- // So we need to append /v1 to the baseURL
21
- const baseURL = config.gatewayUrl ? `${config.gatewayUrl}/v1` : undefined;
22
-
23
- // Custom fetch to convert x-api-key header to Authorization Bearer
24
- // PostHog gateway expects Bearer token, but Anthropic SDK sends x-api-key
25
- const customFetch = async (url: RequestInfo, init?: RequestInit): Promise<Response> => {
26
- const headers = new Headers(init?.headers);
27
-
28
- if (headers.has('x-api-key')) {
29
- headers.delete('x-api-key');
30
- headers.set('Authorization', `Bearer ${config.apiKey}`);
31
- }
32
-
33
- return fetch(url, {
34
- ...init,
35
- headers,
36
- });
37
- };
38
-
39
- const anthropic = createAnthropic({
40
- apiKey: config.apiKey,
41
- baseURL,
42
- //@ts-ignore
43
- fetch: customFetch,
44
- });
45
-
46
- return anthropic(modelName);
47
- }