@agimon-ai/doompi-skill 0.0.1-alpha.53 → 0.0.1-alpha.55
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/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/api-contracts.cjs +7 -0
- package/dist/api-contracts.d.cts +2 -0
- package/dist/api-contracts.d.mts +2 -0
- package/dist/api-contracts.mjs +2 -0
- package/dist/catalog.cjs +4 -0
- package/dist/catalog.d.cts +2 -0
- package/dist/catalog.d.mts +2 -0
- package/dist/catalog.mjs +2 -0
- package/dist/extensions/mcp.cjs +53 -0
- package/dist/extensions/mcp.cjs.map +1 -0
- package/dist/extensions/mcp.d.cts +5 -0
- package/dist/extensions/mcp.d.cts.map +1 -0
- package/dist/extensions/mcp.d.mts +5 -0
- package/dist/extensions/mcp.d.mts.map +1 -0
- package/dist/extensions/mcp.mjs +48 -0
- package/dist/extensions/mcp.mjs.map +1 -0
- package/dist/extensions/pi.cjs +41 -0
- package/dist/extensions/pi.cjs.map +1 -0
- package/dist/extensions/pi.d.cts +5 -0
- package/dist/extensions/pi.d.cts.map +1 -0
- package/dist/extensions/pi.d.mts +5 -0
- package/dist/extensions/pi.d.mts.map +1 -0
- package/dist/extensions/pi.mjs +36 -0
- package/dist/extensions/pi.mjs.map +1 -0
- package/dist/extensions/server.cjs +42 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.cts +5 -0
- package/dist/extensions/server.d.cts.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +37 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/index.cjs +11 -0
- package/dist/index.d.cts +4 -0
- package/dist/index.d.mts +4 -0
- package/dist/index.mjs +4 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillCommands.cjs +46 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillCommands.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillCommands.mjs +46 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillCommands.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillReadiness.cjs +110 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillReadiness.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillReadiness.mjs +109 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillReadiness.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillRuntime.cjs +105 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillRuntime.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillRuntime.mjs +105 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillRuntime.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillServer.cjs +25 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillServer.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillServer.mjs +25 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillServer.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillsCommand.cjs +37 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillsCommand.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillsCommand.mjs +37 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/skillsCommand.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/skills.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/skills.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/skills.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/skills.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/skills.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/skills.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/skills.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/skills.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/input.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/input.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/input.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/input.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/help.cli.cjs +17 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/help.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/help.cli.mjs +18 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/help.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/skills.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/skills.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/skills.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/skills.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +18 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +19 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +16 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +17 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +1 -0
- package/dist/src/schemas/apiContracts.cjs +13 -0
- package/dist/src/schemas/apiContracts.cjs.map +1 -0
- package/dist/src/schemas/apiContracts.d.cts +53 -0
- package/dist/src/schemas/apiContracts.d.cts.map +1 -0
- package/dist/src/schemas/apiContracts.d.mts +53 -0
- package/dist/src/schemas/apiContracts.d.mts.map +1 -0
- package/dist/src/schemas/apiContracts.mjs +13 -0
- package/dist/src/schemas/apiContracts.mjs.map +1 -0
- package/dist/src/services/deferredSkills/index.cjs +175 -0
- package/dist/src/services/deferredSkills/index.cjs.map +1 -0
- package/dist/src/services/deferredSkills/index.mjs +170 -0
- package/dist/src/services/deferredSkills/index.mjs.map +1 -0
- package/dist/src/services/helpSkills/index.cjs +96 -0
- package/dist/src/services/helpSkills/index.cjs.map +1 -0
- package/dist/src/services/helpSkills/index.mjs +95 -0
- package/dist/src/services/helpSkills/index.mjs.map +1 -0
- package/dist/src/services/mcpSkills/index.cjs +40 -0
- package/dist/src/services/mcpSkills/index.cjs.map +1 -0
- package/dist/src/services/mcpSkills/index.mjs +39 -0
- package/dist/src/services/mcpSkills/index.mjs.map +1 -0
- package/dist/src/services/serverInventory/index.cjs +141 -0
- package/dist/src/services/serverInventory/index.cjs.map +1 -0
- package/dist/src/services/serverInventory/index.mjs +138 -0
- package/dist/src/services/serverInventory/index.mjs.map +1 -0
- package/dist/src/services/skillCatalog/index.cjs +193 -0
- package/dist/src/services/skillCatalog/index.cjs.map +1 -0
- package/dist/src/services/skillCatalog/index.d.cts +65 -0
- package/dist/src/services/skillCatalog/index.d.cts.map +1 -0
- package/dist/src/services/skillCatalog/index.d.mts +65 -0
- package/dist/src/services/skillCatalog/index.d.mts.map +1 -0
- package/dist/src/services/skillCatalog/index.mjs +188 -0
- package/dist/src/services/skillCatalog/index.mjs.map +1 -0
- package/dist/src/services/skillText/index.cjs +17 -0
- package/dist/src/services/skillText/index.cjs.map +1 -0
- package/dist/src/services/skillText/index.d.cts +12 -0
- package/dist/src/services/skillText/index.d.cts.map +1 -0
- package/dist/src/services/skillText/index.d.mts +12 -0
- package/dist/src/services/skillText/index.d.mts.map +1 -0
- package/dist/src/services/skillText/index.mjs +17 -0
- package/dist/src/services/skillText/index.mjs.map +1 -0
- package/dist/src/tui/skillsOverlay.cjs +361 -0
- package/dist/src/tui/skillsOverlay.cjs.map +1 -0
- package/dist/src/tui/skillsOverlay.d.cts +17 -0
- package/dist/src/tui/skillsOverlay.d.cts.map +1 -0
- package/dist/src/tui/skillsOverlay.d.mts +17 -0
- package/dist/src/tui/skillsOverlay.d.mts.map +1 -0
- package/dist/src/tui/skillsOverlay.mjs +356 -0
- package/dist/src/tui/skillsOverlay.mjs.map +1 -0
- package/dist/src/types/skills.cjs +36 -0
- package/dist/src/types/skills.cjs.map +1 -0
- package/dist/src/types/skills.d.cts +32 -0
- package/dist/src/types/skills.d.cts.map +1 -0
- package/dist/src/types/skills.d.mts +32 -0
- package/dist/src/types/skills.d.mts.map +1 -0
- package/dist/src/types/skills.mjs +32 -0
- package/dist/src/types/skills.mjs.map +1 -0
- package/package.json +17 -9
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.__toESM = __toESM;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
5
|
+
const require_apiContracts = require("./src/schemas/apiContracts.cjs");
|
|
6
|
+
exports.apiContracts = require_apiContracts.apiContracts;
|
|
7
|
+
exports.default = require_apiContracts.apiContracts;
|
package/dist/catalog.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { SkillCatalog, SkillCatalogOptions, SkillEntry, SkillGroup, SkillOwnerNode, buildSkillCatalog, counter } from "./src/services/skillCatalog/index.cjs";
|
|
2
|
+
export { type SkillCatalog, type SkillCatalogOptions, type SkillEntry, type SkillGroup, type SkillOwnerNode, buildSkillCatalog, counter };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { SkillCatalog, SkillCatalogOptions, SkillEntry, SkillGroup, SkillOwnerNode, buildSkillCatalog, counter } from "./src/services/skillCatalog/index.mjs";
|
|
2
|
+
export { type SkillCatalog, type SkillCatalogOptions, type SkillEntry, type SkillGroup, type SkillOwnerNode, buildSkillCatalog, counter };
|
package/dist/catalog.mjs
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
5
|
+
let _agimon_ai_doompi_core_mcp_facet = require("@agimon-ai/doompi-core/mcp-facet");
|
|
6
|
+
let _agimon_ai_doompi_core_extension_file = require("@agimon-ai/doompi-core/extension-file");
|
|
7
|
+
let _agimon_ai_doompi_core_server_facet = require("@agimon-ai/doompi-core/server-facet");
|
|
8
|
+
//#region src/services/mcpSkills/index.ts
|
|
9
|
+
const MCP_SKILLS_SERVICE = "doom/discovered-mcp-skills";
|
|
10
|
+
function bindMcpSkills(context) {
|
|
11
|
+
const provider = context.services.get(MCP_SKILLS_SERVICE);
|
|
12
|
+
if (!provider) throw new Error("Discovered MCP skills are unavailable.");
|
|
13
|
+
return provider.list(context);
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/extensions/workspaces/sessions/(backend)/skill/discovered.mcp.ts
|
|
17
|
+
var discovered_mcp_default = (0, _agimon_ai_doompi_core_extension_file.defineRoutedContribution)(bindMcpSkills, { cardinality: "many" });
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/extensions/workspaces/sessions/(backend)/skill/doompi-author-skill.mcp.ts
|
|
20
|
+
var doompi_author_skill_mcp_default = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpSkill)({
|
|
21
|
+
name: "doompi-author-skill",
|
|
22
|
+
description: "Author and distribute DoomPi agent skills. Use when creating a SKILL.md, adding supporting references or scripts, contributing a runtime skill directory through Cordis, or publishing activation-gated Help prompts from a DoomPi package.",
|
|
23
|
+
read: () => (0, _agimon_ai_doompi_core_server_facet.readPackageResource)(require("url").pathToFileURL(__filename).href, "src/prompts/doompi-author-skill/SKILL.md")
|
|
24
|
+
});
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/extensions/workspaces/sessions/(backend)/skill/doompi-use-skill.mcp.ts
|
|
27
|
+
var doompi_use_skill_mcp_default = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpSkill)({
|
|
28
|
+
name: "doompi-use-skill",
|
|
29
|
+
description: "Use DoomPi's skill catalog and deferred discovery. Use when browsing available skills, invoking /skill:name, understanding Help and extension-owned skill groups, or diagnosing why a skill is absent or shadowed.",
|
|
30
|
+
read: () => (0, _agimon_ai_doompi_core_server_facet.readPackageResource)(require("url").pathToFileURL(__filename).href, "src/prompts/doompi-use-skill/SKILL.md")
|
|
31
|
+
});
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region generated/mcp.ts
|
|
34
|
+
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
35
|
+
const many = (value, context) => {
|
|
36
|
+
const resolved = typeof value === "function" ? value(context) : value;
|
|
37
|
+
return Array.isArray(resolved) ? resolved : [resolved];
|
|
38
|
+
};
|
|
39
|
+
const mcp = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpPlugin)({
|
|
40
|
+
name: "@agimon-ai/doompi-skill",
|
|
41
|
+
session: (context) => ({ get skills() {
|
|
42
|
+
return [
|
|
43
|
+
...many(discovered_mcp_default, context),
|
|
44
|
+
at(doompi_author_skill_mcp_default, context),
|
|
45
|
+
at(doompi_use_skill_mcp_default, context)
|
|
46
|
+
];
|
|
47
|
+
} })
|
|
48
|
+
});
|
|
49
|
+
//#endregion
|
|
50
|
+
exports.default = mcp;
|
|
51
|
+
exports.mcp = mcp;
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=mcp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.cjs","names":["defineRoutedContribution","defineMcpSkill","readPackageResource","defineMcpSkill","readPackageResource","defineMcpPlugin","skillDiscovered","skillDoompiAuthorSkill","skillDoompiUseSkill"],"sources":["../../src/services/mcpSkills/index.ts","../../src/extensions/workspaces/sessions/(backend)/skill/discovered.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-skill.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-skill.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\n\nimport type { DoomMcpPluginContext, DoomMcpSkill } from '@agimon-ai/doompi-core/mcp-facet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport type { ServerSkillGroup } from '../serverInventory';\n\nexport const MCP_SKILLS_SERVICE = 'doom/discovered-mcp-skills';\n\nexport interface McpSkillProvider {\n list(context: DoomMcpPluginContext): readonly DoomMcpSkill[];\n}\n\n/** Explicit remote provider, never a projection of the local resource registry. */\nexport function mountMcpSkills(groups: readonly ServerSkillGroup[], signal: AbortSignal) {\n return (context: Context): void => {\n context.provide(MCP_SKILLS_SERVICE, {\n list(remote) {\n signal.throwIfAborted();\n remote.signal.throwIfAborted();\n const domains = remote.selection.read().domains;\n const skills = new Map<string, DoomMcpSkill>();\n for (const group of groups) {\n if (group.domain !== undefined && !domains.includes(group.domain)) continue;\n for (const skill of group.skills) {\n // Match command precedence, including shared copies across domains.\n if (skills.has(skill.name)) continue;\n skills.set(skill.name, {\n name: skill.name,\n description: skill.description,\n async read() {\n const readSignal = AbortSignal.any([signal, remote.signal]);\n readSignal.throwIfAborted();\n const text = await readFile(skill.filePath, { encoding: 'utf8', signal: readSignal });\n readSignal.throwIfAborted();\n return text;\n },\n });\n }\n }\n return [...skills.values()];\n },\n } satisfies McpSkillProvider);\n };\n}\n\nexport function bindMcpSkills(context: DoomMcpPluginContext): readonly DoomMcpSkill[] {\n const provider = context.services.get<McpSkillProvider>(MCP_SKILLS_SERVICE);\n if (!provider) throw new Error('Discovered MCP skills are unavailable.');\n return provider.list(context);\n}\n","import { defineRoutedContribution } from '@agimon-ai/doompi-core/extension-file';\n\nimport { bindMcpSkills } from '../../../../../services/mcpSkills';\n\nexport default defineRoutedContribution(bindMcpSkills, { cardinality: 'many' });\n","import { defineMcpSkill } from '@agimon-ai/doompi-core/mcp-facet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/server-facet';\n\nexport default defineMcpSkill({\n name: 'doompi-author-skill',\n description:\n 'Author and distribute DoomPi agent skills. Use when creating a SKILL.md, adding supporting references or scripts, contributing a runtime skill directory through Cordis, or publishing activation-gated Help prompts from a DoomPi package.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-author-skill/SKILL.md'),\n});\n","import { defineMcpSkill } from '@agimon-ai/doompi-core/mcp-facet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/server-facet';\n\nexport default defineMcpSkill({\n name: 'doompi-use-skill',\n description:\n \"Use DoomPi's skill catalog and deferred discovery. Use when browsing available skills, invoking /skill:name, understanding Help and extension-owned skill groups, or diagnosing why a skill is absent or shadowed.\",\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-use-skill/SKILL.md'),\n});\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport skillDiscovered from '../src/extensions/workspaces/sessions/(backend)/skill/discovered.mcp';\nimport skillDoompiAuthorSkill from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-skill.mcp';\nimport skillDoompiUseSkill from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-skill.mcp';\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\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-skill',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [...many(skillDiscovered, context), at(skillDoompiAuthorSkill, context), at(skillDoompiUseSkill, context)]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;;AAOA,MAAa,qBAAqB;AAuClC,SAAgB,cAAc,SAAwD;CACpF,MAAM,WAAW,QAAQ,SAAS,IAAsB,kBAAkB;CAC1E,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,wCAAwC;CACvE,OAAO,SAAS,KAAK,OAAO;AAC9B;;;AC9CA,IAAA,0BAAA,GAAeA,sCAAAA,yBAAAA,CAAyB,eAAe,EAAE,aAAa,OAAO,CAAC;;;ACD9E,IAAA,mCAAA,GAAeC,iCAAAA,eAAAA,CAAe;CAC5B,MAAM;CACN,aACE;CACF,aAAA,GAAYC,oCAAAA,oBAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,MAAqC,0CAA0C;AAC7F,CAAC;;;ACLD,IAAA,gCAAA,GAAeC,iCAAAA,eAAAA,CAAe;CAC5B,MAAM;CACN,aACE;CACF,aAAA,GAAYC,oCAAAA,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,MAAa,OAAA,GAAMC,iCAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,SAAyC;EAAE,OAAO;GAAC,GAAG,KAAKC,wBAAiB,OAAO;GAAG,GAAGC,iCAAwB,OAAO;GAAG,GAAGC,8BAAqB,OAAO;EAAC;CAAG,EACpK;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.cts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBAgBa,gDAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBAgBa,gDAAG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { defineMcpPlugin, defineMcpSkill } from "@agimon-ai/doompi-core/mcp-facet";
|
|
2
|
+
import { defineRoutedContribution } from "@agimon-ai/doompi-core/extension-file";
|
|
3
|
+
import { readPackageResource } from "@agimon-ai/doompi-core/server-facet";
|
|
4
|
+
//#region src/services/mcpSkills/index.ts
|
|
5
|
+
const MCP_SKILLS_SERVICE = "doom/discovered-mcp-skills";
|
|
6
|
+
function bindMcpSkills(context) {
|
|
7
|
+
const provider = context.services.get(MCP_SKILLS_SERVICE);
|
|
8
|
+
if (!provider) throw new Error("Discovered MCP skills are unavailable.");
|
|
9
|
+
return provider.list(context);
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/extensions/workspaces/sessions/(backend)/skill/discovered.mcp.ts
|
|
13
|
+
var discovered_mcp_default = defineRoutedContribution(bindMcpSkills, { cardinality: "many" });
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region src/extensions/workspaces/sessions/(backend)/skill/doompi-author-skill.mcp.ts
|
|
16
|
+
var doompi_author_skill_mcp_default = defineMcpSkill({
|
|
17
|
+
name: "doompi-author-skill",
|
|
18
|
+
description: "Author and distribute DoomPi agent skills. Use when creating a SKILL.md, adding supporting references or scripts, contributing a runtime skill directory through Cordis, or publishing activation-gated Help prompts from a DoomPi package.",
|
|
19
|
+
read: () => readPackageResource(import.meta.url, "src/prompts/doompi-author-skill/SKILL.md")
|
|
20
|
+
});
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/extensions/workspaces/sessions/(backend)/skill/doompi-use-skill.mcp.ts
|
|
23
|
+
var doompi_use_skill_mcp_default = defineMcpSkill({
|
|
24
|
+
name: "doompi-use-skill",
|
|
25
|
+
description: "Use DoomPi's skill catalog and deferred discovery. Use when browsing available skills, invoking /skill:name, understanding Help and extension-owned skill groups, or diagnosing why a skill is absent or shadowed.",
|
|
26
|
+
read: () => readPackageResource(import.meta.url, "src/prompts/doompi-use-skill/SKILL.md")
|
|
27
|
+
});
|
|
28
|
+
//#endregion
|
|
29
|
+
//#region generated/mcp.ts
|
|
30
|
+
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
31
|
+
const many = (value, context) => {
|
|
32
|
+
const resolved = typeof value === "function" ? value(context) : value;
|
|
33
|
+
return Array.isArray(resolved) ? resolved : [resolved];
|
|
34
|
+
};
|
|
35
|
+
const mcp = defineMcpPlugin({
|
|
36
|
+
name: "@agimon-ai/doompi-skill",
|
|
37
|
+
session: (context) => ({ get skills() {
|
|
38
|
+
return [
|
|
39
|
+
...many(discovered_mcp_default, context),
|
|
40
|
+
at(doompi_author_skill_mcp_default, context),
|
|
41
|
+
at(doompi_use_skill_mcp_default, context)
|
|
42
|
+
];
|
|
43
|
+
} })
|
|
44
|
+
});
|
|
45
|
+
//#endregion
|
|
46
|
+
export { mcp as default, mcp };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=mcp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.mjs","names":["skillDiscovered","skillDoompiAuthorSkill","skillDoompiUseSkill"],"sources":["../../src/services/mcpSkills/index.ts","../../src/extensions/workspaces/sessions/(backend)/skill/discovered.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-skill.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-skill.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\n\nimport type { DoomMcpPluginContext, DoomMcpSkill } from '@agimon-ai/doompi-core/mcp-facet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport type { ServerSkillGroup } from '../serverInventory';\n\nexport const MCP_SKILLS_SERVICE = 'doom/discovered-mcp-skills';\n\nexport interface McpSkillProvider {\n list(context: DoomMcpPluginContext): readonly DoomMcpSkill[];\n}\n\n/** Explicit remote provider, never a projection of the local resource registry. */\nexport function mountMcpSkills(groups: readonly ServerSkillGroup[], signal: AbortSignal) {\n return (context: Context): void => {\n context.provide(MCP_SKILLS_SERVICE, {\n list(remote) {\n signal.throwIfAborted();\n remote.signal.throwIfAborted();\n const domains = remote.selection.read().domains;\n const skills = new Map<string, DoomMcpSkill>();\n for (const group of groups) {\n if (group.domain !== undefined && !domains.includes(group.domain)) continue;\n for (const skill of group.skills) {\n // Match command precedence, including shared copies across domains.\n if (skills.has(skill.name)) continue;\n skills.set(skill.name, {\n name: skill.name,\n description: skill.description,\n async read() {\n const readSignal = AbortSignal.any([signal, remote.signal]);\n readSignal.throwIfAborted();\n const text = await readFile(skill.filePath, { encoding: 'utf8', signal: readSignal });\n readSignal.throwIfAborted();\n return text;\n },\n });\n }\n }\n return [...skills.values()];\n },\n } satisfies McpSkillProvider);\n };\n}\n\nexport function bindMcpSkills(context: DoomMcpPluginContext): readonly DoomMcpSkill[] {\n const provider = context.services.get<McpSkillProvider>(MCP_SKILLS_SERVICE);\n if (!provider) throw new Error('Discovered MCP skills are unavailable.');\n return provider.list(context);\n}\n","import { defineRoutedContribution } from '@agimon-ai/doompi-core/extension-file';\n\nimport { bindMcpSkills } from '../../../../../services/mcpSkills';\n\nexport default defineRoutedContribution(bindMcpSkills, { cardinality: 'many' });\n","import { defineMcpSkill } from '@agimon-ai/doompi-core/mcp-facet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/server-facet';\n\nexport default defineMcpSkill({\n name: 'doompi-author-skill',\n description:\n 'Author and distribute DoomPi agent skills. Use when creating a SKILL.md, adding supporting references or scripts, contributing a runtime skill directory through Cordis, or publishing activation-gated Help prompts from a DoomPi package.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-author-skill/SKILL.md'),\n});\n","import { defineMcpSkill } from '@agimon-ai/doompi-core/mcp-facet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/server-facet';\n\nexport default defineMcpSkill({\n name: 'doompi-use-skill',\n description:\n \"Use DoomPi's skill catalog and deferred discovery. Use when browsing available skills, invoking /skill:name, understanding Help and extension-owned skill groups, or diagnosing why a skill is absent or shadowed.\",\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-use-skill/SKILL.md'),\n});\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport skillDiscovered from '../src/extensions/workspaces/sessions/(backend)/skill/discovered.mcp';\nimport skillDoompiAuthorSkill from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-skill.mcp';\nimport skillDoompiUseSkill from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-skill.mcp';\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\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-skill',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [...many(skillDiscovered, context), at(skillDoompiAuthorSkill, context), at(skillDoompiUseSkill, context)]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;AAOA,MAAa,qBAAqB;AAuClC,SAAgB,cAAc,SAAwD;CACpF,MAAM,WAAW,QAAQ,SAAS,IAAsB,kBAAkB;CAC1E,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,wCAAwC;CACvE,OAAO,SAAS,KAAK,OAAO;AAC9B;;;AC9CA,IAAA,yBAAe,yBAAyB,eAAe,EAAE,aAAa,OAAO,CAAC;;;ACD9E,IAAA,kCAAe,eAAe;CAC5B,MAAM;CACN,aACE;CACF,YAAY,oBAAoB,YAAY,KAAK,0CAA0C;AAC7F,CAAC;;;ACLD,IAAA,+BAAe,eAAe;CAC5B,MAAM;CACN,aACE;CACF,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,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,SAAyC;EAAE,OAAO;GAAC,GAAG,KAAKA,wBAAiB,OAAO;GAAG,GAAGC,iCAAwB,OAAO;GAAG,GAAGC,8BAAqB,OAAO;EAAC;CAAG,EACpK;AACF,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
5
|
+
const require_root_cli = require("../src/extensions/workspaces/sessions/(backend)/root.cli.cjs");
|
|
6
|
+
const require_skills_cli = require("../src/extensions/workspaces/sessions/(backend)/command/skills.cli.cjs");
|
|
7
|
+
const require_beforeAgentStart_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.cjs");
|
|
8
|
+
const require_input_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/input.cli.cjs");
|
|
9
|
+
const require_sessionStart_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.cjs");
|
|
10
|
+
const require_help_cli = require("../src/extensions/workspaces/sessions/(backend)/resource/help.cli.cjs");
|
|
11
|
+
let _agimon_ai_doompi_core_pi_extension = require("@agimon-ai/doompi-core/pi-extension");
|
|
12
|
+
let _agimon_ai_doompi_core_extension_file = require("@agimon-ai/doompi-core/extension-file");
|
|
13
|
+
//#region generated/pi.ts
|
|
14
|
+
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
15
|
+
const extension = (0, _agimon_ai_doompi_core_pi_extension.definePiExtension)("@agimon-ai/doompi-skill", async (context) => {
|
|
16
|
+
const scopeSession = await require_root_cli.default(context);
|
|
17
|
+
const contextSession = {
|
|
18
|
+
...context,
|
|
19
|
+
root: scopeSession.value
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
...(0, _agimon_ai_doompi_core_extension_file.composeRootHooks)(scopeSession),
|
|
23
|
+
get commands() {
|
|
24
|
+
return [at(require_skills_cli.default, contextSession)];
|
|
25
|
+
},
|
|
26
|
+
events: {
|
|
27
|
+
before_agent_start: at(require_beforeAgentStart_cli.default, contextSession),
|
|
28
|
+
input: at(require_input_cli.default, contextSession),
|
|
29
|
+
session_start: at(require_sessionStart_cli.default, contextSession)
|
|
30
|
+
},
|
|
31
|
+
get resources() {
|
|
32
|
+
return [at(require_help_cli.default, contextSession)];
|
|
33
|
+
},
|
|
34
|
+
services: [...scopeSession.services ?? []]
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
//#endregion
|
|
38
|
+
exports.default = extension;
|
|
39
|
+
exports.extension = extension;
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=pi.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.cjs","names":["definePiExtension","rootSession","composeRootHooks","commandSkills","hookBeforeAgentStart","hookInput","hookSessionStart","resourceHelp"],"sources":["../../generated/pi.ts"],"sourcesContent":["// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/pi-extension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extension-file';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport commandSkills from '../src/extensions/workspaces/sessions/(backend)/command/skills.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli';\nimport hookInput from '../src/extensions/workspaces/sessions/(backend)/hook/input.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli';\nimport resourceHelp from '../src/extensions/workspaces/sessions/(backend)/resource/help.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof commandSkills> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookInput> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof resourceHelp>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\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;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-skill', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get commands(): PiPluginContributions['commands'] { return [at(commandSkills, contextSession)]; },\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n input: at(hookInput, contextSession) as NonNullable<PiPluginContributions['events']>['input'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n },\n get resources(): PiPluginContributions['resources'] { return [at(resourceHelp, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;;;;;;;;;;AAkBA,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAa,aAAA,GAAYA,oCAAAA,kBAAAA,CAAoC,2BAA2B,OAAO,YAAY;CACzG,MAAM,eAAe,MAAMC,iBAAAA,QAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,IAAA,GAAGC,sCAAAA,iBAAAA,CAAiB,YAAY;EAChC,IAAI,WAA8C;GAAE,OAAO,CAAC,GAAGC,mBAAAA,SAAe,cAAc,CAAC;EAAG;EAChG,QAAQ;GACN,oBAAoB,GAAGC,6BAAAA,SAAsB,cAAc;GAC3D,OAAO,GAAGC,kBAAAA,SAAW,cAAc;GACnC,eAAe,GAAGC,yBAAAA,SAAkB,cAAc;EACpD;EACA,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,iBAAAA,SAAc,cAAc,CAAC;EAAG;EACjG,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.d.cts","names":[],"sources":["../../generated/pi.ts"],"mappings":";qBAqBa,iEAAS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.d.mts","names":[],"sources":["../../generated/pi.ts"],"mappings":";qBAqBa,iEAAS"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import root_cli_default from "../src/extensions/workspaces/sessions/(backend)/root.cli.mjs";
|
|
2
|
+
import skills_cli_default from "../src/extensions/workspaces/sessions/(backend)/command/skills.cli.mjs";
|
|
3
|
+
import beforeAgentStart_cli_default from "../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.mjs";
|
|
4
|
+
import input_cli_default from "../src/extensions/workspaces/sessions/(backend)/hook/input.cli.mjs";
|
|
5
|
+
import sessionStart_cli_default from "../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.mjs";
|
|
6
|
+
import help_cli_default from "../src/extensions/workspaces/sessions/(backend)/resource/help.cli.mjs";
|
|
7
|
+
import { definePiExtension } from "@agimon-ai/doompi-core/pi-extension";
|
|
8
|
+
import { composeRootHooks } from "@agimon-ai/doompi-core/extension-file";
|
|
9
|
+
//#region generated/pi.ts
|
|
10
|
+
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
11
|
+
const extension = definePiExtension("@agimon-ai/doompi-skill", async (context) => {
|
|
12
|
+
const scopeSession = await root_cli_default(context);
|
|
13
|
+
const contextSession = {
|
|
14
|
+
...context,
|
|
15
|
+
root: scopeSession.value
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
...composeRootHooks(scopeSession),
|
|
19
|
+
get commands() {
|
|
20
|
+
return [at(skills_cli_default, contextSession)];
|
|
21
|
+
},
|
|
22
|
+
events: {
|
|
23
|
+
before_agent_start: at(beforeAgentStart_cli_default, contextSession),
|
|
24
|
+
input: at(input_cli_default, contextSession),
|
|
25
|
+
session_start: at(sessionStart_cli_default, contextSession)
|
|
26
|
+
},
|
|
27
|
+
get resources() {
|
|
28
|
+
return [at(help_cli_default, contextSession)];
|
|
29
|
+
},
|
|
30
|
+
services: [...scopeSession.services ?? []]
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
//#endregion
|
|
34
|
+
export { extension as default, extension };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=pi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.mjs","names":["rootSession","commandSkills","hookBeforeAgentStart","hookInput","hookSessionStart","resourceHelp"],"sources":["../../generated/pi.ts"],"sourcesContent":["// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/pi-extension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extension-file';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport commandSkills from '../src/extensions/workspaces/sessions/(backend)/command/skills.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli';\nimport hookInput from '../src/extensions/workspaces/sessions/(backend)/hook/input.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli';\nimport resourceHelp from '../src/extensions/workspaces/sessions/(backend)/resource/help.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof commandSkills> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookInput> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof resourceHelp>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\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;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-skill', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get commands(): PiPluginContributions['commands'] { return [at(commandSkills, contextSession)]; },\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n input: at(hookInput, contextSession) as NonNullable<PiPluginContributions['events']>['input'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n },\n get resources(): PiPluginContributions['resources'] { return [at(resourceHelp, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;;;;;;AAkBA,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAa,YAAY,kBAAoC,2BAA2B,OAAO,YAAY;CACzG,MAAM,eAAe,MAAMA,iBAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,GAAG,iBAAiB,YAAY;EAChC,IAAI,WAA8C;GAAE,OAAO,CAAC,GAAGC,oBAAe,cAAc,CAAC;EAAG;EAChG,QAAQ;GACN,oBAAoB,GAAGC,8BAAsB,cAAc;GAC3D,OAAO,GAAGC,mBAAW,cAAc;GACnC,eAAe,GAAGC,0BAAkB,cAAc;EACpD;EACA,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,kBAAc,cAAc,CAAC;EAAG;EACjG,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
5
|
+
const require_root_server = require("../src/extensions/workspaces/sessions/(backend)/root.server.cjs");
|
|
6
|
+
const require_skills_server = require("../src/extensions/workspaces/sessions/(backend)/command/skills.server.cjs");
|
|
7
|
+
const require_skills_server$1 = require("../src/extensions/workspaces/sessions/(backend)/resource/skills.server.cjs");
|
|
8
|
+
let _agimon_ai_doompi_core_extension_file = require("@agimon-ai/doompi-core/extension-file");
|
|
9
|
+
let _agimon_ai_doompi_core_server_facet = require("@agimon-ai/doompi-core/server-facet");
|
|
10
|
+
//#region generated/server.ts
|
|
11
|
+
const many = (value, context) => {
|
|
12
|
+
const resolved = typeof value === "function" ? value(context) : value;
|
|
13
|
+
return Array.isArray(resolved) ? resolved : [resolved];
|
|
14
|
+
};
|
|
15
|
+
const facet = (0, _agimon_ai_doompi_core_server_facet.defineServerPlugin)({
|
|
16
|
+
name: "@agimon-ai/doompi-skill",
|
|
17
|
+
session: async (context) => {
|
|
18
|
+
const scopeSession = await require_root_server.default(context);
|
|
19
|
+
const contextSession = {
|
|
20
|
+
...context,
|
|
21
|
+
root: scopeSession.value
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
...(0, _agimon_ai_doompi_core_extension_file.composeRootHooks)(scopeSession),
|
|
25
|
+
get commands() {
|
|
26
|
+
return [...many(require_skills_server.default, contextSession)];
|
|
27
|
+
},
|
|
28
|
+
get resources() {
|
|
29
|
+
return [...many(require_skills_server$1.default, contextSession)];
|
|
30
|
+
},
|
|
31
|
+
services: [...scopeSession.services ?? []],
|
|
32
|
+
get activities() {
|
|
33
|
+
return [...scopeSession.activities ?? []];
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
//#endregion
|
|
39
|
+
exports.default = facet;
|
|
40
|
+
exports.facet = facet;
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=server.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.cjs","names":["defineServerPlugin","rootSession","composeRootHooks","commandSkills","resourceSkills"],"sources":["../../generated/server.ts"],"sourcesContent":["// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/server-facet';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extension-file';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport commandSkills from '../src/extensions/workspaces/sessions/(backend)/command/skills.server';\nimport resourceSkills from '../src/extensions/workspaces/sessions/(backend)/resource/skills.server';\n\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\nexport const facet = defineServerPlugin({\n name: '@agimon-ai/doompi-skill',\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 [...many(commandSkills, contextSession)]; },\n get resources(): DoomServerSessionPlugin['resources'] { return [...many(resourceSkills, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): DoomServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default facet;\n"],"mappings":";;;;;;;;;;AASA,MAAM,QAAc,OAA6C,YAA6B;CAC5F,MAAM,WAAW,OAAO,UAAU,aAAc,MAA4B,OAAO,IAAI;CACvF,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAa;AAC5D;AAEA,MAAa,SAAA,GAAQA,oCAAAA,mBAAAA,CAAmB;CACtC,MAAM;CACN,SAAS,OAAO,YAAY;EAC1B,MAAM,eAAe,MAAMC,oBAAAA,QAAY,OAAO;EAC9C,MAAM,iBAAiB;GAAE,GAAG;GAAS,MAAM,aAAa;EAAM;EAC9D,OAAO;GACL,IAAA,GAAGC,sCAAAA,iBAAAA,CAAiB,YAAY;GAChC,IAAI,WAAgD;IAAE,OAAO,CAAC,GAAG,KAAKC,sBAAAA,SAAe,cAAc,CAAC;GAAG;GACvG,IAAI,YAAkD;IAAE,OAAO,CAAC,GAAG,KAAKC,wBAAAA,SAAgB,cAAc,CAAC;GAAG;GAC1G,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;GAC3C,IAAI,aAAoD;IAAE,OAAO,CAAC,GAAI,aAAa,cAAc,CAAC,CAAE;GAAG;EACzG;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.cts","names":[],"sources":["../../generated/server.ts"],"mappings":";qBAca,qDAAK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.mts","names":[],"sources":["../../generated/server.ts"],"mappings":";qBAca,qDAAK"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import root_server_default from "../src/extensions/workspaces/sessions/(backend)/root.server.mjs";
|
|
2
|
+
import skills_server_default from "../src/extensions/workspaces/sessions/(backend)/command/skills.server.mjs";
|
|
3
|
+
import skills_server_default$1 from "../src/extensions/workspaces/sessions/(backend)/resource/skills.server.mjs";
|
|
4
|
+
import { composeRootHooks } from "@agimon-ai/doompi-core/extension-file";
|
|
5
|
+
import { defineServerPlugin } from "@agimon-ai/doompi-core/server-facet";
|
|
6
|
+
//#region generated/server.ts
|
|
7
|
+
const many = (value, context) => {
|
|
8
|
+
const resolved = typeof value === "function" ? value(context) : value;
|
|
9
|
+
return Array.isArray(resolved) ? resolved : [resolved];
|
|
10
|
+
};
|
|
11
|
+
const facet = defineServerPlugin({
|
|
12
|
+
name: "@agimon-ai/doompi-skill",
|
|
13
|
+
session: async (context) => {
|
|
14
|
+
const scopeSession = await root_server_default(context);
|
|
15
|
+
const contextSession = {
|
|
16
|
+
...context,
|
|
17
|
+
root: scopeSession.value
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
...composeRootHooks(scopeSession),
|
|
21
|
+
get commands() {
|
|
22
|
+
return [...many(skills_server_default, contextSession)];
|
|
23
|
+
},
|
|
24
|
+
get resources() {
|
|
25
|
+
return [...many(skills_server_default$1, contextSession)];
|
|
26
|
+
},
|
|
27
|
+
services: [...scopeSession.services ?? []],
|
|
28
|
+
get activities() {
|
|
29
|
+
return [...scopeSession.activities ?? []];
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
//#endregion
|
|
35
|
+
export { facet as default, facet };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=server.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["rootSession","commandSkills","resourceSkills"],"sources":["../../generated/server.ts"],"sourcesContent":["// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/server-facet';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extension-file';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport commandSkills from '../src/extensions/workspaces/sessions/(backend)/command/skills.server';\nimport resourceSkills from '../src/extensions/workspaces/sessions/(backend)/resource/skills.server';\n\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\nexport const facet = defineServerPlugin({\n name: '@agimon-ai/doompi-skill',\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 [...many(commandSkills, contextSession)]; },\n get resources(): DoomServerSessionPlugin['resources'] { return [...many(resourceSkills, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): DoomServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default facet;\n"],"mappings":";;;;;;AASA,MAAM,QAAc,OAA6C,YAA6B;CAC5F,MAAM,WAAW,OAAO,UAAU,aAAc,MAA4B,OAAO,IAAI;CACvF,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAa;AAC5D;AAEA,MAAa,QAAQ,mBAAmB;CACtC,MAAM;CACN,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,CAAC,GAAG,KAAKC,uBAAe,cAAc,CAAC;GAAG;GACvG,IAAI,YAAkD;IAAE,OAAO,CAAC,GAAG,KAAKC,yBAAgB,cAAc,CAAC;GAAG;GAC1G,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/index.cjs
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_skills = require("./src/types/skills.cjs");
|
|
3
|
+
const require_index = require("./src/services/skillText/index.cjs");
|
|
4
|
+
const require_skillsOverlay = require("./src/tui/skillsOverlay.cjs");
|
|
5
|
+
exports.LEADER_SOURCE = require_skills.LEADER_SOURCE;
|
|
6
|
+
exports.SKILLS_COMMAND = require_skills.SKILLS_COMMAND;
|
|
7
|
+
exports.SKILLS_LEADER_CONTRIBUTION = require_skills.SKILLS_LEADER_CONTRIBUTION;
|
|
8
|
+
exports.SKILL_COMMAND_PREFIX = require_skills.SKILL_COMMAND_PREFIX;
|
|
9
|
+
exports.SKILL_INVOCATION_PREFIX = require_skills.SKILL_INVOCATION_PREFIX;
|
|
10
|
+
exports.openSkillsOverlay = require_skillsOverlay.openSkillsOverlay;
|
|
11
|
+
exports.skillInvocation = require_index.skillInvocation;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { skillInvocation } from "./src/services/skillText/index.cjs";
|
|
2
|
+
import { SkillsOverlayResult, openSkillsOverlay } from "./src/tui/skillsOverlay.cjs";
|
|
3
|
+
import { LEADER_SOURCE, SKILLS_COMMAND, SKILLS_LEADER_CONTRIBUTION, SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX } from "./src/types/skills.cjs";
|
|
4
|
+
export { LEADER_SOURCE, SKILLS_COMMAND, SKILLS_LEADER_CONTRIBUTION, SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX, type SkillsOverlayResult, openSkillsOverlay, skillInvocation };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { skillInvocation } from "./src/services/skillText/index.mjs";
|
|
2
|
+
import { SkillsOverlayResult, openSkillsOverlay } from "./src/tui/skillsOverlay.mjs";
|
|
3
|
+
import { LEADER_SOURCE, SKILLS_COMMAND, SKILLS_LEADER_CONTRIBUTION, SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX } from "./src/types/skills.mjs";
|
|
4
|
+
export { LEADER_SOURCE, SKILLS_COMMAND, SKILLS_LEADER_CONTRIBUTION, SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX, type SkillsOverlayResult, openSkillsOverlay, skillInvocation };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LEADER_SOURCE, SKILLS_COMMAND, SKILLS_LEADER_CONTRIBUTION, SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX } from "./src/types/skills.mjs";
|
|
2
|
+
import { skillInvocation } from "./src/services/skillText/index.mjs";
|
|
3
|
+
import { openSkillsOverlay } from "./src/tui/skillsOverlay.mjs";
|
|
4
|
+
export { LEADER_SOURCE, SKILLS_COMMAND, SKILLS_LEADER_CONTRIBUTION, SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX, openSkillsOverlay, skillInvocation };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const require_skills = require("../../../../../types/skills.cjs");
|
|
2
|
+
const require_index = require("../../../../../services/deferredSkills/index.cjs");
|
|
3
|
+
//#region src/extensions/workspaces/sessions/(backend)/_lib/skillCommands.ts
|
|
4
|
+
/**
|
|
5
|
+
* One command per skill, gated by whatever activates that skill.
|
|
6
|
+
*
|
|
7
|
+
* Expansion always reads the full inventory, not the group: a command is only
|
|
8
|
+
* dispatchable while its condition holds, so by the time one runs its skill is
|
|
9
|
+
* active, and looking it up in the union keeps one lookup table instead of one
|
|
10
|
+
* per domain.
|
|
11
|
+
*/
|
|
12
|
+
function skillCommand(skill, domain, inventory) {
|
|
13
|
+
return {
|
|
14
|
+
...domain === void 0 ? {} : { when: { domain } },
|
|
15
|
+
name: `${require_skills.SKILL_COMMAND_PREFIX}${skill.name}`,
|
|
16
|
+
description: skill.description,
|
|
17
|
+
execute: async (args, execution) => {
|
|
18
|
+
const text = `${require_skills.SKILL_INVOCATION_PREFIX}${skill.name}${args ? ` ${args}` : ""}`;
|
|
19
|
+
const expanded = require_index.expandDeferredSkillCommand(text, inventory.skills);
|
|
20
|
+
if (expanded === text) throw new Error(`Skill '${skill.name}' is no longer readable.`);
|
|
21
|
+
await execution.session.prompt(expanded);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function createSkillCommands(inventory, catalog, groups) {
|
|
26
|
+
return [{
|
|
27
|
+
name: require_skills.SKILLS_COMMAND,
|
|
28
|
+
description: "List discovered skills or invoke one by name.",
|
|
29
|
+
async execute(args, execution) {
|
|
30
|
+
const requested = args.trim();
|
|
31
|
+
if (requested) {
|
|
32
|
+
await execution.session.prompt(require_index.expandDeferredSkillCommand(`${require_skills.SKILL_INVOCATION_PREFIX}${requested}`, inventory.skills));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
await execution.client.notify({
|
|
36
|
+
title: "DoomPi skills",
|
|
37
|
+
body: catalog,
|
|
38
|
+
level: "info"
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}, ...groups.flatMap((group) => group.skills.map((skill) => skillCommand(skill, group.domain, inventory)))];
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
exports.createSkillCommands = createSkillCommands;
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=skillCommands.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillCommands.cjs","names":["SKILL_COMMAND_PREFIX","SKILL_INVOCATION_PREFIX","expandDeferredSkillCommand","SKILLS_COMMAND"],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/skillCommands.ts"],"sourcesContent":["import type { DoomHeadlessCommand } from '@agimon-ai/doompi-core/headless';\nimport type { Skill } from '@earendil-works/pi-coding-agent';\n\nimport { expandDeferredSkillCommand, type DeferredSkillSnapshot } from '../../../../../services/deferredSkills';\nimport type { ServerSkillGroup } from '../../../../../services/serverInventory';\nimport { SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX, SKILLS_COMMAND } from '../../../../../types/skills';\n\n/**\n * One command per skill, gated by whatever activates that skill.\n *\n * Expansion always reads the full inventory, not the group: a command is only\n * dispatchable while its condition holds, so by the time one runs its skill is\n * active, and looking it up in the union keeps one lookup table instead of one\n * per domain.\n */\nfunction skillCommand(skill: Skill, domain: string | undefined, inventory: DeferredSkillSnapshot): DoomHeadlessCommand {\n return {\n ...(domain === undefined ? {} : { when: { domain } }),\n name: `${SKILL_COMMAND_PREFIX}${skill.name}`,\n description: skill.description,\n execute: async (args, execution) => {\n const text = `${SKILL_INVOCATION_PREFIX}${skill.name}${args ? ` ${args}` : ''}`;\n const expanded = expandDeferredSkillCommand(text, inventory.skills);\n if (expanded === text) throw new Error(`Skill '${skill.name}' is no longer readable.`);\n await execution.session.prompt(expanded);\n },\n };\n}\n\nexport function createSkillCommands(\n inventory: DeferredSkillSnapshot,\n catalog: string,\n groups: readonly ServerSkillGroup[],\n): readonly DoomHeadlessCommand[] {\n return [\n {\n name: SKILLS_COMMAND,\n description: 'List discovered skills or invoke one by name.',\n async execute(args, execution) {\n const requested = args.trim();\n if (requested) {\n await execution.session.prompt(\n expandDeferredSkillCommand(`${SKILL_INVOCATION_PREFIX}${requested}`, inventory.skills),\n );\n return;\n }\n await execution.client.notify({\n title: 'DoomPi skills',\n body: catalog,\n level: 'info',\n });\n },\n },\n ...groups.flatMap((group) => group.skills.map((skill) => skillCommand(skill, group.domain, inventory))),\n ];\n}\n"],"mappings":";;;;;;;;;;;AAeA,SAAS,aAAa,OAAc,QAA4B,WAAuD;CACrH,OAAO;EACL,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;EACnD,MAAM,GAAGA,eAAAA,uBAAuB,MAAM;EACtC,aAAa,MAAM;EACnB,SAAS,OAAO,MAAM,cAAc;GAClC,MAAM,OAAO,GAAGC,eAAAA,0BAA0B,MAAM,OAAO,OAAO,IAAI,SAAS;GAC3E,MAAM,WAAWC,cAAAA,2BAA2B,MAAM,UAAU,MAAM;GAClE,IAAI,aAAa,MAAM,MAAM,IAAI,MAAM,UAAU,MAAM,KAAK,yBAAyB;GACrF,MAAM,UAAU,QAAQ,OAAO,QAAQ;EACzC;CACF;AACF;AAEA,SAAgB,oBACd,WACA,SACA,QACgC;CAChC,OAAO,CACL;EACE,MAAMC,eAAAA;EACN,aAAa;EACb,MAAM,QAAQ,MAAM,WAAW;GAC7B,MAAM,YAAY,KAAK,KAAK;GAC5B,IAAI,WAAW;IACb,MAAM,UAAU,QAAQ,OACtBD,cAAAA,2BAA2B,GAAGD,eAAAA,0BAA0B,aAAa,UAAU,MAAM,CACvF;IACA;GACF;GACA,MAAM,UAAU,OAAO,OAAO;IAC5B,OAAO;IACP,MAAM;IACN,OAAO;GACT,CAAC;EACH;CACF,GACA,GAAG,OAAO,SAAS,UAAU,MAAM,OAAO,KAAK,UAAU,aAAa,OAAO,MAAM,QAAQ,SAAS,CAAC,CAAC,CACxG;AACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { SKILLS_COMMAND, SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX } from "../../../../../types/skills.mjs";
|
|
2
|
+
import { expandDeferredSkillCommand } from "../../../../../services/deferredSkills/index.mjs";
|
|
3
|
+
//#region src/extensions/workspaces/sessions/(backend)/_lib/skillCommands.ts
|
|
4
|
+
/**
|
|
5
|
+
* One command per skill, gated by whatever activates that skill.
|
|
6
|
+
*
|
|
7
|
+
* Expansion always reads the full inventory, not the group: a command is only
|
|
8
|
+
* dispatchable while its condition holds, so by the time one runs its skill is
|
|
9
|
+
* active, and looking it up in the union keeps one lookup table instead of one
|
|
10
|
+
* per domain.
|
|
11
|
+
*/
|
|
12
|
+
function skillCommand(skill, domain, inventory) {
|
|
13
|
+
return {
|
|
14
|
+
...domain === void 0 ? {} : { when: { domain } },
|
|
15
|
+
name: `${SKILL_COMMAND_PREFIX}${skill.name}`,
|
|
16
|
+
description: skill.description,
|
|
17
|
+
execute: async (args, execution) => {
|
|
18
|
+
const text = `${SKILL_INVOCATION_PREFIX}${skill.name}${args ? ` ${args}` : ""}`;
|
|
19
|
+
const expanded = expandDeferredSkillCommand(text, inventory.skills);
|
|
20
|
+
if (expanded === text) throw new Error(`Skill '${skill.name}' is no longer readable.`);
|
|
21
|
+
await execution.session.prompt(expanded);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function createSkillCommands(inventory, catalog, groups) {
|
|
26
|
+
return [{
|
|
27
|
+
name: SKILLS_COMMAND,
|
|
28
|
+
description: "List discovered skills or invoke one by name.",
|
|
29
|
+
async execute(args, execution) {
|
|
30
|
+
const requested = args.trim();
|
|
31
|
+
if (requested) {
|
|
32
|
+
await execution.session.prompt(expandDeferredSkillCommand(`${SKILL_INVOCATION_PREFIX}${requested}`, inventory.skills));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
await execution.client.notify({
|
|
36
|
+
title: "DoomPi skills",
|
|
37
|
+
body: catalog,
|
|
38
|
+
level: "info"
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}, ...groups.flatMap((group) => group.skills.map((skill) => skillCommand(skill, group.domain, inventory)))];
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { createSkillCommands };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=skillCommands.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillCommands.mjs","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/skillCommands.ts"],"sourcesContent":["import type { DoomHeadlessCommand } from '@agimon-ai/doompi-core/headless';\nimport type { Skill } from '@earendil-works/pi-coding-agent';\n\nimport { expandDeferredSkillCommand, type DeferredSkillSnapshot } from '../../../../../services/deferredSkills';\nimport type { ServerSkillGroup } from '../../../../../services/serverInventory';\nimport { SKILL_COMMAND_PREFIX, SKILL_INVOCATION_PREFIX, SKILLS_COMMAND } from '../../../../../types/skills';\n\n/**\n * One command per skill, gated by whatever activates that skill.\n *\n * Expansion always reads the full inventory, not the group: a command is only\n * dispatchable while its condition holds, so by the time one runs its skill is\n * active, and looking it up in the union keeps one lookup table instead of one\n * per domain.\n */\nfunction skillCommand(skill: Skill, domain: string | undefined, inventory: DeferredSkillSnapshot): DoomHeadlessCommand {\n return {\n ...(domain === undefined ? {} : { when: { domain } }),\n name: `${SKILL_COMMAND_PREFIX}${skill.name}`,\n description: skill.description,\n execute: async (args, execution) => {\n const text = `${SKILL_INVOCATION_PREFIX}${skill.name}${args ? ` ${args}` : ''}`;\n const expanded = expandDeferredSkillCommand(text, inventory.skills);\n if (expanded === text) throw new Error(`Skill '${skill.name}' is no longer readable.`);\n await execution.session.prompt(expanded);\n },\n };\n}\n\nexport function createSkillCommands(\n inventory: DeferredSkillSnapshot,\n catalog: string,\n groups: readonly ServerSkillGroup[],\n): readonly DoomHeadlessCommand[] {\n return [\n {\n name: SKILLS_COMMAND,\n description: 'List discovered skills or invoke one by name.',\n async execute(args, execution) {\n const requested = args.trim();\n if (requested) {\n await execution.session.prompt(\n expandDeferredSkillCommand(`${SKILL_INVOCATION_PREFIX}${requested}`, inventory.skills),\n );\n return;\n }\n await execution.client.notify({\n title: 'DoomPi skills',\n body: catalog,\n level: 'info',\n });\n },\n },\n ...groups.flatMap((group) => group.skills.map((skill) => skillCommand(skill, group.domain, inventory))),\n ];\n}\n"],"mappings":";;;;;;;;;;;AAeA,SAAS,aAAa,OAAc,QAA4B,WAAuD;CACrH,OAAO;EACL,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;EACnD,MAAM,GAAG,uBAAuB,MAAM;EACtC,aAAa,MAAM;EACnB,SAAS,OAAO,MAAM,cAAc;GAClC,MAAM,OAAO,GAAG,0BAA0B,MAAM,OAAO,OAAO,IAAI,SAAS;GAC3E,MAAM,WAAW,2BAA2B,MAAM,UAAU,MAAM;GAClE,IAAI,aAAa,MAAM,MAAM,IAAI,MAAM,UAAU,MAAM,KAAK,yBAAyB;GACrF,MAAM,UAAU,QAAQ,OAAO,QAAQ;EACzC;CACF;AACF;AAEA,SAAgB,oBACd,WACA,SACA,QACgC;CAChC,OAAO,CACL;EACE,MAAM;EACN,aAAa;EACb,MAAM,QAAQ,MAAM,WAAW;GAC7B,MAAM,YAAY,KAAK,KAAK;GAC5B,IAAI,WAAW;IACb,MAAM,UAAU,QAAQ,OACtB,2BAA2B,GAAG,0BAA0B,aAAa,UAAU,MAAM,CACvF;IACA;GACF;GACA,MAAM,UAAU,OAAO,OAAO;IAC5B,OAAO;IACP,MAAM;IACN,OAAO;GACT,CAAC;EACH;CACF,GACA,GAAG,OAAO,SAAS,UAAU,MAAM,OAAO,KAAK,UAAU,aAAa,OAAO,MAAM,QAAQ,SAAS,CAAC,CAAC,CACxG;AACF"}
|