@adversarylabs/sdk 0.1.14 → 0.1.16
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/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/repo-index.d.ts +54 -0
- package/dist/repo-index.d.ts.map +1 -0
- package/dist/repo-index.js +120 -0
- package/dist/repo-index.js.map +1 -0
- package/dist/repository-model.d.ts.map +1 -1
- package/dist/repository-model.js +19 -5
- package/dist/repository-model.js.map +1 -1
- package/dist/sources.d.ts +52 -0
- package/dist/sources.d.ts.map +1 -0
- package/dist/sources.js +121 -0
- package/dist/sources.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,qEAAqE;AACrE,MAAM,CAAC,MAAM,0BAA0B,GAAsB,MAAM,CAAC,MAAM,CAAC;IACzE,MAAM;IACN,OAAO;IACP,OAAO;IACP,UAAU;IACV,MAAM;IACN,WAAW;IACX,cAAc;IACd,aAAa;IACb,QAAQ;CACT,CAAC,CAAC;AAmCH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,MAAgC,EAChC,UAAmC,EAAE;IAErC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI,0BAA0B,CAAC,CAAC;IAEhF,IAAI,UAAoB,CAAC;IACzB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrD,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAAE,SAAS;QACrE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;IACxD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,MAAgC,EAChC,UAAqC,EAAE;IAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE;QACrD,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;QAC3B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnE,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,OAAO;YACP,MAAM,EAAE,WAAW,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SACxE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,MAA2B;IACvE,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,KAAK,UAAU,KAAK,CAAC,WAAmB;QACtC,MAAM,GAAG,GAAG,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxE,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GACP,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACzF,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACrC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,QAAgB;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,UAAU,GAAG,QAAQ;YAAE,OAAO,SAAS,CAAC;QACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["import type { Dirent } from \"node:fs\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\n/** Minimal change fields needed to resolve review scope (matches ChangeContext). */\nexport interface SourceChangeScope {\n readonly scanMode: \"changed\" | \"all\";\n readonly changedFiles: readonly string[];\n}\n\n/** Default directories skipped when enumerating an entire target. */\nexport const DEFAULT_IGNORE_DIRECTORIES: readonly string[] = Object.freeze([\n \".git\",\n \".next\",\n \"build\",\n \"coverage\",\n \"dist\",\n \"generated\",\n \"node_modules\",\n \"third_party\",\n \"vendor\",\n]);\n\nexport type InScopeSourceStatus = \"changed\" | \"repository\";\n\n/**\n * One source file in the runner's requested review scope.\n *\n * The CLI owns dirty-worktree / PR / all-files resolution. Adversaries must not\n * re-run git to invent a second change list — use these helpers instead.\n */\nexport interface InScopeSource {\n /** Repository-relative POSIX path. */\n path: string;\n content: string;\n /**\n * \"changed\" when the path is in the runner's change list (includes untracked).\n * \"repository\" when scanning the whole target (scanMode all / no change).\n */\n status: InScopeSourceStatus;\n}\n\nexport interface ListInScopePathsOptions {\n /** Keep only matching paths (after ignore rules). Defaults to all files. */\n include?: (path: string) => boolean;\n /** Maximum paths to return (default unlimited for list, 750 for load). */\n limit?: number;\n /** Directory names to skip during whole-target walks. */\n ignoreDirectories?: readonly string[];\n}\n\nexport interface LoadInScopeSourcesOptions extends ListInScopePathsOptions {\n /** Skip files larger than this many bytes (default 750_000). */\n maxBytes?: number;\n}\n\n/**\n * Paths in scope for this review.\n *\n * - `scanMode: \"changed\"` (or change list present with changed mode): use\n * `change.changedFiles` only — the CLI already included untracked worktree\n * paths. No git.\n * - `scanMode: \"all\"` or `change === null`: walk the target filesystem.\n */\nexport async function listInScopePaths(\n repoPath: string,\n change: SourceChangeScope | null,\n options: ListInScopePathsOptions = {},\n): Promise<string[]> {\n const include = options.include ?? (() => true);\n const limit = options.limit !== undefined && options.limit > 0 ? options.limit : undefined;\n const ignore = new Set(options.ignoreDirectories ?? DEFAULT_IGNORE_DIRECTORIES);\n\n let candidates: string[];\n if (change !== null && change.scanMode === \"changed\") {\n candidates = change.changedFiles.map(normalizePath);\n } else {\n candidates = await walkRelative(repoPath, ignore);\n }\n\n const out: string[] = [];\n const seen = new Set<string>();\n for (const path of candidates) {\n if (!path || seen.has(path)) continue;\n if (path.split(\"/\").some((segment) => ignore.has(segment))) continue;\n if (!include(path)) continue;\n seen.add(path);\n out.push(path);\n if (limit !== undefined && out.length >= limit) break;\n }\n return out;\n}\n\n/**\n * Read file contents for paths in scope.\n *\n * Deleted / unreadable paths are skipped. Binary / oversized files are skipped.\n */\nexport async function loadInScopeSources(\n repoPath: string,\n change: SourceChangeScope | null,\n options: LoadInScopeSourcesOptions = {},\n): Promise<InScopeSource[]> {\n const maxBytes = options.maxBytes ?? 750_000;\n const paths = await listInScopePaths(repoPath, change, {\n include: options.include,\n limit: options.limit ?? 750,\n ignoreDirectories: options.ignoreDirectories,\n });\n\n const wholeTarget = change === null || change.scanMode === \"all\";\n const changedSet = new Set((change?.changedFiles ?? []).map(normalizePath));\n const sources: InScopeSource[] = [];\n\n for (const path of paths) {\n const content = await safeReadText(join(repoPath, path), maxBytes);\n if (content === undefined) continue;\n sources.push({\n path,\n content,\n status: wholeTarget && !changedSet.has(path) ? \"repository\" : \"changed\",\n });\n }\n return sources;\n}\n\nfunction normalizePath(path: string): string {\n return path.replaceAll(\"\\\\\", \"/\").replace(/^\\.\\//, \"\");\n}\n\nasync function walkRelative(repoPath: string, ignore: ReadonlySet<string>): Promise<string[]> {\n const out: string[] = [];\n\n async function visit(relativeDir: string): Promise<void> {\n const abs = relativeDir === \"\" ? repoPath : join(repoPath, relativeDir);\n let entries: Dirent[];\n try {\n entries = await readdir(abs, { withFileTypes: true });\n } catch {\n return;\n }\n entries.sort((left, right) => left.name.localeCompare(right.name));\n for (const entry of entries) {\n const rel =\n relativeDir === \"\" ? entry.name : `${relativeDir}/${entry.name}`.replaceAll(\"\\\\\", \"/\");\n if (entry.isDirectory()) {\n if (ignore.has(entry.name)) continue;\n await visit(rel);\n continue;\n }\n if (entry.isFile()) {\n out.push(rel.replaceAll(\"\\\\\", \"/\"));\n }\n }\n }\n\n await visit(\"\");\n return out;\n}\n\nasync function safeReadText(absPath: string, maxBytes: number): Promise<string | undefined> {\n try {\n const buffer = await readFile(absPath);\n if (buffer.byteLength > maxBytes) return undefined;\n if (buffer.includes(0)) return undefined;\n return buffer.toString(\"utf8\");\n } catch {\n return undefined;\n }\n}\n"]}
|