@agimon-ai/doompi 0.0.1-alpha.111 → 0.0.1-alpha.112

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.
@@ -42,6 +42,9 @@ function terminalChildSessionPlugin(cordis, models, sessionsRoot) {
42
42
  const currentSession = sessionContext.get(_agimon_ai_doompi_core_cordisHost.DOOM_CORDIS_SESSION_SERVICE);
43
43
  return require_extensions_fast.readSessionFastMode(currentSession.context.sessionManager);
44
44
  },
45
+ subscribeMcpTool: (listener) => sessionContext.on("internal/service", (name) => {
46
+ if (name === _agimon_ai_doompi_core_childSession.DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) listener();
47
+ }),
45
48
  mcpTool: () => sessionContext.get(_agimon_ai_doompi_core_childSession.DOOM_CHILD_SESSION_MCP_TOOL_SERVICE)
46
49
  });
47
50
  sessionContext.provide(_agimon_ai_doompi_core_childSession.DOOM_CHILD_SESSION_SERVICE, childSessions.get());
@@ -1 +1 @@
1
- {"version":3,"file":"terminalChildSession.cjs","names":["DOOM_CORDIS_SESSION_SERVICE","createTerminalPiChildSessionServiceProvider","readSessionFastMode","DOOM_CHILD_SESSION_MCP_TOOL_SERVICE","DOOM_CHILD_SESSION_SERVICE","getAgentDir","ModelRuntime","path","connectDoomCordisHost"],"sources":["../../src/extensions/terminalChildSession.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n DOOM_CHILD_SESSION_SERVICE,\n DOOM_CHILD_SESSION_MCP_TOOL_SERVICE,\n type DoomChildSessionTool,\n} from '@agimon-ai/doompi-core/childSession';\nimport {\n connectDoomCordisHost,\n DOOM_CORDIS_SESSION_SERVICE,\n type DoomCordisSessionService,\n} from '@agimon-ai/doompi-core/cordisHost';\nimport { createTerminalPiChildSessionServiceProvider } from '@agimon-ai/doompi-core/terminalPiChildSessionService';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { Provider } from '@earendil-works/pi-ai';\nimport { getAgentDir, ModelRuntime, type ExtensionAPI, type ModelRegistry } from '@earendil-works/pi-coding-agent';\n\nimport { readSessionFastMode } from './fast';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi/terminal-child-session';\n\n/**\n * Collect the providers registered in this process by Pi extensions.\n *\n * The child ModelRuntime is built from auth.json and models.json, so it only\n * knows providers that exist on disk. A custom provider contributed through\n * `pi.registerProvider()` lives solely in the host registry, and its stream\n * closures cannot be reconstructed from a file. Reading the live registry per\n * spawn keeps late registrations visible.\n */\nfunction registeredProviders(registry: ModelRegistry): readonly Provider[] {\n const providers: Provider[] = [];\n for (const id of registry.getRegisteredProviderIds()) {\n const provider = registry.getRegisteredNativeProvider(id) ?? registry.getProvider(id);\n if (provider !== undefined) providers.push(provider);\n }\n return providers;\n}\n\nfunction terminalChildSessionPlugin(cordis: Context, models: ModelRuntime, sessionsRoot: string): void {\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const extensionContext = session.context;\n const childSessions = createTerminalPiChildSessionServiceProvider({\n cwd: extensionContext.cwd,\n sessionsRoot,\n models,\n providers: () => registeredProviders(extensionContext.modelRegistry),\n defaultModel: () => extensionContext.model,\n parentFastMode: () => {\n const currentSession = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n return readSessionFastMode(currentSession.context.sessionManager);\n },\n mcpTool: () => sessionContext.get(DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) as DoomChildSessionTool | undefined,\n });\n sessionContext.provide(DOOM_CHILD_SESSION_SERVICE, childSessions.get());\n sessionContext.effect(() => () => childSessions.close(), `${PACKAGE_SOURCE}/lifetime`);\n });\n}\n\n/** Bind terminal Pi child ownership inside the core Cordis composition, before feature packages consume it. */\nexport async function terminalChildSessionExtension(pi: ExtensionAPI): Promise<void> {\n const agentDir = getAgentDir();\n const models = await ModelRuntime.create({\n authPath: path.join(agentDir, 'auth.json'),\n modelsPath: path.join(agentDir, 'models.json'),\n refreshOnCreate: false,\n });\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const sessionsRoot = path.join(agentDir, 'sessions');\n const fiber = connection.root.plugin((cordis) => terminalChildSessionPlugin(cordis, models, sessionsRoot));\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n try {\n await fiber;\n } catch (error) {\n await fiber.dispose();\n await connection.dispose();\n throw error;\n }\n}\n\nexport default terminalChildSessionExtension;\n"],"mappings":";;;;;;;;;;;;;AAmBA,MAAM,iBAAiB;;;;;;;;;;AAWvB,SAAS,oBAAoB,UAA8C;CACzE,MAAM,YAAwB,CAAC;CAC/B,KAAK,MAAM,MAAM,SAAS,yBAAyB,GAAG;EACpD,MAAM,WAAW,SAAS,4BAA4B,EAAE,KAAK,SAAS,YAAY,EAAE;EACpF,IAAI,aAAa,KAAA,GAAW,UAAU,KAAK,QAAQ;CACrD;CACA,OAAO;AACT;AAEA,SAAS,2BAA2B,QAAiB,QAAsB,cAA4B;CACrG,OAAO,OAAO,CAACA,kCAAAA,2BAA2B,IAAI,mBAAmB;EAE/D,MAAM,mBADU,eAAe,IAAIA,kCAAAA,2BACJ,CAAC,CAAC;EACjC,MAAM,iBAAA,GAAgBC,qDAAAA,4CAAAA,CAA4C;GAChE,KAAK,iBAAiB;GACtB;GACA;GACA,iBAAiB,oBAAoB,iBAAiB,aAAa;GACnE,oBAAoB,iBAAiB;GACrC,sBAAsB;IACpB,MAAM,iBAAiB,eAAe,IAAID,kCAAAA,2BAA2B;IACrE,OAAOE,wBAAAA,oBAAoB,eAAe,QAAQ,cAAc;GAClE;GACA,eAAe,eAAe,IAAIC,oCAAAA,mCAAmC;EACvE,CAAC;EACD,eAAe,QAAQC,oCAAAA,4BAA4B,cAAc,IAAI,CAAC;EACtE,eAAe,mBAAmB,cAAc,MAAM,GAAG,GAAG,eAAe,UAAU;CACvF,CAAC;AACH;;AAGA,eAAsB,8BAA8B,IAAiC;CACnF,MAAM,YAAA,GAAWC,gCAAAA,YAAAA,CAAY;CAC7B,MAAM,SAAS,MAAMC,gCAAAA,aAAa,OAAO;EACvC,UAAUC,UAAAA,QAAK,KAAK,UAAU,WAAW;EACzC,YAAYA,UAAAA,QAAK,KAAK,UAAU,aAAa;EAC7C,iBAAiB;CACnB,CAAC;CACD,MAAM,aAAa,OAAA,GAAMC,kCAAAA,sBAAAA,CAAsB,IAAI,cAAc;CACjE,MAAM,eAAeD,UAAAA,QAAK,KAAK,UAAU,UAAU;CACnD,MAAM,QAAQ,WAAW,KAAK,QAAQ,WAAW,2BAA2B,QAAQ,QAAQ,YAAY,CAAC;CACzG,IAAI;CACJ,GAAG,GACD,0BAEG,cAAc,YAAY;EACzB,IAAI;GACF,MAAM,MAAM,QAAQ;EACtB,UAAU;GACR,MAAM,WAAW,QAAQ;EAC3B;CACF,EAAA,CAAG,CACP;CACA,IAAI;EACF,MAAM;CACR,SAAS,OAAO;EACd,MAAM,MAAM,QAAQ;EACpB,MAAM,WAAW,QAAQ;EACzB,MAAM;CACR;AACF"}
1
+ {"version":3,"file":"terminalChildSession.cjs","names":["DOOM_CORDIS_SESSION_SERVICE","createTerminalPiChildSessionServiceProvider","readSessionFastMode","DOOM_CHILD_SESSION_MCP_TOOL_SERVICE","DOOM_CHILD_SESSION_SERVICE","getAgentDir","ModelRuntime","path","connectDoomCordisHost"],"sources":["../../src/extensions/terminalChildSession.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n DOOM_CHILD_SESSION_SERVICE,\n DOOM_CHILD_SESSION_MCP_TOOL_SERVICE,\n type DoomChildSessionMcpTool,\n} from '@agimon-ai/doompi-core/childSession';\nimport {\n connectDoomCordisHost,\n DOOM_CORDIS_SESSION_SERVICE,\n type DoomCordisSessionService,\n} from '@agimon-ai/doompi-core/cordisHost';\nimport { createTerminalPiChildSessionServiceProvider } from '@agimon-ai/doompi-core/terminalPiChildSessionService';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { Provider } from '@earendil-works/pi-ai';\nimport { getAgentDir, ModelRuntime, type ExtensionAPI, type ModelRegistry } from '@earendil-works/pi-coding-agent';\n\nimport { readSessionFastMode } from './fast';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi/terminal-child-session';\n\n/**\n * Collect the providers registered in this process by Pi extensions.\n *\n * The child ModelRuntime is built from auth.json and models.json, so it only\n * knows providers that exist on disk. A custom provider contributed through\n * `pi.registerProvider()` lives solely in the host registry, and its stream\n * closures cannot be reconstructed from a file. Reading the live registry per\n * spawn keeps late registrations visible.\n */\nfunction registeredProviders(registry: ModelRegistry): readonly Provider[] {\n const providers: Provider[] = [];\n for (const id of registry.getRegisteredProviderIds()) {\n const provider = registry.getRegisteredNativeProvider(id) ?? registry.getProvider(id);\n if (provider !== undefined) providers.push(provider);\n }\n return providers;\n}\n\nfunction terminalChildSessionPlugin(cordis: Context, models: ModelRuntime, sessionsRoot: string): void {\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const extensionContext = session.context;\n const childSessions = createTerminalPiChildSessionServiceProvider({\n cwd: extensionContext.cwd,\n sessionsRoot,\n models,\n providers: () => registeredProviders(extensionContext.modelRegistry),\n defaultModel: () => extensionContext.model,\n parentFastMode: () => {\n const currentSession = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n return readSessionFastMode(currentSession.context.sessionManager);\n },\n subscribeMcpTool: (listener) =>\n sessionContext.on('internal/service', (name) => {\n if (name === DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) listener();\n }),\n mcpTool: () => sessionContext.get(DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) as DoomChildSessionMcpTool | undefined,\n });\n sessionContext.provide(DOOM_CHILD_SESSION_SERVICE, childSessions.get());\n sessionContext.effect(() => () => childSessions.close(), `${PACKAGE_SOURCE}/lifetime`);\n });\n}\n\n/** Bind terminal Pi child ownership inside the core Cordis composition, before feature packages consume it. */\nexport async function terminalChildSessionExtension(pi: ExtensionAPI): Promise<void> {\n const agentDir = getAgentDir();\n const models = await ModelRuntime.create({\n authPath: path.join(agentDir, 'auth.json'),\n modelsPath: path.join(agentDir, 'models.json'),\n refreshOnCreate: false,\n });\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const sessionsRoot = path.join(agentDir, 'sessions');\n const fiber = connection.root.plugin((cordis) => terminalChildSessionPlugin(cordis, models, sessionsRoot));\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n try {\n await fiber;\n } catch (error) {\n await fiber.dispose();\n await connection.dispose();\n throw error;\n }\n}\n\nexport default terminalChildSessionExtension;\n"],"mappings":";;;;;;;;;;;;;AAmBA,MAAM,iBAAiB;;;;;;;;;;AAWvB,SAAS,oBAAoB,UAA8C;CACzE,MAAM,YAAwB,CAAC;CAC/B,KAAK,MAAM,MAAM,SAAS,yBAAyB,GAAG;EACpD,MAAM,WAAW,SAAS,4BAA4B,EAAE,KAAK,SAAS,YAAY,EAAE;EACpF,IAAI,aAAa,KAAA,GAAW,UAAU,KAAK,QAAQ;CACrD;CACA,OAAO;AACT;AAEA,SAAS,2BAA2B,QAAiB,QAAsB,cAA4B;CACrG,OAAO,OAAO,CAACA,kCAAAA,2BAA2B,IAAI,mBAAmB;EAE/D,MAAM,mBADU,eAAe,IAAIA,kCAAAA,2BACJ,CAAC,CAAC;EACjC,MAAM,iBAAA,GAAgBC,qDAAAA,4CAAAA,CAA4C;GAChE,KAAK,iBAAiB;GACtB;GACA;GACA,iBAAiB,oBAAoB,iBAAiB,aAAa;GACnE,oBAAoB,iBAAiB;GACrC,sBAAsB;IACpB,MAAM,iBAAiB,eAAe,IAAID,kCAAAA,2BAA2B;IACrE,OAAOE,wBAAAA,oBAAoB,eAAe,QAAQ,cAAc;GAClE;GACA,mBAAmB,aACjB,eAAe,GAAG,qBAAqB,SAAS;IAC9C,IAAI,SAASC,oCAAAA,qCAAqC,SAAS;GAC7D,CAAC;GACH,eAAe,eAAe,IAAIA,oCAAAA,mCAAmC;EACvE,CAAC;EACD,eAAe,QAAQC,oCAAAA,4BAA4B,cAAc,IAAI,CAAC;EACtE,eAAe,mBAAmB,cAAc,MAAM,GAAG,GAAG,eAAe,UAAU;CACvF,CAAC;AACH;;AAGA,eAAsB,8BAA8B,IAAiC;CACnF,MAAM,YAAA,GAAWC,gCAAAA,YAAAA,CAAY;CAC7B,MAAM,SAAS,MAAMC,gCAAAA,aAAa,OAAO;EACvC,UAAUC,UAAAA,QAAK,KAAK,UAAU,WAAW;EACzC,YAAYA,UAAAA,QAAK,KAAK,UAAU,aAAa;EAC7C,iBAAiB;CACnB,CAAC;CACD,MAAM,aAAa,OAAA,GAAMC,kCAAAA,sBAAAA,CAAsB,IAAI,cAAc;CACjE,MAAM,eAAeD,UAAAA,QAAK,KAAK,UAAU,UAAU;CACnD,MAAM,QAAQ,WAAW,KAAK,QAAQ,WAAW,2BAA2B,QAAQ,QAAQ,YAAY,CAAC;CACzG,IAAI;CACJ,GAAG,GACD,0BAEG,cAAc,YAAY;EACzB,IAAI;GACF,MAAM,MAAM,QAAQ;EACtB,UAAU;GACR,MAAM,WAAW,QAAQ;EAC3B;CACF,EAAA,CAAG,CACP;CACA,IAAI;EACF,MAAM;CACR,SAAS,OAAO;EACd,MAAM,MAAM,QAAQ;EACpB,MAAM,WAAW,QAAQ;EACzB,MAAM;CACR;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"terminalChildSession.d.mts","names":[],"sources":["../../src/extensions/terminalChildSession.ts"],"mappings":";;;wBA6DsB,8BAA8B,IAAI,eAAe"}
1
+ {"version":3,"file":"terminalChildSession.d.mts","names":[],"sources":["../../src/extensions/terminalChildSession.ts"],"mappings":";;;wBAiEsB,8BAA8B,IAAI,eAAe"}
@@ -36,6 +36,9 @@ function terminalChildSessionPlugin(cordis, models, sessionsRoot) {
36
36
  const currentSession = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE);
37
37
  return readSessionFastMode(currentSession.context.sessionManager);
38
38
  },
39
+ subscribeMcpTool: (listener) => sessionContext.on("internal/service", (name) => {
40
+ if (name === DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) listener();
41
+ }),
39
42
  mcpTool: () => sessionContext.get(DOOM_CHILD_SESSION_MCP_TOOL_SERVICE)
40
43
  });
41
44
  sessionContext.provide(DOOM_CHILD_SESSION_SERVICE, childSessions.get());
@@ -1 +1 @@
1
- {"version":3,"file":"terminalChildSession.mjs","names":[],"sources":["../../src/extensions/terminalChildSession.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n DOOM_CHILD_SESSION_SERVICE,\n DOOM_CHILD_SESSION_MCP_TOOL_SERVICE,\n type DoomChildSessionTool,\n} from '@agimon-ai/doompi-core/childSession';\nimport {\n connectDoomCordisHost,\n DOOM_CORDIS_SESSION_SERVICE,\n type DoomCordisSessionService,\n} from '@agimon-ai/doompi-core/cordisHost';\nimport { createTerminalPiChildSessionServiceProvider } from '@agimon-ai/doompi-core/terminalPiChildSessionService';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { Provider } from '@earendil-works/pi-ai';\nimport { getAgentDir, ModelRuntime, type ExtensionAPI, type ModelRegistry } from '@earendil-works/pi-coding-agent';\n\nimport { readSessionFastMode } from './fast';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi/terminal-child-session';\n\n/**\n * Collect the providers registered in this process by Pi extensions.\n *\n * The child ModelRuntime is built from auth.json and models.json, so it only\n * knows providers that exist on disk. A custom provider contributed through\n * `pi.registerProvider()` lives solely in the host registry, and its stream\n * closures cannot be reconstructed from a file. Reading the live registry per\n * spawn keeps late registrations visible.\n */\nfunction registeredProviders(registry: ModelRegistry): readonly Provider[] {\n const providers: Provider[] = [];\n for (const id of registry.getRegisteredProviderIds()) {\n const provider = registry.getRegisteredNativeProvider(id) ?? registry.getProvider(id);\n if (provider !== undefined) providers.push(provider);\n }\n return providers;\n}\n\nfunction terminalChildSessionPlugin(cordis: Context, models: ModelRuntime, sessionsRoot: string): void {\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const extensionContext = session.context;\n const childSessions = createTerminalPiChildSessionServiceProvider({\n cwd: extensionContext.cwd,\n sessionsRoot,\n models,\n providers: () => registeredProviders(extensionContext.modelRegistry),\n defaultModel: () => extensionContext.model,\n parentFastMode: () => {\n const currentSession = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n return readSessionFastMode(currentSession.context.sessionManager);\n },\n mcpTool: () => sessionContext.get(DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) as DoomChildSessionTool | undefined,\n });\n sessionContext.provide(DOOM_CHILD_SESSION_SERVICE, childSessions.get());\n sessionContext.effect(() => () => childSessions.close(), `${PACKAGE_SOURCE}/lifetime`);\n });\n}\n\n/** Bind terminal Pi child ownership inside the core Cordis composition, before feature packages consume it. */\nexport async function terminalChildSessionExtension(pi: ExtensionAPI): Promise<void> {\n const agentDir = getAgentDir();\n const models = await ModelRuntime.create({\n authPath: path.join(agentDir, 'auth.json'),\n modelsPath: path.join(agentDir, 'models.json'),\n refreshOnCreate: false,\n });\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const sessionsRoot = path.join(agentDir, 'sessions');\n const fiber = connection.root.plugin((cordis) => terminalChildSessionPlugin(cordis, models, sessionsRoot));\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n try {\n await fiber;\n } catch (error) {\n await fiber.dispose();\n await connection.dispose();\n throw error;\n }\n}\n\nexport default terminalChildSessionExtension;\n"],"mappings":";;;;;;;AAmBA,MAAM,iBAAiB;;;;;;;;;;AAWvB,SAAS,oBAAoB,UAA8C;CACzE,MAAM,YAAwB,CAAC;CAC/B,KAAK,MAAM,MAAM,SAAS,yBAAyB,GAAG;EACpD,MAAM,WAAW,SAAS,4BAA4B,EAAE,KAAK,SAAS,YAAY,EAAE;EACpF,IAAI,aAAa,KAAA,GAAW,UAAU,KAAK,QAAQ;CACrD;CACA,OAAO;AACT;AAEA,SAAS,2BAA2B,QAAiB,QAAsB,cAA4B;CACrG,OAAO,OAAO,CAAC,2BAA2B,IAAI,mBAAmB;EAE/D,MAAM,mBADU,eAAe,IAAI,2BACJ,CAAC,CAAC;EACjC,MAAM,gBAAgB,4CAA4C;GAChE,KAAK,iBAAiB;GACtB;GACA;GACA,iBAAiB,oBAAoB,iBAAiB,aAAa;GACnE,oBAAoB,iBAAiB;GACrC,sBAAsB;IACpB,MAAM,iBAAiB,eAAe,IAAI,2BAA2B;IACrE,OAAO,oBAAoB,eAAe,QAAQ,cAAc;GAClE;GACA,eAAe,eAAe,IAAI,mCAAmC;EACvE,CAAC;EACD,eAAe,QAAQ,4BAA4B,cAAc,IAAI,CAAC;EACtE,eAAe,mBAAmB,cAAc,MAAM,GAAG,GAAG,eAAe,UAAU;CACvF,CAAC;AACH;;AAGA,eAAsB,8BAA8B,IAAiC;CACnF,MAAM,WAAW,YAAY;CAC7B,MAAM,SAAS,MAAM,aAAa,OAAO;EACvC,UAAU,KAAK,KAAK,UAAU,WAAW;EACzC,YAAY,KAAK,KAAK,UAAU,aAAa;EAC7C,iBAAiB;CACnB,CAAC;CACD,MAAM,aAAa,MAAM,sBAAsB,IAAI,cAAc;CACjE,MAAM,eAAe,KAAK,KAAK,UAAU,UAAU;CACnD,MAAM,QAAQ,WAAW,KAAK,QAAQ,WAAW,2BAA2B,QAAQ,QAAQ,YAAY,CAAC;CACzG,IAAI;CACJ,GAAG,GACD,0BAEG,cAAc,YAAY;EACzB,IAAI;GACF,MAAM,MAAM,QAAQ;EACtB,UAAU;GACR,MAAM,WAAW,QAAQ;EAC3B;CACF,EAAA,CAAG,CACP;CACA,IAAI;EACF,MAAM;CACR,SAAS,OAAO;EACd,MAAM,MAAM,QAAQ;EACpB,MAAM,WAAW,QAAQ;EACzB,MAAM;CACR;AACF"}
1
+ {"version":3,"file":"terminalChildSession.mjs","names":[],"sources":["../../src/extensions/terminalChildSession.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n DOOM_CHILD_SESSION_SERVICE,\n DOOM_CHILD_SESSION_MCP_TOOL_SERVICE,\n type DoomChildSessionMcpTool,\n} from '@agimon-ai/doompi-core/childSession';\nimport {\n connectDoomCordisHost,\n DOOM_CORDIS_SESSION_SERVICE,\n type DoomCordisSessionService,\n} from '@agimon-ai/doompi-core/cordisHost';\nimport { createTerminalPiChildSessionServiceProvider } from '@agimon-ai/doompi-core/terminalPiChildSessionService';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { Provider } from '@earendil-works/pi-ai';\nimport { getAgentDir, ModelRuntime, type ExtensionAPI, type ModelRegistry } from '@earendil-works/pi-coding-agent';\n\nimport { readSessionFastMode } from './fast';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi/terminal-child-session';\n\n/**\n * Collect the providers registered in this process by Pi extensions.\n *\n * The child ModelRuntime is built from auth.json and models.json, so it only\n * knows providers that exist on disk. A custom provider contributed through\n * `pi.registerProvider()` lives solely in the host registry, and its stream\n * closures cannot be reconstructed from a file. Reading the live registry per\n * spawn keeps late registrations visible.\n */\nfunction registeredProviders(registry: ModelRegistry): readonly Provider[] {\n const providers: Provider[] = [];\n for (const id of registry.getRegisteredProviderIds()) {\n const provider = registry.getRegisteredNativeProvider(id) ?? registry.getProvider(id);\n if (provider !== undefined) providers.push(provider);\n }\n return providers;\n}\n\nfunction terminalChildSessionPlugin(cordis: Context, models: ModelRuntime, sessionsRoot: string): void {\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const extensionContext = session.context;\n const childSessions = createTerminalPiChildSessionServiceProvider({\n cwd: extensionContext.cwd,\n sessionsRoot,\n models,\n providers: () => registeredProviders(extensionContext.modelRegistry),\n defaultModel: () => extensionContext.model,\n parentFastMode: () => {\n const currentSession = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n return readSessionFastMode(currentSession.context.sessionManager);\n },\n subscribeMcpTool: (listener) =>\n sessionContext.on('internal/service', (name) => {\n if (name === DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) listener();\n }),\n mcpTool: () => sessionContext.get(DOOM_CHILD_SESSION_MCP_TOOL_SERVICE) as DoomChildSessionMcpTool | undefined,\n });\n sessionContext.provide(DOOM_CHILD_SESSION_SERVICE, childSessions.get());\n sessionContext.effect(() => () => childSessions.close(), `${PACKAGE_SOURCE}/lifetime`);\n });\n}\n\n/** Bind terminal Pi child ownership inside the core Cordis composition, before feature packages consume it. */\nexport async function terminalChildSessionExtension(pi: ExtensionAPI): Promise<void> {\n const agentDir = getAgentDir();\n const models = await ModelRuntime.create({\n authPath: path.join(agentDir, 'auth.json'),\n modelsPath: path.join(agentDir, 'models.json'),\n refreshOnCreate: false,\n });\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const sessionsRoot = path.join(agentDir, 'sessions');\n const fiber = connection.root.plugin((cordis) => terminalChildSessionPlugin(cordis, models, sessionsRoot));\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n try {\n await fiber;\n } catch (error) {\n await fiber.dispose();\n await connection.dispose();\n throw error;\n }\n}\n\nexport default terminalChildSessionExtension;\n"],"mappings":";;;;;;;AAmBA,MAAM,iBAAiB;;;;;;;;;;AAWvB,SAAS,oBAAoB,UAA8C;CACzE,MAAM,YAAwB,CAAC;CAC/B,KAAK,MAAM,MAAM,SAAS,yBAAyB,GAAG;EACpD,MAAM,WAAW,SAAS,4BAA4B,EAAE,KAAK,SAAS,YAAY,EAAE;EACpF,IAAI,aAAa,KAAA,GAAW,UAAU,KAAK,QAAQ;CACrD;CACA,OAAO;AACT;AAEA,SAAS,2BAA2B,QAAiB,QAAsB,cAA4B;CACrG,OAAO,OAAO,CAAC,2BAA2B,IAAI,mBAAmB;EAE/D,MAAM,mBADU,eAAe,IAAI,2BACJ,CAAC,CAAC;EACjC,MAAM,gBAAgB,4CAA4C;GAChE,KAAK,iBAAiB;GACtB;GACA;GACA,iBAAiB,oBAAoB,iBAAiB,aAAa;GACnE,oBAAoB,iBAAiB;GACrC,sBAAsB;IACpB,MAAM,iBAAiB,eAAe,IAAI,2BAA2B;IACrE,OAAO,oBAAoB,eAAe,QAAQ,cAAc;GAClE;GACA,mBAAmB,aACjB,eAAe,GAAG,qBAAqB,SAAS;IAC9C,IAAI,SAAS,qCAAqC,SAAS;GAC7D,CAAC;GACH,eAAe,eAAe,IAAI,mCAAmC;EACvE,CAAC;EACD,eAAe,QAAQ,4BAA4B,cAAc,IAAI,CAAC;EACtE,eAAe,mBAAmB,cAAc,MAAM,GAAG,GAAG,eAAe,UAAU;CACvF,CAAC;AACH;;AAGA,eAAsB,8BAA8B,IAAiC;CACnF,MAAM,WAAW,YAAY;CAC7B,MAAM,SAAS,MAAM,aAAa,OAAO;EACvC,UAAU,KAAK,KAAK,UAAU,WAAW;EACzC,YAAY,KAAK,KAAK,UAAU,aAAa;EAC7C,iBAAiB;CACnB,CAAC;CACD,MAAM,aAAa,MAAM,sBAAsB,IAAI,cAAc;CACjE,MAAM,eAAe,KAAK,KAAK,UAAU,UAAU;CACnD,MAAM,QAAQ,WAAW,KAAK,QAAQ,WAAW,2BAA2B,QAAQ,QAAQ,YAAY,CAAC;CACzG,IAAI;CACJ,GAAG,GACD,0BAEG,cAAc,YAAY;EACzB,IAAI;GACF,MAAM,MAAM,QAAQ;EACtB,UAAU;GACR,MAAM,WAAW,QAAQ;EAC3B;CACF,EAAA,CAAG,CACP;CACA,IAAI;EACF,MAAM;CACR,SAAS,OAAO;EACd,MAAM,MAAM,QAAQ;EACpB,MAAM,WAAW,QAAQ;EACzB,MAAM;CACR;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/doompi",
3
- "version": "0.0.1-alpha.111",
3
+ "version": "0.0.1-alpha.112",
4
4
  "description": "Opinionated, composable Pi distribution for scoped agent tools, skills, MCP servers, and developer workflows.",
5
5
  "keywords": [
6
6
  "ai",
@@ -282,20 +282,20 @@
282
282
  "registry": "https://registry.npmjs.org/"
283
283
  },
284
284
  "dependencies": {
285
- "@agimon-ai/doompi-autostop": "0.0.1-alpha.84",
286
- "@agimon-ai/doompi-cache": "0.0.1-alpha.73",
287
- "@agimon-ai/doompi-config": "0.0.1-alpha.106",
288
- "@agimon-ai/doompi-core": "0.0.1-alpha.107",
289
- "@agimon-ai/doompi-domain": "0.0.1-alpha.85",
290
- "@agimon-ai/doompi-major-mode": "0.0.1-alpha.85",
291
- "@agimon-ai/doompi-minor-mode": "0.0.1-alpha.107",
292
- "@agimon-ai/doompi-notification": "0.0.1-alpha.84",
293
- "@agimon-ai/doompi-profile": "0.0.1-alpha.85",
294
- "@agimon-ai/doompi-session": "0.0.1-alpha.31",
295
- "@agimon-ai/doompi-skill": "0.0.1-alpha.85",
285
+ "@agimon-ai/doompi-autostop": "0.0.1-alpha.85",
286
+ "@agimon-ai/doompi-cache": "0.0.1-alpha.74",
287
+ "@agimon-ai/doompi-config": "0.0.1-alpha.107",
288
+ "@agimon-ai/doompi-core": "0.0.1-alpha.108",
289
+ "@agimon-ai/doompi-domain": "0.0.1-alpha.86",
290
+ "@agimon-ai/doompi-major-mode": "0.0.1-alpha.86",
291
+ "@agimon-ai/doompi-minor-mode": "0.0.1-alpha.108",
292
+ "@agimon-ai/doompi-notification": "0.0.1-alpha.85",
293
+ "@agimon-ai/doompi-profile": "0.0.1-alpha.86",
294
+ "@agimon-ai/doompi-session": "0.0.1-alpha.32",
295
+ "@agimon-ai/doompi-skill": "0.0.1-alpha.86",
296
296
  "@agimon-ai/doompi-telemetry": "0.0.1-alpha.94",
297
- "@agimon-ai/doompi-ui": "0.0.1-alpha.107",
298
- "@agimon-ai/doompi-web-components": "0.0.1-alpha.65",
297
+ "@agimon-ai/doompi-ui": "0.0.1-alpha.108",
298
+ "@agimon-ai/doompi-web-components": "0.0.1-alpha.66",
299
299
  "@agimon-ai/doompi-web-security": "0.0.1-alpha.57",
300
300
  "@agimon-ai/log-sink-mcp": "0.29.35",
301
301
  "@deepseek-ai/cordis": "4.0.2",
@@ -321,7 +321,7 @@
321
321
  "yaml": "2.9.1"
322
322
  },
323
323
  "devDependencies": {
324
- "@agimon-ai/doompi-runner": "0.0.1-alpha.108",
324
+ "@agimon-ai/doompi-runner": "0.0.1-alpha.109",
325
325
  "@agimon-ai/vibe-lint-plugin-doom-cli": "0.0.1-alpha.29",
326
326
  "@earendil-works/pi-ai": "1.0.0",
327
327
  "@earendil-works/pi-client": "1.0.0",