@agimon-ai/doompi-author 0.0.1-alpha.21 → 0.0.1-alpha.22
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/extensions/pi.cjs +2 -2
- package/dist/extensions/pi.cjs.map +1 -1
- package/dist/extensions/pi.d.mts.map +1 -1
- package/dist/extensions/pi.mjs +2 -2
- package/dist/extensions/pi.mjs.map +1 -1
- package/dist/extensions/server.cjs +2 -2
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.d.mts.map +1 -1
- package/dist/extensions/server.mjs +2 -2
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/extensions/web.mjs +2 -2
- package/dist/extensions/web.mjs.map +1 -1
- package/package.json +7 -7
package/dist/extensions/pi.cjs
CHANGED
|
@@ -138,10 +138,10 @@ var use_author_tools_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defi
|
|
|
138
138
|
//#endregion
|
|
139
139
|
//#region generated/pi.ts
|
|
140
140
|
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
141
|
-
const via = (identity, value) =>
|
|
141
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
142
142
|
...identity,
|
|
143
143
|
...value
|
|
144
|
-
}
|
|
144
|
+
};
|
|
145
145
|
const extension = (0, _agimon_ai_doompi_core_piExtension.definePiExtension)("@agimon-ai/doompi-author", async (context) => {
|
|
146
146
|
const scopeSession = await root_cli_default(context);
|
|
147
147
|
const contextSession = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi.cjs","names":["createAuthorCatalogMonitor","authorMinorMode","AUTHOR_PACKAGE_SOURCE","authorToolRestriction","defineRoot","createAuthorCatalog","DOOM_HELP_SERVICE","requireDoomHelpService","AUTHOR_PACKAGE_SOURCE","DOOM_TOOL_SURFACE_SERVICE","requireDoomToolSurface","piMinorModes","defineCliCommand","createAuthorCommand","defineCliHook","AUTHOR_PI_GUIDANCE","defineCliHook","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","definePiExtension","rootSession","composeRootHooks","commandAuthor","hookBeforeAgentStart","hookSessionStart","piToolContributions","toolDescribeAuthorTools","toolOpenAuthoringFile","toolUseAuthorTools"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/authorPiMode.ts","../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/command/author.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.cli.ts","../../generated/pi.ts"],"sourcesContent":["import type { PiToolRestriction } from '@agimon-ai/doompi-core/piExtension';\n\nimport { AUTHOR_PACKAGE_SOURCE } from '../../../../../constants/author';\nimport { authorMinorMode } from '../../../../../models/authorMode';\nimport { authorToolRestriction, createAuthorCatalogMonitor } from '../../../../../services/authorCatalog/monitor';\nimport type { AuthorCatalog } from '../../../../../services/authorCatalog/type';\n\nexport interface AuthorPiMode {\n readonly mode: ReturnType<typeof authorMinorMode.createOwner>;\n readonly restriction: PiToolRestriction;\n isActive(): boolean;\n assertAvailable(this: void): void;\n onStart(this: void): void;\n onStop(this: void): void;\n onDispose(this: void): void;\n}\n\n/** Own Author's viewport polling independently from host registration. */\nexport function createAuthorPiMode(catalog: AuthorCatalog, signal: AbortSignal): AuthorPiMode {\n const monitor = createAuthorCatalogMonitor(catalog, {\n schedule(callback, delayMs) {\n const timer = setTimeout(callback, delayMs);\n timer.unref?.();\n return () => clearTimeout(timer);\n },\n });\n let active = false;\n let started = false;\n let unsubscribe: (() => void) | undefined;\n const listeners = new Set<() => void>();\n const publish = () => {\n mode.publish();\n listeners.forEach((listener) => listener());\n };\n const mode = authorMinorMode.createOwner({\n isActive: () => active,\n detail: () => (monitor.snapshot() ? 'document viewport focused' : 'waiting for a focused document'),\n setActive(enabled) {\n signal.throwIfAborted();\n if (active === enabled) return;\n active = enabled;\n if (active && started) monitor.start();\n else monitor.stop();\n publish();\n },\n });\n const restriction: PiToolRestriction = {\n source: AUTHOR_PACKAGE_SOURCE,\n restrict: (incoming, context) => authorToolRestriction(active, !!monitor.snapshot())(incoming, context),\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n return {\n mode,\n restriction,\n isActive: () => active,\n assertAvailable() {\n if (signal.aborted) throw new Error('The Author runtime is disposed.');\n if (!active) throw new Error('Author mode is not active.');\n },\n onStart() {\n started = true;\n unsubscribe = monitor.subscribe(publish);\n if (active) monitor.start();\n },\n onStop() {\n started = false;\n active = false;\n unsubscribe?.();\n unsubscribe = undefined;\n monitor.stop();\n },\n onDispose() {\n monitor.dispose();\n listeners.clear();\n },\n };\n}\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport { DOOM_HELP_SERVICE, requireDoomHelpService } from '@agimon-ai/doompi-core/help';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\nimport { DOOM_TOOL_SURFACE_SERVICE, requireDoomToolSurface } from '@agimon-ai/doompi-core/toolSurface';\nimport { piMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { AUTHOR_PACKAGE_SOURCE } from '../../../../constants/author';\nimport { createAuthorCatalog } from '../../../../services/authorCatalog';\nimport type { AuthorExtensionDependencies } from '../../../../types/extension';\nimport { createAuthorPiMode } from './_lib/authorPiMode';\n\nexport default defineRoot((context: PiPluginContext<Partial<AuthorExtensionDependencies>>) => {\n const catalog = context.options?.catalog ?? createAuthorCatalog();\n const mode = createAuthorPiMode(catalog, context.signal);\n const registrations = (cordis: Context): void => {\n cordis.inject([DOOM_HELP_SERVICE], (child) => {\n const handle = requireDoomHelpService(child).register({\n source: AUTHOR_PACKAGE_SOURCE,\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-author',\n description:\n 'Use @agimon-ai/doompi-author: Visual steering workspace for focused document review and bounded authoring',\n },\n ],\n });\n child.effect(() => () => handle.dispose());\n });\n cordis.inject([DOOM_TOOL_SURFACE_SERVICE], (child) => {\n const surface = requireDoomToolSurface(child);\n const handle = surface.register(mode.restriction);\n child.effect(() => () => handle.dispose());\n child.effect(() =>\n mode.restriction.subscribe\n ? mode.restriction.subscribe(() => handle.update(mode.restriction.restrict))\n : () => undefined,\n );\n });\n };\n\n return {\n value: {\n catalog,\n assertAvailable: mode.assertAvailable,\n mode,\n service: context.options?.service,\n },\n services: [piMinorModes([mode.mode]), registrations],\n onStart: mode.onStart,\n onStop: mode.onStop,\n onDispose: mode.onDispose,\n };\n});\n","import { defineCliCommand, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createAuthorCommand } from '../../../../../services/authorCommand';\nimport type { AuthorExtensionService } from '../../../../../types/extension';\n\n// The terminal takes the command as a native Pi declaration, so this half names\n// itself through createAuthorCommand rather than through the generated entry.\nexport default defineCliCommand((context: WithRoot<unknown, { readonly service?: AuthorExtensionService }>) =>\n createAuthorCommand(context.root.service),\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport { AUTHOR_PI_GUIDANCE } from '../../../../../constants/author';\nimport type { AuthorExtensionDependencies } from '../../../../../types/extension';\ntype AuthorPiScope = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<Partial<AuthorExtensionDependencies>>, AuthorPiScope>) =>\n (event: { systemPrompt: string }) =>\n context.root.mode.isActive() ? { systemPrompt: `${event.systemPrompt}\\n\\n${AUTHOR_PI_GUIDANCE}` } : undefined,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { AuthorExtensionDependencies } from '../../../../../types/extension';\ntype AuthorPiScope = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<Partial<AuthorExtensionDependencies>>, AuthorPiScope>) => () =>\n context.root.mode.mode.publish(),\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 { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport commandAuthor from '../src/extensions/workspaces/sessions/(backend)/command/author.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli';\nimport toolDescribeAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.cli';\nimport toolOpenAuthoringFile from '../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.cli';\nimport toolUseAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof commandAuthor> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof toolDescribeAuthorTools> | OptionsOf<typeof toolOpenAuthoringFile> | OptionsOf<typeof toolUseAuthorTools>, 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;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T => ({ ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-author', 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(commandAuthor, contextSession)]; },\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n },\n ...piToolContributions('@agimon-ai/doompi-author', [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 };\n});\n\nexport default extension;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pi.cjs","names":["createAuthorCatalogMonitor","authorMinorMode","AUTHOR_PACKAGE_SOURCE","authorToolRestriction","defineRoot","createAuthorCatalog","DOOM_HELP_SERVICE","requireDoomHelpService","AUTHOR_PACKAGE_SOURCE","DOOM_TOOL_SURFACE_SERVICE","requireDoomToolSurface","piMinorModes","defineCliCommand","createAuthorCommand","defineCliHook","AUTHOR_PI_GUIDANCE","defineCliHook","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","defineTool","createAuthorTools","AUTHOR_TOOL_WHEN","definePiExtension","rootSession","composeRootHooks","commandAuthor","hookBeforeAgentStart","hookSessionStart","piToolContributions","toolDescribeAuthorTools","toolOpenAuthoringFile","toolUseAuthorTools"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/authorPiMode.ts","../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/command/author.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.cli.ts","../../generated/pi.ts"],"sourcesContent":["import type { PiToolRestriction } from '@agimon-ai/doompi-core/piExtension';\n\nimport { AUTHOR_PACKAGE_SOURCE } from '../../../../../constants/author';\nimport { authorMinorMode } from '../../../../../models/authorMode';\nimport { authorToolRestriction, createAuthorCatalogMonitor } from '../../../../../services/authorCatalog/monitor';\nimport type { AuthorCatalog } from '../../../../../services/authorCatalog/type';\n\nexport interface AuthorPiMode {\n readonly mode: ReturnType<typeof authorMinorMode.createOwner>;\n readonly restriction: PiToolRestriction;\n isActive(): boolean;\n assertAvailable(this: void): void;\n onStart(this: void): void;\n onStop(this: void): void;\n onDispose(this: void): void;\n}\n\n/** Own Author's viewport polling independently from host registration. */\nexport function createAuthorPiMode(catalog: AuthorCatalog, signal: AbortSignal): AuthorPiMode {\n const monitor = createAuthorCatalogMonitor(catalog, {\n schedule(callback, delayMs) {\n const timer = setTimeout(callback, delayMs);\n timer.unref?.();\n return () => clearTimeout(timer);\n },\n });\n let active = false;\n let started = false;\n let unsubscribe: (() => void) | undefined;\n const listeners = new Set<() => void>();\n const publish = () => {\n mode.publish();\n listeners.forEach((listener) => listener());\n };\n const mode = authorMinorMode.createOwner({\n isActive: () => active,\n detail: () => (monitor.snapshot() ? 'document viewport focused' : 'waiting for a focused document'),\n setActive(enabled) {\n signal.throwIfAborted();\n if (active === enabled) return;\n active = enabled;\n if (active && started) monitor.start();\n else monitor.stop();\n publish();\n },\n });\n const restriction: PiToolRestriction = {\n source: AUTHOR_PACKAGE_SOURCE,\n restrict: (incoming, context) => authorToolRestriction(active, !!monitor.snapshot())(incoming, context),\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n return {\n mode,\n restriction,\n isActive: () => active,\n assertAvailable() {\n if (signal.aborted) throw new Error('The Author runtime is disposed.');\n if (!active) throw new Error('Author mode is not active.');\n },\n onStart() {\n started = true;\n unsubscribe = monitor.subscribe(publish);\n if (active) monitor.start();\n },\n onStop() {\n started = false;\n active = false;\n unsubscribe?.();\n unsubscribe = undefined;\n monitor.stop();\n },\n onDispose() {\n monitor.dispose();\n listeners.clear();\n },\n };\n}\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport { DOOM_HELP_SERVICE, requireDoomHelpService } from '@agimon-ai/doompi-core/help';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\nimport { DOOM_TOOL_SURFACE_SERVICE, requireDoomToolSurface } from '@agimon-ai/doompi-core/toolSurface';\nimport { piMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { AUTHOR_PACKAGE_SOURCE } from '../../../../constants/author';\nimport { createAuthorCatalog } from '../../../../services/authorCatalog';\nimport type { AuthorExtensionDependencies } from '../../../../types/extension';\nimport { createAuthorPiMode } from './_lib/authorPiMode';\n\nexport default defineRoot((context: PiPluginContext<Partial<AuthorExtensionDependencies>>) => {\n const catalog = context.options?.catalog ?? createAuthorCatalog();\n const mode = createAuthorPiMode(catalog, context.signal);\n const registrations = (cordis: Context): void => {\n cordis.inject([DOOM_HELP_SERVICE], (child) => {\n const handle = requireDoomHelpService(child).register({\n source: AUTHOR_PACKAGE_SOURCE,\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-author',\n description:\n 'Use @agimon-ai/doompi-author: Visual steering workspace for focused document review and bounded authoring',\n },\n ],\n });\n child.effect(() => () => handle.dispose());\n });\n cordis.inject([DOOM_TOOL_SURFACE_SERVICE], (child) => {\n const surface = requireDoomToolSurface(child);\n const handle = surface.register(mode.restriction);\n child.effect(() => () => handle.dispose());\n child.effect(() =>\n mode.restriction.subscribe\n ? mode.restriction.subscribe(() => handle.update(mode.restriction.restrict))\n : () => undefined,\n );\n });\n };\n\n return {\n value: {\n catalog,\n assertAvailable: mode.assertAvailable,\n mode,\n service: context.options?.service,\n },\n services: [piMinorModes([mode.mode]), registrations],\n onStart: mode.onStart,\n onStop: mode.onStop,\n onDispose: mode.onDispose,\n };\n});\n","import { defineCliCommand, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createAuthorCommand } from '../../../../../services/authorCommand';\nimport type { AuthorExtensionService } from '../../../../../types/extension';\n\n// The terminal takes the command as a native Pi declaration, so this half names\n// itself through createAuthorCommand rather than through the generated entry.\nexport default defineCliCommand((context: WithRoot<unknown, { readonly service?: AuthorExtensionService }>) =>\n createAuthorCommand(context.root.service),\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport { AUTHOR_PI_GUIDANCE } from '../../../../../constants/author';\nimport type { AuthorExtensionDependencies } from '../../../../../types/extension';\ntype AuthorPiScope = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<Partial<AuthorExtensionDependencies>>, AuthorPiScope>) =>\n (event: { systemPrompt: string }) =>\n context.root.mode.isActive() ? { systemPrompt: `${event.systemPrompt}\\n\\n${AUTHOR_PI_GUIDANCE}` } : undefined,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { AuthorExtensionDependencies } from '../../../../../types/extension';\ntype AuthorPiScope = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<Partial<AuthorExtensionDependencies>>, AuthorPiScope>) => () =>\n context.root.mode.mode.publish(),\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 { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport commandAuthor from '../src/extensions/workspaces/sessions/(backend)/command/author.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli';\nimport toolDescribeAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.cli';\nimport toolOpenAuthoringFile from '../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.cli';\nimport toolUseAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof commandAuthor> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof toolDescribeAuthorTools> | OptionsOf<typeof toolOpenAuthoringFile> | OptionsOf<typeof toolUseAuthorTools>, 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;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-author', 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(commandAuthor, contextSession)]; },\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n },\n ...piToolContributions('@agimon-ai/doompi-author', [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 };\n});\n\nexport default extension;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi.d.mts","names":[],"sources":["../../generated/pi.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"pi.d.mts","names":[],"sources":["../../generated/pi.ts"],"mappings":";;qBAwBa,+DAAS,mBAAA,QAAT"}
|
package/dist/extensions/pi.mjs
CHANGED
|
@@ -134,10 +134,10 @@ var use_author_tools_cli_default = defineTool$1((context) => ({
|
|
|
134
134
|
//#endregion
|
|
135
135
|
//#region generated/pi.ts
|
|
136
136
|
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
137
|
-
const via = (identity, value) =>
|
|
137
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
138
138
|
...identity,
|
|
139
139
|
...value
|
|
140
|
-
}
|
|
140
|
+
};
|
|
141
141
|
const extension = definePiExtension("@agimon-ai/doompi-author", async (context) => {
|
|
142
142
|
const scopeSession = await root_cli_default(context);
|
|
143
143
|
const contextSession = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi.mjs","names":["defineTool","defineTool","defineTool","rootSession","commandAuthor","hookBeforeAgentStart","hookSessionStart","toolDescribeAuthorTools","toolOpenAuthoringFile","toolUseAuthorTools"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/authorPiMode.ts","../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/command/author.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.cli.ts","../../generated/pi.ts"],"sourcesContent":["import type { PiToolRestriction } from '@agimon-ai/doompi-core/piExtension';\n\nimport { AUTHOR_PACKAGE_SOURCE } from '../../../../../constants/author';\nimport { authorMinorMode } from '../../../../../models/authorMode';\nimport { authorToolRestriction, createAuthorCatalogMonitor } from '../../../../../services/authorCatalog/monitor';\nimport type { AuthorCatalog } from '../../../../../services/authorCatalog/type';\n\nexport interface AuthorPiMode {\n readonly mode: ReturnType<typeof authorMinorMode.createOwner>;\n readonly restriction: PiToolRestriction;\n isActive(): boolean;\n assertAvailable(this: void): void;\n onStart(this: void): void;\n onStop(this: void): void;\n onDispose(this: void): void;\n}\n\n/** Own Author's viewport polling independently from host registration. */\nexport function createAuthorPiMode(catalog: AuthorCatalog, signal: AbortSignal): AuthorPiMode {\n const monitor = createAuthorCatalogMonitor(catalog, {\n schedule(callback, delayMs) {\n const timer = setTimeout(callback, delayMs);\n timer.unref?.();\n return () => clearTimeout(timer);\n },\n });\n let active = false;\n let started = false;\n let unsubscribe: (() => void) | undefined;\n const listeners = new Set<() => void>();\n const publish = () => {\n mode.publish();\n listeners.forEach((listener) => listener());\n };\n const mode = authorMinorMode.createOwner({\n isActive: () => active,\n detail: () => (monitor.snapshot() ? 'document viewport focused' : 'waiting for a focused document'),\n setActive(enabled) {\n signal.throwIfAborted();\n if (active === enabled) return;\n active = enabled;\n if (active && started) monitor.start();\n else monitor.stop();\n publish();\n },\n });\n const restriction: PiToolRestriction = {\n source: AUTHOR_PACKAGE_SOURCE,\n restrict: (incoming, context) => authorToolRestriction(active, !!monitor.snapshot())(incoming, context),\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n return {\n mode,\n restriction,\n isActive: () => active,\n assertAvailable() {\n if (signal.aborted) throw new Error('The Author runtime is disposed.');\n if (!active) throw new Error('Author mode is not active.');\n },\n onStart() {\n started = true;\n unsubscribe = monitor.subscribe(publish);\n if (active) monitor.start();\n },\n onStop() {\n started = false;\n active = false;\n unsubscribe?.();\n unsubscribe = undefined;\n monitor.stop();\n },\n onDispose() {\n monitor.dispose();\n listeners.clear();\n },\n };\n}\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport { DOOM_HELP_SERVICE, requireDoomHelpService } from '@agimon-ai/doompi-core/help';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\nimport { DOOM_TOOL_SURFACE_SERVICE, requireDoomToolSurface } from '@agimon-ai/doompi-core/toolSurface';\nimport { piMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { AUTHOR_PACKAGE_SOURCE } from '../../../../constants/author';\nimport { createAuthorCatalog } from '../../../../services/authorCatalog';\nimport type { AuthorExtensionDependencies } from '../../../../types/extension';\nimport { createAuthorPiMode } from './_lib/authorPiMode';\n\nexport default defineRoot((context: PiPluginContext<Partial<AuthorExtensionDependencies>>) => {\n const catalog = context.options?.catalog ?? createAuthorCatalog();\n const mode = createAuthorPiMode(catalog, context.signal);\n const registrations = (cordis: Context): void => {\n cordis.inject([DOOM_HELP_SERVICE], (child) => {\n const handle = requireDoomHelpService(child).register({\n source: AUTHOR_PACKAGE_SOURCE,\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-author',\n description:\n 'Use @agimon-ai/doompi-author: Visual steering workspace for focused document review and bounded authoring',\n },\n ],\n });\n child.effect(() => () => handle.dispose());\n });\n cordis.inject([DOOM_TOOL_SURFACE_SERVICE], (child) => {\n const surface = requireDoomToolSurface(child);\n const handle = surface.register(mode.restriction);\n child.effect(() => () => handle.dispose());\n child.effect(() =>\n mode.restriction.subscribe\n ? mode.restriction.subscribe(() => handle.update(mode.restriction.restrict))\n : () => undefined,\n );\n });\n };\n\n return {\n value: {\n catalog,\n assertAvailable: mode.assertAvailable,\n mode,\n service: context.options?.service,\n },\n services: [piMinorModes([mode.mode]), registrations],\n onStart: mode.onStart,\n onStop: mode.onStop,\n onDispose: mode.onDispose,\n };\n});\n","import { defineCliCommand, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createAuthorCommand } from '../../../../../services/authorCommand';\nimport type { AuthorExtensionService } from '../../../../../types/extension';\n\n// The terminal takes the command as a native Pi declaration, so this half names\n// itself through createAuthorCommand rather than through the generated entry.\nexport default defineCliCommand((context: WithRoot<unknown, { readonly service?: AuthorExtensionService }>) =>\n createAuthorCommand(context.root.service),\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport { AUTHOR_PI_GUIDANCE } from '../../../../../constants/author';\nimport type { AuthorExtensionDependencies } from '../../../../../types/extension';\ntype AuthorPiScope = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<Partial<AuthorExtensionDependencies>>, AuthorPiScope>) =>\n (event: { systemPrompt: string }) =>\n context.root.mode.isActive() ? { systemPrompt: `${event.systemPrompt}\\n\\n${AUTHOR_PI_GUIDANCE}` } : undefined,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { AuthorExtensionDependencies } from '../../../../../types/extension';\ntype AuthorPiScope = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<Partial<AuthorExtensionDependencies>>, AuthorPiScope>) => () =>\n context.root.mode.mode.publish(),\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 { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport commandAuthor from '../src/extensions/workspaces/sessions/(backend)/command/author.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli';\nimport toolDescribeAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.cli';\nimport toolOpenAuthoringFile from '../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.cli';\nimport toolUseAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof commandAuthor> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof toolDescribeAuthorTools> | OptionsOf<typeof toolOpenAuthoringFile> | OptionsOf<typeof toolUseAuthorTools>, 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;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T => ({ ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-author', 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(commandAuthor, contextSession)]; },\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n },\n ...piToolContributions('@agimon-ai/doompi-author', [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 };\n});\n\nexport default extension;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pi.mjs","names":["defineTool","defineTool","defineTool","rootSession","commandAuthor","hookBeforeAgentStart","hookSessionStart","toolDescribeAuthorTools","toolOpenAuthoringFile","toolUseAuthorTools"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/authorPiMode.ts","../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/command/author.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.cli.ts","../../generated/pi.ts"],"sourcesContent":["import type { PiToolRestriction } from '@agimon-ai/doompi-core/piExtension';\n\nimport { AUTHOR_PACKAGE_SOURCE } from '../../../../../constants/author';\nimport { authorMinorMode } from '../../../../../models/authorMode';\nimport { authorToolRestriction, createAuthorCatalogMonitor } from '../../../../../services/authorCatalog/monitor';\nimport type { AuthorCatalog } from '../../../../../services/authorCatalog/type';\n\nexport interface AuthorPiMode {\n readonly mode: ReturnType<typeof authorMinorMode.createOwner>;\n readonly restriction: PiToolRestriction;\n isActive(): boolean;\n assertAvailable(this: void): void;\n onStart(this: void): void;\n onStop(this: void): void;\n onDispose(this: void): void;\n}\n\n/** Own Author's viewport polling independently from host registration. */\nexport function createAuthorPiMode(catalog: AuthorCatalog, signal: AbortSignal): AuthorPiMode {\n const monitor = createAuthorCatalogMonitor(catalog, {\n schedule(callback, delayMs) {\n const timer = setTimeout(callback, delayMs);\n timer.unref?.();\n return () => clearTimeout(timer);\n },\n });\n let active = false;\n let started = false;\n let unsubscribe: (() => void) | undefined;\n const listeners = new Set<() => void>();\n const publish = () => {\n mode.publish();\n listeners.forEach((listener) => listener());\n };\n const mode = authorMinorMode.createOwner({\n isActive: () => active,\n detail: () => (monitor.snapshot() ? 'document viewport focused' : 'waiting for a focused document'),\n setActive(enabled) {\n signal.throwIfAborted();\n if (active === enabled) return;\n active = enabled;\n if (active && started) monitor.start();\n else monitor.stop();\n publish();\n },\n });\n const restriction: PiToolRestriction = {\n source: AUTHOR_PACKAGE_SOURCE,\n restrict: (incoming, context) => authorToolRestriction(active, !!monitor.snapshot())(incoming, context),\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n return {\n mode,\n restriction,\n isActive: () => active,\n assertAvailable() {\n if (signal.aborted) throw new Error('The Author runtime is disposed.');\n if (!active) throw new Error('Author mode is not active.');\n },\n onStart() {\n started = true;\n unsubscribe = monitor.subscribe(publish);\n if (active) monitor.start();\n },\n onStop() {\n started = false;\n active = false;\n unsubscribe?.();\n unsubscribe = undefined;\n monitor.stop();\n },\n onDispose() {\n monitor.dispose();\n listeners.clear();\n },\n };\n}\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport { DOOM_HELP_SERVICE, requireDoomHelpService } from '@agimon-ai/doompi-core/help';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\nimport { DOOM_TOOL_SURFACE_SERVICE, requireDoomToolSurface } from '@agimon-ai/doompi-core/toolSurface';\nimport { piMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { AUTHOR_PACKAGE_SOURCE } from '../../../../constants/author';\nimport { createAuthorCatalog } from '../../../../services/authorCatalog';\nimport type { AuthorExtensionDependencies } from '../../../../types/extension';\nimport { createAuthorPiMode } from './_lib/authorPiMode';\n\nexport default defineRoot((context: PiPluginContext<Partial<AuthorExtensionDependencies>>) => {\n const catalog = context.options?.catalog ?? createAuthorCatalog();\n const mode = createAuthorPiMode(catalog, context.signal);\n const registrations = (cordis: Context): void => {\n cordis.inject([DOOM_HELP_SERVICE], (child) => {\n const handle = requireDoomHelpService(child).register({\n source: AUTHOR_PACKAGE_SOURCE,\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-author',\n description:\n 'Use @agimon-ai/doompi-author: Visual steering workspace for focused document review and bounded authoring',\n },\n ],\n });\n child.effect(() => () => handle.dispose());\n });\n cordis.inject([DOOM_TOOL_SURFACE_SERVICE], (child) => {\n const surface = requireDoomToolSurface(child);\n const handle = surface.register(mode.restriction);\n child.effect(() => () => handle.dispose());\n child.effect(() =>\n mode.restriction.subscribe\n ? mode.restriction.subscribe(() => handle.update(mode.restriction.restrict))\n : () => undefined,\n );\n });\n };\n\n return {\n value: {\n catalog,\n assertAvailable: mode.assertAvailable,\n mode,\n service: context.options?.service,\n },\n services: [piMinorModes([mode.mode]), registrations],\n onStart: mode.onStart,\n onStop: mode.onStop,\n onDispose: mode.onDispose,\n };\n});\n","import { defineCliCommand, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createAuthorCommand } from '../../../../../services/authorCommand';\nimport type { AuthorExtensionService } from '../../../../../types/extension';\n\n// The terminal takes the command as a native Pi declaration, so this half names\n// itself through createAuthorCommand rather than through the generated entry.\nexport default defineCliCommand((context: WithRoot<unknown, { readonly service?: AuthorExtensionService }>) =>\n createAuthorCommand(context.root.service),\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport { AUTHOR_PI_GUIDANCE } from '../../../../../constants/author';\nimport type { AuthorExtensionDependencies } from '../../../../../types/extension';\ntype AuthorPiScope = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<Partial<AuthorExtensionDependencies>>, AuthorPiScope>) =>\n (event: { systemPrompt: string }) =>\n context.root.mode.isActive() ? { systemPrompt: `${event.systemPrompt}\\n\\n${AUTHOR_PI_GUIDANCE}` } : undefined,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { AuthorExtensionDependencies } from '../../../../../types/extension';\ntype AuthorPiScope = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<Partial<AuthorExtensionDependencies>>, AuthorPiScope>) => () =>\n context.root.mode.mode.publish(),\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 { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport commandAuthor from '../src/extensions/workspaces/sessions/(backend)/command/author.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli';\nimport toolDescribeAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/describe-author-tools.cli';\nimport toolOpenAuthoringFile from '../src/extensions/workspaces/sessions/(backend)/tool/open-authoring-file.cli';\nimport toolUseAuthorTools from '../src/extensions/workspaces/sessions/(backend)/tool/use-author-tools.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof commandAuthor> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof toolDescribeAuthorTools> | OptionsOf<typeof toolOpenAuthoringFile> | OptionsOf<typeof toolUseAuthorTools>, 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;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-author', 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(commandAuthor, contextSession)]; },\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n },\n ...piToolContributions('@agimon-ai/doompi-author', [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 };\n});\n\nexport default extension;\n"],"mappings":"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"}
|
|
@@ -590,10 +590,10 @@ var use_author_tools_server_default = (0, _agimon_ai_doompi_core_extensionFile.d
|
|
|
590
590
|
//#endregion
|
|
591
591
|
//#region generated/server.ts
|
|
592
592
|
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
593
|
-
const via = (identity, value) =>
|
|
593
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
594
594
|
...identity,
|
|
595
595
|
...value
|
|
596
|
-
}
|
|
596
|
+
};
|
|
597
597
|
const facet = (0, _agimon_ai_doompi_core_serverFacet.defineServerPlugin)({
|
|
598
598
|
name: "@agimon-ai/doompi-author",
|
|
599
599
|
global: (context) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.cjs","names":["path","fs","defineApiRoutes","apiResponse","AuthorBridgeError","Hono","routes","parseUseAuthorToolInput","Hono","routes","parseStructuredDocument","preflightStructuredDocument","serializeStructuredDocument","createAuthorBridgeState","randomUUID","Hono","routes","defineRoot","authorMinorMode","createAuthorCatalog","serverMinorModes","routes","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/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\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 Error('Document path is outside the working directory.');\n const realCandidate = await fs.realpath(candidate);\n if (realCandidate !== root && !realCandidate.startsWith(`${root}${path.sep}`)) {\n throw new Error('Document path is outside the working directory.');\n }\n const stat = await fs.stat(realCandidate);\n if (stat.size > AUTHOR_DOCUMENT_MAX_BYTES) {\n throw new Error(`Document exceeds the ${AUTHOR_DOCUMENT_MAX_BYTES} byte preview limit.`);\n }\n return await fs.readFile(realCandidate);\n}\n","import { apiResponse, defineApiRoutes } from '@agimon-ai/doompi-core/web';\n\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 bridgeDescribe: {\n method: 'GET',\n path: '/bridge/describe',\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>(),\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, type AuthorBridgeState } from '../../../../../../../models/authorBridgeState';\nimport { parseUseAuthorToolInput } from '../../../../../../../schemas/authorTools';\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(state: AuthorBridgeState): 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 return context.json(state.register(text(value, 'bindingId'), generation(value)));\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 return context.json(\n state.catalog(\n text(value, 'bindingId'),\n generation(value),\n text(value, 'ownerToken'),\n tools as AuthorViewportCapabilityDescriptor[],\n ),\n );\n });\n app.post(routes.bridgeNext.path, async (context) => {\n const value = await body(context.req.raw);\n return context.json(\n await state.next(text(value, 'bindingId'), generation(value), text(value, 'ownerToken'), context.req.raw.signal),\n );\n });\n app.post(routes.bridgeResult.path, async (context) => {\n const value = await body(context.req.raw);\n state.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 state.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 state.disconnect(text(value, 'bindingId'), generation(value));\n return context.json({ accepted: true });\n });\n app.get(routes.bridgeDescribe.path, (context) => context.json(state.describe()));\n app.post(routes.bridgeInvoke.path, async (context) => {\n const value = parseUseAuthorToolInput(await context.req.raw.json());\n return context.json(await state.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 { 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 format?: unknown;\n operations?: unknown;\n preflightDigest?: unknown;\n csvDialect?: unknown;\n}\n\nexport interface AuthorDocumentApiOptions {\n cwd?: string;\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 const status = /limit|too many|exceeds/i.test(message) ? 413 : /outside/i.test(message) ? 403 : 422;\n return context.json({ error: message }, status);\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 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 type { AuthorCatalog } from '../../../../../../../services/authorCatalog/type';\nimport { readDocument } from '../../../../../../../services/structuredDocuments/document';\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 bridge?: AuthorBridgeState;\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 bridge = options.bridge ?? 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(bridge));\n app.route('/', createAuthorDocumentApi(options.cwd === undefined ? {} : { cwd: options.cwd }));\n return app;\n}\n\nexport const api: DoomApi = {\n basePath: API_BASE_PATH,\n start(context: DoomApiContext): DoomApiHandler {\n const bridge = createBridge();\n const app = createAuthorApi({\n ...(context.sessionId === undefined ? {} : { sessionId: context.sessionId }),\n ...(context.cwd === undefined ? {} : { cwd: context.cwd }),\n bridge,\n });\n return { fetch: (request) => app.fetch(request), close: () => bridge.close() };\n },\n};\n\n/** The session API and tools share the same browser ownership and pending requests. */\nexport function createAuthorSessionApi(cwd: string, sessionId: string): { api: DoomApi; catalog: AuthorCatalog } {\n const bridge = createBridge();\n return {\n catalog: {\n async open(path, signal) {\n signal?.throwIfAborted();\n const bytes = await readDocument(cwd, path);\n return { path, byteLength: bytes.byteLength };\n },\n async describe(signal) {\n signal?.throwIfAborted();\n return bridge.describe();\n },\n execute: (input, signal) => bridge.invoke(input, signal),\n },\n api: {\n basePath: API_BASE_PATH,\n start() {\n const app = createAuthorApi({ cwd, sessionId, bridge });\n return { fetch: (request) => app.fetch(request), close: () => bridge.close() };\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 },\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 kind: 'register';\n generation: number;\n}\n\nexport interface AuthorReleaseMessage {\n kind: 'release';\n generation: number;\n}\nexport interface AuthorCatalogMessage {\n kind: 'catalog';\n generation: number;\n ownerToken: string;\n tools: AuthorViewportCapabilityDescriptor[];\n}\n\nexport interface AuthorResultMessage {\n kind: 'result';\n generation: number;\n ownerToken: string;\n catalogToken: string;\n requestId: string;\n result: unknown;\n}\n\nexport interface AuthorCancelledMessage {\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 kind: 'accepted';\n generation: number;\n ownerToken: string;\n catalogToken?: string;\n leaseMs: number;\n}\n\nexport interface AuthorRequestMessage {\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 kind: 'cancel';\n generation: number;\n ownerToken: string;\n catalogToken: string;\n requestId: string;\n}\n\nexport interface AuthorRejectedMessage {\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 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 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 (!isRecord(value) || typeof value.kind !== 'string') 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): string => `${sessionId}\\0${connectionId}`;\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) ?? 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) {\n try {\n const response = await send(\n binding.scope,\n routes.bridgeNext.path,\n {\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 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 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);\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 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 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' && previous !== undefined) publish(previous, reply);\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 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 => ({ ...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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"}
|
|
1
|
+
{"version":3,"file":"server.cjs","names":["path","fs","defineApiRoutes","apiResponse","AuthorBridgeError","Hono","routes","parseUseAuthorToolInput","Hono","routes","parseStructuredDocument","preflightStructuredDocument","serializeStructuredDocument","createAuthorBridgeState","randomUUID","Hono","routes","defineRoot","authorMinorMode","createAuthorCatalog","serverMinorModes","routes","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/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\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 Error('Document path is outside the working directory.');\n const realCandidate = await fs.realpath(candidate);\n if (realCandidate !== root && !realCandidate.startsWith(`${root}${path.sep}`)) {\n throw new Error('Document path is outside the working directory.');\n }\n const stat = await fs.stat(realCandidate);\n if (stat.size > AUTHOR_DOCUMENT_MAX_BYTES) {\n throw new Error(`Document exceeds the ${AUTHOR_DOCUMENT_MAX_BYTES} byte preview limit.`);\n }\n return await fs.readFile(realCandidate);\n}\n","import { apiResponse, defineApiRoutes } from '@agimon-ai/doompi-core/web';\n\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 bridgeDescribe: {\n method: 'GET',\n path: '/bridge/describe',\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>(),\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, type AuthorBridgeState } from '../../../../../../../models/authorBridgeState';\nimport { parseUseAuthorToolInput } from '../../../../../../../schemas/authorTools';\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(state: AuthorBridgeState): 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 return context.json(state.register(text(value, 'bindingId'), generation(value)));\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 return context.json(\n state.catalog(\n text(value, 'bindingId'),\n generation(value),\n text(value, 'ownerToken'),\n tools as AuthorViewportCapabilityDescriptor[],\n ),\n );\n });\n app.post(routes.bridgeNext.path, async (context) => {\n const value = await body(context.req.raw);\n return context.json(\n await state.next(text(value, 'bindingId'), generation(value), text(value, 'ownerToken'), context.req.raw.signal),\n );\n });\n app.post(routes.bridgeResult.path, async (context) => {\n const value = await body(context.req.raw);\n state.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 state.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 state.disconnect(text(value, 'bindingId'), generation(value));\n return context.json({ accepted: true });\n });\n app.get(routes.bridgeDescribe.path, (context) => context.json(state.describe()));\n app.post(routes.bridgeInvoke.path, async (context) => {\n const value = parseUseAuthorToolInput(await context.req.raw.json());\n return context.json(await state.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 { 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 format?: unknown;\n operations?: unknown;\n preflightDigest?: unknown;\n csvDialect?: unknown;\n}\n\nexport interface AuthorDocumentApiOptions {\n cwd?: string;\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 const status = /limit|too many|exceeds/i.test(message) ? 413 : /outside/i.test(message) ? 403 : 422;\n return context.json({ error: message }, status);\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 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 type { AuthorCatalog } from '../../../../../../../services/authorCatalog/type';\nimport { readDocument } from '../../../../../../../services/structuredDocuments/document';\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 bridge?: AuthorBridgeState;\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 bridge = options.bridge ?? 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(bridge));\n app.route('/', createAuthorDocumentApi(options.cwd === undefined ? {} : { cwd: options.cwd }));\n return app;\n}\n\nexport const api: DoomApi = {\n basePath: API_BASE_PATH,\n start(context: DoomApiContext): DoomApiHandler {\n const bridge = createBridge();\n const app = createAuthorApi({\n ...(context.sessionId === undefined ? {} : { sessionId: context.sessionId }),\n ...(context.cwd === undefined ? {} : { cwd: context.cwd }),\n bridge,\n });\n return { fetch: (request) => app.fetch(request), close: () => bridge.close() };\n },\n};\n\n/** The session API and tools share the same browser ownership and pending requests. */\nexport function createAuthorSessionApi(cwd: string, sessionId: string): { api: DoomApi; catalog: AuthorCatalog } {\n const bridge = createBridge();\n return {\n catalog: {\n async open(path, signal) {\n signal?.throwIfAborted();\n const bytes = await readDocument(cwd, path);\n return { path, byteLength: bytes.byteLength };\n },\n async describe(signal) {\n signal?.throwIfAborted();\n return bridge.describe();\n },\n execute: (input, signal) => bridge.invoke(input, signal),\n },\n api: {\n basePath: API_BASE_PATH,\n start() {\n const app = createAuthorApi({ cwd, sessionId, bridge });\n return { fetch: (request) => app.fetch(request), close: () => bridge.close() };\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 },\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 kind: 'register';\n generation: number;\n}\n\nexport interface AuthorReleaseMessage {\n kind: 'release';\n generation: number;\n}\nexport interface AuthorCatalogMessage {\n kind: 'catalog';\n generation: number;\n ownerToken: string;\n tools: AuthorViewportCapabilityDescriptor[];\n}\n\nexport interface AuthorResultMessage {\n kind: 'result';\n generation: number;\n ownerToken: string;\n catalogToken: string;\n requestId: string;\n result: unknown;\n}\n\nexport interface AuthorCancelledMessage {\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 kind: 'accepted';\n generation: number;\n ownerToken: string;\n catalogToken?: string;\n leaseMs: number;\n}\n\nexport interface AuthorRequestMessage {\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 kind: 'cancel';\n generation: number;\n ownerToken: string;\n catalogToken: string;\n requestId: string;\n}\n\nexport interface AuthorRejectedMessage {\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 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 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 (!isRecord(value) || typeof value.kind !== 'string') 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): string => `${sessionId}\\0${connectionId}`;\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) ?? 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) {\n try {\n const response = await send(\n binding.scope,\n routes.bridgeNext.path,\n {\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 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 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);\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 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 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' && previous !== undefined) publish(previous, reply);\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 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.mts","names":[],"sources":["../../generated/server.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"server.d.mts","names":[],"sources":["../../generated/server.ts"],"mappings":";qBAqBa,oDAAK"}
|
|
@@ -584,10 +584,10 @@ var use_author_tools_server_default = defineTool((context) => ({
|
|
|
584
584
|
//#endregion
|
|
585
585
|
//#region generated/server.ts
|
|
586
586
|
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
587
|
-
const via = (identity, value) =>
|
|
587
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
588
588
|
...identity,
|
|
589
589
|
...value
|
|
590
|
-
}
|
|
590
|
+
};
|
|
591
591
|
const facet = defineServerPlugin({
|
|
592
592
|
name: "@agimon-ai/doompi-author",
|
|
593
593
|
global: (context) => ({
|