@agimon-ai/po-domain 0.0.0-alpha.21 → 0.0.0-alpha.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apply.cjs +5 -2
- package/dist/apply.cjs.map +1 -1
- package/dist/apply.d.mts.map +1 -1
- package/dist/apply.mjs +5 -2
- package/dist/apply.mjs.map +1 -1
- package/dist/extensions/server.cjs +4 -2
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.mjs +5 -3
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/mcp.d.mts +1 -1
- package/dist/{resourceCollector-YOEwhNIR.cjs → resourceCollector-DRvsbqfZ.cjs} +20 -68
- package/dist/resourceCollector-DRvsbqfZ.cjs.map +1 -0
- package/dist/{resourceCollector-CLxre4tE.mjs → resourceCollector-DjZ0FvjL.mjs} +20 -68
- package/dist/resourceCollector-DjZ0FvjL.mjs.map +1 -0
- package/dist/{resources-COT3OnLs.d.mts → resources-BCUqYBIH.d.mts} +5 -1
- package/dist/resources-BCUqYBIH.d.mts.map +1 -0
- package/dist/resources.cjs +1 -1
- package/dist/resources.d.mts +1 -1
- package/dist/resources.d.mts.map +1 -1
- package/dist/resources.mjs +1 -1
- package/package.json +10 -10
- package/dist/resourceCollector-CLxre4tE.mjs.map +0 -1
- package/dist/resourceCollector-YOEwhNIR.cjs.map +0 -1
- package/dist/resources-COT3OnLs.d.mts.map +0 -1
package/dist/apply.cjs
CHANGED
|
@@ -2,13 +2,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
|
|
3
3
|
const require_mcpFilter = require("./mcpFilter-CghXZ2K-.cjs");
|
|
4
4
|
const require_pluginMaterializer = require("./pluginMaterializer-C8IZ1PSY.cjs");
|
|
5
|
-
const require_resourceCollector = require("./resourceCollector-
|
|
5
|
+
const require_resourceCollector = require("./resourceCollector-DRvsbqfZ.cjs");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
node_fs = require_rolldown_runtime.__toESM(node_fs, 1);
|
|
8
8
|
let node_path = require("node:path");
|
|
9
9
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
10
|
+
let _agimon_ai_po_config_config = require("@agimon-ai/po-config/config");
|
|
10
11
|
let _agimon_ai_po_config_domains = require("@agimon-ai/po-config/domains");
|
|
11
12
|
let _agimon_ai_po_config_harnessStore = require("@agimon-ai/po-config/harnessStore");
|
|
13
|
+
let _agimon_ai_po_core_mcpProjection = require("@agimon-ai/po-core/mcpProjection");
|
|
12
14
|
//#region src/services/applyDomains/index.ts
|
|
13
15
|
/**
|
|
14
16
|
* Live domain switching: skills, plugin hooks, MCP config and subagent directories.
|
|
@@ -40,7 +42,8 @@ async function applyDomains(domainNames, state) {
|
|
|
40
42
|
mcp: state.mcp,
|
|
41
43
|
temporaryDirectory: candidateDirectory,
|
|
42
44
|
sharedSkills: (0, _agimon_ai_po_config_domains.resolveSharedSkills)(root, domainNames),
|
|
43
|
-
mcpAllowlist
|
|
45
|
+
mcpAllowlist,
|
|
46
|
+
userMcpConfigPath: node_path.default.join((0, _agimon_ai_po_config_config.globalPoConfigDirectory)(), _agimon_ai_po_core_mcpProjection.PO_USER_MCP_CONFIG_FILE)
|
|
44
47
|
});
|
|
45
48
|
} catch (error) {
|
|
46
49
|
await node_fs.default.promises.rm(candidateDirectory, {
|
package/dist/apply.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.cjs","names":["requireHarnessPaths","materializePluginEntries","resolvePluginEntries","resolveMcpAllowlist","fs","path","collectResources","resolveSharedSkills","updateHarnessState"],"sources":["../src/services/applyDomains/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/po-config/domains';\nimport { requireHarnessPaths, updateHarnessState } from '@agimon-ai/po-config/harnessStore';\nimport type { PoHarnessContext, HarnessState } from '@agimon-ai/po-config/types';\n\nimport { resolveMcpAllowlist } from '../mcpFilter';\nimport { materializePluginEntries } from '../pluginMaterializer';\nimport { collectResources } from '../resourceCollector';\n\n/**\n * Live domain switching: skills, plugin hooks, MCP config and subagent directories.\n *\n * Writes through the harness state module and relies on Pi's reload\n * re-executing extension modules. The replacement Config factory publishes the\n * persisted MCP projection on the new session's Cordis root.\n *\n * What reload cannot do is change the SET of loaded extensions: Pi freezes the\n * CLI --extension list at construction and re-resolves that same array on every\n * reload. Callers report those parts as needing a relaunch instead of pretending\n * they applied.\n *\n * The major-mode and profile switches live in\n * @agimon-ai/po-config/selectionSwitch: they are config writes with no\n * resource staging, and the synced startup path applies them before any command\n * exists to run. Domains stays here because it stages plugins, skills and MCP\n * config.\n */\nexport async function applyDomains(domainNames: string[], state: PoHarnessContext): Promise<HarnessState> {\n const { root, temporaryDirectory } = requireHarnessPaths(state);\n\n const pluginEntries = await materializePluginEntries(\n resolvePluginEntries(root, domainNames, [...state.pluginDirectories]),\n );\n const mcpAllowlist = resolveMcpAllowlist(root, domainNames);\n // Keep the active generation untouched while the candidate is parsed and\n // normalized. Pi's reload later removes the whole process-owned run root, so\n // retired generations need no eager destructive cleanup here.\n const candidateDirectory = await fs.promises.mkdtemp(path.join(temporaryDirectory, 'domains-'));\n let resources: Awaited<ReturnType<typeof collectResources>>;\n try {\n resources = await collectResources(root, pluginEntries, {\n agents: state.agents,\n mcp: state.mcp,\n temporaryDirectory: candidateDirectory,\n sharedSkills: resolveSharedSkills(root, domainNames),\n mcpAllowlist,\n });\n } catch (error) {\n await fs.promises.rm(candidateDirectory, { recursive: true, force: true });\n throw error;\n }\n\n let updated: HarnessState;\n try {\n updated = updateHarnessState({\n domains: domainNames,\n skillDirectories: resources.skillDirectories,\n agentDirectories: resources.agentDirectories,\n pluginHooks: resources.pluginHooks,\n mcpConfigPath: resources.mcpConfigPath,\n mcpProjection: resources.mcpProjection,\n });\n } catch (error) {\n await fs.promises.rm(candidateDirectory, { recursive: true, force: true });\n throw error;\n }\n process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(path.delimiter);\n process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(path.delimiter);\n return updated;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"apply.cjs","names":["requireHarnessPaths","materializePluginEntries","resolvePluginEntries","resolveMcpAllowlist","fs","path","collectResources","resolveSharedSkills","globalPoConfigDirectory","PO_USER_MCP_CONFIG_FILE","updateHarnessState"],"sources":["../src/services/applyDomains/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { globalPoConfigDirectory } from '@agimon-ai/po-config/config';\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/po-config/domains';\nimport { requireHarnessPaths, updateHarnessState } from '@agimon-ai/po-config/harnessStore';\nimport type { PoHarnessContext, HarnessState } from '@agimon-ai/po-config/types';\nimport { PO_USER_MCP_CONFIG_FILE } from '@agimon-ai/po-core/mcpProjection';\n\nimport { resolveMcpAllowlist } from '../mcpFilter';\nimport { materializePluginEntries } from '../pluginMaterializer';\nimport { collectResources } from '../resourceCollector';\n\n/**\n * Live domain switching: skills, plugin hooks, MCP config and subagent directories.\n *\n * Writes through the harness state module and relies on Pi's reload\n * re-executing extension modules. The replacement Config factory publishes the\n * persisted MCP projection on the new session's Cordis root.\n *\n * What reload cannot do is change the SET of loaded extensions: Pi freezes the\n * CLI --extension list at construction and re-resolves that same array on every\n * reload. Callers report those parts as needing a relaunch instead of pretending\n * they applied.\n *\n * The major-mode and profile switches live in\n * @agimon-ai/po-config/selectionSwitch: they are config writes with no\n * resource staging, and the synced startup path applies them before any command\n * exists to run. Domains stays here because it stages plugins, skills and MCP\n * config.\n */\nexport async function applyDomains(domainNames: string[], state: PoHarnessContext): Promise<HarnessState> {\n const { root, temporaryDirectory } = requireHarnessPaths(state);\n\n const pluginEntries = await materializePluginEntries(\n resolvePluginEntries(root, domainNames, [...state.pluginDirectories]),\n );\n const mcpAllowlist = resolveMcpAllowlist(root, domainNames);\n // Keep the active generation untouched while the candidate is parsed and\n // normalized. Pi's reload later removes the whole process-owned run root, so\n // retired generations need no eager destructive cleanup here.\n const candidateDirectory = await fs.promises.mkdtemp(path.join(temporaryDirectory, 'domains-'));\n let resources: Awaited<ReturnType<typeof collectResources>>;\n try {\n resources = await collectResources(root, pluginEntries, {\n agents: state.agents,\n mcp: state.mcp,\n temporaryDirectory: candidateDirectory,\n sharedSkills: resolveSharedSkills(root, domainNames),\n mcpAllowlist,\n userMcpConfigPath: path.join(globalPoConfigDirectory(), PO_USER_MCP_CONFIG_FILE),\n });\n } catch (error) {\n await fs.promises.rm(candidateDirectory, { recursive: true, force: true });\n throw error;\n }\n\n let updated: HarnessState;\n try {\n updated = updateHarnessState({\n domains: domainNames,\n skillDirectories: resources.skillDirectories,\n agentDirectories: resources.agentDirectories,\n pluginHooks: resources.pluginHooks,\n mcpConfigPath: resources.mcpConfigPath,\n mcpProjection: resources.mcpProjection,\n });\n } catch (error) {\n await fs.promises.rm(candidateDirectory, { recursive: true, force: true });\n throw error;\n }\n process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(path.delimiter);\n process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(path.delimiter);\n return updated;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,eAAsB,aAAa,aAAuB,OAAgD;CACxG,MAAM,EAAE,MAAM,wBAAA,GAAuBA,kCAAAA,oBAAAA,CAAoB,KAAK;CAE9D,MAAM,gBAAgB,MAAMC,2BAAAA,0BAAAA,GAC1BC,6BAAAA,qBAAAA,CAAqB,MAAM,aAAa,CAAC,GAAG,MAAM,iBAAiB,CAAC,CACtE;CACA,MAAM,eAAeC,kBAAAA,oBAAoB,MAAM,WAAW;CAI1D,MAAM,qBAAqB,MAAMC,QAAAA,QAAG,SAAS,QAAQC,UAAAA,QAAK,KAAK,oBAAoB,UAAU,CAAC;CAC9F,IAAI;CACJ,IAAI;EACF,YAAY,MAAMC,0BAAAA,iBAAiB,MAAM,eAAe;GACtD,QAAQ,MAAM;GACd,KAAK,MAAM;GACX,oBAAoB;GACpB,eAAA,GAAcC,6BAAAA,oBAAAA,CAAoB,MAAM,WAAW;GACnD;GACA,mBAAmBF,UAAAA,QAAK,MAAA,GAAKG,4BAAAA,wBAAAA,CAAwB,GAAGC,iCAAAA,uBAAuB;EACjF,CAAC;CACH,SAAS,OAAO;EACd,MAAML,QAAAA,QAAG,SAAS,GAAG,oBAAoB;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;EACzE,MAAM;CACR;CAEA,IAAI;CACJ,IAAI;EACF,WAAA,GAAUM,kCAAAA,mBAAAA,CAAmB;GAC3B,SAAS;GACT,kBAAkB,UAAU;GAC5B,kBAAkB,UAAU;GAC5B,aAAa,UAAU;GACvB,eAAe,UAAU;GACzB,eAAe,UAAU;EAC3B,CAAC;CACH,SAAS,OAAO;EACd,MAAMN,QAAAA,QAAG,SAAS,GAAG,oBAAoB;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;EACzE,MAAM;CACR;CACA,QAAQ,IAAI,+BAA+B,UAAU,iBAAiB,KAAKC,UAAAA,QAAK,SAAS;CACzF,QAAQ,IAAI,+BAA+B,UAAU,iBAAiB,KAAKA,UAAAA,QAAK,SAAS;CACzF,OAAO;AACT"}
|
package/dist/apply.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.mts","names":[],"sources":["../src/services/applyDomains/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"apply.d.mts","names":[],"sources":["../src/services/applyDomains/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;wBA+BsB,aAAa,uBAAuB,OAAO,mBAAmB,QAAQ"}
|
package/dist/apply.mjs
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { r as resolveMcpAllowlist } from "./mcpFilter-CKUbKmxz.mjs";
|
|
2
2
|
import { t as materializePluginEntries } from "./pluginMaterializer-D9-oDF-b.mjs";
|
|
3
|
-
import { t as collectResources } from "./resourceCollector-
|
|
3
|
+
import { t as collectResources } from "./resourceCollector-DjZ0FvjL.mjs";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
|
+
import { globalPoConfigDirectory } from "@agimon-ai/po-config/config";
|
|
6
7
|
import { resolvePluginEntries, resolveSharedSkills } from "@agimon-ai/po-config/domains";
|
|
7
8
|
import { requireHarnessPaths, updateHarnessState } from "@agimon-ai/po-config/harnessStore";
|
|
9
|
+
import { PO_USER_MCP_CONFIG_FILE } from "@agimon-ai/po-core/mcpProjection";
|
|
8
10
|
//#region src/services/applyDomains/index.ts
|
|
9
11
|
/**
|
|
10
12
|
* Live domain switching: skills, plugin hooks, MCP config and subagent directories.
|
|
@@ -36,7 +38,8 @@ async function applyDomains(domainNames, state) {
|
|
|
36
38
|
mcp: state.mcp,
|
|
37
39
|
temporaryDirectory: candidateDirectory,
|
|
38
40
|
sharedSkills: resolveSharedSkills(root, domainNames),
|
|
39
|
-
mcpAllowlist
|
|
41
|
+
mcpAllowlist,
|
|
42
|
+
userMcpConfigPath: path.join(globalPoConfigDirectory(), PO_USER_MCP_CONFIG_FILE)
|
|
40
43
|
});
|
|
41
44
|
} catch (error) {
|
|
42
45
|
await fs.promises.rm(candidateDirectory, {
|
package/dist/apply.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.mjs","names":[],"sources":["../src/services/applyDomains/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/po-config/domains';\nimport { requireHarnessPaths, updateHarnessState } from '@agimon-ai/po-config/harnessStore';\nimport type { PoHarnessContext, HarnessState } from '@agimon-ai/po-config/types';\n\nimport { resolveMcpAllowlist } from '../mcpFilter';\nimport { materializePluginEntries } from '../pluginMaterializer';\nimport { collectResources } from '../resourceCollector';\n\n/**\n * Live domain switching: skills, plugin hooks, MCP config and subagent directories.\n *\n * Writes through the harness state module and relies on Pi's reload\n * re-executing extension modules. The replacement Config factory publishes the\n * persisted MCP projection on the new session's Cordis root.\n *\n * What reload cannot do is change the SET of loaded extensions: Pi freezes the\n * CLI --extension list at construction and re-resolves that same array on every\n * reload. Callers report those parts as needing a relaunch instead of pretending\n * they applied.\n *\n * The major-mode and profile switches live in\n * @agimon-ai/po-config/selectionSwitch: they are config writes with no\n * resource staging, and the synced startup path applies them before any command\n * exists to run. Domains stays here because it stages plugins, skills and MCP\n * config.\n */\nexport async function applyDomains(domainNames: string[], state: PoHarnessContext): Promise<HarnessState> {\n const { root, temporaryDirectory } = requireHarnessPaths(state);\n\n const pluginEntries = await materializePluginEntries(\n resolvePluginEntries(root, domainNames, [...state.pluginDirectories]),\n );\n const mcpAllowlist = resolveMcpAllowlist(root, domainNames);\n // Keep the active generation untouched while the candidate is parsed and\n // normalized. Pi's reload later removes the whole process-owned run root, so\n // retired generations need no eager destructive cleanup here.\n const candidateDirectory = await fs.promises.mkdtemp(path.join(temporaryDirectory, 'domains-'));\n let resources: Awaited<ReturnType<typeof collectResources>>;\n try {\n resources = await collectResources(root, pluginEntries, {\n agents: state.agents,\n mcp: state.mcp,\n temporaryDirectory: candidateDirectory,\n sharedSkills: resolveSharedSkills(root, domainNames),\n mcpAllowlist,\n });\n } catch (error) {\n await fs.promises.rm(candidateDirectory, { recursive: true, force: true });\n throw error;\n }\n\n let updated: HarnessState;\n try {\n updated = updateHarnessState({\n domains: domainNames,\n skillDirectories: resources.skillDirectories,\n agentDirectories: resources.agentDirectories,\n pluginHooks: resources.pluginHooks,\n mcpConfigPath: resources.mcpConfigPath,\n mcpProjection: resources.mcpProjection,\n });\n } catch (error) {\n await fs.promises.rm(candidateDirectory, { recursive: true, force: true });\n throw error;\n }\n process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(path.delimiter);\n process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(path.delimiter);\n return updated;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"apply.mjs","names":[],"sources":["../src/services/applyDomains/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { globalPoConfigDirectory } from '@agimon-ai/po-config/config';\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/po-config/domains';\nimport { requireHarnessPaths, updateHarnessState } from '@agimon-ai/po-config/harnessStore';\nimport type { PoHarnessContext, HarnessState } from '@agimon-ai/po-config/types';\nimport { PO_USER_MCP_CONFIG_FILE } from '@agimon-ai/po-core/mcpProjection';\n\nimport { resolveMcpAllowlist } from '../mcpFilter';\nimport { materializePluginEntries } from '../pluginMaterializer';\nimport { collectResources } from '../resourceCollector';\n\n/**\n * Live domain switching: skills, plugin hooks, MCP config and subagent directories.\n *\n * Writes through the harness state module and relies on Pi's reload\n * re-executing extension modules. The replacement Config factory publishes the\n * persisted MCP projection on the new session's Cordis root.\n *\n * What reload cannot do is change the SET of loaded extensions: Pi freezes the\n * CLI --extension list at construction and re-resolves that same array on every\n * reload. Callers report those parts as needing a relaunch instead of pretending\n * they applied.\n *\n * The major-mode and profile switches live in\n * @agimon-ai/po-config/selectionSwitch: they are config writes with no\n * resource staging, and the synced startup path applies them before any command\n * exists to run. Domains stays here because it stages plugins, skills and MCP\n * config.\n */\nexport async function applyDomains(domainNames: string[], state: PoHarnessContext): Promise<HarnessState> {\n const { root, temporaryDirectory } = requireHarnessPaths(state);\n\n const pluginEntries = await materializePluginEntries(\n resolvePluginEntries(root, domainNames, [...state.pluginDirectories]),\n );\n const mcpAllowlist = resolveMcpAllowlist(root, domainNames);\n // Keep the active generation untouched while the candidate is parsed and\n // normalized. Pi's reload later removes the whole process-owned run root, so\n // retired generations need no eager destructive cleanup here.\n const candidateDirectory = await fs.promises.mkdtemp(path.join(temporaryDirectory, 'domains-'));\n let resources: Awaited<ReturnType<typeof collectResources>>;\n try {\n resources = await collectResources(root, pluginEntries, {\n agents: state.agents,\n mcp: state.mcp,\n temporaryDirectory: candidateDirectory,\n sharedSkills: resolveSharedSkills(root, domainNames),\n mcpAllowlist,\n userMcpConfigPath: path.join(globalPoConfigDirectory(), PO_USER_MCP_CONFIG_FILE),\n });\n } catch (error) {\n await fs.promises.rm(candidateDirectory, { recursive: true, force: true });\n throw error;\n }\n\n let updated: HarnessState;\n try {\n updated = updateHarnessState({\n domains: domainNames,\n skillDirectories: resources.skillDirectories,\n agentDirectories: resources.agentDirectories,\n pluginHooks: resources.pluginHooks,\n mcpConfigPath: resources.mcpConfigPath,\n mcpProjection: resources.mcpProjection,\n });\n } catch (error) {\n await fs.promises.rm(candidateDirectory, { recursive: true, force: true });\n throw error;\n }\n process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(path.delimiter);\n process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(path.delimiter);\n return updated;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,eAAsB,aAAa,aAAuB,OAAgD;CACxG,MAAM,EAAE,MAAM,uBAAuB,oBAAoB,KAAK;CAE9D,MAAM,gBAAgB,MAAM,yBAC1B,qBAAqB,MAAM,aAAa,CAAC,GAAG,MAAM,iBAAiB,CAAC,CACtE;CACA,MAAM,eAAe,oBAAoB,MAAM,WAAW;CAI1D,MAAM,qBAAqB,MAAM,GAAG,SAAS,QAAQ,KAAK,KAAK,oBAAoB,UAAU,CAAC;CAC9F,IAAI;CACJ,IAAI;EACF,YAAY,MAAM,iBAAiB,MAAM,eAAe;GACtD,QAAQ,MAAM;GACd,KAAK,MAAM;GACX,oBAAoB;GACpB,cAAc,oBAAoB,MAAM,WAAW;GACnD;GACA,mBAAmB,KAAK,KAAK,wBAAwB,GAAG,uBAAuB;EACjF,CAAC;CACH,SAAS,OAAO;EACd,MAAM,GAAG,SAAS,GAAG,oBAAoB;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;EACzE,MAAM;CACR;CAEA,IAAI;CACJ,IAAI;EACF,UAAU,mBAAmB;GAC3B,SAAS;GACT,kBAAkB,UAAU;GAC5B,kBAAkB,UAAU;GAC5B,aAAa,UAAU;GACvB,eAAe,UAAU;GACzB,eAAe,UAAU;EAC3B,CAAC;CACH,SAAS,OAAO;EACd,MAAM,GAAG,SAAS,GAAG,oBAAoB;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;EACzE,MAAM;CACR;CACA,QAAQ,IAAI,+BAA+B,UAAU,iBAAiB,KAAK,KAAK,SAAS;CACzF,QAAQ,IAAI,+BAA+B,UAAU,iBAAiB,KAAK,KAAK,SAAS;CACzF,OAAO;AACT"}
|
|
@@ -4,11 +4,12 @@ Object.defineProperties(exports, {
|
|
|
4
4
|
});
|
|
5
5
|
const require_mcpFilter = require("../mcpFilter-CghXZ2K-.cjs");
|
|
6
6
|
const require_pluginMaterializer = require("../pluginMaterializer-C8IZ1PSY.cjs");
|
|
7
|
-
const require_resourceCollector = require("../resourceCollector-
|
|
7
|
+
const require_resourceCollector = require("../resourceCollector-DRvsbqfZ.cjs");
|
|
8
8
|
const require_domainText = require("../domainText-CbpBLX_M.cjs");
|
|
9
9
|
let _agimon_ai_po_config_domains = require("@agimon-ai/po-config/domains");
|
|
10
10
|
let _agimon_ai_po_config_harnessStore = require("@agimon-ai/po-config/harnessStore");
|
|
11
11
|
let _agimon_ai_po_core_mcpProjection = require("@agimon-ai/po-core/mcpProjection");
|
|
12
|
+
let _agimon_ai_po_core_piSettings = require("@agimon-ai/po-core/piSettings");
|
|
12
13
|
let _agimon_ai_po_core_serverPlugin = require("@agimon-ai/po-core/serverPlugin");
|
|
13
14
|
let _agimon_ai_po_core_extensionFile = require("@agimon-ai/po-core/extensionFile");
|
|
14
15
|
let _agimon_ai_po_core_platform = require("@agimon-ai/po-core/platform");
|
|
@@ -75,7 +76,8 @@ var root_server_default = (0, _agimon_ai_po_core_extensionFile.defineRoot)(async
|
|
|
75
76
|
projection: (await require_resourceCollector.stageMcpResources(execution.repoRoot, plugins, {
|
|
76
77
|
enabled: true,
|
|
77
78
|
temporaryDirectory: directory,
|
|
78
|
-
mcpAllowlist: await require_mcpFilter.resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io)
|
|
79
|
+
mcpAllowlist: await require_mcpFilter.resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io),
|
|
80
|
+
userMcpConfigPath: `${(0, _agimon_ai_po_core_piSettings.poHomeDirectory)(home, execution.environment)}/${_agimon_ai_po_core_mcpProjection.PO_USER_MCP_CONFIG_FILE}`
|
|
79
81
|
})).mcpProjection,
|
|
80
82
|
cleanup: () => (0, _agimon_ai_po_core_platform.removePath)(fs, directory, _agimon_ai_po_core_platform.BACKGROUND_CONTEXT)
|
|
81
83
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.cjs","names":["nodeHost","listDomainNamesAsync","getOrThrow","materializePluginEntries","resolvePluginEntriesAsync","collectResources","BACKGROUND_CONTEXT","removePath","defineRoot","requirePoFs","withAbortSignal","BACKGROUND_CONTEXT","nodeHost","loadHarnessStateAsync","getOrThrow","materializePluginEntries","resolvePluginEntriesAsync","stageMcpResources","resolveMcpAllowlistAsync","removePath","PO_MCP_PROJECTION_RESOLVER_SERVICE","defineRoute","DOMAIN_COMMAND","listDomainNamesAsync","BACKGROUND_CONTEXT","splitDomains","pickerTitle","domainToggleOptions","toggledDomains","toggleOptionDomain","normalizeDomainNames","PO_RESOURCE_CATALOG_ENTRY_TYPE","defineRoutedContribution","requirePoFs","defineRoutedContribution","defineResource","packageResourcePath","readPackageResource","defineServerPlugin","composeServerProviderOverrides","rootSession","composeRootInjects","composeRootHooks","apiRoute","commandDomains","resourceDomains","resourcePoAuthorDomain"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/domainServerResources.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/extensions/workspaces/sessions/(backend)/api/domains/route.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/domainServerCommand.ts","../../src/extensions/workspaces/sessions/(backend)/command/domains.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/domains.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/poAuthorDomain.server.ts","../../generated/server.ts"],"sourcesContent":["import { listDomainNamesAsync, resolvePluginEntriesAsync } from '@agimon-ai/po-config/domains';\nimport type { PoHeadlessExecutionContext, PoHeadlessResource } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, getOrThrow, nodeHost, removePath, type FileSystem } from '@agimon-ai/po-core/platform';\n\nimport { materializePluginEntries } from '../../../../../services/pluginMaterializer';\nimport { collectResources } from '../../../../../services/resourceCollector';\n\ntype IoContext = Parameters<FileSystem['readTextFile']>[1];\n\n/** Retain valid domains behind selection conditions; a broken neighbor must not prevent startup. */\nexport async function domainServerResources(\n context: PoHeadlessExecutionContext,\n fs: FileSystem,\n io: IoContext,\n): Promise<PoHeadlessResource[]> {\n const resources: PoHeadlessResource[] = [];\n const home = context.environment.HOME ?? nodeHost.homeDirectory();\n for (const domain of await listDomainNamesAsync(fs, context.repoRoot, io, home)) {\n // Own staging here so collection failures also release their temporary files.\n const temporaryDirectory = getOrThrow(await fs.createTempDir('po-domain-', io));\n try {\n const plugins = await materializePluginEntries(\n await resolvePluginEntriesAsync(fs, context.repoRoot, [domain], [], io, home),\n );\n const collected = await collectResources(context.repoRoot, plugins, {\n agents: false,\n mcp: false,\n sharedSkills: false,\n temporaryDirectory,\n });\n for (const skill of collected.skillSources) {\n resources.push({\n name: skill.name,\n description: skill.description,\n path: skill.path,\n kind: 'skill',\n when: { domain, attribution: { kind: 'domain', mode: domain } },\n read: async () => getOrThrow(await fs.readTextFile(skill.path, BACKGROUND_CONTEXT)),\n });\n }\n } catch (error) {\n await context.client.notify({\n title: `Po domain ${domain} unavailable`,\n body: error instanceof Error ? error.message : String(error),\n level: 'warning',\n });\n } finally {\n await removePath(fs, temporaryDirectory, BACKGROUND_CONTEXT);\n }\n }\n return resources;\n}\n","import { resolvePluginEntriesAsync } from '@agimon-ai/po-config/domains';\nimport { loadHarnessStateAsync } from '@agimon-ai/po-config/harnessStore';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport {\n PO_MCP_PROJECTION_RESOLVER_SERVICE,\n type PoMcpProjectionResolverService,\n} from '@agimon-ai/po-core/mcpProjection';\nimport {\n BACKGROUND_CONTEXT,\n getOrThrow,\n nodeHost,\n removePath,\n requirePoFs,\n withAbortSignal,\n} from '@agimon-ai/po-core/platform';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { resolveMcpAllowlistAsync } from '../../../../services/mcpFilter';\nimport { materializePluginEntries } from '../../../../services/pluginMaterializer';\nimport { stageMcpResources } from '../../../../services/resourceCollector';\nimport { domainServerResources } from './_lib/domainServerResources';\nimport type { DomainServerScope } from './_lib/serverScope';\n\nexport default defineRoot(async ({ agent, context: root, signal }: PoServerPluginContext) => {\n const services: Array<(cordis: Context) => void> = [];\n if (!agent) return { value: { resources: [] } satisfies DomainServerScope, services };\n const fs = requirePoFs(root);\n const io = withAbortSignal(signal, BACKGROUND_CONTEXT);\n const execution = agent.context;\n const home = execution.environment.HOME ?? nodeHost.homeDirectory();\n const resolver: PoMcpProjectionResolverService = {\n async resolve(domains) {\n const { state } = await loadHarnessStateAsync(fs, { ...execution.environment }, io);\n const directory = getOrThrow(await fs.createTempDir('po-domain-mcp-', io));\n try {\n const plugins = await materializePluginEntries(\n await resolvePluginEntriesAsync(fs, execution.repoRoot, [...domains], [...state.pluginDirectories], io, home),\n );\n const staged = await stageMcpResources(execution.repoRoot, plugins, {\n enabled: true,\n temporaryDirectory: directory,\n mcpAllowlist: await resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io),\n });\n return {\n projection: staged.mcpProjection,\n cleanup: () => removePath(fs, directory, BACKGROUND_CONTEXT),\n };\n } catch (error) {\n await removePath(fs, directory, BACKGROUND_CONTEXT);\n throw error;\n }\n },\n };\n services.push((cordis) => {\n cordis.plugin((provider) => {\n provider.provide(PO_MCP_PROJECTION_RESOLVER_SERVICE, resolver);\n });\n });\n return {\n value: { resources: await domainServerResources(agent.context, fs, io) } satisfies DomainServerScope,\n services,\n };\n});\n","import { defineRoute } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineRoute(({ agent }: PoServerPluginContext) => ({\n basePath: 'domains',\n start: () => ({\n fetch(request: Request) {\n if (new URL(request.url).pathname !== '/current') return Response.json({ error: 'Not found' }, { status: 404 });\n if (request.method !== 'GET')\n return Response.json({ error: 'Method not allowed' }, { status: 405, headers: { Allow: 'GET' } });\n if (!agent) return Response.json({ error: 'Session agent unavailable' }, { status: 404 });\n const selection = agent.context.selection;\n return Response.json({ domains: selection.domains });\n },\n close() {},\n }),\n}));\n","import { listDomainNamesAsync } from '@agimon-ai/po-config/domains';\nimport { type PoHeadlessCommand, type PoHeadlessHostService } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, type FileSystem } from '@agimon-ai/po-core/platform';\nimport { PO_RESOURCE_CATALOG_ENTRY_TYPE, type ResourceCatalogProjection } from '@agimon-ai/po-core/skills';\n\nimport {\n DOMAIN_COMMAND,\n domainToggleOptions,\n normalizeDomainNames,\n pickerTitle,\n splitDomains,\n toggledDomains,\n toggleOptionDomain,\n} from '../../../../../services/domainText';\n\nconst DOMAIN_SELECTION_KIND = 'po-domains-selection';\nconst DOMAIN_SELECTION_VERSION = 1;\n\n/** Full-set web replies share the string transport with legacy single-toggle labels. */\nfunction domainSelectionReply(answer: string): string[] | null {\n if (!answer.trimStart().startsWith('{')) return null;\n const reply: unknown = JSON.parse(answer);\n if (\n typeof reply !== 'object' ||\n reply === null ||\n !('kind' in reply) ||\n reply.kind !== DOMAIN_SELECTION_KIND ||\n !('version' in reply) ||\n reply.version !== DOMAIN_SELECTION_VERSION ||\n !('domains' in reply) ||\n !Array.isArray(reply.domains) ||\n !reply.domains.every((name: unknown): name is string => typeof name === 'string')\n ) {\n throw new Error('Invalid domains selection reply');\n }\n return reply.domains;\n}\n\nexport function createDomainServerCommand(host: PoHeadlessHostService, fs: FileSystem): PoHeadlessCommand {\n return {\n name: DOMAIN_COMMAND,\n description: 'Show or change the active Po domains.',\n async execute(args, execution) {\n const available = await listDomainNamesAsync(fs, execution.repoRoot, BACKGROUND_CONTEXT);\n let requested = splitDomains(args);\n let fullSet = false;\n if (requested.length === 0) {\n const listing = {\n active: [...execution.selection.domains],\n effective: [...execution.selection.domains],\n available,\n };\n const selected = await execution.client.request({\n kind: 'select',\n title: pickerTitle(listing),\n options: domainToggleOptions(listing).map((label) => ({ label, value: label })),\n });\n if (typeof selected !== 'string' || !selected) return;\n const domains = domainSelectionReply(selected);\n fullSet = domains !== null;\n requested = domains ?? toggledDomains(listing.effective, toggleOptionDomain(selected));\n }\n requested = normalizeDomainNames(requested);\n const unknown = requested.filter((name) => !available.includes(name));\n if (unknown.length > 0) throw new Error(`Unknown domain: ${unknown.join(', ')}`);\n if (fullSet) {\n const wanted = new Set(requested);\n const current = new Set(execution.selection.domains);\n requested = [\n ...execution.selection.domains.filter((name) => wanted.has(name)),\n ...available.filter((name) => wanted.has(name) && !current.has(name)),\n ];\n }\n if (\n requested.length === execution.selection.domains.length &&\n requested.every((name, index) => name === execution.selection.domains[index])\n ) {\n return;\n }\n await host.changeSelection({ axis: 'domains', domains: requested });\n // The web composer caches get_commands for `$` completion. Signal only after\n // the headless host has reconciled commands so the re-read sees this selection.\n const projection: ResourceCatalogProjection = { version: 1, revision: Date.now() };\n await execution.session.appendCustomEntry(PO_RESOURCE_CATALOG_ENTRY_TYPE, projection);\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport { requirePoFs } from '@agimon-ai/po-core/platform';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport { createDomainServerCommand } from '../_lib/domainServerCommand';\nexport default defineRoutedContribution(\n ({ agent, context }: PoServerPluginContext) =>\n agent ? createDomainServerCommand(agent, requirePoFs(context)) : undefined,\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport type { DomainServerScope } from '../_lib/serverScope';\n\nexport default defineRoutedContribution(\n (context: WithRoot<PoServerPluginContext, DomainServerScope>) => context.root.resources,\n { cardinality: 'many' },\n);\n","import { defineResource } from '@agimon-ai/po-core/extensionFile';\nimport { packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineResource({\n name: 'po-author-domain',\n description:\n 'Configure Po plugin catalogs and domain resource selections in domains.yaml. Use when creating or editing .po/domains.yaml or ~/.po/domains.yaml, choosing local, Git, or npm plugins, filtering plugin resources, setting aliases or defaults, or verifying resolved domain composition.',\n when: { state: { 'minor-mode': 'help' }, attribution: { kind: 'minor' as const, mode: 'help' } },\n kind: 'skill' as const,\n path: packageResourcePath(import.meta.url, 'src/prompts/po-author-domain/SKILL.md'),\n read: () => readPackageResource(import.meta.url, 'src/prompts/po-author-domain/SKILL.md'),\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverPlugin';\nimport { composeRootHooks, composeRootInjects } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport apiRoute from '../src/extensions/workspaces/sessions/(backend)/api/domains/route.server';\nimport commandDomains from '../src/extensions/workspaces/sessions/(backend)/command/domains.server';\nimport resourceDomains from '../src/extensions/workspaces/sessions/(backend)/resource/domains.server';\nimport resourcePoAuthorDomain from '../src/extensions/workspaces/sessions/(backend)/resource/poAuthorDomain.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n return Array.isArray(resolved) ? resolved : [resolved as T];\n};\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-domain',\n providerOverrides: composeServerProviderOverrides(rootSession),\n injects: composeRootInjects({ session: [rootSession] }),\n session: async (context) => {\n const scopeSession = await context.scopeRoot('session', rootSession, context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get api(): PoServerSessionPlugin['api'] { return [at(apiRoute, contextSession)]; },\n get commands(): PoServerSessionPlugin['commands'] { return defined([via({ name: 'domains' }, at(commandDomains, contextSession))]); },\n get resources(): PoServerSessionPlugin['resources'] { return [...many(resourceDomains, contextSession), at(resourcePoAuthorDomain, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): PoServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default serverPlugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.cjs","names":["nodeHost","listDomainNamesAsync","getOrThrow","materializePluginEntries","resolvePluginEntriesAsync","collectResources","BACKGROUND_CONTEXT","removePath","defineRoot","requirePoFs","withAbortSignal","BACKGROUND_CONTEXT","nodeHost","loadHarnessStateAsync","getOrThrow","materializePluginEntries","resolvePluginEntriesAsync","stageMcpResources","resolveMcpAllowlistAsync","poHomeDirectory","PO_USER_MCP_CONFIG_FILE","removePath","PO_MCP_PROJECTION_RESOLVER_SERVICE","defineRoute","DOMAIN_COMMAND","listDomainNamesAsync","BACKGROUND_CONTEXT","splitDomains","pickerTitle","domainToggleOptions","toggledDomains","toggleOptionDomain","normalizeDomainNames","PO_RESOURCE_CATALOG_ENTRY_TYPE","defineRoutedContribution","requirePoFs","defineRoutedContribution","defineResource","packageResourcePath","readPackageResource","defineServerPlugin","composeServerProviderOverrides","rootSession","composeRootInjects","composeRootHooks","apiRoute","commandDomains","resourceDomains","resourcePoAuthorDomain"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/domainServerResources.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/extensions/workspaces/sessions/(backend)/api/domains/route.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/domainServerCommand.ts","../../src/extensions/workspaces/sessions/(backend)/command/domains.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/domains.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/poAuthorDomain.server.ts","../../generated/server.ts"],"sourcesContent":["import { listDomainNamesAsync, resolvePluginEntriesAsync } from '@agimon-ai/po-config/domains';\nimport type { PoHeadlessExecutionContext, PoHeadlessResource } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, getOrThrow, nodeHost, removePath, type FileSystem } from '@agimon-ai/po-core/platform';\n\nimport { materializePluginEntries } from '../../../../../services/pluginMaterializer';\nimport { collectResources } from '../../../../../services/resourceCollector';\n\ntype IoContext = Parameters<FileSystem['readTextFile']>[1];\n\n/** Retain valid domains behind selection conditions; a broken neighbor must not prevent startup. */\nexport async function domainServerResources(\n context: PoHeadlessExecutionContext,\n fs: FileSystem,\n io: IoContext,\n): Promise<PoHeadlessResource[]> {\n const resources: PoHeadlessResource[] = [];\n const home = context.environment.HOME ?? nodeHost.homeDirectory();\n for (const domain of await listDomainNamesAsync(fs, context.repoRoot, io, home)) {\n // Own staging here so collection failures also release their temporary files.\n const temporaryDirectory = getOrThrow(await fs.createTempDir('po-domain-', io));\n try {\n const plugins = await materializePluginEntries(\n await resolvePluginEntriesAsync(fs, context.repoRoot, [domain], [], io, home),\n );\n const collected = await collectResources(context.repoRoot, plugins, {\n agents: false,\n mcp: false,\n sharedSkills: false,\n temporaryDirectory,\n });\n for (const skill of collected.skillSources) {\n resources.push({\n name: skill.name,\n description: skill.description,\n path: skill.path,\n kind: 'skill',\n when: { domain, attribution: { kind: 'domain', mode: domain } },\n read: async () => getOrThrow(await fs.readTextFile(skill.path, BACKGROUND_CONTEXT)),\n });\n }\n } catch (error) {\n await context.client.notify({\n title: `Po domain ${domain} unavailable`,\n body: error instanceof Error ? error.message : String(error),\n level: 'warning',\n });\n } finally {\n await removePath(fs, temporaryDirectory, BACKGROUND_CONTEXT);\n }\n }\n return resources;\n}\n","import { resolvePluginEntriesAsync } from '@agimon-ai/po-config/domains';\nimport { loadHarnessStateAsync } from '@agimon-ai/po-config/harnessStore';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport {\n PO_MCP_PROJECTION_RESOLVER_SERVICE,\n PO_USER_MCP_CONFIG_FILE,\n type PoMcpProjectionResolverService,\n} from '@agimon-ai/po-core/mcpProjection';\nimport { poHomeDirectory } from '@agimon-ai/po-core/piSettings';\nimport {\n BACKGROUND_CONTEXT,\n getOrThrow,\n nodeHost,\n removePath,\n requirePoFs,\n withAbortSignal,\n} from '@agimon-ai/po-core/platform';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { resolveMcpAllowlistAsync } from '../../../../services/mcpFilter';\nimport { materializePluginEntries } from '../../../../services/pluginMaterializer';\nimport { stageMcpResources } from '../../../../services/resourceCollector';\nimport { domainServerResources } from './_lib/domainServerResources';\nimport type { DomainServerScope } from './_lib/serverScope';\n\nexport default defineRoot(async ({ agent, context: root, signal }: PoServerPluginContext) => {\n const services: Array<(cordis: Context) => void> = [];\n if (!agent) return { value: { resources: [] } satisfies DomainServerScope, services };\n const fs = requirePoFs(root);\n const io = withAbortSignal(signal, BACKGROUND_CONTEXT);\n const execution = agent.context;\n const home = execution.environment.HOME ?? nodeHost.homeDirectory();\n const resolver: PoMcpProjectionResolverService = {\n async resolve(domains) {\n const { state } = await loadHarnessStateAsync(fs, { ...execution.environment }, io);\n const directory = getOrThrow(await fs.createTempDir('po-domain-mcp-', io));\n try {\n const plugins = await materializePluginEntries(\n await resolvePluginEntriesAsync(fs, execution.repoRoot, [...domains], [...state.pluginDirectories], io, home),\n );\n const staged = await stageMcpResources(execution.repoRoot, plugins, {\n enabled: true,\n temporaryDirectory: directory,\n mcpAllowlist: await resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io),\n userMcpConfigPath: `${poHomeDirectory(home, execution.environment)}/${PO_USER_MCP_CONFIG_FILE}`,\n });\n return {\n projection: staged.mcpProjection,\n cleanup: () => removePath(fs, directory, BACKGROUND_CONTEXT),\n };\n } catch (error) {\n await removePath(fs, directory, BACKGROUND_CONTEXT);\n throw error;\n }\n },\n };\n services.push((cordis) => {\n cordis.plugin((provider) => {\n provider.provide(PO_MCP_PROJECTION_RESOLVER_SERVICE, resolver);\n });\n });\n return {\n value: { resources: await domainServerResources(agent.context, fs, io) } satisfies DomainServerScope,\n services,\n };\n});\n","import { defineRoute } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineRoute(({ agent }: PoServerPluginContext) => ({\n basePath: 'domains',\n start: () => ({\n fetch(request: Request) {\n if (new URL(request.url).pathname !== '/current') return Response.json({ error: 'Not found' }, { status: 404 });\n if (request.method !== 'GET')\n return Response.json({ error: 'Method not allowed' }, { status: 405, headers: { Allow: 'GET' } });\n if (!agent) return Response.json({ error: 'Session agent unavailable' }, { status: 404 });\n const selection = agent.context.selection;\n return Response.json({ domains: selection.domains });\n },\n close() {},\n }),\n}));\n","import { listDomainNamesAsync } from '@agimon-ai/po-config/domains';\nimport { type PoHeadlessCommand, type PoHeadlessHostService } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, type FileSystem } from '@agimon-ai/po-core/platform';\nimport { PO_RESOURCE_CATALOG_ENTRY_TYPE, type ResourceCatalogProjection } from '@agimon-ai/po-core/skills';\n\nimport {\n DOMAIN_COMMAND,\n domainToggleOptions,\n normalizeDomainNames,\n pickerTitle,\n splitDomains,\n toggledDomains,\n toggleOptionDomain,\n} from '../../../../../services/domainText';\n\nconst DOMAIN_SELECTION_KIND = 'po-domains-selection';\nconst DOMAIN_SELECTION_VERSION = 1;\n\n/** Full-set web replies share the string transport with legacy single-toggle labels. */\nfunction domainSelectionReply(answer: string): string[] | null {\n if (!answer.trimStart().startsWith('{')) return null;\n const reply: unknown = JSON.parse(answer);\n if (\n typeof reply !== 'object' ||\n reply === null ||\n !('kind' in reply) ||\n reply.kind !== DOMAIN_SELECTION_KIND ||\n !('version' in reply) ||\n reply.version !== DOMAIN_SELECTION_VERSION ||\n !('domains' in reply) ||\n !Array.isArray(reply.domains) ||\n !reply.domains.every((name: unknown): name is string => typeof name === 'string')\n ) {\n throw new Error('Invalid domains selection reply');\n }\n return reply.domains;\n}\n\nexport function createDomainServerCommand(host: PoHeadlessHostService, fs: FileSystem): PoHeadlessCommand {\n return {\n name: DOMAIN_COMMAND,\n description: 'Show or change the active Po domains.',\n async execute(args, execution) {\n const available = await listDomainNamesAsync(fs, execution.repoRoot, BACKGROUND_CONTEXT);\n let requested = splitDomains(args);\n let fullSet = false;\n if (requested.length === 0) {\n const listing = {\n active: [...execution.selection.domains],\n effective: [...execution.selection.domains],\n available,\n };\n const selected = await execution.client.request({\n kind: 'select',\n title: pickerTitle(listing),\n options: domainToggleOptions(listing).map((label) => ({ label, value: label })),\n });\n if (typeof selected !== 'string' || !selected) return;\n const domains = domainSelectionReply(selected);\n fullSet = domains !== null;\n requested = domains ?? toggledDomains(listing.effective, toggleOptionDomain(selected));\n }\n requested = normalizeDomainNames(requested);\n const unknown = requested.filter((name) => !available.includes(name));\n if (unknown.length > 0) throw new Error(`Unknown domain: ${unknown.join(', ')}`);\n if (fullSet) {\n const wanted = new Set(requested);\n const current = new Set(execution.selection.domains);\n requested = [\n ...execution.selection.domains.filter((name) => wanted.has(name)),\n ...available.filter((name) => wanted.has(name) && !current.has(name)),\n ];\n }\n if (\n requested.length === execution.selection.domains.length &&\n requested.every((name, index) => name === execution.selection.domains[index])\n ) {\n return;\n }\n await host.changeSelection({ axis: 'domains', domains: requested });\n // The web composer caches get_commands for `$` completion. Signal only after\n // the headless host has reconciled commands so the re-read sees this selection.\n const projection: ResourceCatalogProjection = { version: 1, revision: Date.now() };\n await execution.session.appendCustomEntry(PO_RESOURCE_CATALOG_ENTRY_TYPE, projection);\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport { requirePoFs } from '@agimon-ai/po-core/platform';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport { createDomainServerCommand } from '../_lib/domainServerCommand';\nexport default defineRoutedContribution(\n ({ agent, context }: PoServerPluginContext) =>\n agent ? createDomainServerCommand(agent, requirePoFs(context)) : undefined,\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport type { DomainServerScope } from '../_lib/serverScope';\n\nexport default defineRoutedContribution(\n (context: WithRoot<PoServerPluginContext, DomainServerScope>) => context.root.resources,\n { cardinality: 'many' },\n);\n","import { defineResource } from '@agimon-ai/po-core/extensionFile';\nimport { packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineResource({\n name: 'po-author-domain',\n description:\n 'Configure Po plugin catalogs and domain resource selections in domains.yaml. Use when creating or editing .po/domains.yaml or ~/.po/domains.yaml, choosing local, Git, or npm plugins, filtering plugin resources, setting aliases or defaults, or verifying resolved domain composition.',\n when: { state: { 'minor-mode': 'help' }, attribution: { kind: 'minor' as const, mode: 'help' } },\n kind: 'skill' as const,\n path: packageResourcePath(import.meta.url, 'src/prompts/po-author-domain/SKILL.md'),\n read: () => readPackageResource(import.meta.url, 'src/prompts/po-author-domain/SKILL.md'),\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverPlugin';\nimport { composeRootHooks, composeRootInjects } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport apiRoute from '../src/extensions/workspaces/sessions/(backend)/api/domains/route.server';\nimport commandDomains from '../src/extensions/workspaces/sessions/(backend)/command/domains.server';\nimport resourceDomains from '../src/extensions/workspaces/sessions/(backend)/resource/domains.server';\nimport resourcePoAuthorDomain from '../src/extensions/workspaces/sessions/(backend)/resource/poAuthorDomain.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n return Array.isArray(resolved) ? resolved : [resolved as T];\n};\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-domain',\n providerOverrides: composeServerProviderOverrides(rootSession),\n injects: composeRootInjects({ session: [rootSession] }),\n session: async (context) => {\n const scopeSession = await context.scopeRoot('session', rootSession, context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get api(): PoServerSessionPlugin['api'] { return [at(apiRoute, contextSession)]; },\n get commands(): PoServerSessionPlugin['commands'] { return defined([via({ name: 'domains' }, at(commandDomains, contextSession))]); },\n get resources(): PoServerSessionPlugin['resources'] { return [...many(resourceDomains, contextSession), at(resourcePoAuthorDomain, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): PoServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default serverPlugin;\n"],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { s as resolveMcpAllowlistAsync } from "../mcpFilter-CKUbKmxz.mjs";
|
|
2
2
|
import { t as materializePluginEntries } from "../pluginMaterializer-D9-oDF-b.mjs";
|
|
3
|
-
import { o as stageMcpResources, t as collectResources } from "../resourceCollector-
|
|
3
|
+
import { o as stageMcpResources, t as collectResources } from "../resourceCollector-DjZ0FvjL.mjs";
|
|
4
4
|
import { d as splitDomains, l as normalizeDomainNames, m as toggledDomains, p as toggleOptionDomain, s as domainToggleOptions, t as DOMAIN_COMMAND, u as pickerTitle } from "../domainText-D0iurn8D.mjs";
|
|
5
5
|
import { listDomainNamesAsync, resolvePluginEntriesAsync } from "@agimon-ai/po-config/domains";
|
|
6
6
|
import { loadHarnessStateAsync } from "@agimon-ai/po-config/harnessStore";
|
|
7
|
-
import { PO_MCP_PROJECTION_RESOLVER_SERVICE } from "@agimon-ai/po-core/mcpProjection";
|
|
7
|
+
import { PO_MCP_PROJECTION_RESOLVER_SERVICE, PO_USER_MCP_CONFIG_FILE } from "@agimon-ai/po-core/mcpProjection";
|
|
8
|
+
import { poHomeDirectory } from "@agimon-ai/po-core/piSettings";
|
|
8
9
|
import { composeServerProviderOverrides, defineServerPlugin, packageResourcePath, readPackageResource } from "@agimon-ai/po-core/serverPlugin";
|
|
9
10
|
import { composeRootHooks, composeRootInjects, defineResource, defineRoot, defineRoute, defineRoutedContribution } from "@agimon-ai/po-core/extensionFile";
|
|
10
11
|
import { BACKGROUND_CONTEXT, getOrThrow, nodeHost, removePath, requirePoFs, withAbortSignal } from "@agimon-ai/po-core/platform";
|
|
@@ -71,7 +72,8 @@ var root_server_default = defineRoot(async ({ agent, context: root, signal }) =>
|
|
|
71
72
|
projection: (await stageMcpResources(execution.repoRoot, plugins, {
|
|
72
73
|
enabled: true,
|
|
73
74
|
temporaryDirectory: directory,
|
|
74
|
-
mcpAllowlist: await resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io)
|
|
75
|
+
mcpAllowlist: await resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io),
|
|
76
|
+
userMcpConfigPath: `${poHomeDirectory(home, execution.environment)}/${PO_USER_MCP_CONFIG_FILE}`
|
|
75
77
|
})).mcpProjection,
|
|
76
78
|
cleanup: () => removePath(fs, directory, BACKGROUND_CONTEXT)
|
|
77
79
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.mjs","names":["rootSession","apiRoute","commandDomains","resourceDomains","resourcePoAuthorDomain"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/domainServerResources.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/extensions/workspaces/sessions/(backend)/api/domains/route.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/domainServerCommand.ts","../../src/extensions/workspaces/sessions/(backend)/command/domains.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/domains.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/poAuthorDomain.server.ts","../../generated/server.ts"],"sourcesContent":["import { listDomainNamesAsync, resolvePluginEntriesAsync } from '@agimon-ai/po-config/domains';\nimport type { PoHeadlessExecutionContext, PoHeadlessResource } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, getOrThrow, nodeHost, removePath, type FileSystem } from '@agimon-ai/po-core/platform';\n\nimport { materializePluginEntries } from '../../../../../services/pluginMaterializer';\nimport { collectResources } from '../../../../../services/resourceCollector';\n\ntype IoContext = Parameters<FileSystem['readTextFile']>[1];\n\n/** Retain valid domains behind selection conditions; a broken neighbor must not prevent startup. */\nexport async function domainServerResources(\n context: PoHeadlessExecutionContext,\n fs: FileSystem,\n io: IoContext,\n): Promise<PoHeadlessResource[]> {\n const resources: PoHeadlessResource[] = [];\n const home = context.environment.HOME ?? nodeHost.homeDirectory();\n for (const domain of await listDomainNamesAsync(fs, context.repoRoot, io, home)) {\n // Own staging here so collection failures also release their temporary files.\n const temporaryDirectory = getOrThrow(await fs.createTempDir('po-domain-', io));\n try {\n const plugins = await materializePluginEntries(\n await resolvePluginEntriesAsync(fs, context.repoRoot, [domain], [], io, home),\n );\n const collected = await collectResources(context.repoRoot, plugins, {\n agents: false,\n mcp: false,\n sharedSkills: false,\n temporaryDirectory,\n });\n for (const skill of collected.skillSources) {\n resources.push({\n name: skill.name,\n description: skill.description,\n path: skill.path,\n kind: 'skill',\n when: { domain, attribution: { kind: 'domain', mode: domain } },\n read: async () => getOrThrow(await fs.readTextFile(skill.path, BACKGROUND_CONTEXT)),\n });\n }\n } catch (error) {\n await context.client.notify({\n title: `Po domain ${domain} unavailable`,\n body: error instanceof Error ? error.message : String(error),\n level: 'warning',\n });\n } finally {\n await removePath(fs, temporaryDirectory, BACKGROUND_CONTEXT);\n }\n }\n return resources;\n}\n","import { resolvePluginEntriesAsync } from '@agimon-ai/po-config/domains';\nimport { loadHarnessStateAsync } from '@agimon-ai/po-config/harnessStore';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport {\n PO_MCP_PROJECTION_RESOLVER_SERVICE,\n type PoMcpProjectionResolverService,\n} from '@agimon-ai/po-core/mcpProjection';\nimport {\n BACKGROUND_CONTEXT,\n getOrThrow,\n nodeHost,\n removePath,\n requirePoFs,\n withAbortSignal,\n} from '@agimon-ai/po-core/platform';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { resolveMcpAllowlistAsync } from '../../../../services/mcpFilter';\nimport { materializePluginEntries } from '../../../../services/pluginMaterializer';\nimport { stageMcpResources } from '../../../../services/resourceCollector';\nimport { domainServerResources } from './_lib/domainServerResources';\nimport type { DomainServerScope } from './_lib/serverScope';\n\nexport default defineRoot(async ({ agent, context: root, signal }: PoServerPluginContext) => {\n const services: Array<(cordis: Context) => void> = [];\n if (!agent) return { value: { resources: [] } satisfies DomainServerScope, services };\n const fs = requirePoFs(root);\n const io = withAbortSignal(signal, BACKGROUND_CONTEXT);\n const execution = agent.context;\n const home = execution.environment.HOME ?? nodeHost.homeDirectory();\n const resolver: PoMcpProjectionResolverService = {\n async resolve(domains) {\n const { state } = await loadHarnessStateAsync(fs, { ...execution.environment }, io);\n const directory = getOrThrow(await fs.createTempDir('po-domain-mcp-', io));\n try {\n const plugins = await materializePluginEntries(\n await resolvePluginEntriesAsync(fs, execution.repoRoot, [...domains], [...state.pluginDirectories], io, home),\n );\n const staged = await stageMcpResources(execution.repoRoot, plugins, {\n enabled: true,\n temporaryDirectory: directory,\n mcpAllowlist: await resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io),\n });\n return {\n projection: staged.mcpProjection,\n cleanup: () => removePath(fs, directory, BACKGROUND_CONTEXT),\n };\n } catch (error) {\n await removePath(fs, directory, BACKGROUND_CONTEXT);\n throw error;\n }\n },\n };\n services.push((cordis) => {\n cordis.plugin((provider) => {\n provider.provide(PO_MCP_PROJECTION_RESOLVER_SERVICE, resolver);\n });\n });\n return {\n value: { resources: await domainServerResources(agent.context, fs, io) } satisfies DomainServerScope,\n services,\n };\n});\n","import { defineRoute } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineRoute(({ agent }: PoServerPluginContext) => ({\n basePath: 'domains',\n start: () => ({\n fetch(request: Request) {\n if (new URL(request.url).pathname !== '/current') return Response.json({ error: 'Not found' }, { status: 404 });\n if (request.method !== 'GET')\n return Response.json({ error: 'Method not allowed' }, { status: 405, headers: { Allow: 'GET' } });\n if (!agent) return Response.json({ error: 'Session agent unavailable' }, { status: 404 });\n const selection = agent.context.selection;\n return Response.json({ domains: selection.domains });\n },\n close() {},\n }),\n}));\n","import { listDomainNamesAsync } from '@agimon-ai/po-config/domains';\nimport { type PoHeadlessCommand, type PoHeadlessHostService } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, type FileSystem } from '@agimon-ai/po-core/platform';\nimport { PO_RESOURCE_CATALOG_ENTRY_TYPE, type ResourceCatalogProjection } from '@agimon-ai/po-core/skills';\n\nimport {\n DOMAIN_COMMAND,\n domainToggleOptions,\n normalizeDomainNames,\n pickerTitle,\n splitDomains,\n toggledDomains,\n toggleOptionDomain,\n} from '../../../../../services/domainText';\n\nconst DOMAIN_SELECTION_KIND = 'po-domains-selection';\nconst DOMAIN_SELECTION_VERSION = 1;\n\n/** Full-set web replies share the string transport with legacy single-toggle labels. */\nfunction domainSelectionReply(answer: string): string[] | null {\n if (!answer.trimStart().startsWith('{')) return null;\n const reply: unknown = JSON.parse(answer);\n if (\n typeof reply !== 'object' ||\n reply === null ||\n !('kind' in reply) ||\n reply.kind !== DOMAIN_SELECTION_KIND ||\n !('version' in reply) ||\n reply.version !== DOMAIN_SELECTION_VERSION ||\n !('domains' in reply) ||\n !Array.isArray(reply.domains) ||\n !reply.domains.every((name: unknown): name is string => typeof name === 'string')\n ) {\n throw new Error('Invalid domains selection reply');\n }\n return reply.domains;\n}\n\nexport function createDomainServerCommand(host: PoHeadlessHostService, fs: FileSystem): PoHeadlessCommand {\n return {\n name: DOMAIN_COMMAND,\n description: 'Show or change the active Po domains.',\n async execute(args, execution) {\n const available = await listDomainNamesAsync(fs, execution.repoRoot, BACKGROUND_CONTEXT);\n let requested = splitDomains(args);\n let fullSet = false;\n if (requested.length === 0) {\n const listing = {\n active: [...execution.selection.domains],\n effective: [...execution.selection.domains],\n available,\n };\n const selected = await execution.client.request({\n kind: 'select',\n title: pickerTitle(listing),\n options: domainToggleOptions(listing).map((label) => ({ label, value: label })),\n });\n if (typeof selected !== 'string' || !selected) return;\n const domains = domainSelectionReply(selected);\n fullSet = domains !== null;\n requested = domains ?? toggledDomains(listing.effective, toggleOptionDomain(selected));\n }\n requested = normalizeDomainNames(requested);\n const unknown = requested.filter((name) => !available.includes(name));\n if (unknown.length > 0) throw new Error(`Unknown domain: ${unknown.join(', ')}`);\n if (fullSet) {\n const wanted = new Set(requested);\n const current = new Set(execution.selection.domains);\n requested = [\n ...execution.selection.domains.filter((name) => wanted.has(name)),\n ...available.filter((name) => wanted.has(name) && !current.has(name)),\n ];\n }\n if (\n requested.length === execution.selection.domains.length &&\n requested.every((name, index) => name === execution.selection.domains[index])\n ) {\n return;\n }\n await host.changeSelection({ axis: 'domains', domains: requested });\n // The web composer caches get_commands for `$` completion. Signal only after\n // the headless host has reconciled commands so the re-read sees this selection.\n const projection: ResourceCatalogProjection = { version: 1, revision: Date.now() };\n await execution.session.appendCustomEntry(PO_RESOURCE_CATALOG_ENTRY_TYPE, projection);\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport { requirePoFs } from '@agimon-ai/po-core/platform';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport { createDomainServerCommand } from '../_lib/domainServerCommand';\nexport default defineRoutedContribution(\n ({ agent, context }: PoServerPluginContext) =>\n agent ? createDomainServerCommand(agent, requirePoFs(context)) : undefined,\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport type { DomainServerScope } from '../_lib/serverScope';\n\nexport default defineRoutedContribution(\n (context: WithRoot<PoServerPluginContext, DomainServerScope>) => context.root.resources,\n { cardinality: 'many' },\n);\n","import { defineResource } from '@agimon-ai/po-core/extensionFile';\nimport { packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineResource({\n name: 'po-author-domain',\n description:\n 'Configure Po plugin catalogs and domain resource selections in domains.yaml. Use when creating or editing .po/domains.yaml or ~/.po/domains.yaml, choosing local, Git, or npm plugins, filtering plugin resources, setting aliases or defaults, or verifying resolved domain composition.',\n when: { state: { 'minor-mode': 'help' }, attribution: { kind: 'minor' as const, mode: 'help' } },\n kind: 'skill' as const,\n path: packageResourcePath(import.meta.url, 'src/prompts/po-author-domain/SKILL.md'),\n read: () => readPackageResource(import.meta.url, 'src/prompts/po-author-domain/SKILL.md'),\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverPlugin';\nimport { composeRootHooks, composeRootInjects } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport apiRoute from '../src/extensions/workspaces/sessions/(backend)/api/domains/route.server';\nimport commandDomains from '../src/extensions/workspaces/sessions/(backend)/command/domains.server';\nimport resourceDomains from '../src/extensions/workspaces/sessions/(backend)/resource/domains.server';\nimport resourcePoAuthorDomain from '../src/extensions/workspaces/sessions/(backend)/resource/poAuthorDomain.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n return Array.isArray(resolved) ? resolved : [resolved as T];\n};\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-domain',\n providerOverrides: composeServerProviderOverrides(rootSession),\n injects: composeRootInjects({ session: [rootSession] }),\n session: async (context) => {\n const scopeSession = await context.scopeRoot('session', rootSession, context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get api(): PoServerSessionPlugin['api'] { return [at(apiRoute, contextSession)]; },\n get commands(): PoServerSessionPlugin['commands'] { return defined([via({ name: 'domains' }, at(commandDomains, contextSession))]); },\n get resources(): PoServerSessionPlugin['resources'] { return [...many(resourceDomains, contextSession), at(resourcePoAuthorDomain, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): PoServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default serverPlugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["rootSession","apiRoute","commandDomains","resourceDomains","resourcePoAuthorDomain"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/domainServerResources.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/extensions/workspaces/sessions/(backend)/api/domains/route.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/domainServerCommand.ts","../../src/extensions/workspaces/sessions/(backend)/command/domains.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/domains.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/poAuthorDomain.server.ts","../../generated/server.ts"],"sourcesContent":["import { listDomainNamesAsync, resolvePluginEntriesAsync } from '@agimon-ai/po-config/domains';\nimport type { PoHeadlessExecutionContext, PoHeadlessResource } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, getOrThrow, nodeHost, removePath, type FileSystem } from '@agimon-ai/po-core/platform';\n\nimport { materializePluginEntries } from '../../../../../services/pluginMaterializer';\nimport { collectResources } from '../../../../../services/resourceCollector';\n\ntype IoContext = Parameters<FileSystem['readTextFile']>[1];\n\n/** Retain valid domains behind selection conditions; a broken neighbor must not prevent startup. */\nexport async function domainServerResources(\n context: PoHeadlessExecutionContext,\n fs: FileSystem,\n io: IoContext,\n): Promise<PoHeadlessResource[]> {\n const resources: PoHeadlessResource[] = [];\n const home = context.environment.HOME ?? nodeHost.homeDirectory();\n for (const domain of await listDomainNamesAsync(fs, context.repoRoot, io, home)) {\n // Own staging here so collection failures also release their temporary files.\n const temporaryDirectory = getOrThrow(await fs.createTempDir('po-domain-', io));\n try {\n const plugins = await materializePluginEntries(\n await resolvePluginEntriesAsync(fs, context.repoRoot, [domain], [], io, home),\n );\n const collected = await collectResources(context.repoRoot, plugins, {\n agents: false,\n mcp: false,\n sharedSkills: false,\n temporaryDirectory,\n });\n for (const skill of collected.skillSources) {\n resources.push({\n name: skill.name,\n description: skill.description,\n path: skill.path,\n kind: 'skill',\n when: { domain, attribution: { kind: 'domain', mode: domain } },\n read: async () => getOrThrow(await fs.readTextFile(skill.path, BACKGROUND_CONTEXT)),\n });\n }\n } catch (error) {\n await context.client.notify({\n title: `Po domain ${domain} unavailable`,\n body: error instanceof Error ? error.message : String(error),\n level: 'warning',\n });\n } finally {\n await removePath(fs, temporaryDirectory, BACKGROUND_CONTEXT);\n }\n }\n return resources;\n}\n","import { resolvePluginEntriesAsync } from '@agimon-ai/po-config/domains';\nimport { loadHarnessStateAsync } from '@agimon-ai/po-config/harnessStore';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport {\n PO_MCP_PROJECTION_RESOLVER_SERVICE,\n PO_USER_MCP_CONFIG_FILE,\n type PoMcpProjectionResolverService,\n} from '@agimon-ai/po-core/mcpProjection';\nimport { poHomeDirectory } from '@agimon-ai/po-core/piSettings';\nimport {\n BACKGROUND_CONTEXT,\n getOrThrow,\n nodeHost,\n removePath,\n requirePoFs,\n withAbortSignal,\n} from '@agimon-ai/po-core/platform';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { resolveMcpAllowlistAsync } from '../../../../services/mcpFilter';\nimport { materializePluginEntries } from '../../../../services/pluginMaterializer';\nimport { stageMcpResources } from '../../../../services/resourceCollector';\nimport { domainServerResources } from './_lib/domainServerResources';\nimport type { DomainServerScope } from './_lib/serverScope';\n\nexport default defineRoot(async ({ agent, context: root, signal }: PoServerPluginContext) => {\n const services: Array<(cordis: Context) => void> = [];\n if (!agent) return { value: { resources: [] } satisfies DomainServerScope, services };\n const fs = requirePoFs(root);\n const io = withAbortSignal(signal, BACKGROUND_CONTEXT);\n const execution = agent.context;\n const home = execution.environment.HOME ?? nodeHost.homeDirectory();\n const resolver: PoMcpProjectionResolverService = {\n async resolve(domains) {\n const { state } = await loadHarnessStateAsync(fs, { ...execution.environment }, io);\n const directory = getOrThrow(await fs.createTempDir('po-domain-mcp-', io));\n try {\n const plugins = await materializePluginEntries(\n await resolvePluginEntriesAsync(fs, execution.repoRoot, [...domains], [...state.pluginDirectories], io, home),\n );\n const staged = await stageMcpResources(execution.repoRoot, plugins, {\n enabled: true,\n temporaryDirectory: directory,\n mcpAllowlist: await resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io),\n userMcpConfigPath: `${poHomeDirectory(home, execution.environment)}/${PO_USER_MCP_CONFIG_FILE}`,\n });\n return {\n projection: staged.mcpProjection,\n cleanup: () => removePath(fs, directory, BACKGROUND_CONTEXT),\n };\n } catch (error) {\n await removePath(fs, directory, BACKGROUND_CONTEXT);\n throw error;\n }\n },\n };\n services.push((cordis) => {\n cordis.plugin((provider) => {\n provider.provide(PO_MCP_PROJECTION_RESOLVER_SERVICE, resolver);\n });\n });\n return {\n value: { resources: await domainServerResources(agent.context, fs, io) } satisfies DomainServerScope,\n services,\n };\n});\n","import { defineRoute } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineRoute(({ agent }: PoServerPluginContext) => ({\n basePath: 'domains',\n start: () => ({\n fetch(request: Request) {\n if (new URL(request.url).pathname !== '/current') return Response.json({ error: 'Not found' }, { status: 404 });\n if (request.method !== 'GET')\n return Response.json({ error: 'Method not allowed' }, { status: 405, headers: { Allow: 'GET' } });\n if (!agent) return Response.json({ error: 'Session agent unavailable' }, { status: 404 });\n const selection = agent.context.selection;\n return Response.json({ domains: selection.domains });\n },\n close() {},\n }),\n}));\n","import { listDomainNamesAsync } from '@agimon-ai/po-config/domains';\nimport { type PoHeadlessCommand, type PoHeadlessHostService } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, type FileSystem } from '@agimon-ai/po-core/platform';\nimport { PO_RESOURCE_CATALOG_ENTRY_TYPE, type ResourceCatalogProjection } from '@agimon-ai/po-core/skills';\n\nimport {\n DOMAIN_COMMAND,\n domainToggleOptions,\n normalizeDomainNames,\n pickerTitle,\n splitDomains,\n toggledDomains,\n toggleOptionDomain,\n} from '../../../../../services/domainText';\n\nconst DOMAIN_SELECTION_KIND = 'po-domains-selection';\nconst DOMAIN_SELECTION_VERSION = 1;\n\n/** Full-set web replies share the string transport with legacy single-toggle labels. */\nfunction domainSelectionReply(answer: string): string[] | null {\n if (!answer.trimStart().startsWith('{')) return null;\n const reply: unknown = JSON.parse(answer);\n if (\n typeof reply !== 'object' ||\n reply === null ||\n !('kind' in reply) ||\n reply.kind !== DOMAIN_SELECTION_KIND ||\n !('version' in reply) ||\n reply.version !== DOMAIN_SELECTION_VERSION ||\n !('domains' in reply) ||\n !Array.isArray(reply.domains) ||\n !reply.domains.every((name: unknown): name is string => typeof name === 'string')\n ) {\n throw new Error('Invalid domains selection reply');\n }\n return reply.domains;\n}\n\nexport function createDomainServerCommand(host: PoHeadlessHostService, fs: FileSystem): PoHeadlessCommand {\n return {\n name: DOMAIN_COMMAND,\n description: 'Show or change the active Po domains.',\n async execute(args, execution) {\n const available = await listDomainNamesAsync(fs, execution.repoRoot, BACKGROUND_CONTEXT);\n let requested = splitDomains(args);\n let fullSet = false;\n if (requested.length === 0) {\n const listing = {\n active: [...execution.selection.domains],\n effective: [...execution.selection.domains],\n available,\n };\n const selected = await execution.client.request({\n kind: 'select',\n title: pickerTitle(listing),\n options: domainToggleOptions(listing).map((label) => ({ label, value: label })),\n });\n if (typeof selected !== 'string' || !selected) return;\n const domains = domainSelectionReply(selected);\n fullSet = domains !== null;\n requested = domains ?? toggledDomains(listing.effective, toggleOptionDomain(selected));\n }\n requested = normalizeDomainNames(requested);\n const unknown = requested.filter((name) => !available.includes(name));\n if (unknown.length > 0) throw new Error(`Unknown domain: ${unknown.join(', ')}`);\n if (fullSet) {\n const wanted = new Set(requested);\n const current = new Set(execution.selection.domains);\n requested = [\n ...execution.selection.domains.filter((name) => wanted.has(name)),\n ...available.filter((name) => wanted.has(name) && !current.has(name)),\n ];\n }\n if (\n requested.length === execution.selection.domains.length &&\n requested.every((name, index) => name === execution.selection.domains[index])\n ) {\n return;\n }\n await host.changeSelection({ axis: 'domains', domains: requested });\n // The web composer caches get_commands for `$` completion. Signal only after\n // the headless host has reconciled commands so the re-read sees this selection.\n const projection: ResourceCatalogProjection = { version: 1, revision: Date.now() };\n await execution.session.appendCustomEntry(PO_RESOURCE_CATALOG_ENTRY_TYPE, projection);\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport { requirePoFs } from '@agimon-ai/po-core/platform';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport { createDomainServerCommand } from '../_lib/domainServerCommand';\nexport default defineRoutedContribution(\n ({ agent, context }: PoServerPluginContext) =>\n agent ? createDomainServerCommand(agent, requirePoFs(context)) : undefined,\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport type { DomainServerScope } from '../_lib/serverScope';\n\nexport default defineRoutedContribution(\n (context: WithRoot<PoServerPluginContext, DomainServerScope>) => context.root.resources,\n { cardinality: 'many' },\n);\n","import { defineResource } from '@agimon-ai/po-core/extensionFile';\nimport { packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineResource({\n name: 'po-author-domain',\n description:\n 'Configure Po plugin catalogs and domain resource selections in domains.yaml. Use when creating or editing .po/domains.yaml or ~/.po/domains.yaml, choosing local, Git, or npm plugins, filtering plugin resources, setting aliases or defaults, or verifying resolved domain composition.',\n when: { state: { 'minor-mode': 'help' }, attribution: { kind: 'minor' as const, mode: 'help' } },\n kind: 'skill' as const,\n path: packageResourcePath(import.meta.url, 'src/prompts/po-author-domain/SKILL.md'),\n read: () => readPackageResource(import.meta.url, 'src/prompts/po-author-domain/SKILL.md'),\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverPlugin';\nimport { composeRootHooks, composeRootInjects } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport apiRoute from '../src/extensions/workspaces/sessions/(backend)/api/domains/route.server';\nimport commandDomains from '../src/extensions/workspaces/sessions/(backend)/command/domains.server';\nimport resourceDomains from '../src/extensions/workspaces/sessions/(backend)/resource/domains.server';\nimport resourcePoAuthorDomain from '../src/extensions/workspaces/sessions/(backend)/resource/poAuthorDomain.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n return Array.isArray(resolved) ? resolved : [resolved as T];\n};\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-domain',\n providerOverrides: composeServerProviderOverrides(rootSession),\n injects: composeRootInjects({ session: [rootSession] }),\n session: async (context) => {\n const scopeSession = await context.scopeRoot('session', rootSession, context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get api(): PoServerSessionPlugin['api'] { return [at(apiRoute, contextSession)]; },\n get commands(): PoServerSessionPlugin['commands'] { return defined([via({ name: 'domains' }, at(commandDomains, contextSession))]); },\n get resources(): PoServerSessionPlugin['resources'] { return [...many(resourceDomains, contextSession), at(resourcePoAuthorDomain, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): PoServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default serverPlugin;\n"],"mappings":"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"}
|
package/dist/mcp.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as JsonObject } from "./resources-
|
|
1
|
+
import { r as JsonObject } from "./resources-BCUqYBIH.mjs";
|
|
2
2
|
import { DomainMcpAllowlist } from "@agimon-ai/po-config/domains";
|
|
3
3
|
import { AgentPluginMcpConfigSource, NormalizeAgentPluginMcpOptions, NormalizedAgentPluginMcpSource, normalizeAgentPluginMcpSource } from "@agimon-ai/po-config/agentPluginMcp";
|
|
4
4
|
import { PoMcpSessionAllowlist } from "@agimon-ai/po-core/mcpSession";
|
|
@@ -5,6 +5,8 @@ let node_fs = require("node:fs");
|
|
|
5
5
|
node_fs = require_rolldown_runtime.__toESM(node_fs, 1);
|
|
6
6
|
let node_path = require("node:path");
|
|
7
7
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
8
|
+
let _agimon_ai_po_config_config = require("@agimon-ai/po-config/config");
|
|
9
|
+
let _agimon_ai_po_core_mcpProjection = require("@agimon-ai/po-core/mcpProjection");
|
|
8
10
|
let yaml = require("yaml");
|
|
9
11
|
let _agimon_ai_po_core_piSettings = require("@agimon-ai/po-core/piSettings");
|
|
10
12
|
let node_crypto = require("node:crypto");
|
|
@@ -12,8 +14,6 @@ node_crypto = require_rolldown_runtime.__toESM(node_crypto, 1);
|
|
|
12
14
|
let node_os = require("node:os");
|
|
13
15
|
node_os = require_rolldown_runtime.__toESM(node_os, 1);
|
|
14
16
|
let _agimon_ai_po_config_agentPluginMcp = require("@agimon-ai/po-config/agentPluginMcp");
|
|
15
|
-
let _agimon_ai_po_config_config = require("@agimon-ai/po-config/config");
|
|
16
|
-
let _agimon_ai_po_core_mcpProjection = require("@agimon-ai/po-core/mcpProjection");
|
|
17
17
|
//#region src/services/skillCacheLocation/syncLabel.ts
|
|
18
18
|
const LABEL_MAX_LENGTH = 48;
|
|
19
19
|
/** Keeps a repository or worktree name usable as one path segment. */
|
|
@@ -157,7 +157,6 @@ const DISPATCHER_TOOLS = [
|
|
|
157
157
|
];
|
|
158
158
|
const SKILL_MANIFEST_VERSION = 4;
|
|
159
159
|
const SKILL_MANIFEST_HASH_LENGTH = 16;
|
|
160
|
-
const AGENT_PLUGIN_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
|
|
161
160
|
const PLUGIN_DATA_DIRECTORY = "plugin-data";
|
|
162
161
|
function isJsonObject(value) {
|
|
163
162
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -173,67 +172,6 @@ function canonicalJson(value) {
|
|
|
173
172
|
function projectionFingerprint(input) {
|
|
174
173
|
return (0, node_crypto.createHash)("sha256").update(canonicalJson(input)).digest("hex");
|
|
175
174
|
}
|
|
176
|
-
function stablePluginIdentity(entry) {
|
|
177
|
-
const source = entry.source;
|
|
178
|
-
const identity = source?.type === "git" ? [
|
|
179
|
-
"git",
|
|
180
|
-
source.url,
|
|
181
|
-
source.path ?? ""
|
|
182
|
-
] : source?.type === "npm" ? [
|
|
183
|
-
"npm",
|
|
184
|
-
source.registry ?? "",
|
|
185
|
-
source.package
|
|
186
|
-
] : ["local", node_fs.default.realpathSync(entry.directory)];
|
|
187
|
-
return (0, node_crypto.createHash)("sha256").update(JSON.stringify(identity)).digest("hex");
|
|
188
|
-
}
|
|
189
|
-
function rootAgentPluginSchema(entry) {
|
|
190
|
-
const manifestPath = node_path.default.join(entry.directory, "plugin.json");
|
|
191
|
-
if (entry.manifest?.path === manifestPath && entry.manifest.agentPluginSchema === AGENT_PLUGIN_SCHEMA) return AGENT_PLUGIN_SCHEMA;
|
|
192
|
-
try {
|
|
193
|
-
const stat = node_fs.default.lstatSync(manifestPath);
|
|
194
|
-
if (stat.isSymbolicLink() || !stat.isFile()) return void 0;
|
|
195
|
-
const parsed = JSON.parse(node_fs.default.readFileSync(manifestPath, "utf8"));
|
|
196
|
-
return isJsonObject(parsed) && parsed.$schema === AGENT_PLUGIN_SCHEMA ? AGENT_PLUGIN_SCHEMA : void 0;
|
|
197
|
-
} catch {
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
async function pluginMcpSource(entry, pluginDataRoot) {
|
|
202
|
-
if (entry.mcp === false) return void 0;
|
|
203
|
-
const pluginRoot = node_fs.default.realpathSync(entry.directory);
|
|
204
|
-
const agentPlugin = rootAgentPluginSchema(entry) === AGENT_PLUGIN_SCHEMA;
|
|
205
|
-
const configPath = node_path.default.join(pluginRoot, agentPlugin ? "mcp.json" : ".mcp.json");
|
|
206
|
-
let stat;
|
|
207
|
-
try {
|
|
208
|
-
stat = await node_fs.default.promises.lstat(configPath);
|
|
209
|
-
} catch (error) {
|
|
210
|
-
if (error.code === "ENOENT") return void 0;
|
|
211
|
-
throw error;
|
|
212
|
-
}
|
|
213
|
-
if (!stat.isFile() || stat.isSymbolicLink()) return void 0;
|
|
214
|
-
const content = await node_fs.default.promises.readFile(configPath);
|
|
215
|
-
const contentDigest = (0, node_crypto.createHash)("sha256").update(content).digest("hex");
|
|
216
|
-
const pluginId = stablePluginIdentity(entry);
|
|
217
|
-
const sourceId = `plugin:${pluginId}`;
|
|
218
|
-
if (!agentPlugin) return {
|
|
219
|
-
sourceId,
|
|
220
|
-
owner: "plugin",
|
|
221
|
-
format: "native",
|
|
222
|
-
configPath,
|
|
223
|
-
contentDigest
|
|
224
|
-
};
|
|
225
|
-
return {
|
|
226
|
-
sourceId,
|
|
227
|
-
owner: "plugin",
|
|
228
|
-
format: "agent-plugin-v1",
|
|
229
|
-
configPath,
|
|
230
|
-
contentDigest,
|
|
231
|
-
pluginId,
|
|
232
|
-
pluginRoot,
|
|
233
|
-
pluginDataDirectory: node_path.default.join(pluginDataRoot, pluginId),
|
|
234
|
-
mcpSchemaUrl: _agimon_ai_po_core_mcpProjection.AGENT_PLUGIN_MCP_SCHEMA_URL
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
175
|
function skillManifestPath(repoRoot, skillRoot, discovery, cacheDirectory) {
|
|
238
176
|
const key = (0, node_crypto.createHash)("sha256").update(`${node_path.default.resolve(skillRoot)}\0${discovery}`).digest("hex").slice(0, SKILL_MANIFEST_HASH_LENGTH);
|
|
239
177
|
return node_path.default.join(cacheDirectory ?? resolveSkillCacheDirectory(repoRoot), `${key}.json`);
|
|
@@ -598,6 +536,7 @@ async function mergeProjectedMcpConfigs(sources, stagingDirectory) {
|
|
|
598
536
|
const merged = { mcpServers: {} };
|
|
599
537
|
const servers = merged.mcpServers;
|
|
600
538
|
const origins = /* @__PURE__ */ new Map();
|
|
539
|
+
const userOwned = /* @__PURE__ */ new Set();
|
|
601
540
|
for (const source of sources) {
|
|
602
541
|
let config;
|
|
603
542
|
if (source.format === "agent-plugin-v1") config = (0, _agimon_ai_po_config_agentPluginMcp.normalizeAgentPluginMcpSource)(source, {
|
|
@@ -617,9 +556,11 @@ async function mergeProjectedMcpConfigs(sources, stagingDirectory) {
|
|
|
617
556
|
const incoming = config.mcpServers ?? {};
|
|
618
557
|
for (const [name, definition] of Object.entries(incoming)) {
|
|
619
558
|
const previous = servers[name];
|
|
620
|
-
if (previous && JSON.stringify(previous) !== JSON.stringify(definition)) throw new Error(`Conflicting MCP server "${name}": ${origins.get(name)} and ${source.configPath}`);
|
|
559
|
+
if (previous && !userOwned.has(name) && JSON.stringify(previous) !== JSON.stringify(definition)) throw new Error(`Conflicting MCP server "${name}": ${origins.get(name)} and ${source.configPath}`);
|
|
621
560
|
servers[name] = definition;
|
|
622
561
|
origins.set(name, source.configPath);
|
|
562
|
+
if (source.owner === "user") userOwned.add(name);
|
|
563
|
+
else userOwned.delete(name);
|
|
623
564
|
}
|
|
624
565
|
}
|
|
625
566
|
return merged;
|
|
@@ -645,6 +586,16 @@ async function stageMcpResources(repoRoot, plugins, options) {
|
|
|
645
586
|
recursive: true
|
|
646
587
|
});
|
|
647
588
|
await node_fs.default.promises.chmod(options.temporaryDirectory, 448);
|
|
589
|
+
if (options.enabled && options.userMcpConfigPath && await pathExists(options.userMcpConfigPath)) {
|
|
590
|
+
const content = await node_fs.default.promises.readFile(options.userMcpConfigPath);
|
|
591
|
+
mcpSources.push({
|
|
592
|
+
sourceId: "user:mcp.json",
|
|
593
|
+
owner: "user",
|
|
594
|
+
format: "native",
|
|
595
|
+
configPath: options.userMcpConfigPath,
|
|
596
|
+
contentDigest: (0, node_crypto.createHash)("sha256").update(content).digest("hex")
|
|
597
|
+
});
|
|
598
|
+
}
|
|
648
599
|
if (options.enabled && await pathExists(repositoryMcpPath)) {
|
|
649
600
|
const content = await node_fs.default.promises.readFile(repositoryMcpPath);
|
|
650
601
|
mcpSources.push({
|
|
@@ -656,7 +607,7 @@ async function stageMcpResources(repoRoot, plugins, options) {
|
|
|
656
607
|
});
|
|
657
608
|
}
|
|
658
609
|
if (options.enabled) for (const entry of pluginEntries) {
|
|
659
|
-
const source = await pluginMcpSource(entry, pluginDataRoot);
|
|
610
|
+
const source = await (0, _agimon_ai_po_config_agentPluginMcp.pluginMcpSource)(entry, pluginDataRoot);
|
|
660
611
|
if (!source) continue;
|
|
661
612
|
mcpSources.push(source);
|
|
662
613
|
pluginMcpSources.push(source);
|
|
@@ -756,7 +707,8 @@ async function collectResources(repoRoot, plugins, options) {
|
|
|
756
707
|
enabled: options.mcp,
|
|
757
708
|
temporaryDirectory,
|
|
758
709
|
...options.mcpAllowlist ? { mcpAllowlist: options.mcpAllowlist } : {},
|
|
759
|
-
...options.pluginDataRoot ? { pluginDataRoot: options.pluginDataRoot } : {}
|
|
710
|
+
...options.pluginDataRoot ? { pluginDataRoot: options.pluginDataRoot } : {},
|
|
711
|
+
...options.userMcpConfigPath ? { userMcpConfigPath: options.userMcpConfigPath } : {}
|
|
760
712
|
});
|
|
761
713
|
return {
|
|
762
714
|
temporaryDirectory,
|
|
@@ -838,4 +790,4 @@ Object.defineProperty(exports, "stageMcpResources", {
|
|
|
838
790
|
}
|
|
839
791
|
});
|
|
840
792
|
|
|
841
|
-
//# sourceMappingURL=resourceCollector-
|
|
793
|
+
//# sourceMappingURL=resourceCollector-DRvsbqfZ.cjs.map
|