@wrongstack/core 0.1.3 → 0.1.7
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.
- package/LICENSE +17 -13
- package/README.md +155 -0
- package/dist/defaults/index.d.ts +68 -33
- package/dist/defaults/index.js +559 -239
- package/dist/defaults/index.js.map +1 -1
- package/dist/index.d.ts +26 -12
- package/dist/index.js +745 -322
- package/dist/index.js.map +1 -1
- package/dist/kernel/index.d.ts +5 -4
- package/dist/kernel/index.js +2 -1
- package/dist/kernel/index.js.map +1 -1
- package/dist/{secret-scrubber-qU3AwEiI.d.ts → mode-Pjt5vMS6.d.ts} +94 -3
- package/dist/{provider-DovtyuM8.d.ts → provider-txgB0Oq9.d.ts} +27 -30
- package/dist/{session-reader-DR4u3bu9.d.ts → session-reader-7AutWHut.d.ts} +13 -32
- package/dist/system-prompt-vAB0F54-.d.ts +23 -0
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.js +34 -15
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +16 -11
- package/dist/utils/index.js +40 -13
- package/dist/utils/index.js.map +1 -1
- package/dist/{wstack-paths-D24ynAz1.d.ts → wstack-paths-BGu2INTm.d.ts} +7 -0
- package/package.json +17 -4
- package/dist/system-prompt--mzZnenv.d.ts +0 -16
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/atomic-write.ts","../../src/utils/safe-json.ts","../../src/utils/newline-normalize.ts","../../src/utils/color.ts","../../src/utils/glob-match.ts","../../src/utils/diff.ts","../../src/utils/wstack-paths.ts","../../src/utils/tool-output-serializer.ts","../../src/utils/token-estimate.ts","../../src/utils/json-schema-validate.ts"],"names":["path","stat","open"],"mappings":"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","file":"index.js","sourcesContent":["import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\nexport interface AtomicWriteOptions {\n mode?: number;\n encoding?: BufferEncoding;\n}\n\nexport async function atomicWrite(\n targetPath: string,\n content: string | Uint8Array,\n opts: AtomicWriteOptions = {},\n): Promise<void> {\n const dir = path.dirname(targetPath);\n await fs.mkdir(dir, { recursive: true });\n const tmp = path.join(dir, `.${path.basename(targetPath)}.${randomBytes(6).toString('hex')}.tmp`);\n\n // Write content to tmp first; 'wx' ensures exclusive creation (fails if\n // tmp already exists — extremely unlikely with 6-byte random suffix).\n try {\n if (typeof content === 'string') {\n await fs.writeFile(tmp, content, { flag: 'wx', encoding: opts.encoding ?? 'utf8' });\n } else {\n await fs.writeFile(tmp, content, { flag: 'wx' });\n }\n try {\n const fh = await fs.open(tmp, 'r+');\n try {\n await fh.sync();\n } finally {\n await fh.close();\n }\n } catch {\n // fsync best-effort\n }\n // Now safely read mode from target (if it exists) and apply to tmp before rename\n let mode: number | undefined;\n try {\n const stat = await fs.stat(targetPath);\n mode = stat.mode & 0o777;\n } catch {\n // target may not exist yet; mode stays undefined\n }\n if (mode !== undefined) {\n await fs.chmod(tmp, mode);\n }\n await fs.rename(tmp, targetPath);\n } catch (err) {\n try {\n await fs.unlink(tmp);\n } catch {\n // ignore cleanup error\n }\n throw err;\n }\n}\n\nexport async function ensureDir(dir: string): Promise<void> {\n await fs.mkdir(dir, { recursive: true });\n}\n","export interface SafeParseResult<T> {\n ok: boolean;\n value?: T;\n error?: string;\n}\n\nexport function safeParse<T = unknown>(input: string, maxBytes = 5_000_000): SafeParseResult<T> {\n if (input.length > maxBytes) {\n return { ok: false, error: `Input exceeds limit (${maxBytes} bytes)` };\n }\n try {\n return { ok: true, value: JSON.parse(input) as T };\n } catch (err) {\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\nexport function safeStringify(value: unknown, pretty = false): string {\n const seen = new WeakSet();\n const replacer = (_k: string, v: unknown): unknown => {\n if (typeof v === 'bigint') return v.toString();\n if (v instanceof Error) {\n return { name: v.name, message: v.message, stack: v.stack };\n }\n if (typeof v === 'object' && v !== null) {\n if (seen.has(v as object)) return '[Circular]';\n seen.add(v as object);\n }\n return v;\n };\n try {\n return JSON.stringify(value, replacer, pretty ? 2 : undefined) ?? 'null';\n } catch (err) {\n return JSON.stringify({\n __serialization_error: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\n/** Attempt to parse JSON5-style input and return a valid JSON string.\n * Handles trailing commas, single-line comments, and unquoted keys\n * that are common in provider output.\n */\nexport function sanitizeJsonString(s: string): string {\n let out = s.trim();\n\n // Stage 1: strip single-line comments (// to end of line) that appear\n // outside of string values. This is a heuristic: comments inside strings\n // are preserved because we only strip // when preceded by a char that\n // strongly suggests we're not in a string (quote count modulo 2 is even).\n out = stripSingleLineComments(out);\n\n // Stage 2: strip trailing commas before } or ]\n out = out.replace(/,(\\s*[}\\]])/g, '$1');\n\n // Stage 3: attempt full parse; if it fails, return the stripped version\n // so the caller can decide what to do. Return undefined on parse failure\n // so callers can distinguish \"already valid JSON\" from \"unrecoverable\".\n try {\n JSON.parse(out);\n return out;\n } catch {\n return out; // stripped but still not valid JSON; caller handles it\n }\n}\n\nfunction stripSingleLineComments(s: string): string {\n let inString = false;\n const chars: string[] = [];\n let i = 0;\n while (i < s.length) {\n const c = s[i]!;\n if (c === '\"' && (i === 0 || s[i - 1] !== '\\\\')) {\n inString = !inString;\n chars.push(c);\n } else if (c === '/' && s[i + 1] === '/' && !inString) {\n // skip to end of line\n while (i < s.length && s[i] !== '\\n') i++;\n } else {\n chars.push(c);\n }\n i++;\n }\n return chars.join('');\n}\n","export type NewlineStyle = 'lf' | 'crlf' | 'cr';\n\nexport function detectNewlineStyle(text: string): NewlineStyle {\n let lf = 0;\n let crlf = 0;\n let cr = 0;\n for (let i = 0; i < text.length; i++) {\n const c = text.charCodeAt(i);\n if (c === 0x0d) {\n if (text.charCodeAt(i + 1) === 0x0a) {\n crlf++;\n i++;\n } else {\n cr++;\n }\n } else if (c === 0x0a) {\n lf++;\n }\n }\n if (crlf > lf && crlf > cr) return 'crlf';\n if (cr > lf && cr > crlf) return 'cr';\n return 'lf';\n}\n\nexport function toStyle(text: string, style: NewlineStyle): string {\n const normalized = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n if (style === 'lf') return normalized;\n if (style === 'crlf') return normalized.replace(/\\n/g, '\\r\\n');\n return normalized.replace(/\\n/g, '\\r');\n}\n\nexport function normalizeToLf(text: string): string {\n return text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n}\n","const isColorTty = (): boolean => {\n if (process.env.NO_COLOR) return false;\n if (process.env.FORCE_COLOR) return true;\n return Boolean(process.stdout?.isTTY);\n};\n\nconst COLOR = isColorTty();\n\nconst wrap = (open: string, close: string) =>\n (s: string): string =>\n COLOR ? `\\x1b[${open}m${s}\\x1b[${close}m` : s;\n\nexport const color = {\n reset: wrap('0', '0'),\n bold: wrap('1', '22'),\n dim: wrap('2', '22'),\n italic: wrap('3', '23'),\n underline: wrap('4', '24'),\n red: wrap('31', '39'),\n green: wrap('32', '39'),\n yellow: wrap('33', '39'),\n blue: wrap('34', '39'),\n magenta: wrap('35', '39'),\n cyan: wrap('36', '39'),\n gray: wrap('90', '39'),\n amber: wrap('38;5;214', '39'),\n pink: wrap('38;5;205', '39'),\n bgRed: wrap('41', '49'),\n bgGreen: wrap('42', '49'),\n};\n\nexport function stripAnsi(s: string): string {\n return s.replace(\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape regex\n /\\x1b\\[[0-9;]*[A-Za-z]/g,\n '',\n );\n}\n","/**\n * Minimal glob matcher for trust patterns.\n * Supports: *, **, ?, character classes [abc], [a-z], negation [!...] or [^...].\n *\n * Both `[!...]` (shell glob convention) and `[^...]` (regex convention) are\n * accepted because users coming from either world will reach for what they\n * know; rejecting one silently fails open in a security-sensitive context.\n */\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.+^${}()|\\\\/]/g, '\\\\$&');\n}\n\nexport function compileGlob(pattern: string): RegExp {\n let i = 0;\n let re = '^';\n while (i < pattern.length) {\n const c = pattern[i];\n if (c === '*') {\n if (pattern[i + 1] === '*') {\n // ** matches any number of chars including /\n re += '.*';\n i += 2;\n // Skip trailing slash so '**/x' matches 'x'\n if (pattern[i] === '/') i++;\n } else {\n // single * matches any chars except /\n re += '[^/]*';\n i++;\n }\n } else if (c === '?') {\n re += '[^/]';\n i++;\n } else if (c === '[') {\n let cls = '[';\n i++;\n if (pattern[i] === '!' || pattern[i] === '^') {\n cls += '^';\n i++;\n }\n while (i < pattern.length && pattern[i] !== ']') {\n const ch = pattern[i] ?? '';\n // Inside a regex class, only `]`, `\\`, and `^`/`-` at boundaries need\n // escaping. We've already consumed the leading `^`; the rest are\n // literal. Escape `\\` defensively and pass the rest through verbatim\n // so ranges like `a-z` continue to work.\n if (ch === '\\\\') {\n cls += '\\\\\\\\';\n } else if (ch === ']' || ch === '^') {\n cls += `\\\\${ch}`;\n } else {\n cls += ch;\n }\n i++;\n }\n cls += ']';\n re += cls;\n i++; // skip closing ]\n } else {\n re += escapeRegex(c ?? '');\n i++;\n }\n }\n re += '$';\n return new RegExp(re);\n}\n\nexport function matchGlob(pattern: string, input: string): boolean {\n return compileGlob(pattern).test(input);\n}\n\nexport function matchAny(patterns: string[], input: string): boolean {\n return patterns.some((p) => matchGlob(p, input));\n}\n","/**\n * Myers diff with unified-format output. No external dependencies.\n * Operates on arrays of lines (newline-terminated or stripped).\n */\n\ninterface Edit {\n op: 'equal' | 'insert' | 'delete';\n a: number;\n b: number;\n line: string;\n}\n\nfunction myersDiff(a: string[], b: string[]): Edit[] {\n const N = a.length;\n const M = b.length;\n const max = N + M;\n if (max === 0) return [];\n\n const v = new Map<number, number>();\n v.set(1, 0);\n const trace: Map<number, number>[] = [];\n\n for (let d = 0; d <= max; d++) {\n const snapshot = new Map(v);\n trace.push(snapshot);\n for (let k = -d; k <= d; k += 2) {\n const left = v.get(k - 1) ?? -1;\n const right = v.get(k + 1) ?? -1;\n let x: number;\n if (k === -d || (k !== d && left < right)) {\n x = right;\n } else {\n x = left + 1;\n }\n let y = x - k;\n while (x < N && y < M && a[x] === b[y]) {\n x++;\n y++;\n }\n v.set(k, x);\n if (x >= N && y >= M) {\n return backtrack(trace, a, b, N, M, d);\n }\n }\n }\n return [];\n}\n\nfunction backtrack(\n trace: Map<number, number>[],\n a: string[],\n b: string[],\n N: number,\n M: number,\n finalD: number,\n): Edit[] {\n const edits: Edit[] = [];\n let x = N;\n let y = M;\n for (let d = finalD; d > 0; d--) {\n const v = trace[d];\n if (!v) break;\n const k = x - y;\n const left = v.get(k - 1) ?? -1;\n const right = v.get(k + 1) ?? -1;\n let prevK: number;\n if (k === -d || (k !== d && left < right)) {\n prevK = k + 1;\n } else {\n prevK = k - 1;\n }\n const prevX = v.get(prevK) ?? 0;\n const prevY = prevX - prevK;\n while (x > prevX && y > prevY) {\n edits.push({ op: 'equal', a: x - 1, b: y - 1, line: a[x - 1] ?? '' });\n x--;\n y--;\n }\n if (d > 0) {\n if (x === prevX) {\n edits.push({ op: 'insert', a: x, b: y - 1, line: b[y - 1] ?? '' });\n } else {\n edits.push({ op: 'delete', a: x - 1, b: y, line: a[x - 1] ?? '' });\n }\n x = prevX;\n y = prevY;\n }\n }\n while (x > 0 && y > 0) {\n edits.push({ op: 'equal', a: x - 1, b: y - 1, line: a[x - 1] ?? '' });\n x--;\n y--;\n }\n return edits.reverse();\n}\n\nexport interface UnifiedDiffOptions {\n context?: number;\n fromFile?: string;\n toFile?: string;\n}\n\nexport function unifiedDiff(\n oldText: string,\n newText: string,\n opts: UnifiedDiffOptions = {},\n): string {\n const context = opts.context ?? 3;\n const a = oldText.split('\\n');\n const b = newText.split('\\n');\n // Handle trailing newline: split adds an empty string we don't want to diff\n if (a[a.length - 1] === '') a.pop();\n if (b[b.length - 1] === '') b.pop();\n const edits = myersDiff(a, b);\n if (edits.every((e) => e.op === 'equal')) return '';\n\n const hunks: { aStart: number; bStart: number; lines: string[] }[] = [];\n let i = 0;\n while (i < edits.length) {\n while (i < edits.length && edits[i]?.op === 'equal') i++;\n if (i >= edits.length) break;\n const hunkStart = Math.max(0, i - context);\n const lines: string[] = [];\n let aStart = (edits[hunkStart]?.a ?? 0) + 1;\n let bStart = (edits[hunkStart]?.b ?? 0) + 1;\n let aCount = 0;\n let bCount = 0;\n let cursor = hunkStart;\n let trailing = 0;\n while (cursor < edits.length) {\n const e = edits[cursor];\n if (!e) break;\n if (e.op === 'equal') {\n trailing++;\n if (trailing > context * 2) break;\n } else {\n trailing = 0;\n }\n if (e.op === 'equal') {\n lines.push(` ${e.line}`);\n aCount++;\n bCount++;\n } else if (e.op === 'delete') {\n lines.push(`-${e.line}`);\n aCount++;\n } else {\n lines.push(`+${e.line}`);\n bCount++;\n }\n cursor++;\n }\n // Trim trailing context lines beyond `context`\n while (lines.length > 0 && lines[lines.length - 1]?.startsWith(' ') && trailing > context) {\n lines.pop();\n aCount--;\n bCount--;\n trailing--;\n }\n if (aCount === 0) aStart = 0;\n if (bCount === 0) bStart = 0;\n hunks.push({ aStart, bStart, lines });\n i = cursor;\n }\n if (hunks.length === 0) return '';\n\n let out = '';\n out += `--- ${opts.fromFile ?? 'a'}\\n`;\n out += `+++ ${opts.toFile ?? 'b'}\\n`;\n for (const h of hunks) {\n let aCount = 0;\n let bCount = 0;\n for (const l of h.lines) {\n if (l.startsWith(' ')) {\n aCount++;\n bCount++;\n } else if (l.startsWith('-')) aCount++;\n else if (l.startsWith('+')) bCount++;\n }\n out += `@@ -${h.aStart},${aCount} +${h.bStart},${bCount} @@\\n`;\n out += `${h.lines.join('\\n')}\\n`;\n }\n return out;\n}\n","import * as path from 'node:path';\nimport * as os from 'node:os';\nimport { createHash } from 'node:crypto';\n\n/**\n * Path layout. All developer-level state lives in ~/.wrongstack/.\n * Per-project state is keyed by sha256(absoluteProjectRoot).slice(0,12)\n * under ~/.wrongstack/projects/<hash>/.\n *\n * The ONLY thing inside the project tree is the optional\n * .wrongstack/AGENTS.md (committed) and .wrongstack/skills/ (committed).\n */\n\nexport interface WstackPaths {\n /** ~/.wrongstack — global root. */\n globalRoot: string;\n /** ~/.wrongstack/config.json */\n globalConfig: string;\n /** ~/.wrongstack/.key — 32 random bytes, mode 0600, AES-GCM key for the secret vault. */\n secretsKey: string;\n /** ~/.wrongstack/memory.md — user-global memory. */\n globalMemory: string;\n /** ~/.wrongstack/skills — user-global skills. */\n globalSkills: string;\n /** ~/.wrongstack/cache — fetched data (models.dev, etc.). */\n cacheDir: string;\n /** ~/.wrongstack/cache/models.dev.json */\n modelsCache: string;\n /** ~/.wrongstack/history — REPL line history. */\n historyFile: string;\n /** ~/.wrongstack/logs/wrongstack.log */\n logFile: string;\n /** ~/.wrongstack/projects/<hash> */\n projectDir: string;\n /** ~/.wrongstack/projects/<hash>/memory.md */\n projectMemory: string;\n /** ~/.wrongstack/projects/<hash>/sessions */\n projectSessions: string;\n /** ~/.wrongstack/projects/<hash>/trust.json */\n projectTrust: string;\n /** ~/.wrongstack/projects/<hash>/meta.json */\n projectMeta: string;\n /** ~/.wrongstack/projects/<hash>/config.local.json — optional override */\n projectLocalConfig: string;\n /** <project>/.wrongstack/AGENTS.md — committed project memory. */\n inProjectAgentsFile: string;\n /** <project>/.wrongstack/skills — committed project skills. */\n inProjectSkills: string;\n /** Stable hash for the project root. */\n projectHash: string;\n}\n\nexport function projectHash(absRoot: string): string {\n return createHash('sha256').update(path.resolve(absRoot)).digest('hex').slice(0, 12);\n}\n\nexport interface WstackPathOptions {\n userHome?: string;\n projectRoot: string;\n /** Override the global root (e.g. for tests). Default: `${userHome}/.wrongstack`. */\n globalRoot?: string;\n}\n\nexport function resolveWstackPaths(opts: WstackPathOptions): WstackPaths {\n const home = opts.userHome ?? os.homedir();\n const globalRoot = opts.globalRoot ?? path.join(home, '.wrongstack');\n const hash = projectHash(opts.projectRoot);\n const projectDir = path.join(globalRoot, 'projects', hash);\n return {\n globalRoot,\n globalConfig: path.join(globalRoot, 'config.json'),\n secretsKey: path.join(globalRoot, '.key'),\n globalMemory: path.join(globalRoot, 'memory.md'),\n globalSkills: path.join(globalRoot, 'skills'),\n cacheDir: path.join(globalRoot, 'cache'),\n modelsCache: path.join(globalRoot, 'cache', 'models.dev.json'),\n historyFile: path.join(globalRoot, 'history'),\n logFile: path.join(globalRoot, 'logs', 'wrongstack.log'),\n projectDir,\n projectMemory: path.join(projectDir, 'memory.md'),\n projectSessions: path.join(projectDir, 'sessions'),\n projectTrust: path.join(projectDir, 'trust.json'),\n projectMeta: path.join(projectDir, 'meta.json'),\n projectLocalConfig: path.join(projectDir, 'config.local.json'),\n inProjectAgentsFile: path.join(opts.projectRoot, '.wrongstack', 'AGENTS.md'),\n inProjectSkills: path.join(opts.projectRoot, '.wrongstack', 'skills'),\n projectHash: hash,\n };\n}\n","/**\n * Tool output serialization utilities.\n * Extracted from Agent.executeTools to allow reuse and consistent output handling.\n */\n\nexport interface ToolOutputSerializerOptions {\n perIterationOutputCapBytes?: number;\n estimator?: (text: string) => number;\n}\n\nexport function createToolOutputSerializer(opts: ToolOutputSerializerOptions = {}) {\n const capBytes = opts.perIterationOutputCapBytes ?? 100_000;\n\n function serialize(value: unknown): string {\n if (typeof value === 'string') return value;\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') {\n if (Array.isArray(value)) return value.map(serialize).join('\\n');\n if ('text' in (value as Record<string, unknown>)) {\n const t = (value as Record<string, unknown>).text;\n return typeof t === 'string' ? t : JSON.stringify(value, null, 2);\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n }\n return String(value);\n }\n\n function enforceCap(text: string, remainingBudget: number): { text: string; newBudget: number } {\n if (remainingBudget <= 0) {\n return { text: '[truncated: iteration output cap exceeded]', newBudget: 0 };\n }\n const textBytes = Buffer.byteLength(text, 'utf8');\n if (textBytes <= remainingBudget) {\n return { text, newBudget: remainingBudget - textBytes };\n }\n const marker = `\\n…[truncated ${textBytes - remainingBudget} bytes]…\\n`;\n const markerBytes = Buffer.byteLength(marker, 'utf8');\n const available = remainingBudget - markerBytes;\n if (available <= 0) {\n return { text: '[truncated: iteration output cap exceeded]', newBudget: 0 };\n }\n const half = Math.floor(available / 2);\n const first = text.slice(0, half);\n const textBytesHalf = Buffer.byteLength(first, 'utf8');\n const second = text.slice(text.length - half);\n return { text: `${first}${marker}${second}`, newBudget: 0 };\n }\n\n return { serialize, enforceCap, capBytes };\n}","/**\n * Shared token estimation with JSON.stringify caching.\n * Avoids repeated stringification of tool input objects.\n */\n\nconst RoughTokenEstimate = (text: string): number => Math.max(1, Math.ceil(text.length / 4));\n\n/**\n * Estimate tokens for a tool_use block input.\n * Caches the stringified result on the input object itself to avoid\n * repeated JSON.stringify calls during context window checks.\n */\nexport function estimateToolInputTokens(input: unknown): number {\n // If input is a string already, estimate directly\n if (typeof input === 'string') return RoughTokenEstimate(input);\n\n // Use cached estimate if available (set by this function or by caller)\n if (\n input !== null &&\n typeof input === 'object' &&\n '__tokenEstimate' in input\n ) {\n return (input as Record<string, unknown>).__tokenEstimate as number;\n }\n\n const str = typeof input === 'object' ? JSON.stringify(input) : String(input);\n const estimate = RoughTokenEstimate(str);\n\n // Cache on object for future calls (only for plain objects)\n if (input !== null && typeof input === 'object' && !Array.isArray(input)) {\n (input as Record<string, unknown>).__tokenEstimate = estimate;\n }\n\n return estimate;\n}\n\n/**\n * Estimate tokens for a tool_result content.\n */\nexport function estimateToolResultTokens(content: string | unknown): number {\n if (typeof content === 'string') return RoughTokenEstimate(content);\n return RoughTokenEstimate(JSON.stringify(content));\n}\n\n/**\n * Estimate tokens for a text block.\n */\nexport function estimateTextTokens(text: string): number {\n return RoughTokenEstimate(text);\n}","/**\r\n * Minimal JSON Schema validator — covers the subset needed for plugin\r\n * configSchema validation and tool inputSchema sanity checks. Intentionally\r\n * small (~80 lines, zero deps) and tolerant: unknown keywords are ignored so\r\n * authors can mix in non-standard extensions without breaking validation.\r\n *\r\n * NOT for full JSON Schema 2020-12 conformance. If a plugin needs $ref,\r\n * conditional schemas, format validation, or anything else exotic, it should\r\n * bring its own ajv-based validator and call this only for the cheap path.\r\n */\r\nimport type { JSONSchema } from '../types/tool.js';\r\n\r\nexport interface ValidationError {\r\n path: string;\r\n message: string;\r\n}\r\n\r\nexport interface ValidationResult {\r\n ok: boolean;\r\n errors: ValidationError[];\r\n}\r\n\r\nexport function validateAgainstSchema(value: unknown, schema: JSONSchema): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n walk(value, schema, '', errors);\r\n return { ok: errors.length === 0, errors };\r\n}\r\n\r\nfunction walk(value: unknown, schema: JSONSchema, path: string, errors: ValidationError[]): void {\r\n if (schema.enum !== undefined) {\r\n if (!schema.enum.some((e) => deepEqual(e, value))) {\r\n errors.push({\r\n path: path || '<root>',\r\n message: `expected one of ${JSON.stringify(schema.enum)}, got ${JSON.stringify(value)}`,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (typeof schema.type === 'string') {\r\n if (!checkType(value, schema.type)) {\r\n errors.push({\r\n path: path || '<root>',\r\n message: `expected ${schema.type}, got ${describeType(value)}`,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (schema.type === 'object' && isPlainObject(value)) {\r\n const obj = value as Record<string, unknown>;\r\n for (const req of schema.required ?? []) {\r\n if (!(req in obj)) {\r\n errors.push({ path: joinPath(path, req), message: 'required property missing' });\r\n }\r\n }\r\n if (schema.properties) {\r\n for (const [key, subSchema] of Object.entries(schema.properties)) {\r\n if (key in obj) {\r\n walk(obj[key], subSchema, joinPath(path, key), errors);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (schema.type === 'array' && Array.isArray(value) && schema.items) {\r\n value.forEach((item, i) => walk(item, schema.items as JSONSchema, `${path}[${i}]`, errors));\r\n }\r\n}\r\n\r\nfunction checkType(value: unknown, type: string): boolean {\r\n switch (type) {\r\n case 'string': return typeof value === 'string';\r\n case 'number': return typeof value === 'number' && !Number.isNaN(value);\r\n case 'integer': return typeof value === 'number' && Number.isInteger(value);\r\n case 'boolean': return typeof value === 'boolean';\r\n case 'null': return value === null;\r\n case 'array': return Array.isArray(value);\r\n case 'object': return isPlainObject(value);\r\n default: return true;\r\n }\r\n}\r\n\r\nfunction isPlainObject(v: unknown): boolean {\r\n return typeof v === 'object' && v !== null && !Array.isArray(v);\r\n}\r\n\r\nfunction describeType(v: unknown): string {\r\n if (v === null) return 'null';\r\n if (Array.isArray(v)) return 'array';\r\n return typeof v;\r\n}\r\n\r\nfunction joinPath(parent: string, key: string): string {\r\n if (!parent) return key;\r\n return `${parent}.${key}`;\r\n}\r\n\r\nfunction deepEqual(a: unknown, b: unknown): boolean {\r\n if (a === b) return true;\r\n if (typeof a !== typeof b) return false;\r\n if (a === null || b === null) return a === b;\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n return a.length === b.length && a.every((v, i) => deepEqual(v, b[i]));\r\n }\r\n if (typeof a === 'object' && typeof b === 'object') {\r\n const ak = Object.keys(a as object);\r\n const bk = Object.keys(b as object);\r\n if (ak.length !== bk.length) return false;\r\n return ak.every((k) =>\r\n deepEqual((a as Record<string, unknown>)[k], (b as Record<string, unknown>)[k]),\r\n );\r\n }\r\n return false;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/atomic-write.ts","../../src/utils/safe-json.ts","../../src/utils/newline-normalize.ts","../../src/utils/color.ts","../../src/utils/glob-match.ts","../../src/utils/diff.ts","../../src/utils/wstack-paths.ts","../../src/utils/tool-output-serializer.ts","../../src/utils/token-estimate.ts","../../src/utils/json-schema-validate.ts"],"names":["path","stat","open"],"mappings":"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","file":"index.js","sourcesContent":["import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\nexport interface AtomicWriteOptions {\n mode?: number;\n encoding?: BufferEncoding;\n}\n\nexport async function atomicWrite(\n targetPath: string,\n content: string | Uint8Array,\n opts: AtomicWriteOptions = {},\n): Promise<void> {\n const dir = path.dirname(targetPath);\n await fs.mkdir(dir, { recursive: true });\n const tmp = path.join(dir, `.${path.basename(targetPath)}.${randomBytes(6).toString('hex')}.tmp`);\n\n // Write content to tmp first; 'wx' ensures exclusive creation (fails if\n // tmp already exists — extremely unlikely with 6-byte random suffix).\n try {\n if (typeof content === 'string') {\n await fs.writeFile(tmp, content, { flag: 'wx', encoding: opts.encoding ?? 'utf8' });\n } else {\n await fs.writeFile(tmp, content, { flag: 'wx' });\n }\n try {\n const fh = await fs.open(tmp, 'r+');\n try {\n await fh.sync();\n } finally {\n await fh.close();\n }\n } catch {\n // fsync best-effort\n }\n // Now safely read mode from target (if it exists) and apply to tmp before rename\n let mode: number | undefined;\n try {\n const stat = await fs.stat(targetPath);\n mode = stat.mode & 0o777;\n } catch {\n // target may not exist yet; mode stays undefined\n }\n if (mode !== undefined) {\n await fs.chmod(tmp, mode);\n }\n await fs.rename(tmp, targetPath);\n } catch (err) {\n try {\n await fs.unlink(tmp);\n } catch {\n // ignore cleanup error\n }\n throw err;\n }\n}\n\nexport async function ensureDir(dir: string): Promise<void> {\n await fs.mkdir(dir, { recursive: true });\n}\n","export interface SafeParseResult<T> {\n ok: boolean;\n value?: T;\n error?: string;\n}\n\nexport function safeParse<T = unknown>(input: string, maxBytes = 5_000_000): SafeParseResult<T> {\n if (input.length > maxBytes) {\n return { ok: false, error: `Input exceeds limit (${maxBytes} bytes)` };\n }\n try {\n return { ok: true, value: JSON.parse(input) as T };\n } catch (err) {\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\nexport function safeStringify(value: unknown, pretty = false): string {\n const seen = new WeakSet();\n const replacer = (_k: string, v: unknown): unknown => {\n if (typeof v === 'bigint') return v.toString();\n if (v instanceof Error) {\n return { name: v.name, message: v.message, stack: v.stack };\n }\n if (typeof v === 'object' && v !== null) {\n if (seen.has(v as object)) return '[Circular]';\n seen.add(v as object);\n }\n return v;\n };\n try {\n return JSON.stringify(value, replacer, pretty ? 2 : undefined) ?? 'null';\n } catch (err) {\n return JSON.stringify({\n __serialization_error: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\n/**\n * Attempt to parse JSON5-style input and return a valid JSON string.\n * Handles trailing commas, single-line comments, and unquoted keys\n * that are common in provider output.\n *\n * Returns the sanitized string if it parses successfully as JSON,\n * or `null` if the input cannot be made valid. Callers use this to\n * decide whether to proceed with the parsed result or fall back to\n * raw handling.\n */\nexport function sanitizeJsonString(s: string): string | null {\n let out = s.trim();\n\n // Stage 1: strip single-line comments (// to end of line) that appear\n // outside of string values. This is a heuristic: comments inside strings\n // are preserved because we only strip // when preceded by a char that\n // strongly suggests we're not in a string (quote count modulo 2 is even).\n out = stripSingleLineComments(out);\n\n // Stage 2: strip trailing commas before } or ]\n out = out.replace(/,(\\s*[}\\]])/g, '$1');\n\n // Stage 3: attempt full parse; return null if it fails so callers can\n // distinguish \"already valid JSON\" from \"unrecoverable\".\n try {\n JSON.parse(out);\n return out;\n } catch {\n return null; // stripped but still not valid JSON; caller handles it\n }\n}\n\nfunction stripSingleLineComments(s: string): string {\n let inString = false;\n const chars: string[] = [];\n let i = 0;\n while (i < s.length) {\n const c = s[i]!;\n if (c === '\"' && (i === 0 || s[i - 1] !== '\\\\')) {\n inString = !inString;\n chars.push(c);\n } else if (c === '/' && s[i + 1] === '/' && !inString) {\n // skip to end of line\n while (i < s.length && s[i] !== '\\n') i++;\n } else {\n chars.push(c);\n }\n i++;\n }\n return chars.join('');\n}\n","export type NewlineStyle = 'lf' | 'crlf' | 'cr';\n\nexport function detectNewlineStyle(text: string): NewlineStyle {\n let lf = 0;\n let crlf = 0;\n let cr = 0;\n for (let i = 0; i < text.length; i++) {\n const c = text.charCodeAt(i);\n if (c === 0x0d) {\n if (text.charCodeAt(i + 1) === 0x0a) {\n crlf++;\n i++;\n } else {\n cr++;\n }\n } else if (c === 0x0a) {\n lf++;\n }\n }\n if (crlf > lf && crlf > cr) return 'crlf';\n if (cr > lf && cr > crlf) return 'cr';\n return 'lf';\n}\n\nexport function toStyle(text: string, style: NewlineStyle): string {\n const normalized = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n if (style === 'lf') return normalized;\n if (style === 'crlf') return normalized.replace(/\\n/g, '\\r\\n');\n return normalized.replace(/\\n/g, '\\r');\n}\n\nexport function normalizeToLf(text: string): string {\n return text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n}\n","const isColorTty = (): boolean => {\n if (process.env.NO_COLOR) return false;\n if (process.env.FORCE_COLOR) return true;\n return Boolean(process.stdout?.isTTY);\n};\n\nconst COLOR = isColorTty();\n\nconst wrap = (open: string, close: string) =>\n (s: string): string =>\n COLOR ? `\\x1b[${open}m${s}\\x1b[${close}m` : s;\n\nexport const color = {\n reset: wrap('0', '0'),\n bold: wrap('1', '22'),\n dim: wrap('2', '22'),\n italic: wrap('3', '23'),\n underline: wrap('4', '24'),\n red: wrap('31', '39'),\n green: wrap('32', '39'),\n yellow: wrap('33', '39'),\n blue: wrap('34', '39'),\n magenta: wrap('35', '39'),\n cyan: wrap('36', '39'),\n gray: wrap('90', '39'),\n amber: wrap('38;5;214', '39'),\n pink: wrap('38;5;205', '39'),\n bgRed: wrap('41', '49'),\n bgGreen: wrap('42', '49'),\n};\n\nexport function stripAnsi(s: string): string {\n return s.replace(\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape regex\n /\\x1b\\[[0-9;]*[A-Za-z]/g,\n '',\n );\n}\n","/**\n * Minimal glob matcher for trust patterns.\n * Supports: *, **, ?, character classes [abc], [a-z], negation [!...] or [^...].\n *\n * Compiled regexes are cached so repeated calls with the same pattern\n * avoid recompilation overhead.\n */\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.+^${}()|\\\\]/g, '\\\\$&');\n}\n\n// Module-level cache to avoid recompiling the same pattern on every call.\n// LRU-ish eviction keeps unbounded growth in check for long-running processes.\nconst COMPILED_GLOB_CACHE = new Map<string, RegExp>();\nconst CACHE_MAX_SIZE = 2000;\n\nfunction getCachedGlob(pattern: string): RegExp {\n const cached = COMPILED_GLOB_CACHE.get(pattern);\n if (cached) return cached;\n if (COMPILED_GLOB_CACHE.size >= CACHE_MAX_SIZE) {\n // Evict oldest 25% when at capacity\n const keys = [...COMPILED_GLOB_CACHE.keys()];\n for (let i = 0; i < Math.floor(CACHE_MAX_SIZE / 4); i++) {\n COMPILED_GLOB_CACHE.delete(keys[i]!);\n }\n }\n const re = compileGlob(pattern);\n COMPILED_GLOB_CACHE.set(pattern, re);\n return re;\n}\n\nexport function compileGlob(pattern: string): RegExp {\n let i = 0;\n let re = '^';\n while (i < pattern.length) {\n const c = pattern[i];\n if (c === '*') {\n if (pattern[i + 1] === '*') {\n // ** matches any number of chars including /\n re += '.*';\n i += 2;\n // Skip trailing slash so '**/x' matches 'x'\n if (pattern[i] === '/') i++;\n } else {\n // single * matches any chars except /\n re += '[^/]*';\n i++;\n }\n } else if (c === '?') {\n re += '[^/]';\n i++;\n } else if (c === '[') {\n let cls = '[';\n i++;\n if (pattern[i] === '!' || pattern[i] === '^') {\n cls += '^';\n i++;\n }\n while (i < pattern.length && pattern[i] !== ']') {\n const ch = pattern[i] ?? '';\n // Inside a regex class, only `]`, `\\`, and `^`/`-` at boundaries need\n // escaping. We've already consumed the leading `^`; the rest are\n // literal. Escape `\\` defensively and pass the rest through verbatim\n // so ranges like `a-z` continue to work.\n if (ch === '\\\\') {\n cls += '\\\\\\\\';\n } else if (ch === ']' || ch === '^') {\n cls += `\\\\${ch}`;\n } else {\n cls += ch;\n }\n i++;\n }\n cls += ']';\n re += cls;\n i++; // skip closing ]\n } else {\n re += escapeRegex(c ?? '');\n i++;\n }\n }\n re += '$';\n return new RegExp(re);\n}\n\nexport function matchGlob(pattern: string, input: string): boolean {\n return getCachedGlob(pattern).test(input);\n}\n\nexport function matchAny(patterns: string[], input: string): boolean {\n return patterns.some((p) => matchGlob(p, input));\n}","/**\n * Myers diff with unified-format output. No external dependencies.\n * Operates on arrays of lines (newline-terminated or stripped).\n */\n\ninterface Edit {\n op: 'equal' | 'insert' | 'delete';\n a: number;\n b: number;\n line: string;\n}\n\nfunction myersDiff(a: string[], b: string[]): Edit[] {\n const N = a.length;\n const M = b.length;\n const max = N + M;\n if (max === 0) return [];\n\n const v = new Map<number, number>();\n v.set(1, 0);\n const trace: Map<number, number>[] = [];\n\n for (let d = 0; d <= max; d++) {\n const snapshot = new Map(v);\n trace.push(snapshot);\n for (let k = -d; k <= d; k += 2) {\n const left = v.get(k - 1) ?? -1;\n const right = v.get(k + 1) ?? -1;\n let x: number;\n if (k === -d || (k !== d && left < right)) {\n x = right;\n } else {\n x = left + 1;\n }\n let y = x - k;\n while (x < N && y < M && a[x] === b[y]) {\n x++;\n y++;\n }\n v.set(k, x);\n if (x >= N && y >= M) {\n return backtrack(trace, a, b, N, M, d);\n }\n }\n }\n return [];\n}\n\nfunction backtrack(\n trace: Map<number, number>[],\n a: string[],\n b: string[],\n N: number,\n M: number,\n finalD: number,\n): Edit[] {\n const edits: Edit[] = [];\n let x = N;\n let y = M;\n for (let d = finalD; d > 0; d--) {\n const v = trace[d];\n if (!v) break;\n const k = x - y;\n const left = v.get(k - 1) ?? -1;\n const right = v.get(k + 1) ?? -1;\n let prevK: number;\n if (k === -d || (k !== d && left < right)) {\n prevK = k + 1;\n } else {\n prevK = k - 1;\n }\n const prevX = v.get(prevK) ?? 0;\n const prevY = prevX - prevK;\n while (x > prevX && y > prevY) {\n edits.push({ op: 'equal', a: x - 1, b: y - 1, line: a[x - 1] ?? '' });\n x--;\n y--;\n }\n if (d > 0) {\n if (x === prevX) {\n edits.push({ op: 'insert', a: x, b: y - 1, line: b[y - 1] ?? '' });\n } else {\n edits.push({ op: 'delete', a: x - 1, b: y, line: a[x - 1] ?? '' });\n }\n x = prevX;\n y = prevY;\n }\n }\n while (x > 0 && y > 0) {\n edits.push({ op: 'equal', a: x - 1, b: y - 1, line: a[x - 1] ?? '' });\n x--;\n y--;\n }\n return edits.reverse();\n}\n\nexport interface UnifiedDiffOptions {\n context?: number;\n fromFile?: string;\n toFile?: string;\n}\n\nexport function unifiedDiff(\n oldText: string,\n newText: string,\n opts: UnifiedDiffOptions = {},\n): string {\n const context = opts.context ?? 3;\n const a = oldText.split('\\n');\n const b = newText.split('\\n');\n // Handle trailing newline: split adds an empty string we don't want to diff\n if (a[a.length - 1] === '') a.pop();\n if (b[b.length - 1] === '') b.pop();\n const edits = myersDiff(a, b);\n if (edits.every((e) => e.op === 'equal')) return '';\n\n const hunks: { aStart: number; bStart: number; lines: string[] }[] = [];\n let i = 0;\n while (i < edits.length) {\n while (i < edits.length && edits[i]?.op === 'equal') i++;\n if (i >= edits.length) break;\n const hunkStart = Math.max(0, i - context);\n const lines: string[] = [];\n let aStart = (edits[hunkStart]?.a ?? 0) + 1;\n let bStart = (edits[hunkStart]?.b ?? 0) + 1;\n let aCount = 0;\n let bCount = 0;\n let cursor = hunkStart;\n let trailing = 0;\n while (cursor < edits.length) {\n const e = edits[cursor];\n if (!e) break;\n if (e.op === 'equal') {\n trailing++;\n if (trailing > context * 2) break;\n } else {\n trailing = 0;\n }\n if (e.op === 'equal') {\n lines.push(` ${e.line}`);\n aCount++;\n bCount++;\n } else if (e.op === 'delete') {\n lines.push(`-${e.line}`);\n aCount++;\n } else {\n lines.push(`+${e.line}`);\n bCount++;\n }\n cursor++;\n }\n // Trim trailing context lines beyond `context`\n while (lines.length > 0 && lines[lines.length - 1]?.startsWith(' ') && trailing > context) {\n lines.pop();\n aCount--;\n bCount--;\n trailing--;\n }\n if (aCount === 0) aStart = 0;\n if (bCount === 0) bStart = 0;\n hunks.push({ aStart, bStart, lines });\n i = cursor;\n }\n if (hunks.length === 0) return '';\n\n let out = '';\n out += `--- ${opts.fromFile ?? 'a'}\\n`;\n out += `+++ ${opts.toFile ?? 'b'}\\n`;\n for (const h of hunks) {\n let aCount = 0;\n let bCount = 0;\n for (const l of h.lines) {\n if (l.startsWith(' ')) {\n aCount++;\n bCount++;\n } else if (l.startsWith('-')) aCount++;\n else if (l.startsWith('+')) bCount++;\n }\n out += `@@ -${h.aStart},${aCount} +${h.bStart},${bCount} @@\\n`;\n out += `${h.lines.join('\\n')}\\n`;\n }\n return out;\n}\n","import * as path from 'node:path';\nimport * as os from 'node:os';\nimport { createHash } from 'node:crypto';\n\n/**\n * Path layout. All developer-level state lives in ~/.wrongstack/.\n * Per-project state is keyed by sha256(absoluteProjectRoot).slice(0,12)\n * under ~/.wrongstack/projects/<hash>/.\n *\n * The ONLY thing inside the project tree is the optional\n * .wrongstack/AGENTS.md (committed) and .wrongstack/skills/ (committed).\n */\n\nexport interface WstackPaths {\n /** ~/.wrongstack — global root. */\n globalRoot: string;\n /**\n * ~/.wrongstack — directory for user-global stateful config files\n * (mode.json, theme.json, …). Currently an alias for `globalRoot`;\n * separate name lets us split out per-OS XDG_CONFIG_HOME later\n * without rewriting callers.\n */\n configDir: string;\n /** ~/.wrongstack/config.json */\n globalConfig: string;\n /** ~/.wrongstack/.key — 32 random bytes, mode 0600, AES-GCM key for the secret vault. */\n secretsKey: string;\n /** ~/.wrongstack/memory.md — user-global memory. */\n globalMemory: string;\n /** ~/.wrongstack/skills — user-global skills. */\n globalSkills: string;\n /** ~/.wrongstack/cache — fetched data (models.dev, etc.). */\n cacheDir: string;\n /** ~/.wrongstack/cache/models.dev.json */\n modelsCache: string;\n /** ~/.wrongstack/history — REPL line history. */\n historyFile: string;\n /** ~/.wrongstack/logs/wrongstack.log */\n logFile: string;\n /** ~/.wrongstack/projects/<hash> */\n projectDir: string;\n /** ~/.wrongstack/projects/<hash>/memory.md */\n projectMemory: string;\n /** ~/.wrongstack/projects/<hash>/sessions */\n projectSessions: string;\n /** ~/.wrongstack/projects/<hash>/trust.json */\n projectTrust: string;\n /** ~/.wrongstack/projects/<hash>/meta.json */\n projectMeta: string;\n /** ~/.wrongstack/projects/<hash>/config.local.json — optional override */\n projectLocalConfig: string;\n /** <project>/.wrongstack/AGENTS.md — committed project memory. */\n inProjectAgentsFile: string;\n /** <project>/.wrongstack/skills — committed project skills. */\n inProjectSkills: string;\n /** Stable hash for the project root. */\n projectHash: string;\n}\n\nexport function projectHash(absRoot: string): string {\n return createHash('sha256').update(path.resolve(absRoot)).digest('hex').slice(0, 12);\n}\n\nexport interface WstackPathOptions {\n userHome?: string;\n projectRoot: string;\n /** Override the global root (e.g. for tests). Default: `${userHome}/.wrongstack`. */\n globalRoot?: string;\n}\n\nexport function resolveWstackPaths(opts: WstackPathOptions): WstackPaths {\n const home = opts.userHome ?? os.homedir();\n const globalRoot = opts.globalRoot ?? path.join(home, '.wrongstack');\n const hash = projectHash(opts.projectRoot);\n const projectDir = path.join(globalRoot, 'projects', hash);\n return {\n globalRoot,\n configDir: globalRoot,\n globalConfig: path.join(globalRoot, 'config.json'),\n secretsKey: path.join(globalRoot, '.key'),\n globalMemory: path.join(globalRoot, 'memory.md'),\n globalSkills: path.join(globalRoot, 'skills'),\n cacheDir: path.join(globalRoot, 'cache'),\n modelsCache: path.join(globalRoot, 'cache', 'models.dev.json'),\n historyFile: path.join(globalRoot, 'history'),\n logFile: path.join(globalRoot, 'logs', 'wrongstack.log'),\n projectDir,\n projectMemory: path.join(projectDir, 'memory.md'),\n projectSessions: path.join(projectDir, 'sessions'),\n projectTrust: path.join(projectDir, 'trust.json'),\n projectMeta: path.join(projectDir, 'meta.json'),\n projectLocalConfig: path.join(projectDir, 'config.local.json'),\n inProjectAgentsFile: path.join(opts.projectRoot, '.wrongstack', 'AGENTS.md'),\n inProjectSkills: path.join(opts.projectRoot, '.wrongstack', 'skills'),\n projectHash: hash,\n };\n}\n","/**\r\n * Tool output serialization utilities.\r\n * Extracted from Agent.executeTools to allow reuse and consistent output handling.\r\n */\r\n\r\nexport interface ToolOutputSerializerOptions {\r\n perIterationOutputCapBytes?: number;\r\n estimator?: (text: string) => number;\r\n}\r\n\r\nexport function createToolOutputSerializer(opts: ToolOutputSerializerOptions = {}) {\r\n const capBytes = opts.perIterationOutputCapBytes ?? 100_000;\r\n\r\n function serialize(value: unknown): string {\r\n if (typeof value === 'string') return value;\r\n if (value === null || value === undefined) return '';\r\n if (typeof value === 'object') {\r\n if (Array.isArray(value)) return value.map(serialize).join('\\n');\r\n if ('text' in (value as Record<string, unknown>)) {\r\n const t = (value as Record<string, unknown>).text;\r\n return typeof t === 'string' ? t : JSON.stringify(value, null, 2);\r\n }\r\n try {\r\n return JSON.stringify(value, null, 2);\r\n } catch {\r\n return String(value);\r\n }\r\n }\r\n return String(value);\r\n }\r\n\r\n function enforceCap(text: string, remainingBudget: number): { text: string; newBudget: number } {\r\n if (remainingBudget <= 0) {\r\n return { text: '[truncated: iteration output cap exceeded]', newBudget: 0 };\r\n }\r\n const textBytes = Buffer.byteLength(text, 'utf8');\r\n if (textBytes <= remainingBudget) {\r\n return { text, newBudget: remainingBudget - textBytes };\r\n }\r\n const marker = `\\n…[truncated ${textBytes - remainingBudget} bytes]…\\n`;\r\n const markerBytes = Buffer.byteLength(marker, 'utf8');\r\n const available = remainingBudget - markerBytes;\r\n if (available <= 0) {\r\n return { text: '[truncated: iteration output cap exceeded]', newBudget: 0 };\r\n }\r\n const half = Math.floor(available / 2);\r\n const first = text.slice(0, half);\r\n const second = text.slice(text.length - half);\r\n return { text: `${first}${marker}${second}`, newBudget: 0 };\r\n }\r\n\r\n return { serialize, enforceCap, capBytes };\r\n}","/**\n * Shared token estimation with JSON.stringify caching.\n * Avoids repeated stringification of tool input objects.\n */\n\nconst RoughTokenEstimate = (text: string): number => Math.max(1, Math.ceil(text.length / 4));\n\n/**\n * Cache of computed estimates keyed by the stringified input — not the\n * input object itself. Previously the cache was keyed by the input object\n * via WeakMap, but JSON.stringify() produces a new object reference each\n * call so the cache never hit. Now we use a Map with string keys so that\n * repeated stringifications of the same structure share a single entry.\n */\nconst ESTIMATE_CACHE = new Map<string, number>();\n\nconst ESTIMATE_CACHE_MAX_SIZE = 10_000;\n\nfunction getCachedEstimate(key: string, compute: () => number): number {\n const existing = ESTIMATE_CACHE.get(key);\n if (existing !== undefined) return existing;\n if (ESTIMATE_CACHE.size >= ESTIMATE_CACHE_MAX_SIZE) {\n // Evict oldest quarter when at capacity — simple LRU-ish policy.\n const keys = [...ESTIMATE_CACHE.keys()];\n for (let i = 0; i < Math.floor(ESTIMATE_CACHE_MAX_SIZE / 4); i++) {\n ESTIMATE_CACHE.delete(keys[i]!);\n }\n }\n const estimate = compute();\n ESTIMATE_CACHE.set(key, estimate);\n return estimate;\n}\n\n/**\n * Estimate tokens for a tool_use block input.\n * Caches the stringified result keyed by the stable string representation\n * to avoid repeated JSON.stringify calls during context window checks.\n */\nexport function estimateToolInputTokens(input: unknown): number {\n if (typeof input === 'string') return RoughTokenEstimate(input);\n if (input === null || typeof input !== 'object') {\n return RoughTokenEstimate(String(input));\n }\n const key = JSON.stringify(input);\n return getCachedEstimate(key, () => RoughTokenEstimate(key));\n}\n\n/**\n * Estimate tokens for a tool_result content.\n */\nexport function estimateToolResultTokens(content: string | unknown): number {\n if (typeof content === 'string') return RoughTokenEstimate(content);\n const key = JSON.stringify(content);\n return getCachedEstimate(key, () => RoughTokenEstimate(key));\n}\n\n/**\n * Estimate tokens for a text block.\n */\nexport function estimateTextTokens(text: string): number {\n return RoughTokenEstimate(text);\n}","/**\r\n * Minimal JSON Schema validator — covers the subset needed for plugin\r\n * configSchema validation and tool inputSchema sanity checks. Intentionally\r\n * small (~80 lines, zero deps) and tolerant: unknown keywords are ignored so\r\n * authors can mix in non-standard extensions without breaking validation.\r\n *\r\n * NOT for full JSON Schema 2020-12 conformance. If a plugin needs $ref,\r\n * conditional schemas, format validation, or anything else exotic, it should\r\n * bring its own ajv-based validator and call this only for the cheap path.\r\n */\r\nimport type { JSONSchema } from '../types/tool.js';\r\n\r\nexport interface ValidationError {\r\n path: string;\r\n message: string;\r\n}\r\n\r\nexport interface ValidationResult {\r\n ok: boolean;\r\n errors: ValidationError[];\r\n}\r\n\r\nexport function validateAgainstSchema(value: unknown, schema: JSONSchema): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n walk(value, schema, '', errors);\r\n return { ok: errors.length === 0, errors };\r\n}\r\n\r\nfunction walk(value: unknown, schema: JSONSchema, path: string, errors: ValidationError[]): void {\r\n if (schema.enum !== undefined) {\r\n if (!schema.enum.some((e) => deepEqual(e, value))) {\r\n errors.push({\r\n path: path || '<root>',\r\n message: `expected one of ${JSON.stringify(schema.enum)}, got ${JSON.stringify(value)}`,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (typeof schema.type === 'string') {\r\n if (!checkType(value, schema.type)) {\r\n errors.push({\r\n path: path || '<root>',\r\n message: `expected ${schema.type}, got ${describeType(value)}`,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (schema.type === 'object' && isPlainObject(value)) {\r\n const obj = value as Record<string, unknown>;\r\n for (const req of schema.required ?? []) {\r\n if (!(req in obj)) {\r\n errors.push({ path: joinPath(path, req), message: 'required property missing' });\r\n }\r\n }\r\n if (schema.properties) {\r\n for (const [key, subSchema] of Object.entries(schema.properties)) {\r\n if (key in obj) {\r\n walk(obj[key], subSchema, joinPath(path, key), errors);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (schema.type === 'array' && Array.isArray(value) && schema.items) {\r\n value.forEach((item, i) => walk(item, schema.items as JSONSchema, `${path}[${i}]`, errors));\r\n }\r\n}\r\n\r\nfunction checkType(value: unknown, type: string): boolean {\r\n switch (type) {\r\n case 'string': return typeof value === 'string';\r\n case 'number': return typeof value === 'number' && !Number.isNaN(value);\r\n case 'integer': return typeof value === 'number' && Number.isInteger(value);\r\n case 'boolean': return typeof value === 'boolean';\r\n case 'null': return value === null;\r\n case 'array': return Array.isArray(value);\r\n case 'object': return isPlainObject(value);\r\n default: return true;\r\n }\r\n}\r\n\r\nfunction isPlainObject(v: unknown): boolean {\r\n return typeof v === 'object' && v !== null && !Array.isArray(v);\r\n}\r\n\r\nfunction describeType(v: unknown): string {\r\n if (v === null) return 'null';\r\n if (Array.isArray(v)) return 'array';\r\n return typeof v;\r\n}\r\n\r\nfunction joinPath(parent: string, key: string): string {\r\n if (!parent) return key;\r\n return `${parent}.${key}`;\r\n}\r\n\r\nfunction deepEqual(a: unknown, b: unknown): boolean {\r\n if (a === b) return true;\r\n if (typeof a !== typeof b) return false;\r\n if (a === null || b === null) return a === b;\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n return a.length === b.length && a.every((v, i) => deepEqual(v, b[i]));\r\n }\r\n if (typeof a === 'object' && typeof b === 'object') {\r\n const ak = Object.keys(a as object);\r\n const bk = Object.keys(b as object);\r\n if (ak.length !== bk.length) return false;\r\n return ak.every((k) =>\r\n deepEqual((a as Record<string, unknown>)[k], (b as Record<string, unknown>)[k]),\r\n );\r\n }\r\n return false;\r\n}\r\n"]}
|
|
@@ -9,6 +9,13 @@
|
|
|
9
9
|
interface WstackPaths {
|
|
10
10
|
/** ~/.wrongstack — global root. */
|
|
11
11
|
globalRoot: string;
|
|
12
|
+
/**
|
|
13
|
+
* ~/.wrongstack — directory for user-global stateful config files
|
|
14
|
+
* (mode.json, theme.json, …). Currently an alias for `globalRoot`;
|
|
15
|
+
* separate name lets us split out per-OS XDG_CONFIG_HOME later
|
|
16
|
+
* without rewriting callers.
|
|
17
|
+
*/
|
|
18
|
+
configDir: string;
|
|
12
19
|
/** ~/.wrongstack/config.json */
|
|
13
20
|
globalConfig: string;
|
|
14
21
|
/** ~/.wrongstack/.key — 32 random bytes, mode 0600, AES-GCM key for the secret vault. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"description": "WrongStack core: kernel, types, defaults, and shared utilities for the WrongStack CLI agent.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/WrongStack/WrongStack.git",
|
|
9
|
+
"directory": "packages/core"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/WrongStack/WrongStack#readme",
|
|
12
|
+
"bugs": "https://github.com/WrongStack/WrongStack/issues",
|
|
13
|
+
"author": "ECOSTACK TECHNOLOGY OÜ",
|
|
4
14
|
"type": "module",
|
|
5
15
|
"main": "./dist/index.js",
|
|
6
16
|
"types": "./dist/index.d.ts",
|
|
@@ -33,11 +43,14 @@
|
|
|
33
43
|
"dist",
|
|
34
44
|
"skills"
|
|
35
45
|
],
|
|
36
|
-
"wrongstackApiVersion": "0.1.
|
|
46
|
+
"wrongstackApiVersion": "0.1.6",
|
|
37
47
|
"devDependencies": {
|
|
38
48
|
"@types/node": "^22.19.19",
|
|
39
|
-
"tsup": "^8.
|
|
40
|
-
"typescript": "^5.
|
|
49
|
+
"tsup": "^8.5.1",
|
|
50
|
+
"typescript": "^5.9.3"
|
|
51
|
+
},
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
41
54
|
},
|
|
42
55
|
"scripts": {
|
|
43
56
|
"build": "tsup",
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { v as Tool, T as TextBlock } from './provider-DovtyuM8.js';
|
|
2
|
-
|
|
3
|
-
interface BuildContext {
|
|
4
|
-
cwd: string;
|
|
5
|
-
projectRoot: string;
|
|
6
|
-
tools: Tool[];
|
|
7
|
-
/** Provider id (e.g. "anthropic", "minimax-coding-plan"). */
|
|
8
|
-
provider?: string;
|
|
9
|
-
/** Model id (e.g. "claude-sonnet-4-6", "MiniMax-M2.7"). */
|
|
10
|
-
model?: string;
|
|
11
|
-
}
|
|
12
|
-
interface SystemPromptBuilder {
|
|
13
|
-
build(ctx: BuildContext): Promise<TextBlock[]>;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export type { BuildContext as B, SystemPromptBuilder as S };
|