{"version":3,"sources":["../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/types.ts","../node_modules/.pnpm/lodash-isequal-shim@file+packages+lodash-isequal-shim/node_modules/lodash-isequal-shim/index.cjs","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/helpers.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/errors.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/messages.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/filter.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Query.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Expression.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Pattern.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Predicate.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Variable.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Host.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/dist/src/polar_wasm_api.js","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Polar.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Oso.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/index.ts","../src/lib/policy/oso-engine.ts","../src/lib/facts/oso-memory-store.ts","../src/index.ts","../src/lib/config/loader.ts","../src/lib/config/schema.ts","../src/lib/config/defaults.ts","../src/lib/policy/yaml-engine.ts","../src/lib/policy/factory.ts","../src/lib/identity/env-provider.ts","../src/lib/identity/local-provider.ts","../src/lib/identity/chain.ts","../src/lib/facts/yaml-store.ts","../src/lib/bash/patterns.ts","../src/lib/bash/classifier.ts","../src/lib/dlp/patterns.ts","../src/lib/dlp/scanner.ts","../src/lib/dlp/masker.ts","../src/lib/deps/parser.ts","../src/lib/deps/registry.ts","../src/lib/deps/vulnerabilities.ts","../src/lib/deps/levenshtein.ts","../src/lib/deps/allowlist.ts","../src/lib/deps/risk.ts","../src/lib/deps/guardian.ts","../src/lib/budget/tracker.ts","../src/lib/config/watcher.ts","../src/lib/templates/selector.ts","../src/lib/templates/renderer.ts","../src/lib/audit/logger.ts","../src/lib/audit/sinks/jsonl.ts","../src/lib/audit/sinks/webhook.ts","../src/lib/hitl/cli-approver.ts","../src/lib/hitl/webhook-approver.ts","../src/lib/hitl/approval.ts","../src/lib/wizard/server.ts","../src/lib/wizard/html.ts"],"sourcesContent":[null,"// Drop-in replacement for deprecated lodash.isequal using Node.js built-in.\n// See: https://github.com/lodash/lodash/issues/5765\nconst { isDeepStrictEqual } = require('node:util');\nmodule.exports = isDeepStrictEqual;\n",null,null,null,null,null,null,null,null,null,null,"let imports = {};\nimports['__wbindgen_placeholder__'] = module.exports;\nlet wasm;\nconst { TextEncoder, TextDecoder } = require(`util`);\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedUint8Memory0 = new Uint8Array();\n\nfunction getUint8Memory0() {\n    if (cachedUint8Memory0.byteLength === 0) {\n        cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachedUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n    ? function (arg, view) {\n    return cachedTextEncoder.encodeInto(arg, view);\n}\n    : function (arg, view) {\n    const buf = cachedTextEncoder.encode(arg);\n    view.set(buf);\n    return {\n        read: arg.length,\n        written: buf.length\n    };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n    if (realloc === undefined) {\n        const buf = cachedTextEncoder.encode(arg);\n        const ptr = malloc(buf.length);\n        getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n        WASM_VECTOR_LEN = buf.length;\n        return ptr;\n    }\n\n    let len = arg.length;\n    let ptr = malloc(len);\n\n    const mem = getUint8Memory0();\n\n    let offset = 0;\n\n    for (; offset < len; offset++) {\n        const code = arg.charCodeAt(offset);\n        if (code > 0x7F) break;\n        mem[ptr + offset] = code;\n    }\n\n    if (offset !== len) {\n        if (offset !== 0) {\n            arg = arg.slice(offset);\n        }\n        ptr = realloc(ptr, len, len = offset + arg.length * 3);\n        const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n        const ret = encodeString(arg, view);\n\n        offset += ret.written;\n    }\n\n    WASM_VECTOR_LEN = offset;\n    return ptr;\n}\n\nfunction isLikeNone(x) {\n    return x === undefined || x === null;\n}\n\nlet cachedInt32Memory0 = new Int32Array();\n\nfunction getInt32Memory0() {\n    if (cachedInt32Memory0.byteLength === 0) {\n        cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n    }\n    return cachedInt32Memory0;\n}\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n    if (idx < 36) return;\n    heap[idx] = heap_next;\n    heap_next = idx;\n}\n\nfunction takeObject(idx) {\n    const ret = getObject(idx);\n    dropObject(idx);\n    return ret;\n}\n\nlet cachedFloat64Memory0 = new Float64Array();\n\nfunction getFloat64Memory0() {\n    if (cachedFloat64Memory0.byteLength === 0) {\n        cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n    }\n    return cachedFloat64Memory0;\n}\n\nfunction addHeapObject(obj) {\n    if (heap_next === heap.length) heap.push(heap.length + 1);\n    const idx = heap_next;\n    heap_next = heap[idx];\n\n    heap[idx] = obj;\n    return idx;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nfunction getStringFromWasm0(ptr, len) {\n    return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction debugString(val) {\n    // primitive types\n    const type = typeof val;\n    if (type == 'number' || type == 'boolean' || val == null) {\n        return  `${val}`;\n    }\n    if (type == 'string') {\n        return `\"${val}\"`;\n    }\n    if (type == 'symbol') {\n        const description = val.description;\n        if (description == null) {\n            return 'Symbol';\n        } else {\n            return `Symbol(${description})`;\n        }\n    }\n    if (type == 'function') {\n        const name = val.name;\n        if (typeof name == 'string' && name.length > 0) {\n            return `Function(${name})`;\n        } else {\n            return 'Function';\n        }\n    }\n    // objects\n    if (Array.isArray(val)) {\n        const length = val.length;\n        let debug = '[';\n        if (length > 0) {\n            debug += debugString(val[0]);\n        }\n        for(let i = 1; i < length; i++) {\n            debug += ', ' + debugString(val[i]);\n        }\n        debug += ']';\n        return debug;\n    }\n    // Test for built-in\n    const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n    let className;\n    if (builtInMatches.length > 1) {\n        className = builtInMatches[1];\n    } else {\n        // Failed to match the standard '[object ClassName]'\n        return toString.call(val);\n    }\n    if (className == 'Object') {\n        // we're a user defined class or Object\n        // JSON.stringify avoids problems with cycles, and is generally much\n        // easier than looping through ownProperties of `val`.\n        try {\n            return 'Object(' + JSON.stringify(val) + ')';\n        } catch (_) {\n            return 'Object';\n        }\n    }\n    // errors\n    if (val instanceof Error) {\n        return `${val.name}: ${val.message}\\n${val.stack}`;\n    }\n    // TODO we could test for more things here, like `Set`s and `Map`s.\n    return className;\n}\n\nfunction handleError(f, args) {\n    try {\n        return f.apply(this, args);\n    } catch (e) {\n        wasm.__wbindgen_exn_store(addHeapObject(e));\n    }\n}\n/**\n*/\nclass Polar {\n\n    static __wrap(ptr) {\n        const obj = Object.create(Polar.prototype);\n        obj.ptr = ptr;\n\n        return obj;\n    }\n\n    __destroy_into_raw() {\n        const ptr = this.ptr;\n        this.ptr = 0;\n\n        return ptr;\n    }\n\n    free() {\n        const ptr = this.__destroy_into_raw();\n        wasm.__wbg_polar_free(ptr);\n    }\n    /**\n    */\n    constructor() {\n        const ret = wasm.polar_wasm_new();\n        return Polar.__wrap(ret);\n    }\n    /**\n    * @param {any} sources\n    */\n    load(sources) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            wasm.polar_load(retptr, this.ptr, addHeapObject(sources));\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            if (r1) {\n                throw takeObject(r0);\n            }\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    */\n    clearRules() {\n        wasm.polar_clearRules(this.ptr);\n    }\n    /**\n    * @param {string} name\n    * @param {any} term\n    */\n    registerConstant(name, term) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len0 = WASM_VECTOR_LEN;\n            wasm.polar_registerConstant(retptr, this.ptr, ptr0, len0, addHeapObject(term));\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            if (r1) {\n                throw takeObject(r0);\n            }\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @returns {Query | undefined}\n    */\n    nextInlineQuery() {\n        const ret = wasm.polar_nextInlineQuery(this.ptr);\n        return ret === 0 ? undefined : Query.__wrap(ret);\n    }\n    /**\n    * @param {string} src\n    * @returns {Query}\n    */\n    newQueryFromStr(src) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            const ptr0 = passStringToWasm0(src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len0 = WASM_VECTOR_LEN;\n            wasm.polar_newQueryFromStr(retptr, this.ptr, ptr0, len0);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            var r2 = getInt32Memory0()[retptr / 4 + 2];\n            if (r2) {\n                throw takeObject(r1);\n            }\n            return Query.__wrap(r0);\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {any} term\n    * @returns {Query}\n    */\n    newQueryFromTerm(term) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            wasm.polar_newQueryFromTerm(retptr, this.ptr, addHeapObject(term));\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            var r2 = getInt32Memory0()[retptr / 4 + 2];\n            if (r2) {\n                throw takeObject(r1);\n            }\n            return Query.__wrap(r0);\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @returns {number}\n    */\n    newId() {\n        const ret = wasm.polar_newId(this.ptr);\n        return ret;\n    }\n    /**\n    * @returns {any}\n    */\n    nextMessage() {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            wasm.polar_nextMessage(retptr, this.ptr);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            var r2 = getInt32Memory0()[retptr / 4 + 2];\n            if (r2) {\n                throw takeObject(r1);\n            }\n            return takeObject(r0);\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {string} name\n    * @param {any} mro\n    */\n    registerMro(name, mro) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len0 = WASM_VECTOR_LEN;\n            wasm.polar_registerMro(retptr, this.ptr, ptr0, len0, addHeapObject(mro));\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            if (r1) {\n                throw takeObject(r0);\n            }\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {any} types\n    * @param {any} partial_results\n    * @param {string} variable\n    * @param {string} class_tag\n    * @returns {any}\n    */\n    buildDataFilter(types, partial_results, variable, class_tag) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            const ptr0 = passStringToWasm0(variable, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len0 = WASM_VECTOR_LEN;\n            const ptr1 = passStringToWasm0(class_tag, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len1 = WASM_VECTOR_LEN;\n            wasm.polar_buildDataFilter(retptr, this.ptr, addHeapObject(types), addHeapObject(partial_results), ptr0, len0, ptr1, len1);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            var r2 = getInt32Memory0()[retptr / 4 + 2];\n            if (r2) {\n                throw takeObject(r1);\n            }\n            return takeObject(r0);\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {boolean} ignore_no_allow_warning\n    */\n    setIgnoreNoAllowWarning(ignore_no_allow_warning) {\n        wasm.polar_setIgnoreNoAllowWarning(this.ptr, ignore_no_allow_warning);\n    }\n}\nmodule.exports.Polar = Polar;\n/**\n*/\nclass Query {\n\n    static __wrap(ptr) {\n        const obj = Object.create(Query.prototype);\n        obj.ptr = ptr;\n\n        return obj;\n    }\n\n    __destroy_into_raw() {\n        const ptr = this.ptr;\n        this.ptr = 0;\n\n        return ptr;\n    }\n\n    free() {\n        const ptr = this.__destroy_into_raw();\n        wasm.__wbg_query_free(ptr);\n    }\n    /**\n    * @returns {any}\n    */\n    nextEvent() {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            wasm.query_nextEvent(retptr, this.ptr);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            var r2 = getInt32Memory0()[retptr / 4 + 2];\n            if (r2) {\n                throw takeObject(r1);\n            }\n            return takeObject(r0);\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {number} call_id\n    * @param {any} term\n    */\n    callResult(call_id, term) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            wasm.query_callResult(retptr, this.ptr, call_id, addHeapObject(term));\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            if (r1) {\n                throw takeObject(r0);\n            }\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {number} call_id\n    * @param {boolean} result\n    */\n    questionResult(call_id, result) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            wasm.query_questionResult(retptr, this.ptr, call_id, result);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            if (r1) {\n                throw takeObject(r0);\n            }\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {string} command\n    */\n    debugCommand(command) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            const ptr0 = passStringToWasm0(command, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len0 = WASM_VECTOR_LEN;\n            wasm.query_debugCommand(retptr, this.ptr, ptr0, len0);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            if (r1) {\n                throw takeObject(r0);\n            }\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {string} msg\n    */\n    appError(msg) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            const ptr0 = passStringToWasm0(msg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len0 = WASM_VECTOR_LEN;\n            wasm.query_appError(retptr, this.ptr, ptr0, len0);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            if (r1) {\n                throw takeObject(r0);\n            }\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @returns {any}\n    */\n    nextMessage() {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            wasm.query_nextMessage(retptr, this.ptr);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            var r2 = getInt32Memory0()[retptr / 4 + 2];\n            if (r2) {\n                throw takeObject(r1);\n            }\n            return takeObject(r0);\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @returns {string}\n    */\n    source() {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            wasm.query_source(retptr, this.ptr);\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            return getStringFromWasm0(r0, r1);\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n            wasm.__wbindgen_free(r0, r1);\n        }\n    }\n    /**\n    * @param {string} name\n    * @param {any} term\n    */\n    bind(name, term) {\n        try {\n            const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n            const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            const len0 = WASM_VECTOR_LEN;\n            wasm.query_bind(retptr, this.ptr, ptr0, len0, addHeapObject(term));\n            var r0 = getInt32Memory0()[retptr / 4 + 0];\n            var r1 = getInt32Memory0()[retptr / 4 + 1];\n            if (r1) {\n                throw takeObject(r0);\n            }\n        } finally {\n            wasm.__wbindgen_add_to_stack_pointer(16);\n        }\n    }\n    /**\n    * @param {string | undefined} rust_log\n    * @param {string | undefined} polar_log\n    */\n    setLoggingOptions(rust_log, polar_log) {\n        var ptr0 = isLikeNone(rust_log) ? 0 : passStringToWasm0(rust_log, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        var ptr1 = isLikeNone(polar_log) ? 0 : passStringToWasm0(polar_log, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len1 = WASM_VECTOR_LEN;\n        wasm.query_setLoggingOptions(this.ptr, ptr0, len0, ptr1, len1);\n    }\n}\nmodule.exports.Query = Query;\n\nmodule.exports.__wbindgen_string_get = function(arg0, arg1) {\n    const obj = getObject(arg1);\n    const ret = typeof(obj) === 'string' ? obj : undefined;\n    var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n    var len0 = WASM_VECTOR_LEN;\n    getInt32Memory0()[arg0 / 4 + 1] = len0;\n    getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbindgen_object_drop_ref = function(arg0) {\n    takeObject(arg0);\n};\n\nmodule.exports.__wbindgen_boolean_get = function(arg0) {\n    const v = getObject(arg0);\n    const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n    return ret;\n};\n\nmodule.exports.__wbindgen_number_get = function(arg0, arg1) {\n    const obj = getObject(arg1);\n    const ret = typeof(obj) === 'number' ? obj : undefined;\n    getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n    getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n};\n\nmodule.exports.__wbindgen_is_object = function(arg0) {\n    const val = getObject(arg0);\n    const ret = typeof(val) === 'object' && val !== null;\n    return ret;\n};\n\nmodule.exports.__wbindgen_is_string = function(arg0) {\n    const ret = typeof(getObject(arg0)) === 'string';\n    return ret;\n};\n\nmodule.exports.__wbindgen_is_null = function(arg0) {\n    const ret = getObject(arg0) === null;\n    return ret;\n};\n\nmodule.exports.__wbindgen_is_undefined = function(arg0) {\n    const ret = getObject(arg0) === undefined;\n    return ret;\n};\n\nmodule.exports.__wbindgen_number_new = function(arg0) {\n    const ret = arg0;\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_object_clone_ref = function(arg0) {\n    const ret = getObject(arg0);\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_string_new = function(arg0, arg1) {\n    const ret = getStringFromWasm0(arg0, arg1);\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_String_9aa17d6248d519a5 = function(arg0, arg1) {\n    const ret = String(getObject(arg1));\n    const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n    const len0 = WASM_VECTOR_LEN;\n    getInt32Memory0()[arg0 / 4 + 1] = len0;\n    getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbg_get_723f83ba0c34871a = function(arg0, arg1) {\n    const ret = getObject(arg0)[takeObject(arg1)];\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_set_ce5827ace4c694dc = function(arg0, arg1, arg2) {\n    getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n};\n\nmodule.exports.__wbg_new_abda76e883ba8a5f = function() {\n    const ret = new Error();\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) {\n    const ret = getObject(arg1).stack;\n    const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n    const len0 = WASM_VECTOR_LEN;\n    getInt32Memory0()[arg0 / 4 + 1] = len0;\n    getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) {\n    try {\n        console.error(getStringFromWasm0(arg0, arg1));\n    } finally {\n        wasm.__wbindgen_free(arg0, arg1);\n    }\n};\n\nmodule.exports.__wbg_error_06ae29e21839d332 = function(arg0, arg1) {\n    console.error(getStringFromWasm0(arg0, arg1));\n};\n\nmodule.exports.__wbg_get_57245cc7d7c7619d = function(arg0, arg1) {\n    const ret = getObject(arg0)[arg1 >>> 0];\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_length_6e3bbe7c8bd4dbd8 = function(arg0) {\n    const ret = getObject(arg0).length;\n    return ret;\n};\n\nmodule.exports.__wbg_new_1d9a920c6bfc44a8 = function() {\n    const ret = new Array();\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_is_function = function(arg0) {\n    const ret = typeof(getObject(arg0)) === 'function';\n    return ret;\n};\n\nmodule.exports.__wbg_new_268f7b7dd3430798 = function() {\n    const ret = new Map();\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_next_579e583d33566a86 = function(arg0) {\n    const ret = getObject(arg0).next;\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_next_aaef7c8aa5e212ac = function() { return handleError(function (arg0) {\n    const ret = getObject(arg0).next();\n    return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_done_1b73b0672e15f234 = function(arg0) {\n    const ret = getObject(arg0).done;\n    return ret;\n};\n\nmodule.exports.__wbg_value_1ccc36bc03462d71 = function(arg0) {\n    const ret = getObject(arg0).value;\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_iterator_6f9d4f28845f426c = function() {\n    const ret = Symbol.iterator;\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_get_765201544a2b6869 = function() { return handleError(function (arg0, arg1) {\n    const ret = Reflect.get(getObject(arg0), getObject(arg1));\n    return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_call_97ae9d8645dc388b = function() { return handleError(function (arg0, arg1) {\n    const ret = getObject(arg0).call(getObject(arg1));\n    return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_new_0b9bfdd97583284e = function() {\n    const ret = new Object();\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_isArray_27c46c67f498e15d = function(arg0) {\n    const ret = Array.isArray(getObject(arg0));\n    return ret;\n};\n\nmodule.exports.__wbg_push_740e4b286702d964 = function(arg0, arg1) {\n    const ret = getObject(arg0).push(getObject(arg1));\n    return ret;\n};\n\nmodule.exports.__wbg_instanceof_ArrayBuffer_e5e48f4762c5610b = function(arg0) {\n    let result;\n    try {\n        result = getObject(arg0) instanceof ArrayBuffer;\n    } catch {\n        result = false;\n    }\n    const ret = result;\n    return ret;\n};\n\nmodule.exports.__wbg_values_e42671acbf11ec04 = function(arg0) {\n    const ret = getObject(arg0).values();\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_new_8d2af00bc1e329ee = function(arg0, arg1) {\n    const ret = new Error(getStringFromWasm0(arg0, arg1));\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_setname_d26cefd43ea3a082 = function(arg0, arg1, arg2) {\n    getObject(arg0).name = getStringFromWasm0(arg1, arg2);\n};\n\nmodule.exports.__wbg_set_933729cf5b66ac11 = function(arg0, arg1, arg2) {\n    const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_isSafeInteger_dfa0593e8d7ac35a = function(arg0) {\n    const ret = Number.isSafeInteger(getObject(arg0));\n    return ret;\n};\n\nmodule.exports.__wbg_now_58886682b7e790d7 = function() {\n    const ret = Date.now();\n    return ret;\n};\n\nmodule.exports.__wbg_entries_65a76a413fc91037 = function(arg0) {\n    const ret = Object.entries(getObject(arg0));\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_buffer_3f3d764d4747d564 = function(arg0) {\n    const ret = getObject(arg0).buffer;\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_new_8c3f0052272a457a = function(arg0) {\n    const ret = new Uint8Array(getObject(arg0));\n    return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_set_83db9690f9353e79 = function(arg0, arg1, arg2) {\n    getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nmodule.exports.__wbg_length_9e1ae1900cb0fbd5 = function(arg0) {\n    const ret = getObject(arg0).length;\n    return ret;\n};\n\nmodule.exports.__wbg_instanceof_Uint8Array_971eeda69eb75003 = function(arg0) {\n    let result;\n    try {\n        result = getObject(arg0) instanceof Uint8Array;\n    } catch {\n        result = false;\n    }\n    const ret = result;\n    return ret;\n};\n\nmodule.exports.__wbg_has_8359f114ce042f5a = function() { return handleError(function (arg0, arg1) {\n    const ret = Reflect.has(getObject(arg0), getObject(arg1));\n    return ret;\n}, arguments) };\n\nmodule.exports.__wbindgen_debug_string = function(arg0, arg1) {\n    const ret = debugString(getObject(arg1));\n    const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n    const len0 = WASM_VECTOR_LEN;\n    getInt32Memory0()[arg0 / 4 + 1] = len0;\n    getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbindgen_throw = function(arg0, arg1) {\n    throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nmodule.exports.__wbindgen_memory = function() {\n    const ret = wasm.memory;\n    return addHeapObject(ret);\n};\n\nconst path = require('path').join(__dirname, 'polar_wasm_api_bg.wasm');\nconst bytes = require('fs').readFileSync(path);\n\nconst wasmModule = new WebAssembly.Module(bytes);\nconst wasmInstance = new WebAssembly.Instance(wasmModule, imports);\nwasm = wasmInstance.exports;\nmodule.exports.__wasm = wasm;\n\n",null,null,null,"import type {\n  PolicyEngine,\n  PolicyDecision,\n  PathOperation,\n  ExecutionMode,\n  BashOverrides,\n} from './engine.js';\nimport type { FactStore } from '../facts/store.js';\n\n// Resource classes for Oso registration\nclass User {\n  constructor(\n    public role: string,\n    public orgUnit?: string,\n  ) {}\n}\n\nclass Tool {\n  constructor(public name: string) {}\n}\n\nclass FilePath {\n  constructor(\n    public path: string,\n    public orgUnit: string,\n  ) {}\n}\n\nclass AgentSession {}\n\nexport class OsoPolicyEngine implements PolicyEngine {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private oso: any;\n  private roleConfigs: Map<string, Record<string, unknown>> = new Map();\n\n  private constructor() {}\n\n  static async create(polarFiles: string[], factStore: FactStore): Promise<OsoPolicyEngine> {\n    let OsoClass;\n    try {\n      const osoModule = await import('oso');\n      OsoClass = osoModule.Oso;\n    } catch {\n      throw new Error(\n        'oso package is not installed. Install it with: npm install oso\\n' +\n          'Or switch to the YAML policy engine: policy.engine: yaml',\n      );\n    }\n\n    const engine = new OsoPolicyEngine();\n    engine.oso = new OsoClass();\n\n    engine.oso.registerClass(User);\n    engine.oso.registerClass(Tool);\n    engine.oso.registerClass(FilePath);\n    engine.oso.registerClass(AgentSession);\n\n    for (const file of polarFiles) {\n      await engine.oso.loadFiles([file]);\n    }\n\n    const bindings = await factStore.getAllRoleBindings();\n    for (const binding of bindings) {\n      if (binding.config) {\n        engine.roleConfigs.set(binding.role, binding.config);\n      }\n    }\n\n    return engine;\n  }\n\n  evaluateTool(role: string, tool: string): PolicyDecision {\n    const user = new User(role);\n    const toolResource = new Tool(tool);\n\n    // isAllowed is async in oso, but we need sync for the interface.\n    // Use a synchronous check via queryRuleOnce if available,\n    // otherwise we cache results. For now, use a sync wrapper.\n    // NOTE: In practice, the Pi extension calls this in an async context,\n    // so we provide an async-compatible path.\n    try {\n      // oso's isAllowed returns a Promise<boolean> — but we need sync.\n      // This will be called from an async context in practice.\n      // For the sync interface, we do a best-effort check using queryRule.\n      const result = this.oso.isAllowedSync?.(user, 'invoke', toolResource);\n      if (result !== undefined) {\n        return result ? 'allow' : 'deny';\n      }\n    } catch {\n      // isAllowedSync not available\n    }\n\n    // Fallback: deny if we can't check synchronously\n    return 'deny';\n  }\n\n  async evaluateToolAsync(role: string, tool: string): Promise<PolicyDecision> {\n    const user = new User(role);\n    const toolResource = new Tool(tool);\n    const allowed = await this.oso.isAllowed(user, 'invoke', toolResource);\n    return allowed ? 'allow' : 'deny';\n  }\n\n  evaluatePath(\n    role: string,\n    orgUnit: string,\n    operation: PathOperation,\n    _path: string,\n  ): PolicyDecision {\n    const user = new User(role, orgUnit);\n    const filePath = new FilePath(_path, orgUnit);\n\n    try {\n      const result = this.oso.isAllowedSync?.(user, operation, filePath);\n      if (result !== undefined) {\n        return result ? 'allow' : 'deny';\n      }\n    } catch {\n      // fallback\n    }\n    return 'deny';\n  }\n\n  async evaluatePathAsync(\n    role: string,\n    orgUnit: string,\n    operation: PathOperation,\n    path: string,\n  ): Promise<PolicyDecision> {\n    const user = new User(role, orgUnit);\n    const filePath = new FilePath(path, orgUnit);\n    const allowed = await this.oso.isAllowed(user, operation, filePath);\n    return allowed ? 'allow' : 'deny';\n  }\n\n  requiresApproval(role: string, tool: string): boolean {\n    // Check if auto_approve is granted\n    try {\n      const user = new User(role);\n      const toolResource = new Tool(tool);\n      const result = this.oso.isAllowedSync?.(user, 'auto_approve', toolResource);\n      if (result !== undefined) return !result;\n    } catch {\n      // fallback\n    }\n    return true; // default: require approval\n  }\n\n  getExecutionMode(role: string): ExecutionMode {\n    const config = this.roleConfigs.get(role);\n    return (config?.execution_mode as ExecutionMode) ?? 'supervised';\n  }\n\n  getTemplateName(role: string): string {\n    const config = this.roleConfigs.get(role);\n    return (config?.prompt_template as string) ?? 'project-lead';\n  }\n\n  getBashOverrides(role: string): BashOverrides {\n    const config = this.roleConfigs.get(role);\n    const overrides = config?.bash_overrides as\n      | { additional_blocked?: string[]; additional_allowed?: string[] }\n      | undefined;\n    if (!overrides) return {};\n\n    return {\n      additionalBlocked: overrides.additional_blocked?.map((p) => new RegExp(p)),\n      additionalAllowed: overrides.additional_allowed?.map((p) => new RegExp(p)),\n    };\n  }\n\n  getTokenBudget(role: string): number {\n    const config = this.roleConfigs.get(role);\n    return (config?.token_budget_daily as number) ?? -1;\n  }\n}\n","import type { FactStore, RoleBinding, Relation } from './store.js';\n\nexport class OsoMemoryFactStore implements FactStore {\n  private bindings: RoleBinding[] = [];\n  private relations: Relation[] = [];\n\n  addRoleBinding(binding: RoleBinding): void {\n    this.bindings.push(binding);\n  }\n\n  addRelation(relation: Relation): void {\n    this.relations.push(relation);\n  }\n\n  async getRoles(userId: string): Promise<RoleBinding[]> {\n    return this.bindings.filter((b) => b.userId === userId);\n  }\n\n  async getAllRoleBindings(): Promise<RoleBinding[]> {\n    return [...this.bindings];\n  }\n\n  async getRelations(subject: string, predicate: string): Promise<Relation[]> {\n    return this.relations.filter((r) => r.subject === subject && r.predicate === predicate);\n  }\n}\n","// Config\nexport { type GovernanceConfig } from './lib/config/schema.js';\nexport { loadConfig, ConfigValidationError } from './lib/config/loader.js';\n\n// Policy engine\nexport {\n  type PolicyEngine,\n  type PolicyDecision,\n  type PathOperation,\n  type ExecutionMode,\n  type BashOverrides,\n} from './lib/policy/engine.js';\nexport { YamlPolicyEngine, type YamlRules, type YamlRole } from './lib/policy/yaml-engine.js';\nexport { createPolicyEngine } from './lib/policy/factory.js';\n\n// Identity\nexport { type IdentityProvider, type ResolvedIdentity } from './lib/identity/provider.js';\nexport { EnvIdentityProvider } from './lib/identity/env-provider.js';\nexport { LocalIdentityProvider } from './lib/identity/local-provider.js';\nexport { IdentityChain, createIdentityChain } from './lib/identity/chain.js';\n\n// Facts / permissions\nexport { type FactStore, type RoleBinding, type Relation } from './lib/facts/store.js';\nexport { YamlFactStore } from './lib/facts/yaml-store.js';\nexport { OsoMemoryFactStore } from './lib/facts/oso-memory-store.js';\n\n// Bash security\nexport { type BashClassification, BashClassifier } from './lib/bash/classifier.js';\nexport { SAFE_PATTERNS, DANGEROUS_PATTERNS } from './lib/bash/patterns.js';\n\n// DLP (Data Loss Prevention)\nexport {\n  DlpScanner,\n  DlpMasker,\n  SECRET_PATTERNS as DLP_SECRET_PATTERNS,\n  PII_PATTERNS as DLP_PII_PATTERNS,\n  compareSeverity,\n  type DlpAction,\n  type DlpMatch,\n  type DlpScanResult,\n  type DlpScannerConfig,\n  type DlpCustomPattern,\n  type DlpAllowlistEntry,\n  type DlpPatternDef,\n  type DlpSeverity,\n  type DlpCategory,\n  type MaskingConfig,\n} from './lib/dlp/index.js';\n\n// Dependency Guardian\nexport {\n  evaluateInstall,\n  type DependencyGuardianConfig,\n  type GuardianResult,\n} from './lib/deps/guardian.js';\nexport { parseInstallCommand, type ParsedInstall, type ParsedPackage } from './lib/deps/parser.js';\nexport {\n  levenshteinDistance,\n  normalizedSimilarity,\n  detectTyposquat,\n} from './lib/deps/levenshtein.js';\nexport { fetchRegistryMetadata, type RegistryMetadata } from './lib/deps/registry.js';\nexport {\n  queryVulnerabilities,\n  queryVulnerabilitiesBatch,\n  type VulnEntry,\n  type VulnerabilityResult,\n} from './lib/deps/vulnerabilities.js';\nexport { type DependencyGuardianConfigType } from './lib/config/schema.js';\n\n// Budget\nexport { BudgetTracker } from './lib/budget/tracker.js';\n\n// Config watcher\nexport { ConfigWatcher } from './lib/config/watcher.js';\n\n// Templates\nexport { TemplateSelector, type TemplateSelectorConfig } from './lib/templates/selector.js';\nexport { render as renderTemplate } from './lib/templates/renderer.js';\n\n// Audit\nexport { type AuditSink } from './lib/audit/sinks/sink.js';\nexport { type AuditRecord, type AuditEventType } from './lib/audit/schema.js';\nexport { AuditLogger } from './lib/audit/logger.js';\nexport { JsonlAuditSink } from './lib/audit/sinks/jsonl.js';\nexport { WebhookAuditSink } from './lib/audit/sinks/webhook.js';\n\n// HITL\nexport {\n  type ApprovalFlow,\n  type ApprovalResult,\n  type GovernanceToolCall,\n  type ConfirmUI,\n  type HitlConfig,\n  createApprovalFlow,\n} from './lib/hitl/approval.js';\nexport { CliApprover } from './lib/hitl/cli-approver.js';\nexport { WebhookApprover } from './lib/hitl/webhook-approver.js';\n\n// Wizard\nexport { startWizardServer, type WizardServerOptions } from './lib/wizard/index.js';\n","import { existsSync, readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport { Value } from '@sinclair/typebox/value';\nimport { GovernanceConfigSchema, type GovernanceConfig } from './schema.js';\nimport { DEFAULTS } from './defaults.js';\n\nfunction getConfigPaths(): (string | undefined)[] {\n  return [\n    process.env['PI_GOV_GOVERNANCE_CONFIG'],\n    '.pi/governance.yaml',\n    `${process.env['HOME']}/.pi/agent/governance.yaml`,\n  ];\n}\n\nexport function loadConfig(): { config: GovernanceConfig; source: string } {\n  for (const path of getConfigPaths()) {\n    if (path && existsSync(path)) {\n      const raw = readFileSync(path, 'utf-8');\n      const parsed = parseYaml(raw);\n\n      const resolved = resolveEnvVars(parsed);\n\n      const errors = [...Value.Errors(GovernanceConfigSchema, resolved)];\n      if (errors.length > 0) {\n        throw new ConfigValidationError(\n          path,\n          errors.map((e) => ({ path: e.path, message: e.message })),\n        );\n      }\n\n      const config = Value.Default(GovernanceConfigSchema, resolved) as GovernanceConfig;\n      return { config, source: path };\n    }\n  }\n\n  return { config: DEFAULTS, source: 'built-in' };\n}\n\nfunction resolveEnvVars(obj: unknown): unknown {\n  if (typeof obj === 'string') {\n    return obj.replace(/\\$\\{(\\w+)\\}/g, (_, name: string) => process.env[name] ?? '');\n  }\n  if (Array.isArray(obj)) return obj.map(resolveEnvVars);\n  if (obj && typeof obj === 'object') {\n    return Object.fromEntries(\n      Object.entries(obj as Record<string, unknown>).map(([k, v]) => [k, resolveEnvVars(v)]),\n    );\n  }\n  return obj;\n}\n\nexport class ConfigValidationError extends Error {\n  constructor(path: string, errors: Array<{ path: string; message: string }>) {\n    const details = errors.map((e) => `  ${e.path}: ${e.message}`).join('\\n');\n    super(`Invalid governance config at ${path}:\\n${details}`);\n    this.name = 'ConfigValidationError';\n  }\n}\n","import { Type, type Static } from '@sinclair/typebox';\n\nconst AuthEnvConfig = Type.Object({\n  user_var: Type.String({ default: 'PI_GOV_USER' }),\n  role_var: Type.String({ default: 'PI_GOV_ROLE' }),\n  org_unit_var: Type.String({ default: 'PI_GOV_ORG_UNIT' }),\n});\n\nconst AuthLocalConfig = Type.Object({\n  users_file: Type.String({ default: './users.yaml' }),\n});\n\nconst AuthConfig = Type.Object({\n  provider: Type.Union([Type.Literal('env'), Type.Literal('local'), Type.Literal('oidc')], {\n    default: 'env',\n  }),\n  env: Type.Optional(AuthEnvConfig),\n  local: Type.Optional(AuthLocalConfig),\n});\n\nexport type AuthConfigType = Static<typeof AuthConfig>;\n\nconst YamlPolicyConfig = Type.Object({\n  rules_file: Type.String({ default: './governance-rules.yaml' }),\n});\n\nconst OsoPolicyConfig = Type.Object({\n  polar_files: Type.Array(Type.String(), {\n    default: ['./policies/base.polar', './policies/tools.polar'],\n  }),\n});\n\nconst PolicyConfig = Type.Object({\n  engine: Type.Union([Type.Literal('yaml'), Type.Literal('oso')], { default: 'yaml' }),\n  yaml: Type.Optional(YamlPolicyConfig),\n  oso: Type.Optional(OsoPolicyConfig),\n});\n\nconst TemplatesConfig = Type.Object({\n  directory: Type.String({ default: './templates/' }),\n  default: Type.String({ default: 'project-lead' }),\n});\n\nconst HitlWebhookConfig = Type.Object({\n  url: Type.String(),\n});\n\nconst HitlConfig = Type.Object({\n  default_mode: Type.Union(\n    [Type.Literal('autonomous'), Type.Literal('supervised'), Type.Literal('dry_run')],\n    { default: 'supervised' },\n  ),\n  approval_channel: Type.Union([Type.Literal('cli'), Type.Literal('webhook')], { default: 'cli' }),\n  timeout_seconds: Type.Number({ default: 300, minimum: 10, maximum: 3600 }),\n  webhook: Type.Optional(HitlWebhookConfig),\n});\n\nconst JsonlSinkConfig = Type.Object({\n  type: Type.Literal('jsonl'),\n  path: Type.String({ default: '~/.pi/agent/audit.jsonl' }),\n});\n\nconst WebhookSinkConfig = Type.Object({\n  type: Type.Literal('webhook'),\n  url: Type.String(),\n});\n\nconst PostgresSinkConfig = Type.Object({\n  type: Type.Literal('postgres'),\n  connection: Type.String(),\n});\n\nconst AuditSinkConfig = Type.Union([JsonlSinkConfig, WebhookSinkConfig, PostgresSinkConfig]);\n\nconst AuditConfig = Type.Object({\n  sinks: Type.Array(AuditSinkConfig, {\n    default: [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }],\n  }),\n});\n\nconst OrgUnitOverride = Type.Object({\n  hitl: Type.Optional(Type.Partial(HitlConfig)),\n  policy: Type.Optional(\n    Type.Object({\n      extra_polar: Type.Optional(Type.String()),\n      extra_rules: Type.Optional(Type.String()),\n    }),\n  ),\n});\n\n// --- DLP (Data Loss Prevention) ---\n\nconst DlpMaskingConfig = Type.Object({\n  strategy: Type.Union([Type.Literal('partial'), Type.Literal('full'), Type.Literal('hash')], {\n    default: 'partial',\n  }),\n  show_chars: Type.Optional(Type.Number({ default: 4, minimum: 0 })),\n  placeholder: Type.Optional(Type.String({ default: '***' })),\n});\n\nconst DlpCustomPatternConfig = Type.Object({\n  name: Type.String(),\n  pattern: Type.String(),\n  severity: Type.Union([\n    Type.Literal('low'),\n    Type.Literal('medium'),\n    Type.Literal('high'),\n    Type.Literal('critical'),\n  ]),\n  action: Type.Optional(\n    Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n  ),\n});\n\nconst DlpAllowlistEntryConfig = Type.Object({\n  pattern: Type.String(),\n});\n\nconst DlpRoleOverrideConfig = Type.Object({\n  enabled: Type.Optional(Type.Boolean()),\n  mode: Type.Optional(\n    Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n  ),\n  on_input: Type.Optional(\n    Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n  ),\n  on_output: Type.Optional(\n    Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n  ),\n});\n\nconst DlpConfig = Type.Object({\n  enabled: Type.Boolean({ default: false }),\n  mode: Type.Optional(\n    Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')], {\n      default: 'audit',\n    }),\n  ),\n  on_input: Type.Optional(\n    Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n  ),\n  on_output: Type.Optional(\n    Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n  ),\n  masking: Type.Optional(DlpMaskingConfig),\n  severity_threshold: Type.Optional(\n    Type.Union(\n      [Type.Literal('low'), Type.Literal('medium'), Type.Literal('high'), Type.Literal('critical')],\n      { default: 'low' },\n    ),\n  ),\n  built_in: Type.Optional(\n    Type.Object({\n      secrets: Type.Boolean({ default: true }),\n      pii: Type.Boolean({ default: true }),\n    }),\n  ),\n  custom_patterns: Type.Optional(Type.Array(DlpCustomPatternConfig)),\n  allowlist: Type.Optional(Type.Array(DlpAllowlistEntryConfig)),\n  role_overrides: Type.Optional(Type.Record(Type.String(), DlpRoleOverrideConfig)),\n});\n\nexport type DlpConfigType = Static<typeof DlpConfig>;\n\n// --- Dependency Guardian ---\n\nconst DependencyGuardianChecksConfig = Type.Object({\n  existence: Type.Boolean({ default: true }),\n  reputation: Type.Boolean({ default: true }),\n  typosquatting: Type.Boolean({ default: true }),\n  install_scripts: Type.Boolean({ default: true }),\n  vulnerabilities: Type.Boolean({ default: true }),\n});\n\nconst DependencyGuardianConfig = Type.Object({\n  enabled: Type.Boolean({ default: true }),\n  checks: Type.Optional(DependencyGuardianChecksConfig),\n  risk_thresholds: Type.Optional(\n    Type.Object({\n      min_age_days: Type.Number({ default: 30, minimum: 0 }),\n      min_weekly_downloads: Type.Number({ default: 100, minimum: 0 }),\n    }),\n  ),\n  on_risk: Type.Optional(\n    Type.Union([Type.Literal('escalate'), Type.Literal('block'), Type.Literal('audit')], {\n      default: 'escalate',\n    }),\n  ),\n  allowlist: Type.Optional(Type.Array(Type.String())),\n  blocklist: Type.Optional(Type.Array(Type.String())),\n  blocklist_patterns: Type.Optional(Type.Array(Type.String())),\n  custom_registry_bypass: Type.Boolean({ default: true }),\n});\n\nexport type DependencyGuardianConfigType = Static<typeof DependencyGuardianConfig>;\n\nexport const GovernanceConfigSchema = Type.Object({\n  auth: Type.Optional(AuthConfig),\n  policy: Type.Optional(PolicyConfig),\n  templates: Type.Optional(TemplatesConfig),\n  hitl: Type.Optional(HitlConfig),\n  audit: Type.Optional(AuditConfig),\n  dlp: Type.Optional(DlpConfig),\n  dependency_guardian: Type.Optional(DependencyGuardianConfig),\n  org_units: Type.Optional(Type.Record(Type.String(), OrgUnitOverride)),\n});\n\nexport type GovernanceConfig = Static<typeof GovernanceConfigSchema>;\n","import type { GovernanceConfig } from './schema.js';\n\nexport const DEFAULTS: GovernanceConfig = {\n  auth: {\n    provider: 'env',\n    env: {\n      user_var: 'PI_GOV_USER',\n      role_var: 'PI_GOV_ROLE',\n      org_unit_var: 'PI_GOV_ORG_UNIT',\n    },\n  },\n  policy: {\n    engine: 'yaml',\n    yaml: {\n      rules_file: './governance-rules.yaml',\n    },\n  },\n  templates: {\n    directory: './templates/',\n    default: 'project-lead',\n  },\n  hitl: {\n    default_mode: 'supervised',\n    approval_channel: 'cli',\n    timeout_seconds: 300,\n  },\n  audit: {\n    sinks: [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }],\n  },\n  dlp: {\n    enabled: true,\n    mode: 'audit',\n    on_input: 'block',\n    on_output: 'mask',\n    masking: {\n      strategy: 'partial',\n      show_chars: 4,\n      placeholder: '***',\n    },\n    severity_threshold: 'low',\n    built_in: {\n      secrets: true,\n      pii: true,\n    },\n  },\n};\n","import { readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport { minimatch } from 'minimatch';\nimport type {\n  PolicyEngine,\n  PolicyDecision,\n  PathOperation,\n  ExecutionMode,\n  BashOverrides,\n} from './engine.js';\n\nexport interface YamlRole {\n  allowed_tools: string[];\n  blocked_tools: string[];\n  prompt_template: string;\n  execution_mode: ExecutionMode;\n  human_approval: {\n    required_for: string[];\n    auto_approve?: string[];\n  };\n  token_budget_daily: number;\n  allowed_paths: string[];\n  blocked_paths: string[];\n  bash_overrides?: {\n    additional_blocked?: string[];\n    additional_allowed?: string[];\n  };\n}\n\nexport interface YamlRules {\n  roles: Record<string, YamlRole>;\n}\n\nexport class YamlPolicyEngine implements PolicyEngine {\n  private rules: YamlRules;\n\n  constructor(rulesFilePathOrRules: string | YamlRules) {\n    if (typeof rulesFilePathOrRules === 'string') {\n      const raw = readFileSync(rulesFilePathOrRules, 'utf-8');\n      this.rules = parseYaml(raw) as YamlRules;\n    } else {\n      this.rules = rulesFilePathOrRules;\n    }\n  }\n\n  private getRole(role: string): YamlRole {\n    const r = this.rules.roles[role];\n    if (!r) {\n      throw new Error(\n        `Unknown role: ${role}. Available roles: ${Object.keys(this.rules.roles).join(', ')}`,\n      );\n    }\n    return r;\n  }\n\n  evaluateTool(role: string, tool: string): PolicyDecision {\n    const r = this.getRole(role);\n\n    // Check blocked list first\n    if (r.blocked_tools.includes(tool)) return 'deny';\n\n    // Check allowed list\n    if (r.allowed_tools.includes('all') || r.allowed_tools.includes(tool)) {\n      return 'allow';\n    }\n\n    // Not in either list — deny by default\n    return 'deny';\n  }\n\n  evaluatePath(\n    role: string,\n    _orgUnit: string,\n    _operation: PathOperation,\n    path: string,\n  ): PolicyDecision {\n    const r = this.getRole(role);\n\n    // Check blocked paths first (takes precedence)\n    for (const pattern of r.blocked_paths) {\n      if (minimatch(path, pattern, { dot: true })) {\n        return 'deny';\n      }\n    }\n\n    // Check allowed paths\n    for (const pattern of r.allowed_paths) {\n      const resolved = pattern.replace('{{project_path}}', process.cwd());\n      if (minimatch(path, resolved, { dot: true })) {\n        return 'allow';\n      }\n    }\n\n    // Not in allowed paths — deny\n    return 'deny';\n  }\n\n  requiresApproval(role: string, tool: string): boolean {\n    const r = this.getRole(role);\n\n    // Auto-approve takes precedence\n    if (r.human_approval.auto_approve?.includes(tool)) return false;\n\n    // Check required list\n    if (r.human_approval.required_for.includes('all')) return true;\n    return r.human_approval.required_for.includes(tool);\n  }\n\n  getExecutionMode(role: string): ExecutionMode {\n    return this.getRole(role).execution_mode;\n  }\n\n  getTemplateName(role: string): string {\n    return this.getRole(role).prompt_template;\n  }\n\n  getBashOverrides(role: string): BashOverrides {\n    const r = this.getRole(role);\n    const overrides = r.bash_overrides;\n    if (!overrides) return {};\n\n    return {\n      additionalBlocked: overrides.additional_blocked?.map((p) => new RegExp(p)),\n      additionalAllowed: overrides.additional_allowed?.map((p) => new RegExp(p)),\n    };\n  }\n\n  getTokenBudget(role: string): number {\n    return this.getRole(role).token_budget_daily;\n  }\n}\n","import type { PolicyEngine } from './engine.js';\nimport { YamlPolicyEngine } from './yaml-engine.js';\n\ninterface PolicyConfig {\n  engine?: 'yaml' | 'oso';\n  yaml?: { rules_file?: string };\n  oso?: { polar_files?: string[] };\n}\n\nexport async function createPolicyEngine(config?: PolicyConfig): Promise<PolicyEngine> {\n  const engine = config?.engine ?? 'yaml';\n\n  if (engine === 'yaml') {\n    const rulesFile = config?.yaml?.rules_file ?? './governance-rules.yaml';\n    return new YamlPolicyEngine(rulesFile);\n  }\n\n  if (engine === 'oso') {\n    const { OsoPolicyEngine } = await import('./oso-engine.js');\n    const { OsoMemoryFactStore } = await import('../facts/oso-memory-store.js');\n\n    const polarFiles = config?.oso?.polar_files ?? [\n      './policies/base.polar',\n      './policies/tools.polar',\n    ];\n\n    const factStore = new OsoMemoryFactStore();\n    return OsoPolicyEngine.create(polarFiles, factStore);\n  }\n\n  throw new Error(`Unknown policy engine: ${engine}. Must be 'yaml' or 'oso'.`);\n}\n","import type { IdentityProvider, ResolvedIdentity } from './provider.js';\n\nexport class EnvIdentityProvider implements IdentityProvider {\n  name = 'env';\n\n  constructor(\n    private userVar: string = 'PI_GOV_USER',\n    private roleVar: string = 'PI_GOV_ROLE',\n    private orgUnitVar: string = 'PI_GOV_ORG_UNIT',\n  ) {}\n\n  async resolve(): Promise<ResolvedIdentity | null> {\n    const userId = process.env[this.userVar];\n    const role = process.env[this.roleVar];\n    const orgUnit = process.env[this.orgUnitVar];\n\n    if (!userId || !role) return null;\n\n    return {\n      userId,\n      role,\n      orgUnit: orgUnit ?? 'default',\n      source: 'env',\n    };\n  }\n}\n","import { readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport type { IdentityProvider, ResolvedIdentity } from './provider.js';\n\ninterface UserEntry {\n  role: string;\n  org_unit?: string;\n}\n\nexport class LocalIdentityProvider implements IdentityProvider {\n  name = 'local';\n  private users: Record<string, UserEntry>;\n\n  constructor(usersFilePath: string) {\n    const raw = readFileSync(usersFilePath, 'utf-8');\n    this.users = parseYaml(raw) as Record<string, UserEntry>;\n  }\n\n  async resolve(): Promise<ResolvedIdentity | null> {\n    // Try to determine the current system username\n    const username = process.env.USER || process.env.USERNAME;\n    if (!username) return null;\n\n    const entry = this.users[username];\n    if (!entry) return null;\n\n    return {\n      userId: username,\n      role: entry.role,\n      orgUnit: entry.org_unit ?? 'default',\n      source: 'local',\n    };\n  }\n}\n","import type { IdentityProvider, ResolvedIdentity } from './provider.js';\nimport type { AuthConfigType } from '../config/schema.js';\nimport { EnvIdentityProvider } from './env-provider.js';\nimport { LocalIdentityProvider } from './local-provider.js';\n\nexport class IdentityChain {\n  private providers: IdentityProvider[];\n\n  constructor(providers: IdentityProvider[]) {\n    this.providers = providers;\n  }\n\n  async resolve(): Promise<ResolvedIdentity> {\n    for (const provider of this.providers) {\n      const identity = await provider.resolve();\n      if (identity) return identity;\n    }\n\n    // Fallback: default restricted identity\n    return {\n      userId: 'unknown',\n      role: 'analyst', // most restrictive role by default\n      orgUnit: 'default',\n      source: 'fallback',\n    };\n  }\n}\n\nexport function createIdentityChain(config?: AuthConfigType): IdentityChain {\n  const providers: IdentityProvider[] = [];\n\n  // Always try env first (fastest, works in CI)\n  providers.push(\n    new EnvIdentityProvider(\n      config?.env?.user_var,\n      config?.env?.role_var,\n      config?.env?.org_unit_var,\n    ),\n  );\n\n  // Then try local file if configured\n  if (config?.provider === 'local' && config.local?.users_file) {\n    try {\n      providers.push(new LocalIdentityProvider(config.local.users_file));\n    } catch {\n      // users file not found — skip this provider\n    }\n  }\n\n  return new IdentityChain(providers);\n}\n","import { readFileSync } from 'node:fs';\nimport { parse as parseYaml } from 'yaml';\nimport type { FactStore, RoleBinding, Relation } from './store.js';\n\ninterface YamlUserEntry {\n  role: string;\n  org_unit?: string;\n  config?: Record<string, unknown>;\n}\n\ntype YamlUsersFile = Record<string, YamlUserEntry>;\n\nexport class YamlFactStore implements FactStore {\n  private bindings: RoleBinding[];\n\n  constructor(usersFilePath: string);\n  constructor(data: YamlUsersFile);\n  constructor(input: string | YamlUsersFile) {\n    if (typeof input === 'string') {\n      const raw = readFileSync(input, 'utf-8');\n      const parsed = parseYaml(raw) as YamlUsersFile;\n      this.bindings = this.parseUsers(parsed);\n    } else {\n      this.bindings = this.parseUsers(input);\n    }\n  }\n\n  private parseUsers(users: YamlUsersFile): RoleBinding[] {\n    return Object.entries(users).map(([userId, entry]) => ({\n      userId,\n      role: entry.role,\n      orgUnit: entry.org_unit ?? 'default',\n      config: entry.config,\n    }));\n  }\n\n  async getRoles(userId: string): Promise<RoleBinding[]> {\n    return this.bindings.filter((b) => b.userId === userId);\n  }\n\n  async getAllRoleBindings(): Promise<RoleBinding[]> {\n    return [...this.bindings];\n  }\n\n  async getRelations(_subject: string, _predicate: string): Promise<Relation[]> {\n    // YAML store does not support relations — return empty\n    return [];\n  }\n}\n","export const SAFE_PATTERNS: RegExp[] = [\n  // File viewing\n  /^(cat|head|tail|less|more)\\s/,\n  /^(file|stat|wc|md5sum|sha256sum)\\s/,\n\n  // Directory listing\n  /^(ls|ll|la|tree|du|df)\\b/,\n  /^(pwd|cd)\\b/,\n\n  // Searching\n  /^(grep|rg|ag|ack|find|fd|locate)\\s/,\n  /^(which|whereis|type|command)\\s/,\n\n  // Text processing (read-only)\n  /^(sort|uniq|cut|awk|sed)\\s.*(?!-i)/, // sed without -i (in-place)\n  /^(tr|diff|comm|join|paste)\\s/,\n  /^(jq|yq|xmlstarlet)\\s/,\n\n  // Git (read-only operations)\n  /^git\\s+(log|status|diff|show|blame|branch|tag|remote|stash list)\\b/,\n  /^git\\s+(ls-files|ls-tree|rev-parse|describe)\\b/,\n\n  // System info\n  /^(whoami|id|groups|uname|hostname|date|uptime|env|printenv)\\b/,\n  /^(echo|printf)\\s/,\n\n  // Package info (not install)\n  /^(npm|yarn|pnpm)\\s+(list|ls|info|show|view|outdated|audit)\\b/,\n  /^pip\\s+(list|show|freeze)\\b/,\n  /^(node|python|ruby|go)\\s+--version\\b/,\n  /^(node|python|ruby)\\s+-e\\s/,\n\n  // Networking (read-only)\n  /^(ping|dig|nslookup|host|traceroute|tracepath)\\s/,\n  /^curl\\s.*--head\\b/,\n  /^curl\\s.*-I\\b/,\n\n  // Additional file viewing / inspection\n  /^(basename|dirname|realpath|readlink)\\s/,\n  /^(xxd|od|hexdump)\\s/,\n  /^(strings|nm|objdump)\\s/,\n\n  // Additional search / navigation\n  /^(xargs)\\s/,\n  /^(tee)\\s/,\n\n  // Additional text processing (read-only)\n  /^(fmt|fold|column|expand|unexpand)\\s/,\n  /^(tac|rev|nl)\\s/,\n  /^(yes|seq|shuf)\\s/,\n\n  // Additional system info\n  /^(lsof|ps|top|htop|vmstat|iostat|free|df)\\b/,\n  /^(lscpu|lsblk|lsusb|lspci)\\b/,\n  /^(nproc|getconf)\\b/,\n\n  // Additional git read-only\n  /^git\\s+(config\\s+--get|config\\s+-l|shortlog|reflog|cherry)\\b/,\n  /^git\\s+(cat-file|count-objects|fsck|verify-pack)\\b/,\n];\n\nexport const DANGEROUS_PATTERNS: RegExp[] = [\n  // Destructive file operations\n  /\\brm\\s+(-[a-zA-Z]*r|-[a-zA-Z]*f|--recursive|--force)\\b/,\n  /\\brm\\s+-[a-zA-Z]*rf\\b/,\n  /\\bshred\\b/,\n\n  // Privilege escalation\n  /\\bsudo\\b/,\n  /\\bsu\\s+-?\\s*\\w/,\n  /\\bdoas\\b/,\n\n  // Permission/ownership changes\n  /\\bchmod\\b/,\n  /\\bchown\\b/,\n  /\\bchgrp\\b/,\n\n  // Disk/partition operations\n  /\\bdd\\b.*\\bof=/,\n  /\\bmkfs\\b/,\n  /\\bfdisk\\b/,\n  /\\bparted\\b/,\n  /\\bmount\\b/,\n  /\\bumount\\b/,\n\n  // Remote code execution\n  /\\bcurl\\b.*\\|\\s*(bash|sh|zsh|python|perl|ruby)\\b/,\n  /\\bwget\\b.*\\|\\s*(bash|sh|zsh|python|perl|ruby)\\b/,\n  /\\bcurl\\b.*>\\s*.*\\.sh\\s*&&/,\n\n  // Remote access\n  /\\bssh\\b/,\n  /\\bscp\\b/,\n  /\\brsync\\b.*:\\//,\n  /\\bnc\\s+(-[a-zA-Z]*l|-[a-zA-Z]*p|--listen)\\b/,\n  /\\bncat\\b/,\n  /\\bsocat\\b/,\n  /\\btelnet\\b/,\n\n  // System modification\n  /\\bsystemctl\\s+(start|stop|restart|enable|disable)\\b/,\n  /\\bservice\\s+\\w+\\s+(start|stop|restart)\\b/,\n  /\\biptables\\b/,\n  /\\bufw\\b/,\n  /\\bfirewall-cmd\\b/,\n\n  // Package installation (can run arbitrary post-install scripts)\n  /\\bnpm\\s+(install|i|add|ci)\\b/,\n  /\\byarn\\s+(add|install)\\b/,\n  /\\bpnpm\\s+(add|install|i)\\b/,\n  /\\bpip\\s+install\\b/,\n  /\\bapt(-get)?\\s+install\\b/,\n  /\\bbrew\\s+install\\b/,\n  /\\bcargo\\s+install\\b/,\n\n  // Environment variable manipulation (can leak secrets)\n  /\\bexport\\b.*(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)/i,\n\n  // Cron / scheduled tasks\n  /\\bcrontab\\b/,\n  /\\bat\\s+/,\n\n  // Container escape vectors\n  /\\bdocker\\s+(run|exec|build|push|pull)\\b/,\n  /\\bkubectl\\s+(exec|run|apply|delete)\\b/,\n\n  // Process manipulation\n  /\\bkill\\b/,\n  /\\bkillall\\b/,\n  /\\bpkill\\b/,\n\n  // History manipulation\n  /\\bhistory\\s+-c\\b/,\n  /\\bunset\\s+HISTFILE\\b/,\n\n  // Compiler/build (can execute arbitrary code)\n  /\\bmake\\s/,\n  /\\bgcc\\b/,\n  /\\bg\\+\\+/,\n\n  // Governance config tampering — shell-based writes to governance files\n  /(cat|echo|printf)\\s.*>\\s*.*governance(-rules)?\\.yaml/,\n  /\\btee\\s+.*governance(-rules)?\\.yaml/,\n  /sed\\s+-i.*governance(-rules)?\\.yaml/,\n  /(cp|mv|rm)\\s.*governance(-rules)?\\.yaml/,\n  /(cat|echo|printf)\\s.*>\\s*.*\\.pi\\/governance/,\n  /\\btee\\s+.*\\.pi\\/governance/,\n  /sed\\s+-i.*\\.pi\\/governance/,\n  /(cp|mv|rm)\\s.*\\.pi\\/governance/,\n];\n","import { SAFE_PATTERNS, DANGEROUS_PATTERNS } from './patterns.js';\nimport type { BashOverrides } from '../policy/engine.js';\n\nexport type BashClassification = 'safe' | 'dangerous' | 'needs_review';\n\nexport class BashClassifier {\n  private safePatterns: RegExp[];\n  private dangerousPatterns: RegExp[];\n\n  constructor(overrides?: BashOverrides) {\n    this.safePatterns = [...SAFE_PATTERNS, ...(overrides?.additionalAllowed ?? [])];\n    this.dangerousPatterns = [...DANGEROUS_PATTERNS, ...(overrides?.additionalBlocked ?? [])];\n  }\n\n  classify(command: string): BashClassification {\n    const trimmed = command.trim();\n\n    // Check dangerous patterns against the full unsplit command first.\n    // This catches patterns like \"curl ... | bash\" that span pipe boundaries.\n    for (const pattern of this.dangerousPatterns) {\n      if (pattern.test(trimmed)) return 'dangerous';\n    }\n\n    // Multi-command detection: if the command contains pipes, semicolons,\n    // or && / ||, classify each segment independently and return the\n    // most restrictive classification\n    const segments = this.splitCommand(trimmed);\n\n    if (segments.length > 1) {\n      const classifications = segments.map((s) => this.classifySingle(s));\n      if (classifications.includes('dangerous')) return 'dangerous';\n      if (classifications.includes('needs_review')) return 'needs_review';\n      return 'safe';\n    }\n\n    return this.classifySingle(trimmed);\n  }\n\n  private classifySingle(command: string): BashClassification {\n    const trimmed = command.trim();\n\n    // Check dangerous first (takes precedence)\n    for (const pattern of this.dangerousPatterns) {\n      if (pattern.test(trimmed)) return 'dangerous';\n    }\n\n    // Check safe\n    for (const pattern of this.safePatterns) {\n      if (pattern.test(trimmed)) return 'safe';\n    }\n\n    // Default: needs review\n    return 'needs_review';\n  }\n\n  private splitCommand(command: string): string[] {\n    // Split on pipes, semicolons, && and || while respecting quotes\n    // This is a simplified parser — not a full shell parser\n    const segments: string[] = [];\n    let current = '';\n    let inSingleQuote = false;\n    let inDoubleQuote = false;\n    let escaped = false;\n\n    for (let i = 0; i < command.length; i++) {\n      const char = command[i]!;\n\n      if (escaped) {\n        current += char;\n        escaped = false;\n        continue;\n      }\n\n      if (char === '\\\\') {\n        escaped = true;\n        current += char;\n        continue;\n      }\n\n      if (char === \"'\" && !inDoubleQuote) {\n        inSingleQuote = !inSingleQuote;\n        current += char;\n        continue;\n      }\n\n      if (char === '\"' && !inSingleQuote) {\n        inDoubleQuote = !inDoubleQuote;\n        current += char;\n        continue;\n      }\n\n      if (!inSingleQuote && !inDoubleQuote) {\n        if (char === '|' && command[i + 1] !== '|') {\n          segments.push(current.trim());\n          current = '';\n          continue;\n        }\n        if (char === ';') {\n          segments.push(current.trim());\n          current = '';\n          continue;\n        }\n        if (char === '&' && command[i + 1] === '&') {\n          segments.push(current.trim());\n          current = '';\n          i++; // skip second &\n          continue;\n        }\n        if (char === '|' && command[i + 1] === '|') {\n          segments.push(current.trim());\n          current = '';\n          i++; // skip second |\n          continue;\n        }\n      }\n\n      current += char;\n    }\n\n    if (current.trim()) segments.push(current.trim());\n    return segments.filter((s) => s.length > 0);\n  }\n}\n","export type DlpSeverity = 'low' | 'medium' | 'high' | 'critical';\nexport type DlpCategory = 'secret' | 'pii' | 'custom';\n\nexport interface DlpPatternDef {\n  name: string;\n  pattern: RegExp;\n  severity: DlpSeverity;\n  category: DlpCategory;\n}\n\nexport const SECRET_PATTERNS: DlpPatternDef[] = [\n  // AWS\n  {\n    name: 'aws_access_key',\n    pattern: /\\b(AKIA[0-9A-Z]{16})\\b/g,\n    severity: 'critical',\n    category: 'secret',\n  },\n  {\n    name: 'aws_secret_key',\n    pattern: /\\b([A-Za-z0-9/+=]{40})(?=\\s|$|\"|')/g,\n    severity: 'critical',\n    category: 'secret',\n  },\n\n  // GitHub\n  {\n    name: 'github_pat',\n    pattern: /\\b(ghp_[A-Za-z0-9]{36,})\\b/g,\n    severity: 'critical',\n    category: 'secret',\n  },\n  {\n    name: 'github_oauth',\n    pattern: /\\b(gho_[A-Za-z0-9]{36,})\\b/g,\n    severity: 'high',\n    category: 'secret',\n  },\n  {\n    name: 'github_app_token',\n    pattern: /\\b(ghu_[A-Za-z0-9]{36,})\\b/g,\n    severity: 'high',\n    category: 'secret',\n  },\n\n  // Anthropic\n  {\n    name: 'anthropic_api_key',\n    pattern: /\\b(sk-ant-api03-[A-Za-z0-9_-]{90,})\\b/g,\n    severity: 'critical',\n    category: 'secret',\n  },\n\n  // OpenAI\n  {\n    name: 'openai_api_key',\n    pattern: /\\b(sk-[A-Za-z0-9]{20,}T3BlbkFJ[A-Za-z0-9]{20,})\\b/g,\n    severity: 'critical',\n    category: 'secret',\n  },\n\n  // JWT\n  {\n    name: 'jwt_token',\n    pattern: /\\b(eyJ[A-Za-z0-9_-]{10,}\\.eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,})\\b/g,\n    severity: 'high',\n    category: 'secret',\n  },\n\n  // Private key headers\n  {\n    name: 'private_key',\n    pattern: /-----BEGIN\\s+(RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/g,\n    severity: 'critical',\n    category: 'secret',\n  },\n\n  // Database connection strings\n  {\n    name: 'database_url',\n    pattern: /\\b((?:postgres|mysql|mongodb|redis):\\/\\/[^\\s'\"]{10,})\\b/g,\n    severity: 'high',\n    category: 'secret',\n  },\n\n  // Slack\n  {\n    name: 'slack_token',\n    pattern: /\\b(xox[bpras]-[A-Za-z0-9-]{10,})\\b/g,\n    severity: 'high',\n    category: 'secret',\n  },\n\n  // Stripe\n  {\n    name: 'stripe_key',\n    pattern: /\\b([rs]k_(?:live|test)_[A-Za-z0-9]{20,})\\b/g,\n    severity: 'critical',\n    category: 'secret',\n  },\n\n  // npm\n  {\n    name: 'npm_token',\n    pattern: /\\b(npm_[A-Za-z0-9]{36,})\\b/g,\n    severity: 'high',\n    category: 'secret',\n  },\n\n  // SendGrid\n  {\n    name: 'sendgrid_key',\n    pattern: /\\b(SG\\.[A-Za-z0-9_-]{22,}\\.[A-Za-z0-9_-]{22,})\\b/g,\n    severity: 'high',\n    category: 'secret',\n  },\n\n  // Generic API key patterns (env-var style assignments)\n  {\n    name: 'generic_api_key',\n    pattern:\n      /\\b(?:API_KEY|API_SECRET|ACCESS_TOKEN|AUTH_TOKEN|SECRET_KEY)\\s*[=:]\\s*['\"]?([A-Za-z0-9_-]{16,})['\"]?/gi,\n    severity: 'medium',\n    category: 'secret',\n  },\n\n  // High-entropy string near keyword context\n  {\n    name: 'generic_secret_assignment',\n    pattern: /\\b(?:password|passwd|secret|token|credential)\\s*[=:]\\s*['\"]([^'\"]{8,})['\"]?/gi,\n    severity: 'medium',\n    category: 'secret',\n  },\n];\n\nexport const PII_PATTERNS: DlpPatternDef[] = [\n  // SSN (US)\n  {\n    name: 'ssn',\n    pattern: /\\b(\\d{3}-\\d{2}-\\d{4})\\b/g,\n    severity: 'critical',\n    category: 'pii',\n  },\n\n  // Credit card numbers\n  {\n    name: 'credit_card',\n    pattern:\n      /\\b(4\\d{3}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}|5[1-5]\\d{2}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}|3[47]\\d{2}[\\s-]?\\d{6}[\\s-]?\\d{5}|6(?:011|5\\d{2})[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4})\\b/g,\n    severity: 'critical',\n    category: 'pii',\n  },\n\n  // Email address\n  {\n    name: 'email',\n    pattern: /\\b([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,})\\b/g,\n    severity: 'low',\n    category: 'pii',\n  },\n\n  // US phone number\n  {\n    name: 'phone_us',\n    pattern: /\\b(\\+?1?[-.\\s]?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4})\\b/g,\n    severity: 'medium',\n    category: 'pii',\n  },\n\n  // IPv4 address\n  {\n    name: 'ipv4',\n    pattern:\n      /\\b((?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))\\b/g,\n    severity: 'low',\n    category: 'pii',\n  },\n];\n","import { SECRET_PATTERNS, PII_PATTERNS } from './patterns.js';\nimport type { DlpPatternDef, DlpSeverity, DlpCategory } from './patterns.js';\n\nexport type DlpAction = 'audit' | 'mask' | 'block';\n\nexport interface DlpMatch {\n  patternName: string;\n  category: DlpCategory;\n  severity: DlpSeverity;\n  start: number;\n  end: number;\n  matched: string;\n}\n\nexport interface DlpScanResult {\n  hasMatches: boolean;\n  matches: DlpMatch[];\n}\n\nexport interface DlpCustomPattern {\n  name: string;\n  pattern: string;\n  severity: DlpSeverity;\n  action?: DlpAction;\n}\n\nexport interface DlpAllowlistEntry {\n  pattern: string;\n}\n\nexport interface DlpScannerConfig {\n  enabled: boolean;\n  mode: DlpAction;\n  on_input?: DlpAction;\n  on_output?: DlpAction;\n  severity_threshold: DlpSeverity;\n  built_in: { secrets: boolean; pii: boolean };\n  custom_patterns: DlpCustomPattern[];\n  allowlist: DlpAllowlistEntry[];\n  pattern_overrides: Map<string, DlpAction>;\n}\n\nconst SEVERITY_ORDER: Record<DlpSeverity, number> = {\n  low: 0,\n  medium: 1,\n  high: 2,\n  critical: 3,\n};\n\ninterface CompiledPattern {\n  def: DlpPatternDef;\n  action?: DlpAction;\n}\n\nexport class DlpScanner {\n  private patterns: CompiledPattern[];\n  private allowlistRegexps: RegExp[];\n  private severityThreshold: number;\n  private config: DlpScannerConfig;\n\n  constructor(config: DlpScannerConfig) {\n    this.config = config;\n    this.severityThreshold = SEVERITY_ORDER[config.severity_threshold];\n    this.patterns = [];\n    this.allowlistRegexps = [];\n\n    // Compile built-in patterns\n    if (config.built_in.secrets) {\n      for (const def of SECRET_PATTERNS) {\n        this.patterns.push({ def });\n      }\n    }\n    if (config.built_in.pii) {\n      for (const def of PII_PATTERNS) {\n        this.patterns.push({ def });\n      }\n    }\n\n    // Compile custom patterns\n    for (const cp of config.custom_patterns) {\n      const def: DlpPatternDef = {\n        name: cp.name,\n        pattern: new RegExp(cp.pattern, 'g'),\n        severity: cp.severity,\n        category: 'custom',\n      };\n      this.patterns.push({ def, action: cp.action });\n    }\n\n    // Compile pattern overrides from config\n    for (const compiled of this.patterns) {\n      const override = config.pattern_overrides.get(compiled.def.name);\n      if (override) {\n        compiled.action = override;\n      }\n    }\n\n    // Compile allowlist\n    for (const entry of config.allowlist) {\n      this.allowlistRegexps.push(new RegExp(entry.pattern));\n    }\n  }\n\n  scan(text: string): DlpScanResult {\n    if (!this.config.enabled || text.length === 0) {\n      return { hasMatches: false, matches: [] };\n    }\n\n    const matches: DlpMatch[] = [];\n\n    for (const compiled of this.patterns) {\n      // Skip patterns below severity threshold\n      if (SEVERITY_ORDER[compiled.def.severity] < this.severityThreshold) {\n        continue;\n      }\n\n      // Reset the regex (global flag means lastIndex needs reset)\n      const regex = new RegExp(compiled.def.pattern.source, compiled.def.pattern.flags);\n\n      let match: RegExpExecArray | null;\n      while ((match = regex.exec(text)) !== null) {\n        // Use the first capturing group if present, otherwise the full match\n        const matched = match[1] ?? match[0];\n        const start = match[1] ? match.index + match[0].indexOf(match[1]) : match.index;\n        const end = start + matched.length;\n\n        // Check allowlist\n        if (this.isAllowlisted(matched)) {\n          continue;\n        }\n\n        matches.push({\n          patternName: compiled.def.name,\n          category: compiled.def.category,\n          severity: compiled.def.severity,\n          start,\n          end,\n          matched,\n        });\n      }\n    }\n\n    return { hasMatches: matches.length > 0, matches };\n  }\n\n  getAction(direction: 'input' | 'output'): DlpAction {\n    if (direction === 'input' && this.config.on_input) {\n      return this.config.on_input;\n    }\n    if (direction === 'output' && this.config.on_output) {\n      return this.config.on_output;\n    }\n    return this.config.mode;\n  }\n\n  getPatternAction(match: DlpMatch, direction: 'input' | 'output'): DlpAction {\n    // Check per-pattern override first\n    const compiled = this.patterns.find((p) => p.def.name === match.patternName);\n    if (compiled?.action) {\n      return compiled.action;\n    }\n\n    // Fall back to directional override or global mode\n    return this.getAction(direction);\n  }\n\n  private isAllowlisted(value: string): boolean {\n    for (const re of this.allowlistRegexps) {\n      if (re.test(value)) return true;\n    }\n    return false;\n  }\n}\n\nexport function compareSeverity(a: DlpSeverity, b: DlpSeverity): number {\n  return SEVERITY_ORDER[a] - SEVERITY_ORDER[b];\n}\n","import { createHash } from 'node:crypto';\nimport type { DlpMatch } from './scanner.js';\n\nexport interface MaskingConfig {\n  strategy: 'partial' | 'full' | 'hash';\n  show_chars: number;\n  placeholder: string;\n}\n\nconst DEFAULT_CONFIG: MaskingConfig = {\n  strategy: 'partial',\n  show_chars: 4,\n  placeholder: '***',\n};\n\nexport class DlpMasker {\n  private config: MaskingConfig;\n\n  constructor(config?: Partial<MaskingConfig>) {\n    this.config = { ...DEFAULT_CONFIG, ...config };\n  }\n\n  maskValue(value: string): string {\n    switch (this.config.strategy) {\n      case 'full':\n        return this.config.placeholder;\n      case 'hash': {\n        const hash = createHash('sha256').update(value).digest('hex').slice(0, 8);\n        return `[REDACTED:${hash}]`;\n      }\n      case 'partial':\n      default: {\n        if (value.length <= this.config.show_chars) {\n          return this.config.placeholder;\n        }\n        return this.config.placeholder + value.slice(-this.config.show_chars);\n      }\n    }\n  }\n\n  maskText(text: string, matches: DlpMatch[]): string {\n    if (matches.length === 0) return text;\n\n    // Sort by position descending to avoid index shifting\n    const sorted = [...matches].sort((a, b) => b.start - a.start);\n\n    let result = text;\n    for (const match of sorted) {\n      const masked = this.maskValue(match.matched);\n      result = result.slice(0, match.start) + masked + result.slice(match.end);\n    }\n    return result;\n  }\n}\n","/**\n * Extracts package names from shell install commands.\n *\n * Supports npm, yarn, pnpm, pip, and cargo.\n */\n\nexport type Ecosystem = 'npm' | 'pypi' | 'crates.io';\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'pip' | 'cargo';\n\nexport interface ParsedPackage {\n  name: string;\n  version?: string;\n  ecosystem: Ecosystem;\n}\n\nexport interface ParsedInstall {\n  manager: PackageManager;\n  packages: ParsedPackage[];\n  flags: string[];\n  raw: string;\n  isLockfileInstall: boolean;\n  usesCustomRegistry: boolean;\n}\n\n/** Flags that take a value argument (the next token should be skipped). */\nconst FLAGS_WITH_VALUE = new Set([\n  // npm/yarn/pnpm\n  '--registry',\n  '--save-prefix',\n  '--tag',\n  '--cache',\n  '--prefix',\n  // pip\n  '-r',\n  '--requirement',\n  '-c',\n  '--constraint',\n  '-e',\n  '--editable',\n  '-t',\n  '--target',\n  '--index-url',\n  '-i',\n  '--extra-index-url',\n  '--find-links',\n  '-f',\n  '--root',\n  '--prefix',\n  // cargo\n  '--git',\n  '--branch',\n  '--rev',\n  '--path',\n  '--version',\n]);\n\nconst CUSTOM_REGISTRY_FLAGS = new Set(['--registry', '--index-url', '-i', '--extra-index-url']);\n\n/** Patterns that indicate lockfile-only installs. */\nconst LOCKFILE_PATTERNS: RegExp[] = [\n  /\\bnpm\\s+ci\\b/,\n  /\\bpnpm\\s+install\\s+--frozen-lockfile\\b/,\n  /\\byarn\\s+install\\s+--frozen-lockfile\\b/,\n  /\\bpip\\s+install\\b.*--require-hashes\\b/,\n];\n\ninterface ManagerMatch {\n  manager: PackageManager;\n  ecosystem: Ecosystem;\n  subcommandPattern: RegExp;\n}\n\nconst MANAGER_MATCHERS: ManagerMatch[] = [\n  { manager: 'npm', ecosystem: 'npm', subcommandPattern: /\\bnpm\\s+(install|i|add)\\s/ },\n  { manager: 'yarn', ecosystem: 'npm', subcommandPattern: /\\byarn\\s+(add|install)\\s/ },\n  { manager: 'pnpm', ecosystem: 'npm', subcommandPattern: /\\bpnpm\\s+(add|install|i)\\s/ },\n  { manager: 'pip', ecosystem: 'pypi', subcommandPattern: /\\bpip\\s+install\\s/ },\n  { manager: 'cargo', ecosystem: 'crates.io', subcommandPattern: /\\bcargo\\s+(add|install)\\s/ },\n];\n\nfunction splitVersionFromName(\n  raw: string,\n  ecosystem: Ecosystem,\n): { name: string; version?: string } {\n  if (ecosystem === 'npm') {\n    // @scope/pkg@version or pkg@version\n    const atIdx = raw.lastIndexOf('@');\n    if (atIdx > 0) {\n      return { name: raw.slice(0, atIdx), version: raw.slice(atIdx + 1) };\n    }\n    return { name: raw };\n  }\n  if (ecosystem === 'pypi') {\n    // pkg==version, pkg>=version, pkg~=version, pkg!=version\n    const match = raw.match(/^([a-zA-Z0-9_.-]+)([=<>!~]+.+)?$/);\n    if (match) {\n      return { name: match[1]!, version: match[2] };\n    }\n    return { name: raw };\n  }\n  if (ecosystem === 'crates.io') {\n    // pkg@version\n    const atIdx = raw.indexOf('@');\n    if (atIdx > 0) {\n      return { name: raw.slice(0, atIdx), version: raw.slice(atIdx + 1) };\n    }\n    return { name: raw };\n  }\n  return { name: raw };\n}\n\n/**\n * Attempt to parse an install command and extract package names.\n * Returns undefined if the command is not a recognized install command.\n */\nexport function parseInstallCommand(command: string): ParsedInstall | undefined {\n  const trimmed = command.trim();\n\n  // Check lockfile patterns first\n  const isLockfileInstall = LOCKFILE_PATTERNS.some((p) => p.test(trimmed));\n\n  // npm ci is a lockfile install with no packages to parse\n  if (/\\bnpm\\s+ci\\b/.test(trimmed)) {\n    return {\n      manager: 'npm',\n      packages: [],\n      flags: [],\n      raw: trimmed,\n      isLockfileInstall: true,\n      usesCustomRegistry: false,\n    };\n  }\n\n  for (const matcher of MANAGER_MATCHERS) {\n    if (!matcher.subcommandPattern.test(trimmed)) continue;\n\n    // Extract everything after the subcommand\n    const subMatch = trimmed.match(matcher.subcommandPattern);\n    if (!subMatch) continue;\n\n    const afterSubcommand = trimmed.slice(subMatch.index! + subMatch[0].length);\n    const tokens = tokenize(afterSubcommand);\n\n    const packages: ParsedPackage[] = [];\n    const flags: string[] = [];\n    let usesCustomRegistry = false;\n\n    for (let i = 0; i < tokens.length; i++) {\n      const token = tokens[i]!;\n\n      if (token.startsWith('-')) {\n        flags.push(token);\n        // Extract flag name (before '=' if present)\n        const flagName = token.includes('=') ? token.slice(0, token.indexOf('=')) : token;\n        if (CUSTOM_REGISTRY_FLAGS.has(flagName)) {\n          usesCustomRegistry = true;\n        }\n        // If this flag takes a value, skip the next token\n        if (FLAGS_WITH_VALUE.has(flagName) || token.includes('=')) {\n          if (!token.includes('=')) i++;\n        }\n        continue;\n      }\n\n      // pip: skip file-based args\n      if (matcher.manager === 'pip' && (token.endsWith('.txt') || token.endsWith('.cfg'))) {\n        continue;\n      }\n\n      // pip: skip paths and URLs\n      if (\n        matcher.manager === 'pip' &&\n        (token.startsWith('/') ||\n          token.startsWith('./') ||\n          token.startsWith('http://') ||\n          token.startsWith('https://') ||\n          token.startsWith('git+'))\n      ) {\n        continue;\n      }\n\n      const { name, version } = splitVersionFromName(token, matcher.ecosystem);\n      if (name) {\n        packages.push({ name, version, ecosystem: matcher.ecosystem });\n      }\n    }\n\n    return {\n      manager: matcher.manager,\n      packages,\n      flags,\n      raw: trimmed,\n      isLockfileInstall,\n      usesCustomRegistry,\n    };\n  }\n\n  return undefined;\n}\n\n/** Simple tokenizer that respects quotes. */\nfunction tokenize(input: string): string[] {\n  const tokens: string[] = [];\n  let current = '';\n  let inSingleQuote = false;\n  let inDoubleQuote = false;\n\n  for (let i = 0; i < input.length; i++) {\n    const ch = input[i]!;\n\n    if (ch === \"'\" && !inDoubleQuote) {\n      inSingleQuote = !inSingleQuote;\n      continue;\n    }\n    if (ch === '\"' && !inSingleQuote) {\n      inDoubleQuote = !inDoubleQuote;\n      continue;\n    }\n\n    if (ch === ' ' && !inSingleQuote && !inDoubleQuote) {\n      if (current) tokens.push(current);\n      current = '';\n    } else {\n      current += ch;\n    }\n  }\n  if (current) tokens.push(current);\n  return tokens;\n}\n","/**\n * Registry clients for npm and PyPI.\n *\n * Uses built-in fetch() (Node 22+). Zero dependencies.\n * All endpoints are free and require no authentication.\n */\n\nimport type { Ecosystem } from './parser.js';\n\nexport interface RegistryMetadata {\n  name: string;\n  ecosystem: Ecosystem;\n  exists: boolean;\n  createdAt?: Date;\n  modifiedAt?: Date;\n  latestVersion?: string;\n  weeklyDownloads?: number;\n  maintainerCount?: number;\n  hasRepository: boolean;\n  hasReadme: boolean;\n  hasInstallScripts: boolean;\n  description?: string;\n  license?: string;\n}\n\nconst REQUEST_TIMEOUT_MS = 5_000;\n\nfunction withTimeout(ms: number): AbortSignal {\n  return AbortSignal.timeout(ms);\n}\n\n// --- npm ---\n\ninterface NpmPackument {\n  name: string;\n  description?: string;\n  'dist-tags'?: Record<string, string>;\n  time?: Record<string, string>;\n  maintainers?: Array<{ name: string; email?: string }>;\n  readme?: string;\n  license?: string;\n  repository?: unknown;\n  versions?: Record<string, NpmVersion>;\n}\n\ninterface NpmVersion {\n  scripts?: Record<string, string>;\n}\n\ninterface NpmDownloadResponse {\n  downloads: number;\n}\n\nasync function fetchNpmMetadata(name: string): Promise<RegistryMetadata> {\n  const encodedName = name.startsWith('@')\n    ? `@${encodeURIComponent(name.slice(1))}`\n    : encodeURIComponent(name);\n  const url = `https://registry.npmjs.org/${encodedName}`;\n\n  let res: Response;\n  try {\n    res = await fetch(url, { signal: withTimeout(REQUEST_TIMEOUT_MS) });\n  } catch {\n    return notFound(name, 'npm');\n  }\n\n  if (!res.ok) return notFound(name, 'npm');\n\n  const data = (await res.json()) as NpmPackument;\n  const latest = data['dist-tags']?.['latest'];\n  const latestVersion = latest ? data.versions?.[latest] : undefined;\n  const scripts = latestVersion?.scripts ?? {};\n  const hasInstallScripts = !!(\n    scripts['preinstall'] ||\n    scripts['install'] ||\n    scripts['postinstall']\n  );\n\n  // Downloads — separate request\n  let weeklyDownloads: number | undefined;\n  try {\n    const dlUrl = `https://api.npmjs.org/downloads/point/last-week/${encodedName}`;\n    const dlRes = await fetch(dlUrl, { signal: withTimeout(REQUEST_TIMEOUT_MS) });\n    if (dlRes.ok) {\n      const dlData = (await dlRes.json()) as NpmDownloadResponse;\n      weeklyDownloads = dlData.downloads;\n    }\n  } catch {\n    // Non-critical — leave undefined\n  }\n\n  return {\n    name,\n    ecosystem: 'npm',\n    exists: true,\n    createdAt: data.time?.['created'] ? new Date(data.time['created']) : undefined,\n    modifiedAt: data.time?.['modified'] ? new Date(data.time['modified']) : undefined,\n    latestVersion: latest,\n    weeklyDownloads,\n    maintainerCount: data.maintainers?.length,\n    hasRepository: !!data.repository,\n    hasReadme: !!(data.readme && data.readme.length > 10),\n    hasInstallScripts,\n    description: data.description,\n    license: data.license,\n  };\n}\n\n// --- PyPI ---\n\ninterface PyPIResponse {\n  info: {\n    name: string;\n    version: string;\n    summary?: string;\n    license?: string;\n    home_page?: string;\n    project_urls?: Record<string, string>;\n    author?: string;\n    maintainer?: string;\n    description?: string;\n  };\n  releases: Record<string, Array<{ upload_time: string }>>;\n  urls: Array<{ upload_time: string }>;\n}\n\ninterface PyPIStatsResponse {\n  data: {\n    last_week: number;\n  };\n}\n\nasync function fetchPyPIMetadata(name: string): Promise<RegistryMetadata> {\n  const url = `https://pypi.org/pypi/${encodeURIComponent(name)}/json`;\n\n  let res: Response;\n  try {\n    res = await fetch(url, { signal: withTimeout(REQUEST_TIMEOUT_MS) });\n  } catch {\n    return notFound(name, 'pypi');\n  }\n\n  if (!res.ok) return notFound(name, 'pypi');\n\n  const data = (await res.json()) as PyPIResponse;\n\n  // Find the earliest upload time across all releases\n  let earliest: Date | undefined;\n  for (const files of Object.values(data.releases)) {\n    for (const file of files) {\n      const d = new Date(file.upload_time);\n      if (!earliest || d < earliest) earliest = d;\n    }\n  }\n\n  // Determine if there's a project URL / repository\n  const projectUrls = data.info.project_urls ?? {};\n  const hasRepo = !!(\n    data.info.home_page ||\n    projectUrls['Source'] ||\n    projectUrls['Repository'] ||\n    projectUrls['GitHub'] ||\n    projectUrls['Homepage']\n  );\n\n  // Maintainer count — PyPI doesn't expose this directly, so we approximate\n  const hasMaintainer = !!(data.info.maintainer || data.info.author);\n\n  // Downloads — pypistats.org\n  let weeklyDownloads: number | undefined;\n  try {\n    const statsUrl = `https://pypistats.org/api/packages/${encodeURIComponent(name)}/recent`;\n    const statsRes = await fetch(statsUrl, {\n      signal: withTimeout(REQUEST_TIMEOUT_MS),\n      headers: { Accept: 'application/json' },\n    });\n    if (statsRes.ok) {\n      const statsData = (await statsRes.json()) as PyPIStatsResponse;\n      weeklyDownloads = statsData.data?.last_week;\n    }\n  } catch {\n    // Non-critical\n  }\n\n  return {\n    name,\n    ecosystem: 'pypi',\n    exists: true,\n    createdAt: earliest,\n    modifiedAt:\n      data.urls.length > 0 ? new Date(data.urls[data.urls.length - 1]!.upload_time) : undefined,\n    latestVersion: data.info.version,\n    weeklyDownloads,\n    maintainerCount: hasMaintainer ? 1 : 0,\n    hasRepository: hasRepo,\n    hasReadme: !!(data.info.description && data.info.description.length > 10),\n    hasInstallScripts: false, // PyPI doesn't have post-install scripts in the same way\n    description: data.info.summary,\n    license: data.info.license,\n  };\n}\n\n// --- Helpers ---\n\nfunction notFound(name: string, ecosystem: Ecosystem): RegistryMetadata {\n  return {\n    name,\n    ecosystem,\n    exists: false,\n    hasRepository: false,\n    hasReadme: false,\n    hasInstallScripts: false,\n  };\n}\n\n// --- Cache ---\n\nconst cache = new Map<string, RegistryMetadata>();\nconst MAX_CACHE_SIZE = 200;\n\nfunction cacheKey(name: string, ecosystem: Ecosystem): string {\n  return `${ecosystem}:${name}`;\n}\n\n// --- Public API ---\n\nexport async function fetchRegistryMetadata(\n  name: string,\n  ecosystem: Ecosystem,\n): Promise<RegistryMetadata> {\n  const key = cacheKey(name, ecosystem);\n  const cached = cache.get(key);\n  if (cached) return cached;\n\n  let result: RegistryMetadata;\n  switch (ecosystem) {\n    case 'npm':\n      result = await fetchNpmMetadata(name);\n      break;\n    case 'pypi':\n      result = await fetchPyPIMetadata(name);\n      break;\n    default:\n      result = notFound(name, ecosystem);\n  }\n\n  // LRU eviction\n  if (cache.size >= MAX_CACHE_SIZE) {\n    const firstKey = cache.keys().next().value;\n    if (firstKey !== undefined) cache.delete(firstKey);\n  }\n  cache.set(key, result);\n\n  return result;\n}\n\n/** Clear the cache (useful for testing). */\nexport function clearRegistryCache(): void {\n  cache.clear();\n}\n","/**\n * OSV.dev vulnerability database integration.\n *\n * Free, no auth, supports all major ecosystems.\n * https://osv.dev\n */\n\nimport type { Ecosystem } from './parser.js';\n\nexport interface VulnEntry {\n  id: string;\n  summary: string;\n  severity: 'low' | 'medium' | 'high' | 'critical';\n  fixedIn?: string;\n  aliases: string[];\n}\n\nexport interface VulnerabilityResult {\n  package: string;\n  ecosystem: Ecosystem;\n  vulnerabilities: VulnEntry[];\n  error?: string;\n}\n\nconst REQUEST_TIMEOUT_MS = 5_000;\n\n// Map ecosystem to OSV ecosystem identifier\nfunction osvEcosystem(ecosystem: Ecosystem): string {\n  switch (ecosystem) {\n    case 'npm':\n      return 'npm';\n    case 'pypi':\n      return 'PyPI';\n    case 'crates.io':\n      return 'crates.io';\n    default:\n      return ecosystem;\n  }\n}\n\ninterface OsvQueryRequest {\n  package: { name: string; ecosystem: string };\n  version?: string;\n}\n\ninterface OsvVuln {\n  id: string;\n  summary?: string;\n  details?: string;\n  aliases?: string[];\n  severity?: Array<{ type: string; score: string }>;\n  affected?: Array<{\n    ranges?: Array<{\n      events?: Array<{ fixed?: string }>;\n    }>;\n  }>;\n}\n\ninterface OsvQueryResponse {\n  vulns?: OsvVuln[];\n}\n\ninterface OsvBatchResponse {\n  results: Array<{ vulns?: OsvVuln[] }>;\n}\n\nfunction parseSeverity(vuln: OsvVuln): 'low' | 'medium' | 'high' | 'critical' {\n  const sevEntry = vuln.severity?.find((s) => s.type === 'CVSS_V3');\n  if (!sevEntry) return 'medium'; // default if no CVSS\n\n  // Parse CVSS v3 score from vector string: CVSS:3.1/AV:N/AC:L/...\n  // or it could be a numeric score\n  const scoreStr = sevEntry.score;\n  const numericMatch = scoreStr.match(/(\\d+\\.\\d+)/);\n  if (numericMatch) {\n    const score = parseFloat(numericMatch[1]!);\n    if (score >= 9.0) return 'critical';\n    if (score >= 7.0) return 'high';\n    if (score >= 4.0) return 'medium';\n    return 'low';\n  }\n\n  return 'medium';\n}\n\nfunction extractFixedVersion(vuln: OsvVuln): string | undefined {\n  for (const affected of vuln.affected ?? []) {\n    for (const range of affected.ranges ?? []) {\n      for (const event of range.events ?? []) {\n        if (event.fixed) return event.fixed;\n      }\n    }\n  }\n  return undefined;\n}\n\nfunction mapVuln(vuln: OsvVuln): VulnEntry {\n  return {\n    id: vuln.id,\n    summary: vuln.summary ?? vuln.details?.slice(0, 200) ?? 'No description',\n    severity: parseSeverity(vuln),\n    fixedIn: extractFixedVersion(vuln),\n    aliases: vuln.aliases ?? [],\n  };\n}\n\n/**\n * Query OSV.dev for vulnerabilities affecting a single package.\n */\nexport async function queryVulnerabilities(\n  name: string,\n  ecosystem: Ecosystem,\n  version?: string,\n): Promise<VulnerabilityResult> {\n  const body: OsvQueryRequest = {\n    package: { name, ecosystem: osvEcosystem(ecosystem) },\n  };\n  if (version) body.version = version;\n\n  try {\n    const res = await fetch('https://api.osv.dev/v1/query', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(body),\n      signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n    });\n\n    if (!res.ok) {\n      return { package: name, ecosystem, vulnerabilities: [], error: `OSV HTTP ${res.status}` };\n    }\n\n    const data = (await res.json()) as OsvQueryResponse;\n    return {\n      package: name,\n      ecosystem,\n      vulnerabilities: (data.vulns ?? []).map(mapVuln),\n    };\n  } catch (err) {\n    return {\n      package: name,\n      ecosystem,\n      vulnerabilities: [],\n      error: err instanceof Error ? err.message : 'Unknown error',\n    };\n  }\n}\n\n/**\n * Batch query OSV.dev for multiple packages at once.\n */\nexport async function queryVulnerabilitiesBatch(\n  packages: Array<{ name: string; ecosystem: Ecosystem; version?: string }>,\n): Promise<VulnerabilityResult[]> {\n  if (packages.length === 0) return [];\n\n  // Single package — use the simpler endpoint\n  if (packages.length === 1) {\n    const pkg = packages[0]!;\n    return [await queryVulnerabilities(pkg.name, pkg.ecosystem, pkg.version)];\n  }\n\n  const queries = packages.map((pkg) => {\n    const q: OsvQueryRequest = {\n      package: { name: pkg.name, ecosystem: osvEcosystem(pkg.ecosystem) },\n    };\n    if (pkg.version) q.version = pkg.version;\n    return q;\n  });\n\n  try {\n    const res = await fetch('https://api.osv.dev/v1/querybatch', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ queries }),\n      signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n    });\n\n    if (!res.ok) {\n      return packages.map((pkg) => ({\n        package: pkg.name,\n        ecosystem: pkg.ecosystem,\n        vulnerabilities: [],\n        error: `OSV HTTP ${res.status}`,\n      }));\n    }\n\n    const data = (await res.json()) as OsvBatchResponse;\n    return data.results.map((result, i) => ({\n      package: packages[i]!.name,\n      ecosystem: packages[i]!.ecosystem,\n      vulnerabilities: (result.vulns ?? []).map(mapVuln),\n    }));\n  } catch (err) {\n    const errMsg = err instanceof Error ? err.message : 'Unknown error';\n    return packages.map((pkg) => ({\n      package: pkg.name,\n      ecosystem: pkg.ecosystem,\n      vulnerabilities: [],\n      error: errMsg,\n    }));\n  }\n}\n","/**\n * Levenshtein distance and typosquat detection.\n *\n * Single-row Wagner-Fischer: O(n*m) time, O(min(n,m)) space.\n * Zero dependencies.\n */\n\nexport function levenshteinDistance(a: string, b: string): number {\n  if (a === b) return 0;\n  if (a.length === 0) return b.length;\n  if (b.length === 0) return a.length;\n\n  // Ensure a is the shorter string for space efficiency\n  if (a.length > b.length) [a, b] = [b, a];\n\n  const m = a.length;\n  const n = b.length;\n  const row = new Array<number>(m + 1);\n  for (let j = 0; j <= m; j++) row[j] = j;\n\n  for (let i = 1; i <= n; i++) {\n    let corner = row[0]!;\n    row[0] = i;\n    for (let j = 1; j <= m; j++) {\n      const temp = row[j]!;\n      if (b[i - 1] === a[j - 1]) {\n        row[j] = corner;\n      } else {\n        row[j] = 1 + Math.min(corner, temp, row[j - 1]!);\n      }\n      corner = temp;\n    }\n  }\n  return row[m]!;\n}\n\nexport function normalizedSimilarity(a: string, b: string): number {\n  const maxLen = Math.max(a.length, b.length);\n  if (maxLen === 0) return 1.0;\n  return 1 - levenshteinDistance(a, b) / maxLen;\n}\n\n/**\n * Normalize a package name for comparison:\n * - Strip npm scope prefix (@scope/)\n * - Remove hyphens, underscores, dots\n * - Lowercase\n */\nexport function normalizeName(name: string): string {\n  // Strip scope\n  const stripped = name.replace(/^@[^/]+\\//, '');\n  // Remove separators and lowercase\n  return stripped.replace(/[-_.]/g, '').toLowerCase();\n}\n\nexport interface TyposquatMatch {\n  target: string;\n  distance: number;\n  similarity: number;\n}\n\n/**\n * Check a package name against a corpus of known-good names.\n * Returns the closest match if it looks like a typosquat.\n */\nexport function detectTyposquat(name: string, corpus: string[]): TyposquatMatch | undefined {\n  const normalized = normalizeName(name);\n\n  let bestMatch: TyposquatMatch | undefined;\n  let bestDistance = Infinity;\n\n  for (const target of corpus) {\n    const normalizedTarget = normalizeName(target);\n\n    // Skip exact matches (the package is the popular package itself)\n    if (normalizedTarget === normalized) return undefined;\n\n    const distance = levenshteinDistance(normalized, normalizedTarget);\n    const similarity = normalizedSimilarity(normalized, normalizedTarget);\n\n    // Flag thresholds:\n    // - edit distance 1: always flag\n    // - edit distance 2 + name length >= 5: flag\n    // - normalized similarity >= 0.85: flag\n    const shouldFlag =\n      distance === 1 || (distance === 2 && normalized.length >= 5) || similarity >= 0.85;\n\n    if (shouldFlag && distance < bestDistance) {\n      bestDistance = distance;\n      bestMatch = { target, distance, similarity };\n    }\n  }\n\n  return bestMatch;\n}\n","/**\n * Default allowlists and blocklists for dependency validation.\n *\n * The allowlist doubles as the \"popular packages\" corpus for typosquat detection.\n * Users extend these via config; user entries take precedence.\n */\n\nexport const DEFAULT_NPM_ALLOWLIST: string[] = [\n  // Frameworks\n  'express',\n  'react',\n  'react-dom',\n  'next',\n  'vue',\n  'angular',\n  'svelte',\n  'fastify',\n  'koa',\n  'hapi',\n  'nest',\n  'nuxt',\n  // Build tools\n  'typescript',\n  'webpack',\n  'vite',\n  'esbuild',\n  'tsup',\n  'rollup',\n  'parcel',\n  'babel',\n  'swc',\n  // Quality tools\n  'prettier',\n  'eslint',\n  'vitest',\n  'jest',\n  'mocha',\n  'chai',\n  'sinon',\n  'husky',\n  'lint-staged',\n  // Utilities\n  'lodash',\n  'axios',\n  'chalk',\n  'commander',\n  'debug',\n  'async',\n  'uuid',\n  'semver',\n  'glob',\n  'fs-extra',\n  'mkdirp',\n  'rimraf',\n  'minimist',\n  'yargs',\n  'dotenv',\n  'nanoid',\n  'date-fns',\n  'dayjs',\n  'moment',\n  'rxjs',\n  'immer',\n  // Validation\n  'zod',\n  'joi',\n  'ajv',\n  'yup',\n  // HTTP / API\n  'cors',\n  'body-parser',\n  'cookie-parser',\n  'morgan',\n  'helmet',\n  'jsonwebtoken',\n  'bcrypt',\n  'passport',\n  // Database\n  'mongoose',\n  'sequelize',\n  'prisma',\n  'typeorm',\n  'knex',\n  'pg',\n  'mysql2',\n  'redis',\n  'ioredis',\n  'better-sqlite3',\n  // Realtime\n  'socket.io',\n  'ws',\n  // State management\n  'zustand',\n  'redux',\n  'mobx',\n  // CSS\n  'tailwindcss',\n  'postcss',\n  'autoprefixer',\n  'sass',\n  'styled-components',\n  'clsx',\n  'classnames',\n  // Media\n  'sharp',\n  'puppeteer',\n  'cheerio',\n  'marked',\n  'highlight.js',\n  // Types\n  'tslib',\n];\n\nexport const DEFAULT_PYPI_ALLOWLIST: string[] = [\n  // Web\n  'requests',\n  'flask',\n  'django',\n  'fastapi',\n  'aiohttp',\n  'httpx',\n  'uvicorn',\n  'gunicorn',\n  'starlette',\n  // Data\n  'numpy',\n  'pandas',\n  'scipy',\n  'matplotlib',\n  'scikit-learn',\n  'pillow',\n  // Infrastructure\n  'boto3',\n  'botocore',\n  'urllib3',\n  'certifi',\n  'charset-normalizer',\n  'idna',\n  // Core\n  'setuptools',\n  'pip',\n  'wheel',\n  'packaging',\n  'typing-extensions',\n  'six',\n  'python-dateutil',\n  'pyyaml',\n  'tomli',\n  'filelock',\n  'attrs',\n  'click',\n  'importlib-metadata',\n  'zipp',\n  'platformdirs',\n  // Crypto\n  'cryptography',\n  'cffi',\n  'pycparser',\n  'jmespath',\n  'pyasn1',\n  // DB\n  'sqlalchemy',\n  'psycopg2',\n  'redis',\n  'celery',\n  // Template / Markup\n  'jinja2',\n  'markupsafe',\n  'beautifulsoup4',\n  'lxml',\n  'scrapy',\n  // Validation\n  'pydantic',\n  // Testing\n  'pytest',\n  'tox',\n  'coverage',\n  'mock',\n];\n\nexport const DEFAULT_BLOCKLIST_EXACT: string[] = [\n  // npm typosquats (historically malicious)\n  'crossenv',\n  'cross-env.js',\n  'd3.js',\n  'fabric-js',\n  'ffmpegs',\n  'gruntcli',\n  'http-proxy.js',\n  'jquery.js',\n  'mongose',\n  'mssql-node',\n  'nodecaffe',\n  'nodefabric',\n  'nodemailer-js',\n  'noderequest',\n  'nodesass',\n  'opencv.js',\n  'openssl.js',\n  'shadowsock',\n  'sqliter',\n  'sqlserver',\n  // npm compromised\n  'flatmap-stream',\n  // PyPI typosquats\n  'colourama',\n  'python3-dateutil',\n  'requesocks',\n  'requesst',\n  'beautifulsup',\n  'numppy',\n  'numpys',\n  'djanga',\n  'urlib3',\n];\n\nexport const DEFAULT_BLOCKLIST_PATTERNS: RegExp[] = [\n  /-free-download$/,\n  /-crack$/,\n  /-keygen$/,\n  /-license-key$/,\n  /-hack$/,\n  /-serial$/,\n  /-activation$/,\n  /-premium-free$/,\n  /-generator-free$/,\n];\n\nexport interface AllowBlockConfig {\n  allowlist: string[];\n  blocklist: string[];\n  blocklistPatterns: RegExp[];\n}\n\n/**\n * Build merged allow/block lists from defaults + user config.\n */\nexport function buildAllowBlockLists(\n  ecosystem: 'npm' | 'pypi' | 'crates.io',\n  userAllowlist: string[],\n  userBlocklist: string[],\n  userBlocklistPatterns: string[],\n): AllowBlockConfig {\n  const base =\n    ecosystem === 'npm'\n      ? DEFAULT_NPM_ALLOWLIST\n      : ecosystem === 'pypi'\n        ? DEFAULT_PYPI_ALLOWLIST\n        : [];\n\n  return {\n    allowlist: [...base, ...userAllowlist],\n    blocklist: [...DEFAULT_BLOCKLIST_EXACT, ...userBlocklist],\n    blocklistPatterns: [\n      ...DEFAULT_BLOCKLIST_PATTERNS,\n      ...userBlocklistPatterns.map((p) => new RegExp(p)),\n    ],\n  };\n}\n\n/**\n * Check if a package is on the allowlist.\n */\nexport function isAllowlisted(name: string, allowlist: string[]): boolean {\n  return allowlist.includes(name);\n}\n\n/**\n * Check if a package is on the blocklist (exact match or pattern).\n */\nexport function isBlocklisted(\n  name: string,\n  blocklist: string[],\n  blocklistPatterns: RegExp[],\n): boolean {\n  if (blocklist.includes(name)) return true;\n  return blocklistPatterns.some((p) => p.test(name));\n}\n","/**\n * Risk scoring engine for dependency validation.\n *\n * Computes a risk report for a single package based on registry metadata,\n * vulnerability data, and typosquat analysis.\n */\n\nimport type { RegistryMetadata } from './registry.js';\nimport type { VulnEntry } from './vulnerabilities.js';\nimport type { TyposquatMatch } from './levenshtein.js';\n\nexport type RiskSeverity = 'info' | 'low' | 'medium' | 'high' | 'critical';\nexport type RiskRecommendation = 'allow' | 'escalate' | 'block';\n\nexport interface RiskSignal {\n  name: string;\n  severity: RiskSeverity;\n  detail: string;\n}\n\nexport interface RiskReport {\n  package: string;\n  ecosystem: string;\n  overallRisk: RiskSeverity;\n  signals: RiskSignal[];\n  vulnerabilities: VulnEntry[];\n  recommendation: RiskRecommendation;\n  metadata: RegistryMetadata;\n}\n\nexport interface RiskThresholds {\n  minAgeDays: number;\n  minWeeklyDownloads: number;\n}\n\nconst DEFAULT_THRESHOLDS: RiskThresholds = {\n  minAgeDays: 30,\n  minWeeklyDownloads: 100,\n};\n\nconst SEVERITY_ORDER: Record<RiskSeverity, number> = {\n  info: 0,\n  low: 1,\n  medium: 2,\n  high: 3,\n  critical: 4,\n};\n\nfunction maxSeverity(a: RiskSeverity, b: RiskSeverity): RiskSeverity {\n  return SEVERITY_ORDER[a] >= SEVERITY_ORDER[b] ? a : b;\n}\n\nexport function computeRiskReport(\n  metadata: RegistryMetadata,\n  vulns: VulnEntry[],\n  typosquatMatch: TyposquatMatch | undefined,\n  isBlocklisted: boolean,\n  isAllowlisted: boolean,\n  thresholds: RiskThresholds = DEFAULT_THRESHOLDS,\n): RiskReport {\n  const signals: RiskSignal[] = [];\n  let overallRisk: RiskSeverity = 'info';\n\n  // --- Critical signals ---\n\n  if (!metadata.exists) {\n    signals.push({\n      name: 'package_not_found',\n      severity: 'critical',\n      detail: `Package \"${metadata.name}\" does not exist on ${metadata.ecosystem}`,\n    });\n    overallRisk = 'critical';\n  }\n\n  if (isBlocklisted) {\n    signals.push({\n      name: 'on_blocklist',\n      severity: 'critical',\n      detail: `Package \"${metadata.name}\" is on the blocklist`,\n    });\n    overallRisk = 'critical';\n  }\n\n  // Vulnerabilities\n  for (const vuln of vulns) {\n    signals.push({\n      name: 'known_vulnerability',\n      severity: vuln.severity,\n      detail: `${vuln.id}: ${vuln.summary}${vuln.fixedIn ? ` (fixed in ${vuln.fixedIn})` : ''}`,\n    });\n    overallRisk = maxSeverity(overallRisk, vuln.severity);\n  }\n\n  // If allowlisted, skip reputation checks but still report vulns/blocklist\n  if (isAllowlisted && signals.length === 0) {\n    return {\n      package: metadata.name,\n      ecosystem: metadata.ecosystem,\n      overallRisk: 'info',\n      signals: [],\n      vulnerabilities: vulns,\n      recommendation: 'allow',\n      metadata,\n    };\n  }\n\n  // --- Reputation signals (skipped for allowlisted packages) ---\n  if (!isAllowlisted && metadata.exists) {\n    // Package age\n    if (metadata.createdAt) {\n      const ageDays = (Date.now() - metadata.createdAt.getTime()) / (1000 * 60 * 60 * 24);\n      if (ageDays < 7) {\n        signals.push({\n          name: 'very_new_package',\n          severity: 'high',\n          detail: `Created ${Math.floor(ageDays)} days ago`,\n        });\n        overallRisk = maxSeverity(overallRisk, 'high');\n      } else if (ageDays < thresholds.minAgeDays) {\n        signals.push({\n          name: 'new_package',\n          severity: 'medium',\n          detail: `Created ${Math.floor(ageDays)} days ago (threshold: ${thresholds.minAgeDays})`,\n        });\n        overallRisk = maxSeverity(overallRisk, 'medium');\n      }\n    }\n\n    // Download count\n    if (metadata.weeklyDownloads !== undefined) {\n      if (metadata.weeklyDownloads < thresholds.minWeeklyDownloads) {\n        const sev = metadata.weeklyDownloads < 10 ? 'high' : 'medium';\n        signals.push({\n          name: 'low_downloads',\n          severity: sev,\n          detail: `${metadata.weeklyDownloads} weekly downloads (threshold: ${thresholds.minWeeklyDownloads})`,\n        });\n        overallRisk = maxSeverity(overallRisk, sev);\n      }\n    }\n\n    // Typosquatting\n    if (typosquatMatch) {\n      signals.push({\n        name: 'typosquat_suspect',\n        severity: 'high',\n        detail: `Similar to \"${typosquatMatch.target}\" (edit distance: ${typosquatMatch.distance})`,\n      });\n      overallRisk = maxSeverity(overallRisk, 'high');\n    }\n\n    // Install scripts\n    if (metadata.hasInstallScripts) {\n      signals.push({\n        name: 'has_install_scripts',\n        severity: 'medium',\n        detail: 'Package has preinstall/install/postinstall scripts',\n      });\n      overallRisk = maxSeverity(overallRisk, 'medium');\n    }\n\n    // No repository\n    if (!metadata.hasRepository) {\n      signals.push({\n        name: 'no_repository',\n        severity: 'low',\n        detail: 'No source repository URL in metadata',\n      });\n      overallRisk = maxSeverity(overallRisk, 'low');\n    }\n\n    // No README\n    if (!metadata.hasReadme) {\n      signals.push({\n        name: 'no_readme',\n        severity: 'low',\n        detail: 'No README content',\n      });\n      overallRisk = maxSeverity(overallRisk, 'low');\n    }\n\n    // No license\n    if (!metadata.license) {\n      signals.push({\n        name: 'no_license',\n        severity: 'low',\n        detail: 'No license declared',\n      });\n      overallRisk = maxSeverity(overallRisk, 'low');\n    }\n\n    // Single maintainer\n    if (metadata.maintainerCount !== undefined && metadata.maintainerCount <= 1) {\n      signals.push({\n        name: 'single_maintainer',\n        severity: 'info',\n        detail: `${metadata.maintainerCount} maintainer(s)`,\n      });\n    }\n  }\n\n  // --- Compute recommendation ---\n  let recommendation: RiskRecommendation;\n  if (SEVERITY_ORDER[overallRisk] >= SEVERITY_ORDER['critical']) {\n    recommendation = 'block';\n  } else if (SEVERITY_ORDER[overallRisk] >= SEVERITY_ORDER['medium']) {\n    recommendation = 'escalate';\n  } else {\n    recommendation = 'allow';\n  }\n\n  return {\n    package: metadata.name,\n    ecosystem: metadata.ecosystem,\n    overallRisk,\n    signals,\n    vulnerabilities: vulns,\n    recommendation,\n    metadata,\n  };\n}\n","/**\n * Dependency Guardian — orchestrator module.\n *\n * Parses install commands, runs all checks, and returns a risk report.\n */\n\nimport { parseInstallCommand } from './parser.js';\nimport { fetchRegistryMetadata } from './registry.js';\nimport { queryVulnerabilitiesBatch } from './vulnerabilities.js';\nimport { detectTyposquat } from './levenshtein.js';\nimport { buildAllowBlockLists, isAllowlisted, isBlocklisted } from './allowlist.js';\nimport { computeRiskReport, type RiskReport, type RiskRecommendation } from './risk.js';\n\nexport interface DependencyGuardianConfig {\n  enabled: boolean;\n  checks: {\n    existence: boolean;\n    reputation: boolean;\n    typosquatting: boolean;\n    install_scripts: boolean;\n    vulnerabilities: boolean;\n  };\n  risk_thresholds: {\n    min_age_days: number;\n    min_weekly_downloads: number;\n  };\n  on_risk: 'escalate' | 'block' | 'audit';\n  allowlist: string[];\n  blocklist: string[];\n  blocklist_patterns: string[];\n  custom_registry_bypass: boolean;\n}\n\nexport interface GuardianResult {\n  command: string;\n  packages: RiskReport[];\n  overallRecommendation: RiskRecommendation;\n  summary: string;\n  auditMetadata: Record<string, unknown>;\n  skipped: boolean;\n  skipReason?: string;\n}\n\nconst DEFAULT_CONFIG: DependencyGuardianConfig = {\n  enabled: true,\n  checks: {\n    existence: true,\n    reputation: true,\n    typosquatting: true,\n    install_scripts: true,\n    vulnerabilities: true,\n  },\n  risk_thresholds: {\n    min_age_days: 30,\n    min_weekly_downloads: 100,\n  },\n  on_risk: 'escalate',\n  allowlist: [],\n  blocklist: [],\n  blocklist_patterns: [],\n  custom_registry_bypass: true,\n};\n\n/**\n * Evaluate an install command and return a risk report for all packages.\n */\nexport async function evaluateInstall(\n  command: string,\n  config: DependencyGuardianConfig = DEFAULT_CONFIG,\n): Promise<GuardianResult> {\n  if (!config.enabled) {\n    return skippedResult(command, 'Dependency guardian is disabled');\n  }\n\n  const parsed = parseInstallCommand(command);\n  if (!parsed) {\n    return skippedResult(command, 'Not a recognized install command');\n  }\n\n  // Lock-file installs are low risk — skip\n  if (parsed.isLockfileInstall) {\n    return skippedResult(command, 'Lock-file install (pinned dependencies)');\n  }\n\n  // Custom registry bypass\n  if (config.custom_registry_bypass && parsed.usesCustomRegistry) {\n    return skippedResult(command, 'Custom registry detected (bypass enabled)');\n  }\n\n  // No packages extracted (e.g., `npm install` with no args reinstalls from package.json)\n  if (parsed.packages.length === 0) {\n    return skippedResult(command, 'No specific packages to validate');\n  }\n\n  // Build merged allow/block lists per ecosystem\n  const ecosystems = [...new Set(parsed.packages.map((p) => p.ecosystem))];\n  const listsPerEcosystem = new Map(\n    ecosystems.map((eco) => [\n      eco,\n      buildAllowBlockLists(eco, config.allowlist, config.blocklist, config.blocklist_patterns),\n    ]),\n  );\n\n  // Fetch registry metadata in parallel\n  const metadataPromises = parsed.packages.map(async (pkg) => {\n    if (!config.checks.existence && !config.checks.reputation && !config.checks.install_scripts) {\n      return undefined;\n    }\n    return fetchRegistryMetadata(pkg.name, pkg.ecosystem);\n  });\n\n  // Fetch vulnerabilities in batch\n  const vulnPromise = config.checks.vulnerabilities\n    ? queryVulnerabilitiesBatch(\n        parsed.packages.map((p) => ({\n          name: p.name,\n          ecosystem: p.ecosystem,\n          version: p.version,\n        })),\n      )\n    : Promise.resolve(\n        parsed.packages.map((p) => ({\n          package: p.name,\n          ecosystem: p.ecosystem,\n          vulnerabilities: [] as import('./vulnerabilities.js').VulnEntry[],\n        })),\n      );\n\n  const [metadataResults, vulnResults] = await Promise.all([\n    Promise.all(metadataPromises),\n    vulnPromise,\n  ]);\n\n  // Compute risk reports\n  const reports: RiskReport[] = [];\n  for (let i = 0; i < parsed.packages.length; i++) {\n    const pkg = parsed.packages[i]!;\n    const lists = listsPerEcosystem.get(pkg.ecosystem)!;\n    const allowed = isAllowlisted(pkg.name, lists.allowlist);\n    const blocked = isBlocklisted(pkg.name, lists.blocklist, lists.blocklistPatterns);\n\n    const metadata = metadataResults[i] ?? {\n      name: pkg.name,\n      ecosystem: pkg.ecosystem,\n      exists: true, // assume exists if we didn't check\n      hasRepository: true,\n      hasReadme: true,\n      hasInstallScripts: false,\n    };\n\n    const vulns = vulnResults[i]?.vulnerabilities ?? [];\n\n    const typosquatMatch =\n      config.checks.typosquatting && !allowed\n        ? detectTyposquat(pkg.name, lists.allowlist)\n        : undefined;\n\n    const report = computeRiskReport(metadata, vulns, typosquatMatch, blocked, allowed, {\n      minAgeDays: config.risk_thresholds.min_age_days,\n      minWeeklyDownloads: config.risk_thresholds.min_weekly_downloads,\n    });\n\n    reports.push(report);\n  }\n\n  // Compute overall recommendation (most restrictive)\n  let overallRecommendation: RiskRecommendation = 'allow';\n  for (const report of reports) {\n    if (report.recommendation === 'block') {\n      overallRecommendation = 'block';\n      break;\n    }\n    if (report.recommendation === 'escalate') {\n      overallRecommendation = 'escalate';\n    }\n  }\n\n  // If on_risk is 'audit', downgrade escalate→allow (still log)\n  if (config.on_risk === 'audit' && overallRecommendation === 'escalate') {\n    overallRecommendation = 'allow';\n  }\n  // If on_risk is 'block', upgrade escalate→block\n  if (config.on_risk === 'block' && overallRecommendation === 'escalate') {\n    overallRecommendation = 'block';\n  }\n\n  const summary = formatSummary(command, reports, overallRecommendation);\n\n  return {\n    command,\n    packages: reports,\n    overallRecommendation,\n    summary,\n    auditMetadata: {\n      command,\n      manager: parsed.manager,\n      packages: reports.map((r) => ({\n        name: r.package,\n        ecosystem: r.ecosystem,\n        risk: r.overallRisk,\n        signals: r.signals.map((s) => s.name),\n        vulnCount: r.vulnerabilities.length,\n      })),\n    },\n    skipped: false,\n  };\n}\n\nfunction skippedResult(command: string, reason: string): GuardianResult {\n  return {\n    command,\n    packages: [],\n    overallRecommendation: 'allow',\n    summary: reason,\n    auditMetadata: { command, skipped: true, reason },\n    skipped: true,\n    skipReason: reason,\n  };\n}\n\nfunction formatSummary(\n  command: string,\n  reports: RiskReport[],\n  recommendation: RiskRecommendation,\n): string {\n  const lines: string[] = [];\n  lines.push(`Command: ${command}`);\n  lines.push('');\n\n  for (const report of reports) {\n    if (report.signals.length === 0 && report.vulnerabilities.length === 0) continue;\n\n    lines.push(`Package: ${report.package} (${report.ecosystem})`);\n    lines.push(`Risk: ${report.overallRisk.toUpperCase()}`);\n\n    if (report.signals.length > 0) {\n      lines.push('Signals:');\n      for (const signal of report.signals) {\n        const icon =\n          signal.severity === 'critical' || signal.severity === 'high'\n            ? '!!'\n            : signal.severity === 'medium'\n              ? '! '\n              : '  ';\n        lines.push(`  ${icon} ${signal.name}: ${signal.detail}`);\n      }\n    }\n\n    lines.push('');\n  }\n\n  if (recommendation === 'block') {\n    lines.push('Recommendation: BLOCK');\n  } else if (recommendation === 'escalate') {\n    lines.push('Recommendation: Requires human approval');\n  }\n\n  return lines.join('\\n');\n}\n","/**\n * Tracks tool invocation count as a proxy for token budget.\n * The budget value represents max invocations per session; -1 means unlimited.\n */\nexport class BudgetTracker {\n  private _used = 0;\n  private readonly _budget: number;\n\n  constructor(budget: number) {\n    this._budget = budget;\n  }\n\n  /** Returns false if consuming would exceed the budget. On success, increments the counter. */\n  consume(amount = 1): boolean {\n    if (this._budget === -1) {\n      this._used += amount;\n      return true;\n    }\n    if (this._used + amount > this._budget) return false;\n    this._used += amount;\n    return true;\n  }\n\n  remaining(): number {\n    if (this._budget === -1) return Infinity;\n    return Math.max(0, this._budget - this._used);\n  }\n\n  used(): number {\n    return this._used;\n  }\n\n  isUnlimited(): boolean {\n    return this._budget === -1;\n  }\n}\n","import { watch, readFileSync, type FSWatcher } from 'node:fs';\nimport { parse as parseYaml } from 'yaml';\nimport { Value } from '@sinclair/typebox/value';\nimport { GovernanceConfigSchema, type GovernanceConfig } from './schema.js';\n\n/**\n * Watches a governance config file for changes and triggers a validated reload.\n * Uses fs.watch() with a 500ms debounce to avoid rapid reloads.\n */\nexport class ConfigWatcher {\n  private watcher: FSWatcher | undefined;\n  private debounceTimer: ReturnType<typeof setTimeout> | undefined;\n  private readonly configPath: string;\n  private readonly onChange: (config: GovernanceConfig) => void;\n  private readonly onError?: (error: Error) => void;\n\n  constructor(\n    configPath: string,\n    onChange: (config: GovernanceConfig) => void,\n    onError?: (error: Error) => void,\n  ) {\n    this.configPath = configPath;\n    this.onChange = onChange;\n    this.onError = onError;\n  }\n\n  start(): void {\n    if (this.watcher) return;\n    this.watcher = watch(this.configPath, () => this.handleChange());\n  }\n\n  stop(): void {\n    if (this.debounceTimer) {\n      clearTimeout(this.debounceTimer);\n      this.debounceTimer = undefined;\n    }\n    if (this.watcher) {\n      this.watcher.close();\n      this.watcher = undefined;\n    }\n  }\n\n  private handleChange(): void {\n    if (this.debounceTimer) clearTimeout(this.debounceTimer);\n    this.debounceTimer = setTimeout(() => this.reload(), 500);\n  }\n\n  private reload(): void {\n    try {\n      const raw = readFileSync(this.configPath, 'utf-8');\n      const parsed = parseYaml(raw);\n      const errors = [...Value.Errors(GovernanceConfigSchema, parsed)];\n      if (errors.length > 0) {\n        const msg = errors.map((e) => `${e.path}: ${e.message}`).join('; ');\n        this.onError?.(new Error(`Config validation failed: ${msg}`));\n        return;\n      }\n      const config = Value.Default(GovernanceConfigSchema, parsed) as GovernanceConfig;\n      this.onChange(config);\n    } catch (err) {\n      this.onError?.(err instanceof Error ? err : new Error(String(err)));\n    }\n  }\n}\n","import { existsSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface TemplateSelectorConfig {\n  directory?: string;\n  default?: string;\n}\n\nfunction getBundledDir(): string {\n  try {\n    // ESM path\n    return resolve(dirname(fileURLToPath(import.meta.url)), '../../../prompts');\n  } catch {\n    // CJS fallback\n    return resolve(__dirname, '../../../prompts');\n  }\n}\n\nexport class TemplateSelector {\n  private userDirectory: string;\n  private bundledDirectory: string;\n\n  constructor(config?: TemplateSelectorConfig) {\n    this.userDirectory = config?.directory ?? './templates/';\n    this.bundledDirectory = getBundledDir();\n  }\n\n  /**\n   * Resolve a template name to an absolute file path.\n   * User templates take precedence over bundled templates.\n   */\n  resolve(templateName: string): string {\n    // Check user directory first\n    const userPath = resolve(join(this.userDirectory, `${templateName}.md`));\n    if (existsSync(userPath)) return userPath;\n\n    // Fall back to bundled templates\n    const bundledPath = resolve(join(this.bundledDirectory, `${templateName}.md`));\n    if (existsSync(bundledPath)) return bundledPath;\n\n    throw new Error(\n      `Prompt template '${templateName}' not found. Searched: ${userPath}, ${bundledPath}`,\n    );\n  }\n}\n","/**\n * Render a template string by substituting {{variable}} placeholders\n * with the corresponding values from the variables map.\n *\n * - String values replace the placeholder directly.\n * - Array values are joined with newlines.\n * - Unresolved variables (no matching key) are left as-is.\n */\nexport function render(\n  templateContent: string,\n  variables: Record<string, string | string[]>,\n): string {\n  return templateContent.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n    const value = variables[key];\n    if (value === undefined) return match;\n    if (Array.isArray(value)) return value.join('\\n');\n    return value;\n  });\n}\n","import { randomUUID } from 'node:crypto';\nimport type { AuditRecord, AuditEventType } from './schema.js';\nimport type { AuditSink } from './sinks/sink.js';\nimport { JsonlAuditSink } from './sinks/jsonl.js';\nimport { WebhookAuditSink } from './sinks/webhook.js';\n\ninterface AuditSinkConfig {\n  type: 'jsonl' | 'webhook' | 'postgres';\n  path?: string;\n  url?: string;\n  connection?: string;\n}\n\ninterface AuditConfig {\n  sinks: AuditSinkConfig[];\n}\n\nexport class AuditLogger {\n  private sinks: AuditSink[];\n  private counts: Map<AuditEventType, number> = new Map();\n\n  constructor(config?: AuditConfig) {\n    const sinkConfigs = config?.sinks ?? [\n      { type: 'jsonl' as const, path: '~/.pi/agent/audit.jsonl' },\n    ];\n    this.sinks = [];\n\n    for (const sc of sinkConfigs) {\n      if (sc.type === 'jsonl') {\n        this.sinks.push(new JsonlAuditSink(sc.path ?? '~/.pi/agent/audit.jsonl'));\n      } else if (sc.type === 'webhook' && sc.url) {\n        this.sinks.push(new WebhookAuditSink(sc.url));\n      }\n      // postgres: skip for now\n    }\n\n    // Ensure at least one sink\n    if (this.sinks.length === 0) {\n      this.sinks.push(new JsonlAuditSink('~/.pi/agent/audit.jsonl'));\n    }\n  }\n\n  async log(record: Omit<AuditRecord, 'id' | 'timestamp'>): Promise<void> {\n    const full: AuditRecord = {\n      ...record,\n      id: randomUUID(),\n      timestamp: new Date().toISOString(),\n    };\n\n    this.counts.set(full.event, (this.counts.get(full.event) ?? 0) + 1);\n\n    await Promise.all(this.sinks.map((s) => s.write(full as unknown as Record<string, unknown>)));\n  }\n\n  async flush(): Promise<void> {\n    await Promise.all(this.sinks.map((s) => s.flush()));\n  }\n\n  getSummary(): Map<AuditEventType, number> {\n    return new Map(this.counts);\n  }\n}\n","import { appendFile, mkdir } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AuditSink } from './sink.js';\n\nexport class JsonlAuditSink implements AuditSink {\n  private path: string;\n  private buffer: Record<string, unknown>[] = [];\n  private readonly flushThreshold = 10;\n\n  constructor(path: string) {\n    this.path = path.replace(/^~/, homedir());\n  }\n\n  async write(record: Record<string, unknown>): Promise<void> {\n    this.buffer.push(record);\n    if (this.buffer.length >= this.flushThreshold) {\n      await this.flush();\n    }\n  }\n\n  async flush(): Promise<void> {\n    if (this.buffer.length === 0) return;\n    const lines = this.buffer.map((r) => JSON.stringify(r)).join('\\n') + '\\n';\n    this.buffer = [];\n    await mkdir(dirname(this.path), { recursive: true });\n    await appendFile(this.path, lines, 'utf-8');\n  }\n}\n","import type { AuditSink } from './sink.js';\n\nexport class WebhookAuditSink implements AuditSink {\n  private url: string;\n  private buffer: Record<string, unknown>[] = [];\n  private readonly flushThreshold = 10;\n\n  constructor(url: string) {\n    this.url = url;\n  }\n\n  async write(record: Record<string, unknown>): Promise<void> {\n    this.buffer.push(record);\n    if (this.buffer.length >= this.flushThreshold) {\n      await this.flush();\n    }\n  }\n\n  async flush(): Promise<void> {\n    if (this.buffer.length === 0) return;\n    const records = [...this.buffer];\n    this.buffer = [];\n\n    try {\n      await this.send(records);\n    } catch {\n      // Retry once\n      try {\n        await this.send(records);\n      } catch {\n        // Drop records after second failure\n      }\n    }\n  }\n\n  private async send(records: Record<string, unknown>[]): Promise<void> {\n    const controller = new AbortController();\n    const timeout = setTimeout(() => controller.abort(), 10_000);\n\n    try {\n      const response = await fetch(this.url, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(records),\n        signal: controller.signal,\n      });\n\n      if (!response.ok) {\n        throw new Error(`Webhook returned ${response.status}`);\n      }\n    } finally {\n      clearTimeout(timeout);\n    }\n  }\n}\n","import type { ApprovalFlow, ApprovalResult, GovernanceToolCall, ConfirmUI } from './approval.js';\n\nexport class CliApprover implements ApprovalFlow {\n  private ui: ConfirmUI;\n  private timeoutSeconds: number;\n\n  constructor(ui: ConfirmUI, timeoutSeconds: number = 300) {\n    this.ui = ui;\n    this.timeoutSeconds = timeoutSeconds;\n  }\n\n  async requestApproval(\n    toolCall: GovernanceToolCall,\n    context: { userId: string; role: string; orgUnit: string },\n  ): Promise<ApprovalResult> {\n    const title = `Approval Required: ${toolCall.toolName}`;\n    const inputSummary = Object.entries(toolCall.input)\n      .map(\n        ([k, v]) =>\n          `  ${k}: ${typeof v === 'string' ? v.slice(0, 200) : JSON.stringify(v).slice(0, 200)}`,\n      )\n      .join('\\n');\n    const message = `User: ${context.userId} (${context.role})\\nOrg: ${context.orgUnit}\\n\\nTool: ${toolCall.toolName}\\nInput:\\n${inputSummary}`;\n\n    const start = Date.now();\n\n    try {\n      const approved = await this.ui.confirm(title, message, {\n        timeout: this.timeoutSeconds * 1000,\n      });\n\n      return {\n        approved,\n        approver: 'cli',\n        duration: Date.now() - start,\n        reason: approved ? undefined : 'Denied by user',\n      };\n    } catch {\n      // Timeout or error — deny\n      return {\n        approved: false,\n        approver: 'cli',\n        duration: Date.now() - start,\n        reason: 'Approval timed out',\n      };\n    }\n  }\n}\n","import type { ApprovalFlow, ApprovalResult, GovernanceToolCall } from './approval.js';\n\nexport class WebhookApprover implements ApprovalFlow {\n  private url: string;\n  private timeoutMs: number;\n\n  constructor(url: string, timeoutSeconds: number = 300) {\n    this.url = url;\n    this.timeoutMs = timeoutSeconds * 1000;\n  }\n\n  async requestApproval(\n    toolCall: GovernanceToolCall,\n    context: { userId: string; role: string; orgUnit: string },\n  ): Promise<ApprovalResult> {\n    const start = Date.now();\n    const controller = new AbortController();\n    const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n\n    try {\n      const response = await fetch(this.url, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          toolCall: { toolName: toolCall.toolName, input: toolCall.input },\n          context,\n        }),\n        signal: controller.signal,\n      });\n\n      if (!response.ok) {\n        return {\n          approved: false,\n          approver: 'webhook',\n          duration: Date.now() - start,\n          reason: `Webhook returned ${response.status}`,\n        };\n      }\n\n      const body = (await response.json()) as { approved: boolean; reason?: string };\n\n      return {\n        approved: body.approved,\n        approver: 'webhook',\n        duration: Date.now() - start,\n        reason: body.reason,\n      };\n    } catch (err) {\n      return {\n        approved: false,\n        approver: 'webhook',\n        duration: Date.now() - start,\n        reason:\n          err instanceof Error && err.name === 'AbortError'\n            ? 'Webhook timed out'\n            : 'Webhook request failed',\n      };\n    } finally {\n      clearTimeout(timeout);\n    }\n  }\n}\n","import { CliApprover } from './cli-approver.js';\nimport { WebhookApprover } from './webhook-approver.js';\n\nexport interface GovernanceToolCall {\n  toolName: string;\n  input: Record<string, unknown>;\n}\n\nexport interface ApprovalResult {\n  approved: boolean;\n  reason?: string;\n  approver: string;\n  duration: number;\n}\n\nexport interface ApprovalFlow {\n  requestApproval(\n    toolCall: GovernanceToolCall,\n    context: { userId: string; role: string; orgUnit: string },\n  ): Promise<ApprovalResult>;\n}\n\nexport interface ConfirmUI {\n  confirm(title: string, message: string, opts?: { timeout?: number }): Promise<boolean>;\n}\n\nexport interface HitlConfig {\n  default_mode: 'autonomous' | 'supervised' | 'dry_run';\n  approval_channel: 'cli' | 'webhook';\n  timeout_seconds: number;\n  webhook?: { url: string };\n}\n\nexport function createApprovalFlow(config: HitlConfig, ui?: ConfirmUI): ApprovalFlow {\n  if (config.approval_channel === 'webhook' && config.webhook?.url) {\n    return new WebhookApprover(config.webhook.url, config.timeout_seconds);\n  }\n\n  // Fall back to CLI (also handles webhook without URL)\n  if (!ui) {\n    throw new Error('CLI approval channel requires a ConfirmUI (ExtensionContext.ui)');\n  }\n\n  return new CliApprover(ui, config.timeout_seconds);\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from 'node:http';\nimport { writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { stringify } from 'yaml';\nimport type { GovernanceConfig } from '../config/schema.js';\nimport { DEFAULTS } from '../config/defaults.js';\nimport { WIZARD_HTML } from './html.js';\n\nexport interface WizardServerOptions {\n  workingDirectory: string;\n  existingConfig?: GovernanceConfig;\n  onComplete: (files: { path: string; content: string }[]) => void;\n  onError: (error: Error) => void;\n}\n\nconst AUTO_SHUTDOWN_MS = 10 * 60 * 1000;\n\nconst BUILTIN_ROLES = {\n  analyst: {\n    allowed_tools: ['read', 'grep', 'find', 'ls'],\n    blocked_tools: ['bash', 'write', 'edit'],\n    hitl_mode: 'dry_run' as const,\n  },\n  project_lead: {\n    allowed_tools: ['read', 'write', 'edit', 'grep', 'find', 'ls', 'bash'],\n    blocked_tools: [],\n    hitl_mode: 'supervised' as const,\n  },\n  admin: {\n    allowed_tools: ['read', 'write', 'edit', 'grep', 'find', 'ls', 'bash'],\n    blocked_tools: [],\n    hitl_mode: 'autonomous' as const,\n  },\n  auditor: {\n    allowed_tools: ['read', 'grep', 'find', 'ls'],\n    blocked_tools: ['bash', 'write', 'edit'],\n    hitl_mode: 'dry_run' as const,\n  },\n};\n\nfunction setCorsHeaders(res: ServerResponse): void {\n  res.setHeader('Access-Control-Allow-Origin', 'http://localhost');\n  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n}\n\nfunction sendJson(res: ServerResponse, status: number, data: unknown): void {\n  res.writeHead(status, { 'Content-Type': 'application/json' });\n  res.end(JSON.stringify(data));\n}\n\nfunction readBody(req: IncomingMessage): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    req.on('data', (chunk: Buffer) => chunks.push(chunk));\n    req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));\n    req.on('error', reject);\n  });\n}\n\nexport function startWizardServer(\n  options: WizardServerOptions,\n): Promise<{ port: number; close: () => void }> {\n  return new Promise((resolve, reject) => {\n    let shutdownTimer: ReturnType<typeof setTimeout> | undefined;\n\n    const server = createServer((req, res) => {\n      setCorsHeaders(res);\n\n      if (req.method === 'OPTIONS') {\n        res.writeHead(204);\n        res.end();\n        return;\n      }\n\n      const url = req.url ?? '/';\n\n      try {\n        if (req.method === 'GET' && url === '/') {\n          res.writeHead(200, { 'Content-Type': 'text/html' });\n          res.end(WIZARD_HTML);\n          return;\n        }\n\n        if (req.method === 'GET' && url === '/api/config') {\n          sendJson(res, 200, options.existingConfig ?? DEFAULTS);\n          return;\n        }\n\n        if (req.method === 'GET' && url === '/api/defaults') {\n          sendJson(res, 200, { defaults: DEFAULTS, roles: BUILTIN_ROLES });\n          return;\n        }\n\n        if (req.method === 'POST' && url === '/api/save') {\n          readBody(req)\n            .then((body) => {\n              const parsed: unknown = JSON.parse(body);\n              if (typeof parsed !== 'object' || parsed === null || !('governance' in parsed)) {\n                sendJson(res, 400, { error: 'Request body must include \"governance\" property' });\n                return;\n              }\n\n              const payload = parsed as { governance: GovernanceConfig; rules?: unknown };\n              const governanceYaml = stringify(payload.governance);\n              const piDir = join(options.workingDirectory, '.pi');\n              const governancePath = join(piDir, 'governance.yaml');\n\n              mkdirSync(piDir, { recursive: true });\n              writeFileSync(governancePath, governanceYaml, 'utf-8');\n\n              const files: { path: string; content: string }[] = [\n                { path: governancePath, content: governanceYaml },\n              ];\n\n              if (payload.rules !== undefined) {\n                const rulesYaml = stringify(payload.rules);\n                const rulesPath = join(options.workingDirectory, 'governance-rules.yaml');\n                writeFileSync(rulesPath, rulesYaml, 'utf-8');\n                files.push({ path: rulesPath, content: rulesYaml });\n              }\n\n              sendJson(res, 200, { ok: true, files: files.map((f) => f.path) });\n              options.onComplete(files);\n            })\n            .catch((err: unknown) => {\n              const message = err instanceof Error ? err.message : String(err);\n              sendJson(res, 400, { error: `Invalid request body: ${message}` });\n            });\n          return;\n        }\n\n        if (req.method === 'POST' && url === '/api/close') {\n          sendJson(res, 200, { ok: true });\n          setTimeout(() => {\n            closeServer();\n          }, 100);\n          return;\n        }\n\n        sendJson(res, 404, { error: 'Not found' });\n      } catch (err: unknown) {\n        const error = err instanceof Error ? err : new Error(String(err));\n        options.onError(error);\n        sendJson(res, 500, { error: 'Internal server error' });\n      }\n    });\n\n    function closeServer(): void {\n      if (shutdownTimer !== undefined) {\n        clearTimeout(shutdownTimer);\n        shutdownTimer = undefined;\n      }\n      server.close();\n    }\n\n    server.on('error', (err) => {\n      options.onError(err);\n      reject(err);\n    });\n\n    server.listen(0, () => {\n      const addr = server.address();\n      if (addr === null || typeof addr === 'string') {\n        const err = new Error('Failed to get server address');\n        options.onError(err);\n        reject(err);\n        return;\n      }\n\n      shutdownTimer = setTimeout(() => {\n        closeServer();\n      }, AUTO_SHUTDOWN_MS);\n\n      resolve({ port: addr.port, close: closeServer });\n    });\n  });\n}\n","export const WIZARD_HTML: string = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Pi Governance — Setup Wizard</title>\n<style>\n  :root {\n    --bg: #f8f9fa;\n    --bg-surface: #ffffff;\n    --bg-surface-alt: #f1f3f5;\n    --bg-code: #e9ecef;\n    --text: #212529;\n    --text-muted: #6c757d;\n    --text-inverse: #ffffff;\n    --border: #dee2e6;\n    --border-focus: #4263eb;\n    --primary: #4263eb;\n    --primary-hover: #3b5bdb;\n    --primary-subtle: #dbe4ff;\n    --success: #2f9e44;\n    --success-subtle: #d3f9d8;\n    --danger: #e03131;\n    --danger-subtle: #ffe3e3;\n    --warning: #f08c00;\n    --warning-subtle: #fff3bf;\n    --radius: 8px;\n    --radius-sm: 4px;\n    --shadow: 0 1px 3px rgba(0,0,0,0.08);\n    --shadow-lg: 0 4px 12px rgba(0,0,0,0.1);\n    --font-mono: 'SF Mono', 'Cascadia Code', 'Fira Code', monospace;\n    --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;\n    --transition: 150ms ease;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    :root {\n      --bg: #1a1b1e;\n      --bg-surface: #25262b;\n      --bg-surface-alt: #2c2e33;\n      --bg-code: #2c2e33;\n      --text: #c1c2c5;\n      --text-muted: #909296;\n      --text-inverse: #1a1b1e;\n      --border: #373a40;\n      --border-focus: #5c7cfa;\n      --primary: #5c7cfa;\n      --primary-hover: #748ffc;\n      --primary-subtle: #1b2559;\n      --success: #51cf66;\n      --success-subtle: #0b3d1a;\n      --danger: #ff6b6b;\n      --danger-subtle: #3d0b0b;\n      --warning: #fcc419;\n      --warning-subtle: #3d2e00;\n      --shadow: 0 1px 3px rgba(0,0,0,0.3);\n      --shadow-lg: 0 4px 12px rgba(0,0,0,0.4);\n    }\n  }\n\n  * { margin: 0; padding: 0; box-sizing: border-box; }\n\n  body {\n    font-family: var(--font-sans);\n    background: var(--bg);\n    color: var(--text);\n    line-height: 1.6;\n    min-height: 100vh;\n  }\n\n  .layout {\n    display: grid;\n    grid-template-columns: 1fr 420px;\n    gap: 0;\n    min-height: 100vh;\n  }\n\n  @media (max-width: 1024px) {\n    .layout { grid-template-columns: 1fr; }\n    .preview-panel { display: none; }\n  }\n\n  /* --- Left column: Form --- */\n  .form-column {\n    padding: 32px 40px 80px;\n    overflow-y: auto;\n    max-height: 100vh;\n  }\n\n  .logo {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 8px;\n  }\n\n  .logo-icon {\n    width: 36px; height: 36px;\n    background: var(--primary);\n    border-radius: var(--radius);\n    display: flex; align-items: center; justify-content: center;\n    color: var(--text-inverse);\n    font-weight: 700; font-size: 18px;\n  }\n\n  .logo-text {\n    font-size: 20px;\n    font-weight: 700;\n    color: var(--text);\n  }\n\n  .logo-text span { color: var(--text-muted); font-weight: 400; }\n\n  h1 {\n    font-size: 28px;\n    font-weight: 700;\n    margin: 24px 0 8px;\n  }\n\n  .subtitle {\n    color: var(--text-muted);\n    font-size: 15px;\n    margin-bottom: 32px;\n  }\n\n  /* Sections */\n  .section {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 24px;\n    margin-bottom: 20px;\n    box-shadow: var(--shadow);\n  }\n\n  .section-header {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 16px;\n    cursor: pointer;\n    user-select: none;\n  }\n\n  .section-header h2 {\n    font-size: 16px;\n    font-weight: 600;\n    flex: 1;\n  }\n\n  .section-badge {\n    font-size: 11px;\n    padding: 2px 8px;\n    border-radius: 10px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n  }\n\n  .badge-required { background: var(--danger-subtle); color: var(--danger); }\n  .badge-optional { background: var(--primary-subtle); color: var(--primary); }\n\n  .section-icon {\n    width: 32px; height: 32px;\n    border-radius: var(--radius-sm);\n    display: flex; align-items: center; justify-content: center;\n    font-size: 16px;\n    flex-shrink: 0;\n  }\n\n  .section-body { display: block; }\n  .section.collapsed .section-body { display: none; }\n  .section-chevron {\n    transition: transform var(--transition);\n    color: var(--text-muted);\n    font-size: 12px;\n  }\n  .section.collapsed .section-chevron { transform: rotate(-90deg); }\n\n  /* Form elements */\n  label {\n    display: block;\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--text);\n    margin-bottom: 4px;\n  }\n\n  .label-hint {\n    font-weight: 400;\n    color: var(--text-muted);\n    font-size: 12px;\n  }\n\n  input[type=\"text\"],\n  input[type=\"number\"],\n  select {\n    width: 100%;\n    padding: 8px 12px;\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    background: var(--bg-surface);\n    color: var(--text);\n    font-size: 14px;\n    font-family: var(--font-sans);\n    transition: border-color var(--transition);\n    outline: none;\n  }\n\n  input:focus, select:focus {\n    border-color: var(--border-focus);\n    box-shadow: 0 0 0 2px var(--primary-subtle);\n  }\n\n  .field { margin-bottom: 16px; }\n\n  .field-row {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 12px;\n  }\n\n  .field-row-3 {\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr;\n    gap: 12px;\n  }\n\n  /* Toggle switch */\n  .toggle-row {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 12px;\n  }\n\n  .toggle {\n    position: relative;\n    width: 40px; height: 22px;\n    flex-shrink: 0;\n  }\n\n  .toggle input { display: none; }\n\n  .toggle-slider {\n    position: absolute;\n    inset: 0;\n    background: var(--border);\n    border-radius: 11px;\n    cursor: pointer;\n    transition: background var(--transition);\n  }\n\n  .toggle-slider::before {\n    content: '';\n    position: absolute;\n    width: 16px; height: 16px;\n    left: 3px; top: 3px;\n    background: white;\n    border-radius: 50%;\n    transition: transform var(--transition);\n  }\n\n  .toggle input:checked + .toggle-slider {\n    background: var(--primary);\n  }\n\n  .toggle input:checked + .toggle-slider::before {\n    transform: translateX(18px);\n  }\n\n  .toggle-label {\n    font-size: 14px;\n    font-weight: 500;\n  }\n\n  /* Role cards */\n  .role-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 12px;\n  }\n\n  .role-card {\n    border: 2px solid var(--border);\n    border-radius: var(--radius);\n    padding: 16px;\n    cursor: pointer;\n    transition: all var(--transition);\n    position: relative;\n  }\n\n  .role-card:hover { border-color: var(--primary); }\n\n  .role-card.selected {\n    border-color: var(--primary);\n    background: var(--primary-subtle);\n  }\n\n  .role-card-check {\n    position: absolute;\n    top: 12px; right: 12px;\n    width: 20px; height: 20px;\n    border: 2px solid var(--border);\n    border-radius: 4px;\n    display: flex; align-items: center; justify-content: center;\n    font-size: 12px;\n    color: transparent;\n    transition: all var(--transition);\n  }\n\n  .role-card.selected .role-card-check {\n    background: var(--primary);\n    border-color: var(--primary);\n    color: white;\n  }\n\n  .role-name {\n    font-weight: 600;\n    font-size: 14px;\n    margin-bottom: 4px;\n  }\n\n  .role-desc {\n    font-size: 12px;\n    color: var(--text-muted);\n    margin-bottom: 8px;\n  }\n\n  .role-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 4px;\n  }\n\n  .role-tag {\n    font-size: 11px;\n    padding: 1px 6px;\n    border-radius: 3px;\n    background: var(--bg-surface-alt);\n    color: var(--text-muted);\n    font-family: var(--font-mono);\n  }\n\n  .role-details {\n    display: none;\n    margin-top: 12px;\n    padding-top: 12px;\n    border-top: 1px solid var(--border);\n  }\n\n  .role-card.selected .role-details { display: block; }\n\n  /* Chip selector */\n  .chip-group {\n    display: flex;\n    gap: 6px;\n    flex-wrap: wrap;\n    margin-bottom: 12px;\n  }\n\n  .chip {\n    padding: 5px 14px;\n    border: 1px solid var(--border);\n    border-radius: 16px;\n    font-size: 13px;\n    cursor: pointer;\n    transition: all var(--transition);\n    background: var(--bg-surface);\n    color: var(--text);\n  }\n\n  .chip:hover { border-color: var(--primary); }\n\n  .chip.active {\n    background: var(--primary);\n    border-color: var(--primary);\n    color: var(--text-inverse);\n  }\n\n  /* Pattern list */\n  .pattern-list { margin-top: 12px; }\n\n  .pattern-item {\n    display: grid;\n    grid-template-columns: 1fr 1.5fr auto auto;\n    gap: 8px;\n    align-items: center;\n    margin-bottom: 8px;\n  }\n\n  .pattern-item input, .pattern-item select {\n    font-size: 13px;\n    padding: 6px 8px;\n  }\n\n  .btn-remove {\n    background: none;\n    border: none;\n    color: var(--danger);\n    cursor: pointer;\n    font-size: 18px;\n    padding: 4px;\n    line-height: 1;\n  }\n\n  .btn-add {\n    background: none;\n    border: 1px dashed var(--border);\n    border-radius: var(--radius-sm);\n    padding: 6px 14px;\n    color: var(--primary);\n    cursor: pointer;\n    font-size: 13px;\n    font-weight: 500;\n    transition: all var(--transition);\n  }\n\n  .btn-add:hover {\n    border-color: var(--primary);\n    background: var(--primary-subtle);\n  }\n\n  /* Allowlist */\n  .allowlist-item {\n    display: flex;\n    gap: 8px;\n    margin-bottom: 8px;\n  }\n\n  .allowlist-item input { flex: 1; font-size: 13px; padding: 6px 8px; }\n\n  /* Sink list */\n  .sink-item {\n    background: var(--bg-surface-alt);\n    border-radius: var(--radius-sm);\n    padding: 12px;\n    margin-bottom: 8px;\n    position: relative;\n  }\n\n  .sink-item .btn-remove {\n    position: absolute;\n    top: 8px; right: 8px;\n  }\n\n  /* --- Right column: Preview --- */\n  .preview-panel {\n    background: var(--bg-surface-alt);\n    border-left: 1px solid var(--border);\n    padding: 24px;\n    display: flex;\n    flex-direction: column;\n    position: sticky;\n    top: 0;\n    height: 100vh;\n    overflow: hidden;\n  }\n\n  .preview-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    margin-bottom: 16px;\n    flex-shrink: 0;\n  }\n\n  .preview-header h3 {\n    font-size: 14px;\n    font-weight: 600;\n  }\n\n  .preview-tabs {\n    display: flex;\n    gap: 4px;\n    margin-bottom: 12px;\n    flex-shrink: 0;\n  }\n\n  .preview-tab {\n    padding: 4px 12px;\n    font-size: 12px;\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    background: var(--bg-surface);\n    cursor: pointer;\n    color: var(--text-muted);\n    transition: all var(--transition);\n  }\n\n  .preview-tab.active {\n    background: var(--primary);\n    border-color: var(--primary);\n    color: var(--text-inverse);\n  }\n\n  .preview-content {\n    flex: 1;\n    overflow-y: auto;\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 16px;\n  }\n\n  .preview-content pre {\n    font-family: var(--font-mono);\n    font-size: 12px;\n    line-height: 1.5;\n    white-space: pre;\n    color: var(--text);\n    margin: 0;\n  }\n\n  /* Bottom bar */\n  .bottom-bar {\n    position: fixed;\n    bottom: 0;\n    left: 0;\n    right: 420px;\n    padding: 16px 40px;\n    background: var(--bg-surface);\n    border-top: 1px solid var(--border);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    z-index: 100;\n    box-shadow: 0 -2px 8px rgba(0,0,0,0.06);\n  }\n\n  @media (max-width: 1024px) {\n    .bottom-bar { right: 0; }\n  }\n\n  .btn-primary {\n    padding: 10px 28px;\n    background: var(--primary);\n    color: var(--text-inverse);\n    border: none;\n    border-radius: var(--radius);\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background var(--transition);\n  }\n\n  .btn-primary:hover { background: var(--primary-hover); }\n  .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }\n\n  .btn-secondary {\n    padding: 10px 20px;\n    background: var(--bg-surface);\n    color: var(--text);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    font-size: 14px;\n    font-weight: 500;\n    cursor: pointer;\n    transition: all var(--transition);\n  }\n\n  .btn-secondary:hover { border-color: var(--primary); color: var(--primary); }\n\n  .save-status {\n    font-size: 13px;\n    color: var(--text-muted);\n  }\n\n  .save-status.success { color: var(--success); }\n  .save-status.error { color: var(--danger); }\n\n  /* Toast */\n  .toast {\n    position: fixed;\n    top: 20px;\n    right: 20px;\n    padding: 12px 20px;\n    border-radius: var(--radius);\n    font-size: 14px;\n    font-weight: 500;\n    z-index: 1000;\n    box-shadow: var(--shadow-lg);\n    transform: translateY(-10px);\n    opacity: 0;\n    transition: all 300ms ease;\n    pointer-events: none;\n  }\n\n  .toast.visible { transform: translateY(0); opacity: 1; pointer-events: auto; }\n  .toast.success { background: var(--success); color: white; }\n  .toast.error { background: var(--danger); color: white; }\n\n  /* Helpers */\n  .help-text {\n    font-size: 12px;\n    color: var(--text-muted);\n    margin-top: 4px;\n  }\n\n  .divider {\n    border: none;\n    border-top: 1px solid var(--border);\n    margin: 16px 0;\n  }\n\n  .hidden { display: none !important; }\n</style>\n</head>\n<body>\n<div class=\"layout\">\n  <!-- ═══════════ LEFT: FORM ═══════════ -->\n  <div class=\"form-column\">\n    <div class=\"logo\">\n      <div class=\"logo-icon\">G</div>\n      <div class=\"logo-text\">Pi Governance <span>Setup Wizard</span></div>\n    </div>\n\n    <h1>Configure your governance policy</h1>\n    <p class=\"subtitle\">\n      AI coding agents are powerful but need guardrails. This wizard generates a\n      <code>governance.yaml</code> and <code>governance-rules.yaml</code> to control\n      tool access, bash safety, data-loss prevention, human approvals, and audit logging.\n    </p>\n\n    <!-- ── 1. Roles ── -->\n    <div class=\"section\" id=\"sec-roles\">\n      <div class=\"section-header\" onclick=\"toggleSection('sec-roles')\">\n        <div class=\"section-icon\" style=\"background:var(--primary-subtle);color:var(--primary)\">&#x1f465;</div>\n        <h2>Roles</h2>\n        <span class=\"section-badge badge-required\">Required</span>\n        <span class=\"section-chevron\">&#9660;</span>\n      </div>\n      <div class=\"section-body\">\n        <p class=\"help-text\" style=\"margin-bottom:12px\">Select the roles your team needs. Each role defines tool access, execution mode, and approval rules.</p>\n        <div class=\"role-grid\" id=\"role-grid\"></div>\n      </div>\n    </div>\n\n    <!-- ── 2. DLP ── -->\n    <div class=\"section\" id=\"sec-dlp\">\n      <div class=\"section-header\" onclick=\"toggleSection('sec-dlp')\">\n        <div class=\"section-icon\" style=\"background:var(--warning-subtle);color:var(--warning)\">&#x1f6e1;</div>\n        <h2>Data Loss Prevention</h2>\n        <span class=\"section-badge badge-optional\">Optional</span>\n        <span class=\"section-chevron\">&#9660;</span>\n      </div>\n      <div class=\"section-body\">\n        <div class=\"toggle-row\">\n          <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-enabled\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n          <span class=\"toggle-label\">Enable DLP scanning</span>\n        </div>\n\n        <div id=\"dlp-options\">\n          <div class=\"field\">\n            <label>Default Mode</label>\n            <div class=\"chip-group\" id=\"dlp-mode\">\n              <span class=\"chip active\" data-value=\"audit\" onclick=\"selectChip(this)\">Audit</span>\n              <span class=\"chip\" data-value=\"mask\" onclick=\"selectChip(this)\">Mask</span>\n              <span class=\"chip\" data-value=\"block\" onclick=\"selectChip(this)\">Block</span>\n            </div>\n          </div>\n\n          <div class=\"field-row\">\n            <div class=\"field\">\n              <label>On Input <span class=\"label-hint\">(agent receives)</span></label>\n              <select id=\"dlp-on-input\" onchange=\"updatePreview()\">\n                <option value=\"\">Use default mode</option>\n                <option value=\"audit\">Audit</option>\n                <option value=\"mask\">Mask</option>\n                <option value=\"block\" selected>Block</option>\n              </select>\n            </div>\n            <div class=\"field\">\n              <label>On Output <span class=\"label-hint\">(agent produces)</span></label>\n              <select id=\"dlp-on-output\" onchange=\"updatePreview()\">\n                <option value=\"\">Use default mode</option>\n                <option value=\"audit\">Audit</option>\n                <option value=\"mask\" selected>Mask</option>\n                <option value=\"block\">Block</option>\n              </select>\n            </div>\n          </div>\n\n          <hr class=\"divider\">\n          <label>Built-in Patterns</label>\n          <div class=\"toggle-row\" style=\"margin-top:6px\">\n            <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-secrets\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n            <span class=\"toggle-label\">Secrets <span class=\"label-hint\">(API keys, tokens, passwords)</span></span>\n          </div>\n          <div class=\"toggle-row\">\n            <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-pii\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n            <span class=\"toggle-label\">PII <span class=\"label-hint\">(emails, phone numbers, SSNs)</span></span>\n          </div>\n\n          <hr class=\"divider\">\n          <label>Masking Options</label>\n          <div class=\"field-row-3\" style=\"margin-top:8px\">\n            <div class=\"field\">\n              <label>Strategy</label>\n              <select id=\"dlp-mask-strategy\" onchange=\"updatePreview()\">\n                <option value=\"partial\" selected>Partial</option>\n                <option value=\"full\">Full</option>\n                <option value=\"hash\">Hash</option>\n              </select>\n            </div>\n            <div class=\"field\">\n              <label>Show Chars</label>\n              <input type=\"number\" id=\"dlp-mask-show\" value=\"4\" min=\"0\" onchange=\"updatePreview()\">\n            </div>\n            <div class=\"field\">\n              <label>Placeholder</label>\n              <input type=\"text\" id=\"dlp-mask-placeholder\" value=\"***\" onchange=\"updatePreview()\">\n            </div>\n          </div>\n\n          <hr class=\"divider\">\n          <label>Severity Threshold <span class=\"label-hint\">(minimum severity to trigger DLP)</span></label>\n          <div class=\"chip-group\" id=\"dlp-severity\" style=\"margin-top:6px\">\n            <span class=\"chip active\" data-value=\"low\" onclick=\"selectChip(this)\">Low</span>\n            <span class=\"chip\" data-value=\"medium\" onclick=\"selectChip(this)\">Medium</span>\n            <span class=\"chip\" data-value=\"high\" onclick=\"selectChip(this)\">High</span>\n            <span class=\"chip\" data-value=\"critical\" onclick=\"selectChip(this)\">Critical</span>\n          </div>\n\n          <hr class=\"divider\">\n          <label>Custom Patterns</label>\n          <div class=\"pattern-list\" id=\"dlp-custom-patterns\"></div>\n          <button class=\"btn-add\" onclick=\"addCustomPattern()\">+ Add pattern</button>\n\n          <hr class=\"divider\">\n          <label>Allowlist <span class=\"label-hint\">(patterns to ignore)</span></label>\n          <div id=\"dlp-allowlist\"></div>\n          <button class=\"btn-add\" onclick=\"addAllowlistEntry()\" style=\"margin-top:8px\">+ Add entry</button>\n        </div>\n      </div>\n    </div>\n\n    <!-- ── 3. Bash Classification ── -->\n    <div class=\"section\" id=\"sec-bash\">\n      <div class=\"section-header\" onclick=\"toggleSection('sec-bash')\">\n        <div class=\"section-icon\" style=\"background:var(--danger-subtle);color:var(--danger)\">&#x1f4bb;</div>\n        <h2>Bash Classification</h2>\n        <span class=\"section-badge badge-optional\">Optional</span>\n        <span class=\"section-chevron\">&#9660;</span>\n      </div>\n      <div class=\"section-body\">\n        <p class=\"help-text\" style=\"margin-bottom:12px\">The built-in bash classifier categorizes commands by danger level. Adjust the threshold for auto-blocking.</p>\n        <div class=\"field\">\n          <label>Auto-block Severity</label>\n          <p class=\"help-text\">Commands at or above this severity are blocked without HITL.</p>\n          <div class=\"chip-group\" id=\"bash-severity\" style=\"margin-top:6px\">\n            <span class=\"chip\" data-value=\"low\" onclick=\"selectChip(this)\">Low</span>\n            <span class=\"chip\" data-value=\"medium\" onclick=\"selectChip(this)\">Medium</span>\n            <span class=\"chip active\" data-value=\"high\" onclick=\"selectChip(this)\">High</span>\n            <span class=\"chip\" data-value=\"critical\" onclick=\"selectChip(this)\">Critical</span>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- ── 4. HITL ── -->\n    <div class=\"section\" id=\"sec-hitl\">\n      <div class=\"section-header\" onclick=\"toggleSection('sec-hitl')\">\n        <div class=\"section-icon\" style=\"background:var(--success-subtle);color:var(--success)\">&#x1f9d1;</div>\n        <h2>Human-in-the-Loop</h2>\n        <span class=\"section-badge badge-required\">Required</span>\n        <span class=\"section-chevron\">&#9660;</span>\n      </div>\n      <div class=\"section-body\">\n        <div class=\"field\">\n          <label>Default Execution Mode</label>\n          <div class=\"chip-group\" id=\"hitl-mode\">\n            <span class=\"chip\" data-value=\"autonomous\" onclick=\"selectChip(this)\">Autonomous</span>\n            <span class=\"chip active\" data-value=\"supervised\" onclick=\"selectChip(this)\">Supervised</span>\n            <span class=\"chip\" data-value=\"dry_run\" onclick=\"selectChip(this)\">Dry Run</span>\n          </div>\n        </div>\n        <div class=\"field-row\">\n          <div class=\"field\">\n            <label>Approval Channel</label>\n            <select id=\"hitl-channel\" onchange=\"updatePreview()\">\n              <option value=\"cli\" selected>CLI (terminal prompt)</option>\n              <option value=\"webhook\">Webhook</option>\n            </select>\n          </div>\n          <div class=\"field\">\n            <label>Timeout <span class=\"label-hint\">(seconds)</span></label>\n            <input type=\"number\" id=\"hitl-timeout\" value=\"300\" min=\"10\" max=\"3600\" onchange=\"updatePreview()\">\n          </div>\n        </div>\n        <div class=\"field hidden\" id=\"hitl-webhook-field\">\n          <label>Webhook URL</label>\n          <input type=\"text\" id=\"hitl-webhook-url\" placeholder=\"https://...\" onchange=\"updatePreview()\">\n        </div>\n      </div>\n    </div>\n\n    <!-- ── 5. Audit ── -->\n    <div class=\"section\" id=\"sec-audit\">\n      <div class=\"section-header\" onclick=\"toggleSection('sec-audit')\">\n        <div class=\"section-icon\" style=\"background:var(--primary-subtle);color:var(--primary)\">&#x1f4dd;</div>\n        <h2>Audit Logging</h2>\n        <span class=\"section-badge badge-required\">Required</span>\n        <span class=\"section-chevron\">&#9660;</span>\n      </div>\n      <div class=\"section-body\">\n        <p class=\"help-text\" style=\"margin-bottom:12px\">All governance events are logged to one or more sinks.</p>\n        <div id=\"audit-sinks\"></div>\n        <button class=\"btn-add\" onclick=\"addAuditSink()\" style=\"margin-top:8px\">+ Add sink</button>\n      </div>\n    </div>\n\n    <!-- ── 6. Auth ── -->\n    <div class=\"section collapsed\" id=\"sec-auth\">\n      <div class=\"section-header\" onclick=\"toggleSection('sec-auth')\">\n        <div class=\"section-icon\" style=\"background:var(--bg-surface-alt);color:var(--text-muted)\">&#x1f511;</div>\n        <h2>Authentication</h2>\n        <span class=\"section-badge badge-optional\">Optional</span>\n        <span class=\"section-chevron\">&#9660;</span>\n      </div>\n      <div class=\"section-body\">\n        <div class=\"field\">\n          <label>Provider</label>\n          <div class=\"chip-group\" id=\"auth-provider\">\n            <span class=\"chip active\" data-value=\"env\" onclick=\"selectChip(this)\">Environment Vars</span>\n            <span class=\"chip\" data-value=\"local\" onclick=\"selectChip(this)\">Local File</span>\n            <span class=\"chip\" data-value=\"oidc\" onclick=\"selectChip(this)\">OIDC</span>\n          </div>\n        </div>\n        <div id=\"auth-env-fields\">\n          <div class=\"field-row-3\">\n            <div class=\"field\">\n              <label>User Var</label>\n              <input type=\"text\" id=\"auth-user-var\" value=\"PI_GOV_USER\" onchange=\"updatePreview()\">\n            </div>\n            <div class=\"field\">\n              <label>Role Var</label>\n              <input type=\"text\" id=\"auth-role-var\" value=\"PI_GOV_ROLE\" onchange=\"updatePreview()\">\n            </div>\n            <div class=\"field\">\n              <label>Org Unit Var</label>\n              <input type=\"text\" id=\"auth-org-unit-var\" value=\"PI_GOV_ORG_UNIT\" onchange=\"updatePreview()\">\n            </div>\n          </div>\n        </div>\n        <div id=\"auth-local-fields\" class=\"hidden\">\n          <div class=\"field\">\n            <label>Users File</label>\n            <input type=\"text\" id=\"auth-users-file\" value=\"./users.yaml\" onchange=\"updatePreview()\">\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div style=\"height:80px\"></div>\n  </div>\n\n  <!-- ═══════════ RIGHT: PREVIEW ═══════════ -->\n  <div class=\"preview-panel\">\n    <div class=\"preview-header\">\n      <h3>Live Preview</h3>\n    </div>\n    <div class=\"preview-tabs\">\n      <span class=\"preview-tab active\" data-tab=\"governance\" onclick=\"switchTab(this)\">governance.yaml</span>\n      <span class=\"preview-tab\" data-tab=\"rules\" onclick=\"switchTab(this)\">governance-rules.yaml</span>\n    </div>\n    <div class=\"preview-content\">\n      <pre id=\"preview-yaml\"></pre>\n    </div>\n  </div>\n</div>\n\n<!-- ── Bottom bar ── -->\n<div class=\"bottom-bar\">\n  <span class=\"save-status\" id=\"save-status\"></span>\n  <div style=\"display:flex;gap:10px\">\n    <button class=\"btn-secondary\" onclick=\"handleClose()\">Cancel</button>\n    <button class=\"btn-primary\" id=\"btn-save\" onclick=\"handleSave()\">Save Configuration</button>\n  </div>\n</div>\n\n<!-- Toast -->\n<div class=\"toast\" id=\"toast\"></div>\n\n<script>\n// ─── State ───────────────────────────────────────────────────────────\nconst PRESET_ROLES = {\n  analyst: {\n    label: 'Analyst',\n    desc: 'Read-only access, every action requires approval.',\n    allowed_tools: ['read','grep','find','ls'],\n    blocked_tools: ['write','edit','bash'],\n    prompt_template: 'analyst',\n    execution_mode: 'supervised',\n    human_approval: { required_for: ['all'] },\n    token_budget_daily: 100000,\n    allowed_paths: ['{{project_path}}/**'],\n    blocked_paths: ['**/secrets/**', '**/.env*']\n  },\n  project_lead: {\n    label: 'Project Lead',\n    desc: 'Full tools, bash & write need human approval.',\n    allowed_tools: ['read','write','edit','bash','grep','find','ls'],\n    blocked_tools: [],\n    prompt_template: 'project-lead',\n    execution_mode: 'supervised',\n    human_approval: { required_for: ['bash','write'], auto_approve: ['read','edit','grep','find','ls'] },\n    token_budget_daily: 500000,\n    allowed_paths: ['{{project_path}}/**'],\n    blocked_paths: ['**/secrets/**', '**/.env*'],\n    bash_overrides: { additional_blocked: ['sudo','ssh','curl.*\\\\\\\\|.*sh'] }\n  },\n  admin: {\n    label: 'Admin',\n    desc: 'Full autonomous access, no approvals, unlimited budget.',\n    allowed_tools: ['all'],\n    blocked_tools: [],\n    prompt_template: 'admin',\n    execution_mode: 'autonomous',\n    human_approval: { required_for: [] },\n    token_budget_daily: -1,\n    allowed_paths: ['**'],\n    blocked_paths: []\n  },\n  auditor: {\n    label: 'Auditor',\n    desc: 'Dry-run: all calls logged, nothing executed.',\n    allowed_tools: ['read','grep','find','ls'],\n    blocked_tools: ['write','edit','bash'],\n    prompt_template: 'analyst',\n    execution_mode: 'dry_run',\n    human_approval: { required_for: ['all'] },\n    token_budget_daily: 50000,\n    allowed_paths: ['**'],\n    blocked_paths: ['**/secrets/**']\n  }\n};\n\nlet selectedRoles = { analyst: false, project_lead: true, admin: false, auditor: false };\nlet customPatterns = [];\nlet allowlistEntries = [];\nlet auditSinks = [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }];\nlet activePreviewTab = 'governance';\n\n// ─── Init ────────────────────────────────────────────────────────────\ndocument.addEventListener('DOMContentLoaded', async () => {\n  renderRoles();\n  renderAuditSinks();\n  updatePreview();\n\n  try {\n    const [configRes, defaultsRes] = await Promise.all([\n      fetch('/api/config').catch(() => null),\n      fetch('/api/defaults').catch(() => null)\n    ]);\n    if (configRes && configRes.ok) {\n      const cfg = await configRes.json();\n      applyConfig(cfg);\n    }\n    if (defaultsRes && defaultsRes.ok) {\n      const defs = await defaultsRes.json();\n      if (!configRes || !configRes.ok) applyConfig(defs);\n    }\n  } catch (e) { /* use built-in defaults */ }\n\n  // watch for webhook channel\n  document.getElementById('hitl-channel').addEventListener('change', (e) => {\n    document.getElementById('hitl-webhook-field').classList.toggle('hidden', e.target.value !== 'webhook');\n    updatePreview();\n  });\n\n  // watch dlp toggle\n  document.getElementById('dlp-enabled').addEventListener('change', (e) => {\n    document.getElementById('dlp-options').classList.toggle('hidden', !e.target.checked);\n    updatePreview();\n  });\n});\n\n// ─── Apply Config ────────────────────────────────────────────────────\nfunction applyConfig(cfg) {\n  if (!cfg) return;\n\n  // Auth\n  if (cfg.auth) {\n    setChipValue('auth-provider', cfg.auth.provider || 'env');\n    if (cfg.auth.env) {\n      if (cfg.auth.env.user_var) document.getElementById('auth-user-var').value = cfg.auth.env.user_var;\n      if (cfg.auth.env.role_var) document.getElementById('auth-role-var').value = cfg.auth.env.role_var;\n      if (cfg.auth.env.org_unit_var) document.getElementById('auth-org-unit-var').value = cfg.auth.env.org_unit_var;\n    }\n    if (cfg.auth.local && cfg.auth.local.users_file) {\n      document.getElementById('auth-users-file').value = cfg.auth.local.users_file;\n    }\n  }\n\n  // HITL\n  if (cfg.hitl) {\n    if (cfg.hitl.default_mode) setChipValue('hitl-mode', cfg.hitl.default_mode);\n    if (cfg.hitl.approval_channel) {\n      document.getElementById('hitl-channel').value = cfg.hitl.approval_channel;\n      document.getElementById('hitl-webhook-field').classList.toggle('hidden', cfg.hitl.approval_channel !== 'webhook');\n    }\n    if (cfg.hitl.timeout_seconds) document.getElementById('hitl-timeout').value = cfg.hitl.timeout_seconds;\n    if (cfg.hitl.webhook && cfg.hitl.webhook.url) document.getElementById('hitl-webhook-url').value = cfg.hitl.webhook.url;\n  }\n\n  // DLP\n  if (cfg.dlp) {\n    document.getElementById('dlp-enabled').checked = cfg.dlp.enabled !== false;\n    document.getElementById('dlp-options').classList.toggle('hidden', !cfg.dlp.enabled);\n    if (cfg.dlp.mode) setChipValue('dlp-mode', cfg.dlp.mode);\n    if (cfg.dlp.on_input) document.getElementById('dlp-on-input').value = cfg.dlp.on_input;\n    if (cfg.dlp.on_output) document.getElementById('dlp-on-output').value = cfg.dlp.on_output;\n    if (cfg.dlp.masking) {\n      if (cfg.dlp.masking.strategy) document.getElementById('dlp-mask-strategy').value = cfg.dlp.masking.strategy;\n      if (cfg.dlp.masking.show_chars != null) document.getElementById('dlp-mask-show').value = cfg.dlp.masking.show_chars;\n      if (cfg.dlp.masking.placeholder) document.getElementById('dlp-mask-placeholder').value = cfg.dlp.masking.placeholder;\n    }\n    if (cfg.dlp.severity_threshold) setChipValue('dlp-severity', cfg.dlp.severity_threshold);\n    if (cfg.dlp.built_in) {\n      if (cfg.dlp.built_in.secrets != null) document.getElementById('dlp-secrets').checked = cfg.dlp.built_in.secrets;\n      if (cfg.dlp.built_in.pii != null) document.getElementById('dlp-pii').checked = cfg.dlp.built_in.pii;\n    }\n    if (cfg.dlp.custom_patterns) {\n      customPatterns = cfg.dlp.custom_patterns;\n      renderCustomPatterns();\n    }\n    if (cfg.dlp.allowlist) {\n      allowlistEntries = cfg.dlp.allowlist.map(e => e.pattern || e);\n      renderAllowlist();\n    }\n  }\n\n  // Audit\n  if (cfg.audit && cfg.audit.sinks) {\n    auditSinks = cfg.audit.sinks;\n    renderAuditSinks();\n  }\n\n  updatePreview();\n}\n\n// ─── Roles ───────────────────────────────────────────────────────────\nfunction renderRoles() {\n  const grid = document.getElementById('role-grid');\n  grid.innerHTML = '';\n  for (const [key, role] of Object.entries(PRESET_ROLES)) {\n    const sel = selectedRoles[key];\n    const card = document.createElement('div');\n    card.className = 'role-card' + (sel ? ' selected' : '');\n    card.dataset.role = key;\n    card.onclick = () => { toggleRole(key); };\n    card.innerHTML =\n      '<div class=\"role-card-check\">&#10003;</div>' +\n      '<div class=\"role-name\">' + role.label + '</div>' +\n      '<div class=\"role-desc\">' + role.desc + '</div>' +\n      '<div class=\"role-tags\">' +\n        '<span class=\"role-tag\">' + role.execution_mode + '</span>' +\n        '<span class=\"role-tag\">' + (role.token_budget_daily === -1 ? 'unlimited' : role.token_budget_daily.toLocaleString()) + ' budget</span>' +\n      '</div>' +\n      '<div class=\"role-details\">' +\n        '<div class=\"field\"><label>Allowed Tools</label>' +\n          '<input type=\"text\" value=\"' + role.allowed_tools.join(', ') + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'allowed_tools\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n        '</div>' +\n        '<div class=\"field\"><label>Blocked Tools</label>' +\n          '<input type=\"text\" value=\"' + role.blocked_tools.join(', ') + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'blocked_tools\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n        '</div>' +\n        '<div class=\"field\"><label>Execution Mode</label>' +\n          '<select onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'execution_mode\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n            '<option value=\"supervised\"' + (role.execution_mode === 'supervised' ? ' selected' : '') + '>Supervised</option>' +\n            '<option value=\"autonomous\"' + (role.execution_mode === 'autonomous' ? ' selected' : '') + '>Autonomous</option>' +\n            '<option value=\"dry_run\"' + (role.execution_mode === 'dry_run' ? ' selected' : '') + '>Dry Run</option>' +\n          '</select>' +\n        '</div>' +\n        '<div class=\"field\"><label>Token Budget Daily</label>' +\n          '<input type=\"number\" value=\"' + role.token_budget_daily + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'token_budget_daily\\\\', parseInt(this.value))\" onclick=\"event.stopPropagation()\">' +\n        '</div>' +\n      '</div>';\n    grid.appendChild(card);\n  }\n}\n\nfunction toggleRole(key) {\n  selectedRoles[key] = !selectedRoles[key];\n  renderRoles();\n  updatePreview();\n}\n\nfunction updateRoleField(key, field, value) {\n  if (field === 'allowed_tools' || field === 'blocked_tools') {\n    PRESET_ROLES[key][field] = value.split(',').map(s => s.trim()).filter(Boolean);\n  } else {\n    PRESET_ROLES[key][field] = value;\n  }\n  updatePreview();\n}\n\n// ─── Section Toggle ──────────────────────────────────────────────────\nfunction toggleSection(id) {\n  document.getElementById(id).classList.toggle('collapsed');\n}\n\n// ─── Chip Groups ─────────────────────────────────────────────────────\nfunction selectChip(el) {\n  const group = el.parentElement;\n  group.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));\n  el.classList.add('active');\n\n  // Auth provider visibility\n  if (group.id === 'auth-provider') {\n    const val = el.dataset.value;\n    document.getElementById('auth-env-fields').classList.toggle('hidden', val !== 'env');\n    document.getElementById('auth-local-fields').classList.toggle('hidden', val !== 'local');\n  }\n\n  updatePreview();\n}\n\nfunction getChipValue(groupId) {\n  const active = document.querySelector('#' + groupId + ' .chip.active');\n  return active ? active.dataset.value : '';\n}\n\nfunction setChipValue(groupId, value) {\n  const group = document.getElementById(groupId);\n  if (!group) return;\n  group.querySelectorAll('.chip').forEach(c => {\n    c.classList.toggle('active', c.dataset.value === value);\n  });\n}\n\n// ─── Custom Patterns ─────────────────────────────────────────────────\nfunction addCustomPattern() {\n  customPatterns.push({ name: '', pattern: '', severity: 'medium', action: 'audit' });\n  renderCustomPatterns();\n}\n\nfunction renderCustomPatterns() {\n  const container = document.getElementById('dlp-custom-patterns');\n  container.innerHTML = '';\n  customPatterns.forEach((p, i) => {\n    const div = document.createElement('div');\n    div.className = 'pattern-item';\n    div.innerHTML =\n      '<input type=\"text\" placeholder=\"Name\" value=\"' + esc(p.name) + '\" onchange=\"customPatterns[' + i + '].name=this.value;updatePreview()\">' +\n      '<input type=\"text\" placeholder=\"Regex pattern\" value=\"' + esc(p.pattern) + '\" onchange=\"customPatterns[' + i + '].pattern=this.value;updatePreview()\">' +\n      '<select onchange=\"customPatterns[' + i + '].severity=this.value;updatePreview()\">' +\n        '<option value=\"low\"' + (p.severity==='low'?' selected':'') + '>Low</option>' +\n        '<option value=\"medium\"' + (p.severity==='medium'?' selected':'') + '>Medium</option>' +\n        '<option value=\"high\"' + (p.severity==='high'?' selected':'') + '>High</option>' +\n        '<option value=\"critical\"' + (p.severity==='critical'?' selected':'') + '>Critical</option>' +\n      '</select>' +\n      '<button class=\"btn-remove\" onclick=\"customPatterns.splice(' + i + ',1);renderCustomPatterns();updatePreview()\">&times;</button>';\n    container.appendChild(div);\n  });\n}\n\n// ─── Allowlist ───────────────────────────────────────────────────────\nfunction addAllowlistEntry() {\n  allowlistEntries.push('');\n  renderAllowlist();\n}\n\nfunction renderAllowlist() {\n  const container = document.getElementById('dlp-allowlist');\n  container.innerHTML = '';\n  allowlistEntries.forEach((entry, i) => {\n    const div = document.createElement('div');\n    div.className = 'allowlist-item';\n    div.innerHTML =\n      '<input type=\"text\" placeholder=\"Pattern to allow\" value=\"' + esc(entry) + '\" onchange=\"allowlistEntries[' + i + ']=this.value;updatePreview()\">' +\n      '<button class=\"btn-remove\" onclick=\"allowlistEntries.splice(' + i + ',1);renderAllowlist();updatePreview()\">&times;</button>';\n    container.appendChild(div);\n  });\n}\n\n// ─── Audit Sinks ─────────────────────────────────────────────────────\nfunction addAuditSink() {\n  auditSinks.push({ type: 'jsonl', path: '' });\n  renderAuditSinks();\n}\n\nfunction renderAuditSinks() {\n  const container = document.getElementById('audit-sinks');\n  container.innerHTML = '';\n  auditSinks.forEach((sink, i) => {\n    const div = document.createElement('div');\n    div.className = 'sink-item';\n    let inner = '<button class=\"btn-remove\" onclick=\"auditSinks.splice(' + i + ',1);renderAuditSinks();updatePreview()\">&times;</button>';\n    inner += '<div class=\"field\"><label>Sink Type</label>' +\n      '<select onchange=\"auditSinks[' + i + '].type=this.value;renderAuditSinks();updatePreview()\">' +\n        '<option value=\"jsonl\"' + (sink.type==='jsonl'?' selected':'') + '>JSONL File</option>' +\n        '<option value=\"webhook\"' + (sink.type==='webhook'?' selected':'') + '>Webhook</option>' +\n        '<option value=\"postgres\"' + (sink.type==='postgres'?' selected':'') + '>PostgreSQL</option>' +\n      '</select></div>';\n    if (sink.type === 'jsonl') {\n      inner += '<div class=\"field\"><label>File Path</label>' +\n        '<input type=\"text\" value=\"' + esc(sink.path || '') + '\" placeholder=\"~/.pi/agent/audit.jsonl\" ' +\n        'onchange=\"auditSinks[' + i + '].path=this.value;updatePreview()\"></div>';\n    } else if (sink.type === 'webhook') {\n      inner += '<div class=\"field\"><label>Webhook URL</label>' +\n        '<input type=\"text\" value=\"' + esc(sink.url || '') + '\" placeholder=\"https://...\" ' +\n        'onchange=\"auditSinks[' + i + '].url=this.value;updatePreview()\"></div>';\n    } else if (sink.type === 'postgres') {\n      inner += '<div class=\"field\"><label>Connection String</label>' +\n        '<input type=\"text\" value=\"' + esc(sink.connection || '') + '\" placeholder=\"postgresql://...\" ' +\n        'onchange=\"auditSinks[' + i + '].connection=this.value;updatePreview()\"></div>';\n    }\n    div.innerHTML = inner;\n    container.appendChild(div);\n  });\n}\n\n// ─── Preview Tabs ────────────────────────────────────────────────────\nfunction switchTab(el) {\n  document.querySelectorAll('.preview-tab').forEach(t => t.classList.remove('active'));\n  el.classList.add('active');\n  activePreviewTab = el.dataset.tab;\n  updatePreview();\n}\n\n// ─── YAML Generator ──────────────────────────────────────────────────\nfunction toYaml(obj, indent) {\n  indent = indent || 0;\n  const pad = '  '.repeat(indent);\n  let out = '';\n\n  if (Array.isArray(obj)) {\n    if (obj.length === 0) return ' []\\\\n';\n    for (const item of obj) {\n      if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n        const keys = Object.keys(item);\n        if (keys.length > 0) {\n          out += pad + '- ' + keys[0] + ': ' + formatScalar(item[keys[0]]) + '\\\\n';\n          for (let k = 1; k < keys.length; k++) {\n            const val = item[keys[k]];\n            if (typeof val === 'object' && val !== null) {\n              out += pad + '  ' + keys[k] + ':\\\\n' + toYaml(val, indent + 2);\n            } else {\n              out += pad + '  ' + keys[k] + ': ' + formatScalar(val) + '\\\\n';\n            }\n          }\n        }\n      } else {\n        out += pad + '- ' + formatScalar(item) + '\\\\n';\n      }\n    }\n    return out;\n  }\n\n  if (typeof obj === 'object' && obj !== null) {\n    for (const [key, val] of Object.entries(obj)) {\n      if (val === undefined || val === null) continue;\n      if (typeof val === 'object') {\n        const yamlVal = toYaml(val, indent + 1);\n        if (Array.isArray(val) && val.length === 0) {\n          out += pad + key + ': []\\\\n';\n        } else {\n          out += pad + key + ':\\\\n' + yamlVal;\n        }\n      } else {\n        out += pad + key + ': ' + formatScalar(val) + '\\\\n';\n      }\n    }\n    return out;\n  }\n\n  return pad + formatScalar(obj) + '\\\\n';\n}\n\nfunction formatScalar(val) {\n  if (typeof val === 'boolean') return val ? 'true' : 'false';\n  if (typeof val === 'number') return String(val);\n  if (typeof val === 'string') {\n    if (val === '') return \"''\";\n    if (val === 'true' || val === 'false' || !isNaN(val)) return \"'\" + val + \"'\";\n    if (/[:#{}\\\\[\\\\],&*?|\\\\->!%@]/.test(val) || val.includes('\\\\\\\\')) return \"'\" + val.replace(/'/g, \"''\") + \"'\";\n    return val;\n  }\n  return String(val);\n}\n\n// ─── Build Config Objects ────────────────────────────────────────────\nfunction buildGovernanceConfig() {\n  const cfg = {};\n\n  // Auth\n  const authProvider = getChipValue('auth-provider');\n  cfg.auth = { provider: authProvider };\n  if (authProvider === 'env') {\n    cfg.auth.env = {\n      user_var: document.getElementById('auth-user-var').value || 'PI_GOV_USER',\n      role_var: document.getElementById('auth-role-var').value || 'PI_GOV_ROLE',\n      org_unit_var: document.getElementById('auth-org-unit-var').value || 'PI_GOV_ORG_UNIT'\n    };\n  } else if (authProvider === 'local') {\n    cfg.auth.local = {\n      users_file: document.getElementById('auth-users-file').value || './users.yaml'\n    };\n  }\n\n  // Policy\n  cfg.policy = {\n    engine: 'yaml',\n    yaml: { rules_file: './governance-rules.yaml' }\n  };\n\n  // HITL\n  cfg.hitl = {\n    default_mode: getChipValue('hitl-mode') || 'supervised',\n    approval_channel: document.getElementById('hitl-channel').value,\n    timeout_seconds: parseInt(document.getElementById('hitl-timeout').value) || 300\n  };\n  if (cfg.hitl.approval_channel === 'webhook') {\n    const url = document.getElementById('hitl-webhook-url').value;\n    if (url) cfg.hitl.webhook = { url: url };\n  }\n\n  // Audit\n  cfg.audit = { sinks: auditSinks.filter(s => {\n    if (s.type === 'jsonl') return s.path;\n    if (s.type === 'webhook') return s.url;\n    if (s.type === 'postgres') return s.connection;\n    return false;\n  }).map(s => {\n    if (s.type === 'jsonl') return { type: 'jsonl', path: s.path };\n    if (s.type === 'webhook') return { type: 'webhook', url: s.url };\n    if (s.type === 'postgres') return { type: 'postgres', connection: s.connection };\n    return s;\n  })};\n\n  // DLP\n  if (document.getElementById('dlp-enabled').checked) {\n    cfg.dlp = {\n      enabled: true,\n      mode: getChipValue('dlp-mode') || 'audit'\n    };\n    const onInput = document.getElementById('dlp-on-input').value;\n    const onOutput = document.getElementById('dlp-on-output').value;\n    if (onInput) cfg.dlp.on_input = onInput;\n    if (onOutput) cfg.dlp.on_output = onOutput;\n    cfg.dlp.masking = {\n      strategy: document.getElementById('dlp-mask-strategy').value,\n      show_chars: parseInt(document.getElementById('dlp-mask-show').value) || 4,\n      placeholder: document.getElementById('dlp-mask-placeholder').value || '***'\n    };\n    cfg.dlp.severity_threshold = getChipValue('dlp-severity') || 'low';\n    cfg.dlp.built_in = {\n      secrets: document.getElementById('dlp-secrets').checked,\n      pii: document.getElementById('dlp-pii').checked\n    };\n    const patterns = customPatterns.filter(p => p.name && p.pattern);\n    if (patterns.length > 0) cfg.dlp.custom_patterns = patterns;\n    const al = allowlistEntries.filter(Boolean);\n    if (al.length > 0) cfg.dlp.allowlist = al.map(p => ({ pattern: p }));\n  } else {\n    cfg.dlp = { enabled: false };\n  }\n\n  return cfg;\n}\n\nfunction buildRulesConfig() {\n  const roles = {};\n  for (const [key, sel] of Object.entries(selectedRoles)) {\n    if (!sel) continue;\n    const r = PRESET_ROLES[key];\n    const role = {\n      allowed_tools: r.allowed_tools,\n      blocked_tools: r.blocked_tools,\n      prompt_template: r.prompt_template,\n      execution_mode: r.execution_mode,\n      human_approval: r.human_approval,\n      token_budget_daily: r.token_budget_daily,\n      allowed_paths: r.allowed_paths,\n      blocked_paths: r.blocked_paths\n    };\n    if (r.bash_overrides) role.bash_overrides = r.bash_overrides;\n    roles[key] = role;\n  }\n  return { roles: roles };\n}\n\n// ─── Update Preview ──────────────────────────────────────────────────\nfunction updatePreview() {\n  const el = document.getElementById('preview-yaml');\n  if (activePreviewTab === 'governance') {\n    const cfg = buildGovernanceConfig();\n    el.textContent = '# governance.yaml\\\\n# Generated by Pi Governance Setup Wizard\\\\n\\\\n' + toYaml(cfg);\n  } else {\n    const rules = buildRulesConfig();\n    el.textContent = '# governance-rules.yaml\\\\n# Generated by Pi Governance Setup Wizard\\\\n\\\\n' + toYaml(rules);\n  }\n}\n\n// ─── Save ────────────────────────────────────────────────────────────\nasync function handleSave() {\n  const btn = document.getElementById('btn-save');\n  const status = document.getElementById('save-status');\n  btn.disabled = true;\n  status.textContent = 'Saving...';\n  status.className = 'save-status';\n\n  try {\n    const payload = {\n      governance: buildGovernanceConfig(),\n      rules: buildRulesConfig()\n    };\n    const res = await fetch('/api/save', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload)\n    });\n    if (!res.ok) {\n      const err = await res.text();\n      throw new Error(err || 'Server error');\n    }\n    const result = await res.json();\n    showToast('Configuration saved!', 'success');\n    status.textContent = 'Saved: ' + (result.files || []).join(', ');\n    status.className = 'save-status success';\n  } catch (e) {\n    showToast('Failed to save: ' + e.message, 'error');\n    status.textContent = 'Error: ' + e.message;\n    status.className = 'save-status error';\n  } finally {\n    btn.disabled = false;\n  }\n}\n\nasync function handleClose() {\n  try { await fetch('/api/close', { method: 'POST' }); } catch (e) { /* ignore */ }\n  window.close();\n}\n\n// ─── Toast ───────────────────────────────────────────────────────────\nfunction showToast(msg, type) {\n  const toast = document.getElementById('toast');\n  toast.textContent = msg;\n  toast.className = 'toast ' + type + ' visible';\n  setTimeout(() => { toast.classList.remove('visible'); }, 3000);\n}\n\n// ─── Util ────────────────────────────────────────────────────────────\nfunction esc(s) {\n  return String(s).replace(/&/g,'&amp;').replace(/\"/g,'&quot;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n}\n</script>\n</body>\n</html>`;\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["exports","QueryEventKind","exports","module","ancestors","exports","exports","MessageKind","exports","exports","host","result","exports","exports","exports","exports","exports","v","exports","exports","module","ptr","query","exports","exports","exports","parseYaml","import_fs","import_yaml","parseYaml","OsoPolicyEngine","OsoMemoryFactStore","import_fs","import_yaml","parseYaml","import_yaml","parseYaml","REQUEST_TIMEOUT_MS","SEVERITY_ORDER","isBlocklisted","isAllowlisted","DEFAULT_CONFIG","import_node_fs","import_yaml","import_value","parseYaml","import_node_fs","import_node_crypto","import_node_path","import_node_fs","import_node_path","import_yaml","resolve"]}