{"version":3,"file":"root.cli.cjs","names":["TASK_CONTEXT_CONTRIBUTION_SOURCE","createTaskErrorReporter","toFailureReporter","createNarrationRequest","TaskStore","narrateTaskCommit","DelegationManager","createNodeDelegationPlatform","getDelegationTimeoutMs","getMaxTasks","TASK_EVENT","resolveSessionKey","removeLegacyStoreDirectoryAsync","hasStorePathOverride","sweepStoreFilesAsync","getStoreTtlMs","readDoomReadinessCoordinator","DOOM_NARRATION_SERVICE","requireDoomNarrationService","DOOM_CONTEXT_CONTRIBUTIONS_SERVICE","requireDoomContextContributions","createTaskContextContribution","DOOM_DELEGATION_SERVICE","readDoomDelegationService","DOOM_BACKGROUND_WORK_SERVICE","readDoomBackgroundWorkService","BACKGROUND_WORK_PROVIDER","DOOM_UI_HUB_SERVICE","requireDoomUiHub","COMMAND_NAME","defineRoot"],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/root.cli.ts"],"sourcesContent":["import {\n  DOOM_BACKGROUND_WORK_SERVICE,\n  type BackgroundWorkProviderHandle,\n  readDoomBackgroundWorkService,\n} from '@agimon-ai/doompi-core/background-work';\nimport {\n  DOOM_CONTEXT_CONTRIBUTIONS_SERVICE,\n  requireDoomContextContributions,\n} from '@agimon-ai/doompi-core/context-contributions';\nimport { DOOM_DELEGATION_SERVICE, readDoomDelegationService } from '@agimon-ai/doompi-core/delegation';\nimport { defineRoot } from '@agimon-ai/doompi-core/extension-file';\nimport {\n  createNarrationRequest,\n  DOOM_NARRATION_SERVICE,\n  type DoomNarrationService,\n  requireDoomNarrationService,\n} from '@agimon-ai/doompi-core/narration';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/pi-extension';\nimport { readDoomReadinessCoordinator } from '@agimon-ai/doompi-core/readiness';\nimport { DOOM_UI_HUB_SERVICE, requireDoomUiHub } from '@agimon-ai/doompi-core/ui-hub';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI, ExtensionContext, ExtensionUIContext } from '@earendil-works/pi-coding-agent';\n\nimport type { Task } from '../../../../../models/task';\nimport { COMMAND_NAME, TOOL_NAME } from '../../../../../schemas/task';\nimport { getDelegationTimeoutMs, getMaxTasks, getStoreTtlMs } from '../../../../../services/config';\nimport {\n  createTaskContextContribution,\n  TASK_CONTEXT_CONTRIBUTION_SOURCE,\n} from '../../../../../services/contextContribution';\nimport { BACKGROUND_WORK_PROVIDER, DelegationManager } from '../../../../../services/delegation';\nimport { createNodeDelegationPlatform } from '../../../../../services/delegationPlatform';\nimport { createTaskErrorReporter, TASK_EVENT, toFailureReporter } from '../../../../../services/logSinkTelemetry';\nimport {\n  hasStorePathOverride,\n  removeLegacyStoreDirectoryAsync,\n  resolveSessionKey,\n  sweepStoreFilesAsync,\n} from '../../../../../services/paths';\nimport { narrateTaskCommit, type TaskNarrationSink } from '../../../../../services/taskNarration';\nimport { TaskStore } from '../../../../../services/taskStore';\nimport type { TaskToolDependencies } from '../tool/_lib/task.cli';\n\nexport interface TaskOverlayContract {\n  setUICtx(context: ExtensionUIContext): void;\n  update(): void;\n  dispose(): void;\n  toggleCollapse(): void;\n  isRegistered(): boolean;\n}\n\nexport interface TaskRootPresentation {\n  createOverlay(options: { getTasks: () => readonly Task[]; delegation: DelegationManager }): TaskOverlayContract;\n  registerCollapseShortcut(\n    pi: Pick<ExtensionAPI, 'registerShortcut'>,\n    overlay: TaskOverlayContract,\n    waitUntilReady: (context: ExtensionContext) => Promise<void>,\n    isActive: () => boolean,\n  ): void;\n}\n\ninterface SessionContextLike {\n  hasUI: boolean;\n  ui: ExtensionUIContext;\n  sessionManager?: { getSessionId(): string };\n}\n\nconst LEADER_SOURCE = TASK_CONTEXT_CONTRIBUTION_SOURCE;\nconst NARRATION_FAILED_EVENT = 'doom_task.narration_failed';\n/** Between doom-plan's 60 and the core help group's 70, so `t` sits after `p`. */\nconst LEADER_GROUP_ORDER = 65;\nconst ERROR_TYPE_ATTRIBUTE = 'error.type';\n/**\n * Which part of session start ran. The telemetry sanitizer drops free text, so\n * the failing branch has to travel as a stable low-cardinality token.\n */\nconst SESSION_START_STAGE_ATTRIBUTE = 'task.stage';\nconst SESSION_START_STAGE = {\n  sessionId: 'session_id',\n  storeCleanup: 'store_cleanup',\n  storeSweep: 'store_sweep',\n  storeRead: 'store_read',\n  reconcile: 'reconcile',\n  refresh: 'refresh',\n} as const;\ntype SessionStartStage = (typeof SESSION_START_STAGE)[keyof typeof SESSION_START_STAGE];\n\n/**\n * Mirror of the telemetry sink's own `error.type` token. The sink overwrites it\n * for any defined error, so this only guarantees the attribute exists when the\n * thrown value is `undefined`.\n */\nfunction errorTypeToken(error: unknown): string {\n  if (error instanceof Error) return error.name || 'Error';\n  if (typeof error === 'string') return 'StringError';\n  if (error && typeof error === 'object') return 'ObjectError';\n  return 'UnknownError';\n}\n/** Install Task state and external resources into its host-owned Cordis plugin fiber. */\nconst createTaskRootExtension =\n  (presentation: TaskRootPresentation) =>\n  ({ context: cordis, pi, signal: pluginSignal }: PiPluginContext) => {\n    const errorReporter = createTaskErrorReporter();\n    const report = toFailureReporter(errorReporter);\n    let active = true;\n    let sessionGeneration = 0;\n    let narrationService: DoomNarrationService | undefined;\n    let store: TaskStore | undefined;\n    let delegation: DelegationManager | undefined;\n    let overlay: TaskOverlayContract | undefined;\n    let unwatch: (() => void) | undefined;\n    let backgroundWork: BackgroundWorkProviderHandle | undefined;\n    let disposeLeader: (() => void) | undefined;\n    let sessionId: string | undefined;\n    let sessionInitialization:\n      | {\n          readonly sessionManager: object;\n          readonly operation: Promise<void>;\n        }\n      | undefined;\n\n    const reportNarrationFailure = (error: unknown): void => {\n      void errorReporter.recordWarning(NARRATION_FAILED_EVENT, error).catch((telemetryError: unknown) => {\n        process.emitWarning(`Doom-task could not record a narration failure: ${String(telemetryError)}`);\n      });\n    };\n    const narrationSink: TaskNarrationSink = {\n      narrate(text) {\n        const service = narrationService;\n        const request = createNarrationRequest(text);\n        if (!service || !request) return;\n        try {\n          void Promise.resolve(service.request(request)).catch(reportNarrationFailure);\n        } catch (error) {\n          reportNarrationFailure(error);\n        }\n      },\n    };\n\n    const waitForSessionReadiness = async (\n      context: { readonly sessionManager: object },\n      signal?: AbortSignal,\n    ): Promise<void> => {\n      signal?.throwIfAborted();\n      const current = sessionInitialization;\n      if (!current) throw new Error('doom-task session initialization has not started');\n      if (current.sessionManager !== context.sessionManager) {\n        throw new Error('doom-task readiness belongs to a stale Pi session');\n      }\n      await current.operation;\n      signal?.throwIfAborted();\n      if (!active || pluginSignal.aborted || current !== sessionInitialization || !sessionId) {\n        throw new Error('doom-task readiness belongs to a stale extension generation');\n      }\n    };\n\n    const clearSessionResources = (): void => {\n      unwatch?.();\n      unwatch = undefined;\n      delegation?.reset();\n      overlay?.dispose();\n      sessionId = undefined;\n    };\n\n    const taskStore = new TaskStore({\n      report,\n      onCommitted: (previous, committed) => narrateTaskCommit(narrationSink, previous, committed),\n    });\n    store = taskStore;\n\n    const refresh = (): void => {\n      if (!active || pluginSignal.aborted) return;\n      overlay?.update();\n      backgroundWork?.update();\n    };\n\n    const delegationManager = new DelegationManager({\n      store: taskStore,\n      cwd: process.cwd(),\n      platform: createNodeDelegationPlatform(),\n      notify: (message, options) => pi.sendMessage(message, options),\n      getSessionId: () => sessionId,\n      onChange: refresh,\n      runTimeoutMs: getDelegationTimeoutMs(),\n      report,\n      onNotifyError: (error, taskId) => {\n        void errorReporter.recordNotificationError(error, taskId);\n      },\n    });\n    delegation = delegationManager;\n\n    const taskOverlay = presentation.createOverlay({\n      getTasks: () => taskStore.snapshot.tasks,\n      delegation: delegationManager,\n    });\n    overlay = taskOverlay;\n\n    const toolDependencies: TaskToolDependencies = {\n      store: taskStore,\n      delegation: delegationManager,\n      maxTasks: getMaxTasks(),\n      onChange: refresh,\n      report,\n      waitUntilReady: waitForSessionReadiness,\n    };\n\n    const sessionStart = async (_event: unknown, ctx: ExtensionContext) => {\n      if (!active || pluginSignal.aborted) return;\n      const ownGeneration = ++sessionGeneration;\n      if (sessionId !== undefined) clearSessionResources();\n      const context = ctx as unknown as SessionContextLike;\n      const initialize = async (signal?: AbortSignal): Promise<void> => {\n        const isCurrent = (): boolean =>\n          !signal?.aborted && active && !pluginSignal.aborted && ownGeneration === sessionGeneration;\n        let stage: SessionStartStage = SESSION_START_STAGE.sessionId;\n        /**\n         * Run a stage whose failure only degrades task visibility. The session\n         * still starts, and the warning keeps the degraded state from being silent.\n         */\n        const degrade = async (next: SessionStartStage, operation: () => Promise<void>): Promise<void> => {\n          stage = next;\n          try {\n            await operation();\n          } catch (error) {\n            report.warn(TASK_EVENT.sessionStartDegraded, error, {\n              [SESSION_START_STAGE_ATTRIBUTE]: next,\n              [ERROR_TYPE_ATTRIBUTE]: errorTypeToken(error),\n            });\n          }\n        };\n        try {\n          const currentSessionId = context.sessionManager?.getSessionId();\n          if (!currentSessionId) throw new Error('doom-task requires a session id');\n          sessionId = currentSessionId;\n          taskStore.configureSession(resolveSessionKey(currentSessionId));\n          stage = SESSION_START_STAGE.storeCleanup;\n          const cleanup = await removeLegacyStoreDirectoryAsync(taskStore.storePath);\n          if (!isCurrent()) return;\n          stage = SESSION_START_STAGE.storeSweep;\n          const sweep = hasStorePathOverride()\n            ? { removed: [], errors: [] }\n            : await sweepStoreFilesAsync(taskStore.storePath, getStoreTtlMs());\n          if (!isCurrent()) return;\n          const storeErrors = [...cleanup.errors, ...sweep.errors];\n          for (const failure of storeErrors) report.warn(TASK_EVENT.storeSweepFailed, new Error(failure));\n          if (storeErrors.length > 0 && context.hasUI) context.ui.notify(storeErrors.join('\\n'), 'warning');\n          if (context.hasUI) taskOverlay.setUICtx(context.ui);\n          await degrade(SESSION_START_STAGE.storeRead, async () => {\n            await taskStore.readAsync(isCurrent);\n          });\n          if (!isCurrent()) return;\n          unwatch = taskStore.onExternalChange(refresh);\n          await degrade(SESSION_START_STAGE.reconcile, async () => {\n            await delegationManager.reconcile(isCurrent);\n          });\n          if (!isCurrent()) return;\n          stage = SESSION_START_STAGE.refresh;\n          refresh();\n        } catch (error) {\n          if (!isCurrent()) return;\n          clearSessionResources();\n          report.error(TASK_EVENT.sessionStartFailed, error, {\n            [SESSION_START_STAGE_ATTRIBUTE]: stage,\n            [ERROR_TYPE_ATTRIBUTE]: errorTypeToken(error),\n          });\n          throw error;\n        }\n      };\n\n      const coordinator = readDoomReadinessCoordinator(cordis);\n      if (!coordinator) {\n        const operation = initialize();\n        sessionInitialization = { sessionManager: ctx.sessionManager, operation };\n        return operation;\n      }\n\n      const previous = sessionInitialization?.operation;\n      const operation = (async (): Promise<void> => {\n        if (previous) await Promise.allSettled([previous]);\n        if (!active || pluginSignal.aborted || ownGeneration !== sessionGeneration) return;\n        const handle = coordinator.start(\n          LEADER_SOURCE,\n          `${ctx.sessionManager.getSessionId()}:${ownGeneration}`,\n          async (signal) => {\n            await initialize(signal);\n            return { value: undefined };\n          },\n        );\n        await handle.wait();\n      })();\n      sessionInitialization = { sessionManager: ctx.sessionManager, operation };\n      // Config's coordinator owns the single failure notification. This detached\n      // observer only keeps a failed background generation from going unhandled.\n      void Promise.allSettled([operation]);\n      return undefined;\n    };\n\n    const toolExecutionEnd = (event: { toolName: string }) => {\n      if (active && !pluginSignal.aborted && event.toolName === TOOL_NAME) refresh();\n    };\n    const dispose = async () => {\n      if (!active) return;\n      active = false;\n      sessionGeneration += 1;\n      const pendingInitialization = sessionInitialization?.operation;\n      sessionInitialization = undefined;\n      try {\n        if (pendingInitialization) await Promise.allSettled([pendingInitialization]);\n        clearSessionResources();\n        delegation?.dispose();\n        disposeLeader?.();\n        disposeLeader = undefined;\n        store?.dispose();\n      } finally {\n        await errorReporter.shutdown();\n      }\n    };\n    return {\n      value: {\n        taskStore,\n        delegationManager,\n        taskOverlay,\n        toolDependencies,\n        waitForSessionReadiness,\n        refresh,\n        sessionStart,\n        toolExecutionEnd,\n        isActive: () => active && !pluginSignal.aborted,\n      },\n      services: [\n        (cordis: Context) => {\n          cordis.inject([DOOM_NARRATION_SERVICE], (serviceContext) => {\n            const service = requireDoomNarrationService(serviceContext);\n            narrationService = service;\n            return () => {\n              if (narrationService === service) narrationService = undefined;\n            };\n          });\n          cordis.inject([DOOM_CONTEXT_CONTRIBUTIONS_SERVICE], (contextContributionsContext) => {\n            const registration = requireDoomContextContributions(contextContributionsContext).register(\n              createTaskContextContribution(() => taskStore.snapshot.tasks),\n            );\n            return () => registration.dispose();\n          });\n          cordis.inject([DOOM_DELEGATION_SERVICE], (serviceContext) => {\n            const service = readDoomDelegationService(serviceContext);\n            if (!service) return undefined;\n            return delegationManager.bind(serviceContext, service);\n          });\n          cordis.inject([DOOM_BACKGROUND_WORK_SERVICE], (serviceContext) => {\n            const service = readDoomBackgroundWorkService(serviceContext);\n            if (!service) return undefined;\n            const handle = service.register({\n              provider: BACKGROUND_WORK_PROVIDER,\n              listActiveWork: () => delegationManager.listActiveWork(),\n            });\n            backgroundWork = handle;\n            return () => {\n              handle.dispose();\n              if (backgroundWork === handle) backgroundWork = undefined;\n            };\n          });\n          cordis.inject([DOOM_UI_HUB_SERVICE], (uiContext) => {\n            const contribution = requireDoomUiHub(uiContext).registerLeader({\n              source: LEADER_SOURCE,\n              bindings: [\n                {\n                  id: 'tasks.open',\n                  path: [\n                    { key: 't', label: 'tasks', detail: 'session task list', order: LEADER_GROUP_ORDER },\n                    { key: 'l', label: 'list', detail: 'tasks in this session' },\n                  ],\n                  command: { name: COMMAND_NAME },\n                },\n              ],\n            });\n            const dispose = (): void => contribution.dispose();\n            disposeLeader = dispose;\n            return () => {\n              dispose();\n              if (disposeLeader === dispose) disposeLeader = undefined;\n            };\n          });\n        },\n      ],\n      onStop: dispose,\n      onDispose: dispose,\n      onStart() {\n        presentation.registerCollapseShortcut(\n          pi,\n          taskOverlay,\n          waitForSessionReadiness,\n          () => active && !pluginSignal.aborted,\n        );\n      },\n    };\n  };\nexport const createTaskRoot = (presentation: TaskRootPresentation) => defineRoot(createTaskRootExtension(presentation));\nexport type TaskPiScope = Awaited<ReturnType<ReturnType<typeof createTaskRoot>>>['value'];\n"],"mappings":"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"}