@agimon-ai/doompi-config 0.0.1-alpha.45 → 0.0.1-alpha.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:fs");t=e.__toESM(t,1);let n=require("node:path");n=e.__toESM(n,1);let r=require("node:os");r=e.__toESM(r,1);let i=require("@earendil-works/pi-coding-agent");const a=`settings.json`;function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=o(t)&&o(r)?s(t,r):r}return n}function c(e){if(!t.default.existsSync(e))return{};let n;try{n=JSON.parse(t.default.readFileSync(e,`utf8`))}catch(t){throw Error(`Could not parse Pi settings at ${e}`,{cause:t})}if(!o(n))throw Error(`Pi settings at ${e} must be a JSON object`);return n}async function l(e){let n;try{n=JSON.parse(await t.default.promises.readFile(e,`utf8`))}catch(t){if(t.code===`ENOENT`)return{};throw Error(`Could not parse Pi settings at ${e}`,{cause:t})}if(!o(n))throw Error(`Pi settings at ${e} must be a JSON object`);return n}function u(e){return e.reduce((e,t)=>s(e,c(t)),{})}async function d(e){return(await Promise.all(e.map(l))).reduce(s,{})}function f(e){return typeof e==`function`?e():e}function p(e,t=r.default.homedir(),o=t===r.default.homedir()?(0,i.getAgentDir)():n.default.join(t,i.CONFIG_DIR_NAME,`agent`)){return{canonicalUser:n.default.join(o,a),canonicalProject:n.default.join(e,i.CONFIG_DIR_NAME,a),legacyUser:[n.default.join(t,i.CONFIG_DIR_NAME,a)],legacyProject:[n.default.join(e,`pi`,a)]}}function m(e){let t=p(e.repoRoot,e.homeDirectory),n=[...t.legacyUser,...e.userConfigPaths??[],t.canonicalUser],r=[...t.legacyProject,...e.projectConfigPaths??[],t.canonicalProject],i=e.defaults??{},a=u(n),o=f(e.isProjectTrusted)?u(r):{};return[i,a,e.overlay??{},o,e.environment??{},e.cli??{},e.programmatic??{}].reduce(s,{})}async function h(e){let t=p(e.repoRoot,e.homeDirectory),n=[...t.legacyUser,...e.userConfigPaths??[],t.canonicalUser],r=[...t.legacyProject,...e.projectConfigPaths??[],t.canonicalProject],[i,a]=await Promise.all([d(n),f(e.isProjectTrusted)?d(r):Promise.resolve({})]);return[e.defaults??{},i,e.overlay??{},a,e.environment??{},e.cli??{},e.programmatic??{}].reduce(s,{})}exports.loadPiConfig=m,exports.loadPiConfigAsync=h,exports.piConfigPaths=p;
1
+ const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:fs");t=e.__toESM(t,1);let n=require("node:path");n=e.__toESM(n,1);let r=require("node:os");r=e.__toESM(r,1);const i=`settings.json`;function a(e){let t=n.default.join(e,`.pi`,`agent`);if(e!==r.default.homedir())return t;let i=process.env.PI_CODING_AGENT_DIR?.trim();return i?i===`~`?e:i.startsWith(`~/`)?n.default.join(e,i.slice(2)):n.default.resolve(i):t}function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=o(t)&&o(r)?s(t,r):r}return n}function c(e){if(!t.default.existsSync(e))return{};let n;try{n=JSON.parse(t.default.readFileSync(e,`utf8`))}catch(t){throw Error(`Could not parse Pi settings at ${e}`,{cause:t})}if(!o(n))throw Error(`Pi settings at ${e} must be a JSON object`);return n}async function l(e){let n;try{n=JSON.parse(await t.default.promises.readFile(e,`utf8`))}catch(t){if(t.code===`ENOENT`)return{};throw Error(`Could not parse Pi settings at ${e}`,{cause:t})}if(!o(n))throw Error(`Pi settings at ${e} must be a JSON object`);return n}function u(e){return e.reduce((e,t)=>s(e,c(t)),{})}async function d(e){return(await Promise.all(e.map(l))).reduce(s,{})}function f(e){return typeof e==`function`?e():e}function p(e,t=r.default.homedir(),o=a(t)){return{canonicalUser:n.default.join(o,i),canonicalProject:n.default.join(e,`.pi`,i),legacyUser:[n.default.join(t,`.pi`,i)],legacyProject:[n.default.join(e,`pi`,i)]}}function m(e){let t=p(e.repoRoot,e.homeDirectory),n=[...t.legacyUser,...e.userConfigPaths??[],t.canonicalUser],r=[...t.legacyProject,...e.projectConfigPaths??[],t.canonicalProject],i=e.defaults??{},a=u(n),o=f(e.isProjectTrusted)?u(r):{};return[i,a,e.overlay??{},o,e.environment??{},e.cli??{},e.programmatic??{}].reduce(s,{})}async function h(e){let t=p(e.repoRoot,e.homeDirectory),n=[...t.legacyUser,...e.userConfigPaths??[],t.canonicalUser],r=[...t.legacyProject,...e.projectConfigPaths??[],t.canonicalProject],[i,a]=await Promise.all([d(n),f(e.isProjectTrusted)?d(r):Promise.resolve({})]);return[e.defaults??{},i,e.overlay??{},a,e.environment??{},e.cli??{},e.programmatic??{}].reduce(s,{})}exports.loadPiConfig=m,exports.loadPiConfigAsync=h,exports.piConfigPaths=p;
2
2
  //# sourceMappingURL=piConfig.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"piConfig.cjs","names":["fs","os","getAgentDir","path","CONFIG_DIR_NAME"],"sources":["../../src/adapters/piConfig.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { CONFIG_DIR_NAME, getAgentDir } from '@earendil-works/pi-coding-agent';\nimport type { PiConfig, PiConfigLoadOptions, PiConfigPaths } from '../schemas/config/schema.ts';\n\nconst SETTINGS_FILE_NAME = 'settings.json';\nconst LEGACY_CONFIG_DIR_NAME = 'pi';\n\nfunction isObject(value: unknown): value is PiConfig {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction mergeConfig(base: PiConfig, override: PiConfig): PiConfig {\n const result: PiConfig = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const current = result[key];\n result[key] = isObject(current) && isObject(value) ? mergeConfig(current, value) : value;\n }\n return result;\n}\n\nfunction readConfig(filePath: string): PiConfig {\n if (!fs.existsSync(filePath)) return {};\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n } catch (error) {\n throw new Error(`Could not parse Pi settings at ${filePath}`, { cause: error });\n }\n if (!isObject(parsed)) throw new Error(`Pi settings at ${filePath} must be a JSON object`);\n return parsed;\n}\n\nasync function readConfigAsync(filePath: string): Promise<PiConfig> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.promises.readFile(filePath, 'utf8'));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return {};\n throw new Error(`Could not parse Pi settings at ${filePath}`, { cause: error });\n }\n if (!isObject(parsed)) throw new Error(`Pi settings at ${filePath} must be a JSON object`);\n return parsed;\n}\n\nfunction readConfigPaths(paths: readonly string[]): PiConfig {\n return paths.reduce<PiConfig>((config, filePath) => mergeConfig(config, readConfig(filePath)), {});\n}\n\nasync function readConfigPathsAsync(paths: readonly string[]): Promise<PiConfig> {\n const layers = await Promise.all(paths.map(readConfigAsync));\n return layers.reduce<PiConfig>(mergeConfig, {});\n}\n\nfunction projectIsTrusted(value: PiConfigLoadOptions['isProjectTrusted']): boolean {\n return typeof value === 'function' ? value() : value;\n}\n\nexport function piConfigPaths(\n repoRoot: string,\n homeDirectory = os.homedir(),\n agentDirectory = homeDirectory === os.homedir() ? getAgentDir() : path.join(homeDirectory, CONFIG_DIR_NAME, 'agent'),\n): PiConfigPaths {\n return {\n canonicalUser: path.join(agentDirectory, SETTINGS_FILE_NAME),\n canonicalProject: path.join(repoRoot, CONFIG_DIR_NAME, SETTINGS_FILE_NAME),\n legacyUser: [path.join(homeDirectory, CONFIG_DIR_NAME, SETTINGS_FILE_NAME)],\n legacyProject: [path.join(repoRoot, LEGACY_CONFIG_DIR_NAME, SETTINGS_FILE_NAME)],\n };\n}\n\nexport function loadPiConfig(options: PiConfigLoadOptions): PiConfig {\n const paths = piConfigPaths(options.repoRoot, options.homeDirectory);\n const userPaths = [...paths.legacyUser, ...(options.userConfigPaths ?? []), paths.canonicalUser];\n const projectPaths = [...paths.legacyProject, ...(options.projectConfigPaths ?? []), paths.canonicalProject];\n const defaults = options.defaults ?? {};\n const user = readConfigPaths(userPaths);\n const trustedProject = projectIsTrusted(options.isProjectTrusted) ? readConfigPaths(projectPaths) : {};\n return [\n defaults,\n user,\n options.overlay ?? {},\n trustedProject,\n options.environment ?? {},\n options.cli ?? {},\n options.programmatic ?? {},\n ].reduce(mergeConfig, {});\n}\n\nexport async function loadPiConfigAsync(options: PiConfigLoadOptions): Promise<PiConfig> {\n const paths = piConfigPaths(options.repoRoot, options.homeDirectory);\n const userPaths = [...paths.legacyUser, ...(options.userConfigPaths ?? []), paths.canonicalUser];\n const projectPaths = [...paths.legacyProject, ...(options.projectConfigPaths ?? []), paths.canonicalProject];\n const [user, trustedProject] = await Promise.all([\n readConfigPathsAsync(userPaths),\n projectIsTrusted(options.isProjectTrusted) ? readConfigPathsAsync(projectPaths) : Promise.resolve({}),\n ]);\n return [\n options.defaults ?? {},\n user,\n options.overlay ?? {},\n trustedProject,\n options.environment ?? {},\n options.cli ?? {},\n options.programmatic ?? {},\n ].reduce(mergeConfig, {});\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"piConfig.cjs","names":["path","os","fs"],"sources":["../../src/adapters/piConfig.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport type { PiConfig, PiConfigLoadOptions, PiConfigPaths } from '../schemas/config/schema.ts';\n\nconst SETTINGS_FILE_NAME = 'settings.json';\nconst CONFIG_DIR_NAME = '.pi';\nconst AGENT_DIR_NAME = 'agent';\nconst PI_CODING_AGENT_DIR_ENV = 'PI_CODING_AGENT_DIR';\nconst LEGACY_CONFIG_DIR_NAME = 'pi';\n\nfunction defaultAgentDirectory(homeDirectory: string): string {\n const fallback = path.join(homeDirectory, CONFIG_DIR_NAME, AGENT_DIR_NAME);\n if (homeDirectory !== os.homedir()) return fallback;\n const configured = process.env[PI_CODING_AGENT_DIR_ENV]?.trim();\n if (!configured) return fallback;\n if (configured === '~') return homeDirectory;\n if (configured.startsWith('~/')) return path.join(homeDirectory, configured.slice(2));\n return path.resolve(configured);\n}\nfunction isObject(value: unknown): value is PiConfig {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction mergeConfig(base: PiConfig, override: PiConfig): PiConfig {\n const result: PiConfig = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const current = result[key];\n result[key] = isObject(current) && isObject(value) ? mergeConfig(current, value) : value;\n }\n return result;\n}\n\nfunction readConfig(filePath: string): PiConfig {\n if (!fs.existsSync(filePath)) return {};\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n } catch (error) {\n throw new Error(`Could not parse Pi settings at ${filePath}`, { cause: error });\n }\n if (!isObject(parsed)) throw new Error(`Pi settings at ${filePath} must be a JSON object`);\n return parsed;\n}\n\nasync function readConfigAsync(filePath: string): Promise<PiConfig> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.promises.readFile(filePath, 'utf8'));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return {};\n throw new Error(`Could not parse Pi settings at ${filePath}`, { cause: error });\n }\n if (!isObject(parsed)) throw new Error(`Pi settings at ${filePath} must be a JSON object`);\n return parsed;\n}\n\nfunction readConfigPaths(paths: readonly string[]): PiConfig {\n return paths.reduce<PiConfig>((config, filePath) => mergeConfig(config, readConfig(filePath)), {});\n}\n\nasync function readConfigPathsAsync(paths: readonly string[]): Promise<PiConfig> {\n const layers = await Promise.all(paths.map(readConfigAsync));\n return layers.reduce<PiConfig>(mergeConfig, {});\n}\n\nfunction projectIsTrusted(value: PiConfigLoadOptions['isProjectTrusted']): boolean {\n return typeof value === 'function' ? value() : value;\n}\n\nexport function piConfigPaths(\n repoRoot: string,\n homeDirectory = os.homedir(),\n agentDirectory = defaultAgentDirectory(homeDirectory),\n): PiConfigPaths {\n return {\n canonicalUser: path.join(agentDirectory, SETTINGS_FILE_NAME),\n canonicalProject: path.join(repoRoot, CONFIG_DIR_NAME, SETTINGS_FILE_NAME),\n legacyUser: [path.join(homeDirectory, CONFIG_DIR_NAME, SETTINGS_FILE_NAME)],\n legacyProject: [path.join(repoRoot, LEGACY_CONFIG_DIR_NAME, SETTINGS_FILE_NAME)],\n };\n}\n\nexport function loadPiConfig(options: PiConfigLoadOptions): PiConfig {\n const paths = piConfigPaths(options.repoRoot, options.homeDirectory);\n const userPaths = [...paths.legacyUser, ...(options.userConfigPaths ?? []), paths.canonicalUser];\n const projectPaths = [...paths.legacyProject, ...(options.projectConfigPaths ?? []), paths.canonicalProject];\n const defaults = options.defaults ?? {};\n const user = readConfigPaths(userPaths);\n const trustedProject = projectIsTrusted(options.isProjectTrusted) ? readConfigPaths(projectPaths) : {};\n return [\n defaults,\n user,\n options.overlay ?? {},\n trustedProject,\n options.environment ?? {},\n options.cli ?? {},\n options.programmatic ?? {},\n ].reduce(mergeConfig, {});\n}\n\nexport async function loadPiConfigAsync(options: PiConfigLoadOptions): Promise<PiConfig> {\n const paths = piConfigPaths(options.repoRoot, options.homeDirectory);\n const userPaths = [...paths.legacyUser, ...(options.userConfigPaths ?? []), paths.canonicalUser];\n const projectPaths = [...paths.legacyProject, ...(options.projectConfigPaths ?? []), paths.canonicalProject];\n const [user, trustedProject] = await Promise.all([\n readConfigPathsAsync(userPaths),\n projectIsTrusted(options.isProjectTrusted) ? readConfigPathsAsync(projectPaths) : Promise.resolve({}),\n ]);\n return [\n options.defaults ?? {},\n user,\n options.overlay ?? {},\n trustedProject,\n options.environment ?? {},\n options.cli ?? {},\n options.programmatic ?? {},\n ].reduce(mergeConfig, {});\n}\n"],"mappings":"qLAKA,MAAM,EAAqB,gBAM3B,SAAS,EAAsB,EAA+B,CAC5D,IAAM,EAAWA,EAAAA,QAAK,KAAK,EAAe,MAAiB,OAAc,EACzE,GAAI,IAAkBC,EAAAA,QAAG,QAAQ,EAAG,OAAO,EAC3C,IAAM,EAAa,QAAQ,IAAI,qBAA0B,KAAK,EAI9D,OAHK,EACD,IAAe,IAAY,EAC3B,EAAW,WAAW,IAAI,EAAUD,EAAAA,QAAK,KAAK,EAAe,EAAW,MAAM,CAAC,CAAC,EAC7EA,EAAAA,QAAK,QAAQ,CAAU,EAHN,CAI1B,CACA,SAAS,EAAS,EAAmC,CACnD,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,CAC5E,CAEA,SAAS,EAAY,EAAgB,EAA8B,CACjE,IAAM,EAAmB,CAAE,GAAG,CAAK,EACnC,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,CAAQ,EAAG,CACnD,IAAM,EAAU,EAAO,GACvB,EAAO,GAAO,EAAS,CAAO,GAAK,EAAS,CAAK,EAAI,EAAY,EAAS,CAAK,EAAI,CACrF,CACA,OAAO,CACT,CAEA,SAAS,EAAW,EAA4B,CAC9C,GAAI,CAACE,EAAAA,QAAG,WAAW,CAAQ,EAAG,MAAO,CAAC,EACtC,IAAI,EACJ,GAAI,CACF,EAAS,KAAK,MAAMA,EAAAA,QAAG,aAAa,EAAU,MAAM,CAAC,CACvD,OAAS,EAAO,CACd,MAAU,MAAM,kCAAkC,IAAY,CAAE,MAAO,CAAM,CAAC,CAChF,CACA,GAAI,CAAC,EAAS,CAAM,EAAG,MAAU,MAAM,kBAAkB,EAAS,uBAAuB,EACzF,OAAO,CACT,CAEA,eAAe,EAAgB,EAAqC,CAClE,IAAI,EACJ,GAAI,CACF,EAAS,KAAK,MAAM,MAAMA,EAAAA,QAAG,SAAS,SAAS,EAAU,MAAM,CAAC,CAClE,OAAS,EAAO,CACd,GAAK,EAAgC,OAAS,SAAU,MAAO,CAAC,EAChE,MAAU,MAAM,kCAAkC,IAAY,CAAE,MAAO,CAAM,CAAC,CAChF,CACA,GAAI,CAAC,EAAS,CAAM,EAAG,MAAU,MAAM,kBAAkB,EAAS,uBAAuB,EACzF,OAAO,CACT,CAEA,SAAS,EAAgB,EAAoC,CAC3D,OAAO,EAAM,QAAkB,EAAQ,IAAa,EAAY,EAAQ,EAAW,CAAQ,CAAC,EAAG,CAAC,CAAC,CACnG,CAEA,eAAe,EAAqB,EAA6C,CAE/E,OAAO,MADc,QAAQ,IAAI,EAAM,IAAI,CAAe,CAAC,EAAA,CAC7C,OAAiB,EAAa,CAAC,CAAC,CAChD,CAEA,SAAS,EAAiB,EAAyD,CACjF,OAAO,OAAO,GAAU,WAAa,EAAM,EAAI,CACjD,CAEA,SAAgB,EACd,EACA,EAAgBD,EAAAA,QAAG,QAAQ,EAC3B,EAAiB,EAAsB,CAAa,EACrC,CACf,MAAO,CACL,cAAeD,EAAAA,QAAK,KAAK,EAAgB,CAAkB,EAC3D,iBAAkBA,EAAAA,QAAK,KAAK,EAAU,MAAiB,CAAkB,EACzE,WAAY,CAACA,EAAAA,QAAK,KAAK,EAAe,MAAiB,CAAkB,CAAC,EAC1E,cAAe,CAACA,EAAAA,QAAK,KAAK,EAAU,KAAwB,CAAkB,CAAC,CACjF,CACF,CAEA,SAAgB,EAAa,EAAwC,CACnE,IAAM,EAAQ,EAAc,EAAQ,SAAU,EAAQ,aAAa,EAC7D,EAAY,CAAC,GAAG,EAAM,WAAY,GAAI,EAAQ,iBAAmB,CAAC,EAAI,EAAM,aAAa,EACzF,EAAe,CAAC,GAAG,EAAM,cAAe,GAAI,EAAQ,oBAAsB,CAAC,EAAI,EAAM,gBAAgB,EACrG,EAAW,EAAQ,UAAY,CAAC,EAChC,EAAO,EAAgB,CAAS,EAChC,EAAiB,EAAiB,EAAQ,gBAAgB,EAAI,EAAgB,CAAY,EAAI,CAAC,EACrG,MAAO,CACL,EACA,EACA,EAAQ,SAAW,CAAC,EACpB,EACA,EAAQ,aAAe,CAAC,EACxB,EAAQ,KAAO,CAAC,EAChB,EAAQ,cAAgB,CAAC,CAC3B,CAAC,CAAC,OAAO,EAAa,CAAC,CAAC,CAC1B,CAEA,eAAsB,EAAkB,EAAiD,CACvF,IAAM,EAAQ,EAAc,EAAQ,SAAU,EAAQ,aAAa,EAC7D,EAAY,CAAC,GAAG,EAAM,WAAY,GAAI,EAAQ,iBAAmB,CAAC,EAAI,EAAM,aAAa,EACzF,EAAe,CAAC,GAAG,EAAM,cAAe,GAAI,EAAQ,oBAAsB,CAAC,EAAI,EAAM,gBAAgB,EACrG,CAAC,EAAM,GAAkB,MAAM,QAAQ,IAAI,CAC/C,EAAqB,CAAS,EAC9B,EAAiB,EAAQ,gBAAgB,EAAI,EAAqB,CAAY,EAAI,QAAQ,QAAQ,CAAC,CAAC,CACtG,CAAC,EACD,MAAO,CACL,EAAQ,UAAY,CAAC,EACrB,EACA,EAAQ,SAAW,CAAC,EACpB,EACA,EAAQ,aAAe,CAAC,EACxB,EAAQ,KAAO,CAAC,EAChB,EAAQ,cAAgB,CAAC,CAC3B,CAAC,CAAC,OAAO,EAAa,CAAC,CAAC,CAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"piConfig.d.cts","names":[],"sources":["../../src/adapters/piConfig.ts"],"mappings":";;iBA2DgB,cACd,kBACA,wBACA,0BACC;iBASa,aAAa,SAAS,sBAAsB;iBAkBtC,kBAAkB,SAAS,sBAAsB,QAAQ"}
1
+ {"version":3,"file":"piConfig.d.cts","names":[],"sources":["../../src/adapters/piConfig.ts"],"mappings":";;iBAsEgB,cACd,kBACA,wBACA,0BACC;iBASa,aAAa,SAAS,sBAAsB;iBAkBtC,kBAAkB,SAAS,sBAAsB,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"piConfig.d.mts","names":[],"sources":["../../src/adapters/piConfig.ts"],"mappings":";;iBA2DgB,cACd,kBACA,wBACA,0BACC;iBASa,aAAa,SAAS,sBAAsB;iBAkBtC,kBAAkB,SAAS,sBAAsB,QAAQ"}
1
+ {"version":3,"file":"piConfig.d.mts","names":[],"sources":["../../src/adapters/piConfig.ts"],"mappings":";;iBAsEgB,cACd,kBACA,wBACA,0BACC;iBASa,aAAa,SAAS,sBAAsB;iBAkBtC,kBAAkB,SAAS,sBAAsB,QAAQ"}
@@ -1,2 +1,2 @@
1
- import e from"node:fs";import t from"node:path";import n from"node:os";import{CONFIG_DIR_NAME as r,getAgentDir as i}from"@earendil-works/pi-coding-agent";const a=`settings.json`;function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=o(t)&&o(r)?s(t,r):r}return n}function c(t){if(!e.existsSync(t))return{};let n;try{n=JSON.parse(e.readFileSync(t,`utf8`))}catch(e){throw Error(`Could not parse Pi settings at ${t}`,{cause:e})}if(!o(n))throw Error(`Pi settings at ${t} must be a JSON object`);return n}async function l(t){let n;try{n=JSON.parse(await e.promises.readFile(t,`utf8`))}catch(e){if(e.code===`ENOENT`)return{};throw Error(`Could not parse Pi settings at ${t}`,{cause:e})}if(!o(n))throw Error(`Pi settings at ${t} must be a JSON object`);return n}function u(e){return e.reduce((e,t)=>s(e,c(t)),{})}async function d(e){return(await Promise.all(e.map(l))).reduce(s,{})}function f(e){return typeof e==`function`?e():e}function p(e,o=n.homedir(),s=o===n.homedir()?i():t.join(o,r,`agent`)){return{canonicalUser:t.join(s,a),canonicalProject:t.join(e,r,a),legacyUser:[t.join(o,r,a)],legacyProject:[t.join(e,`pi`,a)]}}function m(e){let t=p(e.repoRoot,e.homeDirectory),n=[...t.legacyUser,...e.userConfigPaths??[],t.canonicalUser],r=[...t.legacyProject,...e.projectConfigPaths??[],t.canonicalProject],i=e.defaults??{},a=u(n),o=f(e.isProjectTrusted)?u(r):{};return[i,a,e.overlay??{},o,e.environment??{},e.cli??{},e.programmatic??{}].reduce(s,{})}async function h(e){let t=p(e.repoRoot,e.homeDirectory),n=[...t.legacyUser,...e.userConfigPaths??[],t.canonicalUser],r=[...t.legacyProject,...e.projectConfigPaths??[],t.canonicalProject],[i,a]=await Promise.all([d(n),f(e.isProjectTrusted)?d(r):Promise.resolve({})]);return[e.defaults??{},i,e.overlay??{},a,e.environment??{},e.cli??{},e.programmatic??{}].reduce(s,{})}export{m as loadPiConfig,h as loadPiConfigAsync,p as piConfigPaths};
1
+ import e from"node:fs";import t from"node:path";import n from"node:os";const r=`settings.json`;function i(e){let r=t.join(e,`.pi`,`agent`);if(e!==n.homedir())return r;let i=process.env.PI_CODING_AGENT_DIR?.trim();return i?i===`~`?e:i.startsWith(`~/`)?t.join(e,i.slice(2)):t.resolve(i):r}function a(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function o(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=a(t)&&a(r)?o(t,r):r}return n}function s(t){if(!e.existsSync(t))return{};let n;try{n=JSON.parse(e.readFileSync(t,`utf8`))}catch(e){throw Error(`Could not parse Pi settings at ${t}`,{cause:e})}if(!a(n))throw Error(`Pi settings at ${t} must be a JSON object`);return n}async function c(t){let n;try{n=JSON.parse(await e.promises.readFile(t,`utf8`))}catch(e){if(e.code===`ENOENT`)return{};throw Error(`Could not parse Pi settings at ${t}`,{cause:e})}if(!a(n))throw Error(`Pi settings at ${t} must be a JSON object`);return n}function l(e){return e.reduce((e,t)=>o(e,s(t)),{})}async function u(e){return(await Promise.all(e.map(c))).reduce(o,{})}function d(e){return typeof e==`function`?e():e}function f(e,a=n.homedir(),o=i(a)){return{canonicalUser:t.join(o,r),canonicalProject:t.join(e,`.pi`,r),legacyUser:[t.join(a,`.pi`,r)],legacyProject:[t.join(e,`pi`,r)]}}function p(e){let t=f(e.repoRoot,e.homeDirectory),n=[...t.legacyUser,...e.userConfigPaths??[],t.canonicalUser],r=[...t.legacyProject,...e.projectConfigPaths??[],t.canonicalProject],i=e.defaults??{},a=l(n),s=d(e.isProjectTrusted)?l(r):{};return[i,a,e.overlay??{},s,e.environment??{},e.cli??{},e.programmatic??{}].reduce(o,{})}async function m(e){let t=f(e.repoRoot,e.homeDirectory),n=[...t.legacyUser,...e.userConfigPaths??[],t.canonicalUser],r=[...t.legacyProject,...e.projectConfigPaths??[],t.canonicalProject],[i,a]=await Promise.all([u(n),d(e.isProjectTrusted)?u(r):Promise.resolve({})]);return[e.defaults??{},i,e.overlay??{},a,e.environment??{},e.cli??{},e.programmatic??{}].reduce(o,{})}export{p as loadPiConfig,m as loadPiConfigAsync,f as piConfigPaths};
2
2
  //# sourceMappingURL=piConfig.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"piConfig.mjs","names":[],"sources":["../../src/adapters/piConfig.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { CONFIG_DIR_NAME, getAgentDir } from '@earendil-works/pi-coding-agent';\nimport type { PiConfig, PiConfigLoadOptions, PiConfigPaths } from '../schemas/config/schema.ts';\n\nconst SETTINGS_FILE_NAME = 'settings.json';\nconst LEGACY_CONFIG_DIR_NAME = 'pi';\n\nfunction isObject(value: unknown): value is PiConfig {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction mergeConfig(base: PiConfig, override: PiConfig): PiConfig {\n const result: PiConfig = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const current = result[key];\n result[key] = isObject(current) && isObject(value) ? mergeConfig(current, value) : value;\n }\n return result;\n}\n\nfunction readConfig(filePath: string): PiConfig {\n if (!fs.existsSync(filePath)) return {};\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n } catch (error) {\n throw new Error(`Could not parse Pi settings at ${filePath}`, { cause: error });\n }\n if (!isObject(parsed)) throw new Error(`Pi settings at ${filePath} must be a JSON object`);\n return parsed;\n}\n\nasync function readConfigAsync(filePath: string): Promise<PiConfig> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.promises.readFile(filePath, 'utf8'));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return {};\n throw new Error(`Could not parse Pi settings at ${filePath}`, { cause: error });\n }\n if (!isObject(parsed)) throw new Error(`Pi settings at ${filePath} must be a JSON object`);\n return parsed;\n}\n\nfunction readConfigPaths(paths: readonly string[]): PiConfig {\n return paths.reduce<PiConfig>((config, filePath) => mergeConfig(config, readConfig(filePath)), {});\n}\n\nasync function readConfigPathsAsync(paths: readonly string[]): Promise<PiConfig> {\n const layers = await Promise.all(paths.map(readConfigAsync));\n return layers.reduce<PiConfig>(mergeConfig, {});\n}\n\nfunction projectIsTrusted(value: PiConfigLoadOptions['isProjectTrusted']): boolean {\n return typeof value === 'function' ? value() : value;\n}\n\nexport function piConfigPaths(\n repoRoot: string,\n homeDirectory = os.homedir(),\n agentDirectory = homeDirectory === os.homedir() ? getAgentDir() : path.join(homeDirectory, CONFIG_DIR_NAME, 'agent'),\n): PiConfigPaths {\n return {\n canonicalUser: path.join(agentDirectory, SETTINGS_FILE_NAME),\n canonicalProject: path.join(repoRoot, CONFIG_DIR_NAME, SETTINGS_FILE_NAME),\n legacyUser: [path.join(homeDirectory, CONFIG_DIR_NAME, SETTINGS_FILE_NAME)],\n legacyProject: [path.join(repoRoot, LEGACY_CONFIG_DIR_NAME, SETTINGS_FILE_NAME)],\n };\n}\n\nexport function loadPiConfig(options: PiConfigLoadOptions): PiConfig {\n const paths = piConfigPaths(options.repoRoot, options.homeDirectory);\n const userPaths = [...paths.legacyUser, ...(options.userConfigPaths ?? []), paths.canonicalUser];\n const projectPaths = [...paths.legacyProject, ...(options.projectConfigPaths ?? []), paths.canonicalProject];\n const defaults = options.defaults ?? {};\n const user = readConfigPaths(userPaths);\n const trustedProject = projectIsTrusted(options.isProjectTrusted) ? readConfigPaths(projectPaths) : {};\n return [\n defaults,\n user,\n options.overlay ?? {},\n trustedProject,\n options.environment ?? {},\n options.cli ?? {},\n options.programmatic ?? {},\n ].reduce(mergeConfig, {});\n}\n\nexport async function loadPiConfigAsync(options: PiConfigLoadOptions): Promise<PiConfig> {\n const paths = piConfigPaths(options.repoRoot, options.homeDirectory);\n const userPaths = [...paths.legacyUser, ...(options.userConfigPaths ?? []), paths.canonicalUser];\n const projectPaths = [...paths.legacyProject, ...(options.projectConfigPaths ?? []), paths.canonicalProject];\n const [user, trustedProject] = await Promise.all([\n readConfigPathsAsync(userPaths),\n projectIsTrusted(options.isProjectTrusted) ? readConfigPathsAsync(projectPaths) : Promise.resolve({}),\n ]);\n return [\n options.defaults ?? {},\n user,\n options.overlay ?? {},\n trustedProject,\n options.environment ?? {},\n options.cli ?? {},\n options.programmatic ?? {},\n ].reduce(mergeConfig, {});\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"piConfig.mjs","names":[],"sources":["../../src/adapters/piConfig.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport type { PiConfig, PiConfigLoadOptions, PiConfigPaths } from '../schemas/config/schema.ts';\n\nconst SETTINGS_FILE_NAME = 'settings.json';\nconst CONFIG_DIR_NAME = '.pi';\nconst AGENT_DIR_NAME = 'agent';\nconst PI_CODING_AGENT_DIR_ENV = 'PI_CODING_AGENT_DIR';\nconst LEGACY_CONFIG_DIR_NAME = 'pi';\n\nfunction defaultAgentDirectory(homeDirectory: string): string {\n const fallback = path.join(homeDirectory, CONFIG_DIR_NAME, AGENT_DIR_NAME);\n if (homeDirectory !== os.homedir()) return fallback;\n const configured = process.env[PI_CODING_AGENT_DIR_ENV]?.trim();\n if (!configured) return fallback;\n if (configured === '~') return homeDirectory;\n if (configured.startsWith('~/')) return path.join(homeDirectory, configured.slice(2));\n return path.resolve(configured);\n}\nfunction isObject(value: unknown): value is PiConfig {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction mergeConfig(base: PiConfig, override: PiConfig): PiConfig {\n const result: PiConfig = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const current = result[key];\n result[key] = isObject(current) && isObject(value) ? mergeConfig(current, value) : value;\n }\n return result;\n}\n\nfunction readConfig(filePath: string): PiConfig {\n if (!fs.existsSync(filePath)) return {};\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n } catch (error) {\n throw new Error(`Could not parse Pi settings at ${filePath}`, { cause: error });\n }\n if (!isObject(parsed)) throw new Error(`Pi settings at ${filePath} must be a JSON object`);\n return parsed;\n}\n\nasync function readConfigAsync(filePath: string): Promise<PiConfig> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.promises.readFile(filePath, 'utf8'));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return {};\n throw new Error(`Could not parse Pi settings at ${filePath}`, { cause: error });\n }\n if (!isObject(parsed)) throw new Error(`Pi settings at ${filePath} must be a JSON object`);\n return parsed;\n}\n\nfunction readConfigPaths(paths: readonly string[]): PiConfig {\n return paths.reduce<PiConfig>((config, filePath) => mergeConfig(config, readConfig(filePath)), {});\n}\n\nasync function readConfigPathsAsync(paths: readonly string[]): Promise<PiConfig> {\n const layers = await Promise.all(paths.map(readConfigAsync));\n return layers.reduce<PiConfig>(mergeConfig, {});\n}\n\nfunction projectIsTrusted(value: PiConfigLoadOptions['isProjectTrusted']): boolean {\n return typeof value === 'function' ? value() : value;\n}\n\nexport function piConfigPaths(\n repoRoot: string,\n homeDirectory = os.homedir(),\n agentDirectory = defaultAgentDirectory(homeDirectory),\n): PiConfigPaths {\n return {\n canonicalUser: path.join(agentDirectory, SETTINGS_FILE_NAME),\n canonicalProject: path.join(repoRoot, CONFIG_DIR_NAME, SETTINGS_FILE_NAME),\n legacyUser: [path.join(homeDirectory, CONFIG_DIR_NAME, SETTINGS_FILE_NAME)],\n legacyProject: [path.join(repoRoot, LEGACY_CONFIG_DIR_NAME, SETTINGS_FILE_NAME)],\n };\n}\n\nexport function loadPiConfig(options: PiConfigLoadOptions): PiConfig {\n const paths = piConfigPaths(options.repoRoot, options.homeDirectory);\n const userPaths = [...paths.legacyUser, ...(options.userConfigPaths ?? []), paths.canonicalUser];\n const projectPaths = [...paths.legacyProject, ...(options.projectConfigPaths ?? []), paths.canonicalProject];\n const defaults = options.defaults ?? {};\n const user = readConfigPaths(userPaths);\n const trustedProject = projectIsTrusted(options.isProjectTrusted) ? readConfigPaths(projectPaths) : {};\n return [\n defaults,\n user,\n options.overlay ?? {},\n trustedProject,\n options.environment ?? {},\n options.cli ?? {},\n options.programmatic ?? {},\n ].reduce(mergeConfig, {});\n}\n\nexport async function loadPiConfigAsync(options: PiConfigLoadOptions): Promise<PiConfig> {\n const paths = piConfigPaths(options.repoRoot, options.homeDirectory);\n const userPaths = [...paths.legacyUser, ...(options.userConfigPaths ?? []), paths.canonicalUser];\n const projectPaths = [...paths.legacyProject, ...(options.projectConfigPaths ?? []), paths.canonicalProject];\n const [user, trustedProject] = await Promise.all([\n readConfigPathsAsync(userPaths),\n projectIsTrusted(options.isProjectTrusted) ? readConfigPathsAsync(projectPaths) : Promise.resolve({}),\n ]);\n return [\n options.defaults ?? {},\n user,\n options.overlay ?? {},\n trustedProject,\n options.environment ?? {},\n options.cli ?? {},\n options.programmatic ?? {},\n ].reduce(mergeConfig, {});\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/doompi-config",
3
- "version": "0.0.1-alpha.45",
3
+ "version": "0.0.1-alpha.47",
4
4
  "description": "Typed configuration loading, validation, and host adapters for composing DoomPi sessions.",
5
5
  "keywords": [
6
6
  "agent-configuration",
@@ -136,8 +136,8 @@
136
136
  "dependencies": {
137
137
  "@deepseek-ai/cordis": "4.0.1",
138
138
  "yaml": "2.9.0",
139
- "@agimon-ai/doompi-extension-contracts": "0.0.1-alpha.45",
140
- "@agimon-ai/doompi-telemetry": "0.0.1-alpha.45"
139
+ "@agimon-ai/doompi-extension-contracts": "0.0.1-alpha.47",
140
+ "@agimon-ai/doompi-telemetry": "0.0.1-alpha.47"
141
141
  },
142
142
  "devDependencies": {
143
143
  "@earendil-works/pi-coding-agent": "0.84.4",