{"version":3,"file":"server.cjs","names":["path","fs","DocumentRequestError","documentTooLarge","AUTHOR_ALIAS_PATTERN","AuthorBridgeError","fs","path","defineApiRoutes","apiResponse","AuthorBridgeError","Hono","routes","parseUseAuthorToolInput","DocumentRequestError","Hono","routes","parseStructuredDocument","preflightStructuredDocument","serializeStructuredDocument","createAuthorBridgeState","randomUUID","Hono","routes","defineRoot","authorMinorMode","createAuthorCatalog","serverMinorModes","routes","AUTHOR_ALIAS_PATTERN","defineChannel","defineServerMethod","authorBridgeMethod","defineMethod","defineRoute","defineRoutedCommand","createAuthorCommand","defineHook","AUTHOR_GUIDANCE","defineResource","readPackageResource","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","defineServerPlugin","channelAuthorWebmcp","methodBridge","rootSession","composeRootHooks","apiRoute","commandAuthor","hookBeforeAgentStart","resourceDoompiUseAuthor","toolDescribeAuthorTools","toolOpenAuthoringFile","toolUseAuthorTools"],"sources":["../../src/services/structuredDocuments/document.ts","../../src/services/authorCanvasRegistry/index.ts","../../src/types/apiRoutes.ts","../../src/types/authorApi.ts","../../src/extensions/workspaces/sessions/(backend)/api/author/_lib/authorBridgeApi.ts","../../src/extensions/workspaces/sessions/(backend)/api/author/_lib/authorDocumentApi.ts","../../src/extensions/workspaces/sessions/(backend)/api/author/_lib/authorApi.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/types/webAuthor.ts","../../src/services/webAuthorChannel/index.ts","../../src/extensions/(backend)/channel/author-webmcp.server.ts","../../src/services/authorBridgeMethod/index.ts","../../src/extensions/(backend)/method/bridge.server.ts","../../src/extensions/workspaces/sessions/(backend)/api/author/route.server.ts","../../src/extensions/workspaces/sessions/(backend)/command/author.server.ts","../../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/doompi-use-author.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.server.ts","../../generated/server.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { DocumentRequestError, documentTooLarge } from './common';\n\nexport const AUTHOR_DOCUMENT_MAX_BYTES = 25 * 1024 * 1024;\n\nexport async function readDocument(cwd: string, requestedPath: unknown): Promise<Uint8Array> {\n  if (\n    typeof requestedPath !== 'string' ||\n    requestedPath.length === 0 ||\n    requestedPath.includes('\\0') ||\n    path.isAbsolute(requestedPath)\n  ) {\n    throw new Error('A relative document path is required.');\n  }\n  const root = await fs.realpath(cwd);\n  const candidate = path.resolve(root, requestedPath);\n  if (candidate !== root && !candidate.startsWith(`${root}${path.sep}`))\n    throw new DocumentRequestError('Document path is outside the working directory.', 403);\n  const realCandidate = await fs.realpath(candidate);\n  if (realCandidate !== root && !realCandidate.startsWith(`${root}${path.sep}`)) {\n    throw new DocumentRequestError('Document path is outside the working directory.', 403);\n  }\n  const stat = await fs.stat(realCandidate);\n  if (stat.size > AUTHOR_DOCUMENT_MAX_BYTES) {\n    throw documentTooLarge(`Document exceeds the ${AUTHOR_DOCUMENT_MAX_BYTES} byte preview limit.`);\n  }\n  return await fs.readFile(realCandidate);\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { AuthorBridgeError, type AuthorBridgeState } from '../../models/authorBridgeState';\nimport { AUTHOR_ALIAS_PATTERN } from '../../schemas/authorTools';\nimport type {\n  AuthorCanvasView,\n  AuthorOpenFileResult,\n  AuthorViewportCatalogSnapshot,\n  UseAuthorToolInput,\n} from '../../types/author';\nimport { readDocument } from '../structuredDocuments/document';\n\ninterface Canvas {\n  alias: string;\n  path: string;\n  realPath: string;\n  bridge: AuthorBridgeState;\n  closed: boolean;\n  readyOnce: boolean;\n}\n\nconst MAX_CANVASES = 32;\n\nexport function createAuthorCanvasRegistry(cwd: string, createBridge: () => AuthorBridgeState) {\n  const byAlias = new Map<string, Canvas>();\n  const byPath = new Map<string, Canvas>();\n\n  const select = (alias?: string): Canvas => {\n    if (alias !== undefined) {\n      if (!AUTHOR_ALIAS_PATTERN.test(alias)) throw new AuthorBridgeError('Invalid Author canvas alias.', 400);\n      const canvas = byAlias.get(alias);\n      if (canvas === undefined)\n        throw new AuthorBridgeError(\n          `Unknown Author canvas '${alias}'. Call describe_author_tools({}) for available aliases.`,\n          404,\n        );\n      return canvas;\n    }\n    const canvases = [...byAlias.values()].filter((canvas) => !canvas.closed);\n    if (canvases.length !== 1)\n      throw new AuthorBridgeError('Specify a canvas alias. Call describe_author_tools({}) to list canvases.', 409);\n    return canvases[0]!;\n  };\n\n  const view = (canvas: Canvas): AuthorCanvasView => {\n    if (canvas.closed) return { alias: canvas.alias, path: canvas.path, status: 'unavailable' };\n    try {\n      canvas.bridge.describe();\n      canvas.readyOnce = true;\n      return { alias: canvas.alias, path: canvas.path, status: 'ready' };\n    } catch {\n      return { alias: canvas.alias, path: canvas.path, status: canvas.readyOnce ? 'unavailable' : 'opening' };\n    }\n  };\n\n  return {\n    async open(requestedPath: string, signal?: AbortSignal, requestedAlias?: string): Promise<AuthorOpenFileResult> {\n      signal?.throwIfAborted();\n      if (requestedAlias !== undefined && !AUTHOR_ALIAS_PATTERN.test(requestedAlias))\n        throw new AuthorBridgeError('Invalid Author canvas alias.', 400);\n      const bytes = await readDocument(cwd, requestedPath);\n      signal?.throwIfAborted();\n      const root = await fs.realpath(cwd);\n      const realPath = await fs.realpath(path.resolve(root, requestedPath));\n      if (realPath !== root && !realPath.startsWith(`${root}${path.sep}`))\n        throw new AuthorBridgeError('Document path is outside the working directory.', 400);\n      const canonicalPath = path.relative(root, realPath).split(path.sep).join('/');\n      const occupied = requestedAlias === undefined ? undefined : byAlias.get(requestedAlias);\n      if (occupied !== undefined && occupied.realPath !== realPath)\n        throw new AuthorBridgeError(`Author canvas alias '${requestedAlias}' already names ${occupied.path}.`, 409);\n      const existing = byPath.get(realPath);\n      if (existing !== undefined) {\n        if (existing.closed) existing.readyOnce = false;\n        existing.closed = false;\n        return {\n          path: existing.path,\n          byteLength: bytes.byteLength,\n          alias: existing.alias,\n          status: view(existing).status,\n          reused: true,\n        };\n      }\n      if (byAlias.size >= MAX_CANVASES)\n        throw new AuthorBridgeError('Too many Author canvases in this conversation.', 409);\n      const base =\n        path\n          .basename(canonicalPath)\n          .replace(/\\.[^.]*$/u, '')\n          .toLowerCase()\n          .replace(/[^a-z0-9_-]+/gu, '-')\n          .replace(/^[^a-z]+/u, 'canvas-')\n          .slice(0, 48) || 'canvas';\n      let alias = requestedAlias ?? base;\n      for (let suffix = 2; byAlias.has(alias); suffix++) alias = `${base.slice(0, 56)}-${suffix}`;\n      const canvas: Canvas = {\n        alias,\n        path: canonicalPath,\n        realPath,\n        bridge: createBridge(),\n        closed: false,\n        readyOnce: false,\n      };\n      byAlias.set(alias, canvas);\n      byPath.set(realPath, canvas);\n      return { path: canonicalPath, byteLength: bytes.byteLength, alias, status: 'opening', reused: false };\n    },\n    describe(alias?: string): AuthorViewportCatalogSnapshot {\n      const canvases = [...byAlias.values()].map(view);\n      const target =\n        alias === undefined && canvases.filter((canvas) => canvas.status !== 'unavailable').length !== 1\n          ? undefined\n          : select(alias);\n      if (target === undefined) {\n        return {\n          catalogToken: '',\n          tools: [],\n          canvases,\n          nextStep: 'Open a file with open_authoring_file, then describe_author_tools({\"alias\":\"canvas-name\"}).',\n        };\n      }\n      const status = view(target).status;\n      const base = { alias: target.alias, path: target.path, status, canvases };\n      if (status !== 'ready') {\n        return {\n          ...base,\n          catalogToken: '',\n          tools: [],\n          nextStep:\n            status === 'opening'\n              ? `Wait for ${target.alias} to be ready, then call describe_author_tools({\"alias\":\"${target.alias}\"}).`\n              : `Reopen ${target.path} with open_authoring_file({\"path\":\"${target.path}\",\"alias\":\"${target.alias}\"}).`,\n        };\n      }\n      return { ...base, ...target.bridge.describe() };\n    },\n    invoke(input: UseAuthorToolInput, signal?: AbortSignal) {\n      const target = select(input.alias);\n      if (target.closed) throw new AuthorBridgeError(`Canvas '${target.alias}' is closed. Reopen its file.`, 503);\n      return target.bridge.invoke(input, signal).then((result) => ({ ...result, alias: target.alias }));\n    },\n    bridge(alias: string): AuthorBridgeState {\n      const canvas = select(alias);\n      if (canvas.closed) throw new AuthorBridgeError(`Canvas '${alias}' is closed. Reopen its file.`, 503);\n      return canvas.bridge;\n    },\n    close(alias: string): void {\n      const canvas = select(alias);\n      canvas.closed = true;\n      canvas.bridge.close();\n      canvas.bridge = createBridge();\n    },\n    closeAll(): void {\n      for (const canvas of byAlias.values()) {\n        if (canvas.closed) continue;\n        canvas.closed = true;\n        canvas.bridge.close();\n        canvas.bridge = createBridge();\n      }\n    },\n    dispose(): void {\n      for (const canvas of byAlias.values()) canvas.bridge.close();\n      byAlias.clear();\n      byPath.clear();\n    },\n  };\n}\n\nexport type AuthorCanvasRegistry = ReturnType<typeof createAuthorCanvasRegistry>;\n","import { apiResponse, defineApiRoutes } from '@agimon-ai/doompi-core/web';\n\nimport type { AuthorOpenFileResult } from './author';\nimport type { AuthorSessionView } from './authorApi';\nimport type { DocumentPreflightReport, ParsedStructuredDocument } from './structuredDocuments';\n\n/**\n * This package's routes, as data.\n *\n * No scope and no base path. The build reads both off\n * `src/extensions/workspaces/sessions/(backend)/api/author/`, so the mount is\n * stated once, by the folder that creates it. The browser used to restate it:\n * `authorStateUrl` built one URL from `API_BASE_PATH` and the document helper\n * two files away spelled `author` out again as a literal, so the two could\n * disagree and nothing would say so.\n *\n * The order below is the order the three Hono apps register in: `/state` in\n * `authorApi`, the eight bridge routes in `authorBridgeApi`, the three document\n * routes in `authorDocumentApi`. A reviewer can read the two side by side.\n *\n * Response types are named only where a caller reads the body. The bridge\n * routes are called by the hub's author channel over `requestSessionApi`, which\n * has its own message vocabulary and never sees this client.\n */\nexport default defineApiRoutes({\n  state: {\n    method: 'GET',\n    path: '/state',\n    response: apiResponse<AuthorSessionView>(),\n  },\n  bridgeRegister: {\n    method: 'POST',\n    path: '/bridge/register',\n  },\n  bridgeCatalog: {\n    method: 'POST',\n    path: '/bridge/catalog',\n  },\n  /** Long-polls for the next capability request, so it settles when one arrives. */\n  bridgeNext: {\n    method: 'POST',\n    path: '/bridge/next',\n  },\n  bridgeResult: {\n    method: 'POST',\n    path: '/bridge/result',\n  },\n  bridgeCancelled: {\n    method: 'POST',\n    path: '/bridge/cancelled',\n  },\n  bridgeDisconnect: {\n    method: 'POST',\n    path: '/bridge/disconnect',\n  },\n  bridgeClose: {\n    method: 'POST',\n    path: '/bridge/close',\n  },\n  bridgeDescribe: {\n    method: 'GET',\n    path: '/bridge/describe',\n    query: ['alias'],\n  },\n  bridgeInvoke: {\n    method: 'POST',\n    path: '/bridge/invoke',\n  },\n  /**\n   * Parses one structured document.\n   *\n   * Answers a byte-length summary instead when the request names no format,\n   * which is the agent-side tool path; the page always names one.\n   */\n  documentsOpen: {\n    method: 'POST',\n    path: '/documents/open',\n    query: ['session'],\n    response: apiResponse<ParsedStructuredDocument | AuthorOpenFileResult>(),\n  },\n  documentsPreflight: {\n    method: 'POST',\n    path: '/documents/preflight',\n    query: ['session'],\n    response: apiResponse<DocumentPreflightReport>(),\n  },\n  documentsSerialize: {\n    method: 'POST',\n    path: '/documents/serialize',\n    query: ['session'],\n    response: apiResponse<{ bytes: string; encoding: string }>(),\n  },\n  /**\n   * The host's own bytes route, not this package's.\n   *\n   * `host: true` hangs it off the session root rather than under `/plugins`,\n   * which is how the cockpit already serves it. Author reads a document's\n   * bytes and its digest through it, and writes the edited bytes back to the\n   * same path, so both stay raw transfers rather than calls: the body is the\n   * file and the digest travels in a header.\n   */\n  file: {\n    method: 'GET',\n    path: '/file',\n    query: ['path'],\n    host: true,\n  },\n});\n","import type { AuthorModeActivation } from './author';\n\n/**\n * The wire vocabulary this package's API shares with whatever calls it.\n *\n * Paths live in `./apiRoutes`, which the Hono apps register from and the\n * generated client addresses, so neither half can move alone. What stays here\n * is the mount segment the server registers under and the shape the state\n * route answers with.\n */\n\n/** Where a host mounts this package's API; the segment after /api/plugins/. */\nexport const API_BASE_PATH = 'author';\n\n/** Query parameter naming the session a document request belongs to. */\nexport const SESSION_QUERY_PARAM = 'session';\n\nexport interface AuthorSessionView {\n  sessionId: string | null;\n  activation: AuthorModeActivation;\n  capabilityCount: number;\n}\n","import { Hono } from 'hono';\n\nimport { AuthorBridgeError } from '../../../../../../../models/authorBridgeState';\nimport { parseUseAuthorToolInput } from '../../../../../../../schemas/authorTools';\nimport type { AuthorCanvasRegistry } from '../../../../../../../services/authorCanvasRegistry';\nimport routes from '../../../../../../../types/apiRoutes';\nimport type { AuthorViewportCapabilityDescriptor } from '../../../../../../../types/author';\n\nfunction record(value: unknown): Record<string, unknown> {\n  if (typeof value !== 'object' || value === null || Array.isArray(value))\n    throw new AuthorBridgeError('Invalid request.', 400);\n  return value as Record<string, unknown>;\n}\n\nfunction text(value: unknown, key: string): string {\n  const result = record(value)[key];\n  if (typeof result !== 'string' || result === '') throw new AuthorBridgeError(`Invalid ${key}.`, 400);\n  return result;\n}\n\nfunction generation(value: unknown): number {\n  const result = record(value).generation;\n  if (!Number.isSafeInteger(result) || (result as number) < 0) throw new AuthorBridgeError('Invalid generation.', 400);\n  return result as number;\n}\n\nasync function body(request: Request): Promise<Record<string, unknown>> {\n  return record(await request.json());\n}\n\nexport function createAuthorBridgeApi(registry: AuthorCanvasRegistry): Hono {\n  const app = new Hono();\n  app.onError((error, context) =>\n    context.json(\n      { error: error instanceof Error ? error.message : String(error) },\n      error instanceof AuthorBridgeError ? error.status : 500,\n    ),\n  );\n  app.post(routes.bridgeRegister.path, async (context) => {\n    const value = await body(context.req.raw);\n    const alias = text(value, 'alias');\n    return context.json({ ...registry.bridge(alias).register(text(value, 'bindingId'), generation(value)), alias });\n  });\n  app.post(routes.bridgeCatalog.path, async (context) => {\n    const value = await body(context.req.raw);\n    const tools = value.tools;\n    if (!Array.isArray(tools)) throw new AuthorBridgeError('Invalid Author catalog.', 400);\n    const alias = text(value, 'alias');\n    return context.json({\n      ...registry\n        .bridge(alias)\n        .catalog(\n          text(value, 'bindingId'),\n          generation(value),\n          text(value, 'ownerToken'),\n          tools as AuthorViewportCapabilityDescriptor[],\n        ),\n      alias,\n    });\n  });\n  app.post(routes.bridgeNext.path, async (context) => {\n    const value = await body(context.req.raw);\n    const alias = text(value, 'alias');\n    return context.json({\n      ...(await registry\n        .bridge(alias)\n        .next(text(value, 'bindingId'), generation(value), text(value, 'ownerToken'), context.req.raw.signal)),\n      alias,\n    });\n  });\n  app.post(routes.bridgeResult.path, async (context) => {\n    const value = await body(context.req.raw);\n    registry\n      .bridge(text(value, 'alias'))\n      .result(\n        text(value, 'bindingId'),\n        generation(value),\n        text(value, 'ownerToken'),\n        text(value, 'catalogToken'),\n        text(value, 'requestId'),\n        value.result,\n      );\n    return context.json({ accepted: true });\n  });\n  app.post(routes.bridgeCancelled.path, async (context) => {\n    const value = await body(context.req.raw);\n    registry\n      .bridge(text(value, 'alias'))\n      .cancelled(\n        text(value, 'bindingId'),\n        generation(value),\n        text(value, 'ownerToken'),\n        text(value, 'catalogToken'),\n        text(value, 'requestId'),\n      );\n    return context.json({ accepted: true });\n  });\n  app.post(routes.bridgeDisconnect.path, async (context) => {\n    const value = await body(context.req.raw);\n    registry.bridge(text(value, 'alias')).disconnect(text(value, 'bindingId'), generation(value));\n    return context.json({ accepted: true });\n  });\n  app.post(routes.bridgeClose.path, async (context) => {\n    const value = await body(context.req.raw);\n    registry.close(text(value, 'alias'));\n    return context.json({ accepted: true });\n  });\n  app.get(routes.bridgeDescribe.path, (context) => context.json(registry.describe(context.req.query('alias'))));\n  app.post(routes.bridgeInvoke.path, async (context) => {\n    const value = parseUseAuthorToolInput(await context.req.raw.json());\n    return context.json(await registry.invoke(value, context.req.raw.signal));\n  });\n  return app;\n}\n","import { Hono } from 'hono';\n\nimport {\n  parseStructuredDocument,\n  preflightStructuredDocument,\n  serializeStructuredDocument,\n} from '../../../../../../../services/structuredDocuments';\nimport { DocumentRequestError } from '../../../../../../../services/structuredDocuments/common';\nimport { readDocument } from '../../../../../../../services/structuredDocuments/document';\nimport routes from '../../../../../../../types/apiRoutes';\nimport type { AuthorOpenFileResult } from '../../../../../../../types/author';\nimport type {\n  CsvDialect,\n  DocumentOperation,\n  StructuredDocumentFormat,\n} from '../../../../../../../types/structuredDocuments';\n\nexport { AUTHOR_DOCUMENT_MAX_BYTES } from '../../../../../../../services/structuredDocuments/document';\n\ninterface DocumentRequest {\n  path?: unknown;\n  alias?: unknown;\n  format?: unknown;\n  operations?: unknown;\n  preflightDigest?: unknown;\n  csvDialect?: unknown;\n}\n\nexport interface AuthorDocumentApiOptions {\n  cwd?: string;\n  open?: (path: string, signal?: AbortSignal, alias?: string) => Promise<AuthorOpenFileResult>;\n}\n\nconst FORMATS = new Set<StructuredDocumentFormat>(['markdown-slides', 'csv', 'pptx', 'xlsx']);\n\nfunction errorResponse(\n  context: { json: (value: unknown, status: 400 | 403 | 413 | 422 | 500) => Response },\n  error: unknown,\n): Response {\n  const message = error instanceof Error ? error.message : 'Document operation failed.';\n  // A refusal names its own status; anything else is a request the document cannot satisfy.\n  return context.json({ error: message }, error instanceof DocumentRequestError ? error.status : 422);\n}\n\nfunction requestFormat(value: unknown): StructuredDocumentFormat {\n  if (typeof value !== 'string' || !FORMATS.has(value as StructuredDocumentFormat))\n    throw new Error('A supported format is required.');\n  return value as StructuredDocumentFormat;\n}\n\nfunction requestOperations(value: unknown): DocumentOperation[] {\n  if (value === undefined) return [];\n  if (!Array.isArray(value) || value.length > 100_000) throw new Error('A bounded operations array is required.');\n  return value.map((operation) => {\n    if (\n      typeof operation !== 'object' ||\n      operation === null ||\n      typeof (operation as Record<string, unknown>).fragmentId !== 'string' ||\n      typeof (operation as Record<string, unknown>).replacement !== 'string'\n    ) {\n      throw new Error('Each operation requires string fragmentId and replacement fields.');\n    }\n    return operation as DocumentOperation;\n  });\n}\n\nasync function bodyOf(request: Request): Promise<DocumentRequest> {\n  const body = (await request.json()) as unknown;\n  if (typeof body !== 'object' || body === null || Array.isArray(body)) throw new Error('A JSON object is required.');\n  return body as DocumentRequest;\n}\n\nexport function createAuthorDocumentApi(options: AuthorDocumentApiOptions = {}): Hono {\n  const app = new Hono();\n  const cwd = options.cwd ?? process.cwd();\n\n  app.post(routes.documentsOpen.path, async (context) => {\n    try {\n      const body = await bodyOf(context.req.raw);\n      if (body.format === undefined && options.open !== undefined) {\n        return context.json(\n          await options.open(body.path as string, context.req.raw.signal, body.alias as string | undefined),\n        );\n      }\n      const bytes = await readDocument(cwd, body.path);\n      if (body.format === undefined) {\n        return context.json({ path: body.path as string, byteLength: bytes.byteLength } satisfies AuthorOpenFileResult);\n      }\n      return context.json(\n        await parseStructuredDocument(requestFormat(body.format), bytes, body.csvDialect as Partial<CsvDialect>),\n      );\n    } catch (error) {\n      return errorResponse(context, error);\n    }\n  });\n\n  app.post(routes.documentsPreflight.path, async (context) => {\n    try {\n      const body = await bodyOf(context.req.raw);\n      const bytes = await readDocument(cwd, body.path);\n      return context.json(\n        await preflightStructuredDocument(\n          requestFormat(body.format),\n          bytes,\n          requestOperations(body.operations),\n          body.csvDialect as Partial<CsvDialect>,\n        ),\n      );\n    } catch (error) {\n      return errorResponse(context, error);\n    }\n  });\n\n  app.post(routes.documentsSerialize.path, async (context) => {\n    try {\n      const body = await bodyOf(context.req.raw);\n      if (typeof body.preflightDigest !== 'string') throw new Error('A preflight report digest is required.');\n      const bytes = await readDocument(cwd, body.path);\n      const serialized = await serializeStructuredDocument(\n        requestFormat(body.format),\n        bytes,\n        requestOperations(body.operations),\n        body.preflightDigest,\n        body.csvDialect as Partial<CsvDialect>,\n      );\n      return context.json({\n        bytes: Buffer.from(serialized.bytes).toString('base64'),\n        encoding: 'base64',\n        manifest: serialized.manifest,\n        operationLog: serialized.operationLog,\n      });\n    } catch (error) {\n      return errorResponse(context, error);\n    }\n  });\n  return app;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport type { DoomApi, DoomApiContext, DoomApiHandler } from '@agimon-ai/doompi-core/packageApi';\nimport { Hono } from 'hono';\n\nimport { createAuthorBridgeState, type AuthorBridgeState } from '../../../../../../../models/authorBridgeState';\nimport {\n  createAuthorCanvasRegistry,\n  type AuthorCanvasRegistry,\n} from '../../../../../../../services/authorCanvasRegistry';\nimport type { AuthorCatalog } from '../../../../../../../services/authorCatalog/type';\nimport routes from '../../../../../../../types/apiRoutes';\nimport { API_BASE_PATH, type AuthorSessionView } from '../../../../../../../types/authorApi';\nimport { createAuthorBridgeApi } from './authorBridgeApi';\nimport { createAuthorDocumentApi } from './authorDocumentApi';\n\nexport interface AuthorApiOptions {\n  sessionId?: string;\n  cwd?: string;\n  readState?: () => Omit<AuthorSessionView, 'sessionId'>;\n  registry?: AuthorCanvasRegistry;\n}\n\nconst inactiveState = (): Omit<AuthorSessionView, 'sessionId'> => ({ activation: 'inactive', capabilityCount: 0 });\nconst createBridge = (): AuthorBridgeState =>\n  createAuthorBridgeState({\n    now: Date.now,\n    issueToken: randomUUID,\n    scheduleTimeout(callback, delayMs) {\n      const timer = setTimeout(callback, delayMs);\n      timer.unref?.();\n      return () => clearTimeout(timer);\n    },\n  });\n\nexport function createAuthorApi(options: AuthorApiOptions = {}): Hono {\n  const app = new Hono();\n  const registry = options.registry ?? createAuthorCanvasRegistry(options.cwd ?? process.cwd(), createBridge);\n  app.get(routes.state.path, (context) =>\n    context.json({\n      sessionId: options.sessionId ?? null,\n      ...(options.readState ?? inactiveState)(),\n    } satisfies AuthorSessionView),\n  );\n  app.route('/', createAuthorBridgeApi(registry));\n  app.route(\n    '/',\n    createAuthorDocumentApi({\n      ...(options.cwd === undefined ? {} : { cwd: options.cwd }),\n      open: (path, signal, alias) => registry.open(path, signal, alias),\n    }),\n  );\n  return app;\n}\n\nexport const api: DoomApi = {\n  basePath: API_BASE_PATH,\n  start(context: DoomApiContext): DoomApiHandler {\n    // One server hosts many sessions, so its own directory is never a session's project.\n    if (context.cwd === undefined) throw new Error('Author requires the session working directory.');\n    const registry = createAuthorCanvasRegistry(context.cwd, createBridge);\n    const app = createAuthorApi({\n      ...(context.sessionId === undefined ? {} : { sessionId: context.sessionId }),\n      cwd: context.cwd,\n      registry,\n    });\n    return { fetch: (request) => app.fetch(request), close: () => registry.dispose() };\n  },\n};\n\n/** The session API and tools share the same browser ownership and pending requests. */\nexport function createAuthorSessionApi(\n  cwd: string,\n  sessionId: string,\n): { api: DoomApi; catalog: AuthorCatalog; closeCanvases: () => void } {\n  const registry = createAuthorCanvasRegistry(cwd, createBridge);\n  return {\n    closeCanvases: () => registry.closeAll(),\n    catalog: {\n      open: (path, signal, alias) => registry.open(path, signal, alias),\n      async describe(signal, alias) {\n        signal?.throwIfAborted();\n        return registry.describe(alias);\n      },\n      execute: (input, signal) => registry.invoke(input, signal),\n    },\n    api: {\n      basePath: API_BASE_PATH,\n      start() {\n        const app = createAuthorApi({ cwd, sessionId, registry });\n        return { fetch: (request) => app.fetch(request), close: () => registry.dispose() };\n      },\n    },\n  };\n}\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/serverFacet';\nimport { serverMinorModes } from '@agimon-ai/doompi-minor-mode';\n\nimport { authorMinorMode } from '../../../../models/authorMode';\nimport { createAuthorCatalog } from '../../../../services/authorCatalog';\nimport { api, createAuthorSessionApi } from './api/author/_lib/authorApi';\n\nexport default defineRoot(({ agent }: DoomServerPluginContext) => {\n  const session = agent ? createAuthorSessionApi(agent.context.cwd, agent.context.sessionId) : undefined;\n  const mode = agent\n    ? authorMinorMode.createOwner({\n        isActive: () => (agent.context.selection.state?.['minor-mode'] ?? []).includes(authorMinorMode.descriptor.id),\n        detail: () => 'document authoring available',\n        async setActive(enabled) {\n          const modes = (agent.context.selection.state?.['minor-mode'] ?? []).filter(\n            (id) => id !== authorMinorMode.descriptor.id,\n          );\n          await agent.changeSelection({\n            axis: 'state',\n            key: 'minor-mode',\n            values: enabled ? [...modes, authorMinorMode.descriptor.id] : modes,\n          });\n          if (!enabled) session?.closeCanvases();\n        },\n      })\n    : undefined;\n  return {\n    value: {\n      api: session?.api ?? api,\n      catalog: createAuthorCatalog(session?.catalog),\n      assertAvailable: () => undefined,\n      service: undefined,\n    },\n    services: mode ? [serverMinorModes([mode])] : [],\n  };\n});\n","import type { AuthorViewportCapabilityDescriptor } from './author';\n\nexport const authorChannelType = 'author_webmcp';\n\nexport interface AuthorRegisterMessage {\n  alias: string;\n  kind: 'register';\n  generation: number;\n}\n\nexport interface AuthorReleaseMessage {\n  alias: string;\n  kind: 'release';\n  generation: number;\n}\nexport interface AuthorCatalogMessage {\n  alias: string;\n  kind: 'catalog';\n  generation: number;\n  ownerToken: string;\n  tools: AuthorViewportCapabilityDescriptor[];\n}\n\nexport interface AuthorResultMessage {\n  alias: string;\n  kind: 'result';\n  generation: number;\n  ownerToken: string;\n  catalogToken: string;\n  requestId: string;\n  result: unknown;\n}\n\nexport interface AuthorCancelledMessage {\n  alias: string;\n  kind: 'cancelled';\n  generation: number;\n  ownerToken: string;\n  catalogToken: string;\n  requestId: string;\n}\n\nexport type AuthorBrowserMessage =\n  | AuthorRegisterMessage\n  | AuthorReleaseMessage\n  | AuthorCatalogMessage\n  | AuthorResultMessage\n  | AuthorCancelledMessage;\n\nexport interface AuthorAcceptedMessage {\n  alias?: string;\n  kind: 'accepted';\n  generation: number;\n  ownerToken: string;\n  catalogToken?: string;\n  leaseMs: number;\n}\n\nexport interface AuthorRequestMessage {\n  alias?: string;\n  kind: 'request';\n  generation: number;\n  ownerToken: string;\n  catalogToken: string;\n  requestId: string;\n  name: string;\n  arguments: Record<string, unknown>;\n}\n\nexport interface AuthorCancelMessage {\n  alias?: string;\n  kind: 'cancel';\n  generation: number;\n  ownerToken: string;\n  catalogToken: string;\n  requestId: string;\n}\n\nexport interface AuthorRejectedMessage {\n  alias?: string;\n  kind: 'rejected';\n  reason: string;\n}\n\nexport type AuthorHubMessage =\n  | AuthorAcceptedMessage\n  | AuthorRequestMessage\n  | AuthorCancelMessage\n  | AuthorRejectedMessage;\n\nexport interface AuthorWebView {\n  activation: 'inactive' | 'active';\n  capabilityCount: number;\n}\n","import type {\n  DoomHubChannelConnection,\n  DoomHubChannelHost,\n  DoomHubChannelSource,\n  DoomHubSessionScope,\n  DoomHubChannel,\n} from '@agimon-ai/doompi-core/hubChannel';\n\nimport { AUTHOR_ALIAS_PATTERN } from '../../schemas/authorTools';\nimport routes from '../../types/apiRoutes';\nimport { API_BASE_PATH } from '../../types/authorApi';\nimport { authorChannelType, type AuthorBrowserMessage, type AuthorHubMessage } from '../../types/webAuthor';\n\n/**\n * Which route carries each message the browser sends.\n *\n * The paths come from the package's one route table, so the hub cannot address\n * a bridge route the session no longer serves. `release` is absent because it\n * is answered by the disconnect route rather than one of its own.\n */\nconst BRIDGE_ROUTE: Readonly<Record<Exclude<AuthorBrowserMessage['kind'], 'release'>, string>> = {\n  register: routes.bridgeRegister.path,\n  catalog: routes.bridgeCatalog.path,\n  result: routes.bridgeResult.path,\n  cancelled: routes.bridgeCancelled.path,\n};\n\ninterface Binding {\n  alias: string;\n  scope: DoomHubSessionScope;\n  connectionId: string;\n  generation: number;\n  ownerToken: string;\n  poll?: AbortController;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction browserMessage(value: unknown): AuthorBrowserMessage | undefined {\n  if (\n    !isRecord(value) ||\n    typeof value.kind !== 'string' ||\n    typeof value.alias !== 'string' ||\n    !AUTHOR_ALIAS_PATTERN.test(value.alias)\n  )\n    return undefined;\n  if (!['register', 'release', 'catalog', 'result', 'cancelled'].includes(value.kind)) return undefined;\n  return value as unknown as AuthorBrowserMessage;\n}\n\nasync function responsePayload(response: Response): Promise<AuthorHubMessage> {\n  const value = (await response.json()) as unknown;\n  if (response.ok) return value as AuthorHubMessage;\n  const reason =\n    isRecord(value) && typeof value.error === 'string' ? value.error : `Author bridge HTTP ${response.status}`;\n  return { kind: 'rejected', reason };\n}\n\nexport function createAuthorChannel(): DoomHubChannel {\n  const bindings = new Map<string, Binding>();\n  let host: DoomHubChannelHost | undefined;\n  let closed = false;\n  const keyOf = (sessionId: string, connectionId: string, alias: string): string =>\n    `${sessionId}\\0${connectionId}\\0${alias}`;\n  const send = async (scope: DoomHubSessionScope, path: string, value: Record<string, unknown>, signal?: AbortSignal) =>\n    await host!.requestSessionApi(scope, {\n      basePath: API_BASE_PATH,\n      path,\n      method: 'POST',\n      body: JSON.stringify(value),\n      ...(signal === undefined ? {} : { signal }),\n    });\n  const publish = (binding: Binding, payload: AuthorHubMessage): boolean =>\n    host?.publishToConnection?.(binding.connectionId, binding.scope.sessionId, { ...payload, alias: binding.alias }) ??\n    false;\n\n  const poll = async (binding: Binding): Promise<void> => {\n    binding.poll?.abort();\n    const controller = new AbortController();\n    binding.poll = controller;\n    while (!closed && bindings.get(keyOf(binding.scope.sessionId, binding.connectionId, binding.alias)) === binding) {\n      try {\n        const response = await send(\n          binding.scope,\n          routes.bridgeNext.path,\n          {\n            alias: binding.alias,\n            bindingId: binding.connectionId,\n            generation: binding.generation,\n            ownerToken: binding.ownerToken,\n          },\n          controller.signal,\n        );\n        const payload = await responsePayload(response);\n        if (!publish(binding, payload) || payload.kind === 'rejected') break;\n      } catch (error) {\n        if (!controller.signal.aborted) host?.onNotice(error instanceof Error ? error.message : String(error));\n        break;\n      }\n    }\n  };\n\n  const channel: DoomHubChannel = {\n    frameType: authorChannelType,\n    lifecycle: 'hub',\n    receiveWithoutSubscription: true,\n    start(channelHost) {\n      host = channelHost;\n      const source: DoomHubChannelSource = {\n        payloadFor: () => undefined,\n        sessionRemoved(sessionId) {\n          for (const [key, binding] of bindings) {\n            if (binding.scope.sessionId !== sessionId) continue;\n            binding.poll?.abort();\n            bindings.delete(key);\n            void send(binding.scope, routes.bridgeDisconnect.path, {\n              alias: binding.alias,\n              bindingId: binding.connectionId,\n              generation: binding.generation,\n            }).catch((error: unknown) => host?.onNotice(error instanceof Error ? error.message : String(error)));\n          }\n        },\n        close() {\n          closed = true;\n          for (const binding of bindings.values()) {\n            binding.poll?.abort();\n            void send(binding.scope, routes.bridgeDisconnect.path, {\n              alias: binding.alias,\n              bindingId: binding.connectionId,\n              generation: binding.generation,\n            }).catch((error: unknown) => host?.onNotice(error instanceof Error ? error.message : String(error)));\n          }\n          bindings.clear();\n        },\n      };\n      return source;\n    },\n    receive(scope, payload, connection) {\n      const message = browserMessage(payload);\n      if (message === undefined || host === undefined || closed) return;\n      void (async () => {\n        const key = keyOf(scope.sessionId, connection.connectionId, message.alias);\n        const previous = bindings.get(key);\n        if (message.kind === 'release') {\n          if (previous === undefined || previous.generation !== message.generation) return;\n          previous.poll?.abort();\n          bindings.delete(key);\n          await send(scope, routes.bridgeDisconnect.path, {\n            alias: message.alias,\n            bindingId: connection.connectionId,\n            generation: message.generation,\n          });\n          return;\n        }\n        const route = BRIDGE_ROUTE[message.kind];\n        const response = await send(scope, route, { ...message, bindingId: connection.connectionId });\n        const reply = await responsePayload(response);\n        if (reply.kind === 'accepted') {\n          const binding: Binding = {\n            alias: message.alias,\n            scope,\n            connectionId: connection.connectionId,\n            generation: reply.generation,\n            ownerToken: reply.ownerToken,\n          };\n          previous?.poll?.abort();\n          bindings.set(key, binding);\n          publish(binding, reply);\n          void poll(binding);\n        } else if (reply.kind === 'rejected') {\n          if (previous !== undefined) publish(previous, reply);\n          else\n            host?.publishToConnection?.(connection.connectionId, scope.sessionId, { ...reply, alias: message.alias });\n        }\n      })().catch((error: unknown) => host?.onNotice(error instanceof Error ? error.message : String(error)));\n    },\n    disconnected(connection: DoomHubChannelConnection) {\n      for (const [key, binding] of bindings) {\n        if (binding.connectionId !== connection.connectionId) continue;\n        binding.poll?.abort();\n        bindings.delete(key);\n        void send(binding.scope, routes.bridgeDisconnect.path, {\n          alias: binding.alias,\n          bindingId: binding.connectionId,\n          generation: binding.generation,\n        }).catch((error: unknown) => host?.onNotice(error instanceof Error ? error.message : String(error)));\n      }\n    },\n  };\n  return channel;\n}\n","import { defineChannel } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createAuthorChannel } from '../../../services/webAuthorChannel';\n\nexport default defineChannel(createAuthorChannel);\n","import { defineServerMethod, type DoomServerHostService } from '@agimon-ai/doompi-core/serverFacet';\n\nimport { authorBridgeMethod } from '../../schemas/authorFacade';\nimport { authorChannelType } from '../../types/webAuthor';\n\nexport function createAuthorBridgeMethod(scope: 'global' | 'workspace', host: DoomServerHostService) {\n  return defineServerMethod(authorBridgeMethod(scope), ({ sessionId, message }, caller) => {\n    if (!caller.connectionId) throw new Error('Author bridge requires an authenticated browser connection.');\n    if (!host.context.receiveChannel?.(sessionId, authorChannelType, message, caller.connectionId))\n      throw new Error('Author bridge session is outside this mount.');\n    return {};\n  });\n}\n","import { defineMethod } from '@agimon-ai/doompi-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/serverFacet';\n\nimport { createAuthorBridgeMethod } from '../../../services/authorBridgeMethod';\n\nexport default defineMethod(({ host }: DoomServerPluginContext) =>\n  host.scope === 'session'\n    ? { register: () => ({ dispose: () => undefined }) }\n    : createAuthorBridgeMethod(host.scope, host),\n);\n","import { defineRoute, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/serverFacet';\n\ntype AuthorServerScope = Awaited<ReturnType<typeof import('../../root.server').default>>['value'];\n\nexport default defineRoute((context: WithRoot<DoomServerPluginContext, AuthorServerScope>) => context.root.api);\n","import { defineCommand as defineRoutedCommand, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createAuthorCommand } from '../../../../../services/authorCommand';\nimport type { AuthorExtensionService } from '../../../../../types/extension';\n\nexport default defineRoutedCommand((context: WithRoot<unknown, { readonly service?: AuthorExtensionService }>) =>\n  createAuthorCommand(context.root.service),\n);\n","import { defineHook } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { AUTHOR_GUIDANCE } from '../../../../../constants/author';\n\nexport default defineHook<'before_agent_start'>({\n  when: { state: { 'minor-mode': 'author' }, attribution: { kind: 'minor', mode: 'author' } },\n  event: 'before_agent_start',\n  handle(event) {\n    const systemPrompt = typeof event.systemPrompt === 'string' ? event.systemPrompt : '';\n    return { systemPrompt: `${systemPrompt}\\n\\n${AUTHOR_GUIDANCE}`.trim() };\n  },\n});\n","import { defineResource } from '@agimon-ai/doompi-core/extensionFile';\nimport { readPackageResource } from '@agimon-ai/doompi-core/serverFacet';\n\nexport default defineResource({\n  when: { state: { 'minor-mode': 'author' }, attribution: { kind: 'minor' as const, mode: 'author' } },\n  name: 'doompi-use-author',\n  kind: 'skill' as const,\n  read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-use-author/SKILL.md'),\n});\n","import { defineTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { AUTHOR_TOOL_WHEN, createAuthorTools, type AuthorToolRoot } from '../../../../../services/authorTools';\n\nexport default defineTool((context: WithRoot<unknown, AuthorToolRoot>) => ({\n  ...createAuthorTools(context.root.catalog, context.root.assertAvailable)[1]!,\n  when: AUTHOR_TOOL_WHEN,\n}));\n","import { defineTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { AUTHOR_TOOL_WHEN, createAuthorTools, type AuthorToolRoot } from '../../../../../services/authorTools';\n\nexport default defineTool((context: WithRoot<unknown, AuthorToolRoot>) => ({\n  ...createAuthorTools(context.root.catalog, context.root.assertAvailable)[0]!,\n  when: AUTHOR_TOOL_WHEN,\n}));\n","import { defineTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { AUTHOR_TOOL_WHEN, createAuthorTools, type AuthorToolRoot } from '../../../../../services/authorTools';\n\nexport default defineTool((context: WithRoot<unknown, AuthorToolRoot>) => ({\n  ...createAuthorTools(context.root.catalog, context.root.assertAvailable)[2]!,\n  when: AUTHOR_TOOL_WHEN,\n}));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/serverFacet';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport channelAuthorWebmcp from '../src/extensions/(backend)/channel/author-webmcp.server';\nimport methodBridge from '../src/extensions/(backend)/method/bridge.server';\nimport apiRoute from '../src/extensions/workspaces/sessions/(backend)/api/author/route.server';\nimport commandAuthor from '../src/extensions/workspaces/sessions/(backend)/command/author.server';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server';\nimport resourceDoompiUseAuthor from '../src/extensions/workspaces/sessions/(backend)/resource/doompi-use-author.server';\nimport toolDescribeAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.server';\nimport toolOpenAuthoringFile from '../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.server';\nimport toolUseAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.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;\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/doompi-author',\n  global: (context) => ({\n    get channels(): DoomServerSessionPlugin['channels'] { return [() => via({ frameType: 'author_webmcp' }, channelAuthorWebmcp())]; },\n    get methods(): DoomServerSessionPlugin['methods'] { return [at(methodBridge, context)]; },\n  }),\n  workspace: (context) => ({\n    get channels(): DoomServerSessionPlugin['channels'] { return [() => via({ frameType: 'author_webmcp' }, channelAuthorWebmcp())]; },\n    get methods(): DoomServerSessionPlugin['methods'] { return [at(methodBridge, context)]; },\n  }),\n  session: async (context) => {\n    const scopeSession = await rootSession(context);\n    const contextSession = { ...context, root: scopeSession.value };\n    return {\n      ...composeRootHooks(scopeSession),\n      get api(): DoomServerSessionPlugin['api'] { return [at(apiRoute, contextSession)]; },\n      get channels(): DoomServerSessionPlugin['channels'] { return [() => via({ frameType: 'author_webmcp' }, channelAuthorWebmcp())]; },\n      get commands(): DoomServerSessionPlugin['commands'] { return [via({ name: 'author' }, at(commandAuthor, contextSession))]; },\n      get hooks(): DoomServerSessionPlugin['hooks'] { return [via({ event: 'before_agent_start' }, at(hookBeforeAgentStart, contextSession))]; },\n      get methods(): DoomServerSessionPlugin['methods'] { return [at(methodBridge, context)]; },\n      get resources(): DoomServerSessionPlugin['resources'] { return [at(resourceDoompiUseAuthor, contextSession)]; },\n      get tools(): DoomServerSessionPlugin['tools'] { return [via({ name: 'describe_author_tools' }, at(toolDescribeAuthorTools, contextSession)), via({ name: 'open_authoring_file' }, at(toolOpenAuthoringFile, contextSession)), via({ name: 'use_author_tools' }, at(toolUseAuthorTools, 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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"}