{"version":3,"file":"index.cjs","names":["createWorkflowCatalogReader","defaultCatalogDeps","readWorkflowRuns","runBelongsToSession","presentWorkflowRuns","WORKFLOW_RUNS_TYPE","WORKFLOW_CATALOG_TYPE","presentWorkflowCatalog","createEmbeddedWorkflowFeature","defineMinorMode","serverMinorModes","registerRunProvider","skill","z","parseWorkflowLaunchCommand"],"sources":["../../../../src/services/serverRuntime/index.ts"],"sourcesContent":["import {\n  type DoomHeadlessExecutionContext,\n  type DoomHeadlessContent,\n  type DoomHeadlessToolResult,\n} from '@agimon-ai/doompi-core/headless';\nimport { serverMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport { defineMinorMode, type MinorModeOwner, type MinorModeState } from '@agimon-ai/doompi-minor-mode';\nimport { createEmbeddedWorkflowFeature } from '@agimon-ai/workflow-mcp';\nimport { z } from 'zod';\n\nimport { registerRunProvider, type RunProviderHandle } from '../../services/backgroundWork';\nimport { createWorkflowCatalogReader, presentWorkflowCatalog } from '../../services/webWorkflowCatalog';\nimport { defaultCatalogDeps } from '../../services/workflowCatalogDeps';\nimport { parseWorkflowLaunchCommand } from '../../services/workflowLaunchCommand';\nimport { readWorkflowSkill as skill } from '../../services/workflowResource';\nimport { presentWorkflowRuns, runBelongsToSession } from '../../services/workflowRuns';\nimport { readWorkflowRuns } from '../../services/workflowWatcher';\nimport { WORKFLOW_CATALOG_TYPE, WORKFLOW_RUNS_TYPE } from '../../types/webWorkflows';\n\nconst SOURCE = '@agimon-ai/doompi-workflow';\nconst WORKFLOW_MODE_ID = 'workflow';\nconst LIST_TOOL = 'list_workflows';\nconst LAUNCH_TOOL = 'launch_workflow';\nconst RUN_TOOL = 'workflow_run';\n\nfunction callResult(value: unknown): DoomHeadlessToolResult {\n  const content: DoomHeadlessContent[] = [];\n  if (typeof value === 'object' && value !== null && 'content' in value && Array.isArray(value.content)) {\n    for (const item of value.content) {\n      if (typeof item !== 'object' || item === null || !('type' in item)) continue;\n      const record = item as Record<string, unknown>;\n      if (record.type === 'text' && typeof record.text === 'string') content.push({ type: 'text', text: record.text });\n      else if (record.type === 'image' && typeof record.data === 'string' && typeof record.mimeType === 'string') {\n        content.push({ type: 'image', data: record.data, mimeType: record.mimeType });\n      }\n    }\n  }\n  if (content.length === 0) content.push({ type: 'text', text: JSON.stringify(value, null, 2) });\n  return { content, details: value };\n}\n\nimport { type DoomHeadlessHostService } from '@agimon-ai/doompi-core/headless';\nimport { type DoomServerHostService, type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/server-facet';\nexport function createWorkflowServerRuntime(\n  host: DoomHeadlessHostService,\n  serverHost: DoomServerHostService,\n): DoomServerSessionPlugin {\n  if (serverHost.context.directEvents === undefined)\n    throw new Error('Workflow headless facet requires the session direct event bus.');\n  const directEvents = serverHost.context.directEvents;\n  let runProvider: RunProviderHandle | undefined;\n  const catalogReader = createWorkflowCatalogReader(defaultCatalogDeps());\n  const publishLifecycle = async (executionContext: typeof host.context): Promise<boolean> => {\n    const records = readWorkflowRuns({ environment: executionContext.environment }).filter((run) =>\n      runBelongsToSession(run, executionContext.sessionId),\n    );\n    const activeItems = records\n      .filter((run) => run.view.stage === 'running' && run.view.stale !== true)\n      .map((run) => ({ id: `${run.view.workspace}/${run.view.runKey}`, sessionId: executionContext.sessionId }));\n    runProvider?.update(activeItems);\n    const runs = presentWorkflowRuns(\n      records.map((run) => run.view),\n      Date.now(),\n    );\n    directEvents.publish(WORKFLOW_RUNS_TYPE, executionContext.sessionId, { runs });\n    try {\n      directEvents.publish(WORKFLOW_CATALOG_TYPE, executionContext.sessionId, {\n        cwd: executionContext.cwd,\n        workflows: presentWorkflowCatalog(await catalogReader.read(executionContext.cwd)),\n      });\n    } catch (error) {\n      const warning = error instanceof Error ? error.message : String(error);\n      directEvents.publish(WORKFLOW_CATALOG_TYPE, executionContext.sessionId, {\n        cwd: executionContext.cwd,\n        workflows: [],\n        warning,\n      });\n    }\n    return activeItems.length > 0;\n  };\n  const feature = createEmbeddedWorkflowFeature();\n  let control: ReturnType<typeof feature.createRunControl> | undefined;\n  let controlDisposers: (() => void)[] = [];\n  const disposeControl = (): void => {\n    for (const dispose of controlDisposers.splice(0)) dispose();\n    control?.dispose();\n    control = undefined;\n  };\n  let modeOwner: MinorModeOwner | undefined;\n  const modeSelected = (): boolean => (host.context.selection.state?.['minor-mode'] ?? []).includes(WORKFLOW_MODE_ID);\n  const modeState = (): MinorModeState => {\n    const active = modeSelected();\n    return {\n      activation: active ? 'active' : 'inactive',\n      condition: 'ready',\n      ...(active ? { detail: 'workflow tools available' } : {}),\n      actions: [\n        { id: 'activate', enabled: !active, ...(!active ? {} : { disabledReason: 'Workflow mode is active.' }) },\n        { id: 'deactivate', enabled: active, ...(active ? {} : { disabledReason: 'Workflow mode is inactive.' }) },\n      ],\n    };\n  };\n  const selectMode = async (enabled: boolean): Promise<void> => {\n    const modes = (host.context.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== WORKFLOW_MODE_ID);\n    await host.changeSelection({\n      axis: 'state',\n      key: 'minor-mode',\n      values: enabled ? [...modes, WORKFLOW_MODE_ID] : modes,\n    });\n    modeOwner?.publish();\n  };\n  modeOwner = defineMinorMode({\n    descriptor: {\n      source: SOURCE,\n      id: WORKFLOW_MODE_ID,\n      label: 'Workflow',\n      description: 'Workflow discovery, launch, inspection, control, and recovery tools.',\n      order: 20,\n      actions: [\n        {\n          id: 'activate',\n          label: 'Activate',\n          description: 'Enable workflow tools for this session.',\n          contexts: ['headless'],\n          parameters: [],\n        },\n        {\n          id: 'deactivate',\n          label: 'Deactivate',\n          description: 'Disable workflow tools without stopping active runs.',\n          contexts: ['headless'],\n          parameters: [],\n        },\n      ],\n    },\n    state: modeState,\n    async handleAction(_runtime, actionId, _argumentsValue, execution) {\n      execution.signal.throwIfAborted();\n      if (actionId === 'activate') {\n        await selectMode(true);\n        return { message: 'Workflow mode activated.' };\n      }\n      if (actionId === 'deactivate') {\n        await selectMode(false);\n        return { message: 'Workflow mode deactivated.' };\n      }\n      throw new Error(`Unknown workflow mode action: ${actionId}`);\n    },\n  }).createOwner(undefined);\n  return {\n    services: [\n      serverMinorModes([modeOwner]),\n      (context) => {\n        const provider = registerRunProvider(context);\n        runProvider = provider;\n        return () => {\n          provider.dispose();\n          if (runProvider === provider) runProvider = undefined;\n        };\n      },\n    ],\n    toolRestrictions: [\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID } },\n        allowedTools: [LIST_TOOL, LAUNCH_TOOL, RUN_TOOL],\n      },\n    ],\n    hooks: [\n      {\n        event: 'tool_execution_end',\n        handle: async (_event, executionContext) => {\n          await publishLifecycle(executionContext);\n        },\n      },\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        event: 'session_shutdown',\n        handle: disposeControl,\n      },\n    ],\n    resources: [\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        name: 'doompi-author-workflow',\n        kind: 'skill',\n        read: () => skill('doompi-author-workflow'),\n      },\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        name: 'doompi-use-workflow',\n        kind: 'skill',\n        read: () => skill('doompi-use-workflow'),\n      },\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        name: 'workflow-recovery',\n        kind: 'skill',\n        read: () => skill('workflow-recovery'),\n      },\n    ],\n    activities: [\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        name: SOURCE,\n        async start(executionContext) {\n          const reportFailure = (error: unknown): void => {\n            process.emitWarning(`Could not publish headless workflow state: ${String(error)}`);\n          };\n          const stopFor =\n            (ownedControl: NonNullable<typeof control>): (() => void) =>\n            () => {\n              void publishLifecycle(executionContext)\n                .then((active) => {\n                  if (!active && !modeSelected() && control === ownedControl) disposeControl();\n                })\n                .catch(reportFailure);\n            };\n          if (control !== undefined) {\n            const ownedControl = control;\n            await publishLifecycle(executionContext);\n            return stopFor(ownedControl);\n          }\n          control = feature.createRunControl({});\n          const ownedControl = control;\n          const refresh = (): void => {\n            void publishLifecycle(executionContext)\n              .then((active) => {\n                if (!active && !modeSelected() && control === ownedControl) disposeControl();\n              })\n              .catch(reportFailure);\n          };\n          controlDisposers = [\n            ownedControl.on('runStarted', refresh),\n            ownedControl.on('runUpdated', refresh),\n            ownedControl.on('runFinished', refresh),\n          ];\n          try {\n            await ownedControl.start();\n            await publishLifecycle(executionContext);\n            return stopFor(ownedControl);\n          } catch (error) {\n            if (control === ownedControl) disposeControl();\n            throw error;\n          }\n        },\n      },\n    ],\n    tools: [\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        name: LIST_TOOL,\n        label: 'List Workflows',\n        description: 'List workflow definitions available in this repository.',\n        parameters: z.toJSONSchema(feature.listWorkflowsTool.getInputSchema()),\n        executionMode: 'serial',\n        async execute(_toolCallId, parameters, signal) {\n          signal?.throwIfAborted();\n          return callResult(\n            await feature.listWorkflowsTool.execute(\n              parameters as Parameters<typeof feature.listWorkflowsTool.execute>[0],\n            ),\n          );\n        },\n      },\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        name: LAUNCH_TOOL,\n        label: 'Launch Workflow',\n        description: 'Start a workflow run and return its recorded launch result.',\n        parameters: z.toJSONSchema(feature.runTool.getInputSchema()),\n        executionMode: 'serial',\n        async execute(_toolCallId, parameters, signal) {\n          signal?.throwIfAborted();\n          return callResult(await feature.runTool.execute(parameters as Parameters<typeof feature.runTool.execute>[0]));\n        },\n      },\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        name: RUN_TOOL,\n        label: 'Workflow Run',\n        description: 'Inspect the status of a workflow run or request cooperative control.',\n        parameters: {\n          type: 'object',\n          properties: {\n            action: { type: 'string', enum: ['status', 'pause', 'resume', 'stop'] },\n            runKey: { type: 'string', minLength: 1 },\n            workspace: { type: 'string' },\n            reason: { type: 'string' },\n            expectedRunId: { type: 'string' },\n          },\n          required: ['action', 'runKey'],\n          additionalProperties: false,\n        },\n        executionMode: 'serial',\n        async execute(_toolCallId, parameters, signal) {\n          signal?.throwIfAborted();\n          const input = parameters as unknown as {\n            action: 'status' | 'pause' | 'resume' | 'stop';\n            runKey: string;\n            workspace?: string;\n            reason?: string;\n            expectedRunId?: string;\n          };\n          const runs = readWorkflowRuns({ environment: host.context.environment }).filter(\n            (run) =>\n              runBelongsToSession(run, host.context.sessionId) &&\n              run.view.runKey === input.runKey &&\n              (input.workspace === undefined || run.view.workspace === input.workspace),\n          );\n          if (runs.length !== 1)\n            return {\n              ...callResult({\n                error:\n                  runs.length === 0\n                    ? 'Workflow run was not found in this session.'\n                    : 'Specify the workspace for this run key.',\n              }),\n              isError: true,\n            };\n          const run = runs[0]!.view;\n          if (input.action === 'status') return callResult(run);\n          if (!control) return callResult({ error: 'Workflow activity is not active.' });\n          if (typeof input.expectedRunId !== 'string' || input.expectedRunId.length === 0) {\n            return callResult({ error: 'expectedRunId is required for workflow control.' });\n          }\n          const request =\n            input.action === 'pause'\n              ? await control.pause(input.runKey, input.expectedRunId, input.workspace, input.reason)\n              : input.action === 'resume'\n                ? await control.resume(input.runKey, input.expectedRunId, input.workspace)\n                : await control.stop(input.runKey, input.expectedRunId, input.workspace, input.reason);\n          return callResult(request);\n        },\n      },\n    ],\n    commands: [\n      {\n        when: { state: { 'minor-mode': WORKFLOW_MODE_ID }, attribution: { kind: 'minor', mode: WORKFLOW_MODE_ID } },\n        name: 'workflow-launch',\n        description: 'Launch a workflow from a slash command.',\n        async execute(args: string, execution: DoomHeadlessExecutionContext) {\n          const parsed = parseWorkflowLaunchCommand(args);\n          if ('error' in parsed) {\n            await execution.client.notify({ body: parsed.error, level: 'error' });\n            return;\n          }\n          const result = await feature.runTool.execute({\n            workflowPath: parsed.workflow,\n            ...(parsed.runner === undefined ? {} : { runner: parsed.runner }),\n            ...(Object.keys(parsed.inputs).length === 0 ? {} : { inputs: parsed.inputs }),\n            ...(parsed.prompt === undefined ? {} : { prompt: parsed.prompt }),\n          });\n          const rendered = callResult(result).content.find((entry) => entry.type === 'text');\n          await execution.client.notify({\n            body: rendered?.type === 'text' ? rendered.text : 'Workflow launch requested.',\n            level: 'info',\n          });\n        },\n      },\n    ],\n    onDispose() {\n      disposeControl();\n      runProvider?.dispose();\n      runProvider = undefined;\n    },\n  };\n}\n"],"mappings":"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"}