{"version":3,"file":"mcp.cjs","names":["defineMcpSkill","readPackageResource","Type","Type","defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","skillDoompiAuthorConfig","toolLoadContext","toolRenameThread","toolShowSession"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-config.mcp.ts","../../src/schemas/mcpContextTools.ts","../../src/schemas/mcpSessionView.ts","../../src/services/mcpContextTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/load_context.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/rename_thread.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/show_session.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/serverFacet';\n\nexport default defineMcpSkill({\n  name: 'doompi-author-config',\n  description:\n    'Configure DoomPi runtime settings, source precedence, and typed session configuration. Use for config.yaml, the doom/config Cordis service, immutable context snapshots, or shared selection transition state. Do not use for defining modes.yaml, domains.yaml, or profiles.yaml.',\n  read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-author-config/SKILL.md'),\n});\n","import { Type } from 'typebox';\n\nexport const loadContextParameters = Type.Object({}, { additionalProperties: false });\nexport const renameThreadParameters = Type.Object(\n  { title: Type.String({ minLength: 1, maxLength: 256 }) },\n  { additionalProperties: false },\n);\n","import { Type } from 'typebox';\n\nexport const sessionViewSchema = Type.Object(\n  {\n    sessionId: Type.String(),\n    revision: Type.Integer({ minimum: 0 }),\n    repositoryName: Type.String(),\n    profile: Type.Union([Type.String(), Type.Null()]),\n    majorMode: Type.String(),\n    domains: Type.Array(Type.String()),\n    layers: Type.Array(Type.String()),\n    minorModes: Type.Array(Type.String()),\n  },\n  { additionalProperties: false },\n);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { loadContextParameters, renameThreadParameters } from '../../schemas/mcpContextTools';\nimport { sessionViewSchema } from '../../schemas/mcpSessionView';\nimport type { SessionView } from '../../types/sessionView';\n\nexport function createLoadContextTool(context: DoomMcpPluginContext): DoomHeadlessTool<typeof loadContextParameters> {\n  return {\n    // web-plugin-tool-renderers: ignore load_context (remote MCP only)\n    name: 'load_context',\n    label: 'Load context',\n    description:\n      'Call at the beginning of a session, and after changing profile or modes, to load repository instructions and current session context.',\n    parameters: loadContextParameters,\n    annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false },\n    async execute() {\n      const snapshot = context.loadContext();\n      return { content: [{ type: 'text', text: JSON.stringify(snapshot) }], structuredContent: { ...snapshot } };\n    },\n  };\n}\n\nexport function createRenameThreadTool(context: DoomMcpPluginContext): DoomHeadlessTool<typeof renameThreadParameters> {\n  return {\n    // web-plugin-tool-renderers: ignore rename_thread (remote MCP only)\n    name: 'rename_thread',\n    label: 'Rename thread',\n    description: 'Rename the current Doompi conversation so its purpose is clear in the workspace session list.',\n    parameters: renameThreadParameters,\n    annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n    async execute(_toolCallId, { title }) {\n      const next = title.trim();\n      if (!next) throw new Error('Thread title cannot be empty.');\n      if (context.execution.session.setName === undefined) throw new Error('Session rename is unavailable.');\n      await context.execution.session.setName(next);\n      return { content: [{ type: 'text', text: `Renamed thread to \"${next}\".` }] };\n    },\n  };\n}\n\nexport function createShowSessionTool(context: DoomMcpPluginContext): DoomHeadlessTool<typeof loadContextParameters> {\n  return {\n    // web-plugin-tool-renderers: ignore show_session (remote MCP only)\n    name: 'show_session',\n    label: 'Show session',\n    description:\n      'Show or refresh a read-only summary of the current Doompi session. Does not load repository instructions.',\n    parameters: loadContextParameters,\n    outputSchema: { ...sessionViewSchema },\n    annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false },\n    _meta: {\n      ui: { visibility: ['model', 'app'] },\n      'openai/toolInvocation/invoking': 'Loading session',\n      'openai/toolInvocation/invoked': 'Session ready',\n    },\n    async execute() {\n      const snapshot = context.loadContext();\n      const view: SessionView = {\n        sessionId: snapshot.session.id,\n        revision: snapshot.session.revision,\n        repositoryName:\n          snapshot.repository.root.replaceAll('\\\\', '/').split('/').filter(Boolean).at(-1) ?? 'Repository',\n        profile: snapshot.selection.profile,\n        majorMode: snapshot.selection.majorMode,\n        domains: [...snapshot.selection.domains],\n        layers: [...snapshot.selection.activeLayers],\n        minorModes: [...(snapshot.selection.minorModes ?? [])],\n      };\n      const text = [\n        `Doompi session: ${view.sessionId} (revision ${view.revision})`,\n        `Repository: ${view.repositoryName}`,\n        `Profile: ${view.profile ?? 'Default'}`,\n        `Major mode: ${view.majorMode}`,\n        `Domains: ${view.domains.join(', ') || 'None'}`,\n        `Layers: ${view.layers.join(', ') || 'None'}`,\n        `Minor modes: ${view.minorModes.join(', ') || 'None'}`,\n      ].join('\\n');\n      return { content: [{ type: 'text', text }], structuredContent: { ...view }, _meta: { widgetType: 'session' } };\n    },\n  };\n}\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createLoadContextTool } from '../../../../../services/mcpContextTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => createLoadContextTool(context));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createRenameThreadTool } from '../../../../../services/mcpContextTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => createRenameThreadTool(context));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createShowSessionTool } from '../../../../../services/mcpContextTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => createShowSessionTool(context));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport skillDoompiAuthorConfig from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-config.mcp';\nimport toolLoadContext from '../src/extensions/workspaces/sessions/(backend)/tool/load_context.mcp';\nimport toolRenameThread from '../src/extensions/workspaces/sessions/(backend)/tool/rename_thread.mcp';\nimport toolShowSession from '../src/extensions/workspaces/sessions/(backend)/tool/show_session.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;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n  (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n  ...value, _meta: { ...(value as { _meta?: object })._meta, [\"doompi/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n  name: '@agimon-ai/doompi-config',\n  session: (context) => ({\n    get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiAuthorConfig, context)]; },\n    get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/doompi-config/load_context\", via({ name: 'load_context' }, at(toolLoadContext, context))), withWidget(\"@agimon-ai/doompi-config/rename_thread\", via({ name: 'rename_thread' }, at(toolRenameThread, context))), withWidget(\"@agimon-ai/doompi-config/show_session\", via({ name: 'show_session' }, at(toolShowSession, context)))]; },\n  }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":"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"}