@agimon-ai/po-domain 0.0.0-alpha.2 → 0.0.0-alpha.3
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 +2 -2
- package/dist/apply.mjs +2 -2
- package/dist/extensions/server.cjs +45 -55
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.mjs +47 -54
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/mcp.cjs +1 -1
- package/dist/mcp.d.mts +10 -9
- package/dist/mcp.d.mts.map +1 -1
- package/dist/mcp.mjs +1 -1
- package/dist/{mcpFilter-Cf-czy8O.mjs → mcpFilter-CKUbKmxz.mjs} +41 -28
- package/dist/mcpFilter-CKUbKmxz.mjs.map +1 -0
- package/dist/{mcpFilter-CZNmU_VF.cjs → mcpFilter-CghXZ2K-.cjs} +45 -26
- package/dist/mcpFilter-CghXZ2K-.cjs.map +1 -0
- package/dist/plugins.mjs +1 -2
- package/dist/{resourceCollector-Cu-lp5hJ.cjs → resourceCollector-DGSyEhYd.cjs} +66 -62
- package/dist/resourceCollector-DGSyEhYd.cjs.map +1 -0
- package/dist/{resourceCollector-CRY5cmeY.mjs → resourceCollector-DK9AJg42.mjs} +67 -63
- package/dist/resourceCollector-DK9AJg42.mjs.map +1 -0
- package/dist/resources.cjs +1 -1
- package/dist/resources.d.mts +7 -3
- package/dist/resources.d.mts.map +1 -1
- package/dist/resources.mjs +1 -2
- package/package.json +13 -13
- package/dist/mcpFilter-CZNmU_VF.cjs.map +0 -1
- package/dist/mcpFilter-Cf-czy8O.mjs.map +0 -1
- package/dist/resourceCollector-CRY5cmeY.mjs.map +0 -1
- package/dist/resourceCollector-Cu-lp5hJ.cjs.map +0 -1
package/dist/apply.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
|
|
3
|
-
const require_mcpFilter = require("./mcpFilter-
|
|
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-DGSyEhYd.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");
|
package/dist/apply.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { r as resolveMcpAllowlist } from "./mcpFilter-CKUbKmxz.mjs";
|
|
2
2
|
import { t as materializePluginEntries } from "./pluginMaterializer-D9-oDF-b.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { t as collectResources } from "./resourceCollector-DK9AJg42.mjs";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { resolvePluginEntries, resolveSharedSkills } from "@agimon-ai/po-config/domains";
|
|
@@ -2,31 +2,26 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const
|
|
6
|
-
const require_mcpFilter = require("../mcpFilter-CZNmU_VF.cjs");
|
|
5
|
+
const require_mcpFilter = require("../mcpFilter-CghXZ2K-.cjs");
|
|
7
6
|
const require_pluginMaterializer = require("../pluginMaterializer-C8IZ1PSY.cjs");
|
|
8
|
-
const require_resourceCollector = require("../resourceCollector-
|
|
7
|
+
const require_resourceCollector = require("../resourceCollector-DGSyEhYd.cjs");
|
|
9
8
|
const require_domainText = require("../domainText-UIRIz6-_.cjs");
|
|
10
|
-
let node_path = require("node:path");
|
|
11
|
-
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
12
9
|
let _agimon_ai_po_config_domains = require("@agimon-ai/po-config/domains");
|
|
13
10
|
let _agimon_ai_po_config_harnessStore = require("@agimon-ai/po-config/harnessStore");
|
|
14
|
-
let node_os = require("node:os");
|
|
15
|
-
node_os = require_rolldown_runtime.__toESM(node_os, 1);
|
|
16
11
|
let _agimon_ai_po_core_mcpProjection = require("@agimon-ai/po-core/mcpProjection");
|
|
17
12
|
let _agimon_ai_po_core_serverFacet = require("@agimon-ai/po-core/serverFacet");
|
|
18
13
|
let _agimon_ai_po_core_extensionFile = require("@agimon-ai/po-core/extensionFile");
|
|
19
|
-
let
|
|
14
|
+
let _agimon_ai_po_core_platform = require("@agimon-ai/po-core/platform");
|
|
20
15
|
let _agimon_ai_po_core_skills = require("@agimon-ai/po-core/skills");
|
|
21
16
|
//#region src/extensions/workspaces/sessions/(backend)/_lib/domainServerResources.ts
|
|
22
17
|
/** Retain valid domains behind selection conditions; a broken neighbor must not prevent startup. */
|
|
23
|
-
async function domainServerResources(context) {
|
|
18
|
+
async function domainServerResources(context, fs, io) {
|
|
24
19
|
const resources = [];
|
|
25
|
-
const home = context.environment.HOME ??
|
|
26
|
-
for (const domain of (0, _agimon_ai_po_config_domains.
|
|
27
|
-
const temporaryDirectory =
|
|
20
|
+
const home = context.environment.HOME ?? _agimon_ai_po_core_platform.nodeHost.homeDirectory();
|
|
21
|
+
for (const domain of await (0, _agimon_ai_po_config_domains.listDomainNamesAsync)(fs, context.repoRoot, io, home)) {
|
|
22
|
+
const temporaryDirectory = (0, _agimon_ai_po_core_platform.getOrThrow)(await fs.createTempDir("doom-domain-", io));
|
|
28
23
|
try {
|
|
29
|
-
const plugins = await require_pluginMaterializer.materializePluginEntries((0, _agimon_ai_po_config_domains.
|
|
24
|
+
const plugins = await require_pluginMaterializer.materializePluginEntries(await (0, _agimon_ai_po_config_domains.resolvePluginEntriesAsync)(fs, context.repoRoot, [domain], [], io, home));
|
|
30
25
|
const collected = await require_resourceCollector.collectResources(context.repoRoot, plugins, {
|
|
31
26
|
agents: false,
|
|
32
27
|
mcp: false,
|
|
@@ -45,7 +40,7 @@ async function domainServerResources(context) {
|
|
|
45
40
|
mode: domain
|
|
46
41
|
}
|
|
47
42
|
},
|
|
48
|
-
read: () => (0,
|
|
43
|
+
read: async () => (0, _agimon_ai_po_core_platform.getOrThrow)(await fs.readTextFile(skill.path, _agimon_ai_po_core_platform.BACKGROUND_CONTEXT))
|
|
49
44
|
});
|
|
50
45
|
} catch (error) {
|
|
51
46
|
await context.client.notify({
|
|
@@ -54,53 +49,48 @@ async function domainServerResources(context) {
|
|
|
54
49
|
level: "warning"
|
|
55
50
|
});
|
|
56
51
|
} finally {
|
|
57
|
-
await (0,
|
|
58
|
-
recursive: true,
|
|
59
|
-
force: true
|
|
60
|
-
});
|
|
52
|
+
await (0, _agimon_ai_po_core_platform.removePath)(fs, temporaryDirectory, _agimon_ai_po_core_platform.BACKGROUND_CONTEXT);
|
|
61
53
|
}
|
|
62
54
|
}
|
|
63
55
|
return resources;
|
|
64
56
|
}
|
|
65
57
|
//#endregion
|
|
66
58
|
//#region src/extensions/workspaces/sessions/(backend)/root.server.ts
|
|
67
|
-
var root_server_default = (0, _agimon_ai_po_core_extensionFile.defineRoot)(async ({ agent }) => {
|
|
59
|
+
var root_server_default = (0, _agimon_ai_po_core_extensionFile.defineRoot)(async ({ agent, context: root, signal }) => {
|
|
68
60
|
const services = [];
|
|
69
|
-
if (agent) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
provider.provide(_agimon_ai_po_core_mcpProjection.DOOM_MCP_PROJECTION_RESOLVER_SERVICE, resolver);
|
|
99
|
-
});
|
|
61
|
+
if (!agent) return {
|
|
62
|
+
value: { resources: [] },
|
|
63
|
+
services
|
|
64
|
+
};
|
|
65
|
+
const fs = (0, _agimon_ai_po_core_platform.requireDoomFs)(root);
|
|
66
|
+
const io = (0, _agimon_ai_po_core_platform.withAbortSignal)(signal, _agimon_ai_po_core_platform.BACKGROUND_CONTEXT);
|
|
67
|
+
const execution = agent.context;
|
|
68
|
+
const home = execution.environment.HOME ?? _agimon_ai_po_core_platform.nodeHost.homeDirectory();
|
|
69
|
+
const resolver = { async resolve(domains) {
|
|
70
|
+
const { state } = await (0, _agimon_ai_po_config_harnessStore.loadHarnessStateAsync)(fs, { ...execution.environment }, io);
|
|
71
|
+
const directory = (0, _agimon_ai_po_core_platform.getOrThrow)(await fs.createTempDir("doom-domain-mcp-", io));
|
|
72
|
+
try {
|
|
73
|
+
const plugins = await require_pluginMaterializer.materializePluginEntries(await (0, _agimon_ai_po_config_domains.resolvePluginEntriesAsync)(fs, execution.repoRoot, [...domains], [...state.pluginDirectories], io, home));
|
|
74
|
+
return {
|
|
75
|
+
projection: (await require_resourceCollector.stageMcpResources(execution.repoRoot, plugins, {
|
|
76
|
+
enabled: true,
|
|
77
|
+
temporaryDirectory: directory,
|
|
78
|
+
mcpAllowlist: await require_mcpFilter.resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io)
|
|
79
|
+
})).mcpProjection,
|
|
80
|
+
cleanup: () => (0, _agimon_ai_po_core_platform.removePath)(fs, directory, _agimon_ai_po_core_platform.BACKGROUND_CONTEXT)
|
|
81
|
+
};
|
|
82
|
+
} catch (error) {
|
|
83
|
+
await (0, _agimon_ai_po_core_platform.removePath)(fs, directory, _agimon_ai_po_core_platform.BACKGROUND_CONTEXT);
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
} };
|
|
87
|
+
services.push((cordis) => {
|
|
88
|
+
cordis.plugin((provider) => {
|
|
89
|
+
provider.provide(_agimon_ai_po_core_mcpProjection.DOOM_MCP_PROJECTION_RESOLVER_SERVICE, resolver);
|
|
100
90
|
});
|
|
101
|
-
}
|
|
91
|
+
});
|
|
102
92
|
return {
|
|
103
|
-
value: { resources:
|
|
93
|
+
value: { resources: await domainServerResources(agent.context, fs, io) },
|
|
104
94
|
services
|
|
105
95
|
};
|
|
106
96
|
});
|
|
@@ -115,12 +105,12 @@ function domainSelectionReply(answer) {
|
|
|
115
105
|
if (typeof reply !== "object" || reply === null || !("kind" in reply) || reply.kind !== DOMAIN_SELECTION_KIND || !("version" in reply) || reply.version !== DOMAIN_SELECTION_VERSION || !("domains" in reply) || !Array.isArray(reply.domains) || !reply.domains.every((name) => typeof name === "string")) throw new Error("Invalid domains selection reply");
|
|
116
106
|
return reply.domains;
|
|
117
107
|
}
|
|
118
|
-
function createDomainServerCommand(host) {
|
|
108
|
+
function createDomainServerCommand(host, fs) {
|
|
119
109
|
return {
|
|
120
110
|
name: require_domainText.DOMAIN_COMMAND,
|
|
121
111
|
description: "Show or change the active Po domains.",
|
|
122
112
|
async execute(args, execution) {
|
|
123
|
-
const available = (0, _agimon_ai_po_config_domains.
|
|
113
|
+
const available = await (0, _agimon_ai_po_config_domains.listDomainNamesAsync)(fs, execution.repoRoot, _agimon_ai_po_core_platform.BACKGROUND_CONTEXT);
|
|
124
114
|
let requested = require_domainText.splitDomains(args);
|
|
125
115
|
let fullSet = false;
|
|
126
116
|
if (requested.length === 0) {
|
|
@@ -165,7 +155,7 @@ function createDomainServerCommand(host) {
|
|
|
165
155
|
}
|
|
166
156
|
//#endregion
|
|
167
157
|
//#region src/extensions/workspaces/sessions/(backend)/command/domains.server.ts
|
|
168
|
-
var domains_server_default$1 = (0, _agimon_ai_po_core_extensionFile.defineRoutedContribution)(({ agent }) => agent ? createDomainServerCommand(agent) : void 0, { cardinality: "optional" });
|
|
158
|
+
var domains_server_default$1 = (0, _agimon_ai_po_core_extensionFile.defineRoutedContribution)(({ agent, context }) => agent ? createDomainServerCommand(agent, (0, _agimon_ai_po_core_platform.requireDoomFs)(context)) : void 0, { cardinality: "optional" });
|
|
169
159
|
//#endregion
|
|
170
160
|
//#region src/extensions/workspaces/sessions/(backend)/resource/domains.server.ts
|
|
171
161
|
var domains_server_default = (0, _agimon_ai_po_core_extensionFile.defineRoutedContribution)((context) => context.root.resources, { cardinality: "many" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.cjs","names":["os","listDomainNames","mkdtemp","path","materializePluginEntries","resolvePluginEntries","collectResources","readFile","rm","defineRoot","os","loadHarnessState","mkdtemp","path","materializePluginEntries","resolvePluginEntries","stageMcpResources","resolveMcpAllowlist","rm","DOOM_MCP_PROJECTION_RESOLVER_SERVICE","DOMAIN_COMMAND","listDomainNames","splitDomains","pickerTitle","domainToggleOptions","toggledDomains","toggleOptionDomain","normalizeDomainNames","DOOM_RESOURCE_CATALOG_ENTRY_TYPE","defineRoutedContribution","defineRoutedContribution","defineResource","packageResourcePath","readPackageResource","defineServerPlugin","composeServerProviderOverrides","rootSession","composeRootHooks","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)/_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 { mkdtemp, readFile, rm } from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { listDomainNames, resolvePluginEntries } from '@agimon-ai/po-config/domains';\nimport type { DoomHeadlessExecutionContext, DoomHeadlessResource } from '@agimon-ai/po-core/headless';\n\nimport { materializePluginEntries } from '../../../../../services/pluginMaterializer';\nimport { collectResources } from '../../../../../services/resourceCollector';\n\n/** Retain valid domains behind selection conditions; a broken neighbor must not prevent startup. */\nexport async function domainServerResources(context: DoomHeadlessExecutionContext): Promise<DoomHeadlessResource[]> {\n const resources: DoomHeadlessResource[] = [];\n const home = context.environment.HOME ?? os.homedir();\n for (const domain of listDomainNames(context.repoRoot, home)) {\n // Own staging here so collection failures also release their temporary files.\n const temporaryDirectory = await mkdtemp(path.join(os.tmpdir(), 'doom-domain-'));\n try {\n const plugins = await materializePluginEntries(resolvePluginEntries(context.repoRoot, [domain], [], home));\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: () => readFile(skill.path, 'utf8'),\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 rm(temporaryDirectory, { recursive: true, force: true });\n }\n }\n return resources;\n}\n","import { mkdtemp, rm } from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { resolvePluginEntries } from '@agimon-ai/po-config/domains';\nimport { loadHarnessState } from '@agimon-ai/po-config/harnessStore';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport {\n DOOM_MCP_PROJECTION_RESOLVER_SERVICE,\n type DoomMcpProjectionResolverService,\n} from '@agimon-ai/po-core/mcpProjection';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { resolveMcpAllowlist } 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 }: DoomServerPluginContext) => {\n const services: Array<(cordis: Context) => void> = [];\n if (agent) {\n const execution = agent.context;\n const home = execution.environment.HOME ?? os.homedir();\n const resolver: DoomMcpProjectionResolverService = {\n async resolve(domains) {\n const { state } = loadHarnessState({ ...execution.environment });\n const directory = await mkdtemp(path.join(os.tmpdir(), 'doom-domain-mcp-'));\n try {\n const plugins = await materializePluginEntries(\n resolvePluginEntries(execution.repoRoot, [...domains], [...state.pluginDirectories], home),\n );\n const staged = await stageMcpResources(execution.repoRoot, plugins, {\n enabled: true,\n temporaryDirectory: directory,\n mcpAllowlist: resolveMcpAllowlist(execution.repoRoot, [...domains]),\n });\n return {\n projection: staged.mcpProjection,\n cleanup: () => rm(directory, { recursive: true, force: true }),\n };\n } catch (error) {\n await rm(directory, { recursive: true, force: true });\n throw error;\n }\n },\n };\n services.push((cordis) => {\n cordis.plugin((provider) => {\n provider.provide(DOOM_MCP_PROJECTION_RESOLVER_SERVICE, resolver);\n });\n });\n }\n return {\n value: { resources: agent ? await domainServerResources(agent.context) : [] } satisfies DomainServerScope,\n services,\n };\n});\n","import { listDomainNames } from '@agimon-ai/po-config/domains';\nimport { type DoomHeadlessCommand, type DoomHeadlessHostService } from '@agimon-ai/po-core/headless';\nimport { DOOM_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: DoomHeadlessHostService): DoomHeadlessCommand {\n return {\n name: DOMAIN_COMMAND,\n description: 'Show or change the active Po domains.',\n async execute(args, execution) {\n const available = listDomainNames(execution.repoRoot);\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(DOOM_RESOURCE_CATALOG_ENTRY_TYPE, projection);\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport { createDomainServerCommand } from '../_lib/domainServerCommand';\nexport default defineRoutedContribution(\n ({ agent }: DoomServerPluginContext) => (agent ? createDomainServerCommand(agent) : 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 { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport type { DomainServerScope } from '../_lib/serverScope';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, 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/serverFacet';\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 DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverFacet';\nimport { composeRootHooks } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.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 facet = defineServerPlugin({\n name: '@agimon-ai/po-domain',\n providerOverrides: composeServerProviderOverrides(rootSession),\n session: async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get commands(): DoomServerSessionPlugin['commands'] { return defined([via({ name: 'domains' }, at(commandDomains, contextSession))]); },\n get resources(): DoomServerSessionPlugin['resources'] { return [...many(resourceDomains, contextSession), at(resourcePoAuthorDomain, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): DoomServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default facet;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.cjs","names":["nodeHost","listDomainNamesAsync","getOrThrow","materializePluginEntries","resolvePluginEntriesAsync","collectResources","BACKGROUND_CONTEXT","removePath","defineRoot","requireDoomFs","withAbortSignal","BACKGROUND_CONTEXT","nodeHost","loadHarnessStateAsync","getOrThrow","materializePluginEntries","resolvePluginEntriesAsync","stageMcpResources","resolveMcpAllowlistAsync","removePath","DOOM_MCP_PROJECTION_RESOLVER_SERVICE","DOMAIN_COMMAND","listDomainNamesAsync","BACKGROUND_CONTEXT","splitDomains","pickerTitle","domainToggleOptions","toggledDomains","toggleOptionDomain","normalizeDomainNames","DOOM_RESOURCE_CATALOG_ENTRY_TYPE","defineRoutedContribution","requireDoomFs","defineRoutedContribution","defineResource","packageResourcePath","readPackageResource","defineServerPlugin","composeServerProviderOverrides","rootSession","composeRootHooks","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)/_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 { DoomHeadlessExecutionContext, DoomHeadlessResource } 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: DoomHeadlessExecutionContext,\n fs: FileSystem,\n io: IoContext,\n): Promise<DoomHeadlessResource[]> {\n const resources: DoomHeadlessResource[] = [];\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('doom-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 DOOM_MCP_PROJECTION_RESOLVER_SERVICE,\n type DoomMcpProjectionResolverService,\n} from '@agimon-ai/po-core/mcpProjection';\nimport {\n BACKGROUND_CONTEXT,\n getOrThrow,\n nodeHost,\n removePath,\n requireDoomFs,\n withAbortSignal,\n} from '@agimon-ai/po-core/platform';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\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 }: DoomServerPluginContext) => {\n const services: Array<(cordis: Context) => void> = [];\n if (!agent) return { value: { resources: [] } satisfies DomainServerScope, services };\n const fs = requireDoomFs(root);\n const io = withAbortSignal(signal, BACKGROUND_CONTEXT);\n const execution = agent.context;\n const home = execution.environment.HOME ?? nodeHost.homeDirectory();\n const resolver: DoomMcpProjectionResolverService = {\n async resolve(domains) {\n const { state } = await loadHarnessStateAsync(fs, { ...execution.environment }, io);\n const directory = getOrThrow(await fs.createTempDir('doom-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(DOOM_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 { listDomainNamesAsync } from '@agimon-ai/po-config/domains';\nimport { type DoomHeadlessCommand, type DoomHeadlessHostService } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, type FileSystem } from '@agimon-ai/po-core/platform';\nimport { DOOM_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: DoomHeadlessHostService, fs: FileSystem): DoomHeadlessCommand {\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(DOOM_RESOURCE_CATALOG_ENTRY_TYPE, projection);\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport { requireDoomFs } from '@agimon-ai/po-core/platform';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport { createDomainServerCommand } from '../_lib/domainServerCommand';\nexport default defineRoutedContribution(\n ({ agent, context }: DoomServerPluginContext) =>\n agent ? createDomainServerCommand(agent, requireDoomFs(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 { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport type { DomainServerScope } from '../_lib/serverScope';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, 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/serverFacet';\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 DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverFacet';\nimport { composeRootHooks } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.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 facet = defineServerPlugin({\n name: '@agimon-ai/po-domain',\n providerOverrides: composeServerProviderOverrides(rootSession),\n session: async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get commands(): DoomServerSessionPlugin['commands'] { return defined([via({ name: 'domains' }, at(commandDomains, contextSession))]); },\n get resources(): DoomServerSessionPlugin['resources'] { return [...many(resourceDomains, contextSession), at(resourcePoAuthorDomain, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): DoomServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default facet;\n"],"mappings":";;;;;;;;;;;;;;;;;AAUA,eAAsB,sBACpB,SACA,IACA,IACiC;CACjC,MAAM,YAAoC,CAAC;CAC3C,MAAM,OAAO,QAAQ,YAAY,QAAQA,4BAAAA,SAAS,cAAc;CAChE,KAAK,MAAM,UAAU,OAAA,GAAMC,6BAAAA,qBAAAA,CAAqB,IAAI,QAAQ,UAAU,IAAI,IAAI,GAAG;EAE/E,MAAM,sBAAA,GAAqBC,4BAAAA,WAAAA,CAAW,MAAM,GAAG,cAAc,gBAAgB,EAAE,CAAC;EAChF,IAAI;GACF,MAAM,UAAU,MAAMC,2BAAAA,yBACpB,OAAA,GAAMC,6BAAAA,0BAAAA,CAA0B,IAAI,QAAQ,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,IAAI,CAC9E;GACA,MAAM,YAAY,MAAMC,0BAAAA,iBAAiB,QAAQ,UAAU,SAAS;IAClE,QAAQ;IACR,KAAK;IACL,cAAc;IACd;GACF,CAAC;GACD,KAAK,MAAM,SAAS,UAAU,cAC5B,UAAU,KAAK;IACb,MAAM,MAAM;IACZ,aAAa,MAAM;IACnB,MAAM,MAAM;IACZ,MAAM;IACN,MAAM;KAAE;KAAQ,aAAa;MAAE,MAAM;MAAU,MAAM;KAAO;IAAE;IAC9D,MAAM,aAAA,GAAYH,4BAAAA,WAAAA,CAAW,MAAM,GAAG,aAAa,MAAM,MAAMI,4BAAAA,kBAAkB,CAAC;GACpF,CAAC;EAEL,SAAS,OAAO;GACd,MAAM,QAAQ,OAAO,OAAO;IAC1B,OAAO,aAAa,OAAO;IAC3B,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IAC3D,OAAO;GACT,CAAC;EACH,UAAU;GACR,OAAA,GAAMC,4BAAAA,WAAAA,CAAW,IAAI,oBAAoBD,4BAAAA,kBAAkB;EAC7D;CACF;CACA,OAAO;AACT;;;AC3BA,IAAA,uBAAA,GAAeE,iCAAAA,WAAAA,CAAW,OAAO,EAAE,OAAO,SAAS,MAAM,aAAsC;CAC7F,MAAM,WAA6C,CAAC;CACpD,IAAI,CAAC,OAAO,OAAO;EAAE,OAAO,EAAE,WAAW,CAAC,EAAE;EAA+B;CAAS;CACpF,MAAM,MAAA,GAAKC,4BAAAA,cAAAA,CAAc,IAAI;CAC7B,MAAM,MAAA,GAAKC,4BAAAA,gBAAAA,CAAgB,QAAQC,4BAAAA,kBAAkB;CACrD,MAAM,YAAY,MAAM;CACxB,MAAM,OAAO,UAAU,YAAY,QAAQC,4BAAAA,SAAS,cAAc;CAClE,MAAM,WAA6C,EACjD,MAAM,QAAQ,SAAS;EACrB,MAAM,EAAE,UAAU,OAAA,GAAMC,kCAAAA,sBAAAA,CAAsB,IAAI,EAAE,GAAG,UAAU,YAAY,GAAG,EAAE;EAClF,MAAM,aAAA,GAAYC,4BAAAA,WAAAA,CAAW,MAAM,GAAG,cAAc,oBAAoB,EAAE,CAAC;EAC3E,IAAI;GACF,MAAM,UAAU,MAAMC,2BAAAA,yBACpB,OAAA,GAAMC,6BAAAA,0BAAAA,CAA0B,IAAI,UAAU,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAC9G;GAMA,OAAO;IACL,aAAY,MANOC,0BAAAA,kBAAkB,UAAU,UAAU,SAAS;KAClE,SAAS;KACT,oBAAoB;KACpB,cAAc,MAAMC,kBAAAA,yBAAyB,IAAI,UAAU,UAAU,CAAC,GAAG,OAAO,GAAG,EAAE;IACvF,CAAC,EAAA,CAEoB;IACnB,gBAAA,GAAeC,4BAAAA,WAAAA,CAAW,IAAI,WAAWR,4BAAAA,kBAAkB;GAC7D;EACF,SAAS,OAAO;GACd,OAAA,GAAMQ,4BAAAA,WAAAA,CAAW,IAAI,WAAWR,4BAAAA,kBAAkB;GAClD,MAAM;EACR;CACF,EACF;CACA,SAAS,MAAM,WAAW;EACxB,OAAO,QAAQ,aAAa;GAC1B,SAAS,QAAQS,iCAAAA,sCAAsC,QAAQ;EACjE,CAAC;CACH,CAAC;CACD,OAAO;EACL,OAAO,EAAE,WAAW,MAAM,sBAAsB,MAAM,SAAS,IAAI,EAAE,EAAE;EACvE;CACF;AACF,CAAC;;;AChDD,MAAM,wBAAwB;AAC9B,MAAM,2BAA2B;;AAGjC,SAAS,qBAAqB,QAAiC;CAC7D,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC,WAAW,GAAG,GAAG,OAAO;CAChD,MAAM,QAAiB,KAAK,MAAM,MAAM;CACxC,IACE,OAAO,UAAU,YACjB,UAAU,QACV,EAAE,UAAU,UACZ,MAAM,SAAS,yBACf,EAAE,aAAa,UACf,MAAM,YAAY,4BAClB,EAAE,aAAa,UACf,CAAC,MAAM,QAAQ,MAAM,OAAO,KAC5B,CAAC,MAAM,QAAQ,OAAO,SAAkC,OAAO,SAAS,QAAQ,GAEhF,MAAM,IAAI,MAAM,iCAAiC;CAEnD,OAAO,MAAM;AACf;AAEA,SAAgB,0BAA0B,MAA+B,IAAqC;CAC5G,OAAO;EACL,MAAMC,mBAAAA;EACN,aAAa;EACb,MAAM,QAAQ,MAAM,WAAW;GAC7B,MAAM,YAAY,OAAA,GAAMC,6BAAAA,qBAAAA,CAAqB,IAAI,UAAU,UAAUC,4BAAAA,kBAAkB;GACvF,IAAI,YAAYC,mBAAAA,aAAa,IAAI;GACjC,IAAI,UAAU;GACd,IAAI,UAAU,WAAW,GAAG;IAC1B,MAAM,UAAU;KACd,QAAQ,CAAC,GAAG,UAAU,UAAU,OAAO;KACvC,WAAW,CAAC,GAAG,UAAU,UAAU,OAAO;KAC1C;IACF;IACA,MAAM,WAAW,MAAM,UAAU,OAAO,QAAQ;KAC9C,MAAM;KACN,OAAOC,mBAAAA,YAAY,OAAO;KAC1B,SAASC,mBAAAA,oBAAoB,OAAO,CAAC,CAAC,KAAK,WAAW;MAAE;MAAO,OAAO;KAAM,EAAE;IAChF,CAAC;IACD,IAAI,OAAO,aAAa,YAAY,CAAC,UAAU;IAC/C,MAAM,UAAU,qBAAqB,QAAQ;IAC7C,UAAU,YAAY;IACtB,YAAY,WAAWC,mBAAAA,eAAe,QAAQ,WAAWC,mBAAAA,mBAAmB,QAAQ,CAAC;GACvF;GACA,YAAYC,mBAAAA,qBAAqB,SAAS;GAC1C,MAAM,UAAU,UAAU,QAAQ,SAAS,CAAC,UAAU,SAAS,IAAI,CAAC;GACpE,IAAI,QAAQ,SAAS,GAAG,MAAM,IAAI,MAAM,mBAAmB,QAAQ,KAAK,IAAI,GAAG;GAC/E,IAAI,SAAS;IACX,MAAM,SAAS,IAAI,IAAI,SAAS;IAChC,MAAM,UAAU,IAAI,IAAI,UAAU,UAAU,OAAO;IACnD,YAAY,CACV,GAAG,UAAU,UAAU,QAAQ,QAAQ,SAAS,OAAO,IAAI,IAAI,CAAC,GAChE,GAAG,UAAU,QAAQ,SAAS,OAAO,IAAI,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CACtE;GACF;GACA,IACE,UAAU,WAAW,UAAU,UAAU,QAAQ,UACjD,UAAU,OAAO,MAAM,UAAU,SAAS,UAAU,UAAU,QAAQ,MAAM,GAE5E;GAEF,MAAM,KAAK,gBAAgB;IAAE,MAAM;IAAW,SAAS;GAAU,CAAC;GAGlE,MAAM,aAAwC;IAAE,SAAS;IAAG,UAAU,KAAK,IAAI;GAAE;GACjF,MAAM,UAAU,QAAQ,kBAAkBC,0BAAAA,kCAAkC,UAAU;EACxF;CACF;AACF;;;ACjFA,IAAA,4BAAA,GAAeC,iCAAAA,yBAAAA,EACZ,EAAE,OAAO,cACR,QAAQ,0BAA0B,QAAA,GAAOC,4BAAAA,cAAAA,CAAc,OAAO,CAAC,IAAI,KAAA,GACrE,EAAE,aAAa,WAAW,CAC5B;;;ACHA,IAAA,0BAAA,GAAeC,iCAAAA,yBAAAA,EACZ,YAAkE,QAAQ,KAAK,WAChF,EAAE,aAAa,OAAO,CACxB;;;ACNA,IAAA,iCAAA,GAAeC,iCAAAA,eAAAA,CAAe;CAC5B,MAAM;CACN,aACE;CACF,MAAM;EAAE,OAAO,EAAE,cAAc,OAAO;EAAG,aAAa;GAAE,MAAM;GAAkB,MAAM;EAAO;CAAE;CAC/F,MAAM;CACN,OAAA,GAAMC,+BAAAA,oBAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,MAAqC,uCAAuC;CAClF,aAAA,GAAYC,+BAAAA,oBAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,MAAqC,uCAAuC;AAC1F,CAAC;;;ACAD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAM,QAAc,OAA6C,YAA6B;CAC5F,MAAM,WAAW,OAAO,UAAU,aAAc,MAA4B,OAAO,IAAI;CACvF,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAa;AAC5D;;AAEA,MAAM,WAAc,WAClB,OAAO,QAAQ,UAAsB,UAAU,KAAA,CAAS;AAC1D,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,SAAA,GAAQC,+BAAAA,mBAAAA,CAAmB;CACtC,MAAM;CACN,oBAAA,GAAmBC,+BAAAA,+BAAAA,CAA+BC,mBAAW;CAC7D,SAAS,OAAO,YAAY;EAC1B,MAAM,eAAe,MAAMA,oBAAY,OAAO;EAC9C,MAAM,iBAAiB;GAAE,GAAG;GAAS,MAAM,aAAa;EAAM;EAC9D,OAAO;GACL,IAAA,GAAGC,iCAAAA,iBAAAA,CAAiB,YAAY;GAChC,IAAI,WAAgD;IAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,UAAU,GAAG,GAAGC,0BAAgB,cAAc,CAAC,CAAC,CAAC;GAAG;GACtI,IAAI,YAAkD;IAAE,OAAO,CAAC,GAAG,KAAKC,wBAAiB,cAAc,GAAG,GAAGC,+BAAwB,cAAc,CAAC;GAAG;GACvJ,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;GAC3C,IAAI,aAAoD;IAAE,OAAO,CAAC,GAAI,aAAa,cAAc,CAAC,CAAE;GAAG;EACzG;CACF;AACF,CAAC"}
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { s as resolveMcpAllowlistAsync } from "../mcpFilter-CKUbKmxz.mjs";
|
|
2
2
|
import { t as materializePluginEntries } from "../pluginMaterializer-D9-oDF-b.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { o as stageMcpResources, t as collectResources } from "../resourceCollector-DK9AJg42.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-Dm8k7p4z.mjs";
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import { loadHarnessState } from "@agimon-ai/po-config/harnessStore";
|
|
8
|
-
import os from "node:os";
|
|
5
|
+
import { listDomainNamesAsync, resolvePluginEntriesAsync } from "@agimon-ai/po-config/domains";
|
|
6
|
+
import { loadHarnessStateAsync } from "@agimon-ai/po-config/harnessStore";
|
|
9
7
|
import { DOOM_MCP_PROJECTION_RESOLVER_SERVICE } from "@agimon-ai/po-core/mcpProjection";
|
|
10
8
|
import { composeServerProviderOverrides, defineServerPlugin, packageResourcePath, readPackageResource } from "@agimon-ai/po-core/serverFacet";
|
|
11
9
|
import { composeRootHooks, defineResource, defineRoot, defineRoutedContribution } from "@agimon-ai/po-core/extensionFile";
|
|
12
|
-
import {
|
|
10
|
+
import { BACKGROUND_CONTEXT, getOrThrow, nodeHost, removePath, requireDoomFs, withAbortSignal } from "@agimon-ai/po-core/platform";
|
|
13
11
|
import { DOOM_RESOURCE_CATALOG_ENTRY_TYPE } from "@agimon-ai/po-core/skills";
|
|
14
12
|
//#region src/extensions/workspaces/sessions/(backend)/_lib/domainServerResources.ts
|
|
15
13
|
/** Retain valid domains behind selection conditions; a broken neighbor must not prevent startup. */
|
|
16
|
-
async function domainServerResources(context) {
|
|
14
|
+
async function domainServerResources(context, fs, io) {
|
|
17
15
|
const resources = [];
|
|
18
|
-
const home = context.environment.HOME ??
|
|
19
|
-
for (const domain of
|
|
20
|
-
const temporaryDirectory = await
|
|
16
|
+
const home = context.environment.HOME ?? nodeHost.homeDirectory();
|
|
17
|
+
for (const domain of await listDomainNamesAsync(fs, context.repoRoot, io, home)) {
|
|
18
|
+
const temporaryDirectory = getOrThrow(await fs.createTempDir("doom-domain-", io));
|
|
21
19
|
try {
|
|
22
|
-
const plugins = await materializePluginEntries(
|
|
20
|
+
const plugins = await materializePluginEntries(await resolvePluginEntriesAsync(fs, context.repoRoot, [domain], [], io, home));
|
|
23
21
|
const collected = await collectResources(context.repoRoot, plugins, {
|
|
24
22
|
agents: false,
|
|
25
23
|
mcp: false,
|
|
@@ -38,7 +36,7 @@ async function domainServerResources(context) {
|
|
|
38
36
|
mode: domain
|
|
39
37
|
}
|
|
40
38
|
},
|
|
41
|
-
read: () =>
|
|
39
|
+
read: async () => getOrThrow(await fs.readTextFile(skill.path, BACKGROUND_CONTEXT))
|
|
42
40
|
});
|
|
43
41
|
} catch (error) {
|
|
44
42
|
await context.client.notify({
|
|
@@ -47,53 +45,48 @@ async function domainServerResources(context) {
|
|
|
47
45
|
level: "warning"
|
|
48
46
|
});
|
|
49
47
|
} finally {
|
|
50
|
-
await
|
|
51
|
-
recursive: true,
|
|
52
|
-
force: true
|
|
53
|
-
});
|
|
48
|
+
await removePath(fs, temporaryDirectory, BACKGROUND_CONTEXT);
|
|
54
49
|
}
|
|
55
50
|
}
|
|
56
51
|
return resources;
|
|
57
52
|
}
|
|
58
53
|
//#endregion
|
|
59
54
|
//#region src/extensions/workspaces/sessions/(backend)/root.server.ts
|
|
60
|
-
var root_server_default = defineRoot(async ({ agent }) => {
|
|
55
|
+
var root_server_default = defineRoot(async ({ agent, context: root, signal }) => {
|
|
61
56
|
const services = [];
|
|
62
|
-
if (agent) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
provider.provide(DOOM_MCP_PROJECTION_RESOLVER_SERVICE, resolver);
|
|
92
|
-
});
|
|
57
|
+
if (!agent) return {
|
|
58
|
+
value: { resources: [] },
|
|
59
|
+
services
|
|
60
|
+
};
|
|
61
|
+
const fs = requireDoomFs(root);
|
|
62
|
+
const io = withAbortSignal(signal, BACKGROUND_CONTEXT);
|
|
63
|
+
const execution = agent.context;
|
|
64
|
+
const home = execution.environment.HOME ?? nodeHost.homeDirectory();
|
|
65
|
+
const resolver = { async resolve(domains) {
|
|
66
|
+
const { state } = await loadHarnessStateAsync(fs, { ...execution.environment }, io);
|
|
67
|
+
const directory = getOrThrow(await fs.createTempDir("doom-domain-mcp-", io));
|
|
68
|
+
try {
|
|
69
|
+
const plugins = await materializePluginEntries(await resolvePluginEntriesAsync(fs, execution.repoRoot, [...domains], [...state.pluginDirectories], io, home));
|
|
70
|
+
return {
|
|
71
|
+
projection: (await stageMcpResources(execution.repoRoot, plugins, {
|
|
72
|
+
enabled: true,
|
|
73
|
+
temporaryDirectory: directory,
|
|
74
|
+
mcpAllowlist: await resolveMcpAllowlistAsync(fs, execution.repoRoot, [...domains], io)
|
|
75
|
+
})).mcpProjection,
|
|
76
|
+
cleanup: () => removePath(fs, directory, BACKGROUND_CONTEXT)
|
|
77
|
+
};
|
|
78
|
+
} catch (error) {
|
|
79
|
+
await removePath(fs, directory, BACKGROUND_CONTEXT);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
} };
|
|
83
|
+
services.push((cordis) => {
|
|
84
|
+
cordis.plugin((provider) => {
|
|
85
|
+
provider.provide(DOOM_MCP_PROJECTION_RESOLVER_SERVICE, resolver);
|
|
93
86
|
});
|
|
94
|
-
}
|
|
87
|
+
});
|
|
95
88
|
return {
|
|
96
|
-
value: { resources:
|
|
89
|
+
value: { resources: await domainServerResources(agent.context, fs, io) },
|
|
97
90
|
services
|
|
98
91
|
};
|
|
99
92
|
});
|
|
@@ -108,12 +101,12 @@ function domainSelectionReply(answer) {
|
|
|
108
101
|
if (typeof reply !== "object" || reply === null || !("kind" in reply) || reply.kind !== DOMAIN_SELECTION_KIND || !("version" in reply) || reply.version !== DOMAIN_SELECTION_VERSION || !("domains" in reply) || !Array.isArray(reply.domains) || !reply.domains.every((name) => typeof name === "string")) throw new Error("Invalid domains selection reply");
|
|
109
102
|
return reply.domains;
|
|
110
103
|
}
|
|
111
|
-
function createDomainServerCommand(host) {
|
|
104
|
+
function createDomainServerCommand(host, fs) {
|
|
112
105
|
return {
|
|
113
106
|
name: DOMAIN_COMMAND,
|
|
114
107
|
description: "Show or change the active Po domains.",
|
|
115
108
|
async execute(args, execution) {
|
|
116
|
-
const available =
|
|
109
|
+
const available = await listDomainNamesAsync(fs, execution.repoRoot, BACKGROUND_CONTEXT);
|
|
117
110
|
let requested = splitDomains(args);
|
|
118
111
|
let fullSet = false;
|
|
119
112
|
if (requested.length === 0) {
|
|
@@ -158,7 +151,7 @@ function createDomainServerCommand(host) {
|
|
|
158
151
|
}
|
|
159
152
|
//#endregion
|
|
160
153
|
//#region src/extensions/workspaces/sessions/(backend)/command/domains.server.ts
|
|
161
|
-
var domains_server_default$1 = defineRoutedContribution(({ agent }) => agent ? createDomainServerCommand(agent) : void 0, { cardinality: "optional" });
|
|
154
|
+
var domains_server_default$1 = defineRoutedContribution(({ agent, context }) => agent ? createDomainServerCommand(agent, requireDoomFs(context)) : void 0, { cardinality: "optional" });
|
|
162
155
|
//#endregion
|
|
163
156
|
//#region src/extensions/workspaces/sessions/(backend)/resource/domains.server.ts
|
|
164
157
|
var domains_server_default = defineRoutedContribution((context) => context.root.resources, { cardinality: "many" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.mjs","names":["rootSession","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)/_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 { mkdtemp, readFile, rm } from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { listDomainNames, resolvePluginEntries } from '@agimon-ai/po-config/domains';\nimport type { DoomHeadlessExecutionContext, DoomHeadlessResource } from '@agimon-ai/po-core/headless';\n\nimport { materializePluginEntries } from '../../../../../services/pluginMaterializer';\nimport { collectResources } from '../../../../../services/resourceCollector';\n\n/** Retain valid domains behind selection conditions; a broken neighbor must not prevent startup. */\nexport async function domainServerResources(context: DoomHeadlessExecutionContext): Promise<DoomHeadlessResource[]> {\n const resources: DoomHeadlessResource[] = [];\n const home = context.environment.HOME ?? os.homedir();\n for (const domain of listDomainNames(context.repoRoot, home)) {\n // Own staging here so collection failures also release their temporary files.\n const temporaryDirectory = await mkdtemp(path.join(os.tmpdir(), 'doom-domain-'));\n try {\n const plugins = await materializePluginEntries(resolvePluginEntries(context.repoRoot, [domain], [], home));\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: () => readFile(skill.path, 'utf8'),\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 rm(temporaryDirectory, { recursive: true, force: true });\n }\n }\n return resources;\n}\n","import { mkdtemp, rm } from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { resolvePluginEntries } from '@agimon-ai/po-config/domains';\nimport { loadHarnessState } from '@agimon-ai/po-config/harnessStore';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport {\n DOOM_MCP_PROJECTION_RESOLVER_SERVICE,\n type DoomMcpProjectionResolverService,\n} from '@agimon-ai/po-core/mcpProjection';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { resolveMcpAllowlist } 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 }: DoomServerPluginContext) => {\n const services: Array<(cordis: Context) => void> = [];\n if (agent) {\n const execution = agent.context;\n const home = execution.environment.HOME ?? os.homedir();\n const resolver: DoomMcpProjectionResolverService = {\n async resolve(domains) {\n const { state } = loadHarnessState({ ...execution.environment });\n const directory = await mkdtemp(path.join(os.tmpdir(), 'doom-domain-mcp-'));\n try {\n const plugins = await materializePluginEntries(\n resolvePluginEntries(execution.repoRoot, [...domains], [...state.pluginDirectories], home),\n );\n const staged = await stageMcpResources(execution.repoRoot, plugins, {\n enabled: true,\n temporaryDirectory: directory,\n mcpAllowlist: resolveMcpAllowlist(execution.repoRoot, [...domains]),\n });\n return {\n projection: staged.mcpProjection,\n cleanup: () => rm(directory, { recursive: true, force: true }),\n };\n } catch (error) {\n await rm(directory, { recursive: true, force: true });\n throw error;\n }\n },\n };\n services.push((cordis) => {\n cordis.plugin((provider) => {\n provider.provide(DOOM_MCP_PROJECTION_RESOLVER_SERVICE, resolver);\n });\n });\n }\n return {\n value: { resources: agent ? await domainServerResources(agent.context) : [] } satisfies DomainServerScope,\n services,\n };\n});\n","import { listDomainNames } from '@agimon-ai/po-config/domains';\nimport { type DoomHeadlessCommand, type DoomHeadlessHostService } from '@agimon-ai/po-core/headless';\nimport { DOOM_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: DoomHeadlessHostService): DoomHeadlessCommand {\n return {\n name: DOMAIN_COMMAND,\n description: 'Show or change the active Po domains.',\n async execute(args, execution) {\n const available = listDomainNames(execution.repoRoot);\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(DOOM_RESOURCE_CATALOG_ENTRY_TYPE, projection);\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport { createDomainServerCommand } from '../_lib/domainServerCommand';\nexport default defineRoutedContribution(\n ({ agent }: DoomServerPluginContext) => (agent ? createDomainServerCommand(agent) : 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 { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport type { DomainServerScope } from '../_lib/serverScope';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, 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/serverFacet';\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 DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverFacet';\nimport { composeRootHooks } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.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 facet = defineServerPlugin({\n name: '@agimon-ai/po-domain',\n providerOverrides: composeServerProviderOverrides(rootSession),\n session: async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get commands(): DoomServerSessionPlugin['commands'] { return defined([via({ name: 'domains' }, at(commandDomains, contextSession))]); },\n get resources(): DoomServerSessionPlugin['resources'] { return [...many(resourceDomains, contextSession), at(resourcePoAuthorDomain, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): DoomServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default facet;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["rootSession","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)/_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 { DoomHeadlessExecutionContext, DoomHeadlessResource } 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: DoomHeadlessExecutionContext,\n fs: FileSystem,\n io: IoContext,\n): Promise<DoomHeadlessResource[]> {\n const resources: DoomHeadlessResource[] = [];\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('doom-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 DOOM_MCP_PROJECTION_RESOLVER_SERVICE,\n type DoomMcpProjectionResolverService,\n} from '@agimon-ai/po-core/mcpProjection';\nimport {\n BACKGROUND_CONTEXT,\n getOrThrow,\n nodeHost,\n removePath,\n requireDoomFs,\n withAbortSignal,\n} from '@agimon-ai/po-core/platform';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\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 }: DoomServerPluginContext) => {\n const services: Array<(cordis: Context) => void> = [];\n if (!agent) return { value: { resources: [] } satisfies DomainServerScope, services };\n const fs = requireDoomFs(root);\n const io = withAbortSignal(signal, BACKGROUND_CONTEXT);\n const execution = agent.context;\n const home = execution.environment.HOME ?? nodeHost.homeDirectory();\n const resolver: DoomMcpProjectionResolverService = {\n async resolve(domains) {\n const { state } = await loadHarnessStateAsync(fs, { ...execution.environment }, io);\n const directory = getOrThrow(await fs.createTempDir('doom-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(DOOM_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 { listDomainNamesAsync } from '@agimon-ai/po-config/domains';\nimport { type DoomHeadlessCommand, type DoomHeadlessHostService } from '@agimon-ai/po-core/headless';\nimport { BACKGROUND_CONTEXT, type FileSystem } from '@agimon-ai/po-core/platform';\nimport { DOOM_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: DoomHeadlessHostService, fs: FileSystem): DoomHeadlessCommand {\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(DOOM_RESOURCE_CATALOG_ENTRY_TYPE, projection);\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport { requireDoomFs } from '@agimon-ai/po-core/platform';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport { createDomainServerCommand } from '../_lib/domainServerCommand';\nexport default defineRoutedContribution(\n ({ agent, context }: DoomServerPluginContext) =>\n agent ? createDomainServerCommand(agent, requireDoomFs(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 { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport type { DomainServerScope } from '../_lib/serverScope';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, 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/serverFacet';\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 DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverFacet';\nimport { composeRootHooks } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.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 facet = defineServerPlugin({\n name: '@agimon-ai/po-domain',\n providerOverrides: composeServerProviderOverrides(rootSession),\n session: async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get commands(): DoomServerSessionPlugin['commands'] { return defined([via({ name: 'domains' }, at(commandDomains, contextSession))]); },\n get resources(): DoomServerSessionPlugin['resources'] { return [...many(resourceDomains, contextSession), at(resourcePoAuthorDomain, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): DoomServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default facet;\n"],"mappings":";;;;;;;;;;;;;AAUA,eAAsB,sBACpB,SACA,IACA,IACiC;CACjC,MAAM,YAAoC,CAAC;CAC3C,MAAM,OAAO,QAAQ,YAAY,QAAQ,SAAS,cAAc;CAChE,KAAK,MAAM,UAAU,MAAM,qBAAqB,IAAI,QAAQ,UAAU,IAAI,IAAI,GAAG;EAE/E,MAAM,qBAAqB,WAAW,MAAM,GAAG,cAAc,gBAAgB,EAAE,CAAC;EAChF,IAAI;GACF,MAAM,UAAU,MAAM,yBACpB,MAAM,0BAA0B,IAAI,QAAQ,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,IAAI,CAC9E;GACA,MAAM,YAAY,MAAM,iBAAiB,QAAQ,UAAU,SAAS;IAClE,QAAQ;IACR,KAAK;IACL,cAAc;IACd;GACF,CAAC;GACD,KAAK,MAAM,SAAS,UAAU,cAC5B,UAAU,KAAK;IACb,MAAM,MAAM;IACZ,aAAa,MAAM;IACnB,MAAM,MAAM;IACZ,MAAM;IACN,MAAM;KAAE;KAAQ,aAAa;MAAE,MAAM;MAAU,MAAM;KAAO;IAAE;IAC9D,MAAM,YAAY,WAAW,MAAM,GAAG,aAAa,MAAM,MAAM,kBAAkB,CAAC;GACpF,CAAC;EAEL,SAAS,OAAO;GACd,MAAM,QAAQ,OAAO,OAAO;IAC1B,OAAO,aAAa,OAAO;IAC3B,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IAC3D,OAAO;GACT,CAAC;EACH,UAAU;GACR,MAAM,WAAW,IAAI,oBAAoB,kBAAkB;EAC7D;CACF;CACA,OAAO;AACT;;;AC3BA,IAAA,sBAAe,WAAW,OAAO,EAAE,OAAO,SAAS,MAAM,aAAsC;CAC7F,MAAM,WAA6C,CAAC;CACpD,IAAI,CAAC,OAAO,OAAO;EAAE,OAAO,EAAE,WAAW,CAAC,EAAE;EAA+B;CAAS;CACpF,MAAM,KAAK,cAAc,IAAI;CAC7B,MAAM,KAAK,gBAAgB,QAAQ,kBAAkB;CACrD,MAAM,YAAY,MAAM;CACxB,MAAM,OAAO,UAAU,YAAY,QAAQ,SAAS,cAAc;CAClE,MAAM,WAA6C,EACjD,MAAM,QAAQ,SAAS;EACrB,MAAM,EAAE,UAAU,MAAM,sBAAsB,IAAI,EAAE,GAAG,UAAU,YAAY,GAAG,EAAE;EAClF,MAAM,YAAY,WAAW,MAAM,GAAG,cAAc,oBAAoB,EAAE,CAAC;EAC3E,IAAI;GACF,MAAM,UAAU,MAAM,yBACpB,MAAM,0BAA0B,IAAI,UAAU,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAC9G;GAMA,OAAO;IACL,aAAY,MANO,kBAAkB,UAAU,UAAU,SAAS;KAClE,SAAS;KACT,oBAAoB;KACpB,cAAc,MAAM,yBAAyB,IAAI,UAAU,UAAU,CAAC,GAAG,OAAO,GAAG,EAAE;IACvF,CAAC,EAAA,CAEoB;IACnB,eAAe,WAAW,IAAI,WAAW,kBAAkB;GAC7D;EACF,SAAS,OAAO;GACd,MAAM,WAAW,IAAI,WAAW,kBAAkB;GAClD,MAAM;EACR;CACF,EACF;CACA,SAAS,MAAM,WAAW;EACxB,OAAO,QAAQ,aAAa;GAC1B,SAAS,QAAQ,sCAAsC,QAAQ;EACjE,CAAC;CACH,CAAC;CACD,OAAO;EACL,OAAO,EAAE,WAAW,MAAM,sBAAsB,MAAM,SAAS,IAAI,EAAE,EAAE;EACvE;CACF;AACF,CAAC;;;AChDD,MAAM,wBAAwB;AAC9B,MAAM,2BAA2B;;AAGjC,SAAS,qBAAqB,QAAiC;CAC7D,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC,WAAW,GAAG,GAAG,OAAO;CAChD,MAAM,QAAiB,KAAK,MAAM,MAAM;CACxC,IACE,OAAO,UAAU,YACjB,UAAU,QACV,EAAE,UAAU,UACZ,MAAM,SAAS,yBACf,EAAE,aAAa,UACf,MAAM,YAAY,4BAClB,EAAE,aAAa,UACf,CAAC,MAAM,QAAQ,MAAM,OAAO,KAC5B,CAAC,MAAM,QAAQ,OAAO,SAAkC,OAAO,SAAS,QAAQ,GAEhF,MAAM,IAAI,MAAM,iCAAiC;CAEnD,OAAO,MAAM;AACf;AAEA,SAAgB,0BAA0B,MAA+B,IAAqC;CAC5G,OAAO;EACL,MAAM;EACN,aAAa;EACb,MAAM,QAAQ,MAAM,WAAW;GAC7B,MAAM,YAAY,MAAM,qBAAqB,IAAI,UAAU,UAAU,kBAAkB;GACvF,IAAI,YAAY,aAAa,IAAI;GACjC,IAAI,UAAU;GACd,IAAI,UAAU,WAAW,GAAG;IAC1B,MAAM,UAAU;KACd,QAAQ,CAAC,GAAG,UAAU,UAAU,OAAO;KACvC,WAAW,CAAC,GAAG,UAAU,UAAU,OAAO;KAC1C;IACF;IACA,MAAM,WAAW,MAAM,UAAU,OAAO,QAAQ;KAC9C,MAAM;KACN,OAAO,YAAY,OAAO;KAC1B,SAAS,oBAAoB,OAAO,CAAC,CAAC,KAAK,WAAW;MAAE;MAAO,OAAO;KAAM,EAAE;IAChF,CAAC;IACD,IAAI,OAAO,aAAa,YAAY,CAAC,UAAU;IAC/C,MAAM,UAAU,qBAAqB,QAAQ;IAC7C,UAAU,YAAY;IACtB,YAAY,WAAW,eAAe,QAAQ,WAAW,mBAAmB,QAAQ,CAAC;GACvF;GACA,YAAY,qBAAqB,SAAS;GAC1C,MAAM,UAAU,UAAU,QAAQ,SAAS,CAAC,UAAU,SAAS,IAAI,CAAC;GACpE,IAAI,QAAQ,SAAS,GAAG,MAAM,IAAI,MAAM,mBAAmB,QAAQ,KAAK,IAAI,GAAG;GAC/E,IAAI,SAAS;IACX,MAAM,SAAS,IAAI,IAAI,SAAS;IAChC,MAAM,UAAU,IAAI,IAAI,UAAU,UAAU,OAAO;IACnD,YAAY,CACV,GAAG,UAAU,UAAU,QAAQ,QAAQ,SAAS,OAAO,IAAI,IAAI,CAAC,GAChE,GAAG,UAAU,QAAQ,SAAS,OAAO,IAAI,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CACtE;GACF;GACA,IACE,UAAU,WAAW,UAAU,UAAU,QAAQ,UACjD,UAAU,OAAO,MAAM,UAAU,SAAS,UAAU,UAAU,QAAQ,MAAM,GAE5E;GAEF,MAAM,KAAK,gBAAgB;IAAE,MAAM;IAAW,SAAS;GAAU,CAAC;GAGlE,MAAM,aAAwC;IAAE,SAAS;IAAG,UAAU,KAAK,IAAI;GAAE;GACjF,MAAM,UAAU,QAAQ,kBAAkB,kCAAkC,UAAU;EACxF;CACF;AACF;;;ACjFA,IAAA,2BAAe,0BACZ,EAAE,OAAO,cACR,QAAQ,0BAA0B,OAAO,cAAc,OAAO,CAAC,IAAI,KAAA,GACrE,EAAE,aAAa,WAAW,CAC5B;;;ACHA,IAAA,yBAAe,0BACZ,YAAkE,QAAQ,KAAK,WAChF,EAAE,aAAa,OAAO,CACxB;;;ACNA,IAAA,gCAAe,eAAe;CAC5B,MAAM;CACN,aACE;CACF,MAAM;EAAE,OAAO,EAAE,cAAc,OAAO;EAAG,aAAa;GAAE,MAAM;GAAkB,MAAM;EAAO;CAAE;CAC/F,MAAM;CACN,MAAM,oBAAoB,YAAY,KAAK,uCAAuC;CAClF,YAAY,oBAAoB,YAAY,KAAK,uCAAuC;AAC1F,CAAC;;;ACAD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAM,QAAc,OAA6C,YAA6B;CAC5F,MAAM,WAAW,OAAO,UAAU,aAAc,MAA4B,OAAO,IAAI;CACvF,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAa;AAC5D;;AAEA,MAAM,WAAc,WAClB,OAAO,QAAQ,UAAsB,UAAU,KAAA,CAAS;AAC1D,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,QAAQ,mBAAmB;CACtC,MAAM;CACN,mBAAmB,+BAA+BA,mBAAW;CAC7D,SAAS,OAAO,YAAY;EAC1B,MAAM,eAAe,MAAMA,oBAAY,OAAO;EAC9C,MAAM,iBAAiB;GAAE,GAAG;GAAS,MAAM,aAAa;EAAM;EAC9D,OAAO;GACL,GAAG,iBAAiB,YAAY;GAChC,IAAI,WAAgD;IAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,UAAU,GAAG,GAAGC,0BAAgB,cAAc,CAAC,CAAC,CAAC;GAAG;GACtI,IAAI,YAAkD;IAAE,OAAO,CAAC,GAAG,KAAKC,wBAAiB,cAAc,GAAG,GAAGC,+BAAwB,cAAc,CAAC;GAAG;GACvJ,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;GAC3C,IAAI,aAAoD;IAAE,OAAO,CAAC,GAAI,aAAa,cAAc,CAAC,CAAE;GAAG;EACzG;CACF;AACF,CAAC"}
|
package/dist/mcp.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_mcpFilter = require("./mcpFilter-
|
|
2
|
+
const require_mcpFilter = require("./mcpFilter-CghXZ2K-.cjs");
|
|
3
3
|
let _agimon_ai_po_config_agentPluginMcp = require("@agimon-ai/po-config/agentPluginMcp");
|
|
4
4
|
let _agimon_ai_po_core_mcpSession = require("@agimon-ai/po-core/mcpSession");
|
|
5
5
|
//#region src/services/mcpSessionEnvironment/index.ts
|
package/dist/mcp.d.mts
CHANGED
|
@@ -2,17 +2,10 @@ import { r as JsonObject } from "./resources-BEjxE3Zn.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 { DoomMcpSessionAllowlist } from "@agimon-ai/po-core/mcpSession";
|
|
5
|
-
|
|
5
|
+
import "@agimon-ai/po-core/platform";
|
|
6
|
+
//#region src/services/mcpFilter/core.d.ts
|
|
6
7
|
/** Server name in .mcp.json whose upstreams are declared in mcp-config.yaml. */
|
|
7
8
|
export declare const PROXY_SERVER_NAME = "agiflow-proxy";
|
|
8
|
-
/**
|
|
9
|
-
* Unions the mcp allowlists of the selected domains.
|
|
10
|
-
*
|
|
11
|
-
* Returns undefined when any selected domain omits `mcp`, which means "give me
|
|
12
|
-
* everything". Filtering only kicks in once every selected domain has opted in,
|
|
13
|
-
* so a domain that has not been migrated yet cannot silently lose its tools.
|
|
14
|
-
*/
|
|
15
|
-
export declare function resolveMcpAllowlist(repoRoot: string, domainNames: string[]): DomainMcpAllowlist | undefined;
|
|
16
9
|
/** Drops servers that are not on the allowlist. An empty list means keep all. */
|
|
17
10
|
export declare function filterMcpServers(config: JsonObject, allowed?: string[]): JsonObject;
|
|
18
11
|
/**
|
|
@@ -23,6 +16,14 @@ export declare function filterMcpServers(config: JsonObject, allowed?: string[])
|
|
|
23
16
|
* source file are not preserved; the result is a per-run temporary file.
|
|
24
17
|
*/
|
|
25
18
|
export declare function filterProxyConfig(yamlText: string, allowed?: string[]): string;
|
|
19
|
+
//#endregion
|
|
20
|
+
//#region src/services/mcpFilter/index.d.ts
|
|
21
|
+
/**
|
|
22
|
+
* Unions the mcp allowlists of the selected domains; see `mcpAllowlistOf`.
|
|
23
|
+
*
|
|
24
|
+
* Node-only: reads domains through the sync config shim. Use `resolveMcpAllowlistAsync` with a FileSystem.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveMcpAllowlist(repoRoot: string, domainNames: string[]): DomainMcpAllowlist | undefined;
|
|
26
27
|
/**
|
|
27
28
|
* Copies a generated MCP config out of the run directory so another frontend
|
|
28
29
|
* can use it, keeping the proxy's --config pointing at the copy.
|
package/dist/mcp.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.mts","names":[],"sources":["../src/services/mcpFilter/index.ts","../src/services/mcpSessionEnvironment/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp.d.mts","names":[],"sources":["../src/services/mcpFilter/core.ts","../src/services/mcpFilter/index.ts","../src/services/mcpSessionEnvironment/index.ts"],"mappings":";;;;;;;qBAca;;wBAKG,iBAAiB,QAAQ,YAAY,qBAAqB;;;;;;;;wBAiB1D,kBAAkB,kBAAkB;;;;;;;;wBCRpC,oBAAoB,kBAAkB,wBAAwB;;;;;;;;wBAqBxD,iBACpB,0BACA,4BACA,0BACC;;;;;wBA8BmB,kBACpB,QAAQ,YACR,WAAW,gCACX,kBACA,6BACC,QAAQ;;;UClFM;WACN;WACA;WACA;WACA;WACA,YAAY;;;wBAIP,sBAAsB,OAAO,6BAA6B"}
|
package/dist/mcp.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as filterMcpServers, i as PROXY_SERVER_NAME, n as persistMcpConfig, o as filterProxyConfig, r as resolveMcpAllowlist, t as applyMcpAllowlist } from "./mcpFilter-CKUbKmxz.mjs";
|
|
2
2
|
import { normalizeAgentPluginMcpSource } from "@agimon-ai/po-config/agentPluginMcp";
|
|
3
3
|
import { doomMcpSessionEnvironment } from "@agimon-ai/po-core/mcpSession";
|
|
4
4
|
//#region src/services/mcpSessionEnvironment/index.ts
|