@logsesh/core 0.1.1

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 (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -0
  3. package/dist/adapters/claude-code.d.ts +3 -0
  4. package/dist/adapters/claude-code.d.ts.map +1 -0
  5. package/dist/adapters/claude-code.js +307 -0
  6. package/dist/adapters/claude-code.js.map +1 -0
  7. package/dist/adapters/codex-schemas.d.ts +59 -0
  8. package/dist/adapters/codex-schemas.d.ts.map +1 -0
  9. package/dist/adapters/codex-schemas.js +70 -0
  10. package/dist/adapters/codex-schemas.js.map +1 -0
  11. package/dist/adapters/codex.d.ts +3 -0
  12. package/dist/adapters/codex.d.ts.map +1 -0
  13. package/dist/adapters/codex.js +293 -0
  14. package/dist/adapters/codex.js.map +1 -0
  15. package/dist/adapters/gemini.d.ts +3 -0
  16. package/dist/adapters/gemini.d.ts.map +1 -0
  17. package/dist/adapters/gemini.js +193 -0
  18. package/dist/adapters/gemini.js.map +1 -0
  19. package/dist/adapters/index.d.ts +14 -0
  20. package/dist/adapters/index.d.ts.map +1 -0
  21. package/dist/adapters/index.js +64 -0
  22. package/dist/adapters/index.js.map +1 -0
  23. package/dist/discovery.d.ts +20 -0
  24. package/dist/discovery.d.ts.map +1 -0
  25. package/dist/discovery.js +115 -0
  26. package/dist/discovery.js.map +1 -0
  27. package/dist/doctor.d.ts +32 -0
  28. package/dist/doctor.d.ts.map +1 -0
  29. package/dist/doctor.js +68 -0
  30. package/dist/doctor.js.map +1 -0
  31. package/dist/export-safety.d.ts +6 -0
  32. package/dist/export-safety.d.ts.map +1 -0
  33. package/dist/export-safety.js +36 -0
  34. package/dist/export-safety.js.map +1 -0
  35. package/dist/exporters/csv.d.ts +4 -0
  36. package/dist/exporters/csv.d.ts.map +1 -0
  37. package/dist/exporters/csv.js +38 -0
  38. package/dist/exporters/csv.js.map +1 -0
  39. package/dist/exporters/json.d.ts +4 -0
  40. package/dist/exporters/json.d.ts.map +1 -0
  41. package/dist/exporters/json.js +14 -0
  42. package/dist/exporters/json.js.map +1 -0
  43. package/dist/exporters/jsonl.d.ts +4 -0
  44. package/dist/exporters/jsonl.d.ts.map +1 -0
  45. package/dist/exporters/jsonl.js +13 -0
  46. package/dist/exporters/jsonl.js.map +1 -0
  47. package/dist/exporters/markdown.d.ts +4 -0
  48. package/dist/exporters/markdown.d.ts.map +1 -0
  49. package/dist/exporters/markdown.js +29 -0
  50. package/dist/exporters/markdown.js.map +1 -0
  51. package/dist/exporters/stream.d.ts +13 -0
  52. package/dist/exporters/stream.d.ts.map +1 -0
  53. package/dist/exporters/stream.js +33 -0
  54. package/dist/exporters/stream.js.map +1 -0
  55. package/dist/filters.d.ts +3 -0
  56. package/dist/filters.d.ts.map +1 -0
  57. package/dist/filters.js +38 -0
  58. package/dist/filters.js.map +1 -0
  59. package/dist/fs-walk.d.ts +7 -0
  60. package/dist/fs-walk.d.ts.map +1 -0
  61. package/dist/fs-walk.js +64 -0
  62. package/dist/fs-walk.js.map +1 -0
  63. package/dist/index.d.ts +27 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +23 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/infer-tool.d.ts +8 -0
  68. package/dist/infer-tool.d.ts.map +1 -0
  69. package/dist/infer-tool.js +85 -0
  70. package/dist/infer-tool.js.map +1 -0
  71. package/dist/model-resolution.d.ts +13 -0
  72. package/dist/model-resolution.d.ts.map +1 -0
  73. package/dist/model-resolution.js +57 -0
  74. package/dist/model-resolution.js.map +1 -0
  75. package/dist/pipeline.d.ts +9 -0
  76. package/dist/pipeline.d.ts.map +1 -0
  77. package/dist/pipeline.js +152 -0
  78. package/dist/pipeline.js.map +1 -0
  79. package/dist/pricing.d.ts +8 -0
  80. package/dist/pricing.d.ts.map +1 -0
  81. package/dist/pricing.js +139 -0
  82. package/dist/pricing.js.map +1 -0
  83. package/dist/query.d.ts +15 -0
  84. package/dist/query.d.ts.map +1 -0
  85. package/dist/query.js +63 -0
  86. package/dist/query.js.map +1 -0
  87. package/dist/redact.d.ts +9 -0
  88. package/dist/redact.d.ts.map +1 -0
  89. package/dist/redact.js +57 -0
  90. package/dist/redact.js.map +1 -0
  91. package/dist/sanitize.d.ts +15 -0
  92. package/dist/sanitize.d.ts.map +1 -0
  93. package/dist/sanitize.js +72 -0
  94. package/dist/sanitize.js.map +1 -0
  95. package/dist/schemas.d.ts +701 -0
  96. package/dist/schemas.d.ts.map +1 -0
  97. package/dist/schemas.js +266 -0
  98. package/dist/schemas.js.map +1 -0
  99. package/dist/search.d.ts +11 -0
  100. package/dist/search.d.ts.map +1 -0
  101. package/dist/search.js +87 -0
  102. package/dist/search.js.map +1 -0
  103. package/dist/session-builder.d.ts +23 -0
  104. package/dist/session-builder.d.ts.map +1 -0
  105. package/dist/session-builder.js +296 -0
  106. package/dist/session-builder.js.map +1 -0
  107. package/dist/stats.d.ts +22 -0
  108. package/dist/stats.d.ts.map +1 -0
  109. package/dist/stats.js +82 -0
  110. package/dist/stats.js.map +1 -0
  111. package/dist/types.d.ts +292 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +2 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/util.d.ts +26 -0
  116. package/dist/util.d.ts.map +1 -0
  117. package/dist/util.js +70 -0
  118. package/dist/util.js.map +1 -0
  119. package/dist/warnings.d.ts +13 -0
  120. package/dist/warnings.d.ts.map +1 -0
  121. package/dist/warnings.js +38 -0
  122. package/dist/warnings.js.map +1 -0
  123. package/package.json +62 -0
  124. package/pricing/models.json +600 -0
  125. package/schemas/debug-envelope.json +494 -0
  126. package/schemas/doctor-envelope.json +234 -0
  127. package/schemas/json-export-envelope.json +79 -0
  128. package/schemas/jsonl-record.json +68 -0
  129. package/schemas/list-envelope.json +217 -0
  130. package/schemas/public-session.json +404 -0
  131. package/schemas/search-envelope.json +108 -0
  132. package/schemas/session.json +428 -0
  133. package/schemas/stats-envelope.json +203 -0
@@ -0,0 +1,139 @@
1
+ import pricingData from "../pricing/models.json" with { type: "json" };
2
+ import { z } from "zod";
3
+ const PriceRowSchema = z.object({
4
+ input: z.number().nonnegative(),
5
+ output: z.number().nonnegative(),
6
+ cacheRead: z.number().nonnegative().optional(),
7
+ cacheWrite: z.number().nonnegative().optional(),
8
+ });
9
+ const PricingModelRowSchema = PriceRowSchema.extend({
10
+ provider: z.string().min(1),
11
+ model: z.string().min(1),
12
+ aliases: z.array(z.string().min(1)).min(1),
13
+ status: z.enum(["current", "historical", "retired"]),
14
+ availability: z.enum(["available", "restricted", "retired"]),
15
+ sourceUrl: z.string().url(),
16
+ verifiedAt: z.string().min(1),
17
+ effectiveFrom: z.string().min(1),
18
+ note: z.string().min(1).optional(),
19
+ });
20
+ const PricingDataSchema = z.object({
21
+ version: z.string().min(1),
22
+ asOf: z.string().min(1),
23
+ sourceUrl: z.string().url(),
24
+ sources: z.array(z.object({
25
+ provider: z.string().min(1),
26
+ url: z.string().url(),
27
+ asOf: z.string().min(1),
28
+ })),
29
+ default: PriceRowSchema,
30
+ models: z.array(PricingModelRowSchema).min(1),
31
+ });
32
+ const DATA = PricingDataSchema.parse(pricingData);
33
+ export const PRICING_VERSION = DATA.version;
34
+ export const PRICING_AS_OF = DATA.asOf;
35
+ export const PRICING_SOURCE_URL = DATA.sourceUrl;
36
+ export const PRICING_MODEL_COUNT = DATA.models.length;
37
+ function normalizeModel(model) {
38
+ return model.toLowerCase().replace(/[._]/g, "-");
39
+ }
40
+ function modelMatchesAlias(model, alias) {
41
+ const normalized = normalizeModel(model);
42
+ const aliasNorm = normalizeModel(alias);
43
+ return normalized === aliasNorm || normalized.startsWith(`${aliasNorm}-`);
44
+ }
45
+ function modelExactlyMatchesAlias(model, alias) {
46
+ return normalizeModel(model) === normalizeModel(alias);
47
+ }
48
+ function rowProvenance(row) {
49
+ return {
50
+ provider: row.provider,
51
+ model: row.model,
52
+ sourceUrl: row.sourceUrl,
53
+ verifiedAt: row.verifiedAt,
54
+ effectiveFrom: row.effectiveFrom,
55
+ status: row.status,
56
+ availability: row.availability,
57
+ };
58
+ }
59
+ function priceForModel(model) {
60
+ if (!model)
61
+ return { price: DATA.default, matched: false };
62
+ for (const row of DATA.models) {
63
+ for (const alias of row.aliases) {
64
+ if (modelExactlyMatchesAlias(model, alias)) {
65
+ return { price: row, matched: true, matchedAlias: alias, row };
66
+ }
67
+ }
68
+ }
69
+ for (const row of DATA.models) {
70
+ for (const alias of row.aliases) {
71
+ if (modelMatchesAlias(model, alias)) {
72
+ return { price: row, matched: true, matchedAlias: alias, row };
73
+ }
74
+ }
75
+ }
76
+ return { price: DATA.default, matched: false };
77
+ }
78
+ export function estimateSessionCost(session) {
79
+ const { price, matched, matchedAlias, row } = priceForModel(session.model);
80
+ const status = row?.status;
81
+ const availability = row?.availability;
82
+ const note = row?.note;
83
+ const usage = session.usage ?? {};
84
+ const warnings = [];
85
+ let pricingConfidence = "exact";
86
+ if (!session.model) {
87
+ pricingConfidence = "unknown";
88
+ warnings.push("missing model; cost estimate unavailable because no model was parsed");
89
+ }
90
+ else if (!matched) {
91
+ pricingConfidence = "fallback";
92
+ warnings.push(`stale or unknown pricing for model ${session.model}; cost estimate unavailable from pricing table ${PRICING_AS_OF} (${PRICING_SOURCE_URL})`);
93
+ }
94
+ else if (status === "retired") {
95
+ pricingConfidence = "historical";
96
+ warnings.push(`retired model ${session.model}; requests to retired models may fail. ${note ?? "Kept only for estimating old local logs."}`);
97
+ }
98
+ else if (status === "historical") {
99
+ pricingConfidence = "historical";
100
+ warnings.push(`historical pricing for model ${session.model}; verify current provider pricing before billing or accounting use`);
101
+ }
102
+ else if (matched &&
103
+ matchedAlias &&
104
+ session.model &&
105
+ normalizeModel(session.model) !== normalizeModel(matchedAlias)) {
106
+ warnings.push(`matched pricing alias ${matchedAlias} for model ${session.model}`);
107
+ }
108
+ if (availability === "restricted" && session.model) {
109
+ warnings.push(`restricted availability for model ${session.model}; ${note ?? "verify access before use"}`);
110
+ }
111
+ else if (availability === "retired" && session.model && status !== "retired") {
112
+ warnings.push(`retired model ${session.model}; ${note ?? "kept for historical log estimates"}`);
113
+ }
114
+ const input = usage.inputTokens ?? 0;
115
+ const output = usage.outputTokens ?? 0;
116
+ const cacheRead = usage.cacheReadTokens ?? 0;
117
+ const cacheWrite = usage.cacheWriteTokens ?? 0;
118
+ const costUsd = pricingConfidence === "unknown" || pricingConfidence === "fallback"
119
+ ? null
120
+ : (input / 1_000_000) * price.input +
121
+ (output / 1_000_000) * price.output +
122
+ (cacheRead / 1_000_000) * (price.cacheRead ?? price.input * 0.1) +
123
+ (cacheWrite / 1_000_000) * (price.cacheWrite ?? price.input);
124
+ return {
125
+ costUsd: costUsd !== null && Number.isFinite(costUsd) ? costUsd : null,
126
+ pricingVersion: PRICING_VERSION,
127
+ pricingAsOf: PRICING_AS_OF,
128
+ pricingSourceUrl: row?.sourceUrl ?? PRICING_SOURCE_URL,
129
+ model: session.model,
130
+ pricingConfidence,
131
+ pricingProvenance: row ? rowProvenance(row) : undefined,
132
+ includesCacheTokens: true,
133
+ warnings: warnings.length > 0 ? warnings : undefined,
134
+ };
135
+ }
136
+ export function applyEstimate(session) {
137
+ return { ...session, estimate: estimateSessionCost(session) };
138
+ }
139
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ interface QueryFields {
2
+ project?: string[];
3
+ }
4
+ export interface ParsedQuery {
5
+ terms: string[];
6
+ phrases: string[];
7
+ operator: "AND" | "OR";
8
+ fields: QueryFields;
9
+ }
10
+ export declare function parseQuery(input: string): ParsedQuery;
11
+ export declare function hasTextQuery(query: ParsedQuery): boolean;
12
+ export declare function textOnlyQuery(query: ParsedQuery): ParsedQuery;
13
+ export declare function matchesQuery(text: string, query: ParsedQuery, caseSensitive?: boolean): boolean;
14
+ export {};
15
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;CACrB;AAKD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAsCrD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAExD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAO7D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,UAAQ,GAAG,OAAO,CAa7F"}
package/dist/query.js ADDED
@@ -0,0 +1,63 @@
1
+ const KNOWN_QUERY_FIELDS = new Set(["project"]);
2
+ const FIELD_PATTERN = /\b([a-z][a-z0-9_-]*):("([^"]*)"|(\S+))/gi;
3
+ export function parseQuery(input) {
4
+ const trimmed = input.trim();
5
+ if (!trimmed)
6
+ return { terms: [], phrases: [], operator: "OR", fields: {} };
7
+ const fields = {};
8
+ const fieldSpans = [];
9
+ let match;
10
+ FIELD_PATTERN.lastIndex = 0;
11
+ while ((match = FIELD_PATTERN.exec(trimmed)) !== null) {
12
+ const key = match[1].toLowerCase();
13
+ if (!KNOWN_QUERY_FIELDS.has(key))
14
+ continue;
15
+ const value = match[3] ?? match[4] ?? "";
16
+ if (key === "project") {
17
+ fields.project = fields.project ?? [];
18
+ fields.project.push(value);
19
+ }
20
+ fieldSpans.push({ start: match.index, end: match.index + match[0].length });
21
+ }
22
+ let withoutFields = trimmed;
23
+ for (const span of fieldSpans.sort((a, b) => b.start - a.start)) {
24
+ withoutFields = withoutFields.slice(0, span.start) + " " + withoutFields.slice(span.end);
25
+ }
26
+ const operator = /\bAND\b/i.test(withoutFields) && !/\bOR\b/i.test(withoutFields) ? "AND" : "OR";
27
+ const phrases = [];
28
+ const withoutPhrases = withoutFields.replace(/"([^"]+)"/g, (_, phrase) => {
29
+ phrases.push(phrase);
30
+ return "";
31
+ });
32
+ const terms = withoutPhrases
33
+ .replace(/\b(AND|OR)\b/gi, " ")
34
+ .split(/\s+/)
35
+ .map((t) => t.trim())
36
+ .filter(Boolean);
37
+ return { terms, phrases, operator, fields };
38
+ }
39
+ export function hasTextQuery(query) {
40
+ return query.terms.length > 0 || query.phrases.length > 0;
41
+ }
42
+ export function textOnlyQuery(query) {
43
+ return {
44
+ terms: query.terms,
45
+ phrases: query.phrases,
46
+ operator: query.operator,
47
+ fields: {},
48
+ };
49
+ }
50
+ export function matchesQuery(text, query, caseSensitive = false) {
51
+ const haystack = caseSensitive ? text : text.toLowerCase();
52
+ const parts = [
53
+ ...query.phrases.map((p) => (caseSensitive ? p : p.toLowerCase())),
54
+ ...query.terms.map((t) => (caseSensitive ? t : t.toLowerCase())),
55
+ ].filter(Boolean);
56
+ if (parts.length === 0)
57
+ return true;
58
+ if (query.operator === "AND") {
59
+ return parts.every((part) => haystack.includes(part));
60
+ }
61
+ return parts.some((part) => haystack.includes(part));
62
+ }
63
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function getBuiltinPatterns(): RegExp[];
2
+ export declare function redactText(text: string, extraPatterns?: RegExp[]): string;
3
+ export declare function redactUnknown<T>(value: T, patterns?: RegExp[]): T;
4
+ export interface ParseRedactPatternsResult {
5
+ patterns: RegExp[];
6
+ errors: string[];
7
+ }
8
+ export declare function parseRedactPatterns(patterns: string[]): ParseRedactPatternsResult;
9
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAkBA,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,MAAM,EAAO,GAAG,MAAM,CAM7E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,CAAC,CAerE;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAajF"}
package/dist/redact.js ADDED
@@ -0,0 +1,57 @@
1
+ const BUILTIN_PATTERNS = [
2
+ /sk-[A-Za-z0-9]{20,}/g,
3
+ /sk-proj-[A-Za-z0-9_-]{20,}/g,
4
+ /sk-ant-[A-Za-z0-9\-_]{20,}/g,
5
+ /ghp_[A-Za-z0-9]{20,}/g,
6
+ /gho_[A-Za-z0-9]{20,}/g,
7
+ /github_pat_[A-Za-z0-9_]{20,}/g,
8
+ /glpat-[A-Za-z0-9\-_]{20,}/g,
9
+ /npm_[A-Za-z0-9]{36,}/g,
10
+ /xox[baprs]-[A-Za-z0-9-]{10,}/g,
11
+ /AKIA[0-9A-Z]{16}/g,
12
+ /ASIA[0-9A-Z]{16}/g,
13
+ /eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,
14
+ /Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,
15
+ /-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/g,
16
+ /(?:^|[\s;])(?:API_KEY|SECRET|PASSWORD|TOKEN)\s*=\s*[^\s#]+/gim,
17
+ ];
18
+ export function getBuiltinPatterns() {
19
+ return BUILTIN_PATTERNS.map((p) => new RegExp(p.source, p.flags));
20
+ }
21
+ export function redactText(text, extraPatterns = []) {
22
+ let result = text;
23
+ for (const pattern of [...getBuiltinPatterns(), ...extraPatterns]) {
24
+ result = result.replace(pattern, "[REDACTED]");
25
+ }
26
+ return result;
27
+ }
28
+ export function redactUnknown(value, patterns = []) {
29
+ if (typeof value === "string") {
30
+ return redactText(value, patterns);
31
+ }
32
+ if (Array.isArray(value)) {
33
+ return value.map((v) => redactUnknown(v, patterns));
34
+ }
35
+ if (value !== null && typeof value === "object") {
36
+ const out = {};
37
+ for (const [k, v] of Object.entries(value)) {
38
+ out[k] = redactUnknown(v, patterns);
39
+ }
40
+ return out;
41
+ }
42
+ return value;
43
+ }
44
+ export function parseRedactPatterns(patterns) {
45
+ const parsed = [];
46
+ const errors = [];
47
+ for (const pattern of patterns) {
48
+ try {
49
+ parsed.push(new RegExp(pattern, "g"));
50
+ }
51
+ catch (err) {
52
+ errors.push(`Invalid redact pattern "${pattern}": ${err instanceof Error ? err.message : String(err)}`);
53
+ }
54
+ }
55
+ return { patterns: parsed, errors };
56
+ }
57
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAa;IACjC,sBAAsB;IACtB,6BAA6B;IAC7B,6BAA6B;IAC7B,uBAAuB;IACvB,uBAAuB;IACvB,+BAA+B;IAC/B,4BAA4B;IAC5B,uBAAuB;IACvB,+BAA+B;IAC/B,mBAAmB;IACnB,mBAAmB;IACnB,oDAAoD;IACpD,kCAAkC;IAClC,2GAA2G;IAC3G,+DAA+D;CAChE,CAAC;AAEF,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,aAAa,GAAa,EAAE;IACnE,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,kBAAkB,EAAE,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;QAClE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,KAAQ,EAAE,QAAQ,GAAa,EAAE;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAM,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAM,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,GAAQ,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAOD,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACpD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CACT,2BAA2B,OAAO,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC3F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { PublicSession, RawPathPublicSession, RawPathReasoningSession, ReasoningSession, SanitizeOptions, Session } from "./types.js";
2
+ export declare function sanitizeForExport(session: Session, opts: SanitizeOptions & {
3
+ includeReasoning: true;
4
+ rawPaths: true;
5
+ }): RawPathReasoningSession;
6
+ export declare function sanitizeForExport(session: Session, opts: SanitizeOptions & {
7
+ rawPaths: true;
8
+ includeReasoning?: false | undefined;
9
+ }): RawPathPublicSession;
10
+ export declare function sanitizeForExport(session: Session, opts: SanitizeOptions & {
11
+ includeReasoning: true;
12
+ rawPaths?: false | undefined;
13
+ }): ReasoningSession;
14
+ export declare function sanitizeForExport(session: Session, opts?: SanitizeOptions): PublicSession;
15
+ //# sourceMappingURL=sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EAGb,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,OAAO,EAIR,MAAM,YAAY,CAAC;AAwFpB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,eAAe,GAAG;IAAE,gBAAgB,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAA;CAAE,GACjE,uBAAuB,CAAC;AAC3B,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,eAAe,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CAAE,GAC/E,oBAAoB,CAAC;AACxB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,eAAe,GAAG;IAAE,gBAAgB,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CAAE,GAC/E,gBAAgB,CAAC;AACpB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { anonymizePath } from "./util.js";
2
+ function stripThinking(blocks) {
3
+ return blocks.filter((b) => b.kind !== "thinking");
4
+ }
5
+ function anonymizeWarning(w) {
6
+ const { sourcePath: _sourcePath, ...rest } = w;
7
+ return rest;
8
+ }
9
+ function anonymizeSessionPaths(session, home = process.env.HOME ?? "") {
10
+ return {
11
+ ...session,
12
+ projectPath: session.projectPath
13
+ ? anonymizePath(session.projectPath, home)
14
+ : session.projectPath,
15
+ warnings: session.warnings?.map((w) => ({
16
+ ...w,
17
+ sourcePath: w.sourcePath ? anonymizePath(w.sourcePath, home) : w.sourcePath,
18
+ })),
19
+ };
20
+ }
21
+ function toPublicTurns(turns) {
22
+ return turns.map((t) => ({
23
+ ...t,
24
+ content: stripThinking(t.content),
25
+ }));
26
+ }
27
+ function publicSource(source) {
28
+ return {
29
+ tool: source.tool,
30
+ adapterVersion: source.adapterVersion,
31
+ logFormatVersion: source.logFormatVersion,
32
+ };
33
+ }
34
+ function buildRawPathReasoningSession(fields, turns, source, warnings) {
35
+ return { ...fields, turns, source, warnings };
36
+ }
37
+ function buildRawPathPublicSession(fields, turns, source, warnings) {
38
+ return { ...fields, turns, source, warnings };
39
+ }
40
+ function buildReasoningSession(fields, turns, source, warnings) {
41
+ return {
42
+ ...fields,
43
+ turns,
44
+ source: publicSource(source),
45
+ warnings: warnings?.map(anonymizeWarning),
46
+ };
47
+ }
48
+ function buildPublicSession(fields, turns, source, warnings) {
49
+ return {
50
+ ...fields,
51
+ turns,
52
+ source: publicSource(source),
53
+ warnings: warnings?.map(anonymizeWarning),
54
+ };
55
+ }
56
+ export function sanitizeForExport(session, opts = {}) {
57
+ const includeReasoning = opts.includeReasoning ?? false;
58
+ const rawPaths = opts.rawPaths ?? false;
59
+ const base = rawPaths ? session : anonymizeSessionPaths(session);
60
+ const { source, warnings, ...fields } = base;
61
+ if (rawPaths && includeReasoning) {
62
+ return buildRawPathReasoningSession(fields, base.turns, source, warnings);
63
+ }
64
+ if (rawPaths) {
65
+ return buildRawPathPublicSession(fields, toPublicTurns(base.turns), source, warnings);
66
+ }
67
+ if (includeReasoning) {
68
+ return buildReasoningSession(fields, base.turns, source, warnings);
69
+ }
70
+ return buildPublicSession(fields, toPublicTurns(base.turns), source, warnings);
71
+ }
72
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}