agent-devkit 0.3.3 → 0.3.4

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/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.tsx","../package.json","../src/app/cli/commands/aliasCommand.ts","../src/infra/bases/capability.ts","../src/infra/bases/errors.ts","../src/infra/bases/result.ts","../src/modules/user/capabilities/cliAlias/cliAlias.entities.ts","../src/modules/user/capabilities/cliAlias/cliAlias.service.ts","../src/infra/assets/i18n_catalog.ts","../src/infra/bases/i18n.ts","../src/modules/user/capabilities/cliAlias/cliAlias.viewmodel.ts","../src/modules/user/capabilities/personalization/personalization.entities.ts","../src/infra/bases/character.ts","../src/modules/user/capabilities/personalization/personalization.service.ts","../src/modules/user/capabilities/personalization/personalization.viewmodel.ts","../src/modules/user/capabilities/preferences/preferences.entities.ts","../src/infra/bases/theme.ts","../src/modules/user/capabilities/preferences/preferences.service.ts","../src/modules/user/capabilities/preferences/preferences.viewmodel.ts","../src/infra/bases/bind.ts","../src/modules/user/capabilities/cliAlias/cliAlias.repository.ts","../src/modules/user/capabilities/personalization/personalization.repository.ts","../src/infra/data/local_agent_data_store.ts","../src/modules/user/capabilities/preferences/preferences.repository.ts","../src/infra/bases/module.ts","../src/modules/user/user.config.ts","../src/modules/user/user.bind.ts","../src/app/cli/command_options.ts","../src/modules/project/capabilities/doctor/doctor.service.ts","../src/modules/project/capabilities/doctor/doctor.entities.ts","../src/modules/project/capabilities/doctor/doctor.viewmodel.ts","../src/modules/project/capabilities/init/init.entities.ts","../src/modules/project/capabilities/init/init.service.ts","../src/modules/project/capabilities/init/init.viewmodel.ts","../src/modules/project/capabilities/reset/reset.service.ts","../src/modules/project/capabilities/reset/reset.entities.ts","../src/modules/project/capabilities/reset/reset.viewmodel.ts","../src/modules/project/capabilities/doctor/doctor.repository.ts","../src/modules/project/capabilities/init/init.repository.ts","../src/modules/project/capabilities/reset/reset.repository.ts","../src/modules/project/project.config.ts","../src/modules/project/project.bind.ts","../src/modules/project/project.surface.ts","../src/infra/helpers/surface_capabilities.ts","../src/infra/helpers/surface_loader.ts","../src/infra/bases/surface.ts","../src/app/cli/commands/doctorCommand.ts","../src/app/cli/commands/initCommand.ts","../src/modules/environment/capabilities/dependencies/providers/node.provider.ts","../src/modules/environment/capabilities/dependencies/dependencies.repository.ts","../src/modules/environment/capabilities/dependencies/dependencies.entities.ts","../src/modules/environment/capabilities/dependencies/dependencies.service.ts","../src/modules/environment/capabilities/dependencies/dependencies.viewmodel.ts","../src/modules/environment/environment.config.ts","../src/modules/environment/environment.bind.ts","../src/modules/environment/environment.surface.ts","../src/app/cli/toolRuntime.ts","../src/infra/models/model_store.ts","../src/infra/bases/model.ts","../src/infra/brain/local_llama_provider.ts","../src/infra/brain/mock_provider.ts","../src/infra/brain/brain_dock.ts","../src/infra/capabilities/capability_registry.ts","../src/modules/context/capabilities/projects/projects.entities.ts","../src/modules/context/capabilities/projects/projects.repository.ts","../src/modules/context/capabilities/projects/projects.service.ts","../src/modules/context/capabilities/sessions/sessions.entities.ts","../src/modules/context/capabilities/sessions/sessions.repository.ts","../src/modules/context/capabilities/sessions/sessions.service.ts","../src/modules/context/context.config.ts","../src/modules/context/context.bind.ts","../src/modules/context/context.surface.ts","../src/infra/bases/prompt.ts","../src/modules/conversation/capabilities/chat/chat.repository.ts","../src/modules/conversation/capabilities/chat/chat.entities.ts","../src/infra/bases/brain.ts","../src/modules/conversation/capabilities/chat/chat.service.ts","../src/modules/conversation/conversation.config.ts","../src/modules/conversation/conversation.bind.ts","../src/modules/conversation/conversation.surface.ts","../src/modules/logs/capabilities/analysis/analysis.repository.ts","../src/modules/logs/capabilities/analysis/analysis.entities.ts","../src/modules/logs/capabilities/analysis/analysis.service.ts","../src/modules/logs/logs.config.ts","../src/modules/logs/logs.bind.ts","../src/modules/logs/logs.surface.ts","../src/infra/models/model_catalog.ts","../src/infra/assets/asset_loader.ts","../src/modules/models/capabilities/registry/registry.repository.ts","../src/modules/models/capabilities/registry/registry.entities.ts","../src/modules/models/capabilities/registry/registry.service.ts","../src/modules/models/models.config.ts","../src/modules/models/models.bind.ts","../src/modules/models/models.surface.ts","../src/infra/crypto/encrypted_secret_store.ts","../src/infra/bases/logger.ts","../src/infra/helpers/error_cause.ts","../src/infra/crypto/local_master_key_provider.ts","../src/infra/crypto/local_secret_crypto.ts","../src/modules/secrets/capabilities/vault/vault.repository.ts","../src/modules/secrets/capabilities/vault/vault.entities.ts","../src/modules/secrets/capabilities/vault/vault.service.ts","../src/modules/secrets/secrets.config.ts","../src/modules/secrets/secrets.bind.ts","../src/modules/secrets/secrets.surface.ts","../src/modules/self/capabilities/update/update.repository.ts","../src/modules/self/capabilities/update/update.entities.ts","../src/modules/self/capabilities/update/update.service.ts","../src/modules/self/self.config.ts","../src/modules/self/self.bind.ts","../src/modules/self/self.surface.ts","../src/modules/user/user.surface.ts","../src/modules/modules.registry.ts","../src/modules/capability_registry.ts","../src/modules/capability_tool_runtime.ts","../src/app/cli/commands/installCommand.ts","../src/app/cli/commands/logsCommand.ts","../src/modules/logs/capabilities/analysis/analysis.viewmodel.ts","../src/app/mcp/mcp_http_transport.ts","../src/app/mcp/mcp_server.ts","../src/infra/agent/agent_runtime.ts","../src/app/mcp/mcp_result_mapper.ts","../src/app/mcp/mcp_stdio_transport.ts","../src/app/cli/commands/mcpCommand.ts","../src/app/cli/commands/modelsCommand.ts","../src/modules/models/capabilities/registry/registry.viewmodel.ts","../src/app/cli/commands/personalizationCommand.ts","../src/app/cli/commands/preferencesCommand.ts","../src/app/cli/commands/projectsCommand.ts","../src/modules/context/capabilities/projects/projects.viewmodel.ts","../src/modules/context/capabilities/sessions/sessions.viewmodel.ts","../src/app/cli/commands/resetCommand.ts","../src/app/cli/commands/runCommand.ts","../src/app/cli/commands/secretsCommand.ts","../src/modules/secrets/capabilities/vault/vault.viewmodel.ts","../src/app/cli/commands/sessionsCommand.ts","../src/app/cli/commands/toolsCommand.ts","../src/modules/self/capabilities/update/update.viewmodel.ts","../src/app/cli/commands/updateCommand.ts","../src/app/cli/firstRun.ts","../src/app/cli/i18n.ts","../src/app/cli/rootConversation.ts","../src/modules/conversation/capabilities/chat/chat.viewmodel.ts","../src/infra/helpers/redaction.ts","../src/app/cli/usageLogging.ts","../src/app/tui/App.tsx","../src/infra/logging/json_technical_logger.ts","../src/infra/logging/json_usage_logger.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { render } from \"ink\";\nimport React from \"react\";\nimport packageJson from \"../package.json\";\nimport { registerAliasCommand } from \"./app/cli/commands/aliasCommand\";\nimport { registerDoctorCommand } from \"./app/cli/commands/doctorCommand\";\nimport { registerInitCommand } from \"./app/cli/commands/initCommand\";\nimport { registerInstallCommand } from \"./app/cli/commands/installCommand\";\nimport { registerLogsCommand } from \"./app/cli/commands/logsCommand\";\nimport { registerMcpCommand } from \"./app/cli/commands/mcpCommand\";\nimport { registerModelsCommand } from \"./app/cli/commands/modelsCommand\";\nimport { registerPersonalizationCommand } from \"./app/cli/commands/personalizationCommand\";\nimport { registerPreferencesCommand } from \"./app/cli/commands/preferencesCommand\";\nimport { registerProjectsCommand } from \"./app/cli/commands/projectsCommand\";\nimport { registerResetCommand } from \"./app/cli/commands/resetCommand\";\nimport { registerRunCommand } from \"./app/cli/commands/runCommand\";\nimport { registerSecretsCommand } from \"./app/cli/commands/secretsCommand\";\nimport { registerSessionsCommand } from \"./app/cli/commands/sessionsCommand\";\nimport { registerToolsCommand } from \"./app/cli/commands/toolsCommand\";\nimport { registerUpdateCommand } from \"./app/cli/commands/updateCommand\";\nimport { ensureFirstRunModel } from \"./app/cli/firstRun\";\nimport {\n configureLocalizedHelp,\n createCliTranslator,\n loadCliUserPreferences,\n} from \"./app/cli/i18n\";\nimport { runRootConversation } from \"./app/cli/rootConversation\";\nimport { CliUsageLoggingMiddleware } from \"./app/cli/usageLogging\";\nimport { App } from \"./app/tui/App\";\nimport { JsonTechnicalLogger } from \"./infra/logging/json_technical_logger\";\nimport { JsonUsageLogger } from \"./infra/logging/json_usage_logger\";\n\nconst program = new Command();\nconst userPreferences = loadCliUserPreferences();\nconst translator = createCliTranslator();\nconst usageLogging = new CliUsageLoggingMiddleware({\n logger: new JsonUsageLogger({ retentionDays: userPreferences.logRetentionDays }),\n technicalLogger: new JsonTechnicalLogger({ retentionDays: userPreferences.logRetentionDays }),\n});\nconfigureLocalizedHelp(program, translator);\n\nconst removedRootCommandAliases = new Set([\"ask\", \"chat\"]);\n\nprogram\n .name(\"agent\")\n .description(translator.t(\"cli.root.description\"))\n .version(packageJson.version, \"-v, --version\", translator.t(\"cli.version.option\"))\n .argument(\"[prompt...]\", translator.t(\"cli.root.promptArgument\"))\n .action(\n usageLogging.track({ area: \"user\", command: \"tui\" }, async (promptParts: string[]) => {\n const initialPrompt = promptParts.join(\" \").trim();\n const firstPromptPart = promptParts[0]?.toLowerCase();\n\n if (typeof firstPromptPart === \"string\" && removedRootCommandAliases.has(firstPromptPart)) {\n program.error(translator.t(\"cli.root.removedChatCommand\"));\n }\n\n if (initialPrompt.length > 0) {\n await runRootConversation(initialPrompt);\n return;\n }\n\n await ensureFirstRunModel(translator);\n render(React.createElement(App, { translator }));\n }),\n );\n\nregisterDoctorCommand(program, { appVersion: packageJson.version, translator, usageLogging });\nregisterAliasCommand(program, { translator, usageLogging });\nregisterInitCommand(program, { appVersion: packageJson.version, translator, usageLogging });\nregisterInstallCommand(program, {\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n translator,\n usageLogging,\n});\nregisterLogsCommand(program, { translator, usageLogging });\nregisterMcpCommand(program, {\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n translator,\n usageLogging,\n});\nregisterModelsCommand(program, { translator, usageLogging });\nregisterPersonalizationCommand(program, { translator, usageLogging });\nregisterPreferencesCommand(program, { translator, usageLogging });\nregisterProjectsCommand(program, { translator, usageLogging });\nregisterResetCommand(program, { appVersion: packageJson.version, translator, usageLogging });\nregisterRunCommand(program, {\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n translator,\n usageLogging,\n});\nregisterSecretsCommand(program, { translator, usageLogging });\nregisterSessionsCommand(program, { translator, usageLogging });\nregisterToolsCommand(program, {\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n translator,\n usageLogging,\n});\nregisterUpdateCommand(program, { translator, usageLogging });\n\nawait program.parseAsync(process.argv);\n","{\n \"name\": \"agent-devkit\",\n \"version\": \"0.3.3\",\n \"description\": \"Agent DevKit CLI and TUI runtime for specialist AI agents, capabilities and provider-aware workflows.\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"bin\": {\n \"agent\": \"./dist/main.js\"\n },\n \"files\": [\n \"dist\",\n \"src/assets\",\n \"src/modules/*/surface/*.json\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/jhenriquedev/agent-devkit.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/jhenriquedev/agent-devkit/issues\"\n },\n \"homepage\": \"https://github.com/jhenriquedev/agent-devkit#readme\",\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"check:fast\": \"npm run typecheck && npm run lint && npm run test:modules:changed\",\n \"check\": \"npm run typecheck && npm run lint && npm run test && npm run build && npm run package:verify\",\n \"clean\": \"node scripts/clean.mjs\",\n \"dev\": \"tsx src/main.tsx\",\n \"docker:agent\": \"docker compose run --rm agent ./node_modules/.bin/tsx src/main.tsx\",\n \"docker:build\": \"docker compose build agent\",\n \"docker:check\": \"docker compose run --rm agent npm run check\",\n \"docker:shell\": \"docker compose run --rm agent bash\",\n \"format\": \"biome format --write .\",\n \"lint\": \"biome check .\",\n \"package:pack\": \"npm pack\",\n \"package:verify\": \"node scripts/verify-package.mjs\",\n \"release:verify\": \"node scripts/verify-release-alignment.mjs\",\n \"test\": \"npm run test:architecture && npm run test:infra && npm run test:app && npm run test:modules\",\n \"test:app\": \"vitest run src/app/cli/commands src/app/mcp src/app/tui src/package.test.ts\",\n \"test:architecture\": \"vitest run src/architecture.test.ts src/modules/capability_registry.test.ts src/modules/capability_tool_runtime.test.ts src/modules/modules.registry.test.ts\",\n \"test:infra\": \"vitest run src/infra\",\n \"test:module\": \"tsx scripts/test-modules.ts\",\n \"test:modules\": \"tsx scripts/test-modules.ts\",\n \"test:modules:changed\": \"tsx scripts/test-modules.ts --changed\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"overrides\": {\n \"esbuild\": \"0.28.1\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.29.0\",\n \"commander\": \"^15.0.0\",\n \"ink\": \"^7.1.0\",\n \"react\": \"^19.2.7\",\n \"zod\": \"^4.4.3\"\n },\n \"optionalDependencies\": {\n \"node-llama-cpp\": \"^3.0.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.5.1\",\n \"@types/node\": \"^26.0.1\",\n \"@types/react\": \"^19.2.17\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.22.4\",\n \"typescript\": \"^6.0.3\",\n \"vitest\": \"^4.1.9\"\n }\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport {\n type CliAliasResult,\n createUserModuleBindings,\n formatCliAliasText,\n} from \"../../../modules/user/user.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterAliasCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction cliAliasCapability() {\n const bindings = createUserModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.cliAlias;\n}\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, CliAliasResult>,\n translator: Translator,\n json?: boolean,\n): void {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatCliAliasText(payload, translator));\n}\n\nexport function registerAliasCommand(program: Command, options: RegisterAliasCommandOptions): void {\n const aliasCommand = program\n .command(\"alias\")\n .description(options.translator.t(\"cli.alias.description\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"))\n .action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias\", options: () => aliasCommand.opts() },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await cliAliasCapability().execute({ action: \"status\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const setCommand = aliasCommand\n .command(\"set\")\n .argument(\"<name>\", options.translator.t(\"cli.alias.argument.name\"))\n .description(options.translator.t(\"cli.alias.set.description\"))\n .option(\"--force\", options.translator.t(\"cli.alias.option.force\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"));\n\n setCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias.set\", options: () => setCommand.opts() },\n async (name: string, commandOptions: { force?: boolean; json?: boolean }) => {\n printResult(\n await cliAliasCapability().execute({\n action: \"set\",\n force: commandOptions.force,\n name,\n }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const removeCommand = aliasCommand\n .command(\"remove\")\n .description(options.translator.t(\"cli.alias.remove.description\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"));\n\n removeCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias.remove\", options: () => removeCommand.opts() },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await cliAliasCapability().execute({ action: \"remove\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const syncCommand = aliasCommand\n .command(\"sync\")\n .description(options.translator.t(\"cli.alias.sync.description\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"));\n\n syncCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias.sync\", options: () => syncCommand.opts() },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await cliAliasCapability().execute({ action: \"sync\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const shellCommand = aliasCommand\n .command(\"shell\")\n .description(options.translator.t(\"cli.alias.shell.description\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"));\n\n shellCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias.shell\", options: () => shellCommand.opts() },\n async (commandOptions: { json?: boolean }) => {\n const result = await cliAliasCapability().execute({ action: \"shell\" });\n\n if (wantsJson(commandOptions)) {\n printResult(result, options.translator, true);\n return;\n }\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n console.log(result.unwrap().shellCommand);\n },\n ),\n );\n}\n","import type { z } from \"zod\";\nimport type { AgentDevKitConfig } from \"./config\";\nimport type { AgentDevKitErrorCode } from \"./errors\";\nimport type { Result } from \"./result\";\n\nexport type CapabilityKind = \"brain-assisted\" | \"composite\" | \"deterministic\" | \"external\";\n\nexport type CapabilityRisk =\n | \"destructive\"\n | \"external-write\"\n | \"read-only\"\n | \"writes-global-state\"\n | \"writes-project-state\";\n\nexport type CapabilityConfig = AgentDevKitConfig & {\n readonly kind: CapabilityKind;\n readonly moduleId: string;\n readonly risk: CapabilityRisk;\n};\n\nexport type CapabilityRepositoryPort = {\n readonly repositoryId: string;\n};\n\nexport type CapabilityInvocationInterface = \"agent\" | \"cli\" | \"mcp\" | \"tui\";\n\nexport type CapabilityInvocationContext = {\n approved?: boolean;\n correlationId?: string;\n interface: CapabilityInvocationInterface;\n requestedBy?: string;\n};\n\nexport type CapabilityEffectOperation = \"delete\" | \"external-write\" | \"read\" | \"write\";\n\nexport type CapabilityEffectScope =\n | \"external\"\n | \"global\"\n | \"none\"\n | \"project\"\n | \"project-or-global\";\n\nexport type CapabilityEffect = {\n operation: CapabilityEffectOperation;\n scope: CapabilityEffectScope;\n};\n\nexport type CapabilityApproval = {\n reason: string;\n required: boolean;\n};\n\nexport type CapabilityInvocationAudit = {\n durationMs: number;\n endedAt: string;\n startedAt: string;\n};\n\nexport type CapabilityInvocationFailure = {\n capabilityId: string;\n audit: CapabilityInvocationAudit;\n error: {\n code: AgentDevKitErrorCode;\n hint?: string;\n message: string;\n recoverable: boolean;\n };\n ok: false;\n};\n\nexport type CapabilityInvocationSuccess<TOutput = unknown> = {\n capabilityId: string;\n audit: CapabilityInvocationAudit;\n data: TOutput;\n effects: CapabilityEffect[];\n ok: true;\n};\n\nexport type CapabilityInvocationResult<TOutput = unknown> =\n | CapabilityInvocationFailure\n | CapabilityInvocationSuccess<TOutput>;\n\nexport type InvokableCapabilityDescriptor = CapabilityConfig & {\n approval: CapabilityApproval;\n inputSchema: Record<string, unknown>;\n outputSchema: Record<string, unknown>;\n};\n\nexport type InvokableCapabilityService<TInput = unknown, TOutput = unknown> = BaseCapabilityService<\n CapabilityConfig,\n unknown,\n TInput,\n TOutput\n>;\n\nexport type CapabilityExecution<\n TInput,\n TOutput,\n TError extends string = AgentDevKitErrorCode,\n> = TInput extends void\n ? {\n execute(): Promise<Result<TError, TOutput>>;\n }\n : {\n execute(input: TInput): Promise<Result<TError, TOutput>>;\n };\n\nexport abstract class BaseCapabilityService<\n TConfig extends CapabilityConfig,\n TDependencies,\n TInput = unknown,\n TOutput = unknown,\n> {\n readonly capability: TConfig;\n abstract readonly inputSchema: z.ZodType<TInput>;\n abstract readonly outputSchema: z.ZodType<TOutput>;\n protected readonly dependencies: TDependencies;\n\n protected constructor(capability: TConfig, dependencies: TDependencies) {\n this.capability = capability;\n this.dependencies = dependencies;\n }\n\n abstract invoke(\n input: TInput,\n context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, TOutput>>;\n\n approvalForInput?(input: TInput, context: CapabilityInvocationContext): CapabilityApproval;\n\n effectsForInput?(input: TInput, context: CapabilityInvocationContext): CapabilityEffect[];\n}\n\nexport function defineCapabilityConfig<TConfig extends CapabilityConfig>(config: TConfig): TConfig {\n return config;\n}\n","export const ErrorCodes = {\n AssetReadFailed: \"ASSET_READ_FAILED\",\n ApprovalRequired: \"APPROVAL_REQUIRED\",\n BrainProviderUnavailable: \"BRAIN_PROVIDER_UNAVAILABLE\",\n CacheReadFailed: \"CACHE_READ_FAILED\",\n CapabilityNotFound: \"CAPABILITY_NOT_FOUND\",\n CapabilityExecutionFailed: \"CAPABILITY_EXECUTION_FAILED\",\n DatabaseReadFailed: \"DATABASE_READ_FAILED\",\n DecryptionFailed: \"DECRYPTION_FAILED\",\n EncryptionFailed: \"ENCRYPTION_FAILED\",\n FileReadFailed: \"FILE_READ_FAILED\",\n FileWriteFailed: \"FILE_WRITE_FAILED\",\n InvalidInput: \"INVALID_INPUT\",\n ModelNotFound: \"MODEL_NOT_FOUND\",\n ModelVerificationFailed: \"MODEL_VERIFICATION_FAILED\",\n NetworkRequestFailed: \"NETWORK_REQUEST_FAILED\",\n PackageInstallFailed: \"PACKAGE_INSTALL_FAILED\",\n PackageRegistryFailed: \"PACKAGE_REGISTRY_FAILED\",\n StateResetFailed: \"STATE_RESET_FAILED\",\n} as const;\n\nexport type AgentDevKitErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];\n","export class Result<Left, Right> {\n readonly #left?: Left;\n readonly #right?: Right;\n readonly #ok: boolean;\n\n private constructor(ok: boolean, left?: Left, right?: Right) {\n this.#ok = ok;\n this.#left = left;\n this.#right = right;\n }\n\n static ok<Left, Right>(right: Right): Result<Left, Right> {\n return new Result<Left, Right>(true, undefined, right);\n }\n\n static fail<Left, Right>(left: Left): Result<Left, Right> {\n return new Result<Left, Right>(false, left);\n }\n\n isOk(): boolean {\n return this.#ok;\n }\n\n isErr(): boolean {\n return !this.#ok;\n }\n\n flatMap<NextRight>(mapper: (right: Right) => Result<Left, NextRight>): Result<Left, NextRight> {\n return this.#ok ? mapper(this.#right as Right) : Result.fail(this.#left as Left);\n }\n\n map<NextRight>(mapper: (right: Right) => NextRight): Result<Left, NextRight> {\n return this.#ok ? Result.ok(mapper(this.#right as Right)) : Result.fail(this.#left as Left);\n }\n\n mapError<NextLeft>(mapper: (left: Left) => NextLeft): Result<NextLeft, Right> {\n return this.#ok ? Result.ok(this.#right as Right) : Result.fail(mapper(this.#left as Left));\n }\n\n match<TOutput>(handlers: {\n error: (left: Left) => TOutput;\n ok: (right: Right) => TOutput;\n }): TOutput {\n return this.#ok ? handlers.ok(this.#right as Right) : handlers.error(this.#left as Left);\n }\n\n unwrap(): Right {\n if (!this.#ok) {\n throw new Error(\"Cannot unwrap a failed Result\");\n }\n\n return this.#right as Right;\n }\n\n unwrapError(): Left {\n if (this.#ok) {\n throw new Error(\"Cannot unwrapError an ok Result\");\n }\n\n return this.#left as Left;\n }\n}\n","import { z } from \"zod\";\n\nexport const CliAliasNameSchema = z\n .string()\n .min(2)\n .max(40)\n .regex(/^[a-z][a-z0-9-]*$/);\n\nexport const CliAliasStateSchema = z\n .object({\n binDirectory: z.string().min(1),\n enabled: z.boolean(),\n name: CliAliasNameSchema,\n shimPath: z.string().min(1),\n updatedAt: z.string().datetime(),\n })\n .strict();\n\nexport type CliAliasState = z.infer<typeof CliAliasStateSchema>;\n\nexport const CliAliasOptionsSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"status\") }).strict(),\n z\n .object({\n action: z.literal(\"set\"),\n force: z.boolean().optional(),\n name: CliAliasNameSchema,\n })\n .strict(),\n z.object({ action: z.literal(\"remove\") }).strict(),\n z.object({ action: z.literal(\"sync\") }).strict(),\n z.object({ action: z.literal(\"shell\") }).strict(),\n]);\n\nexport type CliAliasOptions = z.infer<typeof CliAliasOptionsSchema>;\n\nexport const CliAliasResultSchema = z\n .object({\n activationCommand: z.string().min(1),\n alias: CliAliasStateSchema.optional(),\n binDirectory: z.string().min(1),\n binDirectoryInPath: z.boolean(),\n shellCommand: z.string().min(1),\n status: z.enum([\"configured\", \"removed\", \"shell\", \"view\"]),\n })\n .strict();\n\nexport type CliAliasResult = z.infer<typeof CliAliasResultSchema>;\n","import {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type CliAliasOptions,\n CliAliasOptionsSchema,\n type CliAliasResult,\n CliAliasResultSchema,\n} from \"./cliAlias.entities\";\nimport type { CliAliasRepositoryPort } from \"./cliAlias.repository\";\n\ntype CliAliasServiceDependencies = {\n repository: CliAliasRepositoryPort;\n};\n\nexport const cliAliasCapabilityConfig = defineCapabilityConfig({\n id: \"user.cliAlias\",\n moduleId: \"user\",\n name: \"CLI alias\",\n description: \"Create and manage a local command alias for the Agent DevKit CLI.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class CliAliasService extends BaseCapabilityService<\n typeof cliAliasCapabilityConfig,\n CliAliasServiceDependencies,\n CliAliasOptions,\n CliAliasResult\n> {\n readonly inputSchema = CliAliasOptionsSchema;\n readonly outputSchema = CliAliasResultSchema;\n readonly #repository: CliAliasRepositoryPort;\n\n constructor(dependencies: CliAliasServiceDependencies) {\n super(cliAliasCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(options: CliAliasOptions): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const input = parsed.data;\n const result =\n input.action === \"set\"\n ? await this.#set(input.name, input.force)\n : input.action === \"remove\"\n ? await this.#remove()\n : input.action === \"sync\"\n ? await this.#sync()\n : await this.#view(input.action === \"shell\" ? \"shell\" : \"view\");\n\n if (result.isErr()) {\n return Result.fail(result.unwrapError());\n }\n\n const output = this.outputSchema.safeParse(result.unwrap());\n return output.success ? Result.ok(output.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n invoke(options: CliAliasOptions): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n return this.execute(options);\n }\n\n override approvalForInput(input: CliAliasOptions): CapabilityApproval {\n if (input.action === \"status\" || input.action === \"shell\") {\n return { reason: \"CLI alias read action.\", required: false };\n }\n\n return {\n reason: \"CLI alias action writes user shell state.\",\n required: true,\n };\n }\n\n override effectsForInput(input: CliAliasOptions): CapabilityEffect[] {\n if (input.action === \"status\" || input.action === \"shell\") {\n return [{ operation: \"read\", scope: \"none\" }];\n }\n\n return [{ operation: \"write\", scope: \"global\" }];\n }\n\n async #remove(): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const remove = await this.#repository.removeAlias();\n\n if (remove.isErr()) {\n return Result.fail(remove.unwrapError());\n }\n\n return this.#view(\"removed\");\n }\n\n async #set(name: string, force?: boolean): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const alias = await this.#repository.saveAlias(name, force);\n\n if (alias.isErr()) {\n return Result.fail(alias.unwrapError());\n }\n\n return Result.ok(this.#result(\"configured\", alias.unwrap()));\n }\n\n async #sync(): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const alias = await this.#repository.syncAlias();\n\n if (alias.isErr()) {\n return Result.fail(alias.unwrapError());\n }\n\n return Result.ok(this.#result(\"configured\", alias.unwrap()));\n }\n\n async #view(\n status: CliAliasResult[\"status\"],\n ): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const alias = await this.#repository.loadAlias();\n\n return alias.isOk()\n ? Result.ok(this.#result(status, alias.unwrap()))\n : Result.fail(alias.unwrapError());\n }\n\n #result(status: CliAliasResult[\"status\"], alias?: CliAliasResult[\"alias\"]): CliAliasResult {\n return {\n activationCommand: this.#repository.activationCommand(),\n alias,\n binDirectory: this.#repository.binDirectory(),\n binDirectoryInPath: this.#repository.binDirectoryInPath(),\n shellCommand: this.#repository.shellCommand(),\n status,\n };\n }\n}\n","import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport {\n type LanguageDefinition,\n LanguageDefinitionSchema,\n type LanguageId,\n type Translator,\n} from \"../bases/i18n\";\nimport { Result } from \"../bases/result\";\n\nexport type I18nCatalogOptions = {\n directory?: string;\n fallbackLanguage?: LanguageId;\n};\n\nconst languageOrder: LanguageId[] = [\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"];\n\nfunction defaultI18nDirectory(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDirectory, \"../../assets/i18n\"),\n resolve(moduleDirectory, \"../src/assets/i18n\"),\n resolve(process.cwd(), \"src/assets/i18n\"),\n ];\n\n return (\n candidates.find((candidate) => existsSync(candidate)) ??\n resolve(process.cwd(), \"src/assets/i18n\")\n );\n}\n\nfunction sortLanguages(languages: LanguageDefinition[]): LanguageDefinition[] {\n return languages.sort(\n (left, right) => languageOrder.indexOf(left.id) - languageOrder.indexOf(right.id),\n );\n}\n\nfunction interpolate(value: string, variables: Record<string, string | number | boolean>): string {\n return value.replaceAll(/\\{\\{([a-zA-Z0-9_.-]+)\\}\\}/g, (_, key: string) =>\n variables[key] === undefined ? `{{${key}}}` : String(variables[key]),\n );\n}\n\nexport class I18nCatalog {\n readonly #directory: string;\n readonly #fallbackLanguage: LanguageId;\n #languages?: LanguageDefinition[];\n\n constructor(options: I18nCatalogOptions = {}) {\n this.#directory = options.directory ?? defaultI18nDirectory();\n this.#fallbackLanguage = options.fallbackLanguage ?? \"pt-BR\";\n }\n\n async loadLanguages(): Promise<Result<AgentDevKitErrorCode, LanguageDefinition[]>> {\n if (this.#languages !== undefined) {\n return Result.ok(this.#languages);\n }\n\n try {\n const files = (await readdir(this.#directory)).filter((file) => file.endsWith(\".json\"));\n const languages: LanguageDefinition[] = [];\n\n for (const file of files) {\n const parsed = LanguageDefinitionSchema.safeParse(\n JSON.parse(await readFile(join(this.#directory, file), \"utf8\")),\n );\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n languages.push(parsed.data);\n }\n\n this.#languages = sortLanguages(languages);\n return Result.ok(this.#languages);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n loadLanguagesSync(): Result<AgentDevKitErrorCode, LanguageDefinition[]> {\n if (this.#languages !== undefined) {\n return Result.ok(this.#languages);\n }\n\n try {\n const files = readdirSync(this.#directory).filter((file) => file.endsWith(\".json\"));\n const languages: LanguageDefinition[] = [];\n\n for (const file of files) {\n const parsed = LanguageDefinitionSchema.safeParse(\n JSON.parse(readFileSync(join(this.#directory, file), \"utf8\")),\n );\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n languages.push(parsed.data);\n }\n\n this.#languages = sortLanguages(languages);\n return Result.ok(this.#languages);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n async translate(\n language: LanguageId,\n key: string,\n values: Record<string, string | number | boolean> = {},\n ): Promise<Result<AgentDevKitErrorCode, string>> {\n const languages = await this.loadLanguages();\n\n if (languages.isErr()) {\n return Result.fail(languages.unwrapError());\n }\n\n return Result.ok(this.#translateFromLanguages(languages.unwrap(), language, key, values));\n }\n\n translator(language: LanguageId): Translator {\n const languages = this.loadLanguagesSync();\n\n return {\n language,\n t: (key, values = {}) => {\n if (languages.isErr()) {\n return key;\n }\n\n return this.#translateFromLanguages(languages.unwrap(), language, key, values);\n },\n };\n }\n\n #translateFromLanguages(\n languages: LanguageDefinition[],\n language: LanguageId,\n key: string,\n values: Record<string, string | number | boolean>,\n ): string {\n const selected =\n languages.find((candidate) => candidate.id === language) ??\n languages.find((candidate) => candidate.id === this.#fallbackLanguage);\n const fallback = languages.find((candidate) => candidate.id === this.#fallbackLanguage);\n const value = selected?.messages[key] ?? fallback?.messages[key] ?? key;\n\n return interpolate(value, values);\n }\n}\n","import { z } from \"zod\";\n\nexport const LanguageDefinitionSchema = z.object({\n schema: z.literal(\"agent-devkit.i18n/v1\"),\n id: z.enum([\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"]),\n name: z.string().min(1),\n nativeName: z.string().min(1),\n messages: z.record(z.string().min(1), z.string()),\n});\n\nexport type LanguageDefinition = z.infer<typeof LanguageDefinitionSchema>;\nexport type LanguageId = LanguageDefinition[\"id\"];\n\nexport type LanguageSummary = {\n id: LanguageId;\n name: string;\n nativeName: string;\n selected: boolean;\n};\n\nexport interface Translator {\n language: LanguageId;\n t(key: string, values?: Record<string, string | number | boolean>): string;\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { CliAliasResult } from \"./cliAlias.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatCliAliasText(\n result: CliAliasResult,\n translator: Translator = defaultTranslator,\n): string {\n const t = (key: string, values?: Record<string, string | number | boolean>) =>\n translator.t(key, values);\n const lines = [t(\"alias.title\")];\n\n if (result.alias === undefined) {\n lines.push(t(\"alias.status.notConfigured\"));\n } else {\n lines.push(t(\"alias.line.name\", { name: result.alias.name }));\n lines.push(t(\"alias.line.shim\", { path: result.alias.shimPath }));\n }\n\n lines.push(t(\"alias.line.bin\", { path: result.binDirectory }));\n\n if (!result.binDirectoryInPath) {\n lines.push(t(\"alias.line.activate\", { command: result.activationCommand }));\n }\n\n return lines.join(\"\\n\");\n}\n","import { z } from \"zod\";\nimport {\n CharacterDefinitionSchema,\n CharacterIdSchema,\n CharacterProfileSchema,\n} from \"../../../../infra/bases/character\";\n\nexport const UserPersonalizationStateSchema = z\n .object({\n currentCharacter: CharacterDefinitionSchema,\n schema: z.literal(\"agent-devkit.agent-personalization/v2\"),\n selectedPresetId: CharacterIdSchema,\n updatedAt: z.string().min(1),\n })\n .strict();\n\nconst CharacterUpdateSchema = CharacterProfileSchema.partial()\n .extend({\n active: z.boolean().optional(),\n name: z.string().min(1).max(80).optional(),\n traits: z.array(z.string().min(1).max(120)).max(20).optional(),\n })\n .strict();\n\nconst CreateCharacterSchema = z\n .object({\n active: z.boolean().optional(),\n fromCharacterId: CharacterIdSchema.optional(),\n id: CharacterIdSchema,\n name: z.string().min(1).max(80),\n })\n .merge(CharacterProfileSchema.partial())\n .strict();\n\nexport const PersonalizationServiceOptionsSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"view\") }).strict(),\n z.object({ action: z.literal(\"list-characters\") }).strict(),\n z\n .object({\n action: z.literal(\"select-preset\"),\n characterId: CharacterIdSchema,\n })\n .strict(),\n z\n .object({\n action: z.literal(\"update-current\"),\n profile: CharacterUpdateSchema,\n })\n .strict(),\n z\n .object({\n action: z.literal(\"create-character\"),\n character: CreateCharacterSchema,\n })\n .strict(),\n z\n .object({\n action: z.literal(\"import-sprite\"),\n characterId: CharacterIdSchema,\n sourcePath: z.string().min(1),\n })\n .strict(),\n z.object({ action: z.literal(\"reset-current\") }).strict(),\n z.object({ action: z.literal(\"reset-defaults\") }).strict(),\n z\n .object({\n action: z.literal(\"update\"),\n profile: CharacterUpdateSchema.extend({\n characterId: CharacterIdSchema.optional(),\n }),\n })\n .strict(),\n]);\n\nexport type UserPersonalizationState = z.infer<typeof UserPersonalizationStateSchema>;\nexport type PersonalizationServiceOptions = z.infer<typeof PersonalizationServiceOptionsSchema>;\nexport type PersonalizationStatus =\n | \"character-created\"\n | \"character-updated\"\n | \"preset-selected\"\n | \"reset\"\n | \"sprite-imported\"\n | \"updated\"\n | \"view\";\n\nexport type CharacterListItem = z.infer<typeof CharacterDefinitionSchema> & {\n readonly custom: boolean;\n readonly selected: boolean;\n readonly spritePath?: string;\n};\n\nexport type PersonalizationResult = {\n characters: CharacterListItem[];\n path: string;\n profile: UserPersonalizationState;\n status: PersonalizationStatus;\n};\n\nconst CharacterListItemSchema = CharacterDefinitionSchema.extend({\n custom: z.boolean(),\n selected: z.boolean(),\n spritePath: z.string().min(1).optional(),\n});\n\nexport const PersonalizationResultSchema = z.object({\n characters: z.array(CharacterListItemSchema),\n path: z.string().min(1),\n profile: UserPersonalizationStateSchema,\n status: z.enum([\n \"character-created\",\n \"character-updated\",\n \"preset-selected\",\n \"reset\",\n \"sprite-imported\",\n \"updated\",\n \"view\",\n ]),\n});\n","import { z } from \"zod\";\n\nexport const CharacterIdSchema = z\n .string()\n .min(1)\n .max(80)\n .regex(/^[a-z0-9][a-z0-9-]*$/);\n\nexport const CharacterGenderSchema = z.enum([\"female\", \"male\", \"neutral\", \"unspecified\"]);\n\nexport const CharacterBehaviorSchema = z.enum([\n \"balanced\",\n \"proactive\",\n \"analytical\",\n \"creative\",\n \"pragmatic\",\n \"minimalist\",\n]);\n\nexport const CharacterToneSchema = z.enum([\n \"direct\",\n \"friendly\",\n \"formal\",\n \"animated\",\n \"neutral\",\n \"succinct\",\n]);\n\nexport const CharacterDetailLevelSchema = z.enum([\n \"minimal\",\n \"concise\",\n \"balanced\",\n \"detailed\",\n \"technical\",\n]);\n\nexport const CharacterI18nSchema = z\n .object({\n descriptionKey: z.string().min(1),\n nameKey: z.string().min(1),\n taglineKey: z.string().min(1),\n })\n .strict();\n\nexport const CharacterProfileSchema = z\n .object({\n archetype: z.string().min(1).max(120),\n behavior: CharacterBehaviorSchema,\n detailLevel: CharacterDetailLevelSchema,\n gender: CharacterGenderSchema,\n tone: CharacterToneSchema,\n traits: z.array(z.string().min(1).max(120)).max(20),\n })\n .strict();\n\nexport const CharacterDefinitionSchema = z\n .object({\n active: z.boolean(),\n default: z.boolean(),\n i18n: CharacterI18nSchema,\n id: CharacterIdSchema,\n name: z.string().min(1).max(80).optional(),\n profile: CharacterProfileSchema,\n schema: z.literal(\"agent-devkit.character/v1\"),\n })\n .strict();\n\nexport type CharacterId = z.infer<typeof CharacterIdSchema>;\nexport type CharacterGender = z.infer<typeof CharacterGenderSchema>;\nexport type CharacterBehavior = z.infer<typeof CharacterBehaviorSchema>;\nexport type CharacterTone = z.infer<typeof CharacterToneSchema>;\nexport type CharacterDetailLevel = z.infer<typeof CharacterDetailLevelSchema>;\nexport type CharacterDefinition = z.infer<typeof CharacterDefinitionSchema>;\n","import { BaseCapabilityService, defineCapabilityConfig } from \"../../../../infra/bases/capability\";\nimport type { CharacterDefinition, CharacterId } from \"../../../../infra/bases/character\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type {\n PersonalizationResult,\n PersonalizationServiceOptions,\n UserPersonalizationState,\n} from \"./personalization.entities\";\nimport {\n PersonalizationResultSchema,\n PersonalizationServiceOptionsSchema,\n} from \"./personalization.entities\";\nimport type { PersonalizationRepositoryPort } from \"./personalization.repository\";\n\ntype PersonalizationServiceDependencies = {\n repository: PersonalizationRepositoryPort;\n};\n\nexport const personalizationCapabilityConfig = defineCapabilityConfig({\n id: \"user.personalization\",\n moduleId: \"user\",\n name: \"Agent personalization\",\n description: \"Read and update the local agent identity, behavior, tone and detail level.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class PersonalizationService extends BaseCapabilityService<\n typeof personalizationCapabilityConfig,\n PersonalizationServiceDependencies,\n PersonalizationServiceOptions,\n PersonalizationResult\n> {\n readonly inputSchema = PersonalizationServiceOptionsSchema;\n readonly outputSchema = PersonalizationResultSchema;\n readonly #repository: PersonalizationRepositoryPort;\n\n constructor(dependencies: PersonalizationServiceDependencies) {\n super(personalizationCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: PersonalizationServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, PersonalizationResult>> {\n const parsedOptions = PersonalizationServiceOptionsSchema.safeParse(options);\n\n if (!parsedOptions.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const input = parsedOptions.data;\n const existing = await this.#repository.loadProfile();\n\n if (existing.isErr()) {\n return Result.fail(existing.unwrapError());\n }\n\n let profile = existing.unwrap();\n let status: PersonalizationResult[\"status\"] = \"view\";\n\n if (input.action === \"select-preset\") {\n const preset = await this.#repository.loadPresetCharacter(input.characterId);\n\n if (preset.isErr()) {\n return Result.fail(preset.unwrapError());\n }\n\n profile = this.#stateFromCharacter(preset.unwrap(), preset.unwrap().id);\n status = \"preset-selected\";\n }\n\n if (input.action === \"update\" && input.profile.characterId !== undefined) {\n const preset = await this.#repository.loadPresetCharacter(input.profile.characterId);\n\n if (preset.isErr()) {\n return Result.fail(preset.unwrapError());\n }\n\n profile = this.#stateFromCharacter(\n this.#mergeCharacter(preset.unwrap(), input.profile),\n preset.unwrap().id,\n );\n status = \"updated\";\n } else if (input.action === \"update-current\" || input.action === \"update\") {\n profile = {\n ...profile,\n currentCharacter: this.#mergeCharacter(profile.currentCharacter, input.profile),\n updatedAt: new Date().toISOString(),\n };\n status = \"character-updated\";\n }\n\n if (input.action === \"create-character\") {\n const character = await this.#createCharacter(input.character);\n\n if (character.isErr()) {\n return Result.fail(character.unwrapError());\n }\n\n const save = await this.#repository.saveCustomCharacter(character.unwrap());\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n profile = this.#stateFromCharacter(\n character.unwrap(),\n input.character.fromCharacterId ?? profile.selectedPresetId,\n );\n status = \"character-created\";\n }\n\n if (input.action === \"import-sprite\") {\n const characters = await this.#repository.loadCharacters(profile.currentCharacter.id);\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n const character = characters.unwrap().find((candidate) => candidate.id === input.characterId);\n\n if (character === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const imported = await this.#repository.importSprite(input.characterId, input.sourcePath);\n\n if (imported.isErr()) {\n return Result.fail(imported.unwrapError());\n }\n\n const { custom, selected, spritePath, ...characterDefinition } = character;\n void custom;\n void selected;\n void spritePath;\n\n const saveCharacter = await this.#repository.saveCustomCharacter(characterDefinition);\n\n if (saveCharacter.isErr()) {\n return Result.fail(saveCharacter.unwrapError());\n }\n\n profile = {\n ...profile,\n currentCharacter:\n profile.currentCharacter.id === character.id\n ? characterDefinition\n : profile.currentCharacter,\n updatedAt: new Date().toISOString(),\n };\n status = \"sprite-imported\";\n }\n\n if (input.action === \"reset-current\") {\n const preset = await this.#repository.loadPresetCharacter(profile.selectedPresetId);\n\n if (preset.isErr()) {\n return Result.fail(preset.unwrapError());\n }\n\n profile = this.#stateFromCharacter(preset.unwrap(), preset.unwrap().id);\n status = \"reset\";\n }\n\n if (input.action === \"reset-defaults\") {\n const defaults = await this.#repository.defaultState();\n\n if (defaults.isErr()) {\n return Result.fail(defaults.unwrapError());\n }\n\n profile = {\n ...defaults.unwrap(),\n updatedAt: new Date().toISOString(),\n };\n status = \"reset\";\n }\n\n if (status !== \"view\") {\n const save = await this.#repository.saveProfile(profile);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n }\n\n const characters = await this.#repository.loadCharacters(profile.currentCharacter.id);\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n return Result.ok({\n characters: characters.unwrap().filter((character) => character.active),\n path: this.#repository.profilePath(),\n profile,\n status,\n });\n }\n\n invoke(\n options: PersonalizationServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, PersonalizationResult>> {\n return this.execute(options);\n }\n\n async #createCharacter(\n input: Extract<PersonalizationServiceOptions, { action: \"create-character\" }>[\"character\"],\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition>> {\n let base: CharacterDefinition | undefined;\n\n if (input.fromCharacterId !== undefined) {\n const preset = await this.#repository.loadPresetCharacter(input.fromCharacterId);\n\n if (preset.isErr()) {\n return Result.fail(preset.unwrapError());\n }\n\n base = preset.unwrap();\n }\n\n const defaults = base === undefined ? await this.#repository.defaultState() : undefined;\n\n if (defaults?.isErr()) {\n return Result.fail(defaults.unwrapError());\n }\n\n const fallback = base ?? defaults?.unwrap().currentCharacter;\n\n if (fallback === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(\n this.#mergeCharacter(\n {\n ...fallback,\n active: input.active ?? true,\n default: false,\n id: input.id,\n i18n: { ...fallback.i18n },\n },\n input,\n input.name,\n ),\n );\n }\n\n #mergeCharacter(\n character: CharacterDefinition,\n update: Partial<CharacterDefinition[\"profile\"]> & {\n active?: boolean;\n name?: string;\n },\n name?: string,\n ): CharacterDefinition {\n const nextName = name ?? update.name;\n\n return {\n ...character,\n active: update.active ?? character.active,\n name: nextName ?? character.name,\n profile: {\n ...character.profile,\n archetype: update.archetype ?? character.profile.archetype,\n behavior: update.behavior ?? character.profile.behavior,\n detailLevel: update.detailLevel ?? character.profile.detailLevel,\n gender: update.gender ?? character.profile.gender,\n tone: update.tone ?? character.profile.tone,\n traits: update.traits === undefined ? character.profile.traits : [...update.traits],\n },\n };\n }\n\n #stateFromCharacter(\n character: CharacterDefinition,\n selectedPresetId: CharacterId,\n ): UserPersonalizationState {\n return {\n schema: \"agent-devkit.agent-personalization/v2\",\n currentCharacter: {\n ...character,\n i18n: { ...character.i18n },\n profile: { ...character.profile, traits: [...character.profile.traits] },\n },\n selectedPresetId,\n updatedAt: new Date().toISOString(),\n };\n }\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { CharacterDefinition } from \"../../../../infra/bases/character\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { CharacterListItem, PersonalizationResult } from \"./personalization.entities\";\n\nconst fallbackTranslator = new I18nCatalog().translator(\"pt-BR\");\n\nfunction characterName(character: CharacterDefinition, translator: Translator): string {\n return character.name ?? translator.t(character.i18n.nameKey);\n}\n\nexport function formatPersonalizationText(\n result: PersonalizationResult,\n translator: Translator = fallbackTranslator,\n): string {\n const current = result.profile.currentCharacter;\n\n return [\n translator.t(\"personalization.title\"),\n translator.t(\"personalization.command\"),\n \"\",\n `[${translator.t(\"personalization.status\", { status: result.status })}]`,\n ` ${translator.t(\"personalization.field.file\").padEnd(12)} ${result.path}`,\n ` ${translator.t(\"personalization.field.name\").padEnd(12)} ${characterName(current, translator)}`,\n ` ${translator.t(\"personalization.field.character\").padEnd(12)} ${current.id}`,\n ` ${translator.t(\"personalization.field.behavior\").padEnd(12)} ${current.profile.behavior}`,\n ` ${translator.t(\"personalization.field.tone\").padEnd(12)} ${current.profile.tone}`,\n ` ${translator.t(\"personalization.field.detail\").padEnd(12)} ${current.profile.detailLevel}`,\n ` ${translator.t(\"personalization.field.traits\").padEnd(12)} ${current.profile.traits.join(\", \")}`,\n ` ${translator.t(\"personalization.field.sprite\").padEnd(12)} ${current.id}/sprite`,\n \"\",\n ` ${translator.t(\"personalization.section.characters\")}`,\n ...result.characters.map((character) => formatCharacterLine(character, translator)),\n ].join(\"\\n\");\n}\n\nfunction formatCharacterLine(character: CharacterListItem, translator: Translator): string {\n const source = character.custom\n ? translator.t(\"personalization.label.custom\")\n : translator.t(\"personalization.label.preset\");\n\n return ` ${character.selected ? \"*\" : \" \"} ${character.id.padEnd(8)} ${characterName(character, translator).padEnd(10)} ${source} ${character.profile.behavior} / ${character.profile.tone} / ${character.profile.detailLevel}`;\n}\n","import { z } from \"zod\";\nimport {\n type LanguageDefinition,\n LanguageDefinitionSchema,\n type LanguageId,\n type LanguageSummary,\n} from \"../../../../infra/bases/i18n\";\nimport { type ThemeDefinition, ThemeDefinitionSchema } from \"../../../../infra/bases/theme\";\nimport { type CliAliasState, CliAliasStateSchema } from \"../cliAlias/cliAlias.entities\";\n\nexport const PreferencesServiceOptionsSchema = z\n .object({\n action: z.enum([\n \"reset-defaults\",\n \"set-language\",\n \"set-log-retention\",\n \"set-theme\",\n \"update\",\n \"view\",\n ]),\n language: z.enum([\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"]).optional(),\n logRetentionDays: z.number().int().min(1).max(3650).optional(),\n theme: z.string().min(1).optional(),\n })\n .strict();\n\nexport type UserPreferences = {\n schema: \"agent-devkit.user-preferences/v1\";\n cliAlias?: CliAliasState;\n language: LanguageId;\n logRetentionDays: number;\n theme: string;\n updatedAt: string;\n};\n\nexport type ThemeSummary = {\n id: string;\n name: string;\n primary: string;\n selected: boolean;\n};\n\nexport type PreferencesStatus = \"reset\" | \"updated\" | \"view\";\n\nexport type PreferencesResult = {\n activeLanguage: LanguageDefinition;\n activeTheme: ThemeDefinition;\n languages: LanguageSummary[];\n path: string;\n preferences: UserPreferences;\n status: PreferencesStatus;\n themes: ThemeSummary[];\n};\n\nexport type PreferencesServiceOptions = {\n action: \"reset-defaults\" | \"set-language\" | \"set-log-retention\" | \"set-theme\" | \"update\" | \"view\";\n language?: LanguageId;\n logRetentionDays?: number;\n theme?: string;\n};\n\nexport const PreferencesResultSchema = z.object({\n activeLanguage: LanguageDefinitionSchema.omit({ messages: true }),\n activeTheme: ThemeDefinitionSchema,\n languages: z.array(\n z.object({\n id: z.enum([\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"]),\n name: z.string().min(1),\n nativeName: z.string().min(1),\n selected: z.boolean(),\n }),\n ),\n path: z.string().min(1),\n preferences: z.object({\n schema: z.literal(\"agent-devkit.user-preferences/v1\"),\n cliAlias: CliAliasStateSchema.optional(),\n language: z.enum([\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"]),\n logRetentionDays: z.number().int().min(1).max(3650),\n theme: z.string().min(1),\n updatedAt: z.string().min(1),\n }),\n status: z.enum([\"reset\", \"updated\", \"view\"]),\n themes: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n primary: z.string().min(1),\n selected: z.boolean(),\n }),\n ),\n});\n","import { z } from \"zod\";\n\nexport const ThemeDefinitionSchema = z.object({\n schema: z.literal(\"agent-devkit.theme/v1\"),\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().min(1),\n appearance: z.enum([\"dark\", \"light\"]),\n colors: z.object({\n background: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n panel: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n elevated: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n border: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n borderStrong: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n text: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n textMuted: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n textDim: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n primary: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n primaryStrong: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n success: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n warning: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n danger: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n accent: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n }),\n fonts: z.object({\n heading: z.string().min(1),\n mono: z.string().min(1),\n body: z.string().min(1),\n }),\n});\n\nexport type ThemeDefinition = z.infer<typeof ThemeDefinitionSchema>;\n","import {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type {\n PreferencesResult,\n PreferencesServiceOptions,\n UserPreferences,\n} from \"./preferences.entities\";\nimport { PreferencesResultSchema, PreferencesServiceOptionsSchema } from \"./preferences.entities\";\nimport type { PreferencesRepositoryPort } from \"./preferences.repository\";\n\ntype PreferencesServiceDependencies = {\n repository: PreferencesRepositoryPort;\n};\n\nfunction isValidRetentionDays(value: number | undefined): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 1 && value <= 3650;\n}\n\nexport const preferencesCapabilityConfig = defineCapabilityConfig({\n id: \"user.preferences\",\n moduleId: \"user\",\n name: \"Preferences\",\n description: \"Read and update user Agent DevKit preferences.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class PreferencesService\n extends BaseCapabilityService<typeof preferencesCapabilityConfig, PreferencesServiceDependencies>\n implements CapabilityExecution<PreferencesServiceOptions, PreferencesResult>\n{\n readonly inputSchema = PreferencesServiceOptionsSchema;\n readonly outputSchema = PreferencesResultSchema;\n readonly #repository: PreferencesRepositoryPort;\n\n constructor(dependencies: PreferencesServiceDependencies) {\n super(preferencesCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: PreferencesServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, PreferencesResult>> {\n const themes = await this.#repository.loadThemes();\n const languages = await this.#repository.loadLanguages();\n\n if (themes.isErr()) {\n return Result.fail(themes.unwrapError());\n }\n\n if (languages.isErr()) {\n return Result.fail(languages.unwrapError());\n }\n\n const availableThemes = themes.unwrap();\n const availableLanguages = languages.unwrap();\n const existing = await this.#repository.loadPreferences();\n\n if (existing.isErr()) {\n return Result.fail(existing.unwrapError());\n }\n\n let preferences = existing.unwrap();\n let status: PreferencesResult[\"status\"] = \"view\";\n\n if (options.action === \"reset-defaults\") {\n preferences = {\n ...this.#repository.defaultPreferences(),\n updatedAt: new Date().toISOString(),\n };\n status = \"reset\";\n }\n\n if (options.action === \"set-theme\" || options.action === \"update\") {\n if (options.theme === undefined) {\n if (options.action === \"set-theme\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n } else {\n if (!availableThemes.some((theme) => theme.id === options.theme)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n preferences = {\n ...preferences,\n theme: options.theme,\n updatedAt: new Date().toISOString(),\n };\n status = \"updated\";\n }\n }\n\n if (options.action === \"set-language\" || options.action === \"update\") {\n if (options.language === undefined) {\n if (options.action === \"set-language\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n } else {\n if (!availableLanguages.some((language) => language.id === options.language)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n preferences = {\n ...preferences,\n language: options.language,\n updatedAt: new Date().toISOString(),\n };\n status = \"updated\";\n }\n }\n\n if (options.action === \"set-log-retention\" || options.action === \"update\") {\n if (options.logRetentionDays === undefined) {\n if (options.action === \"set-log-retention\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n } else {\n if (!isValidRetentionDays(options.logRetentionDays)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n preferences = {\n ...preferences,\n logRetentionDays: options.logRetentionDays,\n updatedAt: new Date().toISOString(),\n };\n status = \"updated\";\n }\n }\n\n if (status === \"updated\" || status === \"reset\") {\n const save = await this.#repository.savePreferences(preferences);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n }\n\n const activeTheme =\n availableThemes.find((theme) => theme.id === preferences.theme) ?? availableThemes[0];\n const activeLanguage =\n availableLanguages.find((language) => language.id === preferences.language) ??\n availableLanguages[0];\n\n if (activeTheme === undefined || activeLanguage === undefined) {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n\n return Result.ok({\n activeLanguage,\n activeTheme,\n languages: availableLanguages.map((language) => ({\n id: language.id,\n name: language.name,\n nativeName: language.nativeName,\n selected: language.id === activeLanguage.id,\n })),\n path: this.#repository.preferencesPath(),\n preferences: this.#normalizePreferences(preferences, activeTheme.id, activeLanguage.id),\n status,\n themes: availableThemes.map((theme) => ({\n id: theme.id,\n name: theme.name,\n primary: theme.colors.primary,\n selected: theme.id === activeTheme.id,\n })),\n });\n }\n\n #normalizePreferences(\n preferences: UserPreferences,\n theme: string,\n language: UserPreferences[\"language\"],\n ): UserPreferences {\n return {\n schema: \"agent-devkit.user-preferences/v1\",\n cliAlias: preferences.cliAlias,\n language,\n logRetentionDays: preferences.logRetentionDays,\n theme,\n updatedAt: preferences.updatedAt,\n };\n }\n\n invoke(\n options: PreferencesServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, PreferencesResult>> {\n return this.execute(options);\n }\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { PreferencesResult } from \"./preferences.entities\";\n\nconst fallbackTranslator = new I18nCatalog().translator(\"pt-BR\");\n\nexport function formatPreferencesText(\n result: PreferencesResult,\n translator: Translator = fallbackTranslator,\n): string {\n return [\n translator.t(\"preferences.title\"),\n translator.t(\"preferences.command\"),\n \"\",\n `[${translator.t(\"preferences.status\", { status: result.status })}]`,\n ` ${translator.t(\"preferences.field.file\").padEnd(8)} ${result.path}`,\n ` ${translator.t(\"preferences.field.theme\").padEnd(8)} ${result.preferences.theme}`,\n ` ${translator.t(\"preferences.field.language\").padEnd(8)} ${result.preferences.language}`,\n ` ${translator.t(\"preferences.field.logRetentionDays\").padEnd(8)} ${result.preferences.logRetentionDays}d`,\n \"\",\n ` ${translator.t(\"preferences.section.themes\")}`,\n ...result.themes.map(\n (theme) =>\n ` ${theme.selected ? \"*\" : \" \"} ${theme.id.padEnd(16)} ${theme.primary} ${theme.name}`,\n ),\n \"\",\n ` ${translator.t(\"preferences.section.languages\")}`,\n ...result.languages.map(\n (language) =>\n ` ${language.selected ? \"*\" : \" \"} ${language.id.padEnd(8)} ${language.nativeName} ${language.name}`,\n ),\n ].join(\"\\n\");\n}\n","import type { BaseCapabilityService, CapabilityConfig } from \"./capability\";\nimport type { AgentDevKitErrorCode } from \"./errors\";\nimport type { AgentDevKitModuleConfig } from \"./module\";\nimport { Result } from \"./result\";\n\nexport type ModuleCapabilityMap = Record<string, BaseCapabilityService<CapabilityConfig, unknown>>;\n\nexport type ModuleBinding<\n TConfig extends AgentDevKitModuleConfig,\n TCapabilities extends ModuleCapabilityMap,\n> = {\n readonly capabilities: TCapabilities;\n readonly config: TConfig;\n};\n\nexport abstract class ModuleBinder<\n TOptions,\n TConfig extends AgentDevKitModuleConfig,\n TCapabilities extends ModuleCapabilityMap,\n> {\n abstract bind(\n options: TOptions,\n ): Result<AgentDevKitErrorCode, ModuleBinding<TConfig, TCapabilities>>;\n}\n\nexport function defineModuleBinding<\n TConfig extends AgentDevKitModuleConfig,\n TCapabilities extends ModuleCapabilityMap,\n>(\n binding: ModuleBinding<TConfig, TCapabilities>,\n): Result<AgentDevKitErrorCode, ModuleBinding<TConfig, TCapabilities>> {\n return Result.ok(binding);\n}\n","import { access, chmod, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, delimiter, dirname, join } from \"node:path\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type { PreferencesRepositoryPort } from \"../preferences/preferences.repository\";\nimport type { CliAliasState } from \"./cliAlias.entities\";\nimport { CliAliasNameSchema } from \"./cliAlias.entities\";\n\nexport type CliAliasRepositoryOptions = {\n agentCommand?: string;\n envPath?: string;\n homeDirectory?: string;\n shell?: string;\n preferencesRepository: PreferencesRepositoryPort;\n};\n\nexport interface CliAliasRepositoryPort extends CapabilityRepositoryPort {\n activationCommand(): string;\n binDirectory(): string;\n binDirectoryInPath(): boolean;\n loadAlias(): Promise<Result<AgentDevKitErrorCode, CliAliasState | undefined>>;\n removeAlias(): Promise<Result<AgentDevKitErrorCode, void>>;\n saveAlias(name: string, force?: boolean): Promise<Result<AgentDevKitErrorCode, CliAliasState>>;\n shellCommand(): string;\n syncAlias(): Promise<Result<AgentDevKitErrorCode, CliAliasState>>;\n}\n\nconst reservedAliases = new Set([\n \"agent\",\n \"bash\",\n \"cat\",\n \"cd\",\n \"chmod\",\n \"curl\",\n \"git\",\n \"node\",\n \"npm\",\n \"npx\",\n \"rm\",\n \"sh\",\n \"sudo\",\n \"tsx\",\n \"yarn\",\n \"zsh\",\n]);\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nexport class CliAliasRepository implements CliAliasRepositoryPort {\n readonly repositoryId = \"user.cli_alias.repository\";\n readonly #agentCommand: string;\n readonly #envPath: string;\n readonly #homeDirectory: string;\n readonly #preferencesRepository: PreferencesRepositoryPort;\n readonly #shell: string;\n\n constructor(options: CliAliasRepositoryOptions) {\n this.#agentCommand = options.agentCommand ?? \"agent\";\n this.#envPath = options.envPath ?? process.env.PATH ?? \"\";\n this.#homeDirectory = options.homeDirectory ?? homedir();\n this.#preferencesRepository = options.preferencesRepository;\n this.#shell = options.shell ?? process.env.SHELL ?? \"\";\n }\n\n activationCommand(): string {\n return `export PATH=\"${this.binDirectory()}:$PATH\"`;\n }\n\n binDirectory(): string {\n return join(this.#homeDirectory, \".agent-devkit\", \"bin\");\n }\n\n binDirectoryInPath(): boolean {\n return this.#envPath.split(delimiter).filter(Boolean).includes(this.binDirectory());\n }\n\n async loadAlias(): Promise<Result<AgentDevKitErrorCode, CliAliasState | undefined>> {\n const preferences = await this.#preferencesRepository.loadPreferences();\n\n if (preferences.isErr()) {\n return Result.fail(preferences.unwrapError());\n }\n\n return Result.ok(preferences.unwrap().cliAlias);\n }\n\n async removeAlias(): Promise<Result<AgentDevKitErrorCode, void>> {\n const preferences = await this.#preferencesRepository.loadPreferences();\n\n if (preferences.isErr()) {\n return Result.fail(preferences.unwrapError());\n }\n\n const alias = preferences.unwrap().cliAlias;\n\n if (alias !== undefined) {\n await this.#removeManagedShim(alias.shimPath);\n }\n\n const { cliAlias, ...next } = preferences.unwrap();\n void cliAlias;\n\n return this.#preferencesRepository.savePreferences({\n ...next,\n updatedAt: now(),\n });\n }\n\n async saveAlias(\n name: string,\n force = false,\n ): Promise<Result<AgentDevKitErrorCode, CliAliasState>> {\n const validName = this.#validateName(name);\n\n if (validName.isErr()) {\n return Result.fail(validName.unwrapError());\n }\n\n const preferences = await this.#preferencesRepository.loadPreferences();\n\n if (preferences.isErr()) {\n return Result.fail(preferences.unwrapError());\n }\n\n const alias: CliAliasState = {\n binDirectory: this.binDirectory(),\n enabled: true,\n name: validName.unwrap(),\n shimPath: this.#shimPath(validName.unwrap()),\n updatedAt: now(),\n };\n const collision = await this.#hasUnsafeCollision(alias, force);\n\n if (collision.isErr()) {\n return Result.fail(collision.unwrapError());\n }\n\n if (preferences.unwrap().cliAlias?.name !== alias.name) {\n await this.#removeManagedShim(preferences.unwrap().cliAlias?.shimPath);\n }\n\n const write = await this.#writeShim(alias);\n\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n\n const profile = await this.#ensureShellProfilePath();\n\n if (profile.isErr()) {\n return Result.fail(profile.unwrapError());\n }\n\n const save = await this.#preferencesRepository.savePreferences({\n ...preferences.unwrap(),\n cliAlias: alias,\n updatedAt: now(),\n });\n\n return save.isOk() ? Result.ok(alias) : Result.fail(save.unwrapError());\n }\n\n shellCommand(): string {\n return this.activationCommand();\n }\n\n async syncAlias(): Promise<Result<AgentDevKitErrorCode, CliAliasState>> {\n const alias = await this.loadAlias();\n\n if (alias.isErr()) {\n return Result.fail(alias.unwrapError());\n }\n\n const current = alias.unwrap();\n\n if (current === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return this.saveAlias(current.name, true);\n }\n\n async #hasUnsafeCollision(\n alias: CliAliasState,\n force: boolean,\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n if (force) {\n return Result.ok(undefined);\n }\n\n for (const directory of this.#envPath.split(delimiter).filter(Boolean)) {\n const candidate = join(directory, alias.name);\n\n try {\n await access(candidate);\n } catch {\n continue;\n }\n\n if (candidate === alias.shimPath && (await this.#isManagedShim(candidate))) {\n return Result.ok(undefined);\n }\n\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(undefined);\n }\n\n async #isManagedShim(path: string): Promise<boolean> {\n try {\n return (await readFile(path, \"utf8\")).includes(\"agent-devkit managed alias shim\");\n } catch {\n return false;\n }\n }\n\n async #removeManagedShim(path: string | undefined): Promise<void> {\n if (path === undefined || !(await this.#isManagedShim(path))) {\n return;\n }\n\n await rm(path, { force: true });\n }\n\n #shimPath(name: string): string {\n return join(this.binDirectory(), name);\n }\n\n #shellProfilePath(): string {\n const shellName = basename(this.#shell);\n\n if (shellName === \"zsh\") {\n return join(this.#homeDirectory, \".zshrc\");\n }\n\n if (shellName === \"bash\") {\n return join(this.#homeDirectory, \".bashrc\");\n }\n\n return join(this.#homeDirectory, \".profile\");\n }\n\n #validateName(name: string): Result<AgentDevKitErrorCode, string> {\n const parsed = CliAliasNameSchema.safeParse(name);\n\n if (!parsed.success || reservedAliases.has(parsed.data)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(parsed.data);\n }\n\n async #writeShim(alias: CliAliasState): Promise<Result<AgentDevKitErrorCode, void>> {\n const script = [\n \"#!/usr/bin/env sh\",\n \"# agent-devkit managed alias shim\",\n `exec ${this.#agentCommand} \"$@\"`,\n \"\",\n ].join(\"\\n\");\n\n try {\n await mkdir(dirname(alias.shimPath), { recursive: true, mode: 0o700 });\n await writeFile(alias.shimPath, script, \"utf8\");\n await chmod(alias.shimPath, 0o755);\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async #ensureShellProfilePath(): Promise<Result<AgentDevKitErrorCode, void>> {\n const profilePath = this.#shellProfilePath();\n const block = [\n \"\",\n \"# agent-devkit managed PATH\",\n `case \":$PATH:\" in *\":${this.binDirectory()}:\"*) ;; *) export PATH=\"${this.binDirectory()}:$PATH\" ;; esac`,\n \"# /agent-devkit managed PATH\",\n \"\",\n ].join(\"\\n\");\n\n try {\n await mkdir(dirname(profilePath), { recursive: true, mode: 0o700 });\n\n let current = \"\";\n\n try {\n current = await readFile(profilePath, \"utf8\");\n } catch {\n current = \"\";\n }\n\n if (!current.includes(\"# agent-devkit managed PATH\")) {\n await writeFile(profilePath, `${current.trimEnd()}${block}`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n }\n\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { access, copyFile, mkdir, readdir, readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport {\n type CharacterDefinition,\n CharacterDefinitionSchema,\n type CharacterId,\n} from \"../../../../infra/bases/character\";\nimport type { AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../../../infra/data/local_agent_data_store\";\nimport {\n type CharacterListItem,\n type UserPersonalizationState,\n UserPersonalizationStateSchema,\n} from \"./personalization.entities\";\n\nexport type PersonalizationRepositoryOptions = {\n assetsDirectory?: string;\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n};\n\nexport interface PersonalizationRepositoryPort extends CapabilityRepositoryPort {\n charactersDirectory(): string;\n customCharactersDirectory(): string;\n defaultState(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>>;\n importSprite(\n characterId: CharacterId,\n sourcePath: string,\n ): Promise<Result<AgentDevKitErrorCode, string>>;\n loadCharacters(\n selectedCharacterId?: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterListItem[]>>;\n loadPresetCharacter(\n characterId: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition>>;\n loadProfile(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>>;\n profilePath(): string;\n saveCustomCharacter(character: CharacterDefinition): Promise<Result<AgentDevKitErrorCode, void>>;\n saveProfile(profile: UserPersonalizationState): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nfunction defaultAssetsDirectory(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDirectory, \"../../../../assets\"),\n resolve(moduleDirectory, \"../src/assets\"),\n resolve(process.cwd(), \"src/assets\"),\n ];\n\n return (\n candidates.find((candidate) => existsSync(candidate)) ?? resolve(process.cwd(), \"src/assets\")\n );\n}\n\nfunction cloneCharacter(character: CharacterDefinition): CharacterDefinition {\n return {\n ...character,\n i18n: { ...character.i18n },\n profile: {\n ...character.profile,\n traits: [...character.profile.traits],\n },\n };\n}\n\nexport class PersonalizationRepository implements PersonalizationRepositoryPort {\n readonly repositoryId = \"user.personalization.repository\";\n readonly #assetsDirectory: string;\n readonly #dataStore: AgentDataStore;\n readonly #homeDirectory: string;\n\n constructor(options: PersonalizationRepositoryOptions = {}) {\n this.#assetsDirectory = options.assetsDirectory ?? defaultAssetsDirectory();\n this.#homeDirectory = options.homeDirectory ?? homedir();\n this.#dataStore =\n options.dataStore ??\n new LocalAgentDataStore({\n rootDirectory: join(this.#homeDirectory, \".agent-devkit\", \"data\"),\n });\n }\n\n charactersDirectory(): string {\n return join(this.#assetsDirectory, \"characters\");\n }\n\n customCharactersDirectory(): string {\n const resolved = this.#dataStore.resolve({\n namespace: \"personalization\",\n segments: [\"characters\"],\n });\n\n return resolved.isOk()\n ? resolved.unwrap()\n : join(this.#homeDirectory, \".agent-devkit\", \"data\", \"personalization\", \"characters\");\n }\n\n async defaultState(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>> {\n const characters = await this.#loadPresetCharacters();\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n const defaultCharacter =\n characters.unwrap().find((character) => character.default && character.active) ??\n characters.unwrap().find((character) => character.id === \"kit\" && character.active);\n\n if (defaultCharacter === undefined) {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n\n return Result.ok({\n schema: \"agent-devkit.agent-personalization/v2\",\n currentCharacter: cloneCharacter(defaultCharacter),\n selectedPresetId: defaultCharacter.id,\n updatedAt: new Date(0).toISOString(),\n });\n }\n\n async importSprite(\n characterId: CharacterId,\n sourcePath: string,\n ): Promise<Result<AgentDevKitErrorCode, string>> {\n try {\n await access(sourcePath);\n const extension = basename(sourcePath).includes(\".\")\n ? `.${basename(sourcePath).split(\".\").pop() ?? \"sprite\"}`\n : \"\";\n const targetDirectory = join(this.customCharactersDirectory(), characterId);\n const targetPath = join(targetDirectory, `sprite${extension}`);\n\n await mkdir(targetDirectory, { recursive: true });\n await copyFile(sourcePath, targetPath);\n\n return Result.ok(targetPath);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async loadCharacters(\n selectedCharacterId?: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterListItem[]>> {\n const presets = await this.#loadPresetCharacters();\n const custom = await this.#loadCustomCharacters();\n\n if (presets.isErr()) {\n return Result.fail(presets.unwrapError());\n }\n\n if (custom.isErr()) {\n return Result.fail(custom.unwrapError());\n }\n\n const charactersById = new Map<string, CharacterListItem>();\n\n for (const character of presets.unwrap()) {\n charactersById.set(character.id, this.#listItem(character, false, selectedCharacterId));\n }\n\n for (const character of custom.unwrap()) {\n charactersById.set(character.id, this.#listItem(character, true, selectedCharacterId));\n }\n\n return Result.ok([...charactersById.values()]);\n }\n\n async loadPresetCharacter(\n characterId: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition>> {\n const characters = await this.#loadPresetCharacters();\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n const character = characters\n .unwrap()\n .find((candidate) => candidate.id === characterId && candidate.active);\n\n return character === undefined\n ? Result.fail(ErrorCodes.InvalidInput)\n : Result.ok(cloneCharacter(character));\n }\n\n async loadProfile(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>> {\n const path = { namespace: \"personalization\" as const, segments: [\"profile.json\"] };\n const exists = await this.#dataStore.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (exists.unwrap()) {\n const payload = await this.#dataStore.readJson<unknown>(path);\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = UserPersonalizationStateSchema.safeParse(payload.unwrap());\n\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n const legacy = await this.#loadLegacyProfile();\n\n if (legacy.isOk()) {\n await this.saveProfile(legacy.unwrap());\n return legacy;\n }\n\n if (legacy.unwrapError() !== ErrorCodes.FileReadFailed) {\n return Result.fail(legacy.unwrapError());\n }\n\n return this.defaultState();\n }\n\n async #loadLegacyProfile(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>> {\n try {\n await access(this.#legacyProfilePath());\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n try {\n const payload = JSON.parse(await readFile(this.#legacyProfilePath(), \"utf8\"));\n const parsed = UserPersonalizationStateSchema.safeParse(payload);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(parsed.data);\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n profilePath(): string {\n const resolved = this.#dataStore.resolve({\n namespace: \"personalization\",\n segments: [\"profile.json\"],\n });\n\n return resolved.isOk()\n ? resolved.unwrap()\n : join(this.#homeDirectory, \".agent-devkit\", \"data\", \"personalization\", \"profile.json\");\n }\n\n async saveCustomCharacter(\n character: CharacterDefinition,\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n try {\n return await this.#dataStore.writeJson(\n { namespace: \"personalization\", segments: [\"characters\", character.id, \"character.json\"] },\n character,\n );\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async saveProfile(\n profile: UserPersonalizationState,\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n try {\n return await this.#dataStore.writeJson(\n { namespace: \"personalization\", segments: [\"profile.json\"] },\n profile,\n );\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async #loadCustomCharacters(): Promise<Result<AgentDevKitErrorCode, CharacterDefinition[]>> {\n const legacy = await this.#loadLegacyCustomCharacters();\n\n if (legacy.isOk()) {\n for (const character of legacy.unwrap()) {\n await this.saveCustomCharacter(character);\n await this.#migrateLegacySprite(character.id);\n }\n } else if (legacy.unwrapError() !== ErrorCodes.FileReadFailed) {\n return Result.fail(legacy.unwrapError());\n }\n\n try {\n await access(this.customCharactersDirectory());\n } catch {\n return Result.ok([]);\n }\n\n return this.#loadCharactersFromDirectory(this.customCharactersDirectory());\n }\n\n async #loadPresetCharacters(): Promise<Result<AgentDevKitErrorCode, CharacterDefinition[]>> {\n return this.#loadCharactersFromDirectory(this.charactersDirectory());\n }\n\n async #loadCharactersFromDirectory(\n directory: string,\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition[]>> {\n try {\n const entries = (await readdir(directory, { withFileTypes: true }))\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort((left, right) => left.localeCompare(right));\n const characters: CharacterDefinition[] = [];\n\n for (const entry of entries) {\n const payload = JSON.parse(\n await readFile(join(directory, entry, \"character.json\"), \"utf8\"),\n );\n const parsed = CharacterDefinitionSchema.safeParse(payload);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n characters.push(parsed.data);\n }\n\n return Result.ok(characters);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n #listItem(\n character: CharacterDefinition,\n custom: boolean,\n selectedCharacterId?: CharacterId,\n ): CharacterListItem {\n const packageSpritePath = this.#findPackageCharacterSprite(character.id);\n const userSpritePath = this.#findUserCharacterSprite(character.id);\n\n return {\n ...cloneCharacter(character),\n custom,\n selected: character.id === selectedCharacterId,\n spritePath:\n userSpritePath !== undefined\n ? userSpritePath\n : packageSpritePath !== undefined\n ? packageSpritePath\n : undefined,\n };\n }\n\n #findPackageCharacterSprite(characterId: CharacterId): string | undefined {\n const directory = join(this.charactersDirectory(), characterId);\n const candidates = [\"sprite.js\", \"sprite.svg\", \"sprite.png\", \"sprite.jpg\", \"sprite.jpeg\"];\n\n return candidates\n .map((candidate) => join(directory, candidate))\n .find((candidate) => existsSync(candidate));\n }\n\n #findUserCharacterSprite(characterId: CharacterId): string | undefined {\n const directory = join(this.customCharactersDirectory(), characterId);\n\n if (!existsSync(directory)) {\n return undefined;\n }\n\n const candidates = [\"sprite.js\", \"sprite.svg\", \"sprite.png\", \"sprite.jpg\", \"sprite.jpeg\"];\n\n return candidates\n .map((candidate) => join(directory, candidate))\n .find((candidate) => existsSync(candidate));\n }\n\n async #loadLegacyCustomCharacters(): Promise<\n Result<AgentDevKitErrorCode, CharacterDefinition[]>\n > {\n try {\n await access(this.#legacyCustomCharactersDirectory());\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return this.#loadCharactersFromDirectory(this.#legacyCustomCharactersDirectory());\n }\n\n async #migrateLegacySprite(characterId: CharacterId): Promise<void> {\n const source = [\"sprite.js\", \"sprite.svg\", \"sprite.png\", \"sprite.jpg\", \"sprite.jpeg\"]\n .map((candidate) => join(this.#legacyCustomCharactersDirectory(), characterId, candidate))\n .find((candidate) => existsSync(candidate));\n\n if (source === undefined) {\n return;\n }\n\n const extension = basename(source).includes(\".\")\n ? `.${basename(source).split(\".\").pop() ?? \"sprite\"}`\n : \"\";\n const target = this.#dataStore.resolve({\n namespace: \"personalization\",\n segments: [\"characters\", characterId, `sprite${extension}`],\n });\n\n if (target.isErr()) {\n return;\n }\n\n await mkdir(dirname(target.unwrap()), { recursive: true });\n await copyFile(source, target.unwrap()).catch(() => undefined);\n }\n\n #legacyCustomCharactersDirectory(): string {\n return join(this.#homeDirectory, \".agent-devkit\", \"characters\");\n }\n\n #legacyProfilePath(): string {\n return join(this.#homeDirectory, \".agent-devkit\", \"personalization.json\");\n }\n}\n","import { randomBytes } from \"node:crypto\";\nimport {\n access,\n appendFile,\n mkdir,\n readdir,\n readFile,\n rename,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, resolve, sep } from \"node:path\";\nimport type {\n AgentDataEntry,\n AgentDataPath,\n AgentDataStore,\n AgentDataWriteOptions,\n} from \"../bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\n\nexport type LocalAgentDataStoreOptions = {\n rootDirectory?: string;\n};\n\nfunction defaultRootDirectory(): string {\n return join(homedir(), \".agent-devkit\", \"data\");\n}\n\nfunction hasPathSeparator(segment: string): boolean {\n return segment.includes(\"/\") || segment.includes(\"\\\\\");\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: unknown }).code === \"ENOENT\"\n );\n}\n\nexport class LocalAgentDataStore implements AgentDataStore {\n readonly #rootDirectory: string;\n\n constructor(options: LocalAgentDataStoreOptions = {}) {\n this.#rootDirectory = resolve(options.rootDirectory ?? defaultRootDirectory());\n }\n\n rootDirectory(): string {\n return this.#rootDirectory;\n }\n\n resolve(path: AgentDataPath): Result<AgentDevKitErrorCode, string> {\n if (\n path.segments.some(\n (segment) =>\n segment.length === 0 ||\n segment === \".\" ||\n segment === \"..\" ||\n isAbsolute(segment) ||\n hasPathSeparator(segment),\n )\n ) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const target = resolve(this.#rootDirectory, path.namespace, ...path.segments);\n const allowedRoot = `${this.#rootDirectory}${sep}`;\n\n if (target !== this.#rootDirectory && !target.startsWith(allowedRoot)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(target);\n }\n\n async readJson<T>(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, T>> {\n const content = await this.readText(path);\n\n if (content.isErr()) {\n return Result.fail(content.unwrapError());\n }\n\n try {\n return Result.ok(JSON.parse(content.unwrap()) as T);\n } catch {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n }\n\n async writeJson<T>(\n path: AgentDataPath,\n value: T,\n options: AgentDataWriteOptions = {},\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n return this.writeText(path, `${JSON.stringify(value, null, 2)}\\n`, options);\n }\n\n async appendJsonl<T>(\n path: AgentDataPath,\n value: T,\n _options: AgentDataWriteOptions = {},\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n await mkdir(dirname(target.unwrap()), { recursive: true });\n await appendFile(target.unwrap(), `${JSON.stringify(value)}\\n`, \"utf8\");\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async readJsonl<T>(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, T[]>> {\n const content = await this.readText(path);\n\n if (content.isErr()) {\n return Result.fail(content.unwrapError());\n }\n\n try {\n return Result.ok(\n content\n .unwrap()\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line) => JSON.parse(line) as T),\n );\n } catch {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n }\n\n async readText(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, string>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n return Result.ok(await readFile(target.unwrap(), \"utf8\"));\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async writeText(\n path: AgentDataPath,\n value: string,\n options: AgentDataWriteOptions = {},\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n return this.#write(path, value, options);\n }\n\n async readBinary(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, Uint8Array>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n return Result.ok(await readFile(target.unwrap()));\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async writeBinary(\n path: AgentDataPath,\n value: Uint8Array,\n options: AgentDataWriteOptions = {},\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n return this.#write(path, value, options);\n }\n\n async list(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, AgentDataEntry[]>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n const entries = await readdir(target.unwrap(), { withFileTypes: true });\n return Result.ok(\n entries\n .map((entry) => ({\n kind: entry.isDirectory() ? (\"directory\" as const) : (\"file\" as const),\n name: entry.name,\n path: { namespace: path.namespace, segments: [...path.segments, entry.name] },\n }))\n .sort((left, right) => left.name.localeCompare(right.name)),\n );\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async remove(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, void>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n await rm(target.unwrap(), { force: true, recursive: true });\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async exists(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, boolean>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n await access(target.unwrap());\n return Result.ok(true);\n } catch (error) {\n return isNotFoundError(error) ? Result.ok(false) : Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async #write(\n path: AgentDataPath,\n value: string | Uint8Array,\n options: AgentDataWriteOptions,\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n const atomic = options.atomic ?? true;\n\n try {\n await mkdir(dirname(target.unwrap()), { recursive: true });\n\n if (!atomic) {\n await writeFile(target.unwrap(), value);\n return Result.ok(undefined);\n }\n\n const tempPath = join(\n dirname(target.unwrap()),\n `.agent-data-${process.pid}-${randomBytes(6).toString(\"hex\")}.tmp`,\n );\n\n try {\n await writeFile(tempPath, value, { flag: \"wx\" });\n await rename(tempPath, target.unwrap());\n } catch (error) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n throw error;\n }\n\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { access, readdir, readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport type { LanguageDefinition } from \"../../../../infra/bases/i18n\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { type ThemeDefinition, ThemeDefinitionSchema } from \"../../../../infra/bases/theme\";\nimport { LocalAgentDataStore } from \"../../../../infra/data/local_agent_data_store\";\nimport { CliAliasStateSchema } from \"../cliAlias/cliAlias.entities\";\nimport type { UserPreferences } from \"./preferences.entities\";\n\nexport type PreferencesRepositoryOptions = {\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n i18nDirectory?: string;\n themesDirectory?: string;\n};\n\nexport interface PreferencesRepositoryPort extends CapabilityRepositoryPort {\n defaultPreferences(): UserPreferences;\n loadLanguages(): Promise<Result<AgentDevKitErrorCode, LanguageDefinition[]>>;\n loadPreferences(): Promise<Result<AgentDevKitErrorCode, UserPreferences>>;\n loadThemes(): Promise<Result<AgentDevKitErrorCode, ThemeDefinition[]>>;\n preferencesPath(): string;\n savePreferences(preferences: UserPreferences): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nconst defaultLanguage = \"pt-BR\";\nconst defaultLogRetentionDays = 30;\nconst defaultTheme = \"default-purple\";\n\nfunction defaultThemesDirectory(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDirectory, \"../../../../assets/themes\"),\n resolve(moduleDirectory, \"../src/assets/themes\"),\n resolve(process.cwd(), \"src/assets/themes\"),\n ];\n\n return (\n candidates.find((candidate) => existsSync(candidate)) ??\n resolve(process.cwd(), \"src/assets/themes\")\n );\n}\n\nfunction createDefaultPreferences(): UserPreferences {\n return {\n schema: \"agent-devkit.user-preferences/v1\",\n language: defaultLanguage,\n logRetentionDays: defaultLogRetentionDays,\n theme: defaultTheme,\n updatedAt: new Date(0).toISOString(),\n };\n}\n\nexport class PreferencesRepository implements PreferencesRepositoryPort {\n readonly repositoryId = \"user.preferences.repository\";\n readonly #dataStore: AgentDataStore;\n readonly #homeDirectory: string;\n readonly #i18nCatalog: I18nCatalog;\n readonly #themesDirectory: string;\n\n constructor(options: PreferencesRepositoryOptions = {}) {\n this.#homeDirectory = options.homeDirectory ?? homedir();\n this.#dataStore =\n options.dataStore ??\n new LocalAgentDataStore({\n rootDirectory: join(this.#homeDirectory, \".agent-devkit\", \"data\"),\n });\n this.#i18nCatalog = new I18nCatalog({ directory: options.i18nDirectory });\n this.#themesDirectory = options.themesDirectory ?? defaultThemesDirectory();\n }\n\n defaultPreferences(): UserPreferences {\n return createDefaultPreferences();\n }\n\n async loadLanguages(): Promise<Result<AgentDevKitErrorCode, LanguageDefinition[]>> {\n return this.#i18nCatalog.loadLanguages();\n }\n\n async loadPreferences(): Promise<Result<AgentDevKitErrorCode, UserPreferences>> {\n const path = { namespace: \"preferences\" as const, segments: [\"preferences.json\"] };\n const exists = await this.#dataStore.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (exists.unwrap()) {\n const payload = await this.#dataStore.readJson<Partial<UserPreferences>>(path);\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n return this.#normalizePayload(payload.unwrap());\n }\n\n const legacy = await this.#loadLegacyPreferences();\n\n if (legacy.isOk()) {\n await this.savePreferences(legacy.unwrap());\n return legacy;\n }\n\n if (legacy.unwrapError() !== ErrorCodes.FileReadFailed) {\n return Result.fail(legacy.unwrapError());\n }\n\n return Result.ok(this.defaultPreferences());\n }\n\n async #loadLegacyPreferences(): Promise<Result<AgentDevKitErrorCode, UserPreferences>> {\n try {\n await access(this.#legacyPreferencesPath());\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n try {\n const payload = JSON.parse(\n await readFile(this.#legacyPreferencesPath(), \"utf8\"),\n ) as Partial<UserPreferences>;\n return this.#normalizePayload(payload);\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n #normalizePayload(\n payload: Partial<UserPreferences>,\n ): Result<AgentDevKitErrorCode, UserPreferences> {\n if (payload.schema !== \"agent-devkit.user-preferences/v1\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok({\n schema: \"agent-devkit.user-preferences/v1\",\n cliAlias:\n payload.cliAlias === undefined\n ? undefined\n : CliAliasStateSchema.safeParse(payload.cliAlias).success\n ? CliAliasStateSchema.parse(payload.cliAlias)\n : undefined,\n language: payload.language ?? defaultLanguage,\n logRetentionDays: payload.logRetentionDays ?? defaultLogRetentionDays,\n theme: payload.theme ?? defaultTheme,\n updatedAt: payload.updatedAt ?? new Date(0).toISOString(),\n });\n }\n\n async loadThemes(): Promise<Result<AgentDevKitErrorCode, ThemeDefinition[]>> {\n try {\n const files = (await readdir(this.#themesDirectory))\n .filter((file) => file.endsWith(\".json\"))\n .sort((left, right) =>\n left === \"default-purple.json\"\n ? -1\n : right === \"default-purple.json\"\n ? 1\n : left.localeCompare(right),\n );\n const themes: ThemeDefinition[] = [];\n\n for (const file of files) {\n const payload = JSON.parse(await readFile(join(this.#themesDirectory, file), \"utf8\"));\n const parsed = ThemeDefinitionSchema.safeParse(payload);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n themes.push(parsed.data);\n }\n\n return Result.ok(themes);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n preferencesPath(): string {\n const resolved = this.#dataStore.resolve({\n namespace: \"preferences\",\n segments: [\"preferences.json\"],\n });\n\n return resolved.isOk()\n ? resolved.unwrap()\n : join(this.#homeDirectory, \".agent-devkit\", \"data\", \"preferences\", \"preferences.json\");\n }\n\n async savePreferences(preferences: UserPreferences): Promise<Result<AgentDevKitErrorCode, void>> {\n return this.#dataStore.writeJson(\n { namespace: \"preferences\", segments: [\"preferences.json\"] },\n preferences,\n );\n }\n\n #legacyPreferencesPath(): string {\n return join(this.#homeDirectory, \".agent-devkit\", \"preferences.json\");\n }\n}\n","import type { AgentDevKitConfig } from \"./config\";\n\nexport type ModuleTestBinding = {\n include: readonly [string, ...string[]];\n};\n\nexport type AgentDevKitModuleConfig = AgentDevKitConfig & {\n capabilities: readonly string[];\n tests: ModuleTestBinding;\n};\n\nexport function defineModuleConfig<TConfig extends AgentDevKitModuleConfig>(\n config: TConfig,\n): TConfig {\n return config;\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { cliAliasCapabilityConfig } from \"./capabilities/cliAlias/cliAlias.service\";\nimport { personalizationCapabilityConfig } from \"./capabilities/personalization/personalization.service\";\nimport { preferencesCapabilityConfig } from \"./capabilities/preferences/preferences.service\";\n\nexport const userModuleConfig = defineModuleConfig({\n id: \"user\",\n name: \"User\",\n description: \"User-level Agent DevKit preferences and personalization.\",\n capabilities: [\n cliAliasCapabilityConfig.id,\n personalizationCapabilityConfig.id,\n preferencesCapabilityConfig.id,\n ],\n tests: {\n include: [\n \"src/modules/user/user.surface.test.ts\",\n \"src/modules/user/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n CliAliasRepository,\n type CliAliasRepositoryPort,\n} from \"./capabilities/cliAlias/cliAlias.repository\";\nimport { CliAliasService } from \"./capabilities/cliAlias/cliAlias.service\";\nimport {\n PersonalizationRepository,\n type PersonalizationRepositoryPort,\n} from \"./capabilities/personalization/personalization.repository\";\nimport { PersonalizationService } from \"./capabilities/personalization/personalization.service\";\nimport {\n PreferencesRepository,\n type PreferencesRepositoryPort,\n} from \"./capabilities/preferences/preferences.repository\";\nimport { PreferencesService } from \"./capabilities/preferences/preferences.service\";\nimport { userModuleConfig } from \"./user.config\";\n\nexport type UserModuleBindOptions = {\n homeDirectory?: string;\n};\n\nexport type UserModuleCapabilities = {\n cliAlias: CliAliasService;\n personalization: PersonalizationService;\n preferences: PreferencesService;\n};\n\nexport type UserModuleBinding = ModuleBinding<typeof userModuleConfig, UserModuleCapabilities>;\n\ntype UserModuleBinderDependencies = {\n cliAliasRepository: (options: UserModuleBindOptions) => CliAliasRepositoryPort;\n personalizationRepository: (options: UserModuleBindOptions) => PersonalizationRepositoryPort;\n preferencesRepository: (options: UserModuleBindOptions) => PreferencesRepositoryPort;\n};\n\nconst defaultDependencies: UserModuleBinderDependencies = {\n cliAliasRepository: (options) =>\n new CliAliasRepository({\n homeDirectory: options.homeDirectory,\n preferencesRepository: new PreferencesRepository(options),\n }),\n personalizationRepository: (options) => new PersonalizationRepository(options),\n preferencesRepository: (options) => new PreferencesRepository(options),\n};\n\nexport class UserModuleBinder extends ModuleBinder<\n UserModuleBindOptions,\n typeof userModuleConfig,\n UserModuleCapabilities\n> {\n readonly #dependencies: UserModuleBinderDependencies;\n\n constructor(dependencies: UserModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(options: UserModuleBindOptions): Result<AgentDevKitErrorCode, UserModuleBinding> {\n return defineModuleBinding({\n config: userModuleConfig,\n capabilities: {\n cliAlias: new CliAliasService({\n repository: this.#dependencies.cliAliasRepository(options),\n }),\n personalization: new PersonalizationService({\n repository: this.#dependencies.personalizationRepository(options),\n }),\n preferences: new PreferencesService({\n repository: this.#dependencies.preferencesRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createUserModuleBindings(\n options: UserModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, UserModuleBinding> {\n return new UserModuleBinder().bind(options);\n}\n","import type { LogCategorySelection } from \"../../modules/logs/logs.index\";\n\nexport type JsonCommandOptions = {\n json?: boolean;\n};\n\nexport type LogCategoryCommandOptions = {\n all?: boolean;\n technical?: boolean;\n};\n\nexport function wantsJson(options?: JsonCommandOptions, argv: string[] = process.argv): boolean {\n return options?.json === true || argv.includes(\"--json\");\n}\n\nexport function parseNonNegativeInteger(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const parsed = Number.parseInt(value, 10);\n return Number.isInteger(parsed) && parsed >= 0 && String(parsed) === value.trim()\n ? parsed\n : undefined;\n}\n\nexport function parsePositiveInteger(value: string): number {\n const parsed = Number.parseInt(value, 10);\n\n if (!Number.isInteger(parsed) || parsed < 1 || String(parsed) !== value.trim()) {\n throw new Error(`Expected a positive integer, received: ${value}`);\n }\n\n return parsed;\n}\n\nexport function logCategoryFromOptions(\n options: LogCategoryCommandOptions,\n argv: string[] = process.argv,\n): LogCategorySelection | undefined {\n if (options.all === true || argv.includes(\"--all\")) {\n return \"all\";\n }\n\n if (options.technical === true || argv.includes(\"--technical\")) {\n return \"technical\";\n }\n\n return undefined;\n}\n","import { join } from \"node:path\";\nimport {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { DoctorInputSchema, type DoctorReport, DoctorReportSchema } from \"./doctor.entities\";\nimport type { DoctorRepositoryPort } from \"./doctor.repository\";\n\ntype DoctorServiceDependencies = {\n appVersion: string;\n repository: DoctorRepositoryPort;\n};\n\nexport const doctorCapabilityConfig = defineCapabilityConfig({\n id: \"project.doctor\",\n moduleId: \"project\",\n name: \"Doctor\",\n description: \"Inspect the local Agent DevKit environment without changing state.\",\n kind: \"deterministic\",\n risk: \"read-only\",\n} as const);\n\nexport class DoctorService\n extends BaseCapabilityService<typeof doctorCapabilityConfig, DoctorServiceDependencies>\n implements CapabilityExecution<void, DoctorReport>\n{\n readonly inputSchema = DoctorInputSchema;\n readonly outputSchema = DoctorReportSchema;\n readonly #appVersion: string;\n readonly #repository: DoctorRepositoryPort;\n\n constructor(dependencies: DoctorServiceDependencies) {\n super(doctorCapabilityConfig, dependencies);\n this.#appVersion = dependencies.appVersion;\n this.#repository = dependencies.repository;\n }\n\n async execute(): Promise<Result<AgentDevKitErrorCode, DoctorReport>> {\n const homeDirectory = this.#repository.homeDirectory();\n const cwd = this.#repository.cwd();\n const nodeVersion = this.#repository.nodeVersion();\n const platform = this.#repository.platform();\n const stdinIsTTY = this.#repository.stdinIsTTY();\n const stdoutIsTTY = this.#repository.stdoutIsTTY();\n\n for (const result of [homeDirectory, cwd, nodeVersion, platform, stdinIsTTY, stdoutIsTTY]) {\n if (result.isErr()) {\n return Result.fail(result.unwrapError());\n }\n }\n\n const globalStatePath = join(homeDirectory.unwrap(), \".agent-devkit\");\n const projectStatePath = join(cwd.unwrap(), \".agent-devkit\");\n const globalStateExists = await this.#repository.exists(globalStatePath);\n const projectStateExists = await this.#repository.exists(projectStatePath);\n\n if (globalStateExists.isErr()) {\n return Result.fail(globalStateExists.unwrapError());\n }\n\n if (projectStateExists.isErr()) {\n return Result.fail(projectStateExists.unwrapError());\n }\n\n let models: DoctorReport[\"models\"];\n\n if (this.#repository.installedModels !== undefined) {\n const installedModels = await this.#repository.installedModels(homeDirectory.unwrap());\n\n if (installedModels.isErr()) {\n return Result.fail(installedModels.unwrapError());\n }\n\n models = {\n directory: installedModels.unwrap().directory,\n installed: installedModels.unwrap().ids.length,\n ids: installedModels.unwrap().ids,\n };\n }\n\n return Result.ok({\n status: globalStateExists.unwrap() || projectStateExists.unwrap() ? \"ok\" : \"warning\",\n version: this.#appVersion,\n node: {\n version: nodeVersion.unwrap(),\n },\n system: {\n platform: platform.unwrap(),\n cwd: cwd.unwrap(),\n },\n terminal: {\n stdinIsTTY: stdinIsTTY.unwrap(),\n stdoutIsTTY: stdoutIsTTY.unwrap(),\n },\n runtime: {\n globalState: {\n path: globalStatePath,\n exists: globalStateExists.unwrap(),\n },\n projectState: {\n path: projectStatePath,\n exists: projectStateExists.unwrap(),\n },\n },\n models,\n });\n }\n\n invoke(): Promise<Result<AgentDevKitErrorCode, DoctorReport>> {\n return this.execute();\n }\n}\n","import { z } from \"zod\";\n\nexport const DoctorInputSchema = z.object({}).strict();\n\nexport type DoctorStatus = \"ok\" | \"warning\" | \"error\";\n\nexport const DoctorReportSchema = z.object({\n status: z.enum([\"ok\", \"warning\", \"error\"]),\n version: z.string().min(1),\n node: z.object({\n version: z.string().min(1),\n }),\n system: z.object({\n platform: z.string().min(1),\n cwd: z.string().min(1),\n }),\n terminal: z.object({\n stdinIsTTY: z.boolean(),\n stdoutIsTTY: z.boolean(),\n }),\n runtime: z.object({\n globalState: z.object({\n path: z.string().min(1),\n exists: z.boolean(),\n }),\n projectState: z.object({\n path: z.string().min(1),\n exists: z.boolean(),\n }),\n }),\n models: z\n .object({\n directory: z.string().min(1),\n installed: z.number().int().nonnegative(),\n ids: z.array(z.string().min(1)),\n })\n .optional(),\n});\n\nexport type DoctorStatePath = {\n path: string;\n exists: boolean;\n};\n\nexport type DoctorReport = {\n status: DoctorStatus;\n version: string;\n node: {\n version: string;\n };\n system: {\n platform: string;\n cwd: string;\n };\n terminal: {\n stdinIsTTY: boolean;\n stdoutIsTTY: boolean;\n };\n runtime: {\n globalState: DoctorStatePath;\n projectState: DoctorStatePath;\n };\n models?: {\n directory: string;\n installed: number;\n ids: string[];\n };\n};\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { DoctorReport, DoctorStatePath } from \"./doctor.entities\";\n\ntype FormatDoctorTextOptions = {\n color?: boolean;\n translator?: Translator;\n};\n\nconst colors = {\n dim: \"#9D98B8\",\n error: \"#E87A8E\",\n indigo: \"#8B7AE6\",\n ok: \"#5FD0C8\",\n text: \"#E8E6F2\",\n};\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nfunction colorize(value: string, hex: string, enabled: boolean): string {\n if (!enabled) {\n return value;\n }\n\n const [red, green, blue] = [hex.slice(1, 3), hex.slice(3, 5), hex.slice(5, 7)].map((part) =>\n Number.parseInt(part, 16),\n );\n\n return `\\u001b[38;2;${red};${green};${blue}m${value}\\u001b[0m`;\n}\n\nfunction stateStatus(state: DoctorStatePath): string {\n return state.exists ? \"found\" : \"missing\";\n}\n\nfunction statusColor(status: string): string {\n if (status === \"ok\" || status === \"found\") {\n return colors.ok;\n }\n\n if (status === \"missing\") {\n return colors.dim;\n }\n\n return colors.error;\n}\n\nfunction pill(label: string, enabled: boolean): string {\n const value = `[${label}]`;\n return colorize(value, statusColor(label), enabled);\n}\n\nfunction statusText(status: string, label: string, enabled: boolean): string {\n return colorize(label, statusColor(status), enabled);\n}\n\nfunction section(title: string, rows: Array<[string, string]>, enabled: boolean): string[] {\n return [\n colorize(` ${title}`, colors.indigo, enabled),\n ...rows.map(([label, value]) => ` ${label.padEnd(7)} ${value}`),\n ];\n}\n\nexport function formatDoctorText(\n report: DoctorReport,\n options: FormatDoctorTextOptions = {},\n): string {\n const color = options.color === true;\n const translator = options.translator ?? defaultTranslator;\n const t = (key: string, values?: Record<string, string>) => translator.t(key, values);\n const globalStatus = stateStatus(report.runtime.globalState);\n const projectStatus = stateStatus(report.runtime.projectState);\n const globalStatusLabel = t(`doctor.status.${globalStatus}`);\n const projectStatusLabel = t(`doctor.status.${projectStatus}`);\n\n return [\n `${colorize(t(\"doctor.title\"), colors.text, color)} ${colorize(t(\"doctor.subtitle\"), colors.dim, color)}`,\n colorize(t(\"doctor.command\"), colors.indigo, color),\n \"\",\n `${pill(report.status, color)} ${t(\"doctor.health\")}`,\n ...section(\n t(\"doctor.section.runtime\"),\n [\n [t(\"doctor.field.version\"), report.version],\n [t(\"doctor.field.node\"), report.node.version],\n ],\n color,\n ),\n ...section(\n t(\"doctor.section.environment\"),\n [\n [t(\"doctor.field.platform\"), report.system.platform],\n [t(\"doctor.field.cwd\"), report.system.cwd],\n [\n t(\"doctor.field.tty\"),\n `stdin=${String(report.terminal.stdinIsTTY)} stdout=${String(report.terminal.stdoutIsTTY)}`,\n ],\n ],\n color,\n ),\n ...section(\n t(\"doctor.section.state\"),\n [\n [\n t(\"doctor.field.global\"),\n `${statusText(globalStatus, globalStatusLabel, color).padEnd(8)} ${report.runtime.globalState.path}`,\n ],\n [\n t(\"doctor.field.project\"),\n `${statusText(projectStatus, projectStatusLabel, color).padEnd(8)} ${report.runtime.projectState.path}`,\n ],\n ],\n color,\n ),\n \"\",\n t(\"doctor.line.version\", { version: report.version }),\n t(\"doctor.line.globalState\", {\n path: report.runtime.globalState.path,\n status: globalStatusLabel,\n }),\n t(\"doctor.line.projectState\", {\n path: report.runtime.projectState.path,\n status: projectStatusLabel,\n }),\n ...(report.models === undefined\n ? []\n : [t(\"doctor.line.models\", { count: String(report.models.installed) })]),\n ].join(\"\\n\");\n}\n","import { z } from \"zod\";\n\nexport const InitServiceOptionsSchema = z\n .object({\n dryRun: z.boolean(),\n projectRoot: z.string().min(1),\n })\n .strict();\n\nexport type ProjectInitStatus = \"already-initialized\" | \"initialized\" | \"planned\";\n\nexport type ProjectInitFile = {\n content: unknown;\n path: string;\n};\n\nexport type ProjectInitResult = {\n status: ProjectInitStatus;\n version: string;\n project: {\n root: string;\n };\n planned: string[];\n created: string[];\n skipped: string[];\n};\n\nexport const ProjectInitResultSchema = z.object({\n status: z.enum([\"already-initialized\", \"initialized\", \"planned\"]),\n version: z.string().min(1),\n project: z.object({\n root: z.string().min(1),\n }),\n planned: z.array(z.string()),\n created: z.array(z.string()),\n skipped: z.array(z.string()),\n});\n\nexport type InitServiceOptions = z.infer<typeof InitServiceOptionsSchema>;\n","import {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type InitServiceOptions,\n InitServiceOptionsSchema,\n type ProjectInitFile,\n type ProjectInitResult,\n ProjectInitResultSchema,\n} from \"./init.entities\";\nimport type { InitRepositoryPort } from \"./init.repository\";\n\ntype InitServiceDependencies = {\n appVersion: string;\n repository: InitRepositoryPort;\n};\n\nconst projectFiles = [\".agent-devkit/config.json\", \".agent-devkit/agent-devkit.lock\"];\n\nexport const initCapabilityConfig = defineCapabilityConfig({\n id: \"project.init\",\n moduleId: \"project\",\n name: \"Init\",\n description: \"Initialize Agent DevKit project-local state files.\",\n kind: \"deterministic\",\n risk: \"writes-project-state\",\n} as const);\n\nexport class InitService\n extends BaseCapabilityService<typeof initCapabilityConfig, InitServiceDependencies>\n implements CapabilityExecution<InitServiceOptions, ProjectInitResult>\n{\n readonly inputSchema = InitServiceOptionsSchema;\n readonly outputSchema = ProjectInitResultSchema;\n readonly #appVersion: string;\n readonly #repository: InitRepositoryPort;\n\n constructor(dependencies: InitServiceDependencies) {\n super(initCapabilityConfig, dependencies);\n this.#appVersion = dependencies.appVersion;\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: InitServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, ProjectInitResult>> {\n if (options.dryRun) {\n return Result.ok({\n status: \"planned\",\n version: this.#appVersion,\n project: {\n root: options.projectRoot,\n },\n planned: projectFiles,\n created: [],\n skipped: [],\n });\n }\n\n const skipped = await this.#repository.existingFiles(options.projectRoot, projectFiles);\n\n if (skipped.isErr()) {\n return Result.fail(skipped.unwrapError());\n }\n\n const skippedFiles = skipped.unwrap();\n const filesToCreate = this.#files().filter((file) => !skippedFiles.includes(file.path));\n\n if (filesToCreate.length > 0) {\n const write = await this.#repository.writeFiles(options.projectRoot, filesToCreate);\n\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n }\n\n return Result.ok({\n status: filesToCreate.length > 0 ? \"initialized\" : \"already-initialized\",\n version: this.#appVersion,\n project: {\n root: options.projectRoot,\n },\n planned: projectFiles,\n created: filesToCreate.map((file) => file.path),\n skipped: skippedFiles,\n });\n }\n\n #files(): ProjectInitFile[] {\n return [\n {\n path: \".agent-devkit/config.json\",\n content: {\n schema: \"agent-devkit.project-config/v1\",\n version: this.#appVersion,\n },\n },\n {\n path: \".agent-devkit/agent-devkit.lock\",\n content: {\n schema: \"agent-devkit.project-lock/v1\",\n version: this.#appVersion,\n },\n },\n ];\n }\n\n invoke(options: InitServiceOptions): Promise<Result<AgentDevKitErrorCode, ProjectInitResult>> {\n return this.execute(options);\n }\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { ProjectInitResult } from \"./init.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatInitText(result: ProjectInitResult, translator?: Translator): string {\n const activeTranslator = translator ?? defaultTranslator;\n const t = (key: string) => activeTranslator.t(key);\n const rows = [\n t(\"init.title\"),\n t(\"init.command\"),\n \"\",\n `[${result.status}] ${t(\"init.projectState\")}`,\n ` ${t(\"init.field.root\").padEnd(7)} ${result.project.root}`,\n ];\n\n if (result.planned.length > 0) {\n rows.push(` ${t(\"init.section.planned\")}`);\n rows.push(...result.planned.map((file) => ` ${file}`));\n }\n\n if (result.created.length > 0) {\n rows.push(` ${t(\"init.section.created\")}`);\n rows.push(...result.created.map((file) => ` ${file}`));\n }\n\n if (result.skipped.length > 0) {\n rows.push(` ${t(\"init.section.skipped\")}`);\n rows.push(...result.skipped.map((file) => ` ${file}`));\n }\n\n return rows.join(\"\\n\");\n}\n","import { join } from \"node:path\";\nimport {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ResetResult,\n ResetResultSchema,\n type ResetServiceOptions,\n ResetServiceOptionsSchema,\n} from \"./reset.entities\";\nimport type { ResetRepositoryPort } from \"./reset.repository\";\n\ntype ResetServiceDependencies = {\n repository: ResetRepositoryPort;\n};\n\nexport const resetCapabilityConfig = defineCapabilityConfig({\n id: \"project.reset\",\n moduleId: \"project\",\n name: \"Reset\",\n description: \"Remove Agent DevKit state from project or global scope after confirmation.\",\n kind: \"deterministic\",\n risk: \"destructive\",\n} as const);\n\nexport class ResetService\n extends BaseCapabilityService<typeof resetCapabilityConfig, ResetServiceDependencies>\n implements CapabilityExecution<ResetServiceOptions, ResetResult>\n{\n readonly inputSchema = ResetServiceOptionsSchema;\n readonly outputSchema = ResetResultSchema;\n readonly #repository: ResetRepositoryPort;\n\n constructor(dependencies: ResetServiceDependencies) {\n super(resetCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(options: ResetServiceOptions): Promise<Result<AgentDevKitErrorCode, ResetResult>> {\n const shouldPlan = options.dryRun || options.confirmed !== true;\n const path =\n options.scope === \"global\"\n ? join(options.homeDirectory, \".agent-devkit\")\n : join(options.projectRoot, \".agent-devkit\");\n\n const exists = await this.#repository.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n return Result.ok({\n scope: options.scope,\n status: \"missing\",\n path,\n removed: false,\n });\n }\n\n if (shouldPlan) {\n return Result.ok({\n scope: options.scope,\n status: \"planned\",\n path,\n removed: false,\n });\n }\n\n const remove = await this.#repository.remove(path);\n\n if (remove.isErr()) {\n return Result.fail(remove.unwrapError());\n }\n\n return Result.ok({\n scope: options.scope,\n status: \"reset\",\n path,\n removed: true,\n });\n }\n\n invoke(options: ResetServiceOptions): Promise<Result<AgentDevKitErrorCode, ResetResult>> {\n return this.execute(options);\n }\n}\n","import { z } from \"zod\";\n\nexport type ResetScope = \"global\" | \"project\";\nexport type ResetStatus = \"missing\" | \"planned\" | \"reset\";\n\nexport const ResetServiceOptionsSchema = z\n .object({\n confirmed: z.boolean().optional(),\n dryRun: z.boolean(),\n homeDirectory: z.string().min(1),\n projectRoot: z.string().min(1),\n scope: z.enum([\"global\", \"project\"]),\n })\n .strict();\n\nexport type ResetResult = {\n scope: ResetScope;\n status: ResetStatus;\n path: string;\n removed: boolean;\n};\n\nexport const ResetResultSchema = z.object({\n scope: z.enum([\"global\", \"project\"]),\n status: z.enum([\"missing\", \"planned\", \"reset\"]),\n path: z.string().min(1),\n removed: z.boolean(),\n});\n\nexport type ResetServiceOptions = z.infer<typeof ResetServiceOptionsSchema>;\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { ResetResult } from \"./reset.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatResetText(result: ResetResult, translator?: Translator): string {\n const activeTranslator = translator ?? defaultTranslator;\n const t = (key: string, values?: Record<string, string>) => activeTranslator.t(key, values);\n const scope = t(`reset.scope.${result.scope}`);\n\n return [\n t(\"reset.title\"),\n t(\"reset.command\"),\n \"\",\n `[${result.status}] ${t(\"reset.state\", { scope })}`,\n ` ${t(\"reset.field.path\").padEnd(7)} ${result.path}`,\n ` ${t(\"reset.field.removed\").padEnd(7)} ${String(result.removed)}`,\n ].join(\"\\n\");\n}\n","import { access, readdir } from \"node:fs/promises\";\nimport { homedir, platform } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\n\nexport type DoctorInstalledModels = {\n directory: string;\n ids: string[];\n};\n\nexport interface DoctorRepositoryPort extends CapabilityRepositoryPort {\n cwd(): Result<AgentDevKitErrorCode, string>;\n exists(path: string): Promise<Result<AgentDevKitErrorCode, boolean>>;\n homeDirectory(): Result<AgentDevKitErrorCode, string>;\n installedModels?(\n homeDirectory: string,\n ): Promise<Result<AgentDevKitErrorCode, DoctorInstalledModels>>;\n nodeVersion(): Result<AgentDevKitErrorCode, string>;\n platform(): Result<AgentDevKitErrorCode, string>;\n stdinIsTTY(): Result<AgentDevKitErrorCode, boolean>;\n stdoutIsTTY(): Result<AgentDevKitErrorCode, boolean>;\n}\n\nexport class DoctorRepository implements DoctorRepositoryPort {\n readonly repositoryId = \"project.doctor.repository\";\n\n cwd(): Result<AgentDevKitErrorCode, string> {\n return Result.ok(process.cwd());\n }\n\n async exists(path: string): Promise<Result<AgentDevKitErrorCode, boolean>> {\n try {\n await access(path);\n return Result.ok(true);\n } catch {\n return Result.ok(false);\n }\n }\n\n homeDirectory(): Result<AgentDevKitErrorCode, string> {\n return Result.ok(homedir());\n }\n\n async installedModels(\n homeDirectory: string,\n ): Promise<Result<AgentDevKitErrorCode, DoctorInstalledModels>> {\n const directory = join(homeDirectory, \".agent-devkit\", \"models\");\n\n try {\n const files = await readdir(directory);\n return Result.ok({\n directory,\n ids: files\n .filter((file) => file.endsWith(\".gguf\"))\n .map((file) => basename(file, \".gguf\"))\n .sort(),\n });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return Result.ok({ directory, ids: [] });\n }\n\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n nodeVersion(): Result<AgentDevKitErrorCode, string> {\n return Result.ok(process.version);\n }\n\n platform(): Result<AgentDevKitErrorCode, string> {\n return Result.ok(platform());\n }\n\n stdinIsTTY(): Result<AgentDevKitErrorCode, boolean> {\n return Result.ok(process.stdin.isTTY === true);\n }\n\n stdoutIsTTY(): Result<AgentDevKitErrorCode, boolean> {\n return Result.ok(process.stdout.isTTY === true);\n }\n}\n","import { access, mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type { ProjectInitFile } from \"./init.entities\";\n\nexport interface InitRepositoryPort extends CapabilityRepositoryPort {\n existingFiles(\n projectRoot: string,\n files: string[],\n ): Promise<Result<AgentDevKitErrorCode, string[]>>;\n writeFiles(\n projectRoot: string,\n files: ProjectInitFile[],\n ): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nexport class InitRepository implements InitRepositoryPort {\n readonly repositoryId = \"project.init.repository\";\n\n async existingFiles(\n projectRoot: string,\n files: string[],\n ): Promise<Result<AgentDevKitErrorCode, string[]>> {\n try {\n const checks = await Promise.all(\n files.map(async (file) => {\n try {\n await access(join(projectRoot, file));\n return file;\n } catch {\n return undefined;\n }\n }),\n );\n\n return Result.ok(checks.filter((file): file is string => file !== undefined));\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async writeFiles(\n projectRoot: string,\n files: ProjectInitFile[],\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n try {\n for (const file of files) {\n const target = join(projectRoot, file.path);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, `${JSON.stringify(file.content, null, 2)}\\n`, { flag: \"wx\" });\n }\n\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n}\n","import { access, rm } from \"node:fs/promises\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\n\nexport interface ResetRepositoryPort extends CapabilityRepositoryPort {\n exists(path: string): Promise<Result<AgentDevKitErrorCode, boolean>>;\n remove(path: string): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nexport class ResetRepository implements ResetRepositoryPort {\n readonly repositoryId = \"project.reset.repository\";\n\n async exists(path: string): Promise<Result<AgentDevKitErrorCode, boolean>> {\n try {\n await access(path);\n return Result.ok(true);\n } catch {\n return Result.ok(false);\n }\n }\n\n async remove(path: string): Promise<Result<AgentDevKitErrorCode, void>> {\n try {\n await rm(path, { force: true, recursive: true });\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.StateResetFailed);\n }\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { doctorCapabilityConfig } from \"./capabilities/doctor/doctor.service\";\nimport { initCapabilityConfig } from \"./capabilities/init/init.service\";\nimport { resetCapabilityConfig } from \"./capabilities/reset/reset.service\";\n\nexport const projectModuleConfig = defineModuleConfig({\n id: \"project\",\n name: \"Project\",\n description: \"Project-local Agent DevKit state, diagnostics and maintenance.\",\n capabilities: [doctorCapabilityConfig.id, initCapabilityConfig.id, resetCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/project/project.surface.test.ts\",\n \"src/modules/project/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n DoctorRepository,\n type DoctorRepositoryPort,\n} from \"./capabilities/doctor/doctor.repository\";\nimport { DoctorService } from \"./capabilities/doctor/doctor.service\";\nimport { InitRepository, type InitRepositoryPort } from \"./capabilities/init/init.repository\";\nimport { InitService } from \"./capabilities/init/init.service\";\nimport { ResetRepository, type ResetRepositoryPort } from \"./capabilities/reset/reset.repository\";\nimport { ResetService } from \"./capabilities/reset/reset.service\";\nimport { projectModuleConfig } from \"./project.config\";\n\nexport type ProjectModuleBindOptions = {\n appVersion: string;\n};\n\nexport type ProjectModuleCapabilities = {\n doctor: DoctorService;\n init: InitService;\n reset: ResetService;\n};\n\nexport type ProjectModuleBinding = ModuleBinding<\n typeof projectModuleConfig,\n ProjectModuleCapabilities\n>;\n\ntype ProjectModuleBinderDependencies = {\n doctorRepository: () => DoctorRepositoryPort;\n initRepository: () => InitRepositoryPort;\n resetRepository: () => ResetRepositoryPort;\n};\n\nconst defaultDependencies: ProjectModuleBinderDependencies = {\n doctorRepository: () => new DoctorRepository(),\n initRepository: () => new InitRepository(),\n resetRepository: () => new ResetRepository(),\n};\n\nexport class ProjectModuleBinder extends ModuleBinder<\n ProjectModuleBindOptions,\n typeof projectModuleConfig,\n ProjectModuleCapabilities\n> {\n readonly #dependencies: ProjectModuleBinderDependencies;\n\n constructor(dependencies: ProjectModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: ProjectModuleBindOptions,\n ): Result<AgentDevKitErrorCode, ProjectModuleBinding> {\n return defineModuleBinding({\n config: projectModuleConfig,\n capabilities: {\n doctor: new DoctorService({\n appVersion: options.appVersion,\n repository: this.#dependencies.doctorRepository(),\n }),\n init: new InitService({\n appVersion: options.appVersion,\n repository: this.#dependencies.initRepository(),\n }),\n reset: new ResetService({\n repository: this.#dependencies.resetRepository(),\n }),\n },\n });\n }\n}\n\nexport function createProjectModuleBindings(\n options: ProjectModuleBindOptions,\n): Result<AgentDevKitErrorCode, ProjectModuleBinding> {\n return new ProjectModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport { Result as ResultValue } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { doctorCapabilityConfig } from \"./capabilities/doctor/doctor.service\";\nimport { initCapabilityConfig } from \"./capabilities/init/init.service\";\nimport { resetCapabilityConfig } from \"./capabilities/reset/reset.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createProjectSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"project\", moduleDirectory));\n\n return {\n moduleId: \"project\",\n capabilities: async () =>\n ResultValue.ok(\n surfaceCapabilitiesFromConfigs([\n doctorCapabilityConfig,\n initCapabilityConfig,\n resetCapabilityConfig,\n ]),\n ),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n\nexport type ProjectSurfaceResult<T> = Result<AgentDevKitErrorCode, T>;\n","import type { CapabilityConfig } from \"../bases/capability\";\nimport type { SurfaceCapability } from \"../bases/surface\";\n\nexport function surfaceCapabilitiesFromConfigs(\n configs: readonly CapabilityConfig[],\n): SurfaceCapability[] {\n return configs.map((config) => ({\n id: config.id,\n kind: config.kind,\n risk: config.risk,\n summary: config.description,\n title: config.name,\n }));\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\nimport {\n type SurfaceKnowledge,\n SurfaceKnowledgeSchema,\n type SurfaceLoop,\n SurfaceLoopSchema,\n type SurfacePrompt,\n type SurfacePromptInput,\n SurfacePromptSchema,\n type SurfaceSkill,\n SurfaceSkillSchema,\n} from \"../bases/surface\";\n\nexport class SurfaceLoader {\n readonly #surfaceDirectory: string;\n\n constructor(surfaceDirectory: string) {\n this.#surfaceDirectory = surfaceDirectory;\n }\n\n async knowledge(): Promise<Result<AgentDevKitErrorCode, SurfaceKnowledge>> {\n const payload = await this.#readJson(\"knowledge.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = SurfaceKnowledgeSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async loop(): Promise<Result<AgentDevKitErrorCode, SurfaceLoop>> {\n const payload = await this.#readJson(\"loop.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = SurfaceLoopSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async prompt(\n input: SurfacePromptInput = {},\n ): Promise<Result<AgentDevKitErrorCode, SurfacePrompt>> {\n const payload = await this.#readJson(\"prompt.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = SurfacePromptSchema.safeParse(payload.unwrap());\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok({\n ...parsed.data,\n templates: parsed.data.templates\n .filter(\n (template) => input.capabilityId === undefined || template.id === input.capabilityId,\n )\n .map((template) => ({\n ...template,\n template: this.#renderTemplate(template.template, input.variables ?? {}),\n })),\n });\n }\n\n async skill(): Promise<Result<AgentDevKitErrorCode, SurfaceSkill>> {\n const payload = await this.#readJson(\"skill.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = SurfaceSkillSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #readJson(fileName: string): Promise<Result<AgentDevKitErrorCode, unknown>> {\n try {\n return Result.ok(JSON.parse(await readFile(join(this.#surfaceDirectory, fileName), \"utf8\")));\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n #renderTemplate(template: string, variables: Record<string, string>): string {\n return Object.entries(variables).reduce(\n (current, [key, value]) => current.replaceAll(`{{${key}}}`, value),\n template,\n );\n }\n}\n\nexport function resolveModuleSurfaceDirectory(moduleId: string, moduleDirectory: string): string {\n const localSurfaceDirectory = join(moduleDirectory, \"surface\");\n const candidates = [\n localSurfaceDirectory,\n resolve(moduleDirectory, \"../src/modules\", moduleId, \"surface\"),\n resolve(process.cwd(), \"src/modules\", moduleId, \"surface\"),\n ];\n\n return candidates.find((candidate) => existsSync(candidate)) ?? localSurfaceDirectory;\n}\n","import { z } from \"zod\";\nimport type { AgentDevKitErrorCode } from \"./errors\";\nimport type { Result } from \"./result\";\n\nexport const SurfaceCapabilitySchema = z.object({\n id: z.string().min(1),\n kind: z.enum([\"brain-assisted\", \"composite\", \"deterministic\", \"external\"]),\n risk: z.enum([\n \"destructive\",\n \"external-write\",\n \"read-only\",\n \"writes-global-state\",\n \"writes-project-state\",\n ]),\n summary: z.string().min(1),\n title: z.string().min(1),\n});\n\nexport const SurfaceSkillSchema = z.object({\n moduleId: z.string().min(1),\n purpose: z.string().min(1),\n whenNotToUse: z.array(z.string().min(1)).default([]),\n whenToUse: z.array(z.string().min(1)).min(1),\n});\n\nexport const SurfaceKnowledgeSchema = z.object({\n facts: z.array(z.string().min(1)).default([]),\n moduleId: z.string().min(1),\n summary: z.string().min(1),\n});\n\nexport const SurfacePromptSchema = z.object({\n moduleId: z.string().min(1),\n templates: z\n .array(\n z.object({\n id: z.string().min(1),\n template: z.string().min(1),\n variables: z.array(z.string().min(1)).default([]),\n }),\n )\n .min(1),\n});\n\nexport const SurfaceLoopSchema = z.object({\n allowedActions: z.array(z.string().min(1)).default([]),\n approvalRequired: z.boolean(),\n forbiddenActions: z.array(z.string().min(1)).default([]),\n mode: z.string().min(1),\n moduleId: z.string().min(1),\n});\n\nexport const SurfaceCapabilitiesSchema = z.object({\n capabilities: z.array(SurfaceCapabilitySchema).min(1),\n moduleId: z.string().min(1),\n});\n\nexport type SurfaceCapability = z.infer<typeof SurfaceCapabilitySchema>;\nexport type SurfaceSkill = z.infer<typeof SurfaceSkillSchema>;\nexport type SurfaceKnowledge = z.infer<typeof SurfaceKnowledgeSchema>;\nexport type SurfacePrompt = z.infer<typeof SurfacePromptSchema>;\nexport type SurfaceLoop = z.infer<typeof SurfaceLoopSchema>;\n\nexport type SurfacePromptInput = {\n capabilityId?: string;\n variables?: Record<string, string>;\n};\n\nexport interface IModuleSurface {\n moduleId: string;\n capabilities(): Promise<Result<AgentDevKitErrorCode, SurfaceCapability[]>>;\n knowledge(): Promise<Result<AgentDevKitErrorCode, SurfaceKnowledge>>;\n loop(): Promise<Result<AgentDevKitErrorCode, SurfaceLoop>>;\n prompt(input?: SurfacePromptInput): Promise<Result<AgentDevKitErrorCode, SurfacePrompt>>;\n skill(): Promise<Result<AgentDevKitErrorCode, SurfaceSkill>>;\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n createProjectModuleBindings,\n formatDoctorText,\n} from \"../../../modules/project/project.index\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterDoctorCommandOptions = {\n appVersion: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nexport function registerDoctorCommand(\n program: Command,\n options: RegisterDoctorCommandOptions,\n): void {\n const doctorCommand = program\n .command(\"doctor\")\n .description(options.translator.t(\"cli.doctor.description\"))\n .option(\"--json\", options.translator.t(\"cli.doctor.option.json\"));\n\n doctorCommand.action(\n options.usageLogging.track(\n {\n area: \"project\",\n command: \"doctor\",\n createStateIfMissing: false,\n options: () => doctorCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n const bindings = createProjectModuleBindings({\n appVersion: options.appVersion,\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.doctor.execute();\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const report = result.unwrap();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n\n console.log(\n formatDoctorText(report, {\n color: report.terminal.stdoutIsTTY && !process.env.NO_COLOR,\n translator: options.translator,\n }),\n );\n },\n ),\n );\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n createProjectModuleBindings,\n formatInitText,\n} from \"../../../modules/project/project.index\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterInitCommandOptions = {\n appVersion: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nexport function registerInitCommand(program: Command, options: RegisterInitCommandOptions): void {\n const initCommand = program\n .command(\"init\")\n .description(options.translator.t(\"cli.init.description\"))\n .option(\"--dry-run\", options.translator.t(\"cli.init.option.dryRun\"))\n .option(\"--json\", options.translator.t(\"cli.init.option.json\"));\n\n initCommand.action(\n options.usageLogging.track(\n {\n area: \"project\",\n command: \"init\",\n options: () => initCommand.opts(),\n },\n async (commandOptions: { dryRun?: boolean; json?: boolean }) => {\n const bindings = createProjectModuleBindings({\n appVersion: options.appVersion,\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.init.execute({\n dryRun: commandOptions.dryRun === true,\n projectRoot: process.cwd(),\n });\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const initResult = result.unwrap();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(initResult, null, 2));\n return;\n }\n\n console.log(formatInitText(initResult, options.translator));\n },\n ),\n );\n}\n","import type {\n DependencyCheck,\n DependencyMetadata,\n DependencyOperationResult,\n DependencyPlan,\n DependencyProvider,\n} from \"../../../../../infra/bases/dependency\";\nimport type { AgentDevKitErrorCode } from \"../../../../../infra/bases/errors\";\nimport { Result } from \"../../../../../infra/bases/result\";\n\nconst minimumMajorVersion = 20;\n\nfunction nodeMajorVersion(): number {\n return Number.parseInt(process.versions.node.split(\".\")[0] ?? \"0\", 10);\n}\n\nfunction unsupportedPlan(id: string, action: string): DependencyPlan {\n return {\n commands: [],\n id,\n message: `${action} is not supported for Node.js by Agent DevKit yet.`,\n requiresApproval: false,\n status: \"unsupported\",\n };\n}\n\nfunction unsupportedResult(id: string, action: string): DependencyOperationResult {\n return {\n id,\n message: `${action} is not supported for Node.js by Agent DevKit yet.`,\n status: \"unsupported\",\n };\n}\n\nexport class NodeDependencyProvider implements DependencyProvider {\n readonly #id = \"node\";\n\n metadata(): DependencyMetadata {\n return {\n category: \"runtime\",\n description: \"Node.js runtime used by Agent DevKit.\",\n id: this.#id,\n name: \"Node.js\",\n risk: \"read-only\",\n };\n }\n\n async checkEnvironment(): Promise<Result<AgentDevKitErrorCode, DependencyCheck>> {\n return Result.ok({\n details: {\n arch: process.arch,\n platform: process.platform,\n },\n id: this.#id,\n message: `Running on ${process.platform}/${process.arch}.`,\n status: \"ok\",\n });\n }\n\n async checkInstalled(): Promise<Result<AgentDevKitErrorCode, DependencyCheck>> {\n return Result.ok({\n details: {\n execPath: process.execPath,\n version: process.version,\n },\n id: this.#id,\n message: `Node.js ${process.version} is available.`,\n status: \"installed\",\n });\n }\n\n async checkCompatibility(): Promise<Result<AgentDevKitErrorCode, DependencyCheck>> {\n const compatible = nodeMajorVersion() >= minimumMajorVersion;\n\n return Result.ok({\n details: {\n current: process.version,\n required: `>=${minimumMajorVersion}`,\n },\n id: this.#id,\n message: compatible\n ? `Node.js ${process.version} is compatible.`\n : `Node.js ${process.version} is below the required major version ${minimumMajorVersion}.`,\n status: compatible ? \"compatible\" : \"incompatible\",\n });\n }\n\n async verify(): Promise<Result<AgentDevKitErrorCode, DependencyCheck>> {\n const compatibility = await this.checkCompatibility();\n\n if (compatibility.isErr()) {\n return compatibility;\n }\n\n const compatible = compatibility.unwrap();\n\n return Result.ok({\n details: {\n execPath: process.execPath,\n platform: process.platform,\n required: `>=${minimumMajorVersion}`,\n version: process.version,\n },\n id: this.#id,\n message:\n compatible.status === \"compatible\" ? \"Node.js runtime is ready.\" : compatible.message,\n status: compatible.status === \"compatible\" ? \"ok\" : \"incompatible\",\n });\n }\n\n async planInstall(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok(unsupportedPlan(this.#id, \"Install\"));\n }\n\n async install(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok(unsupportedResult(this.#id, \"Install\"));\n }\n\n async planConfigure(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok({\n commands: [],\n id: this.#id,\n message: \"Node.js does not require Agent DevKit credential configuration.\",\n requiresApproval: false,\n status: \"planned\",\n });\n }\n\n async configure(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok({\n id: this.#id,\n message: \"Node.js does not require Agent DevKit credential configuration.\",\n status: \"configured\",\n });\n }\n\n async planUpgrade(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok(unsupportedPlan(this.#id, \"Upgrade\"));\n }\n\n async upgrade(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok(unsupportedResult(this.#id, \"Upgrade\"));\n }\n\n async planDowngrade(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok(unsupportedPlan(this.#id, \"Downgrade\"));\n }\n\n async downgrade(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok(unsupportedResult(this.#id, \"Downgrade\"));\n }\n\n async planUninstall(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok(unsupportedPlan(this.#id, \"Uninstall\"));\n }\n\n async uninstall(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok(unsupportedResult(this.#id, \"Uninstall\"));\n }\n}\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type {\n DependencyCheck,\n DependencyMetadata,\n DependencyOperationResult,\n DependencyPlan,\n DependencyProvider,\n DependencyProviderOptions,\n} from \"../../../../infra/bases/dependency\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { NodeDependencyProvider } from \"./providers/node.provider\";\n\nexport interface DependenciesRepositoryPort extends CapabilityRepositoryPort {\n check(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n checkCompatibility(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n checkEnvironment(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n checkInstalled(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n listProviders(): DependencyMetadata[];\n operation(\n dependency: string,\n action: \"configure\" | \"downgrade\" | \"install\" | \"uninstall\" | \"upgrade\",\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>>;\n plan(\n dependency: string,\n action:\n | \"plan-configure\"\n | \"plan-downgrade\"\n | \"plan-install\"\n | \"plan-uninstall\"\n | \"plan-upgrade\",\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyPlan>>;\n verify(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n}\n\nexport type DependenciesRepositoryOptions = {\n providers?: DependencyProvider[];\n};\n\nconst defaultProviders = [new NodeDependencyProvider()];\n\nasync function collectChecks(\n providers: DependencyProvider[],\n mapper: (provider: DependencyProvider) => Promise<Result<AgentDevKitErrorCode, DependencyCheck>>,\n): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n const checks: DependencyCheck[] = [];\n\n for (const provider of providers) {\n const result = await mapper(provider);\n\n if (result.isErr()) {\n return Result.fail(result.unwrapError());\n }\n\n checks.push(result.unwrap());\n }\n\n return Result.ok(checks);\n}\n\nexport class DependenciesRepository implements DependenciesRepositoryPort {\n readonly repositoryId = \"environment.dependencies.repository\";\n readonly #providers: Map<string, DependencyProvider>;\n\n constructor(options: DependenciesRepositoryOptions = {}) {\n this.#providers = new Map(\n (options.providers ?? defaultProviders).map((provider) => [provider.metadata().id, provider]),\n );\n }\n\n listProviders(): DependencyMetadata[] {\n return [...this.#providers.values()]\n .map((provider) => provider.metadata())\n .sort((left, right) => left.id.localeCompare(right.id));\n }\n\n check(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.verify(options));\n }\n\n checkCompatibility(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.checkCompatibility(options));\n }\n\n checkEnvironment(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.checkEnvironment(options));\n }\n\n checkInstalled(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.checkInstalled(options));\n }\n\n operation(\n dependency: string,\n action: \"configure\" | \"downgrade\" | \"install\" | \"uninstall\" | \"upgrade\",\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n const provider = this.#provider(dependency);\n\n if (provider.isErr()) {\n return Promise.resolve(Result.fail(provider.unwrapError()));\n }\n\n switch (action) {\n case \"configure\":\n return provider.unwrap().configure(options);\n case \"downgrade\":\n return provider.unwrap().downgrade(options);\n case \"install\":\n return provider.unwrap().install(options);\n case \"uninstall\":\n return provider.unwrap().uninstall(options);\n case \"upgrade\":\n return provider.unwrap().upgrade(options);\n }\n }\n\n plan(\n dependency: string,\n action:\n | \"plan-configure\"\n | \"plan-downgrade\"\n | \"plan-install\"\n | \"plan-uninstall\"\n | \"plan-upgrade\",\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n const provider = this.#provider(dependency);\n\n if (provider.isErr()) {\n return Promise.resolve(Result.fail(provider.unwrapError()));\n }\n\n switch (action) {\n case \"plan-configure\":\n return provider.unwrap().planConfigure(options);\n case \"plan-downgrade\":\n return provider.unwrap().planDowngrade(options);\n case \"plan-install\":\n return provider.unwrap().planInstall(options);\n case \"plan-uninstall\":\n return provider.unwrap().planUninstall(options);\n case \"plan-upgrade\":\n return provider.unwrap().planUpgrade(options);\n }\n }\n\n verify(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.verify(options));\n }\n\n #provider(id: string): Result<AgentDevKitErrorCode, DependencyProvider> {\n const provider = this.#providers.get(id);\n return provider === undefined ? Result.fail(ErrorCodes.InvalidInput) : Result.ok(provider);\n }\n\n #selectedProviders(\n dependency: string | undefined,\n ): Result<AgentDevKitErrorCode, DependencyProvider[]> {\n if (dependency === undefined) {\n return Result.ok([...this.#providers.values()]);\n }\n\n return this.#provider(dependency).map((provider) => [provider]);\n }\n\n async #runChecks(\n dependency: string | undefined,\n mapper: (\n provider: DependencyProvider,\n ) => Promise<Result<AgentDevKitErrorCode, DependencyCheck>>,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n const providers = this.#selectedProviders(dependency);\n\n if (providers.isErr()) {\n return Result.fail(providers.unwrapError());\n }\n\n return collectChecks(providers.unwrap(), mapper);\n }\n}\n","import { z } from \"zod\";\n\nexport const DependencyActionSchema = z.enum([\n \"check\",\n \"check-compatibility\",\n \"check-environment\",\n \"check-installed\",\n \"configure\",\n \"downgrade\",\n \"install\",\n \"list\",\n \"plan-configure\",\n \"plan-downgrade\",\n \"plan-install\",\n \"plan-uninstall\",\n \"plan-upgrade\",\n \"uninstall\",\n \"upgrade\",\n \"verify\",\n]);\n\nexport const DependencyStatusSchema = z.enum([\n \"compatible\",\n \"configured\",\n \"incompatible\",\n \"installed\",\n \"missing\",\n \"ok\",\n \"planned\",\n \"unsupported\",\n \"warning\",\n]);\n\nexport const DependencyRiskSchema = z.enum([\"read-only\", \"writes-external\", \"writes-global-state\"]);\n\nexport const DependenciesOptionsSchema = z\n .object({\n action: DependencyActionSchema,\n confirmed: z.boolean().optional(),\n dependency: z.string().min(1).optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n version: z.string().min(1).optional(),\n })\n .strict();\n\nexport type DependenciesOptions = z.infer<typeof DependenciesOptionsSchema>;\n\nexport const DependencyMetadataSchema = z.object({\n category: z.string().min(1),\n description: z.string().min(1),\n id: z.string().min(1),\n name: z.string().min(1),\n risk: DependencyRiskSchema,\n});\n\nexport type DependencyMetadataView = z.infer<typeof DependencyMetadataSchema>;\n\nexport const DependencyCheckSchema = z.object({\n details: z.record(z.string(), z.unknown()).optional(),\n id: z.string().min(1),\n message: z.string().min(1),\n status: DependencyStatusSchema,\n});\n\nexport const DependencyCommandPlanSchema = z.object({\n command: z.string().min(1),\n description: z.string().min(1),\n risk: DependencyRiskSchema,\n});\n\nexport const DependencyPlanSchema = z.object({\n commands: z.array(DependencyCommandPlanSchema),\n id: z.string().min(1),\n message: z.string().min(1),\n requiresApproval: z.boolean(),\n status: DependencyStatusSchema,\n});\n\nexport const DependencyOperationResultSchema = z.object({\n id: z.string().min(1),\n message: z.string().min(1),\n status: DependencyStatusSchema,\n});\n\nexport const DependenciesResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n dependencies: z.array(DependencyMetadataSchema),\n status: DependencyStatusSchema,\n }),\n z.object({\n action: z.enum([\n \"check\",\n \"check-compatibility\",\n \"check-environment\",\n \"check-installed\",\n \"verify\",\n ]),\n checks: z.array(DependencyCheckSchema),\n dependency: z.string().min(1).optional(),\n status: DependencyStatusSchema,\n }),\n z.object({\n action: z.enum([\n \"plan-configure\",\n \"plan-downgrade\",\n \"plan-install\",\n \"plan-uninstall\",\n \"plan-upgrade\",\n ]),\n dependency: z.string().min(1),\n plan: DependencyPlanSchema,\n status: DependencyStatusSchema,\n }),\n z.object({\n action: z.enum([\"configure\", \"downgrade\", \"install\", \"uninstall\", \"upgrade\"]),\n dependency: z.string().min(1),\n result: DependencyOperationResultSchema,\n status: DependencyStatusSchema,\n }),\n]);\n\nexport type DependenciesResult = z.infer<typeof DependenciesResultSchema>;\n","import { BaseCapabilityService, defineCapabilityConfig } from \"../../../../infra/bases/capability\";\nimport type { DependencyCheck } from \"../../../../infra/bases/dependency\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type DependenciesOptions,\n DependenciesOptionsSchema,\n type DependenciesResult,\n DependenciesResultSchema,\n} from \"./dependencies.entities\";\nimport type { DependenciesRepositoryPort } from \"./dependencies.repository\";\n\ntype DependenciesServiceDependencies = {\n repository: DependenciesRepositoryPort;\n};\n\nexport const dependenciesCapabilityConfig = defineCapabilityConfig({\n id: \"environment.dependencies\",\n moduleId: \"environment\",\n name: \"Environment Dependencies\",\n description: \"Inspect and plan lifecycle operations for external Agent DevKit dependencies.\",\n kind: \"deterministic\",\n risk: \"read-only\",\n} as const);\n\nfunction aggregateStatus(statuses: string[]): DependenciesResult[\"status\"] {\n if (statuses.includes(\"incompatible\")) {\n return \"incompatible\";\n }\n\n if (statuses.includes(\"missing\")) {\n return \"missing\";\n }\n\n if (statuses.includes(\"unsupported\")) {\n return \"unsupported\";\n }\n\n if (statuses.includes(\"warning\")) {\n return \"warning\";\n }\n\n return \"ok\";\n}\n\nfunction providerOptions(options: DependenciesOptions) {\n return {\n options: options.options,\n version: options.version,\n };\n}\n\nexport class DependenciesService extends BaseCapabilityService<\n typeof dependenciesCapabilityConfig,\n DependenciesServiceDependencies\n> {\n readonly inputSchema = DependenciesOptionsSchema;\n readonly outputSchema = DependenciesResultSchema;\n readonly #repository: DependenciesRepositoryPort;\n\n constructor(dependencies: DependenciesServiceDependencies) {\n super(dependenciesCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: DependenciesOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependenciesResult>> {\n if (options.action === \"list\") {\n return Result.ok({\n action: \"list\",\n dependencies: this.#repository.listProviders(),\n status: \"ok\",\n });\n }\n\n if (\n options.action === \"plan-configure\" ||\n options.action === \"plan-downgrade\" ||\n options.action === \"plan-install\" ||\n options.action === \"plan-uninstall\" ||\n options.action === \"plan-upgrade\"\n ) {\n if (options.dependency === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const plan = await this.#repository.plan(\n options.dependency,\n options.action,\n providerOptions(options),\n );\n\n return plan.isOk()\n ? Result.ok({\n action: options.action,\n dependency: options.dependency,\n plan: plan.unwrap(),\n status: plan.unwrap().status,\n })\n : Result.fail(plan.unwrapError());\n }\n\n if (\n options.action === \"configure\" ||\n options.action === \"downgrade\" ||\n options.action === \"install\" ||\n options.action === \"uninstall\" ||\n options.action === \"upgrade\"\n ) {\n if (options.dependency === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n if (options.confirmed !== true) {\n const planAction = `plan-${options.action}` as\n | \"plan-configure\"\n | \"plan-downgrade\"\n | \"plan-install\"\n | \"plan-uninstall\"\n | \"plan-upgrade\";\n const plan = await this.#repository.plan(\n options.dependency,\n planAction,\n providerOptions(options),\n );\n\n return plan.isOk()\n ? Result.ok({\n action: planAction,\n dependency: options.dependency,\n plan: plan.unwrap(),\n status: plan.unwrap().status,\n })\n : Result.fail(plan.unwrapError());\n }\n\n const operation = await this.#repository.operation(\n options.dependency,\n options.action,\n providerOptions(options),\n );\n\n return operation.isOk()\n ? Result.ok({\n action: options.action,\n dependency: options.dependency,\n result: operation.unwrap(),\n status: operation.unwrap().status,\n })\n : Result.fail(operation.unwrapError());\n }\n\n const checks = await this.#checks(options);\n\n return checks.isOk()\n ? Result.ok({\n action: options.action,\n checks: checks.unwrap(),\n dependency: options.dependency,\n status: aggregateStatus(checks.unwrap().map((check) => check.status)),\n })\n : Result.fail(checks.unwrapError());\n }\n\n invoke(options: DependenciesOptions): Promise<Result<AgentDevKitErrorCode, DependenciesResult>> {\n return this.execute(options);\n }\n\n #checks(options: DependenciesOptions): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n switch (options.action) {\n case \"check\":\n return this.#repository.check(options.dependency, providerOptions(options));\n case \"check-compatibility\":\n return this.#repository.checkCompatibility(options.dependency, providerOptions(options));\n case \"check-environment\":\n return this.#repository.checkEnvironment(options.dependency, providerOptions(options));\n case \"check-installed\":\n return this.#repository.checkInstalled(options.dependency, providerOptions(options));\n case \"verify\":\n return this.#repository.verify(options.dependency, providerOptions(options));\n default:\n return Promise.resolve(Result.fail(ErrorCodes.InvalidInput));\n }\n }\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { DependenciesResult } from \"./dependencies.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatDependenciesText(\n result: DependenciesResult,\n translator: Translator = defaultTranslator,\n): string {\n const rows = [\n translator.t(\"dependencies.title\"),\n translator.t(\"dependencies.command\"),\n \"\",\n `[${result.action}] ${result.status}`,\n ];\n\n if (result.action === \"list\") {\n rows.push(\"\", ` ${translator.t(\"dependencies.section.known\")}`);\n rows.push(\n ...result.dependencies.map(\n (dependency) => ` ${dependency.id.padEnd(12)} ${dependency.name}`,\n ),\n );\n return rows.join(\"\\n\");\n }\n\n if (\"checks\" in result) {\n rows.push(\"\", ` ${translator.t(\"dependencies.section.checks\")}`);\n rows.push(\n ...result.checks.map(\n (check) => ` ${check.id.padEnd(12)} ${check.status.padEnd(14)} ${check.message}`,\n ),\n );\n return rows.join(\"\\n\");\n }\n\n if (\"plan\" in result) {\n rows.push(\"\", ` ${translator.t(\"dependencies.section.plan\")}`, ` ${result.plan.message}`);\n rows.push(\n ...result.plan.commands.map((command) => ` ${command.risk.padEnd(18)} ${command.command}`),\n );\n return rows.join(\"\\n\");\n }\n\n rows.push(\"\", ` ${translator.t(\"dependencies.section.result\")}`, ` ${result.result.message}`);\n return rows.join(\"\\n\");\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { dependenciesCapabilityConfig } from \"./capabilities/dependencies/dependencies.service\";\n\nexport const environmentModuleConfig = defineModuleConfig({\n id: \"environment\",\n name: \"Environment\",\n description: \"External dependency discovery, planning and runtime environment checks.\",\n capabilities: [dependenciesCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/environment/environment.surface.test.ts\",\n \"src/modules/environment/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n DependenciesRepository,\n type DependenciesRepositoryPort,\n} from \"./capabilities/dependencies/dependencies.repository\";\nimport { DependenciesService } from \"./capabilities/dependencies/dependencies.service\";\nimport { environmentModuleConfig } from \"./environment.config\";\n\nexport type EnvironmentModuleBindOptions = Record<string, never>;\n\nexport type EnvironmentModuleCapabilities = {\n dependencies: DependenciesService;\n};\n\nexport type EnvironmentModuleBinding = ModuleBinding<\n typeof environmentModuleConfig,\n EnvironmentModuleCapabilities\n>;\n\ntype EnvironmentModuleBinderDependencies = {\n dependenciesRepository: () => DependenciesRepositoryPort;\n};\n\nconst defaultDependencies: EnvironmentModuleBinderDependencies = {\n dependenciesRepository: () => new DependenciesRepository(),\n};\n\nexport class EnvironmentModuleBinder extends ModuleBinder<\n EnvironmentModuleBindOptions,\n typeof environmentModuleConfig,\n EnvironmentModuleCapabilities\n> {\n readonly #dependencies: EnvironmentModuleBinderDependencies;\n\n constructor(dependencies: EnvironmentModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n _options: EnvironmentModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, EnvironmentModuleBinding> {\n return defineModuleBinding({\n config: environmentModuleConfig,\n capabilities: {\n dependencies: new DependenciesService({\n repository: this.#dependencies.dependenciesRepository(),\n }),\n },\n });\n }\n}\n\nexport function createEnvironmentModuleBindings(\n options: EnvironmentModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, EnvironmentModuleBinding> {\n return new EnvironmentModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { dependenciesCapabilityConfig } from \"./capabilities/dependencies/dependencies.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createEnvironmentSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"environment\", moduleDirectory));\n\n return {\n moduleId: \"environment\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([dependenciesCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { homedir } from \"node:os\";\nimport type { ToolRuntime } from \"../../infra/bases/tool_runtime\";\nimport { createBrainDockProvider } from \"../../infra/brain/brain_dock\";\nimport { createCapabilityToolRuntime } from \"../../modules/capability_tool_runtime\";\n\nexport type CliToolRuntimeOptions = {\n currentVersion: string;\n packageName: string;\n};\n\nexport function createCliToolRuntime(options: CliToolRuntimeOptions): ToolRuntime {\n const homeDirectory = homedir();\n const runtime = createCapabilityToolRuntime({\n appVersion: options.currentVersion,\n context: { homeDirectory },\n conversation: {\n brainProvider: createBrainDockProvider({ stateDirectory: `${homeDirectory}/.agent-devkit` }),\n homeDirectory,\n },\n currentVersion: options.currentVersion,\n logs: { homeDirectory },\n packageName: options.packageName,\n secrets: { homeDirectory },\n user: { homeDirectory },\n });\n\n if (runtime.isErr()) {\n throw new Error(runtime.unwrapError());\n }\n\n return runtime.unwrap();\n}\n","import { createHash } from \"node:crypto\";\nimport { once } from \"node:events\";\nimport { createReadStream, createWriteStream } from \"node:fs\";\nimport { access, mkdir, readdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { type InstalledModel, InstalledModelSchema, type ModelCatalogEntry } from \"../bases/model\";\nimport { Result } from \"../bases/result\";\n\nexport type ModelDownloadProgress = {\n downloadedBytes: number;\n totalBytes: number;\n};\n\nexport type ModelStoreOptions = {\n clock?: () => Date;\n downloadTimeoutMs?: number;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nfunction errno(error: unknown): string | undefined {\n return typeof (error as NodeJS.ErrnoException).code === \"string\"\n ? (error as NodeJS.ErrnoException).code\n : undefined;\n}\n\nexport class ModelStore {\n readonly #clock: () => Date;\n readonly #directory: string;\n readonly #downloadTimeoutMs: number;\n\n constructor(options: ModelStoreOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#directory = join(options.stateDirectory ?? defaultStateDirectory(), \"models\");\n this.#downloadTimeoutMs = options.downloadTimeoutMs ?? 10 * 60 * 1000;\n }\n\n directory(): string {\n return this.#directory;\n }\n\n async status(id: string): Promise<Result<AgentDevKitErrorCode, InstalledModel | undefined>> {\n let raw: string;\n\n try {\n raw = await readFile(this.#metadataPath(id), \"utf8\");\n } catch (error) {\n return errno(error) === \"ENOENT\"\n ? Result.ok(undefined)\n : Result.fail(ErrorCodes.FileReadFailed);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return Result.ok(undefined);\n }\n\n const model = InstalledModelSchema.safeParse(parsed);\n\n if (!model.success) {\n return Result.ok(undefined);\n }\n\n try {\n await access(this.#modelPath(id));\n } catch {\n return Result.ok(undefined);\n }\n\n return Result.ok(model.data);\n }\n\n async list(): Promise<Result<AgentDevKitErrorCode, InstalledModel[]>> {\n const ids = await this.installedIds();\n\n if (ids.isErr()) {\n return Result.fail(ids.unwrapError());\n }\n\n const installed: InstalledModel[] = [];\n\n for (const id of ids.unwrap()) {\n const status = await this.status(id);\n const model = status.isOk() ? status.unwrap() : undefined;\n\n if (model !== undefined) {\n installed.push(model);\n }\n }\n\n return Result.ok(installed);\n }\n\n async installedIds(): Promise<Result<AgentDevKitErrorCode, string[]>> {\n let files: string[];\n\n try {\n files = await readdir(this.#directory);\n } catch (error) {\n return errno(error) === \"ENOENT\" ? Result.ok([]) : Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return Result.ok(\n files\n .filter((file) => file.endsWith(\".gguf\"))\n .map((file) => basename(file, \".gguf\"))\n .sort(),\n );\n }\n\n async install(\n entry: ModelCatalogEntry,\n options: { onProgress?: (progress: ModelDownloadProgress) => void } = {},\n ): Promise<Result<AgentDevKitErrorCode, InstalledModel>> {\n const target = this.#modelPath(entry.id);\n const temp = `${target}.part`;\n const hash = createHash(\"sha256\");\n const abortController = new AbortController();\n const timeout = setTimeout(() => abortController.abort(), this.#downloadTimeoutMs);\n\n try {\n await mkdir(this.#directory, { recursive: true, mode: 0o700 });\n\n const response = await fetch(entry.url, { signal: abortController.signal });\n\n if (!response.ok || response.body === null) {\n return Result.fail(ErrorCodes.NetworkRequestFailed);\n }\n\n const writeStream = createWriteStream(temp, { mode: 0o600 });\n const reader = response.body.getReader();\n let downloadedBytes = 0;\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n if (value === undefined) {\n continue;\n }\n\n hash.update(value);\n downloadedBytes += value.byteLength;\n options.onProgress?.({ downloadedBytes, totalBytes: entry.sizeBytes });\n\n if (!writeStream.write(value)) {\n await once(writeStream, \"drain\");\n }\n }\n\n await new Promise<void>((resolve, reject) => {\n writeStream.on(\"error\", reject);\n writeStream.end(() => resolve());\n });\n } finally {\n reader.releaseLock();\n }\n\n const digest = hash.digest(\"hex\");\n\n if (entry.sha256 !== undefined && digest.toLowerCase() !== entry.sha256.toLowerCase()) {\n await rm(temp, { force: true }).catch(() => undefined);\n return Result.fail(ErrorCodes.ModelVerificationFailed);\n }\n\n await rename(temp, target);\n\n const installed: InstalledModel = {\n id: entry.id,\n path: target,\n sizeBytes: downloadedBytes,\n sha256: digest,\n installedAt: this.#clock().toISOString(),\n };\n\n await writeFile(this.#metadataPath(entry.id), `${JSON.stringify(installed, null, 2)}\\n`, {\n mode: 0o600,\n });\n\n return Result.ok(installed);\n } catch (error) {\n await rm(temp, { force: true }).catch(() => undefined);\n return Result.fail(\n errno(error) === undefined ? ErrorCodes.NetworkRequestFailed : ErrorCodes.FileWriteFailed,\n );\n } finally {\n clearTimeout(timeout);\n }\n }\n\n async uninstall(id: string): Promise<Result<AgentDevKitErrorCode, { removed: boolean }>> {\n try {\n let removed = false;\n\n for (const path of [this.#modelPath(id), this.#metadataPath(id)]) {\n try {\n await rm(path);\n removed = true;\n } catch (error) {\n if (errno(error) !== \"ENOENT\") {\n throw error;\n }\n }\n }\n\n for (const role of [undefined, \"agent\", \"chat\"]) {\n const current = await this.#readDefaultFile(this.#defaultPath(role));\n\n if (current.isOk() && current.unwrap() === id) {\n await rm(this.#defaultPath(role), { force: true }).catch(() => undefined);\n }\n }\n\n return Result.ok({ removed });\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async verify(\n id: string,\n expectedSha256?: string,\n ): Promise<Result<AgentDevKitErrorCode, boolean>> {\n const status = await this.status(id);\n\n if (status.isErr()) {\n return Result.fail(status.unwrapError());\n }\n\n const installed = status.unwrap();\n\n if (installed === undefined) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n const expected = (expectedSha256 ?? installed.sha256)?.toLowerCase();\n\n if (expected === undefined) {\n return Result.ok(true);\n }\n\n try {\n const hash = createHash(\"sha256\");\n\n for await (const chunk of createReadStream(this.#modelPath(id))) {\n hash.update(chunk as Buffer);\n }\n\n return Result.ok(hash.digest(\"hex\").toLowerCase() === expected);\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async getDefault(role?: string): Promise<Result<AgentDevKitErrorCode, string | undefined>> {\n const primary = await this.#readDefaultFile(this.#defaultPath(role));\n\n if (primary.isErr() || primary.unwrap() !== undefined || role === undefined) {\n return primary;\n }\n\n return this.#readDefaultFile(this.#defaultPath());\n }\n\n async setDefault(id: string, role?: string): Promise<Result<AgentDevKitErrorCode, void>> {\n const status = await this.status(id);\n\n if (status.isErr()) {\n return Result.fail(status.unwrapError());\n }\n\n if (status.unwrap() === undefined) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n try {\n await mkdir(this.#directory, { recursive: true, mode: 0o700 });\n await writeFile(this.#defaultPath(role), `${id}\\n`, { mode: 0o600 });\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n #modelPath(id: string): string {\n return join(this.#directory, `${id}.gguf`);\n }\n\n #metadataPath(id: string): string {\n return join(this.#directory, `${id}.json`);\n }\n\n #defaultPath(role?: string): string {\n return join(this.#directory, role === undefined ? \"default\" : `default-${role}`);\n }\n\n async #readDefaultFile(path: string): Promise<Result<AgentDevKitErrorCode, string | undefined>> {\n try {\n const id = (await readFile(path, \"utf8\")).trim();\n return Result.ok(id.length > 0 ? id : undefined);\n } catch (error) {\n return errno(error) === \"ENOENT\"\n ? Result.ok(undefined)\n : Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n}\n","import { z } from \"zod\";\n\nconst sha256Pattern = /^[a-f0-9]{64}$/i;\n\nexport const ModelCatalogEntrySchema = z\n .object({\n id: z.string().min(1),\n name: z.string().min(1),\n family: z.string().min(1),\n parameters: z.string().min(1),\n quantization: z.string().min(1),\n format: z.literal(\"gguf\"),\n contextLength: z.number().int().positive(),\n sizeBytes: z.number().int().positive(),\n url: z.string().regex(/^https:\\/\\//),\n sha256: z.string().regex(sha256Pattern),\n license: z.string().min(1),\n recommended: z.boolean().default(false),\n })\n .strict();\n\nexport type ModelCatalogEntry = z.infer<typeof ModelCatalogEntrySchema>;\n\nexport const ModelCatalogSchema = z\n .object({\n schema: z.literal(\"agent-devkit.model-catalog/v1\"),\n models: z.array(ModelCatalogEntrySchema).min(1),\n })\n .strict();\n\nexport type ModelCatalog = z.infer<typeof ModelCatalogSchema>;\n\nexport const InstalledModelSchema = z\n .object({\n id: z.string().min(1),\n path: z.string().min(1),\n sizeBytes: z.number().int().nonnegative(),\n sha256: z.string().min(1).optional(),\n installedAt: z.string().min(1),\n })\n .strict();\n\nexport type InstalledModel = z.infer<typeof InstalledModelSchema>;\n","import type {\n BrainProviderPort,\n BrainRequest,\n BrainResponse,\n BrainStreamHandler,\n BrainStructuredResponse,\n} from \"../bases/brain\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { AgentPrompt } from \"../bases/prompt\";\nimport { Result } from \"../bases/result\";\nimport { ModelStore } from \"../models/model_store\";\n\n// Minimal structural view of the parts of `node-llama-cpp` we depend on. The\n// package is an optional native dependency resolved at runtime, so we describe\n// only the surface we use instead of importing its types.\ntype LlamaContextSequence = unknown;\n\ntype LlamaChatSession = {\n prompt(\n text: string,\n options?: {\n grammar?: unknown;\n maxTokens?: number;\n onTextChunk?: (chunk: string) => void;\n seed?: number;\n temperature?: number;\n topK?: number;\n topP?: number;\n },\n ): Promise<string>;\n};\n\ntype LlamaContext = { getSequence(): LlamaContextSequence };\ntype LlamaModel = { createContext(): Promise<LlamaContext> };\ntype Llama = {\n createGrammarForJsonSchema?(schema: Record<string, unknown>): Promise<unknown>;\n loadModel(options: { modelPath: string }): Promise<LlamaModel>;\n};\n\ntype NodeLlamaCpp = {\n getLlama(): Promise<Llama>;\n LlamaChatSession: new (options: {\n contextSequence: LlamaContextSequence;\n systemPrompt?: string;\n }) => LlamaChatSession;\n};\n\n// Widened to `string` so TypeScript does not try to resolve the optional\n// dependency at build time; it is loaded lazily at runtime.\nconst nodeLlamaModuleName: string = \"node-llama-cpp\";\n\nasync function loadNodeLlama(): Promise<Result<AgentDevKitErrorCode, NodeLlamaCpp>> {\n try {\n return Result.ok((await import(nodeLlamaModuleName)) as NodeLlamaCpp);\n } catch {\n return Result.fail(ErrorCodes.BrainProviderUnavailable);\n }\n}\n\nfunction systemPromptFrom(prompt: AgentPrompt): string {\n const { agent } = prompt;\n const lines = [\n `You are ${agent.name}.`,\n `Behavior: ${agent.behavior}. Tone: ${agent.tone}. Detail level: ${agent.detailLevel}.`,\n ];\n\n if (agent.traits.length > 0) {\n lines.push(`Traits: ${agent.traits.join(\", \")}.`);\n }\n\n const { project } = prompt.context;\n\n if (project !== undefined) {\n lines.push(\n `Project: ${project.name}${project.description === undefined ? \"\" : ` — ${project.description}`}.`,\n );\n }\n\n lines.push(`Reply in ${prompt.output.language}.`);\n\n const history = prompt.messages\n .filter((message) => message.role === \"user\" || message.role === \"assistant\")\n .slice(0, -1)\n .map((message) => `${message.role === \"user\" ? \"User\" : agent.name}: ${message.content}`);\n\n if (history.length > 0) {\n lines.push(\"\", \"Conversation so far:\", ...history);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction extractJson(text: string): unknown {\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n\n if (start === -1 || end === -1 || end <= start) {\n return undefined;\n }\n\n try {\n return JSON.parse(text.slice(start, end + 1));\n } catch {\n return undefined;\n }\n}\n\nexport type LocalLlamaBrainProviderOptions = {\n store?: ModelStore;\n stateDirectory?: string;\n};\n\nexport class LocalLlamaBrainProvider implements BrainProviderPort {\n readonly #store: ModelStore;\n readonly #models = new Map<string, LlamaModel>();\n #llama?: Llama;\n #nodeLlama?: NodeLlamaCpp;\n\n constructor(options: LocalLlamaBrainProviderOptions = {}) {\n this.#store = options.store ?? new ModelStore({ stateDirectory: options.stateDirectory });\n }\n\n generate(request: BrainRequest): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n return this.#run(request);\n }\n\n generateStream(\n request: BrainRequest,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n return this.#run(request, { onToken });\n }\n\n async generateStructured(\n request: BrainRequest,\n jsonSchema: Record<string, unknown>,\n ): Promise<Result<AgentDevKitErrorCode, BrainStructuredResponse>> {\n const generated = await this.#run(request, { jsonSchema });\n\n if (generated.isErr()) {\n return Result.fail(generated.unwrapError());\n }\n\n const raw = generated.unwrap().text;\n let json: unknown;\n\n try {\n json = JSON.parse(raw);\n } catch {\n json = extractJson(raw);\n }\n\n return Result.ok({ json, raw });\n }\n\n async #run(\n request: BrainRequest,\n options: { jsonSchema?: Record<string, unknown>; onToken?: BrainStreamHandler } = {},\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n const model = await this.#resolveModelPath(request.options.model, request.options.role);\n\n if (model.isErr()) {\n return Result.fail(model.unwrapError());\n }\n\n const nodeLlama = await this.#ensureNodeLlama();\n\n if (nodeLlama.isErr()) {\n return Result.fail(nodeLlama.unwrapError());\n }\n\n try {\n const llama = nodeLlama.unwrap();\n const loadedModel = await this.#loadModel(llama, model.unwrap().path);\n const context = await loadedModel.createContext();\n const session = new llama.LlamaChatSession({\n contextSequence: context.getSequence(),\n systemPrompt: systemPromptFrom(request.prompt),\n });\n\n const text = await session.prompt(request.prompt.task.userMessage, {\n grammar: await this.#grammarFor(options.jsonSchema),\n maxTokens: request.options.maxOutputTokens,\n onTextChunk: options.onToken,\n seed: request.options.seed,\n temperature: request.options.temperature,\n topK: request.options.topK,\n topP: request.options.topP,\n });\n\n const outputTokens = text.split(/\\s+/g).filter(Boolean).length;\n\n return Result.ok({\n finishReason: \"stop\",\n model: model.unwrap().id,\n provider: \"local\",\n schema: \"agent-devkit.brain-response/v1\",\n text,\n usage: { outputTokens },\n });\n } catch {\n return Result.fail(ErrorCodes.BrainProviderUnavailable);\n }\n }\n\n // Best-effort JSON-schema grammar for constrained decoding. Falls back to\n // free-form output (and prompt-based JSON extraction) if the installed\n // node-llama-cpp version does not expose grammar creation.\n async #grammarFor(jsonSchema?: Record<string, unknown>): Promise<unknown> {\n if (jsonSchema === undefined || this.#llama?.createGrammarForJsonSchema === undefined) {\n return undefined;\n }\n\n try {\n return await this.#llama.createGrammarForJsonSchema(jsonSchema);\n } catch {\n return undefined;\n }\n }\n\n async #resolveModelPath(\n requestedModel: string | undefined,\n role: string | undefined,\n ): Promise<Result<AgentDevKitErrorCode, { id: string; path: string }>> {\n let modelId = requestedModel;\n\n if (modelId === undefined) {\n const defaultId = await this.#store.getDefault(role);\n modelId = defaultId.isOk() ? defaultId.unwrap() : undefined;\n }\n\n if (modelId === undefined) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n const status = await this.#store.status(modelId);\n\n if (status.isErr()) {\n return Result.fail(status.unwrapError());\n }\n\n const installed = status.unwrap();\n\n if (installed === undefined) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n return Result.ok({ id: modelId, path: installed.path });\n }\n\n async #ensureNodeLlama(): Promise<Result<AgentDevKitErrorCode, NodeLlamaCpp>> {\n if (this.#nodeLlama !== undefined) {\n return Result.ok(this.#nodeLlama);\n }\n\n const loaded = await loadNodeLlama();\n\n if (loaded.isOk()) {\n this.#nodeLlama = loaded.unwrap();\n }\n\n return loaded;\n }\n\n async #loadModel(llama: NodeLlamaCpp, modelPath: string): Promise<LlamaModel> {\n const cached = this.#models.get(modelPath);\n\n if (cached !== undefined) {\n return cached;\n }\n\n if (this.#llama === undefined) {\n this.#llama = await llama.getLlama();\n }\n\n const model = await this.#llama.loadModel({ modelPath });\n this.#models.set(modelPath, model);\n return model;\n }\n}\n","import type {\n BrainProviderPort,\n BrainRequest,\n BrainResponse,\n BrainStreamHandler,\n BrainStructuredResponse,\n} from \"../bases/brain\";\nimport type { AgentDevKitErrorCode } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\n\nfunction reply(request: BrainRequest): BrainResponse {\n const text = `${request.prompt.agent.name}: Entendi. Vou responder no contexto da sessão atual: \"${request.prompt.task.userMessage}\".`;\n const inputTokens = request.prompt.messages\n .map((message) => message.content.split(/\\s+/g).filter(Boolean).length)\n .reduce((total, count) => total + count, 0);\n const outputTokens = text.split(/\\s+/g).filter(Boolean).length;\n\n return {\n finishReason: \"stop\",\n model: request.options.model ?? \"mock-chat\",\n provider: \"mock\",\n schema: \"agent-devkit.brain-response/v1\",\n text,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n },\n };\n}\n\nexport class MockBrainProvider implements BrainProviderPort {\n async generate(request: BrainRequest): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n return Result.ok(reply(request));\n }\n\n async generateStream(\n request: BrainRequest,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n const response = reply(request);\n onToken(response.text);\n return Result.ok(response);\n }\n\n async generateStructured(\n request: BrainRequest,\n _jsonSchema: Record<string, unknown>,\n ): Promise<Result<AgentDevKitErrorCode, BrainStructuredResponse>> {\n const raw = JSON.stringify({ action: \"final\", reply: reply(request).text });\n return Result.ok({ json: JSON.parse(raw), raw });\n }\n}\n","import type {\n BrainProviderPort,\n BrainRequest,\n BrainResponse,\n BrainStreamHandler,\n BrainStructuredResponse,\n} from \"../bases/brain\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\nimport { LocalLlamaBrainProvider } from \"./local_llama_provider\";\nimport { MockBrainProvider } from \"./mock_provider\";\n\nexport type BrainDockOptions = {\n stateDirectory?: string;\n};\n\ntype ProviderFactory = () => BrainProviderPort;\n\nconst defaultProvider = \"local\";\nconst fallbackProvider = \"mock\";\n\nfunction shouldFallback(error: AgentDevKitErrorCode): boolean {\n return error === ErrorCodes.BrainProviderUnavailable || error === ErrorCodes.ModelNotFound;\n}\n\n/**\n * The \"dock\": a `BrainProviderPort` that routes each request to a concrete\n * provider by `request.options.provider` (local, mock, and hosted providers\n * later). Streaming is forwarded when the resolved provider supports it, and\n * degrades to a single chunk otherwise.\n */\nexport class BrainDockProvider implements BrainProviderPort {\n readonly #factories: Map<string, ProviderFactory>;\n readonly #instances = new Map<string, BrainProviderPort>();\n\n constructor(options: BrainDockOptions = {}) {\n this.#factories = new Map<string, ProviderFactory>([\n [\"local\", () => new LocalLlamaBrainProvider({ stateDirectory: options.stateDirectory })],\n [\"mock\", () => new MockBrainProvider()],\n ]);\n }\n\n async generate(request: BrainRequest): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n const provider = this.#resolve(request);\n const response = await provider.generate(request);\n\n if (\n response.isOk() ||\n request.options.provider === fallbackProvider ||\n !shouldFallback(response.unwrapError())\n ) {\n return response;\n }\n\n return this.#resolveById(fallbackProvider).generate({\n ...request,\n options: { ...request.options, provider: fallbackProvider },\n });\n }\n\n async generateStream(\n request: BrainRequest,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n const provider = this.#resolve(request);\n\n if (provider.generateStream !== undefined) {\n const response = await provider.generateStream(request, onToken);\n\n if (\n response.isOk() ||\n request.options.provider === fallbackProvider ||\n !shouldFallback(response.unwrapError())\n ) {\n return response;\n }\n\n return (\n this.#resolveById(fallbackProvider).generateStream?.(\n {\n ...request,\n options: { ...request.options, provider: fallbackProvider },\n },\n onToken,\n ) ??\n this.#resolveById(fallbackProvider).generate({\n ...request,\n options: { ...request.options, provider: fallbackProvider },\n })\n );\n }\n\n const response = await provider.generate(request);\n\n if (response.isOk()) {\n onToken(response.unwrap().text);\n }\n\n return response;\n }\n\n async generateStructured(\n request: BrainRequest,\n jsonSchema: Record<string, unknown>,\n ): Promise<Result<AgentDevKitErrorCode, BrainStructuredResponse>> {\n const provider = this.#resolve(request);\n\n if (provider.generateStructured !== undefined) {\n const response = await provider.generateStructured(request, jsonSchema);\n\n if (\n response.isOk() ||\n request.options.provider === fallbackProvider ||\n !shouldFallback(response.unwrapError())\n ) {\n return response;\n }\n\n return (\n this.#resolveById(fallbackProvider).generateStructured?.(\n {\n ...request,\n options: { ...request.options, provider: fallbackProvider },\n },\n jsonSchema,\n ) ?? Result.fail(ErrorCodes.BrainProviderUnavailable)\n );\n }\n\n return Result.fail(ErrorCodes.BrainProviderUnavailable);\n }\n\n #resolve(request: BrainRequest): BrainProviderPort {\n const id = request.options.provider ?? defaultProvider;\n return this.#resolveById(id);\n }\n\n #resolveById(id: string): BrainProviderPort {\n const cached = this.#instances.get(id);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const factory = this.#factories.get(id) ?? this.#factories.get(defaultProvider);\n const provider = factory === undefined ? new MockBrainProvider() : factory();\n this.#instances.set(id, provider);\n return provider;\n }\n}\n\nexport function createBrainDockProvider(options: BrainDockOptions = {}): BrainProviderPort {\n return new BrainDockProvider(options);\n}\n","import { z } from \"zod\";\nimport type {\n CapabilityApproval,\n CapabilityEffect,\n CapabilityInvocationAudit,\n CapabilityInvocationContext,\n CapabilityInvocationFailure,\n CapabilityInvocationResult,\n InvokableCapabilityDescriptor,\n InvokableCapabilityService,\n} from \"../bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\n\nexport type CapabilityRegistryOptions = {\n capabilities: InvokableCapabilityService[];\n clock?: () => Date;\n};\n\nfunction effectsFor(capability: InvokableCapabilityService): CapabilityEffect[] {\n switch (capability.capability.risk) {\n case \"destructive\":\n return [{ operation: \"delete\", scope: \"project-or-global\" }];\n case \"external-write\":\n return [{ operation: \"external-write\", scope: \"external\" }];\n case \"read-only\":\n return [{ operation: \"read\", scope: \"none\" }];\n case \"writes-global-state\":\n return [{ operation: \"write\", scope: \"global\" }];\n case \"writes-project-state\":\n return [{ operation: \"write\", scope: \"project\" }];\n }\n}\n\nfunction approvalFor(capability: InvokableCapabilityService): CapabilityApproval {\n switch (capability.capability.risk) {\n case \"destructive\":\n return {\n reason: \"Capability can remove state and requires explicit approval.\",\n required: true,\n };\n case \"external-write\":\n return {\n reason: \"Capability writes to an external system.\",\n required: true,\n };\n case \"read-only\":\n return {\n reason: \"Capability is read-only.\",\n required: false,\n };\n case \"writes-global-state\":\n return {\n reason: \"Capability writes global state.\",\n required: true,\n };\n case \"writes-project-state\":\n return {\n reason: \"Capability writes project state.\",\n required: true,\n };\n }\n}\n\nfunction audit(startedAt: Date, endedAt: Date): CapabilityInvocationAudit {\n return {\n durationMs: Math.max(0, endedAt.getTime() - startedAt.getTime()),\n endedAt: endedAt.toISOString(),\n startedAt: startedAt.toISOString(),\n };\n}\n\nfunction failure(\n capabilityId: string,\n auditPayload: CapabilityInvocationAudit,\n code: CapabilityInvocationFailure[\"error\"][\"code\"],\n message: string,\n hint?: string,\n): CapabilityInvocationFailure {\n return {\n audit: auditPayload,\n capabilityId,\n error: {\n code,\n hint,\n message,\n recoverable:\n code === ErrorCodes.InvalidInput ||\n code === ErrorCodes.CapabilityNotFound ||\n code === ErrorCodes.ApprovalRequired,\n },\n ok: false,\n };\n}\n\nexport class CapabilityRegistry {\n readonly #capabilities: Map<string, InvokableCapabilityService>;\n readonly #clock: () => Date;\n\n constructor(options: CapabilityRegistryOptions) {\n this.#clock = options.clock ?? (() => new Date());\n this.#capabilities = new Map(\n options.capabilities.map((capability) => [capability.capability.id, capability]),\n );\n }\n\n describe(id: string): Result<AgentDevKitErrorCode, InvokableCapabilityDescriptor> {\n const capability = this.#capabilities.get(id);\n\n if (capability === undefined) {\n return Result.fail(ErrorCodes.CapabilityNotFound);\n }\n\n return Result.ok(this.#descriptor(capability));\n }\n\n list(): InvokableCapabilityDescriptor[] {\n return [...this.#capabilities.values()]\n .map((capability) => this.#descriptor(capability))\n .sort((left, right) => left.id.localeCompare(right.id));\n }\n\n async invoke(\n capabilityId: string,\n input: unknown,\n context: CapabilityInvocationContext,\n ): Promise<CapabilityInvocationResult> {\n const startedAt = this.#clock();\n const capability = this.#capabilities.get(capabilityId);\n\n if (capability === undefined) {\n const endedAt = this.#clock();\n return failure(\n capabilityId,\n audit(startedAt, endedAt),\n ErrorCodes.CapabilityNotFound,\n `Capability ${capabilityId} was not found.`,\n );\n }\n\n const parsed = capability.inputSchema.safeParse(input);\n\n if (!parsed.success) {\n const endedAt = this.#clock();\n return failure(\n capabilityId,\n audit(startedAt, endedAt),\n ErrorCodes.InvalidInput,\n \"Capability input did not match the declared schema.\",\n z.prettifyError(parsed.error),\n );\n }\n\n const approval = capability.approvalForInput?.(parsed.data, context) ?? approvalFor(capability);\n\n if (approval.required && context.approved !== true) {\n const endedAt = this.#clock();\n return failure(\n capabilityId,\n audit(startedAt, endedAt),\n ErrorCodes.ApprovalRequired,\n `Capability ${capabilityId} requires explicit approval.`,\n approval.reason,\n );\n }\n\n const result = await capability.invoke(parsed.data, context);\n const endedAt = this.#clock();\n const auditPayload = audit(startedAt, endedAt);\n\n if (result.isErr()) {\n return failure(\n capabilityId,\n auditPayload,\n result.unwrapError(),\n `Capability ${capabilityId} failed.`,\n );\n }\n\n const output = capability.outputSchema.safeParse(result.unwrap());\n\n if (!output.success) {\n return failure(\n capabilityId,\n auditPayload,\n ErrorCodes.CapabilityExecutionFailed,\n \"Capability output did not match the declared schema.\",\n z.prettifyError(output.error),\n );\n }\n\n return {\n audit: auditPayload,\n capabilityId,\n data: output.data,\n effects: capability.effectsForInput?.(parsed.data, context) ?? effectsFor(capability),\n ok: true,\n };\n }\n\n #descriptor(capability: InvokableCapabilityService): InvokableCapabilityDescriptor {\n return {\n ...capability.capability,\n approval: approvalFor(capability),\n inputSchema: z.toJSONSchema(capability.inputSchema) as Record<string, unknown>,\n outputSchema: z.toJSONSchema(capability.outputSchema) as Record<string, unknown>,\n };\n }\n}\n\nexport function createCapabilityRegistry(\n options: CapabilityRegistryOptions,\n): Result<AgentDevKitErrorCode, CapabilityRegistry> {\n const seen = new Set<string>();\n\n for (const capability of options.capabilities) {\n if (seen.has(capability.capability.id)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n seen.add(capability.capability.id);\n }\n\n return Result.ok(new CapabilityRegistry(options));\n}\n","import { z } from \"zod\";\n\nexport const ContextProjectStatusSchema = z.enum([\"active\", \"archived\", \"deleted\"]);\nexport type ContextProjectStatus = z.infer<typeof ContextProjectStatusSchema>;\n\nexport const ContextProjectSchema = z.object({\n schema: z.literal(\"agent-devkit.context-project/v1\"),\n createdAt: z.string().datetime(),\n description: z.string().max(2000).optional(),\n id: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).default({}),\n name: z.string().min(1).max(160),\n path: z.string().min(1).optional(),\n status: ContextProjectStatusSchema,\n tags: z.array(z.string().min(1).max(80)).default([]),\n updatedAt: z.string().datetime(),\n});\n\nexport type ContextProject = z.infer<typeof ContextProjectSchema>;\n\nexport const ContextProjectIndexSchema = z.object({\n schema: z.literal(\"agent-devkit.context-project-index/v1\"),\n description: z.string().optional(),\n id: z.string().min(1),\n name: z.string().min(1),\n path: z.string().optional(),\n status: ContextProjectStatusSchema,\n tags: z.array(z.string()).default([]),\n updatedAt: z.string().datetime(),\n});\n\nexport type ContextProjectIndex = z.infer<typeof ContextProjectIndexSchema>;\n\nexport const ContextProjectsOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"list\"),\n query: z.string().min(1).optional(),\n status: z.enum([\"active\", \"archived\", \"deleted\", \"all\"]).optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"create\"),\n description: z.string().max(2000).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n name: z.string().min(1).max(160),\n path: z.string().min(1).optional(),\n tags: z.array(z.string().min(1).max(80)).optional(),\n })\n .strict(),\n z.object({ action: z.literal(\"show\"), projectId: z.string().min(1) }).strict(),\n z\n .object({\n action: z.literal(\"update\"),\n description: z.string().max(2000).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n name: z.string().min(1).max(160).optional(),\n path: z.string().min(1).optional(),\n projectId: z.string().min(1),\n tags: z.array(z.string().min(1).max(80)).optional(),\n })\n .strict(),\n z.object({ action: z.literal(\"archive\"), projectId: z.string().min(1) }).strict(),\n z\n .object({\n action: z.literal(\"delete\"),\n hard: z.boolean().optional(),\n projectId: z.string().min(1),\n })\n .strict(),\n]);\n\nexport type ContextProjectsOptions = z.infer<typeof ContextProjectsOptionsSchema>;\n\nexport type ContextProjectsListResult = {\n action: \"list\";\n projects: ContextProject[];\n};\n\nexport type ContextProjectResult = {\n action: \"archive\" | \"create\" | \"show\" | \"update\";\n project: ContextProject;\n};\n\nexport type ContextProjectDeleteResult = {\n action: \"delete\";\n hard: boolean;\n projectId: string;\n removed: boolean;\n};\n\nexport type ContextProjectsResult =\n | ContextProjectDeleteResult\n | ContextProjectResult\n | ContextProjectsListResult;\n\nexport const ContextProjectsResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n projects: z.array(ContextProjectSchema),\n }),\n z.object({\n action: z.literal(\"create\"),\n project: ContextProjectSchema,\n }),\n z.object({\n action: z.literal(\"show\"),\n project: ContextProjectSchema,\n }),\n z.object({\n action: z.literal(\"update\"),\n project: ContextProjectSchema,\n }),\n z.object({\n action: z.literal(\"archive\"),\n project: ContextProjectSchema,\n }),\n z.object({\n action: z.literal(\"delete\"),\n hard: z.boolean(),\n projectId: z.string().min(1),\n removed: z.boolean(),\n }),\n]);\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDataPath, AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../../../infra/data\";\nimport {\n type ContextProject,\n ContextProjectIndexSchema,\n ContextProjectSchema,\n type ContextProjectStatus,\n} from \"./projects.entities\";\n\nexport type ContextProjectsRepositoryOptions = {\n clock?: () => Date;\n dataStore?: AgentDataStore;\n};\n\nexport type CreateContextProjectInput = {\n description?: string;\n metadata?: Record<string, unknown>;\n name: string;\n path?: string;\n tags?: string[];\n};\n\nexport type ListContextProjectsInput = {\n query?: string;\n status?: ContextProjectStatus | \"all\";\n};\n\nexport type UpdateContextProjectInput = {\n description?: string;\n metadata?: Record<string, unknown>;\n name?: string;\n path?: string;\n projectId: string;\n tags?: string[];\n};\n\nexport interface ContextProjectsRepositoryPort extends CapabilityRepositoryPort {\n archive(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>>;\n create(input: CreateContextProjectInput): Promise<Result<AgentDevKitErrorCode, ContextProject>>;\n delete(projectId: string, hard?: boolean): Promise<Result<AgentDevKitErrorCode, boolean>>;\n list(input?: ListContextProjectsInput): Promise<Result<AgentDevKitErrorCode, ContextProject[]>>;\n show(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>>;\n update(input: UpdateContextProjectInput): Promise<Result<AgentDevKitErrorCode, ContextProject>>;\n}\n\nconst knowledgeBase = `# Project Knowledge Base\n\nThis file stores durable project knowledge promoted from sessions or written manually.\n`;\n\nfunction slugify(value: string): string {\n const slug = value\n .trim()\n .toLowerCase()\n .normalize(\"NFD\")\n .replaceAll(/[\\u0300-\\u036f]/g, \"\")\n .replaceAll(/[^a-z0-9]+/g, \"_\")\n .replaceAll(/^_+|_+$/g, \"\");\n\n return slug.length > 0 ? slug : \"project\";\n}\n\nfunction includesQuery(project: ContextProject, query: string): boolean {\n const normalized = query.trim().toLowerCase();\n const haystack = [\n project.name,\n project.path,\n project.description,\n project.status,\n ...project.tags,\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n\n return haystack.includes(normalized);\n}\n\nexport class ContextProjectsRepository implements ContextProjectsRepositoryPort {\n readonly repositoryId = \"context.projects.repository\";\n readonly #clock: () => Date;\n readonly #dataStore: AgentDataStore;\n\n constructor(options: ContextProjectsRepositoryOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#dataStore = options.dataStore ?? new LocalAgentDataStore();\n }\n\n async archive(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n return this.#setStatus(projectId, \"archived\");\n }\n\n async create(\n input: CreateContextProjectInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n const id = await this.#uniqueProjectId(input.name);\n const now = this.#now();\n const project: ContextProject = {\n schema: \"agent-devkit.context-project/v1\",\n createdAt: now,\n description: input.description,\n id,\n metadata: input.metadata ?? {},\n name: input.name,\n path: input.path,\n status: \"active\",\n tags: input.tags ?? [],\n updatedAt: now,\n };\n\n const save = await this.#saveProject(project);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n const bootstrap = await this.#bootstrapProject(project.id);\n\n if (bootstrap.isErr()) {\n return Result.fail(bootstrap.unwrapError());\n }\n\n return Result.ok(project);\n }\n\n async delete(projectId: string, hard = false): Promise<Result<AgentDevKitErrorCode, boolean>> {\n if (hard) {\n const remove = await this.#dataStore.remove(this.#projectDirectory(projectId));\n return remove.isOk() ? Result.ok(true) : Result.fail(remove.unwrapError());\n }\n\n const project = await this.#setStatus(projectId, \"deleted\");\n return project.isOk() ? Result.ok(true) : Result.fail(project.unwrapError());\n }\n\n async list(\n input: ListContextProjectsInput = {},\n ): Promise<Result<AgentDevKitErrorCode, ContextProject[]>> {\n const projectsDirectory = { namespace: \"context\" as const, segments: [\"projects\"] };\n const exists = await this.#dataStore.exists(projectsDirectory);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n return Result.ok([]);\n }\n\n const entries = await this.#dataStore.list(projectsDirectory);\n\n if (entries.isErr()) {\n return Result.fail(entries.unwrapError());\n }\n\n const projects: ContextProject[] = [];\n\n for (const entry of entries.unwrap().filter((candidate) => candidate.kind === \"directory\")) {\n const project = await this.#readProject(entry.name);\n\n if (project.isErr()) {\n return Result.fail(project.unwrapError());\n }\n\n projects.push(project.unwrap());\n }\n\n const status = input.status ?? \"active\";\n const query = input.query?.trim();\n\n return Result.ok(\n projects\n .filter((project) => status === \"all\" || project.status === status)\n .filter(\n (project) => query === undefined || query.length === 0 || includesQuery(project, query),\n )\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt)),\n );\n }\n\n async show(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n return this.#readProject(projectId);\n }\n\n async update(\n input: UpdateContextProjectInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n const current = await this.#readProject(input.projectId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const updated: ContextProject = {\n ...current.unwrap(),\n description: input.description ?? current.unwrap().description,\n metadata: input.metadata ?? current.unwrap().metadata,\n name: input.name ?? current.unwrap().name,\n path: input.path ?? current.unwrap().path,\n tags: input.tags ?? current.unwrap().tags,\n updatedAt: this.#now(),\n };\n const save = await this.#saveProject(updated);\n\n return save.isOk() ? Result.ok(updated) : Result.fail(save.unwrapError());\n }\n\n async #bootstrapProject(projectId: string): Promise<Result<AgentDevKitErrorCode, void>> {\n const writes = [\n this.#dataStore.writeText(\n { namespace: \"context\", segments: [\"projects\", projectId, \"knowledge\", \"base.md\"] },\n knowledgeBase,\n ),\n this.#dataStore.writeJson(\n { namespace: \"context\", segments: [\"projects\", projectId, \"knowledge\", \"index.json\"] },\n { schema: \"agent-devkit.context-knowledge-index/v1\", projectId, entries: [] },\n ),\n this.#dataStore.writeText(\n { namespace: \"context\", segments: [\"projects\", projectId, \"knowledge\", \"facts.jsonl\"] },\n \"\",\n ),\n this.#dataStore.writeText(\n {\n namespace: \"context\",\n segments: [\"projects\", projectId, \"knowledge\", \"decisions.jsonl\"],\n },\n \"\",\n ),\n this.#dataStore.writeText(\n {\n namespace: \"context\",\n segments: [\"projects\", projectId, \"knowledge\", \"preferences.jsonl\"],\n },\n \"\",\n ),\n this.#dataStore.writeText(\n {\n namespace: \"context\",\n segments: [\"projects\", projectId, \"knowledge\", \"references.jsonl\"],\n },\n \"\",\n ),\n this.#dataStore.writeText(\n { namespace: \"context\", segments: [\"projects\", projectId, \"sessions\", \".keep\"] },\n \"\",\n ),\n ];\n\n for (const write of await Promise.all(writes)) {\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n }\n\n return Result.ok(undefined);\n }\n\n #index(project: ContextProject) {\n return ContextProjectIndexSchema.parse({\n schema: \"agent-devkit.context-project-index/v1\",\n description: project.description,\n id: project.id,\n name: project.name,\n path: project.path,\n status: project.status,\n tags: project.tags,\n updatedAt: project.updatedAt,\n });\n }\n\n async #readProject(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n const payload = await this.#dataStore.readJson<unknown>({\n namespace: \"context\",\n segments: [\"projects\", projectId, \"project.json\"],\n });\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = ContextProjectSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #saveProject(project: ContextProject): Promise<Result<AgentDevKitErrorCode, void>> {\n const projectWrite = await this.#dataStore.writeJson(\n { namespace: \"context\", segments: [\"projects\", project.id, \"project.json\"] },\n project,\n );\n\n if (projectWrite.isErr()) {\n return Result.fail(projectWrite.unwrapError());\n }\n\n return this.#dataStore.writeJson(\n { namespace: \"context\", segments: [\"projects\", project.id, \"index.json\"] },\n this.#index(project),\n );\n }\n\n async #setStatus(\n projectId: string,\n status: ContextProjectStatus,\n ): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n const current = await this.#readProject(projectId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const updated: ContextProject = { ...current.unwrap(), status, updatedAt: this.#now() };\n const save = await this.#saveProject(updated);\n\n return save.isOk() ? Result.ok(updated) : Result.fail(save.unwrapError());\n }\n\n async #uniqueProjectId(name: string): Promise<string> {\n const base = `proj_${slugify(name)}`;\n let candidate = base;\n let index = 2;\n\n while ((await this.#dataStore.exists(this.#projectDirectory(candidate))).unwrap()) {\n candidate = `${base}_${index}`;\n index += 1;\n }\n\n return candidate;\n }\n\n #now(): string {\n return this.#clock().toISOString();\n }\n\n #projectDirectory(projectId: string): AgentDataPath {\n return { namespace: \"context\", segments: [\"projects\", projectId] };\n }\n}\n","import {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n type CapabilityInvocationContext,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ContextProjectsOptions,\n ContextProjectsOptionsSchema,\n type ContextProjectsResult,\n ContextProjectsResultSchema,\n} from \"./projects.entities\";\nimport type { ContextProjectsRepositoryPort } from \"./projects.repository\";\n\ntype ContextProjectsServiceDependencies = {\n repository: ContextProjectsRepositoryPort;\n};\n\nexport const contextProjectsCapabilityConfig = defineCapabilityConfig({\n id: \"context.projects\",\n moduleId: \"context\",\n name: \"Context Projects\",\n description: \"Create, list and manage Agent DevKit context projects.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class ContextProjectsService extends BaseCapabilityService<\n typeof contextProjectsCapabilityConfig,\n ContextProjectsServiceDependencies,\n ContextProjectsOptions,\n ContextProjectsResult\n> {\n readonly inputSchema = ContextProjectsOptionsSchema;\n readonly outputSchema = ContextProjectsResultSchema;\n readonly #repository: ContextProjectsRepositoryPort;\n\n constructor(dependencies: ContextProjectsServiceDependencies) {\n super(contextProjectsCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: ContextProjectsOptions,\n ): Promise<Result<AgentDevKitErrorCode, ContextProjectsResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const input = parsed.data;\n\n if (input.action === \"list\") {\n return (await this.#repository.list(input)).map((projects) => ({\n action: \"list\",\n projects,\n }));\n }\n\n if (input.action === \"create\") {\n return (await this.#repository.create(input)).map((project) => ({\n action: \"create\",\n project,\n }));\n }\n\n if (input.action === \"show\") {\n return (await this.#repository.show(input.projectId)).map((project) => ({\n action: \"show\",\n project,\n }));\n }\n\n if (input.action === \"update\") {\n return (await this.#repository.update(input)).map((project) => ({\n action: \"update\",\n project,\n }));\n }\n\n if (input.action === \"archive\") {\n return (await this.#repository.archive(input.projectId)).map((project) => ({\n action: \"archive\",\n project,\n }));\n }\n\n return (await this.#repository.delete(input.projectId, input.hard)).map((removed) => ({\n action: \"delete\",\n hard: input.hard === true,\n projectId: input.projectId,\n removed,\n }));\n }\n\n invoke(\n input: ContextProjectsOptions,\n _context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, ContextProjectsResult>> {\n return this.execute(input);\n }\n\n override approvalForInput(input: ContextProjectsOptions): CapabilityApproval {\n if (input.action === \"list\" || input.action === \"show\") {\n return { reason: \"Context project read action.\", required: false };\n }\n\n if (input.action === \"delete\" && input.hard === true) {\n return {\n reason: \"Context project hard delete removes durable state.\",\n required: true,\n };\n }\n\n return {\n reason: \"Context project action writes global state.\",\n required: true,\n };\n }\n\n override effectsForInput(input: ContextProjectsOptions): CapabilityEffect[] {\n if (input.action === \"list\" || input.action === \"show\") {\n return [{ operation: \"read\", scope: \"none\" }];\n }\n\n if (input.action === \"delete\" && input.hard === true) {\n return [{ operation: \"delete\", scope: \"global\" }];\n }\n\n return [{ operation: \"write\", scope: \"global\" }];\n }\n}\n","import { z } from \"zod\";\n\nexport const ContextSessionStatusSchema = z.enum([\"active\", \"archived\", \"deleted\"]);\nexport type ContextSessionStatus = z.infer<typeof ContextSessionStatusSchema>;\n\nexport const ContextSessionOriginSchema = z.enum([\"cli\", \"tui\", \"mcp\", \"agent\"]);\nexport type ContextSessionOrigin = z.infer<typeof ContextSessionOriginSchema>;\n\nexport const ContextMessageRoleSchema = z.enum([\"user\", \"assistant\", \"system\", \"tool\"]);\nexport type ContextMessageRole = z.infer<typeof ContextMessageRoleSchema>;\n\nexport const ContextMessageKindSchema = z.enum([\n \"message\",\n \"event\",\n \"tool-call\",\n \"tool-result\",\n \"summary\",\n]);\nexport type ContextMessageKind = z.infer<typeof ContextMessageKindSchema>;\n\nexport const ContextSessionSchema = z.object({\n schema: z.literal(\"agent-devkit.context-session/v1\"),\n createdAt: z.string().datetime(),\n id: z.string().min(1),\n lastMessageAt: z.string().datetime().optional(),\n metadata: z.record(z.string(), z.unknown()).default({}),\n origin: ContextSessionOriginSchema,\n projectId: z.string().min(1).optional(),\n status: ContextSessionStatusSchema,\n tags: z.array(z.string().min(1).max(80)).default([]),\n title: z.string().min(1).max(160),\n updatedAt: z.string().datetime(),\n});\n\nexport type ContextSession = z.infer<typeof ContextSessionSchema>;\n\nexport const ContextMessageSchema = z.object({\n schema: z.literal(\"agent-devkit.context-message/v1\"),\n content: z.string(),\n createdAt: z.string().datetime(),\n id: z.string().min(1),\n kind: ContextMessageKindSchema,\n metadata: z.record(z.string(), z.unknown()).default({}),\n role: ContextMessageRoleSchema,\n sessionId: z.string().min(1),\n});\n\nexport type ContextMessage = z.infer<typeof ContextMessageSchema>;\n\nexport const ContextSessionIndexSchema = z.object({\n schema: z.literal(\"agent-devkit.context-session-index/v1\"),\n createdAt: z.string().datetime(),\n keywords: z.array(z.string()),\n lastMessageAt: z.string().datetime().optional(),\n messageCount: z.number().int().nonnegative(),\n preview: z.string(),\n projectId: z.string().min(1).optional(),\n sessionId: z.string().min(1),\n status: ContextSessionStatusSchema,\n title: z.string().min(1),\n updatedAt: z.string().datetime(),\n});\n\nexport type ContextSessionIndex = z.infer<typeof ContextSessionIndexSchema>;\n\nexport type ContextSessionSearchResult = ContextSessionIndex & {\n score: number;\n};\n\nexport const ContextSessionsOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"list\"),\n limit: z.number().int().nonnegative().optional(),\n projectId: z.string().min(1).optional(),\n query: z.string().min(1).optional(),\n status: z.enum([\"active\", \"archived\", \"deleted\", \"all\"]).optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"create\"),\n metadata: z.record(z.string(), z.unknown()).optional(),\n origin: ContextSessionOriginSchema,\n projectId: z.string().min(1).optional(),\n tags: z.array(z.string().min(1).max(80)).optional(),\n title: z.string().min(1).max(160).optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"append-message\"),\n content: z.string(),\n kind: ContextMessageKindSchema.optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n role: ContextMessageRoleSchema,\n sessionId: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"show\"),\n includeMessages: z.boolean().optional(),\n limit: z.number().int().nonnegative().optional(),\n sessionId: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"search\"),\n limit: z.number().int().nonnegative().optional(),\n projectId: z.string().min(1).optional(),\n query: z.string().min(1),\n })\n .strict(),\n z.object({ action: z.literal(\"resume\"), sessionId: z.string().min(1) }).strict(),\n z.object({ action: z.literal(\"archive\"), sessionId: z.string().min(1) }).strict(),\n z\n .object({\n action: z.literal(\"delete\"),\n hard: z.boolean().optional(),\n sessionId: z.string().min(1),\n })\n .strict(),\n]);\n\nexport type ContextSessionsOptions = z.infer<typeof ContextSessionsOptionsSchema>;\n\nexport type ContextSessionsListResult = {\n action: \"list\";\n sessions: ContextSessionIndex[];\n};\n\nexport type ContextSessionsCreateResult = {\n action: \"create\";\n session: ContextSession;\n};\n\nexport type ContextSessionsAppendMessageResult = {\n action: \"append-message\";\n index: ContextSessionIndex;\n message: ContextMessage;\n session: ContextSession;\n};\n\nexport type ContextSessionsShowResult = {\n action: \"show\";\n index: ContextSessionIndex;\n messages?: ContextMessage[];\n session: ContextSession;\n};\n\nexport type ContextSessionsSearchResult = {\n action: \"search\";\n query: string;\n results: ContextSessionSearchResult[];\n};\n\nexport type ContextSessionsResumeResult = {\n action: \"resume\";\n index: ContextSessionIndex;\n messages: ContextMessage[];\n session: ContextSession;\n};\n\nexport type ContextSessionsArchiveResult = {\n action: \"archive\";\n index: ContextSessionIndex;\n session: ContextSession;\n};\n\nexport type ContextSessionsDeleteResult = {\n action: \"delete\";\n hard: boolean;\n removed: boolean;\n sessionId: string;\n};\n\nexport type ContextSessionsResult =\n | ContextSessionsAppendMessageResult\n | ContextSessionsArchiveResult\n | ContextSessionsCreateResult\n | ContextSessionsDeleteResult\n | ContextSessionsListResult\n | ContextSessionsResumeResult\n | ContextSessionsSearchResult\n | ContextSessionsShowResult;\n\nexport const ContextSessionIndexOutputSchema = ContextSessionIndexSchema;\nexport const ContextMessageOutputSchema = ContextMessageSchema;\nexport const ContextSessionSearchResultSchema = ContextSessionIndexSchema.extend({\n score: z.number().nonnegative(),\n});\n\nexport const ContextSessionsResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n sessions: z.array(ContextSessionIndexOutputSchema),\n }),\n z.object({\n action: z.literal(\"create\"),\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"append-message\"),\n index: ContextSessionIndexOutputSchema,\n message: ContextMessageOutputSchema,\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"show\"),\n index: ContextSessionIndexOutputSchema,\n messages: z.array(ContextMessageOutputSchema).optional(),\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"search\"),\n query: z.string(),\n results: z.array(ContextSessionSearchResultSchema),\n }),\n z.object({\n action: z.literal(\"resume\"),\n index: ContextSessionIndexOutputSchema,\n messages: z.array(ContextMessageOutputSchema),\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"archive\"),\n index: ContextSessionIndexOutputSchema,\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"delete\"),\n hard: z.boolean(),\n removed: z.boolean(),\n sessionId: z.string().min(1),\n }),\n]);\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDataPath, AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../../../infra/data\";\nimport { ContextProjectSchema } from \"../projects/projects.entities\";\nimport {\n type ContextMessage,\n type ContextMessageKind,\n type ContextMessageRole,\n ContextMessageSchema,\n type ContextSession,\n type ContextSessionIndex,\n ContextSessionIndexSchema,\n ContextSessionSchema,\n type ContextSessionSearchResult,\n type ContextSessionStatus,\n} from \"./sessions.entities\";\n\nexport type ContextSessionsRepositoryOptions = {\n clock?: () => Date;\n dataStore?: AgentDataStore;\n idFactory?: () => string;\n messageIdFactory?: () => string;\n};\n\nexport type CreateContextSessionInput = {\n metadata?: Record<string, unknown>;\n origin: ContextSession[\"origin\"];\n projectId?: string;\n tags?: string[];\n title?: string;\n};\n\nexport type AppendContextMessageInput = {\n content: string;\n kind?: ContextMessageKind;\n metadata?: Record<string, unknown>;\n role: ContextMessageRole;\n sessionId: string;\n};\n\nexport type ListContextSessionsInput = {\n limit?: number;\n projectId?: string;\n query?: string;\n status?: ContextSessionStatus | \"all\";\n};\n\nexport type ShowContextSessionInput = {\n includeMessages?: boolean;\n limit?: number;\n sessionId: string;\n};\n\nexport type SearchContextSessionsInput = {\n limit?: number;\n projectId?: string;\n query: string;\n};\n\nexport type ContextSessionDetails = {\n index: ContextSessionIndex;\n messages?: ContextMessage[];\n session: ContextSession;\n};\n\nexport interface ContextSessionsRepositoryPort extends CapabilityRepositoryPort {\n appendMessage(\n input: AppendContextMessageInput,\n ): Promise<\n Result<\n AgentDevKitErrorCode,\n { index: ContextSessionIndex; message: ContextMessage; session: ContextSession }\n >\n >;\n archive(sessionId: string): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>>;\n create(input: CreateContextSessionInput): Promise<Result<AgentDevKitErrorCode, ContextSession>>;\n delete(sessionId: string, hard?: boolean): Promise<Result<AgentDevKitErrorCode, boolean>>;\n list(\n input?: ListContextSessionsInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionIndex[]>>;\n resume(sessionId: string): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>>;\n search(\n input: SearchContextSessionsInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionSearchResult[]>>;\n show(\n input: ShowContextSessionInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>>;\n}\n\nconst stopwords = new Set([\n \"a\",\n \"as\",\n \"com\",\n \"da\",\n \"de\",\n \"do\",\n \"e\",\n \"for\",\n \"in\",\n \"of\",\n \"o\",\n \"os\",\n \"para\",\n \"the\",\n \"to\",\n \"um\",\n \"uma\",\n]);\n\nfunction compactWhitespace(value: string): string {\n return value.replaceAll(/\\s+/g, \" \").trim();\n}\n\nfunction generateId(prefix: string): string {\n return `${prefix}_${crypto.randomUUID().replaceAll(\"-\", \"\").slice(0, 26)}`;\n}\n\nfunction keywordsFor(values: string[], max = 12): string[] {\n const counts = new Map<string, number>();\n\n for (const token of values\n .join(\" \")\n .toLowerCase()\n .normalize(\"NFD\")\n .replaceAll(/[\\u0300-\\u036f]/g, \"\")\n .split(/[^a-z0-9]+/g)\n .filter((candidate) => candidate.length > 3 && !stopwords.has(candidate))) {\n counts.set(token, (counts.get(token) ?? 0) + 1);\n }\n\n return [...counts.entries()]\n .sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]))\n .slice(0, max)\n .map(([token]) => token);\n}\n\nfunction scoreText(haystack: string, query: string): number {\n const normalizedHaystack = haystack.toLowerCase();\n const normalizedQuery = query.toLowerCase();\n let score = 0;\n let index = normalizedHaystack.indexOf(normalizedQuery);\n\n while (index >= 0) {\n score += 1;\n index = normalizedHaystack.indexOf(normalizedQuery, index + normalizedQuery.length);\n }\n\n return score;\n}\n\nexport class ContextSessionsRepository implements ContextSessionsRepositoryPort {\n readonly repositoryId = \"context.sessions.repository\";\n readonly #clock: () => Date;\n readonly #dataStore: AgentDataStore;\n readonly #idFactory: () => string;\n readonly #messageIdFactory: () => string;\n\n constructor(options: ContextSessionsRepositoryOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#dataStore = options.dataStore ?? new LocalAgentDataStore();\n this.#idFactory = options.idFactory ?? (() => generateId(\"ses\"));\n this.#messageIdFactory = options.messageIdFactory ?? (() => generateId(\"msg\"));\n }\n\n async appendMessage(\n input: AppendContextMessageInput,\n ): Promise<\n Result<\n AgentDevKitErrorCode,\n { index: ContextSessionIndex; message: ContextMessage; session: ContextSession }\n >\n > {\n const current = await this.#readSessionById(input.sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const { session } = current.unwrap();\n const now = this.#now();\n const message: ContextMessage = {\n schema: \"agent-devkit.context-message/v1\",\n content: input.content,\n createdAt: now,\n id: this.#messageIdFactory(),\n kind: input.kind ?? \"message\",\n metadata: input.metadata ?? {},\n role: input.role,\n sessionId: input.sessionId,\n };\n const parsedMessage = ContextMessageSchema.safeParse(message);\n\n if (!parsedMessage.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const nextSession: ContextSession = {\n ...session,\n lastMessageAt: now,\n title:\n session.title === \"Untitled session\" && message.role === \"user\"\n ? compactWhitespace(message.content).slice(0, 80) || session.title\n : session.title,\n updatedAt: now,\n };\n const parsedSession = ContextSessionSchema.safeParse(nextSession);\n\n if (!parsedSession.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const writeMessage = await this.#dataStore.appendJsonl(\n this.#sessionPath(parsedSession.data, \"messages.jsonl\"),\n parsedMessage.data,\n );\n\n if (writeMessage.isErr()) {\n return Result.fail(writeMessage.unwrapError());\n }\n\n const messages = await this.#readMessages(parsedSession.data);\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const save = await this.#saveSession(parsedSession.data, messages.unwrap());\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n return Result.ok({\n index: this.#index(nextSession, messages.unwrap()),\n message: parsedMessage.data,\n session: parsedSession.data,\n });\n }\n\n async archive(sessionId: string): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>> {\n const updated = await this.#setStatus(sessionId, \"archived\");\n\n if (updated.isErr()) {\n return Result.fail(updated.unwrapError());\n }\n\n return this.show({ includeMessages: false, sessionId });\n }\n\n async create(\n input: CreateContextSessionInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSession>> {\n if (input.projectId !== undefined) {\n const project = await this.#validateProjectExists(input.projectId);\n\n if (project.isErr()) {\n return Result.fail(project.unwrapError());\n }\n }\n\n const now = this.#now();\n const session: ContextSession = {\n schema: \"agent-devkit.context-session/v1\",\n createdAt: now,\n id: this.#idFactory(),\n metadata: input.metadata ?? {},\n origin: input.origin,\n projectId: input.projectId,\n status: \"active\",\n tags: input.tags ?? [],\n title: input.title ?? \"Untitled session\",\n updatedAt: now,\n };\n const parsedSession = ContextSessionSchema.safeParse(session);\n\n if (!parsedSession.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const save = await this.#saveSession(parsedSession.data, []);\n\n return save.isOk() ? Result.ok(parsedSession.data) : Result.fail(save.unwrapError());\n }\n\n async delete(sessionId: string, hard = false): Promise<Result<AgentDevKitErrorCode, boolean>> {\n const current = await this.#readSessionById(sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n if (hard) {\n const remove = await this.#dataStore.remove(this.#sessionDirectory(current.unwrap().session));\n return remove.isOk() ? Result.ok(true) : Result.fail(remove.unwrapError());\n }\n\n const updated = await this.#setStatus(sessionId, \"deleted\");\n return updated.isOk() ? Result.ok(true) : Result.fail(updated.unwrapError());\n }\n\n async list(\n input: ListContextSessionsInput = {},\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionIndex[]>> {\n const entries = await this.#allSessionReferences(input.projectId);\n\n if (entries.isErr()) {\n return Result.fail(entries.unwrapError());\n }\n\n const status = input.status ?? \"active\";\n const query = input.query?.trim();\n const indexes: ContextSessionIndex[] = [];\n\n for (const session of entries.unwrap()) {\n const index = await this.#readIndex(session);\n\n if (index.isErr()) {\n return Result.fail(index.unwrapError());\n }\n\n indexes.push(index.unwrap());\n }\n\n return Result.ok(\n indexes\n .filter((index) => status === \"all\" || index.status === status)\n .filter((index) => query === undefined || this.#indexMatches(index, query))\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))\n .slice(0, input.limit ?? 20),\n );\n }\n\n async resume(sessionId: string): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>> {\n const current = await this.#readSessionById(sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n if (current.unwrap().session.status !== \"active\") {\n const updated = await this.#setStatus(sessionId, \"active\");\n\n if (updated.isErr()) {\n return Result.fail(updated.unwrapError());\n }\n }\n\n return this.show({ includeMessages: true, limit: 20, sessionId });\n }\n\n async search(\n input: SearchContextSessionsInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionSearchResult[]>> {\n const entries = await this.#allSessionReferences(input.projectId);\n\n if (entries.isErr()) {\n return Result.fail(entries.unwrapError());\n }\n\n const results: ContextSessionSearchResult[] = [];\n\n for (const reference of entries.unwrap()) {\n const index = await this.#readIndex(reference);\n const messages = await this.#readMessages(reference.session);\n\n if (index.isErr()) {\n return Result.fail(index.unwrapError());\n }\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const haystack = [\n index.unwrap().title,\n index.unwrap().preview,\n index.unwrap().keywords.join(\" \"),\n ...messages.unwrap().map((message) => message.content),\n ].join(\" \");\n const score = scoreText(haystack, input.query);\n\n if (score > 0 && index.unwrap().status !== \"deleted\") {\n results.push({ ...index.unwrap(), score });\n }\n }\n\n return Result.ok(\n results\n .sort(\n (left, right) =>\n right.score - left.score || right.updatedAt.localeCompare(left.updatedAt),\n )\n .slice(0, input.limit ?? 20),\n );\n }\n\n async show(\n input: ShowContextSessionInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>> {\n const current = await this.#readSessionById(input.sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const index = await this.#readIndex(current.unwrap());\n\n if (index.isErr()) {\n return Result.fail(index.unwrapError());\n }\n\n if (input.includeMessages !== true) {\n return Result.ok({ index: index.unwrap(), session: current.unwrap().session });\n }\n\n const messages = await this.#readMessages(current.unwrap().session);\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n return Result.ok({\n index: index.unwrap(),\n messages: messages.unwrap().slice(-(input.limit ?? messages.unwrap().length)),\n session: current.unwrap().session,\n });\n }\n\n async #allSessionReferences(\n projectId?: string,\n ): Promise<Result<AgentDevKitErrorCode, Array<{ session: ContextSession }>>> {\n const references: Array<{ session: ContextSession }> = [];\n const roots =\n projectId === undefined ? await this.#sessionRoots() : [this.#projectSessionsRoot(projectId)];\n\n for (const root of roots) {\n const exists = await this.#dataStore.exists(root);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n continue;\n }\n\n const entries = await this.#dataStore.list(root);\n\n if (entries.isErr()) {\n return Result.fail(entries.unwrapError());\n }\n\n for (const entry of entries.unwrap().filter((candidate) => candidate.kind === \"directory\")) {\n const session = await this.#readSessionAt({\n namespace: \"context\",\n segments: [...entry.path.segments, \"session.json\"],\n });\n\n if (session.isOk()) {\n references.push({ session: session.unwrap() });\n }\n }\n }\n\n return Result.ok(references);\n }\n\n async #readSessionById(\n sessionId: string,\n ): Promise<Result<AgentDevKitErrorCode, { session: ContextSession }>> {\n const references = await this.#allSessionReferences();\n\n if (references.isErr()) {\n return Result.fail(references.unwrapError());\n }\n\n const found = references.unwrap().find((reference) => reference.session.id === sessionId);\n\n return found === undefined ? Result.fail(ErrorCodes.InvalidInput) : Result.ok(found);\n }\n\n async #readSessionAt(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, ContextSession>> {\n const payload = await this.#dataStore.readJson<unknown>(path);\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = ContextSessionSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #saveSession(\n session: ContextSession,\n messages: ContextMessage[],\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n const sessionWrite = await this.#dataStore.writeJson(\n this.#sessionPath(session, \"session.json\"),\n session,\n );\n\n if (sessionWrite.isErr()) {\n return Result.fail(sessionWrite.unwrapError());\n }\n\n const indexWrite = await this.#dataStore.writeJson(\n this.#sessionPath(session, \"index.json\"),\n this.#index(session, messages),\n );\n\n if (indexWrite.isErr()) {\n return Result.fail(indexWrite.unwrapError());\n }\n\n return this.#dataStore.writeText(\n this.#sessionPath(session, \"summary.md\"),\n this.#summary(session, messages),\n );\n }\n\n async #setStatus(\n sessionId: string,\n status: ContextSessionStatus,\n ): Promise<Result<AgentDevKitErrorCode, ContextSession>> {\n const current = await this.#readSessionById(sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const messages = await this.#readMessages(current.unwrap().session);\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const session: ContextSession = {\n ...current.unwrap().session,\n status,\n updatedAt: this.#now(),\n };\n const save = await this.#saveSession(session, messages.unwrap());\n\n return save.isOk() ? Result.ok(session) : Result.fail(save.unwrapError());\n }\n\n async #validateProjectExists(projectId: string): Promise<Result<AgentDevKitErrorCode, void>> {\n const path: AgentDataPath = {\n namespace: \"context\",\n segments: [\"projects\", projectId, \"project.json\"],\n };\n const exists = await this.#dataStore.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const project = await this.#dataStore.readJson<unknown>(path);\n\n if (project.isErr()) {\n return Result.fail(project.unwrapError());\n }\n\n return ContextProjectSchema.safeParse(project.unwrap()).success\n ? Result.ok(undefined)\n : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #sessionRoots(): Promise<AgentDataPath[]> {\n const roots: AgentDataPath[] = [{ namespace: \"context\", segments: [\"sessions\"] }];\n const projectsRoot: AgentDataPath = { namespace: \"context\", segments: [\"projects\"] };\n const exists = await this.#dataStore.exists(projectsRoot);\n\n if (exists.isErr() || !exists.unwrap()) {\n return roots;\n }\n\n const projects = await this.#dataStore.list(projectsRoot);\n\n if (projects.isErr()) {\n return roots;\n }\n\n return [\n ...roots,\n ...projects\n .unwrap()\n .filter((entry) => entry.kind === \"directory\")\n .map((entry) => this.#projectSessionsRoot(entry.name)),\n ];\n }\n\n async #readIndex(reference: {\n session: ContextSession;\n }): Promise<Result<AgentDevKitErrorCode, ContextSessionIndex>> {\n const payload = await this.#dataStore.readJson<unknown>(\n this.#sessionPath(reference.session, \"index.json\"),\n );\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = ContextSessionIndexSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #readMessages(\n session: ContextSession,\n ): Promise<Result<AgentDevKitErrorCode, ContextMessage[]>> {\n const path = this.#sessionPath(session, \"messages.jsonl\");\n const exists = await this.#dataStore.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n return Result.ok([]);\n }\n\n const messages = await this.#dataStore.readJsonl<unknown>(path);\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const parsed: ContextMessage[] = [];\n\n for (const message of messages.unwrap()) {\n const result = ContextMessageSchema.safeParse(message);\n\n if (!result.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n parsed.push(result.data);\n }\n\n return Result.ok(parsed);\n }\n\n #index(session: ContextSession, messages: ContextMessage[]): ContextSessionIndex {\n const preview = compactWhitespace(\n [...messages].reverse().find((message) => message.content.trim().length > 0)?.content ?? \"\",\n ).slice(0, 240);\n\n return ContextSessionIndexSchema.parse({\n schema: \"agent-devkit.context-session-index/v1\",\n createdAt: session.createdAt,\n keywords: keywordsFor([session.title, preview, session.tags.join(\" \")]),\n lastMessageAt: session.lastMessageAt,\n messageCount: messages.length,\n preview,\n projectId: session.projectId,\n sessionId: session.id,\n status: session.status,\n title: session.title,\n updatedAt: session.updatedAt,\n });\n }\n\n #indexMatches(index: ContextSessionIndex, query: string): boolean {\n return [index.title, index.preview, index.keywords.join(\" \")]\n .join(\" \")\n .toLowerCase()\n .includes(query.toLowerCase());\n }\n\n #summary(session: ContextSession, messages: ContextMessage[]): string {\n return [`# ${session.title}`, \"\", `Messages: ${messages.length}`, \"\"].join(\"\\n\");\n }\n\n #sessionDirectory(session: ContextSession): AgentDataPath {\n return session.projectId === undefined\n ? { namespace: \"context\", segments: [\"sessions\", session.id] }\n : {\n namespace: \"context\",\n segments: [\"projects\", session.projectId, \"sessions\", session.id],\n };\n }\n\n #sessionPath(session: ContextSession, fileName: string): AgentDataPath {\n return {\n ...this.#sessionDirectory(session),\n segments: [...this.#sessionDirectory(session).segments, fileName],\n };\n }\n\n #projectSessionsRoot(projectId: string): AgentDataPath {\n return { namespace: \"context\", segments: [\"projects\", projectId, \"sessions\"] };\n }\n\n #now(): string {\n return this.#clock().toISOString();\n }\n}\n","import {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n type CapabilityInvocationContext,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ContextSessionsOptions,\n ContextSessionsOptionsSchema,\n type ContextSessionsResult,\n ContextSessionsResultSchema,\n} from \"./sessions.entities\";\nimport type { ContextSessionsRepositoryPort } from \"./sessions.repository\";\n\ntype ContextSessionsServiceDependencies = {\n repository: ContextSessionsRepositoryPort;\n};\n\nexport const contextSessionsCapabilityConfig = defineCapabilityConfig({\n id: \"context.sessions\",\n moduleId: \"context\",\n name: \"Context Sessions\",\n description: \"Create, search, resume and manage Agent DevKit context sessions.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class ContextSessionsService extends BaseCapabilityService<\n typeof contextSessionsCapabilityConfig,\n ContextSessionsServiceDependencies,\n ContextSessionsOptions,\n ContextSessionsResult\n> {\n readonly inputSchema = ContextSessionsOptionsSchema;\n readonly outputSchema = ContextSessionsResultSchema;\n readonly #repository: ContextSessionsRepositoryPort;\n\n constructor(dependencies: ContextSessionsServiceDependencies) {\n super(contextSessionsCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: ContextSessionsOptions,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionsResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const input = parsed.data;\n\n if (input.action === \"list\") {\n return (await this.#repository.list(input)).map((sessions) => ({\n action: \"list\",\n sessions,\n }));\n }\n\n if (input.action === \"create\") {\n return (await this.#repository.create(input)).map((session) => ({\n action: \"create\",\n session,\n }));\n }\n\n if (input.action === \"append-message\") {\n return (await this.#repository.appendMessage(input)).map((result) => ({\n action: \"append-message\",\n ...result,\n }));\n }\n\n if (input.action === \"show\") {\n return (await this.#repository.show(input)).map((result) => ({\n action: \"show\",\n ...result,\n }));\n }\n\n if (input.action === \"search\") {\n return (await this.#repository.search(input)).map((results) => ({\n action: \"search\",\n query: input.query,\n results,\n }));\n }\n\n if (input.action === \"resume\") {\n return (await this.#repository.resume(input.sessionId)).map((result) => ({\n action: \"resume\",\n index: result.index,\n messages: result.messages ?? [],\n session: result.session,\n }));\n }\n\n if (input.action === \"archive\") {\n return (await this.#repository.archive(input.sessionId)).map((result) => ({\n action: \"archive\",\n index: result.index,\n session: result.session,\n }));\n }\n\n return (await this.#repository.delete(input.sessionId, input.hard)).map((removed) => ({\n action: \"delete\",\n hard: input.hard === true,\n removed,\n sessionId: input.sessionId,\n }));\n }\n\n invoke(\n input: ContextSessionsOptions,\n _context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionsResult>> {\n return this.execute(input);\n }\n\n override approvalForInput(input: ContextSessionsOptions): CapabilityApproval {\n if (input.action === \"delete\" && input.hard === true) {\n return {\n reason: \"Context session hard delete removes durable memory.\",\n required: true,\n };\n }\n\n return { reason: \"Context session action is safe for local memory.\", required: false };\n }\n\n override effectsForInput(input: ContextSessionsOptions): CapabilityEffect[] {\n if (input.action === \"list\" || input.action === \"show\" || input.action === \"search\") {\n return [{ operation: \"read\", scope: \"none\" }];\n }\n\n if (input.action === \"delete\" && input.hard === true) {\n return [{ operation: \"delete\", scope: \"global\" }];\n }\n\n return [{ operation: \"write\", scope: \"global\" }];\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { contextProjectsCapabilityConfig } from \"./capabilities/projects/projects.service\";\nimport { contextSessionsCapabilityConfig } from \"./capabilities/sessions/sessions.service\";\n\nexport const contextModuleConfig = defineModuleConfig({\n id: \"context\",\n name: \"Context\",\n description: \"Agent DevKit projects, sessions and durable context foundations.\",\n capabilities: [contextProjectsCapabilityConfig.id, contextSessionsCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/context/context.surface.test.ts\",\n \"src/modules/context/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDataStore } from \"../../infra/bases/data_store\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../infra/data\";\nimport {\n ContextProjectsRepository,\n type ContextProjectsRepositoryPort,\n} from \"./capabilities/projects/projects.repository\";\nimport { ContextProjectsService } from \"./capabilities/projects/projects.service\";\nimport {\n ContextSessionsRepository,\n type ContextSessionsRepositoryPort,\n} from \"./capabilities/sessions/sessions.repository\";\nimport { ContextSessionsService } from \"./capabilities/sessions/sessions.service\";\nimport { contextModuleConfig } from \"./context.config\";\n\nexport type ContextModuleBindOptions = {\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n};\n\nexport type ContextModuleCapabilities = {\n projects: ContextProjectsService;\n sessions: ContextSessionsService;\n};\n\nexport type ContextModuleBinding = ModuleBinding<\n typeof contextModuleConfig,\n ContextModuleCapabilities\n>;\n\ntype ContextModuleBinderDependencies = {\n projectsRepository: (options: ContextModuleBindOptions) => ContextProjectsRepositoryPort;\n sessionsRepository: (options: ContextModuleBindOptions) => ContextSessionsRepositoryPort;\n};\n\nconst defaultDependencies: ContextModuleBinderDependencies = {\n projectsRepository: (options) => new ContextProjectsRepository(normalizeOptions(options)),\n sessionsRepository: (options) => new ContextSessionsRepository(normalizeOptions(options)),\n};\n\nfunction normalizeOptions(options: ContextModuleBindOptions): ContextModuleBindOptions {\n if (options.dataStore !== undefined || options.homeDirectory === undefined) {\n return options;\n }\n\n return {\n ...options,\n dataStore: new LocalAgentDataStore({\n rootDirectory: `${options.homeDirectory}/.agent-devkit/data`,\n }),\n };\n}\n\nexport class ContextModuleBinder extends ModuleBinder<\n ContextModuleBindOptions,\n typeof contextModuleConfig,\n ContextModuleCapabilities\n> {\n readonly #dependencies: ContextModuleBinderDependencies;\n\n constructor(dependencies: ContextModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: ContextModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, ContextModuleBinding> {\n return defineModuleBinding({\n config: contextModuleConfig,\n capabilities: {\n projects: new ContextProjectsService({\n repository: this.#dependencies.projectsRepository(options),\n }),\n sessions: new ContextSessionsService({\n repository: this.#dependencies.sessionsRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createContextModuleBindings(\n options: ContextModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, ContextModuleBinding> {\n return new ContextModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { contextProjectsCapabilityConfig } from \"./capabilities/projects/projects.service\";\nimport { contextSessionsCapabilityConfig } from \"./capabilities/sessions/sessions.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createContextSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"context\", moduleDirectory));\n\n return {\n moduleId: \"context\",\n capabilities: async () =>\n Result.ok(\n surfaceCapabilitiesFromConfigs([\n contextProjectsCapabilityConfig,\n contextSessionsCapabilityConfig,\n ]),\n ),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { z } from \"zod\";\nimport {\n CharacterBehaviorSchema,\n CharacterDetailLevelSchema,\n CharacterIdSchema,\n CharacterToneSchema,\n} from \"./character\";\n\nexport const PromptMessageRoleSchema = z.enum([\"assistant\", \"system\", \"tool\", \"user\"]);\n\nexport const PromptMessageSchema = z\n .object({\n content: z.string(),\n createdAt: z.string().datetime().optional(),\n id: z.string().min(1).optional(),\n role: PromptMessageRoleSchema,\n })\n .strict();\n\nexport const PromptProjectContextSchema = z\n .object({\n description: z.string().optional(),\n id: z.string().min(1),\n name: z.string().min(1),\n path: z.string().optional(),\n tags: z.array(z.string()).default([]),\n })\n .strict();\n\nexport const PromptSessionContextSchema = z\n .object({\n id: z.string().min(1),\n messageCount: z.number().int().nonnegative(),\n title: z.string().min(1),\n })\n .strict();\n\nexport const PromptKnowledgeContextSchema = z\n .object({\n content: z.string().min(1),\n id: z.string().min(1),\n source: z.string().min(1).optional(),\n })\n .strict();\n\nexport const PromptToolDescriptorSchema = z\n .object({\n description: z.string().min(1),\n id: z.string().min(1),\n inputSchema: z.record(z.string(), z.unknown()).optional(),\n risk: z.string().min(1),\n })\n .strict();\n\nexport const PromptOutputContractSchema = z\n .object({\n format: z.enum([\"json\", \"text\"]).default(\"text\"),\n language: z.string().min(1).default(\"pt-BR\"),\n })\n .strict();\n\nexport const AgentPromptSchema = z\n .object({\n agent: z\n .object({\n behavior: CharacterBehaviorSchema,\n characterId: CharacterIdSchema,\n detailLevel: CharacterDetailLevelSchema,\n name: z.string().min(1),\n tone: CharacterToneSchema,\n traits: z.array(z.string().min(1)).default([]),\n })\n .strict(),\n context: z\n .object({\n knowledge: z.array(PromptKnowledgeContextSchema).default([]),\n project: PromptProjectContextSchema.optional(),\n session: PromptSessionContextSchema.optional(),\n })\n .strict(),\n locale: z.string().min(1).default(\"pt-BR\"),\n messages: z.array(PromptMessageSchema),\n output: PromptOutputContractSchema.default({ format: \"text\", language: \"pt-BR\" }),\n policies: z\n .object({\n allowToolCalls: z.boolean(),\n approvalRequired: z.boolean(),\n maxToolCalls: z.number().int().nonnegative(),\n })\n .strict(),\n schema: z.literal(\"agent-devkit.prompt/v1\"),\n task: z\n .object({\n intent: z.string().min(1).optional(),\n userMessage: z.string().min(1),\n })\n .strict(),\n tools: z.array(PromptToolDescriptorSchema).default([]),\n })\n .strict();\n\nexport type PromptMessage = z.infer<typeof PromptMessageSchema>;\nexport type AgentPrompt = z.infer<typeof AgentPromptSchema>;\nexport type PromptToolDescriptor = z.infer<typeof PromptToolDescriptorSchema>;\n","import type {\n CapabilityInvocationInterface,\n CapabilityRepositoryPort,\n} from \"../../../../infra/bases/capability\";\nimport type { CharacterDefinition, CharacterId } from \"../../../../infra/bases/character\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport type { AgentPrompt, PromptMessage } from \"../../../../infra/bases/prompt\";\nimport { AgentPromptSchema } from \"../../../../infra/bases/prompt\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type { ContextProject } from \"../../../context/capabilities/projects/projects.entities\";\nimport type { ContextProjectsRepositoryPort } from \"../../../context/capabilities/projects/projects.repository\";\nimport type {\n ContextMessage,\n ContextSession,\n ContextSessionOrigin,\n} from \"../../../context/capabilities/sessions/sessions.entities\";\nimport type { ContextSessionsRepositoryPort } from \"../../../context/capabilities/sessions/sessions.repository\";\nimport type { PersonalizationRepositoryPort } from \"../../../user/capabilities/personalization/personalization.repository\";\nimport type { ConversationChatOptions } from \"./chat.entities\";\n\nexport type ConversationPromptPreparation = {\n messages: ContextMessage[];\n prompt: AgentPrompt;\n projectId?: string;\n sessionId: string;\n};\n\nexport type ConversationChatRepositoryOptions = {\n clock?: () => Date;\n personalizationRepository: PersonalizationRepositoryPort;\n projectsRepository: ContextProjectsRepositoryPort;\n sessionsRepository: ContextSessionsRepositoryPort;\n};\n\nexport interface ConversationChatRepositoryPort extends CapabilityRepositoryPort {\n appendAssistantMessage(\n sessionId: string,\n content: string,\n ): Promise<Result<AgentDevKitErrorCode, ContextMessage[]>>;\n preparePrompt(\n input: ConversationChatOptions,\n origin: CapabilityInvocationInterface,\n ): Promise<Result<AgentDevKitErrorCode, ConversationPromptPreparation>>;\n}\n\nfunction originFromInterface(origin: CapabilityInvocationInterface): ContextSessionOrigin {\n return origin;\n}\n\nfunction promptMessages(messages: ContextMessage[]): PromptMessage[] {\n return messages.map((message) => ({\n content: message.content,\n createdAt: message.createdAt,\n id: message.id,\n role: message.role === \"tool\" ? \"tool\" : message.role,\n }));\n}\n\nfunction characterName(character: CharacterDefinition): string {\n return character.name ?? character.id;\n}\n\nfunction compact(value: string): string {\n return value.replaceAll(/\\s+/g, \" \").trim();\n}\n\nexport class ConversationChatRepository implements ConversationChatRepositoryPort {\n readonly repositoryId = \"conversation.chat.repository\";\n readonly #clock: () => Date;\n readonly #personalizationRepository: PersonalizationRepositoryPort;\n readonly #projectsRepository: ContextProjectsRepositoryPort;\n readonly #sessionsRepository: ContextSessionsRepositoryPort;\n\n constructor(options: ConversationChatRepositoryOptions) {\n this.#clock = options.clock ?? (() => new Date());\n this.#personalizationRepository = options.personalizationRepository;\n this.#projectsRepository = options.projectsRepository;\n this.#sessionsRepository = options.sessionsRepository;\n }\n\n async appendAssistantMessage(\n sessionId: string,\n content: string,\n ): Promise<Result<AgentDevKitErrorCode, ContextMessage[]>> {\n const append = await this.#sessionsRepository.appendMessage({\n content,\n role: \"assistant\",\n sessionId,\n });\n\n if (append.isErr()) {\n return Result.fail(append.unwrapError());\n }\n\n const details = await this.#sessionsRepository.show({\n includeMessages: true,\n sessionId,\n });\n\n if (details.isErr()) {\n return Result.fail(details.unwrapError());\n }\n\n return Result.ok(details.unwrap().messages ?? []);\n }\n\n async preparePrompt(\n input: ConversationChatOptions,\n origin: CapabilityInvocationInterface,\n ): Promise<Result<AgentDevKitErrorCode, ConversationPromptPreparation>> {\n if (input.action !== \"send\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const character = await this.#loadCharacter(input.characterId);\n\n if (character.isErr()) {\n return Result.fail(character.unwrapError());\n }\n\n const project = await this.#loadProject(input.projectId);\n\n if (project.isErr()) {\n return Result.fail(project.unwrapError());\n }\n\n const session = await this.#ensureSession(input, originFromInterface(origin));\n\n if (session.isErr()) {\n return Result.fail(session.unwrapError());\n }\n\n const append = await this.#sessionsRepository.appendMessage({\n content: input.message,\n role: \"user\",\n sessionId: session.unwrap().id,\n });\n\n if (append.isErr()) {\n return Result.fail(append.unwrapError());\n }\n\n const details = await this.#sessionsRepository.show({\n includeMessages: true,\n sessionId: session.unwrap().id,\n });\n\n if (details.isErr()) {\n return Result.fail(details.unwrapError());\n }\n\n const loadedProject =\n project.unwrap() ??\n (details.unwrap().session.projectId === undefined\n ? undefined\n : await this.#loadProject(details.unwrap().session.projectId).then((result) =>\n result.isOk() ? result.unwrap() : undefined,\n ));\n const allMessages = details.unwrap().messages ?? [];\n const messagesForPrompt = input.includeHistory === false ? allMessages.slice(-1) : allMessages;\n const prompt = this.#prompt({\n character: character.unwrap(),\n messages: messagesForPrompt,\n project: loadedProject,\n session: details.unwrap().session,\n userMessage: input.message,\n });\n\n if (prompt.isErr()) {\n return Result.fail(prompt.unwrapError());\n }\n\n return Result.ok({\n messages: allMessages,\n projectId: loadedProject?.id,\n prompt: prompt.unwrap(),\n sessionId: details.unwrap().session.id,\n });\n }\n\n async #ensureSession(\n input: Extract<ConversationChatOptions, { action: \"send\" }>,\n origin: ContextSessionOrigin,\n ): Promise<Result<AgentDevKitErrorCode, ContextSession>> {\n if (input.sessionId !== undefined) {\n const details = await this.#sessionsRepository.show({\n includeMessages: false,\n sessionId: input.sessionId,\n });\n\n if (details.isErr()) {\n return Result.fail(details.unwrapError());\n }\n\n if (input.projectId !== undefined && details.unwrap().session.projectId !== input.projectId) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(details.unwrap().session);\n }\n\n const created = await this.#sessionsRepository.create({\n origin,\n projectId: input.projectId,\n title: compact(input.message).slice(0, 80) || \"Untitled chat\",\n });\n\n return created.isOk() ? Result.ok(created.unwrap()) : Result.fail(created.unwrapError());\n }\n\n async #loadCharacter(\n characterId?: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition>> {\n const profile = await this.#personalizationRepository.loadProfile();\n\n if (profile.isErr()) {\n return Result.fail(profile.unwrapError());\n }\n\n if (characterId === undefined || characterId === profile.unwrap().currentCharacter.id) {\n return Result.ok(profile.unwrap().currentCharacter);\n }\n\n const characters = await this.#personalizationRepository.loadCharacters(characterId);\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n const character = characters.unwrap().find((candidate) => candidate.id === characterId);\n\n if (character === undefined || !character.active) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const { custom, selected, spritePath, ...definition } = character;\n void custom;\n void selected;\n void spritePath;\n\n return Result.ok(definition);\n }\n\n async #loadProject(\n projectId?: string,\n ): Promise<Result<AgentDevKitErrorCode, ContextProject | undefined>> {\n if (projectId === undefined) {\n return Result.ok(undefined);\n }\n\n const project = await this.#projectsRepository.show(projectId);\n\n return project.isOk() ? Result.ok(project.unwrap()) : Result.fail(project.unwrapError());\n }\n\n #prompt(input: {\n character: CharacterDefinition;\n messages: ContextMessage[];\n project?: ContextProject;\n session: ContextSession;\n userMessage: string;\n }): Result<AgentDevKitErrorCode, AgentPrompt> {\n const prompt = AgentPromptSchema.safeParse({\n agent: {\n behavior: input.character.profile.behavior,\n characterId: input.character.id,\n detailLevel: input.character.profile.detailLevel,\n name: characterName(input.character),\n tone: input.character.profile.tone,\n traits: input.character.profile.traits,\n },\n context: {\n knowledge: [],\n project:\n input.project === undefined\n ? undefined\n : {\n description: input.project.description,\n id: input.project.id,\n name: input.project.name,\n path: input.project.path,\n tags: input.project.tags,\n },\n session: {\n id: input.session.id,\n messageCount: input.messages.length,\n title: input.session.title,\n },\n },\n locale: \"pt-BR\",\n messages: promptMessages(input.messages),\n output: { format: \"text\", language: \"pt-BR\" },\n policies: {\n allowToolCalls: false,\n approvalRequired: false,\n maxToolCalls: 0,\n },\n schema: \"agent-devkit.prompt/v1\",\n task: {\n userMessage: input.userMessage,\n },\n tools: [],\n });\n\n return prompt.success ? Result.ok(prompt.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n}\n","import { z } from \"zod\";\nimport { BrainGenerationOptionsSchema, BrainResponseSchema } from \"../../../../infra/bases/brain\";\nimport { CharacterIdSchema } from \"../../../../infra/bases/character\";\nimport { AgentPromptSchema } from \"../../../../infra/bases/prompt\";\nimport { ContextMessageSchema } from \"../../../context/capabilities/sessions/sessions.entities\";\n\nexport const ConversationChatOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"send\"),\n brain: BrainGenerationOptionsSchema.optional(),\n characterId: CharacterIdSchema.optional(),\n includeHistory: z.boolean().optional(),\n message: z.string().min(1),\n projectId: z.string().min(1).optional(),\n sessionId: z.string().min(1).optional(),\n })\n .strict(),\n]);\n\nexport type ConversationChatOptions = z.infer<typeof ConversationChatOptionsSchema>;\n\nexport const ConversationChatResultSchema = z\n .object({\n action: z.literal(\"send\"),\n brain: BrainResponseSchema,\n messages: z.array(ContextMessageSchema),\n projectId: z.string().min(1).optional(),\n prompt: AgentPromptSchema,\n reply: z.string(),\n sessionId: z.string().min(1),\n })\n .strict();\n\nexport type ConversationChatResult = z.infer<typeof ConversationChatResultSchema>;\n","import { z } from \"zod\";\nimport type { AgentDevKitErrorCode } from \"./errors\";\nimport { AgentPromptSchema } from \"./prompt\";\nimport type { Result } from \"./result\";\n\nexport const BrainGenerationOptionsSchema = z\n .object({\n maxInputTokens: z.number().int().positive().optional(),\n maxOutputTokens: z.number().int().positive().optional(),\n model: z.string().min(1).optional(),\n provider: z.enum([\"local\", \"mock\"]).default(\"local\"),\n role: z.enum([\"agent\", \"chat\"]).optional(),\n seed: z.number().int().optional(),\n stop: z.array(z.string().min(1)).optional(),\n stream: z.boolean().optional(),\n temperature: z.number().min(0).max(2).optional(),\n topK: z.number().int().positive().optional(),\n topP: z.number().min(0).max(1).optional(),\n })\n .strict();\n\nexport const BrainRequestSchema = z\n .object({\n options: BrainGenerationOptionsSchema.default({ provider: \"local\" }),\n prompt: AgentPromptSchema,\n schema: z.literal(\"agent-devkit.brain-request/v1\"),\n })\n .strict();\n\nexport const BrainToolCallSchema = z\n .object({\n arguments: z.record(z.string(), z.unknown()).default({}),\n id: z.string().min(1).optional(),\n name: z.string().min(1),\n })\n .strict();\n\nexport const BrainResponseSchema = z\n .object({\n finishReason: z.enum([\"error\", \"length\", \"stop\", \"tool-call\"]).optional(),\n model: z.string().min(1).optional(),\n provider: z.string().min(1).optional(),\n schema: z.literal(\"agent-devkit.brain-response/v1\"),\n text: z.string(),\n toolCalls: z.array(BrainToolCallSchema).optional(),\n usage: z\n .object({\n inputTokens: z.number().int().nonnegative().optional(),\n outputTokens: z.number().int().nonnegative().optional(),\n totalTokens: z.number().int().nonnegative().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type BrainGenerationOptions = z.infer<typeof BrainGenerationOptionsSchema>;\nexport type BrainRequest = z.infer<typeof BrainRequestSchema>;\nexport type BrainResponse = z.infer<typeof BrainResponseSchema>;\nexport type BrainToolCall = z.infer<typeof BrainToolCallSchema>;\n\n/** Live token callback for streaming-capable providers. */\nexport type BrainStreamHandler = (delta: string) => void;\n\n/** Result of a JSON-schema-constrained generation used by the agent loop. */\nexport type BrainStructuredResponse = {\n json: unknown;\n raw: string;\n};\n\nexport interface BrainProviderPort {\n generate(request: BrainRequest): Promise<Result<AgentDevKitErrorCode, BrainResponse>>;\n /**\n * Optional streaming path. Emits text deltas via `onToken` while still\n * resolving to the complete `BrainResponse` for persistence. Providers that\n * cannot stream simply omit this method; callers fall back to `generate`.\n */\n generateStream?(\n request: BrainRequest,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>>;\n /**\n * Optional structured path for the agent loop: generate output shaped by a\n * JSON schema and return the parsed value plus the raw text. Providers that\n * cannot constrain output omit this method; the agent falls back gracefully.\n */\n generateStructured?(\n request: BrainRequest,\n jsonSchema: Record<string, unknown>,\n ): Promise<Result<AgentDevKitErrorCode, BrainStructuredResponse>>;\n}\n","import type {\n BrainProviderPort,\n BrainRequest,\n BrainStreamHandler,\n} from \"../../../../infra/bases/brain\";\nimport {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n type CapabilityInvocationContext,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ConversationChatOptions,\n ConversationChatOptionsSchema,\n type ConversationChatResult,\n ConversationChatResultSchema,\n} from \"./chat.entities\";\nimport type { ConversationChatRepositoryPort } from \"./chat.repository\";\n\ntype ConversationChatServiceDependencies = {\n brainProvider: BrainProviderPort;\n repository: ConversationChatRepositoryPort;\n};\n\nexport const conversationChatCapabilityConfig = defineCapabilityConfig({\n id: \"conversation.chat\",\n moduleId: \"conversation\",\n name: \"Conversation chat\",\n description: \"Send a chat message using local personalization, projects and session memory.\",\n kind: \"brain-assisted\",\n risk: \"writes-global-state\",\n} as const);\n\nexport { MockBrainProvider } from \"../../../../infra/brain/mock_provider\";\n\nexport class ConversationChatService extends BaseCapabilityService<\n typeof conversationChatCapabilityConfig,\n ConversationChatServiceDependencies,\n ConversationChatOptions,\n ConversationChatResult\n> {\n readonly inputSchema = ConversationChatOptionsSchema;\n readonly outputSchema = ConversationChatResultSchema;\n readonly #brainProvider: BrainProviderPort;\n readonly #repository: ConversationChatRepositoryPort;\n\n constructor(dependencies: ConversationChatServiceDependencies) {\n super(conversationChatCapabilityConfig, dependencies);\n this.#brainProvider = dependencies.brainProvider;\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: ConversationChatOptions,\n ): Promise<Result<AgentDevKitErrorCode, ConversationChatResult>> {\n return this.#run(options, { interface: \"cli\" });\n }\n\n invoke(\n input: ConversationChatOptions,\n context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, ConversationChatResult>> {\n return this.#run(input, context);\n }\n\n /**\n * Interactive streaming variant used by the CLI/TUI. Emits reply tokens via\n * `onToken` while still resolving to the same `ConversationChatResult` and\n * persisting session memory. MCP and `agent run` use the buffered `execute`.\n */\n stream(\n input: ConversationChatOptions,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, ConversationChatResult>> {\n return this.#run(input, { interface: \"cli\" }, onToken);\n }\n\n override effectsForInput(): CapabilityEffect[] {\n return [{ operation: \"write\", scope: \"global\" }];\n }\n\n override approvalForInput(): CapabilityApproval {\n return {\n reason: \"Conversation chat writes local session memory without tool calls.\",\n required: false,\n };\n }\n\n async #run(\n options: ConversationChatOptions,\n context: Pick<CapabilityInvocationContext, \"interface\">,\n onToken?: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, ConversationChatResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const prepared = await this.#repository.preparePrompt(parsed.data, context.interface);\n\n if (prepared.isErr()) {\n return Result.fail(prepared.unwrapError());\n }\n\n const request: BrainRequest = {\n options: parsed.data.brain ?? { provider: \"local\" },\n prompt: prepared.unwrap().prompt,\n schema: \"agent-devkit.brain-request/v1\",\n };\n const brain =\n onToken !== undefined && this.#brainProvider.generateStream !== undefined\n ? await this.#brainProvider.generateStream(request, onToken)\n : await this.#brainProvider.generate(request);\n\n if (brain.isErr()) {\n return Result.fail(brain.unwrapError());\n }\n\n const messages = await this.#repository.appendAssistantMessage(\n prepared.unwrap().sessionId,\n brain.unwrap().text,\n );\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const result = this.outputSchema.safeParse({\n action: \"send\",\n brain: brain.unwrap(),\n messages: messages.unwrap(),\n projectId: prepared.unwrap().projectId,\n prompt: prepared.unwrap().prompt,\n reply: brain.unwrap().text,\n sessionId: prepared.unwrap().sessionId,\n });\n\n return result.success ? Result.ok(result.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { conversationChatCapabilityConfig } from \"./capabilities/chat/chat.service\";\n\nexport const conversationModuleConfig = defineModuleConfig({\n id: \"conversation\",\n name: \"Conversation\",\n description: \"Agent DevKit chat runtime backed by personalization, projects and sessions.\",\n capabilities: [conversationChatCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/conversation/conversation.surface.test.ts\",\n \"src/modules/conversation/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { BrainProviderPort } from \"../../infra/bases/brain\";\nimport type { AgentDataStore } from \"../../infra/bases/data_store\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../infra/data\";\nimport { ContextProjectsRepository } from \"../context/capabilities/projects/projects.repository\";\nimport { ContextSessionsRepository } from \"../context/capabilities/sessions/sessions.repository\";\nimport { PersonalizationRepository } from \"../user/capabilities/personalization/personalization.repository\";\nimport {\n ConversationChatRepository,\n type ConversationChatRepositoryPort,\n} from \"./capabilities/chat/chat.repository\";\nimport { ConversationChatService, MockBrainProvider } from \"./capabilities/chat/chat.service\";\nimport { conversationModuleConfig } from \"./conversation.config\";\n\nexport type ConversationModuleBindOptions = {\n brainProvider?: BrainProviderPort;\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n};\n\nexport type ConversationModuleCapabilities = {\n chat: ConversationChatService;\n};\n\nexport type ConversationModuleBinding = ModuleBinding<\n typeof conversationModuleConfig,\n ConversationModuleCapabilities\n>;\n\ntype ConversationModuleBinderDependencies = {\n chatRepository: (options: ConversationModuleBindOptions) => ConversationChatRepositoryPort;\n};\n\nfunction normalizeOptions(options: ConversationModuleBindOptions): ConversationModuleBindOptions {\n if (options.dataStore !== undefined || options.homeDirectory === undefined) {\n return options;\n }\n\n return {\n ...options,\n dataStore: new LocalAgentDataStore({\n rootDirectory: `${options.homeDirectory}/.agent-devkit/data`,\n }),\n };\n}\n\nconst defaultDependencies: ConversationModuleBinderDependencies = {\n chatRepository: (options) => {\n const normalized = normalizeOptions(options);\n const dataStore = normalized.dataStore;\n\n return new ConversationChatRepository({\n personalizationRepository: new PersonalizationRepository({\n dataStore,\n homeDirectory: normalized.homeDirectory,\n }),\n projectsRepository: new ContextProjectsRepository({ dataStore }),\n sessionsRepository: new ContextSessionsRepository({ dataStore }),\n });\n },\n};\n\nexport class ConversationModuleBinder extends ModuleBinder<\n ConversationModuleBindOptions,\n typeof conversationModuleConfig,\n ConversationModuleCapabilities\n> {\n readonly #dependencies: ConversationModuleBinderDependencies;\n\n constructor(dependencies: ConversationModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: ConversationModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, ConversationModuleBinding> {\n return defineModuleBinding({\n config: conversationModuleConfig,\n capabilities: {\n chat: new ConversationChatService({\n brainProvider: options.brainProvider ?? new MockBrainProvider(),\n repository: this.#dependencies.chatRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createConversationModuleBindings(\n options: ConversationModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, ConversationModuleBinding> {\n return new ConversationModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { conversationChatCapabilityConfig } from \"./capabilities/chat/chat.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createConversationSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"conversation\", moduleDirectory));\n\n return {\n moduleId: \"conversation\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([conversationChatCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../../../infra/data\";\nimport {\n type LogCategory,\n type LogCategorySelection,\n type LogEvent,\n type LogsFileSummary,\n type TechnicalLogRecord,\n TechnicalLogRecordSchema,\n type UsageLogRecord,\n UsageLogRecordSchema,\n} from \"./analysis.entities\";\n\nexport type LogsAnalysisRepositoryOptions = {\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n stateDirectory?: string;\n};\n\nexport interface LogsAnalysisRepositoryPort extends CapabilityRepositoryPort {\n logsPath(): string;\n listFiles(\n category?: LogCategorySelection,\n ): Promise<Result<AgentDevKitErrorCode, LogsFileSummary[]>>;\n readEvents(\n date?: string,\n category?: LogCategorySelection,\n ): Promise<Result<AgentDevKitErrorCode, LogEvent[]>>;\n}\n\ntype LogFileReference = {\n file: string;\n path: string;\n};\n\nfunction stateDirectory(options: LogsAnalysisRepositoryOptions): string {\n return options.stateDirectory ?? join(options.homeDirectory ?? homedir(), \".agent-devkit\");\n}\n\nfunction fileInfo(file: string): { category: LogCategory; date: string } | undefined {\n const usage = /^usage-(\\d{4}-\\d{2}-\\d{2})\\.jsonl$/.exec(file);\n if (usage?.[1] !== undefined) {\n return { category: \"usage\", date: usage[1] };\n }\n\n const technical = /^technical-(\\d{4}-\\d{2}-\\d{2})\\.jsonl$/.exec(file);\n if (technical?.[1] !== undefined) {\n return { category: \"technical\", date: technical[1] };\n }\n\n return undefined;\n}\n\nfunction categoryMatches(\n category: LogCategory,\n selection: LogCategorySelection = \"usage\",\n): boolean {\n return selection === \"all\" || selection === category;\n}\n\nfunction toEvent(\n record: TechnicalLogRecord | UsageLogRecord,\n source: string,\n line: number,\n): LogEvent {\n return {\n ...record,\n date: record.timestamp.slice(0, 10),\n line,\n source,\n };\n}\n\nfunction parseEvents(content: string, source: string): LogEvent[] {\n return content\n .split(\"\\n\")\n .map((line, index) => ({ index, line: line.trim() }))\n .filter(({ line }) => line.length > 0)\n .flatMap(({ index, line }) => {\n try {\n const payload = JSON.parse(line);\n const parsed =\n payload.category === \"technical\"\n ? TechnicalLogRecordSchema.safeParse(payload)\n : UsageLogRecordSchema.safeParse(payload);\n return parsed.success ? [toEvent(parsed.data, source, index + 1)] : [];\n } catch {\n return [];\n }\n });\n}\n\nexport class LogsAnalysisRepository implements LogsAnalysisRepositoryPort {\n readonly repositoryId = \"logs.analysis.repository\";\n readonly #dataStore: AgentDataStore;\n readonly #legacyLogsDirectory: string;\n readonly #logsDirectory: string;\n\n constructor(options: LogsAnalysisRepositoryOptions = {}) {\n const state = stateDirectory(options);\n this.#dataStore =\n options.dataStore ?? new LocalAgentDataStore({ rootDirectory: join(state, \"data\") });\n const resolvedLogsDirectory = this.#dataStore.resolve({ namespace: \"logs\", segments: [] });\n this.#logsDirectory = resolvedLogsDirectory.isOk()\n ? resolvedLogsDirectory.unwrap()\n : join(state, \"data\", \"logs\");\n this.#legacyLogsDirectory = join(state, \"logs\");\n }\n\n logsPath(): string {\n return this.#logsDirectory;\n }\n\n async listFiles(\n category: LogCategorySelection = \"usage\",\n ): Promise<Result<AgentDevKitErrorCode, LogsFileSummary[]>> {\n const files = await this.#logFiles();\n\n if (files.isErr()) {\n return Result.fail(files.unwrapError());\n }\n\n const summaries: LogsFileSummary[] = [];\n\n try {\n for (const file of files.unwrap()) {\n const info = fileInfo(file.file);\n\n if (info === undefined || !categoryMatches(info.category, category)) {\n continue;\n }\n\n const [metadata, content] = await Promise.all([\n stat(file.path),\n readFile(file.path, \"utf8\"),\n ]);\n summaries.push({\n category: info.category,\n date: info.date,\n eventCount: parseEvents(content, file.file).length,\n file: file.file,\n path: file.path,\n sizeBytes: metadata.size,\n });\n }\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return Result.ok(\n summaries.sort(\n (left, right) =>\n right.date.localeCompare(left.date) || left.category.localeCompare(right.category),\n ),\n );\n }\n\n async readEvents(\n date?: string,\n category: LogCategorySelection = \"usage\",\n ): Promise<Result<AgentDevKitErrorCode, LogEvent[]>> {\n const files = await this.#logFiles();\n\n if (files.isErr()) {\n return Result.fail(files.unwrapError());\n }\n\n const selectedFiles = files\n .unwrap()\n .filter((file) => {\n const info = fileInfo(file.file);\n return (\n info !== undefined &&\n categoryMatches(info.category, category) &&\n (date === undefined || info.date === date)\n );\n })\n .sort((left, right) => left.file.localeCompare(right.file));\n const events: LogEvent[] = [];\n\n try {\n for (const file of selectedFiles) {\n events.push(...parseEvents(await readFile(file.path, \"utf8\"), file.file));\n }\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return Result.ok(events.sort((left, right) => left.timestamp.localeCompare(right.timestamp)));\n }\n\n async #logFiles(): Promise<Result<AgentDevKitErrorCode, LogFileReference[]>> {\n try {\n const files = new Map<string, LogFileReference>();\n\n for (const reference of [\n ...(await this.#readFilesFromDirectory(this.#logsDirectory)),\n ...(await this.#readFilesFromDirectory(this.#legacyLogsDirectory)),\n ]) {\n if (!files.has(reference.file)) {\n files.set(reference.file, reference);\n }\n }\n\n return Result.ok(\n [...files.values()].sort((left, right) => left.file.localeCompare(right.file)),\n );\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return Result.ok([]);\n }\n\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async #readFilesFromDirectory(directory: string): Promise<LogFileReference[]> {\n try {\n const files = await readdir(directory);\n return files\n .filter((file) => fileInfo(file) !== undefined)\n .map((file) => ({ file, path: join(directory, file) }));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return [];\n }\n\n throw error;\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const UsageLogRecordSchema = z.object({\n area: z.string().min(1),\n argv: z.array(z.string()),\n category: z.literal(\"usage\"),\n command: z.string().min(1),\n durationMs: z.number().nonnegative(),\n error: z\n .object({\n message: z.string(),\n name: z.string(),\n })\n .optional(),\n interface: z.string().min(1),\n level: z.string().min(1),\n options: z.record(z.string(), z.unknown()),\n schema: z.literal(\"agent-devkit.usage-log/v1\"),\n status: z.string().min(1),\n timestamp: z.string().min(1),\n});\n\nexport type UsageLogRecord = z.infer<typeof UsageLogRecordSchema>;\n\nexport const TechnicalLogRecordSchema = z.object({\n area: z.string().min(1),\n category: z.literal(\"technical\"),\n command: z.string().min(1).optional(),\n durationMs: z.number().nonnegative().optional(),\n error: z\n .object({\n message: z.string(),\n name: z.string(),\n })\n .optional(),\n event: z.string().min(1),\n interface: z.string().min(1),\n level: z.string().min(1),\n message: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).optional(),\n schema: z.literal(\"agent-devkit.technical-log/v1\"),\n timestamp: z.string().min(1),\n});\n\nexport type TechnicalLogRecord = z.infer<typeof TechnicalLogRecordSchema>;\nexport type LogCategory = \"technical\" | \"usage\";\nexport type LogCategorySelection = LogCategory | \"all\";\n\nexport type LogEvent = (TechnicalLogRecord | UsageLogRecord) & {\n date: string;\n line: number;\n source: string;\n};\n\nexport type LogsFileSummary = {\n category: LogCategory;\n date: string;\n eventCount: number;\n file: string;\n path: string;\n sizeBytes: number;\n};\n\nexport type LogsAnalysisOptions =\n | { action: \"list\"; category?: LogCategorySelection }\n | {\n action: \"read\";\n category?: LogCategorySelection;\n date?: string;\n limit?: number;\n tail?: boolean;\n }\n | {\n action: \"search\";\n category?: LogCategorySelection;\n date?: string;\n limit?: number;\n query: string;\n }\n | { action: \"summary\"; category?: LogCategorySelection; date?: string };\n\nexport const LogsAnalysisOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"list\"),\n category: z.enum([\"usage\", \"technical\", \"all\"]).optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"read\"),\n category: z.enum([\"usage\", \"technical\", \"all\"]).optional(),\n date: z.string().min(1).optional(),\n limit: z.number().int().nonnegative().optional(),\n tail: z.boolean().optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"search\"),\n category: z.enum([\"usage\", \"technical\", \"all\"]).optional(),\n date: z.string().min(1).optional(),\n limit: z.number().int().nonnegative().optional(),\n query: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"summary\"),\n category: z.enum([\"usage\", \"technical\", \"all\"]).optional(),\n date: z.string().min(1).optional(),\n })\n .strict(),\n]);\n\nexport type LogsListResult = {\n action: \"list\";\n files: LogsFileSummary[];\n path: string;\n};\n\nexport type LogsReadResult = {\n action: \"read\";\n events: LogEvent[];\n path: string;\n totalEvents: number;\n};\n\nexport type LogsSearchResult = {\n action: \"search\";\n events: LogEvent[];\n path: string;\n query: string;\n totalMatches: number;\n};\n\nexport type LogsSummaryResult = {\n action: \"summary\";\n averageDurationMs: number;\n byArea: Record<string, number>;\n byCategory: Record<string, number>;\n byCommand: Record<string, number>;\n byStatus: Record<string, number>;\n path: string;\n slowest: LogEvent[];\n totalEvents: number;\n};\n\nexport type LogsAnalysisResult =\n | LogsListResult\n | LogsReadResult\n | LogsSearchResult\n | LogsSummaryResult;\n\nexport const LogsFileSummarySchema = z.object({\n category: z.enum([\"usage\", \"technical\"]),\n date: z.string().min(1),\n eventCount: z.number().int().nonnegative(),\n file: z.string().min(1),\n path: z.string().min(1),\n sizeBytes: z.number().int().nonnegative(),\n});\n\nexport const UsageLogEventSchema = UsageLogRecordSchema.extend({\n date: z.string().min(1),\n line: z.number().int().positive(),\n source: z.string().min(1),\n});\n\nexport const TechnicalLogEventSchema = TechnicalLogRecordSchema.extend({\n date: z.string().min(1),\n line: z.number().int().positive(),\n source: z.string().min(1),\n});\n\nexport const LogEventSchema = z.union([UsageLogEventSchema, TechnicalLogEventSchema]);\n\nexport const LogsAnalysisResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n files: z.array(LogsFileSummarySchema),\n path: z.string().min(1),\n }),\n z.object({\n action: z.literal(\"read\"),\n events: z.array(LogEventSchema),\n path: z.string().min(1),\n totalEvents: z.number().int().nonnegative(),\n }),\n z.object({\n action: z.literal(\"search\"),\n events: z.array(LogEventSchema),\n path: z.string().min(1),\n query: z.string(),\n totalMatches: z.number().int().nonnegative(),\n }),\n z.object({\n action: z.literal(\"summary\"),\n averageDurationMs: z.number().nonnegative(),\n byArea: z.record(z.string(), z.number().int().nonnegative()),\n byCategory: z.record(z.string(), z.number().int().nonnegative()),\n byCommand: z.record(z.string(), z.number().int().nonnegative()),\n byStatus: z.record(z.string(), z.number().int().nonnegative()),\n path: z.string().min(1),\n slowest: z.array(LogEventSchema),\n totalEvents: z.number().int().nonnegative(),\n }),\n]);\n","import { BaseCapabilityService, defineCapabilityConfig } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type LogCategorySelection,\n type LogEvent,\n type LogsAnalysisOptions,\n LogsAnalysisOptionsSchema,\n type LogsAnalysisResult,\n LogsAnalysisResultSchema,\n} from \"./analysis.entities\";\nimport type { LogsAnalysisRepositoryPort } from \"./analysis.repository\";\n\ntype LogsAnalysisServiceDependencies = {\n repository: LogsAnalysisRepositoryPort;\n};\n\nexport const logsAnalysisCapabilityConfig = defineCapabilityConfig({\n id: \"logs.analysis\",\n moduleId: \"logs\",\n name: \"Logs Analysis\",\n description: \"Inspect, search and summarize Agent DevKit usage logs.\",\n kind: \"deterministic\",\n risk: \"read-only\",\n} as const);\n\nfunction countBy(\n events: LogEvent[],\n selector: (event: LogEvent) => string,\n): Record<string, number> {\n return events.reduce<Record<string, number>>((accumulator, event) => {\n const key = selector(event);\n accumulator[key] = (accumulator[key] ?? 0) + 1;\n return accumulator;\n }, {});\n}\n\nfunction limitEvents(events: LogEvent[], limit = 20): LogEvent[] {\n return events.slice(0, Math.max(0, limit));\n}\n\nfunction tailEvents(events: LogEvent[], limit = 20): LogEvent[] {\n const normalizedLimit = Math.max(0, limit);\n return normalizedLimit === 0 ? [] : events.slice(-normalizedLimit);\n}\n\nfunction commandName(event: LogEvent): string {\n return event.category === \"usage\" ? event.command : (event.command ?? event.event);\n}\n\nfunction durationMs(event: LogEvent): number {\n return event.durationMs ?? 0;\n}\n\nfunction statusName(event: LogEvent): string {\n return event.category === \"usage\" ? event.status : event.level;\n}\n\nfunction searchableText(event: LogEvent): string {\n return [\n event.area,\n commandName(event),\n statusName(event),\n event.timestamp,\n event.interface,\n event.category === \"usage\" ? event.argv.join(\" \") : undefined,\n event.category === \"usage\" ? JSON.stringify(event.options) : JSON.stringify(event.metadata),\n event.category === \"technical\" ? event.event : undefined,\n event.category === \"technical\" ? event.message : undefined,\n event.error?.message,\n event.error?.name,\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n}\n\nexport class LogsAnalysisService extends BaseCapabilityService<\n typeof logsAnalysisCapabilityConfig,\n LogsAnalysisServiceDependencies\n> {\n readonly inputSchema = LogsAnalysisOptionsSchema;\n readonly outputSchema = LogsAnalysisResultSchema;\n readonly #repository: LogsAnalysisRepositoryPort;\n\n constructor(dependencies: LogsAnalysisServiceDependencies) {\n super(logsAnalysisCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: LogsAnalysisOptions,\n ): Promise<Result<AgentDevKitErrorCode, LogsAnalysisResult>> {\n if (options.action === \"list\") {\n const files = await this.#repository.listFiles(options.category);\n return files.isOk()\n ? Result.ok({ action: \"list\", files: files.unwrap(), path: this.#repository.logsPath() })\n : Result.fail(files.unwrapError());\n }\n\n const category: LogCategorySelection =\n \"category\" in options ? (options.category ?? \"usage\") : \"usage\";\n const events = await this.#repository.readEvents(\n \"date\" in options ? options.date : undefined,\n category,\n );\n\n if (events.isErr()) {\n return Result.fail(events.unwrapError());\n }\n\n const allEvents = events.unwrap();\n\n if (options.action === \"read\") {\n const selected =\n options.tail === true\n ? tailEvents(allEvents, options.limit)\n : limitEvents(allEvents, options.limit);\n return Result.ok({\n action: \"read\",\n events: selected,\n path: this.#repository.logsPath(),\n totalEvents: allEvents.length,\n });\n }\n\n if (options.action === \"search\") {\n const query = options.query.trim().toLowerCase();\n\n if (query.length === 0) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const matches = allEvents.filter((event) => searchableText(event).includes(query));\n return Result.ok({\n action: \"search\",\n events: limitEvents(matches, options.limit),\n path: this.#repository.logsPath(),\n query: options.query,\n totalMatches: matches.length,\n });\n }\n\n const totalDurationMs = allEvents.reduce((total, event) => total + durationMs(event), 0);\n\n return Result.ok({\n action: \"summary\",\n averageDurationMs:\n allEvents.length === 0 ? 0 : Math.round(totalDurationMs / allEvents.length),\n byArea: countBy(allEvents, (event) => event.area),\n byCategory: countBy(allEvents, (event) => event.category),\n byCommand: countBy(allEvents, commandName),\n byStatus: countBy(allEvents, statusName),\n path: this.#repository.logsPath(),\n slowest: [...allEvents]\n .sort((left, right) => durationMs(right) - durationMs(left))\n .slice(0, 5),\n totalEvents: allEvents.length,\n });\n }\n\n invoke(options: LogsAnalysisOptions): Promise<Result<AgentDevKitErrorCode, LogsAnalysisResult>> {\n return this.execute(options);\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { logsAnalysisCapabilityConfig } from \"./capabilities/analysis/analysis.service\";\n\nexport const logsModuleConfig = defineModuleConfig({\n id: \"logs\",\n name: \"Logs\",\n description: \"Agent DevKit usage log analysis and inspection.\",\n capabilities: [logsAnalysisCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/logs/logs.surface.test.ts\",\n \"src/modules/logs/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n LogsAnalysisRepository,\n type LogsAnalysisRepositoryPort,\n} from \"./capabilities/analysis/analysis.repository\";\nimport { LogsAnalysisService } from \"./capabilities/analysis/analysis.service\";\nimport { logsModuleConfig } from \"./logs.config\";\n\nexport type LogsModuleBindOptions = {\n homeDirectory?: string;\n stateDirectory?: string;\n};\n\nexport type LogsModuleCapabilities = {\n analysis: LogsAnalysisService;\n};\n\nexport type LogsModuleBinding = ModuleBinding<typeof logsModuleConfig, LogsModuleCapabilities>;\n\ntype LogsModuleBinderDependencies = {\n analysisRepository: (options: LogsModuleBindOptions) => LogsAnalysisRepositoryPort;\n};\n\nconst defaultDependencies: LogsModuleBinderDependencies = {\n analysisRepository: (options) => new LogsAnalysisRepository(options),\n};\n\nexport class LogsModuleBinder extends ModuleBinder<\n LogsModuleBindOptions,\n typeof logsModuleConfig,\n LogsModuleCapabilities\n> {\n readonly #dependencies: LogsModuleBinderDependencies;\n\n constructor(dependencies: LogsModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(options: LogsModuleBindOptions): Result<AgentDevKitErrorCode, LogsModuleBinding> {\n return defineModuleBinding({\n config: logsModuleConfig,\n capabilities: {\n analysis: new LogsAnalysisService({\n repository: this.#dependencies.analysisRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createLogsModuleBindings(\n options: LogsModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, LogsModuleBinding> {\n return new LogsModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { logsAnalysisCapabilityConfig } from \"./capabilities/analysis/analysis.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createLogsSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"logs\", moduleDirectory));\n\n return {\n moduleId: \"logs\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([logsAnalysisCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { AssetLoader } from \"../assets/asset_loader\";\nimport type { AssetReader } from \"../bases/assets\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { type ModelCatalog, type ModelCatalogEntry, ModelCatalogSchema } from \"../bases/model\";\nimport { Result } from \"../bases/result\";\n\nexport type ModelCatalogLoaderOptions = {\n loader?: AssetReader;\n};\n\nfunction defaultAssetsRoot(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDirectory, \"../../assets\"),\n resolve(moduleDirectory, \"../src/assets\"),\n resolve(process.cwd(), \"src/assets\"),\n ];\n\n return (\n candidates.find((candidate) => existsSync(candidate)) ?? resolve(process.cwd(), \"src/assets\")\n );\n}\n\nexport class ModelCatalogLoader {\n readonly #loader: AssetReader;\n #catalog?: ModelCatalog;\n\n constructor(options: ModelCatalogLoaderOptions = {}) {\n this.#loader = options.loader ?? new AssetLoader({ rootDirectory: defaultAssetsRoot() });\n }\n\n async load(): Promise<Result<AgentDevKitErrorCode, ModelCatalog>> {\n if (this.#catalog !== undefined) {\n return Result.ok(this.#catalog);\n }\n\n const payload = await this.#loader.loadJson<unknown>(\"models\", \"catalog.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = ModelCatalogSchema.safeParse(payload.unwrap());\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n this.#catalog = parsed.data;\n return Result.ok(this.#catalog);\n }\n\n async list(): Promise<Result<AgentDevKitErrorCode, ModelCatalogEntry[]>> {\n return (await this.load()).map((catalog) => catalog.models);\n }\n\n async find(id: string): Promise<Result<AgentDevKitErrorCode, ModelCatalogEntry>> {\n const catalog = await this.load();\n\n if (catalog.isErr()) {\n return Result.fail(catalog.unwrapError());\n }\n\n const entry = catalog.unwrap().models.find((model) => model.id === id);\n return entry === undefined ? Result.fail(ErrorCodes.ModelNotFound) : Result.ok(entry);\n }\n\n async recommended(): Promise<Result<AgentDevKitErrorCode, ModelCatalogEntry | undefined>> {\n const catalog = await this.load();\n\n if (catalog.isErr()) {\n return Result.fail(catalog.unwrapError());\n }\n\n const models = catalog.unwrap().models;\n return Result.ok(models.find((model) => model.recommended) ?? models[0]);\n }\n}\n","import { readFile, realpath } from \"node:fs/promises\";\nimport { join, relative, resolve } from \"node:path\";\nimport type { AssetKind, AssetReader } from \"../bases/assets\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\n\nexport type AssetLoaderOptions = {\n readonly rootDirectory: string;\n};\n\nconst textDecoder = new TextDecoder();\n\nexport class AssetLoader implements AssetReader {\n readonly #rootDirectory: string;\n\n constructor(options: AssetLoaderOptions) {\n this.#rootDirectory = resolve(options.rootDirectory);\n }\n\n async loadBinary(\n kind: AssetKind,\n name: string,\n ): Promise<Result<AgentDevKitErrorCode, Uint8Array>> {\n const target = await this.#resolve(kind, name);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n return Result.ok(await readFile(target.unwrap()));\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n async loadJson<TValue>(\n kind: AssetKind,\n name: string,\n ): Promise<Result<AgentDevKitErrorCode, TValue>> {\n const content = await this.loadText(kind, name);\n\n if (content.isErr()) {\n return Result.fail(content.unwrapError());\n }\n\n try {\n return Result.ok(JSON.parse(content.unwrap()) as TValue);\n } catch {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n }\n\n async loadText(kind: AssetKind, name: string): Promise<Result<AgentDevKitErrorCode, string>> {\n const binary = await this.loadBinary(kind, name);\n\n if (binary.isErr()) {\n return Result.fail(binary.unwrapError());\n }\n\n return Result.ok(textDecoder.decode(binary.unwrap()));\n }\n\n async #resolve(kind: AssetKind, name: string): Promise<Result<AgentDevKitErrorCode, string>> {\n const target = resolve(join(this.#rootDirectory, kind, name));\n const pathFromRoot = relative(this.#rootDirectory, target);\n\n if (pathFromRoot.startsWith(\"..\") || pathFromRoot === \"\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n try {\n const [realRoot, realTarget] = await Promise.all([\n realpath(this.#rootDirectory),\n realpath(target),\n ]);\n const realPathFromRoot = relative(realRoot, realTarget);\n\n if (realPathFromRoot.startsWith(\"..\") || realPathFromRoot === \"\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(realTarget);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n}\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport type { InstalledModel, ModelCatalogEntry } from \"../../../../infra/bases/model\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { ModelCatalogLoader } from \"../../../../infra/models/model_catalog\";\nimport { type ModelDownloadProgress, ModelStore } from \"../../../../infra/models/model_store\";\nimport type { ModelView } from \"./registry.entities\";\n\nexport type ModelInstallProgress = (progress: ModelDownloadProgress) => void;\n\nexport interface ModelsRegistryRepositoryPort extends CapabilityRepositoryPort {\n directory(): string;\n defaultId(): Promise<Result<AgentDevKitErrorCode, string | undefined>>;\n install(\n id: string,\n onProgress?: ModelInstallProgress,\n ): Promise<Result<AgentDevKitErrorCode, ModelView>>;\n listModels(): Promise<Result<AgentDevKitErrorCode, ModelView[]>>;\n setDefault(id: string, role?: \"agent\" | \"chat\"): Promise<Result<AgentDevKitErrorCode, string>>;\n statusModels(id?: string): Promise<Result<AgentDevKitErrorCode, ModelView[]>>;\n uninstall(id: string): Promise<Result<AgentDevKitErrorCode, { id: string; removed: boolean }>>;\n update(id?: string): Promise<Result<AgentDevKitErrorCode, ModelView[]>>;\n}\n\nexport type ModelsRegistryRepositoryOptions = {\n catalog?: ModelCatalogLoader;\n store?: ModelStore;\n stateDirectory?: string;\n};\n\nexport class ModelsRegistryRepository implements ModelsRegistryRepositoryPort {\n readonly repositoryId = \"models.registry.repository\";\n readonly #catalog: ModelCatalogLoader;\n readonly #store: ModelStore;\n\n constructor(options: ModelsRegistryRepositoryOptions = {}) {\n this.#catalog = options.catalog ?? new ModelCatalogLoader();\n this.#store = options.store ?? new ModelStore({ stateDirectory: options.stateDirectory });\n }\n\n directory(): string {\n return this.#store.directory();\n }\n\n defaultId(): Promise<Result<AgentDevKitErrorCode, string | undefined>> {\n return this.#store.getDefault();\n }\n\n async listModels(): Promise<Result<AgentDevKitErrorCode, ModelView[]>> {\n const catalog = await this.#catalog.list();\n return catalog.isErr()\n ? Result.fail(catalog.unwrapError())\n : this.#buildViews(catalog.unwrap());\n }\n\n async statusModels(id?: string): Promise<Result<AgentDevKitErrorCode, ModelView[]>> {\n const catalog = await this.#catalog.list();\n\n if (catalog.isErr()) {\n return Result.fail(catalog.unwrapError());\n }\n\n const entries =\n id === undefined ? catalog.unwrap() : catalog.unwrap().filter((entry) => entry.id === id);\n\n if (id !== undefined && entries.length === 0) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n return this.#buildViews(entries);\n }\n\n async install(\n id: string,\n onProgress?: ModelInstallProgress,\n ): Promise<Result<AgentDevKitErrorCode, ModelView>> {\n const entry = await this.#catalog.find(id);\n\n if (entry.isErr()) {\n return Result.fail(entry.unwrapError());\n }\n\n const installed = await this.#store.install(entry.unwrap(), { onProgress });\n\n if (installed.isErr()) {\n return Result.fail(installed.unwrapError());\n }\n\n const defaultId = await this.#store.getDefault();\n\n return Result.ok(\n this.#toView(\n entry.unwrap(),\n installed.unwrap(),\n defaultId.isOk() ? defaultId.unwrap() : undefined,\n ),\n );\n }\n\n async uninstall(\n id: string,\n ): Promise<Result<AgentDevKitErrorCode, { id: string; removed: boolean }>> {\n const removed = await this.#store.uninstall(id);\n\n return removed.isOk()\n ? Result.ok({ id, removed: removed.unwrap().removed })\n : Result.fail(removed.unwrapError());\n }\n\n async update(id?: string): Promise<Result<AgentDevKitErrorCode, ModelView[]>> {\n if (id !== undefined) {\n const view = await this.install(id);\n return view.isOk() ? Result.ok([view.unwrap()]) : Result.fail(view.unwrapError());\n }\n\n const installedIds = await this.#store.installedIds();\n\n if (installedIds.isErr()) {\n return Result.fail(installedIds.unwrapError());\n }\n\n const views: ModelView[] = [];\n\n for (const modelId of installedIds.unwrap()) {\n const entry = await this.#catalog.find(modelId);\n\n if (entry.isErr()) {\n continue;\n }\n\n const verified = await this.#store.verify(modelId, entry.unwrap().sha256);\n\n if (verified.isOk() && verified.unwrap() === false) {\n const repaired = await this.install(modelId);\n\n if (repaired.isOk()) {\n views.push(repaired.unwrap());\n continue;\n }\n }\n\n const status = await this.#store.status(modelId);\n const defaultId = await this.#store.getDefault();\n views.push(\n this.#toView(\n entry.unwrap(),\n status.isOk() ? status.unwrap() : undefined,\n defaultId.isOk() ? defaultId.unwrap() : undefined,\n ),\n );\n }\n\n return Result.ok(views);\n }\n\n async setDefault(\n id: string,\n role?: \"agent\" | \"chat\",\n ): Promise<Result<AgentDevKitErrorCode, string>> {\n const set = await this.#store.setDefault(id, role);\n return set.isOk() ? Result.ok(id) : Result.fail(set.unwrapError());\n }\n\n async #buildViews(\n entries: ModelCatalogEntry[],\n ): Promise<Result<AgentDevKitErrorCode, ModelView[]>> {\n const defaultId = await this.#store.getDefault();\n const resolvedDefault = defaultId.isOk() ? defaultId.unwrap() : undefined;\n const views: ModelView[] = [];\n\n for (const entry of entries) {\n const status = await this.#store.status(entry.id);\n views.push(this.#toView(entry, status.isOk() ? status.unwrap() : undefined, resolvedDefault));\n }\n\n return Result.ok(views);\n }\n\n #toView(\n entry: ModelCatalogEntry,\n installed: InstalledModel | undefined,\n defaultId: string | undefined,\n ): ModelView {\n return {\n id: entry.id,\n name: entry.name,\n family: entry.family,\n parameters: entry.parameters,\n quantization: entry.quantization,\n sizeBytes: installed?.sizeBytes ?? entry.sizeBytes,\n contextLength: entry.contextLength,\n license: entry.license,\n recommended: entry.recommended,\n installed: installed !== undefined,\n isDefault: defaultId === entry.id,\n path: installed?.path,\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const ModelsRegistryOptionsSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"list\") }).strict(),\n z.object({ action: z.literal(\"status\"), id: z.string().min(1).optional() }).strict(),\n z.object({ action: z.literal(\"install\"), id: z.string().min(1) }).strict(),\n z.object({ action: z.literal(\"uninstall\"), id: z.string().min(1) }).strict(),\n z.object({ action: z.literal(\"update\"), id: z.string().min(1).optional() }).strict(),\n z\n .object({\n action: z.literal(\"use\"),\n id: z.string().min(1),\n role: z.enum([\"agent\", \"chat\"]).optional(),\n })\n .strict(),\n]);\n\nexport type ModelsRegistryOptions =\n | { action: \"list\" }\n | { action: \"status\"; id?: string }\n | { action: \"install\"; id: string }\n | { action: \"uninstall\"; id: string }\n | { action: \"update\"; id?: string }\n | { action: \"use\"; id: string; role?: \"agent\" | \"chat\" };\n\nexport const ModelViewSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n family: z.string().min(1),\n parameters: z.string().min(1),\n quantization: z.string().min(1),\n sizeBytes: z.number().int().nonnegative(),\n contextLength: z.number().int().positive(),\n license: z.string().min(1),\n recommended: z.boolean(),\n installed: z.boolean(),\n isDefault: z.boolean(),\n path: z.string().min(1).optional(),\n});\n\nexport type ModelView = z.infer<typeof ModelViewSchema>;\n\nexport const ModelsRegistryResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n directory: z.string().min(1),\n models: z.array(ModelViewSchema),\n defaultId: z.string().min(1).optional(),\n }),\n z.object({\n action: z.literal(\"status\"),\n directory: z.string().min(1),\n models: z.array(ModelViewSchema),\n }),\n z.object({\n action: z.literal(\"install\"),\n directory: z.string().min(1),\n model: ModelViewSchema,\n }),\n z.object({\n action: z.literal(\"uninstall\"),\n directory: z.string().min(1),\n id: z.string().min(1),\n removed: z.boolean(),\n }),\n z.object({\n action: z.literal(\"update\"),\n directory: z.string().min(1),\n models: z.array(ModelViewSchema),\n }),\n z.object({\n action: z.literal(\"use\"),\n directory: z.string().min(1),\n defaultId: z.string().min(1),\n role: z.enum([\"agent\", \"chat\"]).optional(),\n }),\n]);\n\nexport type ModelsRegistryResult =\n | { action: \"list\"; directory: string; models: ModelView[]; defaultId?: string }\n | { action: \"status\"; directory: string; models: ModelView[] }\n | { action: \"install\"; directory: string; model: ModelView }\n | { action: \"uninstall\"; directory: string; id: string; removed: boolean }\n | { action: \"update\"; directory: string; models: ModelView[] }\n | { action: \"use\"; directory: string; defaultId: string; role?: \"agent\" | \"chat\" };\n","import {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n type CapabilityInvocationContext,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ModelsRegistryOptions,\n ModelsRegistryOptionsSchema,\n type ModelsRegistryResult,\n ModelsRegistryResultSchema,\n} from \"./registry.entities\";\nimport type { ModelsRegistryRepositoryPort } from \"./registry.repository\";\n\ntype ModelsRegistryServiceDependencies = {\n repository: ModelsRegistryRepositoryPort;\n};\n\nexport const modelsRegistryCapabilityConfig = defineCapabilityConfig({\n id: \"models.registry\",\n moduleId: \"models\",\n name: \"Models registry\",\n description: \"List, install, update, remove and select local LLM model artifacts.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class ModelsRegistryService extends BaseCapabilityService<\n typeof modelsRegistryCapabilityConfig,\n ModelsRegistryServiceDependencies\n> {\n readonly inputSchema = ModelsRegistryOptionsSchema;\n readonly outputSchema = ModelsRegistryResultSchema;\n readonly #repository: ModelsRegistryRepositoryPort;\n\n constructor(dependencies: ModelsRegistryServiceDependencies) {\n super(modelsRegistryCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: ModelsRegistryOptions,\n ): Promise<Result<AgentDevKitErrorCode, ModelsRegistryResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return this.#run(parsed.data);\n }\n\n invoke(\n options: ModelsRegistryOptions,\n _context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, ModelsRegistryResult>> {\n return this.execute(options);\n }\n\n override approvalForInput(input: ModelsRegistryOptions): CapabilityApproval {\n if (input.action === \"list\" || input.action === \"status\") {\n return { reason: \"Models registry read action.\", required: false };\n }\n\n return {\n reason: \"Models registry action writes local model state.\",\n required: true,\n };\n }\n\n override effectsForInput(input: ModelsRegistryOptions): CapabilityEffect[] {\n if (input.action === \"list\" || input.action === \"status\") {\n return [{ operation: \"read\", scope: \"none\" }];\n }\n\n if (input.action === \"uninstall\") {\n return [{ operation: \"delete\", scope: \"global\" }];\n }\n\n return [{ operation: \"write\", scope: \"global\" }];\n }\n\n async #run(\n options: ModelsRegistryOptions,\n ): Promise<Result<AgentDevKitErrorCode, ModelsRegistryResult>> {\n const directory = this.#repository.directory();\n\n if (options.action === \"list\") {\n const models = await this.#repository.listModels();\n\n if (models.isErr()) {\n return Result.fail(models.unwrapError());\n }\n\n const defaultId = await this.#repository.defaultId();\n\n return Result.ok({\n action: \"list\",\n directory,\n models: models.unwrap(),\n defaultId: defaultId.isOk() ? defaultId.unwrap() : undefined,\n });\n }\n\n if (options.action === \"status\") {\n const models = await this.#repository.statusModels(options.id);\n\n return models.isOk()\n ? Result.ok({ action: \"status\", directory, models: models.unwrap() })\n : Result.fail(models.unwrapError());\n }\n\n if (options.action === \"install\") {\n const model = await this.#repository.install(options.id);\n\n return model.isOk()\n ? Result.ok({ action: \"install\", directory, model: model.unwrap() })\n : Result.fail(model.unwrapError());\n }\n\n if (options.action === \"uninstall\") {\n const removed = await this.#repository.uninstall(options.id);\n\n return removed.isOk()\n ? Result.ok({\n action: \"uninstall\",\n directory,\n id: removed.unwrap().id,\n removed: removed.unwrap().removed,\n })\n : Result.fail(removed.unwrapError());\n }\n\n if (options.action === \"update\") {\n const models = await this.#repository.update(options.id);\n\n return models.isOk()\n ? Result.ok({ action: \"update\", directory, models: models.unwrap() })\n : Result.fail(models.unwrapError());\n }\n\n const defaultId = await this.#repository.setDefault(options.id, options.role);\n\n return defaultId.isOk()\n ? Result.ok({ action: \"use\", directory, defaultId: defaultId.unwrap(), role: options.role })\n : Result.fail(defaultId.unwrapError());\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { modelsRegistryCapabilityConfig } from \"./capabilities/registry/registry.service\";\n\nexport const modelsModuleConfig = defineModuleConfig({\n id: \"models\",\n name: \"Models\",\n description: \"Local LLM model catalog and lifecycle: list, install, update, remove and select.\",\n capabilities: [modelsRegistryCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/models/models.surface.test.ts\",\n \"src/modules/models/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n ModelsRegistryRepository,\n type ModelsRegistryRepositoryPort,\n} from \"./capabilities/registry/registry.repository\";\nimport { ModelsRegistryService } from \"./capabilities/registry/registry.service\";\nimport { modelsModuleConfig } from \"./models.config\";\n\nexport type ModelsModuleBindOptions = {\n homeDirectory?: string;\n stateDirectory?: string;\n};\n\nexport type ModelsModuleCapabilities = {\n registry: ModelsRegistryService;\n};\n\nexport type ModelsModuleBinding = ModuleBinding<\n typeof modelsModuleConfig,\n ModelsModuleCapabilities\n>;\n\ntype ModelsModuleBinderDependencies = {\n registryRepository: (options: ModelsModuleBindOptions) => ModelsRegistryRepositoryPort;\n};\n\nfunction stateDirectory(options: ModelsModuleBindOptions): string | undefined {\n return (\n options.stateDirectory ??\n (options.homeDirectory ? `${options.homeDirectory}/.agent-devkit` : undefined)\n );\n}\n\nconst defaultDependencies: ModelsModuleBinderDependencies = {\n registryRepository: (options) =>\n new ModelsRegistryRepository({ stateDirectory: stateDirectory(options) }),\n};\n\nexport class ModelsModuleBinder extends ModuleBinder<\n ModelsModuleBindOptions,\n typeof modelsModuleConfig,\n ModelsModuleCapabilities\n> {\n readonly #dependencies: ModelsModuleBinderDependencies;\n\n constructor(dependencies: ModelsModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: ModelsModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, ModelsModuleBinding> {\n return defineModuleBinding({\n config: modelsModuleConfig,\n capabilities: {\n registry: new ModelsRegistryService({\n repository: this.#dependencies.registryRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createModelsModuleBindings(\n options: ModelsModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, ModelsModuleBinding> {\n return new ModelsModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { modelsRegistryCapabilityConfig } from \"./capabilities/registry/registry.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createModelsSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"models\", moduleDirectory));\n\n return {\n moduleId: \"models\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([modelsRegistryCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { randomBytes } from \"node:crypto\";\nimport { access, chmod, mkdir, readFile, rename, unlink, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { EncryptedPayload, SecretCrypto } from \"../bases/crypto\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { Logger } from \"../bases/logger\";\nimport { NullLogger } from \"../bases/logger\";\nimport { Result } from \"../bases/result\";\nimport { errorCause } from \"../helpers/error_cause\";\n\nexport type SecretMetadata = {\n createdAt: string;\n name: string;\n service?: string;\n updatedAt: string;\n};\n\nexport type SecretAuditAction = \"created\" | \"removed\" | \"revealed\" | \"rotated\" | \"updated\";\n\nexport type SecretAuditEntry = {\n action: SecretAuditAction;\n name: string;\n service?: string;\n timestamp: string;\n};\n\nexport type StoredSecret = SecretMetadata & {\n encrypted: EncryptedPayload;\n};\n\nexport type SecretSummary = SecretMetadata;\nexport type RevealedSecret = {\n secret: SecretSummary;\n value: string;\n};\n\ntype VaultFile = {\n audit: SecretAuditEntry[];\n schema: \"agent-devkit.secret-vault/v1\";\n secrets: StoredSecret[];\n};\n\nexport type EncryptedSecretStoreOptions = {\n clock?: () => Date;\n crypto: SecretCrypto;\n logger?: Logger;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nfunction defaultVault(): VaultFile {\n return {\n audit: [],\n schema: \"agent-devkit.secret-vault/v1\",\n secrets: [],\n };\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: unknown }).code === \"ENOENT\"\n );\n}\n\nfunction sortSecrets(left: SecretSummary, right: SecretSummary): number {\n return left.name.localeCompare(right.name);\n}\n\nexport class EncryptedSecretStore {\n readonly #clock: () => Date;\n readonly #crypto: SecretCrypto;\n readonly #legacyVaultPath: string;\n readonly #logger: Logger;\n readonly #vaultPath: string;\n\n constructor(options: EncryptedSecretStoreOptions) {\n const stateDirectory = options.stateDirectory ?? defaultStateDirectory();\n this.#clock = options.clock ?? (() => new Date());\n this.#crypto = options.crypto;\n this.#logger = options.logger ?? new NullLogger();\n this.#vaultPath = join(stateDirectory, \"data\", \"secrets\", \"vault.json\");\n this.#legacyVaultPath = join(stateDirectory, \"secrets\", \"vault.json\");\n }\n\n path(): string {\n return this.#vaultPath;\n }\n\n async get(name: string): Promise<Result<AgentDevKitErrorCode, string>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const secret = vault.unwrap().secrets.find((candidate) => candidate.name === name);\n\n if (secret === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return this.#crypto.decryptString(secret.encrypted);\n }\n\n async reveal(name: string): Promise<Result<AgentDevKitErrorCode, RevealedSecret>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const existing = vault.unwrap();\n const secret = existing.secrets.find((candidate) => candidate.name === name);\n\n if (secret === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const value = await this.#crypto.decryptString(secret.encrypted);\n\n if (value.isErr()) {\n return Result.fail(value.unwrapError());\n }\n\n const save = await this.#writeVault({\n ...existing,\n audit: [...existing.audit, this.#auditEntry(\"revealed\", secret)],\n });\n\n return save.isOk()\n ? Result.ok({\n secret: this.#summary(secret),\n value: value.unwrap(),\n })\n : Result.fail(save.unwrapError());\n }\n\n async list(): Promise<Result<AgentDevKitErrorCode, SecretSummary[]>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n return Result.ok(\n vault\n .unwrap()\n .secrets.map((secret) => this.#summary(secret))\n .sort(sortSecrets),\n );\n }\n\n async audit(name?: string): Promise<Result<AgentDevKitErrorCode, SecretAuditEntry[]>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const events = vault\n .unwrap()\n .audit.filter((entry) => name === undefined || entry.name === name)\n .sort((left, right) => left.timestamp.localeCompare(right.timestamp));\n\n return Result.ok(events);\n }\n\n async remove(name: string): Promise<Result<AgentDevKitErrorCode, { removed: boolean }>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const existing = vault.unwrap();\n const removed = existing.secrets.find((secret) => secret.name === name);\n const next: VaultFile = {\n ...existing,\n audit:\n removed === undefined\n ? existing.audit\n : [...existing.audit, this.#auditEntry(\"removed\", removed)],\n secrets: existing.secrets.filter((secret) => secret.name !== name),\n };\n const save = await this.#writeVault(next);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n return Result.ok({ removed: next.secrets.length !== existing.secrets.length });\n }\n\n async rotate(\n name: string,\n value: string,\n metadata: { service?: string } = {},\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>> {\n if (name.trim().length === 0 || value.length === 0) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const existing = vault.unwrap().secrets.find((secret) => secret.name === name);\n\n if (existing === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const encrypted = await this.#crypto.encryptString(value);\n\n if (encrypted.isErr()) {\n return Result.fail(encrypted.unwrapError());\n }\n\n const now = this.#now();\n const secret: StoredSecret = {\n createdAt: existing.createdAt,\n encrypted: encrypted.unwrap(),\n name,\n service: metadata.service ?? existing.service,\n updatedAt: now,\n };\n const next: VaultFile = {\n schema: \"agent-devkit.secret-vault/v1\",\n audit: [...vault.unwrap().audit, this.#auditEntry(\"rotated\", secret, now)],\n secrets: [...vault.unwrap().secrets.filter((candidate) => candidate.name !== name), secret],\n };\n const save = await this.#writeVault(next);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n return Result.ok({\n createdAt: secret.createdAt,\n name: secret.name,\n service: secret.service,\n updatedAt: secret.updatedAt,\n });\n }\n\n async set(\n name: string,\n value: string,\n metadata: { service?: string } = {},\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>> {\n if (name.trim().length === 0 || value.length === 0) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const encrypted = await this.#crypto.encryptString(value);\n\n if (encrypted.isErr()) {\n return Result.fail(encrypted.unwrapError());\n }\n\n const now = this.#now();\n const existing = vault.unwrap().secrets.find((secret) => secret.name === name);\n const secret: StoredSecret = {\n createdAt: existing?.createdAt ?? now,\n encrypted: encrypted.unwrap(),\n name,\n service: metadata.service ?? existing?.service,\n updatedAt: now,\n };\n const next: VaultFile = {\n schema: \"agent-devkit.secret-vault/v1\",\n audit: [\n ...vault.unwrap().audit,\n this.#auditEntry(existing === undefined ? \"created\" : \"updated\", secret, now),\n ],\n secrets: [...vault.unwrap().secrets.filter((candidate) => candidate.name !== name), secret],\n };\n const save = await this.#writeVault(next);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n return Result.ok({\n createdAt: secret.createdAt,\n name: secret.name,\n service: secret.service,\n updatedAt: secret.updatedAt,\n });\n }\n\n async #readVault(): Promise<Result<AgentDevKitErrorCode, VaultFile>> {\n try {\n await access(this.#vaultPath);\n } catch (error) {\n if (!isNotFoundError(error)) {\n this.#logger.write(\"error\", \"Secret vault access failed.\", {\n error: errorCause(error),\n path: this.#vaultPath,\n });\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n try {\n await access(this.#legacyVaultPath);\n } catch (legacyError) {\n if (!isNotFoundError(legacyError)) {\n this.#logger.write(\"error\", \"Legacy secret vault access failed.\", {\n error: errorCause(legacyError),\n path: this.#legacyVaultPath,\n });\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return Result.ok(defaultVault());\n }\n\n const legacy = await this.#readVaultFile(this.#legacyVaultPath);\n\n if (legacy.isErr()) {\n return Result.fail(legacy.unwrapError());\n }\n\n const migrate = await this.#writeVault(legacy.unwrap());\n\n if (migrate.isErr()) {\n return Result.fail(migrate.unwrapError());\n }\n\n this.#logger.write(\"info\", \"Secret vault migrated to canonical data directory.\", {\n from: this.#legacyVaultPath,\n to: this.#vaultPath,\n });\n\n return legacy;\n }\n\n return this.#readVaultFile(this.#vaultPath);\n }\n\n async #readVaultFile(path: string): Promise<Result<AgentDevKitErrorCode, VaultFile>> {\n try {\n const payload = JSON.parse(await readFile(path, \"utf8\")) as Partial<VaultFile>;\n\n if (payload.schema !== \"agent-devkit.secret-vault/v1\" || !Array.isArray(payload.secrets)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok({\n audit: Array.isArray(payload.audit) ? payload.audit : [],\n schema: payload.schema,\n secrets: payload.secrets,\n });\n } catch (error) {\n this.#logger.write(\"error\", \"Secret vault read failed.\", {\n error: errorCause(error),\n path,\n });\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async #writeVault(vault: VaultFile): Promise<Result<AgentDevKitErrorCode, void>> {\n const directory = dirname(this.#vaultPath);\n const tempPath = join(directory, `.vault-${process.pid}-${randomBytes(6).toString(\"hex\")}.tmp`);\n\n try {\n await mkdir(directory, { recursive: true, mode: 0o700 });\n await writeFile(tempPath, `${JSON.stringify(vault, null, 2)}\\n`, {\n flag: \"wx\",\n mode: 0o600,\n });\n if (process.platform !== \"win32\") {\n await chmod(tempPath, 0o600);\n }\n await rename(tempPath, this.#vaultPath);\n return Result.ok(undefined);\n } catch (error) {\n await unlink(tempPath).catch(() => undefined);\n this.#logger.write(\"error\", \"Secret vault write failed.\", {\n error: errorCause(error),\n path: this.#vaultPath,\n });\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n #summary(secret: SecretMetadata): SecretSummary {\n return {\n createdAt: secret.createdAt,\n name: secret.name,\n service: secret.service,\n updatedAt: secret.updatedAt,\n };\n }\n\n #auditEntry(action: SecretAuditAction, secret: SecretMetadata, timestamp = this.#now()) {\n return {\n action,\n name: secret.name,\n service: secret.service,\n timestamp,\n };\n }\n\n #now(): string {\n return this.#clock().toISOString();\n }\n}\n","import type { AgentDevKitErrorCode } from \"./errors\";\nimport type { Result } from \"./result\";\n\nexport type LogLevel = \"debug\" | \"error\" | \"info\" | \"warn\";\nexport type UsageLogArea = \"project\" | \"self\" | \"system\" | \"user\";\nexport type UsageLogInterface = \"cli\" | \"mcp\" | \"tui\";\nexport type UsageLogStatus = \"failed\" | \"succeeded\";\n\nexport interface Logger {\n write(level: LogLevel, message: string, metadata?: Record<string, unknown>): void;\n}\n\nexport type UsageLogInput = {\n area: UsageLogArea;\n argv: string[];\n command: string;\n createStateIfMissing?: boolean;\n durationMs: number;\n error?: {\n message: string;\n name: string;\n };\n interface: UsageLogInterface;\n options: Record<string, unknown>;\n status: UsageLogStatus;\n};\n\nexport type UsageLogEvent = UsageLogInput & {\n category: \"usage\";\n level: \"error\" | \"info\";\n schema: \"agent-devkit.usage-log/v1\";\n timestamp: string;\n};\n\nexport interface UsageLogger {\n writeUsage(event: UsageLogInput): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nexport type TechnicalLogInput = {\n area: UsageLogArea;\n command?: string;\n createStateIfMissing?: boolean;\n durationMs?: number;\n error?: {\n message: string;\n name: string;\n };\n event: string;\n interface: UsageLogInterface;\n level: LogLevel;\n message: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TechnicalLogEvent = TechnicalLogInput & {\n category: \"technical\";\n schema: \"agent-devkit.technical-log/v1\";\n timestamp: string;\n};\n\nexport interface TechnicalLogger {\n writeTechnical(event: TechnicalLogInput): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nexport class ConsoleLogger implements Logger {\n write(level: LogLevel, message: string, metadata?: Record<string, unknown>): void {\n const payload = metadata ? ` ${JSON.stringify(metadata)}` : \"\";\n console.error(`[${level}] ${message}${payload}`);\n }\n}\n\nexport class NullLogger implements Logger {\n write(): void {\n // Intentionally empty.\n }\n}\n","export type ErrorCause = {\n code?: string;\n message: string;\n name: string;\n};\n\nexport function errorCause(error: unknown): ErrorCause {\n if (error instanceof Error) {\n const code =\n typeof (error as NodeJS.ErrnoException).code === \"string\"\n ? (error as NodeJS.ErrnoException).code\n : undefined;\n\n return {\n code,\n message: error.message,\n name: error.name,\n };\n }\n\n return {\n message: String(error),\n name: \"Error\",\n };\n}\n","import { randomBytes } from \"node:crypto\";\nimport { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { SecretKeyProvider } from \"../bases/crypto\";\nimport type { Logger } from \"../bases/logger\";\nimport { NullLogger } from \"../bases/logger\";\nimport { errorCause } from \"../helpers/error_cause\";\n\nexport type LocalMasterKeyProviderOptions = {\n logger?: Logger;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nexport class LocalMasterKeyProvider implements SecretKeyProvider {\n readonly #legacyKeyPaths: string[];\n readonly #keyPath: string;\n readonly #logger: Logger;\n\n constructor(options: LocalMasterKeyProviderOptions = {}) {\n const stateDirectory = options.stateDirectory ?? defaultStateDirectory();\n this.#keyPath = join(stateDirectory, \"keys\", \"master.key\");\n this.#legacyKeyPaths = [\n join(stateDirectory, \"keys\", \"local.key\"),\n join(stateDirectory, \"secrets\", \"master.key\"),\n join(stateDirectory, \"master.key\"),\n ];\n this.#logger = options.logger ?? new NullLogger();\n }\n\n keyId(): string {\n return \"local\";\n }\n\n async getKey(): Promise<Buffer> {\n try {\n return Buffer.from((await readFile(this.#keyPath, \"utf8\")).trim(), \"base64\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n this.#logger.write(\"error\", \"Local master key read failed.\", {\n error: errorCause(error),\n path: this.#keyPath,\n });\n throw error;\n }\n }\n\n const legacyKey = await this.#readLegacyKey();\n\n if (legacyKey !== undefined) {\n return this.#persistKey(legacyKey);\n }\n\n const key = randomBytes(32);\n return this.#persistKey(key);\n }\n\n async #persistKey(key: Buffer): Promise<Buffer> {\n await mkdir(dirname(this.#keyPath), { recursive: true, mode: 0o700 });\n\n try {\n await writeFile(this.#keyPath, `${key.toString(\"base64\")}\\n`, { flag: \"wx\", mode: 0o600 });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"EEXIST\") {\n return Buffer.from((await readFile(this.#keyPath, \"utf8\")).trim(), \"base64\");\n }\n\n this.#logger.write(\"error\", \"Local master key creation failed.\", {\n error: errorCause(error),\n path: this.#keyPath,\n });\n throw error;\n }\n\n if (process.platform !== \"win32\") {\n await chmod(dirname(this.#keyPath), 0o700);\n await chmod(this.#keyPath, 0o600);\n }\n\n return key;\n }\n\n async #readLegacyKey(): Promise<Buffer | undefined> {\n for (const path of this.#legacyKeyPaths) {\n try {\n return Buffer.from((await readFile(path, \"utf8\")).trim(), \"base64\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n this.#logger.write(\"error\", \"Legacy local master key read failed.\", {\n error: errorCause(error),\n path,\n });\n throw error;\n }\n }\n }\n\n return undefined;\n }\n}\n","import { createCipheriv, createDecipheriv, randomBytes } from \"node:crypto\";\nimport type { EncryptedPayload, SecretCrypto, SecretKeyProvider } from \"../bases/crypto\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { Logger } from \"../bases/logger\";\nimport { NullLogger } from \"../bases/logger\";\nimport { Result } from \"../bases/result\";\nimport { errorCause } from \"../helpers/error_cause\";\n\nexport type LocalSecretCryptoOptions = {\n clock?: () => Date;\n keyProvider: SecretKeyProvider;\n logger?: Logger;\n};\n\nfunction keyId(provider: SecretKeyProvider): string {\n return provider.keyId?.() ?? \"local\";\n}\n\nasync function resolveKey(provider: SecretKeyProvider): Promise<Buffer> {\n const key = await provider.getKey();\n return Buffer.isBuffer(key) ? key : Buffer.from(key);\n}\n\nexport class LocalSecretCrypto implements SecretCrypto {\n readonly #clock: () => Date;\n readonly #keyProvider: SecretKeyProvider;\n readonly #logger: Logger;\n\n constructor(options: LocalSecretCryptoOptions) {\n this.#clock = options.clock ?? (() => new Date());\n this.#keyProvider = options.keyProvider;\n this.#logger = options.logger ?? new NullLogger();\n }\n\n async encryptString(value: string): Promise<Result<AgentDevKitErrorCode, EncryptedPayload>> {\n try {\n const key = await resolveKey(this.#keyProvider);\n\n if (key.length !== 32) {\n return Result.fail(ErrorCodes.EncryptionFailed);\n }\n\n const iv = randomBytes(12);\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n const ciphertext = Buffer.concat([cipher.update(value, \"utf8\"), cipher.final()]);\n const authTag = cipher.getAuthTag();\n\n return Result.ok({\n algorithm: \"aes-256-gcm\",\n authTag: authTag.toString(\"base64\"),\n ciphertext: ciphertext.toString(\"base64\"),\n createdAt: this.#clock().toISOString(),\n iv: iv.toString(\"base64\"),\n keyId: keyId(this.#keyProvider),\n schema: \"agent-devkit.encrypted-payload/v1\",\n });\n } catch (error) {\n this.#logger.write(\"error\", \"Secret encryption failed.\", { error: errorCause(error) });\n return Result.fail(ErrorCodes.EncryptionFailed);\n }\n }\n\n async decryptString(payload: EncryptedPayload): Promise<Result<AgentDevKitErrorCode, string>> {\n try {\n const key = await resolveKey(this.#keyProvider);\n\n if (\n key.length !== 32 ||\n payload.algorithm !== \"aes-256-gcm\" ||\n payload.keyId !== keyId(this.#keyProvider)\n ) {\n return Result.fail(ErrorCodes.DecryptionFailed);\n }\n\n const decipher = createDecipheriv(\"aes-256-gcm\", key, Buffer.from(payload.iv, \"base64\"));\n decipher.setAuthTag(Buffer.from(payload.authTag, \"base64\"));\n\n const decrypted = Buffer.concat([\n decipher.update(Buffer.from(payload.ciphertext, \"base64\")),\n decipher.final(),\n ]);\n\n return Result.ok(decrypted.toString(\"utf8\"));\n } catch (error) {\n this.#logger.write(\"error\", \"Secret decryption failed.\", { error: errorCause(error) });\n return Result.fail(ErrorCodes.DecryptionFailed);\n }\n }\n}\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport type { Result } from \"../../../../infra/bases/result\";\nimport type {\n EncryptedSecretStore,\n RevealedSecret,\n SecretAuditEntry,\n SecretSummary,\n} from \"../../../../infra/crypto/encrypted_secret_store\";\n\nexport interface SecretsVaultRepositoryPort extends CapabilityRepositoryPort {\n audit(name?: string): Promise<Result<AgentDevKitErrorCode, SecretAuditEntry[]>>;\n get(name: string): Promise<Result<AgentDevKitErrorCode, string>>;\n list(): Promise<Result<AgentDevKitErrorCode, SecretSummary[]>>;\n path(): string;\n reveal(name: string): Promise<Result<AgentDevKitErrorCode, RevealedSecret>>;\n remove(name: string): Promise<Result<AgentDevKitErrorCode, { removed: boolean }>>;\n rotate(\n name: string,\n value: string,\n metadata?: { service?: string },\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>>;\n set(\n name: string,\n value: string,\n metadata?: { service?: string },\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>>;\n}\n\nexport type SecretsVaultRepositoryOptions = {\n store: EncryptedSecretStore;\n};\n\nexport class SecretsVaultRepository implements SecretsVaultRepositoryPort {\n readonly repositoryId = \"secrets.vault.repository\";\n readonly #store: EncryptedSecretStore;\n\n constructor(options: SecretsVaultRepositoryOptions) {\n this.#store = options.store;\n }\n\n audit(name?: string): Promise<Result<AgentDevKitErrorCode, SecretAuditEntry[]>> {\n return this.#store.audit(name);\n }\n\n get(name: string): Promise<Result<AgentDevKitErrorCode, string>> {\n return this.#store.get(name);\n }\n\n list(): Promise<Result<AgentDevKitErrorCode, SecretSummary[]>> {\n return this.#store.list();\n }\n\n path(): string {\n return this.#store.path();\n }\n\n remove(name: string): Promise<Result<AgentDevKitErrorCode, { removed: boolean }>> {\n return this.#store.remove(name);\n }\n\n reveal(name: string): Promise<Result<AgentDevKitErrorCode, RevealedSecret>> {\n return this.#store.reveal(name);\n }\n\n rotate(\n name: string,\n value: string,\n metadata: { service?: string } = {},\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>> {\n return this.#store.rotate(name, value, metadata);\n }\n\n set(\n name: string,\n value: string,\n metadata: { service?: string } = {},\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>> {\n return this.#store.set(name, value, metadata);\n }\n}\n","import { z } from \"zod\";\nimport type {\n SecretAuditEntry,\n SecretSummary,\n} from \"../../../../infra/crypto/encrypted_secret_store\";\n\nconst SecretViewSchema = z.object({\n createdAt: z.string().min(1),\n name: z.string().min(1),\n service: z.string().min(1).optional(),\n updatedAt: z.string().min(1),\n value: z.string().optional(),\n});\n\nconst SecretAuditEntrySchema = z.object({\n action: z.enum([\"created\", \"removed\", \"revealed\", \"rotated\", \"updated\"]),\n name: z.string().min(1),\n service: z.string().min(1).optional(),\n timestamp: z.string().min(1),\n});\n\nexport const SecretsVaultOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"audit\"),\n name: z.string().min(1).optional(),\n })\n .strict(),\n z.object({ action: z.literal(\"list\") }).strict(),\n z\n .object({\n action: z.literal(\"remove\"),\n name: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"rotate\"),\n name: z.string().min(1),\n service: z.string().min(1).optional(),\n value: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"set\"),\n name: z.string().min(1),\n service: z.string().min(1).optional(),\n value: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"show\"),\n name: z.string().min(1),\n reveal: z.boolean().optional(),\n })\n .strict(),\n]);\n\nexport type SecretView = SecretSummary & {\n value?: string;\n};\n\nexport type SecretsVaultOptions =\n | { action: \"audit\"; name?: string }\n | { action: \"list\" }\n | { action: \"remove\"; name: string }\n | { action: \"rotate\"; name: string; service?: string; value: string }\n | { action: \"set\"; name: string; service?: string; value: string }\n | { action: \"show\"; name: string; reveal?: boolean };\n\nexport type SecretsVaultResult =\n | {\n action: \"audit\";\n events: SecretAuditEntry[];\n path: string;\n }\n | {\n action: \"list\";\n path: string;\n secrets: SecretView[];\n }\n | {\n action: \"remove\";\n path: string;\n removed: boolean;\n secret: { name: string };\n }\n | {\n action: \"rotate\";\n path: string;\n secret: SecretView;\n }\n | {\n action: \"set\";\n path: string;\n secret: SecretView;\n }\n | {\n action: \"show\";\n path: string;\n secret: SecretView;\n };\n\nexport const SecretsVaultResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"audit\"),\n events: z.array(SecretAuditEntrySchema),\n path: z.string().min(1),\n }),\n z.object({\n action: z.literal(\"list\"),\n path: z.string().min(1),\n secrets: z.array(SecretViewSchema),\n }),\n z.object({\n action: z.literal(\"remove\"),\n path: z.string().min(1),\n removed: z.boolean(),\n secret: z.object({ name: z.string().min(1) }),\n }),\n z.object({\n action: z.literal(\"rotate\"),\n path: z.string().min(1),\n secret: SecretViewSchema,\n }),\n z.object({\n action: z.literal(\"set\"),\n path: z.string().min(1),\n secret: SecretViewSchema,\n }),\n z.object({\n action: z.literal(\"show\"),\n path: z.string().min(1),\n secret: SecretViewSchema,\n }),\n]);\n","import { BaseCapabilityService, defineCapabilityConfig } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type SecretsVaultOptions,\n SecretsVaultOptionsSchema,\n type SecretsVaultResult,\n SecretsVaultResultSchema,\n type SecretView,\n} from \"./vault.entities\";\nimport type { SecretsVaultRepositoryPort } from \"./vault.repository\";\n\ntype SecretsVaultServiceDependencies = {\n repository: SecretsVaultRepositoryPort;\n};\n\nexport const secretsVaultCapabilityConfig = defineCapabilityConfig({\n id: \"secrets.vault\",\n moduleId: \"secrets\",\n name: \"Secrets Vault\",\n description: \"Store and retrieve encrypted local credentials.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nfunction masked(summary: Omit<SecretView, \"value\">): SecretView {\n return {\n ...summary,\n value: \"********\",\n };\n}\n\nexport class SecretsVaultService extends BaseCapabilityService<\n typeof secretsVaultCapabilityConfig,\n SecretsVaultServiceDependencies\n> {\n readonly inputSchema = SecretsVaultOptionsSchema;\n readonly outputSchema = SecretsVaultResultSchema;\n readonly #repository: SecretsVaultRepositoryPort;\n\n constructor(dependencies: SecretsVaultServiceDependencies) {\n super(secretsVaultCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: SecretsVaultOptions,\n ): Promise<Result<AgentDevKitErrorCode, SecretsVaultResult>> {\n if (options.action === \"audit\") {\n const events = await this.#repository.audit(options.name);\n\n return events.isOk()\n ? Result.ok({\n action: \"audit\",\n events: events.unwrap(),\n path: this.#repository.path(),\n })\n : Result.fail(events.unwrapError());\n }\n\n if (options.action === \"list\") {\n const secrets = await this.#repository.list();\n\n return secrets.isOk()\n ? Result.ok({\n action: \"list\",\n path: this.#repository.path(),\n secrets: secrets.unwrap().map((secret) => masked(secret)),\n })\n : Result.fail(secrets.unwrapError());\n }\n\n if (options.action === \"set\") {\n const secret = await this.#repository.set(options.name, options.value, {\n service: options.service,\n });\n\n return secret.isOk()\n ? Result.ok({\n action: \"set\",\n path: this.#repository.path(),\n secret: masked(secret.unwrap()),\n })\n : Result.fail(secret.unwrapError());\n }\n\n if (options.action === \"rotate\") {\n const secret = await this.#repository.rotate(options.name, options.value, {\n service: options.service,\n });\n\n return secret.isOk()\n ? Result.ok({\n action: \"rotate\",\n path: this.#repository.path(),\n secret: masked(secret.unwrap()),\n })\n : Result.fail(secret.unwrapError());\n }\n\n if (options.action === \"remove\") {\n const removed = await this.#repository.remove(options.name);\n\n return removed.isOk()\n ? Result.ok({\n action: \"remove\",\n path: this.#repository.path(),\n removed: removed.unwrap().removed,\n secret: { name: options.name },\n })\n : Result.fail(removed.unwrapError());\n }\n\n if (options.reveal === true) {\n const revealed = await this.#repository.reveal(options.name);\n\n return revealed.isOk()\n ? Result.ok({\n action: \"show\",\n path: this.#repository.path(),\n secret: { ...revealed.unwrap().secret, value: revealed.unwrap().value },\n })\n : Result.fail(revealed.unwrapError());\n }\n\n const summaries = await this.#repository.list();\n\n if (summaries.isErr()) {\n return Result.fail(summaries.unwrapError());\n }\n\n const summary = summaries.unwrap().find((secret) => secret.name === options.name);\n\n if (summary === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok({\n action: \"show\",\n path: this.#repository.path(),\n secret: masked(summary),\n });\n }\n\n invoke(options: SecretsVaultOptions): Promise<Result<AgentDevKitErrorCode, SecretsVaultResult>> {\n return this.execute(options);\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { secretsVaultCapabilityConfig } from \"./capabilities/vault/vault.service\";\n\nexport const secretsModuleConfig = defineModuleConfig({\n id: \"secrets\",\n name: \"Secrets\",\n description: \"Encrypted local credential storage for external service configuration.\",\n capabilities: [secretsVaultCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/secrets/secrets.surface.test.ts\",\n \"src/modules/secrets/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport { EncryptedSecretStore } from \"../../infra/crypto/encrypted_secret_store\";\nimport { LocalMasterKeyProvider } from \"../../infra/crypto/local_master_key_provider\";\nimport { LocalSecretCrypto } from \"../../infra/crypto/local_secret_crypto\";\nimport {\n SecretsVaultRepository,\n type SecretsVaultRepositoryPort,\n} from \"./capabilities/vault/vault.repository\";\nimport { SecretsVaultService } from \"./capabilities/vault/vault.service\";\nimport { secretsModuleConfig } from \"./secrets.config\";\n\nexport type SecretsModuleBindOptions = {\n homeDirectory?: string;\n stateDirectory?: string;\n};\n\nexport type SecretsModuleCapabilities = {\n vault: SecretsVaultService;\n};\n\nexport type SecretsModuleBinding = ModuleBinding<\n typeof secretsModuleConfig,\n SecretsModuleCapabilities\n>;\n\ntype SecretsModuleBinderDependencies = {\n vaultRepository: (options: SecretsModuleBindOptions) => SecretsVaultRepositoryPort;\n};\n\nfunction stateDirectory(options: SecretsModuleBindOptions): string | undefined {\n return (\n options.stateDirectory ??\n (options.homeDirectory ? `${options.homeDirectory}/.agent-devkit` : undefined)\n );\n}\n\nconst defaultDependencies: SecretsModuleBinderDependencies = {\n vaultRepository: (options) => {\n const resolvedStateDirectory = stateDirectory(options);\n const keyProvider = new LocalMasterKeyProvider({ stateDirectory: resolvedStateDirectory });\n\n return new SecretsVaultRepository({\n store: new EncryptedSecretStore({\n crypto: new LocalSecretCrypto({ keyProvider }),\n stateDirectory: resolvedStateDirectory,\n }),\n });\n },\n};\n\nexport class SecretsModuleBinder extends ModuleBinder<\n SecretsModuleBindOptions,\n typeof secretsModuleConfig,\n SecretsModuleCapabilities\n> {\n readonly #dependencies: SecretsModuleBinderDependencies;\n\n constructor(dependencies: SecretsModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: SecretsModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, SecretsModuleBinding> {\n return defineModuleBinding({\n config: secretsModuleConfig,\n capabilities: {\n vault: new SecretsVaultService({\n repository: this.#dependencies.vaultRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createSecretsModuleBindings(\n options: SecretsModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, SecretsModuleBinding> {\n return new SecretsModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { secretsVaultCapabilityConfig } from \"./capabilities/vault/vault.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createSecretsSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"secrets\", moduleDirectory));\n\n return {\n moduleId: \"secrets\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([secretsVaultCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type { PackageInstallResult, PackageVersions } from \"./update.entities\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface UpdateRepositoryPort extends CapabilityRepositoryPort {\n getPackageVersions(packageName: string): Promise<Result<AgentDevKitErrorCode, PackageVersions>>;\n installGlobal(\n packageName: string,\n version: string,\n options: { dryRun: boolean },\n ): Promise<Result<AgentDevKitErrorCode, PackageInstallResult>>;\n}\n\nexport class UpdateRepository implements UpdateRepositoryPort {\n readonly repositoryId = \"self.update.repository\";\n\n async getPackageVersions(\n packageName: string,\n ): Promise<Result<AgentDevKitErrorCode, PackageVersions>> {\n try {\n const [{ stdout: versionsOutput }, { stdout: distTagsOutput }] = await Promise.all([\n execFileAsync(\"npm\", [\"view\", packageName, \"versions\", \"--json\"]),\n execFileAsync(\"npm\", [\"view\", packageName, \"dist-tags\", \"--json\"]),\n ]);\n\n return Result.ok({\n versions: JSON.parse(versionsOutput) as string[],\n distTags: JSON.parse(distTagsOutput) as Record<string, string | undefined>,\n });\n } catch {\n return Result.fail(ErrorCodes.PackageRegistryFailed);\n }\n }\n\n async installGlobal(\n packageName: string,\n version: string,\n options: { dryRun: boolean },\n ): Promise<Result<AgentDevKitErrorCode, PackageInstallResult>> {\n const command = `npm install -g ${packageName}@${version}`;\n\n try {\n if (!options.dryRun) {\n await execFileAsync(\"npm\", [\"install\", \"-g\", `${packageName}@${version}`]);\n }\n\n return Result.ok({\n command,\n executed: !options.dryRun,\n });\n } catch {\n return Result.fail(ErrorCodes.PackageInstallFailed);\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const UpdateServiceOptionsSchema = z\n .object({\n dryRun: z.boolean(),\n latest: z.boolean(),\n version: z.string().min(1).optional(),\n yes: z.boolean(),\n })\n .strict();\n\nexport type SelfUpdateStatus = \"current\" | \"planned\" | \"updated\";\n\nexport type PackageVersionOption = {\n version: string;\n current: boolean;\n latest: boolean;\n selected: boolean;\n};\n\nexport type SelfUpdateResult = {\n status: SelfUpdateStatus;\n packageName: string;\n currentVersion: string;\n selectedVersion: string;\n command: string;\n executed: boolean;\n versions: PackageVersionOption[];\n};\n\nexport const SelfUpdateResultSchema = z.object({\n status: z.enum([\"current\", \"planned\", \"updated\"]),\n packageName: z.string().min(1),\n currentVersion: z.string().min(1),\n selectedVersion: z.string().min(1),\n command: z.string(),\n executed: z.boolean(),\n versions: z.array(\n z.object({\n version: z.string().min(1),\n current: z.boolean(),\n latest: z.boolean(),\n selected: z.boolean(),\n }),\n ),\n});\n\nexport type UpdateServiceOptions = z.infer<typeof UpdateServiceOptionsSchema>;\n\nexport type PackageVersions = {\n distTags: Record<string, string | undefined>;\n versions: string[];\n};\n\nexport type PackageInstallResult = {\n command: string;\n executed: boolean;\n};\n","import {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type SelfUpdateResult,\n SelfUpdateResultSchema,\n type UpdateServiceOptions,\n UpdateServiceOptionsSchema,\n} from \"./update.entities\";\nimport type { UpdateRepositoryPort } from \"./update.repository\";\n\ntype UpdateServiceDependencies = {\n currentVersion: string;\n packageName: string;\n repository: UpdateRepositoryPort;\n};\n\nfunction versionParts(version: string): number[] {\n return version.split(/[.-]/).map((part) => Number.parseInt(part, 10) || 0);\n}\n\nfunction compareVersions(left: string, right: string): number {\n const leftParts = versionParts(left);\n const rightParts = versionParts(right);\n const length = Math.max(leftParts.length, rightParts.length);\n\n for (let index = 0; index < length; index += 1) {\n const diff = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);\n\n if (diff !== 0) {\n return diff;\n }\n }\n\n return left.localeCompare(right);\n}\n\nfunction compareVersionsDesc(left: string, right: string): number {\n return compareVersions(right, left);\n}\n\nexport const updateCapabilityConfig = defineCapabilityConfig({\n id: \"self.update\",\n moduleId: \"self\",\n name: \"Update\",\n description: \"Plan or execute Agent DevKit package updates through npm.\",\n kind: \"external\",\n risk: \"external-write\",\n} as const);\n\nexport class UpdateService\n extends BaseCapabilityService<typeof updateCapabilityConfig, UpdateServiceDependencies>\n implements CapabilityExecution<UpdateServiceOptions, SelfUpdateResult>\n{\n readonly inputSchema = UpdateServiceOptionsSchema;\n readonly outputSchema = SelfUpdateResultSchema;\n readonly #currentVersion: string;\n readonly #packageName: string;\n readonly #repository: UpdateRepositoryPort;\n\n constructor(dependencies: UpdateServiceDependencies) {\n super(updateCapabilityConfig, dependencies);\n this.#currentVersion = dependencies.currentVersion;\n this.#packageName = dependencies.packageName;\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: UpdateServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, SelfUpdateResult>> {\n const packageVersions = await this.#repository.getPackageVersions(this.#packageName);\n\n if (packageVersions.isErr()) {\n return Result.fail(packageVersions.unwrapError());\n }\n\n const versionsPayload = packageVersions.unwrap();\n const latestVersion =\n versionsPayload.distTags.latest ?? versionsPayload.versions.at(-1) ?? this.#currentVersion;\n const explicitVersion = options.version !== undefined;\n const selectedVersion =\n options.version ?? (options.latest === true ? latestVersion : this.#currentVersion);\n const listedVersions = Array.from(\n new Set([...versionsPayload.versions, this.#currentVersion, selectedVersion]),\n );\n\n if (\n selectedVersion === this.#currentVersion ||\n (!explicitVersion && compareVersions(latestVersion, this.#currentVersion) <= 0)\n ) {\n return Result.ok({\n status: \"current\",\n packageName: this.#packageName,\n currentVersion: this.#currentVersion,\n selectedVersion: this.#currentVersion,\n command: \"\",\n executed: false,\n versions: listedVersions.sort(compareVersionsDesc).map((version) => ({\n version,\n current: version === this.#currentVersion,\n latest: version === latestVersion,\n selected: version === this.#currentVersion,\n })),\n });\n }\n\n const dryRun = options.dryRun || !options.yes;\n const install = await this.#repository.installGlobal(this.#packageName, selectedVersion, {\n dryRun,\n });\n\n if (install.isErr()) {\n return Result.fail(install.unwrapError());\n }\n\n return Result.ok({\n status: install.unwrap().executed ? \"updated\" : \"planned\",\n packageName: this.#packageName,\n currentVersion: this.#currentVersion,\n selectedVersion,\n command: install.unwrap().command,\n executed: install.unwrap().executed,\n versions: listedVersions.sort(compareVersionsDesc).map((version) => ({\n version,\n current: version === this.#currentVersion,\n latest: version === latestVersion,\n selected: version === selectedVersion,\n })),\n });\n }\n\n invoke(options: UpdateServiceOptions): Promise<Result<AgentDevKitErrorCode, SelfUpdateResult>> {\n return this.execute(options);\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { updateCapabilityConfig } from \"./capabilities/update/update.service\";\n\nexport const selfModuleConfig = defineModuleConfig({\n id: \"self\",\n name: \"Self\",\n description: \"Agent DevKit package maintenance capabilities.\",\n capabilities: [updateCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/self/self.surface.test.ts\",\n \"src/modules/self/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n UpdateRepository,\n type UpdateRepositoryPort,\n} from \"./capabilities/update/update.repository\";\nimport { UpdateService } from \"./capabilities/update/update.service\";\nimport { selfModuleConfig } from \"./self.config\";\n\nexport type SelfModuleBindOptions = {\n currentVersion: string;\n packageName: string;\n};\n\nexport type SelfModuleCapabilities = {\n update: UpdateService;\n};\n\nexport type SelfModuleBinding = ModuleBinding<typeof selfModuleConfig, SelfModuleCapabilities>;\n\ntype SelfModuleBinderDependencies = {\n updateRepository: () => UpdateRepositoryPort;\n};\n\nconst defaultDependencies: SelfModuleBinderDependencies = {\n updateRepository: () => new UpdateRepository(),\n};\n\nexport class SelfModuleBinder extends ModuleBinder<\n SelfModuleBindOptions,\n typeof selfModuleConfig,\n SelfModuleCapabilities\n> {\n readonly #dependencies: SelfModuleBinderDependencies;\n\n constructor(dependencies: SelfModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(options: SelfModuleBindOptions): Result<AgentDevKitErrorCode, SelfModuleBinding> {\n return defineModuleBinding({\n config: selfModuleConfig,\n capabilities: {\n update: new UpdateService({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n repository: this.#dependencies.updateRepository(),\n }),\n },\n });\n }\n}\n\nexport function createSelfModuleBindings(\n options: SelfModuleBindOptions,\n): Result<AgentDevKitErrorCode, SelfModuleBinding> {\n return new SelfModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { updateCapabilityConfig } from \"./capabilities/update/update.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createSelfSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"self\", moduleDirectory));\n\n return {\n moduleId: \"self\",\n capabilities: async () => Result.ok(surfaceCapabilitiesFromConfigs([updateCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { cliAliasCapabilityConfig } from \"./capabilities/cliAlias/cliAlias.service\";\nimport { personalizationCapabilityConfig } from \"./capabilities/personalization/personalization.service\";\nimport { preferencesCapabilityConfig } from \"./capabilities/preferences/preferences.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createUserSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"user\", moduleDirectory));\n\n return {\n moduleId: \"user\",\n capabilities: async () =>\n Result.ok(\n surfaceCapabilitiesFromConfigs([\n cliAliasCapabilityConfig,\n personalizationCapabilityConfig,\n preferencesCapabilityConfig,\n ]),\n ),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import type { InvokableCapabilityService } from \"../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../infra/bases/errors\";\nimport type { AgentDevKitModuleConfig } from \"../infra/bases/module\";\nimport type { Result } from \"../infra/bases/result\";\nimport type { IModuleSurface } from \"../infra/bases/surface\";\nimport { type ContextModuleBindOptions, createContextModuleBindings } from \"./context/context.bind\";\nimport { contextModuleConfig } from \"./context/context.config\";\nimport { createContextSurface } from \"./context/context.surface\";\nimport {\n type ConversationModuleBindOptions,\n createConversationModuleBindings,\n} from \"./conversation/conversation.bind\";\nimport { conversationModuleConfig } from \"./conversation/conversation.config\";\nimport { createConversationSurface } from \"./conversation/conversation.surface\";\nimport {\n createEnvironmentModuleBindings,\n type EnvironmentModuleBindOptions,\n} from \"./environment/environment.bind\";\nimport { environmentModuleConfig } from \"./environment/environment.config\";\nimport { createEnvironmentSurface } from \"./environment/environment.surface\";\nimport { createLogsModuleBindings, type LogsModuleBindOptions } from \"./logs/logs.bind\";\nimport { logsModuleConfig } from \"./logs/logs.config\";\nimport { createLogsSurface } from \"./logs/logs.surface\";\nimport { createModelsModuleBindings, type ModelsModuleBindOptions } from \"./models/models.bind\";\nimport { modelsModuleConfig } from \"./models/models.config\";\nimport { createModelsSurface } from \"./models/models.surface\";\nimport { createProjectModuleBindings, type ProjectModuleBindOptions } from \"./project/project.bind\";\nimport { projectModuleConfig } from \"./project/project.config\";\nimport { createProjectSurface } from \"./project/project.surface\";\nimport { createSecretsModuleBindings, type SecretsModuleBindOptions } from \"./secrets/secrets.bind\";\nimport { secretsModuleConfig } from \"./secrets/secrets.config\";\nimport { createSecretsSurface } from \"./secrets/secrets.surface\";\nimport { createSelfModuleBindings, type SelfModuleBindOptions } from \"./self/self.bind\";\nimport { selfModuleConfig } from \"./self/self.config\";\nimport { createSelfSurface } from \"./self/self.surface\";\nimport { createUserModuleBindings, type UserModuleBindOptions } from \"./user/user.bind\";\nimport { userModuleConfig } from \"./user/user.config\";\nimport { createUserSurface } from \"./user/user.surface\";\n\nexport type AgentModuleRegistryOptions = ProjectModuleBindOptions &\n SelfModuleBindOptions & {\n conversation?: ConversationModuleBindOptions;\n context?: ContextModuleBindOptions;\n environment?: EnvironmentModuleBindOptions;\n logs?: LogsModuleBindOptions;\n models?: ModelsModuleBindOptions;\n secrets?: SecretsModuleBindOptions;\n user?: UserModuleBindOptions;\n };\n\nexport type AgentModuleBindingView = {\n capabilities: Record<string, InvokableCapabilityService>;\n};\n\nexport type AgentModuleDefinition = {\n bind: (\n options: AgentModuleRegistryOptions,\n ) => Result<AgentDevKitErrorCode, AgentModuleBindingView>;\n capabilities: (binding: AgentModuleBindingView) => InvokableCapabilityService[];\n config: AgentDevKitModuleConfig;\n id: string;\n surface: () => IModuleSurface;\n};\n\nfunction capabilities(binding: AgentModuleBindingView): InvokableCapabilityService[] {\n return Object.values(binding.capabilities);\n}\n\nfunction bindingView<TBinding extends { capabilities: Record<string, InvokableCapabilityService> }>(\n binding: TBinding,\n): AgentModuleBindingView {\n return binding;\n}\n\nexport const agentModuleDefinitions: AgentModuleDefinition[] = [\n {\n id: \"conversation\",\n config: conversationModuleConfig,\n surface: createConversationSurface,\n bind: (options) =>\n createConversationModuleBindings(options.conversation ?? {}).map((binding) =>\n bindingView(binding),\n ),\n capabilities,\n },\n {\n id: \"context\",\n config: contextModuleConfig,\n surface: createContextSurface,\n bind: (options) =>\n createContextModuleBindings(options.context ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"environment\",\n config: environmentModuleConfig,\n surface: createEnvironmentSurface,\n bind: (options) =>\n createEnvironmentModuleBindings(options.environment ?? {}).map((binding) =>\n bindingView(binding),\n ),\n capabilities,\n },\n {\n id: \"logs\",\n config: logsModuleConfig,\n surface: createLogsSurface,\n bind: (options) =>\n createLogsModuleBindings(options.logs ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"models\",\n config: modelsModuleConfig,\n surface: createModelsSurface,\n bind: (options) =>\n createModelsModuleBindings(options.models ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"project\",\n config: projectModuleConfig,\n surface: createProjectSurface,\n bind: (options) =>\n createProjectModuleBindings({ appVersion: options.appVersion }).map((binding) =>\n bindingView(binding),\n ),\n capabilities,\n },\n {\n id: \"secrets\",\n config: secretsModuleConfig,\n surface: createSecretsSurface,\n bind: (options) =>\n createSecretsModuleBindings(options.secrets ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"self\",\n config: selfModuleConfig,\n surface: createSelfSurface,\n bind: (options) =>\n createSelfModuleBindings({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n }).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"user\",\n config: userModuleConfig,\n surface: createUserSurface,\n bind: (options) =>\n createUserModuleBindings(options.user ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n];\n","import type { InvokableCapabilityService } from \"../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../infra/bases/errors\";\nimport { Result } from \"../infra/bases/result\";\nimport {\n type CapabilityRegistry,\n createCapabilityRegistry,\n} from \"../infra/capabilities/capability_registry\";\nimport { type AgentModuleRegistryOptions, agentModuleDefinitions } from \"./modules.registry\";\n\nexport type AgentCapabilityRegistryOptions = AgentModuleRegistryOptions;\n\nexport function createAgentCapabilityRegistry(\n options: AgentCapabilityRegistryOptions,\n): Result<AgentDevKitErrorCode, CapabilityRegistry> {\n const capabilities: InvokableCapabilityService[] = [];\n\n for (const definition of agentModuleDefinitions) {\n const binding = definition.bind(options);\n if (binding.isErr()) {\n return Result.fail(binding.unwrapError());\n }\n\n capabilities.push(...definition.capabilities(binding.unwrap()));\n }\n\n return createCapabilityRegistry({\n capabilities,\n });\n}\n","import { type AgentDevKitErrorCode, ErrorCodes } from \"../infra/bases/errors\";\nimport type { Result } from \"../infra/bases/result\";\nimport type {\n ToolRuntime,\n ToolRuntimeExecuteInput,\n ToolRuntimeResult,\n ToolRuntimeTool,\n} from \"../infra/bases/tool_runtime\";\nimport type { CapabilityRegistry } from \"../infra/capabilities/capability_registry\";\nimport {\n type AgentCapabilityRegistryOptions,\n createAgentCapabilityRegistry,\n} from \"./capability_registry\";\n\nexport type CapabilityToolRuntimeOptions = {\n registry: CapabilityRegistry;\n};\n\nfunction toolFromDescriptor(\n descriptor: ReturnType<CapabilityRegistry[\"list\"]>[number],\n): ToolRuntimeTool {\n return {\n approval: descriptor.approval,\n description: descriptor.description,\n id: descriptor.id,\n inputSchema: descriptor.inputSchema,\n kind: descriptor.kind,\n moduleId: descriptor.moduleId,\n name: descriptor.name,\n outputSchema: descriptor.outputSchema,\n risk: descriptor.risk,\n };\n}\n\nexport class CapabilityToolRuntime implements ToolRuntime {\n readonly #registry: CapabilityRegistry;\n\n constructor(options: CapabilityToolRuntimeOptions) {\n this.#registry = options.registry;\n }\n\n listTools(): ToolRuntimeTool[] {\n return this.#registry.list().map(toolFromDescriptor);\n }\n\n getTool(capabilityId: string): Result<AgentDevKitErrorCode, ToolRuntimeTool> {\n return this.#registry.describe(capabilityId).map(toolFromDescriptor);\n }\n\n async execute(input: ToolRuntimeExecuteInput): Promise<ToolRuntimeResult> {\n const tool = this.getTool(input.capabilityId);\n const invocation = await this.#registry.invoke(input.capabilityId, input.input, {\n approved: input.approved,\n interface: input.interface,\n requestedBy: input.requestedBy,\n });\n\n if (tool.isErr()) {\n return {\n approval: { reason: \"Capability was not found.\", required: false },\n audit: invocation.audit,\n capabilityId: input.capabilityId,\n effects: [],\n error: invocation.ok\n ? {\n code: ErrorCodes.CapabilityNotFound,\n message: `Capability ${input.capabilityId} was not found.`,\n recoverable: true,\n }\n : invocation.error,\n input: input.input,\n interface: input.interface,\n risk: \"read-only\",\n status: \"failed\",\n };\n }\n\n const descriptor = tool.unwrap();\n\n if (!invocation.ok) {\n return {\n approval: descriptor.approval,\n audit: invocation.audit,\n capabilityId: input.capabilityId,\n effects: [],\n error: invocation.error,\n input: input.input,\n interface: input.interface,\n risk: descriptor.risk,\n status:\n invocation.error.code === ErrorCodes.ApprovalRequired ? \"approval_required\" : \"failed\",\n };\n }\n\n return {\n approval: descriptor.approval,\n audit: invocation.audit,\n capabilityId: input.capabilityId,\n effects: invocation.effects,\n input: input.input,\n interface: input.interface,\n output: invocation.data,\n risk: descriptor.risk,\n status: \"succeeded\",\n };\n }\n}\n\nexport function createCapabilityToolRuntime(\n options: AgentCapabilityRegistryOptions,\n): Result<AgentDevKitErrorCode, CapabilityToolRuntime> {\n return createAgentCapabilityRegistry(options).map(\n (registry) => new CapabilityToolRuntime({ registry }),\n );\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { ToolRuntimeResult } from \"../../../infra/bases/tool_runtime\";\nimport { formatDependenciesText } from \"../../../modules/environment/environment.index\";\nimport { wantsJson } from \"../command_options\";\nimport { createCliToolRuntime } from \"../toolRuntime\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterInstallCommandOptions = {\n currentVersion: string;\n packageName: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\ntype InstallCommandOptions = {\n dryRun?: boolean;\n json?: boolean;\n node?: boolean;\n verify?: boolean;\n yes?: boolean;\n};\n\nfunction selectedDependency(\n dependency: string | undefined,\n options: InstallCommandOptions,\n): string {\n if (options.node === true) {\n return \"node\";\n }\n\n if (dependency !== undefined && dependency.trim().length > 0) {\n return dependency.trim();\n }\n\n throw new Error(\"Expected a dependency id.\");\n}\n\nfunction runtime(options: RegisterInstallCommandOptions) {\n return createCliToolRuntime({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n });\n}\n\nfunction dependencyAction(options: InstallCommandOptions): \"install\" | \"plan-install\" | \"verify\" {\n if (options.verify === true) {\n return \"verify\";\n }\n\n return options.yes === true && options.dryRun !== true ? \"install\" : \"plan-install\";\n}\n\nfunction printResult(result: ToolRuntimeResult, translator: Translator, json: boolean): void {\n if (json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.status !== \"succeeded\") {\n console.error(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(formatDependenciesText(result.output as never, translator));\n}\n\nexport function registerInstallCommand(\n program: Command,\n options: RegisterInstallCommandOptions,\n): void {\n const installCommand = program\n .command(\"install\")\n .argument(\"[dependency]\", options.translator.t(\"cli.install.argument.dependency\"))\n .description(options.translator.t(\"cli.install.description\"))\n .option(\"--dry-run\", options.translator.t(\"cli.install.option.dryRun\"))\n .option(\"--json\", options.translator.t(\"cli.install.option.json\"))\n .option(\"--node\", options.translator.t(\"cli.install.option.node\"))\n .option(\"--verify\", options.translator.t(\"cli.install.option.verify\"))\n .option(\"--yes\", options.translator.t(\"cli.install.option.yes\"));\n\n installCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"install\",\n options: () => installCommand.opts(),\n },\n async (dependency: string | undefined, commandOptions: InstallCommandOptions) => {\n const id = selectedDependency(dependency, commandOptions);\n const action = dependencyAction(commandOptions);\n const result = await runtime(options).execute({\n approved: commandOptions.yes === true,\n capabilityId: \"environment.dependencies\",\n input: {\n action,\n confirmed: commandOptions.yes === true,\n dependency: id,\n },\n interface: \"cli\",\n requestedBy: \"agent.install\",\n });\n\n printResult(result, options.translator, wantsJson(commandOptions));\n\n if (result.status !== \"succeeded\") {\n process.exitCode = 1;\n }\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { LogsAnalysisOptions, LogsAnalysisResult } from \"../../../modules/logs/logs.index\";\nimport { createLogsModuleBindings, formatLogsAnalysisText } from \"../../../modules/logs/logs.index\";\nimport { logCategoryFromOptions, parseNonNegativeInteger, wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterLogsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction logsCapability() {\n const bindings = createLogsModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.analysis;\n}\n\nasync function printLogsResult(\n commandOptions: { json?: boolean },\n translator: Translator,\n options: LogsAnalysisOptions,\n): Promise<void> {\n const result = await logsCapability().execute(options);\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload: LogsAnalysisResult = result.unwrap();\n\n if (wantsJson(commandOptions)) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatLogsAnalysisText(payload, translator));\n}\n\nexport function registerLogsCommand(program: Command, options: RegisterLogsCommandOptions): void {\n const logsCommand = program\n .command(\"logs\")\n .description(options.translator.t(\"cli.logs.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"));\n\n logsCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs\",\n options: () => logsCommand.opts(),\n },\n async (commandOptions: { all?: boolean; json?: boolean; technical?: boolean }) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"list\",\n category: logCategoryFromOptions(commandOptions),\n });\n },\n ),\n );\n\n const showCommand = logsCommand\n .command(\"show\")\n .argument(\"[date]\", options.translator.t(\"cli.logs.show.argument.date\"))\n .description(options.translator.t(\"cli.logs.show.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"))\n .option(\"--limit <limit>\", options.translator.t(\"cli.logs.option.limit\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"));\n\n showCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs.show\",\n options: () => showCommand.opts(),\n },\n async (\n date: string | undefined,\n commandOptions: {\n all?: boolean;\n json?: boolean;\n limit?: string;\n technical?: boolean;\n },\n ) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"read\",\n category: logCategoryFromOptions(commandOptions),\n date,\n limit: parseNonNegativeInteger(commandOptions.limit),\n });\n },\n ),\n );\n\n const tailCommand = logsCommand\n .command(\"tail\")\n .description(options.translator.t(\"cli.logs.tail.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--date <date>\", options.translator.t(\"cli.logs.option.date\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"))\n .option(\"--limit <limit>\", options.translator.t(\"cli.logs.option.limit\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"));\n\n tailCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs.tail\",\n options: () => tailCommand.opts(),\n },\n async (commandOptions: {\n all?: boolean;\n date?: string;\n json?: boolean;\n limit?: string;\n technical?: boolean;\n }) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"read\",\n category: logCategoryFromOptions(commandOptions),\n date: commandOptions.date,\n limit: parseNonNegativeInteger(commandOptions.limit),\n tail: true,\n });\n },\n ),\n );\n\n const searchCommand = logsCommand\n .command(\"search\")\n .argument(\"<query>\", options.translator.t(\"cli.logs.search.argument.query\"))\n .description(options.translator.t(\"cli.logs.search.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--date <date>\", options.translator.t(\"cli.logs.option.date\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"))\n .option(\"--limit <limit>\", options.translator.t(\"cli.logs.option.limit\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"));\n\n searchCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs.search\",\n options: () => searchCommand.opts(),\n },\n async (\n query: string,\n commandOptions: {\n all?: boolean;\n date?: string;\n json?: boolean;\n limit?: string;\n technical?: boolean;\n },\n ) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"search\",\n category: logCategoryFromOptions(commandOptions),\n date: commandOptions.date,\n limit: parseNonNegativeInteger(commandOptions.limit),\n query,\n });\n },\n ),\n );\n\n const summaryCommand = logsCommand\n .command(\"summary\")\n .description(options.translator.t(\"cli.logs.summary.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--date <date>\", options.translator.t(\"cli.logs.option.date\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"));\n\n summaryCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs.summary\",\n options: () => summaryCommand.opts(),\n },\n async (commandOptions: {\n all?: boolean;\n date?: string;\n json?: boolean;\n technical?: boolean;\n }) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"summary\",\n category: logCategoryFromOptions(commandOptions),\n date: commandOptions.date,\n });\n },\n ),\n );\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { LogEvent, LogsAnalysisResult, LogsFileSummary } from \"./analysis.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nfunction commandName(event: LogEvent): string {\n return event.category === \"usage\" ? event.command : (event.command ?? event.event);\n}\n\nfunction durationMs(event: LogEvent): number {\n return event.durationMs ?? 0;\n}\n\nfunction statusName(event: LogEvent): string {\n return event.category === \"usage\" ? event.status : event.level;\n}\n\nfunction formatEvent(event: LogEvent): string {\n return `${event.timestamp} ${event.category.padEnd(9)} ${statusName(event).padEnd(9)} ${event.area.padEnd(7)} ${commandName(event)} ${durationMs(event)}ms`;\n}\n\nfunction formatFiles(files: LogsFileSummary[]): string[] {\n return files.map(\n (file) =>\n ` ${file.date} ${file.category.padEnd(9)} ${String(file.eventCount).padStart(4)} events ${String(file.sizeBytes).padStart(6)} bytes`,\n );\n}\n\nfunction formatCounts(counts: Record<string, number>): string[] {\n return Object.entries(counts)\n .sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]))\n .map(([key, count]) => ` ${key.padEnd(18)} ${count}`);\n}\n\nexport function formatLogsAnalysisText(\n result: LogsAnalysisResult,\n translator: Translator = defaultTranslator,\n): string {\n const t = (key: string, values?: Record<string, string | number>) => translator.t(key, values);\n const rows = [t(\"logs.title\"), t(\"logs.command\"), \"\", `[${result.action}] ${result.path}`];\n\n if (result.action === \"list\") {\n rows.push(\"\", ` ${t(\"logs.section.files\")}`);\n rows.push(...formatFiles(result.files));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"read\") {\n rows.push(\"\", ` ${t(\"logs.section.events\", { count: result.events.length })}`);\n rows.push(...result.events.map(formatEvent));\n rows.push(` ${t(\"logs.totalEvents\", { count: result.totalEvents })}`);\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"search\") {\n rows.push(\n \"\",\n ` ${t(\"logs.section.matches\", { count: result.totalMatches, query: result.query })}`,\n );\n rows.push(...result.events.map(formatEvent));\n return rows.join(\"\\n\");\n }\n\n rows.push(\n \"\",\n ` ${t(\"logs.totalEvents\", { count: result.totalEvents })}`,\n ` ${t(\"logs.averageDuration\", { duration: result.averageDurationMs })}`,\n \"\",\n ` ${t(\"logs.section.byCommand\")}`,\n ...formatCounts(result.byCommand),\n \"\",\n ` ${t(\"logs.section.byCategory\")}`,\n ...formatCounts(result.byCategory),\n \"\",\n ` ${t(\"logs.section.byArea\")}`,\n ...formatCounts(result.byArea),\n \"\",\n ` ${t(\"logs.section.byStatus\")}`,\n ...formatCounts(result.byStatus),\n \"\",\n ` ${t(\"logs.section.slowest\")}`,\n ...result.slowest.map(formatEvent),\n );\n\n return rows.join(\"\\n\");\n}\n","import { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport type { ToolRuntime } from \"../../infra/bases/tool_runtime\";\nimport { createAgentMcpServer } from \"./mcp_server\";\n\nexport type StartMcpHttpServerOptions = {\n allowedOrigins?: string[];\n host: string;\n packageName: string;\n port: number;\n runtime: ToolRuntime;\n version: string;\n};\n\nconst endpointPath = \"/mcp\";\n\nfunction isOriginAllowed(origin: string | undefined, allowedOrigins: string[]): boolean {\n if (origin === undefined) {\n return true;\n }\n\n return allowedOrigins.includes(origin);\n}\n\nfunction writeText(res: ServerResponse, statusCode: number, text: string): void {\n res.writeHead(statusCode, { \"content-type\": \"text/plain; charset=utf-8\" });\n res.end(text);\n}\n\nexport async function startMcpHttpServer(options: StartMcpHttpServerOptions): Promise<Server> {\n const httpServer = createServer(async (req: IncomingMessage, res: ServerResponse) => {\n const pathname = req.url === undefined ? \"\" : new URL(req.url, \"http://127.0.0.1\").pathname;\n\n if (pathname === \"/health\" && req.method === \"GET\") {\n res.writeHead(200, { \"content-type\": \"application/json; charset=utf-8\" });\n res.end(\n JSON.stringify({ name: options.packageName, status: \"ok\", version: options.version }),\n );\n return;\n }\n\n if (pathname !== endpointPath) {\n writeText(res, 404, \"Not found\");\n return;\n }\n\n if (req.method !== \"POST\" && req.method !== \"GET\") {\n writeText(res, 405, \"Method not allowed\");\n return;\n }\n\n if (!isOriginAllowed(req.headers.origin, options.allowedOrigins ?? [])) {\n writeText(res, 403, \"Forbidden origin\");\n return;\n }\n\n try {\n const address = httpServer.address();\n const activePort =\n typeof address === \"object\" && address !== null ? address.port : options.port;\n const server = createAgentMcpServer(options);\n const transport = new StreamableHTTPServerTransport({\n allowedHosts: [\n `${options.host}:${activePort}`,\n `127.0.0.1:${activePort}`,\n `localhost:${activePort}`,\n ],\n enableDnsRebindingProtection: true,\n sessionIdGenerator: undefined,\n });\n\n await server.connect(transport);\n res.on(\"close\", () => {\n void transport.close();\n void server.close();\n });\n await transport.handleRequest(req, res);\n } catch (error) {\n if (!res.headersSent) {\n writeText(res, 500, error instanceof Error ? error.message : \"MCP request failed\");\n } else {\n res.end();\n }\n }\n });\n\n await new Promise<void>((resolve) => {\n httpServer.listen(options.port, options.host, resolve);\n });\n\n return httpServer;\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n type Tool,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { AgentRuntime } from \"../../infra/agent/agent_runtime\";\nimport type { ToolRuntime } from \"../../infra/bases/tool_runtime\";\nimport { createBrainDockProvider } from \"../../infra/brain/brain_dock\";\nimport {\n hasObjectOutputSchema,\n inputSchemaWithAgentControl,\n runtimeResultToMcpContent,\n splitMcpToolInput,\n} from \"./mcp_result_mapper\";\n\nconst AGENT_TASK_TOOL_NAME = \"agent.task\";\n\nconst agentTaskTool: Tool = {\n name: AGENT_TASK_TOOL_NAME,\n title: \"Delegate a task to the local agent\",\n description:\n \"Delegate a bounded, multi-step or routine local task to the Agent DevKit local agent: it plans and runs the necessary capabilities on your behalf and returns a concise result. Prefer this to offload orchestration and reduce token usage. Use the individual capability tools directly when you need step-by-step control, precise intermediate results, or to intervene mid-task.\",\n inputSchema: {\n type: \"object\",\n properties: {\n approvedTools: {\n type: \"array\",\n description:\n \"Capability ids that are explicitly approved for this run. Approval is scoped per tool call.\",\n items: { type: \"string\" },\n },\n task: {\n type: \"string\",\n description: \"The task to perform, described in natural language.\",\n },\n },\n required: [\"task\"],\n } as Tool[\"inputSchema\"],\n outputSchema: {\n type: \"object\",\n properties: {\n reply: { type: \"string\" },\n steps: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n ok: { type: \"boolean\" },\n summary: { type: \"string\" },\n tool: { type: \"string\" },\n },\n },\n },\n },\n required: [\"reply\", \"steps\"],\n } as Tool[\"outputSchema\"],\n annotations: { openWorldHint: true },\n _meta: { \"agent-devkit/kind\": \"agent-delegation\" },\n};\n\nexport type AgentMcpServerOptions = {\n packageName: string;\n runtime: ToolRuntime;\n version: string;\n};\n\nfunction mcpToolFromRuntimeTool(tool: ReturnType<ToolRuntime[\"listTools\"]>[number]): Tool {\n const mcpTool: Tool = {\n name: tool.id,\n title: tool.name,\n description: tool.description,\n inputSchema: inputSchemaWithAgentControl(tool) as Tool[\"inputSchema\"],\n annotations: {\n destructiveHint: tool.risk === \"destructive\",\n openWorldHint: tool.risk === \"external-write\",\n readOnlyHint: tool.risk === \"read-only\",\n },\n _meta: {\n \"agent-devkit/approvalRequired\": tool.approval.required,\n \"agent-devkit/moduleId\": tool.moduleId,\n \"agent-devkit/risk\": tool.risk,\n },\n };\n\n if (hasObjectOutputSchema(tool)) {\n return { ...mcpTool, outputSchema: tool.outputSchema as Tool[\"outputSchema\"] };\n }\n\n return mcpTool;\n}\n\nexport function createAgentMcpServer(options: AgentMcpServerOptions): Server {\n const server = new Server(\n {\n name: options.packageName,\n version: options.version,\n },\n {\n capabilities: {\n tools: {},\n },\n instructions:\n \"Agent DevKit exposes local capabilities as MCP tools, plus an `agent.task` delegation tool. Prefer `agent.task` for bounded, multi-step or routine local tasks to offload orchestration and reduce token usage; use the individual capability tools directly when you need step-by-step control or precise intermediate results. Risky tools require explicit approval through _agent.approved. For agent.task, approval must be scoped with approvedTools.\",\n },\n );\n\n const agent = new AgentRuntime({\n brainProvider: createBrainDockProvider({ stateDirectory: join(homedir(), \".agent-devkit\") }),\n toolRuntime: options.runtime,\n });\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [agentTaskTool, ...options.runtime.listTools().map(mcpToolFromRuntimeTool)],\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n if (request.params.name === AGENT_TASK_TOOL_NAME) {\n const args = (request.params.arguments ?? {}) as Record<string, unknown>;\n const task = typeof args.task === \"string\" ? args.task : \"\";\n const approvedTools = Array.isArray(args.approvedTools)\n ? args.approvedTools.filter((tool): tool is string => typeof tool === \"string\")\n : undefined;\n\n if (task.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"Missing 'task'.\" }], isError: true };\n }\n\n const run = await agent.run({ approvedTools, task });\n\n if (run.isErr()) {\n return {\n content: [{ type: \"text\" as const, text: `Agent run failed: ${run.unwrapError()}` }],\n isError: true,\n };\n }\n\n const payload = run.unwrap();\n const stepsText = payload.steps.map((step) => `- ${step.tool}: ${step.summary}`).join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: stepsText.length > 0 ? `${payload.reply}\\n\\nSteps:\\n${stepsText}` : payload.reply,\n },\n ],\n isError: false,\n structuredContent: { reply: payload.reply, steps: payload.steps },\n };\n }\n\n const { approved, capabilityInput } = splitMcpToolInput(request.params.arguments ?? {});\n const result = await options.runtime.execute({\n approved,\n capabilityId: request.params.name,\n input: capabilityInput,\n interface: \"mcp\",\n requestedBy: \"mcp.tools.call\",\n });\n const tool = options.runtime.getTool(request.params.name);\n\n return runtimeResultToMcpContent(result, tool.isOk() && hasObjectOutputSchema(tool.unwrap()));\n });\n\n return server;\n}\n","import { z } from \"zod\";\nimport type { BrainProviderPort, BrainRequest } from \"../bases/brain\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { type AgentPrompt, AgentPromptSchema, type PromptMessage } from \"../bases/prompt\";\nimport { Result } from \"../bases/result\";\nimport type { ToolRuntime, ToolRuntimeResult, ToolRuntimeTool } from \"../bases/tool_runtime\";\n\nexport const AgentDecisionSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"tool\"), input: z.unknown(), tool: z.string().min(1) }),\n z.object({ action: z.literal(\"final\"), reply: z.string() }),\n]);\n\nexport type AgentDecision = z.infer<typeof AgentDecisionSchema>;\n\nconst agentDecisionJsonSchema: Record<string, unknown> = {\n type: \"object\",\n properties: {\n action: { type: \"string\", enum: [\"tool\", \"final\"] },\n input: { type: \"object\" },\n reply: { type: \"string\" },\n tool: { type: \"string\" },\n },\n required: [\"action\"],\n};\n\nexport type AgentStep = {\n ok: boolean;\n summary: string;\n tool: string;\n};\n\nexport type AgentRunResult = {\n reply: string;\n steps: AgentStep[];\n};\n\nexport type AgentStreamEvent =\n | { type: \"tool\"; tool: string }\n | { type: \"observation\"; ok: boolean; summary: string; tool: string }\n | { type: \"final\"; reply: string };\n\nexport type AgentRunInput = {\n approved?: boolean;\n approvedTools?: string[];\n history?: { content: string; role: \"assistant\" | \"user\" }[];\n maxSteps?: number;\n onEvent?: (event: AgentStreamEvent) => void;\n task: string;\n};\n\nexport type AgentRuntimeOptions = {\n brainProvider: BrainProviderPort;\n toolRuntime: ToolRuntime;\n};\n\nfunction summarize(value: unknown): string {\n const text = typeof value === \"string\" ? value : JSON.stringify(value ?? \"\");\n const compact = text.replaceAll(/\\s+/g, \" \").trim();\n return compact.length > 240 ? `${compact.slice(0, 240)}…` : compact;\n}\n\nfunction observationSummary(result: ToolRuntimeResult): string {\n if (result.status === \"succeeded\") {\n return summarize(result.output);\n }\n\n return `${result.status}${result.error === undefined ? \"\" : `: ${result.error.message}`}`;\n}\n\n/**\n * Single-agent tool-use loop over the ToolRuntime. Lives outside the capability\n * registry on purpose (so the agent is not a tool that can call itself). Uses a\n * JSON-constrained decision each turn: run a tool, or answer.\n */\nexport class AgentRuntime {\n readonly #brain: BrainProviderPort;\n readonly #tools: ToolRuntime;\n\n constructor(options: AgentRuntimeOptions) {\n this.#brain = options.brainProvider;\n this.#tools = options.toolRuntime;\n }\n\n async run(input: AgentRunInput): Promise<Result<AgentDevKitErrorCode, AgentRunResult>> {\n const generateStructured = this.#brain.generateStructured?.bind(this.#brain);\n\n if (generateStructured === undefined) {\n return Result.fail(ErrorCodes.BrainProviderUnavailable);\n }\n\n const maxSteps = input.maxSteps ?? 6;\n const steps: AgentStep[] = [];\n const transcript: PromptMessage[] = (input.history ?? []).map((message) => ({\n content: message.content,\n role: message.role,\n }));\n const tools = this.#tools.listTools();\n\n for (let step = 0; step < maxSteps; step += 1) {\n const prompt = this.#buildPrompt(input.task, transcript, tools);\n const request: BrainRequest = {\n options: { provider: \"local\", role: \"agent\" },\n prompt,\n schema: \"agent-devkit.brain-request/v1\",\n };\n const structured = await generateStructured(request, agentDecisionJsonSchema);\n\n if (structured.isErr()) {\n return Result.fail(structured.unwrapError());\n }\n\n const decision = AgentDecisionSchema.safeParse(structured.unwrap().json);\n\n if (!decision.success) {\n return Result.ok({ reply: structured.unwrap().raw.trim(), steps });\n }\n\n if (decision.data.action === \"final\") {\n input.onEvent?.({ reply: decision.data.reply, type: \"final\" });\n return Result.ok({ reply: decision.data.reply, steps });\n }\n\n const tool = decision.data.tool;\n input.onEvent?.({ tool, type: \"tool\" });\n\n const execution = await this.#tools.execute({\n approved: this.#isApproved(tool, input),\n capabilityId: tool,\n input: decision.data.input,\n interface: \"agent\",\n requestedBy: \"agent.run\",\n });\n const ok = execution.status === \"succeeded\";\n const summary = observationSummary(execution);\n\n steps.push({ ok, summary, tool });\n input.onEvent?.({ ok, summary, tool, type: \"observation\" });\n transcript.push({ content: `Observation from ${tool}: ${summary}`, role: \"tool\" });\n\n if (execution.status === \"approval_required\") {\n return Result.ok({\n reply: `A ferramenta ${tool} requer aprovação explícita. Reexecute autorizando para continuar.`,\n steps,\n });\n }\n }\n\n return Result.ok({\n reply: \"Limite de passos do agente atingido sem uma resposta final.\",\n steps,\n });\n }\n\n #isApproved(tool: string, input: AgentRunInput): boolean {\n if (input.approvedTools !== undefined) {\n return input.approvedTools.includes(tool);\n }\n\n return input.approved === true;\n }\n\n #buildPrompt(task: string, transcript: PromptMessage[], tools: ToolRuntimeTool[]): AgentPrompt {\n const toolList = tools\n .map((tool) => `- ${tool.id} (${tool.risk}): ${tool.description}`)\n .join(\"\\n\");\n const instruction = [\n `Tarefa do usuário: ${task}`,\n \"\",\n \"Ferramentas disponíveis:\",\n toolList,\n \"\",\n 'Responda SOMENTE com JSON. Para usar uma ferramenta: {\"action\":\"tool\",\"tool\":\"<id>\",\"input\":{...}}. Para responder ao usuário: {\"action\":\"final\",\"reply\":\"<texto>\"}. Uma ação por vez.',\n ].join(\"\\n\");\n\n return AgentPromptSchema.parse({\n agent: {\n behavior: \"balanced\",\n characterId: \"agent\",\n detailLevel: \"concise\",\n name: \"Agent\",\n tone: \"direct\",\n traits: [],\n },\n context: { knowledge: [] },\n locale: \"pt-BR\",\n messages: transcript,\n output: { format: \"json\", language: \"pt-BR\" },\n policies: {\n allowToolCalls: true,\n approvalRequired: false,\n maxToolCalls: maxToolCallsFor(tools),\n },\n schema: \"agent-devkit.prompt/v1\",\n task: { userMessage: instruction },\n tools: tools.map((tool) => ({\n description: tool.description,\n id: tool.id,\n inputSchema: tool.inputSchema,\n risk: tool.risk,\n })),\n });\n }\n}\n\nfunction maxToolCallsFor(tools: ToolRuntimeTool[]): number {\n return Math.max(1, tools.length);\n}\n","import type { ToolRuntimeResult, ToolRuntimeTool } from \"../../infra/bases/tool_runtime\";\n\nexport type McpToolInput = Record<string, unknown> & {\n _agent?: {\n approved?: boolean;\n };\n};\n\nexport function inputSchemaWithAgentControl(tool: ToolRuntimeTool): Record<string, unknown> {\n const schema = structuredClone(tool.inputSchema);\n const properties =\n typeof schema.properties === \"object\" && schema.properties !== null\n ? (schema.properties as Record<string, unknown>)\n : {};\n\n const normalized = {\n ...schema,\n type: \"object\",\n properties: { ...properties },\n };\n\n if (!tool.approval.required) {\n return normalized;\n }\n\n return {\n ...normalized,\n properties: {\n ...properties,\n _agent: {\n additionalProperties: false,\n description: \"Agent DevKit MCP control metadata. Removed before capability execution.\",\n properties: {\n approved: {\n description: \"Explicitly approve a capability that requires approval.\",\n type: \"boolean\",\n },\n },\n type: \"object\",\n },\n },\n };\n}\n\nexport function splitMcpToolInput(input: unknown): {\n approved?: boolean;\n capabilityInput: unknown;\n} {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n return { capabilityInput: input };\n }\n\n const { _agent, ...capabilityInput } = input as McpToolInput;\n const approved =\n _agent !== undefined && typeof _agent === \"object\" && _agent.approved === true\n ? true\n : undefined;\n\n return {\n approved,\n capabilityInput,\n };\n}\n\nfunction isStructuredObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function hasObjectOutputSchema(tool: ToolRuntimeTool): boolean {\n return isStructuredObject(tool.outputSchema) && tool.outputSchema.type === \"object\";\n}\n\nexport function runtimeResultToMcpContent(\n result: ToolRuntimeResult,\n includeStructuredContent = false,\n) {\n const isError = result.status !== \"succeeded\";\n const content = [\n {\n type: \"text\" as const,\n text: JSON.stringify(result, null, 2),\n },\n ];\n\n if (!isError && includeStructuredContent && isStructuredObject(result.output)) {\n return { content, isError, structuredContent: result.output };\n }\n\n return { content, isError };\n}\n","import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport type { ToolRuntime } from \"../../infra/bases/tool_runtime\";\nimport { createAgentMcpServer } from \"./mcp_server\";\n\nexport type StartMcpStdioServerOptions = {\n packageName: string;\n runtime: ToolRuntime;\n version: string;\n};\n\nexport async function startMcpStdioServer(options: StartMcpStdioServerOptions): Promise<void> {\n const server = createAgentMcpServer(options);\n const transport = new StdioServerTransport();\n\n const shutdown = async (): Promise<void> => {\n await server.close().catch(() => undefined);\n await transport.close().catch(() => undefined);\n };\n\n process.once(\"SIGINT\", () => {\n void shutdown().finally(() => process.exit(0));\n });\n process.once(\"SIGTERM\", () => {\n void shutdown().finally(() => process.exit(0));\n });\n\n await server.connect(transport);\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport { startMcpHttpServer } from \"../../mcp/mcp_http_transport\";\nimport { startMcpStdioServer } from \"../../mcp/mcp_stdio_transport\";\nimport { parsePositiveInteger } from \"../command_options\";\nimport { createCliToolRuntime } from \"../toolRuntime\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterMcpCommandOptions = {\n currentVersion: string;\n packageName: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction runtime(options: RegisterMcpCommandOptions) {\n return createCliToolRuntime({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n });\n}\n\nasync function runStdio(options: RegisterMcpCommandOptions): Promise<void> {\n await startMcpStdioServer({\n packageName: options.packageName,\n runtime: runtime(options),\n version: options.currentVersion,\n });\n}\n\nexport function registerMcpCommand(program: Command, options: RegisterMcpCommandOptions): void {\n const mcpCommand = program\n .command(\"mcp\")\n .description(options.translator.t(\"cli.mcp.description\"));\n\n mcpCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"mcp.stdio\",\n createStateIfMissing: false,\n options: () => ({}),\n },\n async () => {\n await runStdio(options);\n },\n ),\n );\n\n const stdioCommand = mcpCommand\n .command(\"stdio\")\n .description(options.translator.t(\"cli.mcp.stdio.description\"));\n\n stdioCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"mcp.stdio\",\n createStateIfMissing: false,\n options: () => stdioCommand.opts(),\n },\n async () => {\n await runStdio(options);\n },\n ),\n );\n\n const httpCommand = mcpCommand\n .command(\"http\")\n .description(options.translator.t(\"cli.mcp.http.description\"))\n .option(\"--host <host>\", options.translator.t(\"cli.mcp.http.option.host\"), \"127.0.0.1\")\n .option(\"--port <port>\", options.translator.t(\"cli.mcp.http.option.port\"), \"3333\")\n .option(\n \"--origin <origin...>\",\n options.translator.t(\"cli.mcp.http.option.origin\"),\n [] as string[],\n );\n\n httpCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"mcp.http\",\n createStateIfMissing: false,\n options: () => httpCommand.opts(),\n },\n async (commandOptions: { host: string; origin: string[]; port: string }) => {\n if (commandOptions.host !== \"127.0.0.1\" && commandOptions.host !== \"localhost\") {\n throw new Error(\"MCP HTTP currently supports only localhost hosts.\");\n }\n\n const server = await startMcpHttpServer({\n allowedOrigins: commandOptions.origin,\n host: commandOptions.host,\n packageName: options.packageName,\n port: parsePositiveInteger(commandOptions.port),\n runtime: runtime(options),\n version: options.currentVersion,\n });\n\n const address = server.address();\n const port =\n typeof address === \"object\" && address !== null ? address.port : commandOptions.port;\n process.stderr.write(\n `Agent DevKit MCP HTTP listening on http://${commandOptions.host}:${port}/mcp\\n`,\n );\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport type { ModelsRegistryResult } from \"../../../modules/models/models.index\";\nimport {\n createModelsModuleBindings,\n formatModelsRegistryText,\n} from \"../../../modules/models/models.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterModelsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction modelsCapability() {\n const bindings = createModelsModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.registry;\n}\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, ModelsRegistryResult>,\n translator: Translator,\n json?: boolean,\n): void {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatModelsRegistryText(payload, translator));\n}\n\nexport function registerModelsCommand(\n program: Command,\n options: RegisterModelsCommandOptions,\n): void {\n const modelsCommand = program\n .command(\"models\")\n .description(options.translator.t(\"cli.models.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n modelsCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"models\",\n createStateIfMissing: false,\n options: () => modelsCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await modelsCapability().execute({ action: \"list\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const listCommand = modelsCommand\n .command(\"list\")\n .description(options.translator.t(\"cli.models.list.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n listCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"models.list\",\n createStateIfMissing: false,\n options: () => listCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await modelsCapability().execute({ action: \"list\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const statusCommand = modelsCommand\n .command(\"status\")\n .argument(\"[id]\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.status.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n statusCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"models.status\",\n createStateIfMissing: false,\n options: () => statusCommand.opts(),\n },\n async (id: string | undefined) => {\n const commandOptions = statusCommand.opts<{ json?: boolean }>();\n printResult(\n await modelsCapability().execute({ action: \"status\", id }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const installCommand = modelsCommand\n .command(\"install\")\n .argument(\"<id>\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.install.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n installCommand.action(\n options.usageLogging.track(\n { area: \"system\", command: \"models.install\", options: () => installCommand.opts() },\n async (id: string) => {\n const commandOptions = installCommand.opts<{ json?: boolean }>();\n\n if (wantsJson(commandOptions) !== true) {\n process.stderr.write(`${options.translator.t(\"cli.models.install.progress\", { id })}\\n`);\n }\n\n printResult(\n await modelsCapability().execute({ action: \"install\", id }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const uninstallCommand = modelsCommand\n .command(\"uninstall\")\n .alias(\"rm\")\n .argument(\"<id>\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.uninstall.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n uninstallCommand.action(\n options.usageLogging.track(\n { area: \"system\", command: \"models.uninstall\", options: () => uninstallCommand.opts() },\n async (id: string) => {\n const commandOptions = uninstallCommand.opts<{ json?: boolean }>();\n printResult(\n await modelsCapability().execute({ action: \"uninstall\", id }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const updateCommand = modelsCommand\n .command(\"update\")\n .argument(\"[id]\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.update.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n updateCommand.action(\n options.usageLogging.track(\n { area: \"system\", command: \"models.update\", options: () => updateCommand.opts() },\n async (id: string | undefined) => {\n const commandOptions = updateCommand.opts<{ json?: boolean }>();\n printResult(\n await modelsCapability().execute({ action: \"update\", id }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const useCommand = modelsCommand\n .command(\"use\")\n .argument(\"<id>\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.use.description\"))\n .option(\"--agent\", options.translator.t(\"cli.models.use.option.agent\"))\n .option(\"--chat\", options.translator.t(\"cli.models.use.option.chat\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n useCommand.action(\n options.usageLogging.track(\n { area: \"system\", command: \"models.use\", options: () => useCommand.opts() },\n async (id: string) => {\n const commandOptions = useCommand.opts<{\n agent?: boolean;\n chat?: boolean;\n json?: boolean;\n }>();\n\n if (commandOptions.agent === true && commandOptions.chat === true) {\n throw new Error(\"Use only one of --agent or --chat.\");\n }\n\n const role =\n commandOptions.agent === true\n ? \"agent\"\n : commandOptions.chat === true\n ? \"chat\"\n : undefined;\n printResult(\n await modelsCapability().execute({ action: \"use\", id, role }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { ModelsRegistryResult, ModelView } from \"./registry.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nfunction formatSize(bytes: number): string {\n if (bytes <= 0) {\n return \"-\";\n }\n\n const megabytes = bytes / 1_000_000;\n return megabytes >= 1000 ? `${(megabytes / 1000).toFixed(1)}GB` : `${Math.round(megabytes)}MB`;\n}\n\nfunction formatModel(model: ModelView): string {\n const installedMark = model.installed ? \"*\" : \" \";\n const defaultMark = model.isDefault ? \"D\" : \" \";\n const state = model.installed ? \"installed\" : \"available\";\n\n return ` ${installedMark}${defaultMark} ${model.id.padEnd(32)} ${model.parameters.padEnd(6)} ${model.quantization.padEnd(8)} ${formatSize(model.sizeBytes).padEnd(7)} ${state}`;\n}\n\nexport function formatModelsRegistryText(\n result: ModelsRegistryResult,\n translator: Translator = defaultTranslator,\n): string {\n const t = (key: string, values?: Record<string, string | number | boolean>) =>\n translator.t(key, values);\n const rows = [\n t(\"models.title\"),\n t(\"models.command\"),\n \"\",\n `[${result.action}] ${result.directory}`,\n ];\n\n if (result.action === \"list\" || result.action === \"status\" || result.action === \"update\") {\n if (result.action === \"list\" && result.defaultId !== undefined) {\n rows.push(` ${t(\"models.field.default\")} ${result.defaultId}`);\n }\n\n rows.push(\"\", ...result.models.map(formatModel));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"install\") {\n rows.push(formatModel(result.model));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"uninstall\") {\n rows.push(` ${result.id} ${result.removed ? \"removed\" : \"not found\"}`);\n return rows.join(\"\\n\");\n }\n\n const roleSuffix = result.role === undefined ? \"\" : ` (${result.role})`;\n rows.push(` ${t(\"models.field.default\")} ${result.defaultId}${roleSuffix}`);\n return rows.join(\"\\n\");\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport type { PersonalizationResult } from \"../../../modules/user/user.index\";\nimport {\n createUserModuleBindings,\n formatPersonalizationText,\n} from \"../../../modules/user/user.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\nfunction personalizationCapability() {\n const bindings = createUserModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.personalization;\n}\n\ntype RegisterPersonalizationCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\ntype UpdateCommandOptions = {\n behavior?: string;\n character?: string;\n detail?: string;\n gender?: string;\n json?: boolean;\n name?: string;\n tone?: string;\n traits?: string;\n};\n\nfunction parseTraits(value: string | undefined): string[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n return value\n .split(\",\")\n .map((trait) => trait.trim())\n .filter((trait) => trait.length > 0);\n}\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, PersonalizationResult>,\n translator: Translator,\n json?: boolean,\n) {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatPersonalizationText(payload, translator));\n}\n\nexport function registerPersonalizationCommand(\n program: Command,\n options: RegisterPersonalizationCommandOptions,\n): void {\n const registerOptions = options;\n const personalization = program\n .command(\"personalization\")\n .alias(\"personalize\")\n .description(registerOptions.translator.t(\"cli.personalization.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.option.json\"))\n .action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization\",\n options: () => personalization.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await personalizationCapability().execute({ action: \"view\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const presetsCommand = personalization\n .command(\"characters\")\n .alias(\"presets\")\n .description(registerOptions.translator.t(\"cli.personalization.characters.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.characters.option.json\"));\n\n presetsCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.presets\",\n options: () => presetsCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await personalizationCapability().execute({ action: \"list-characters\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const selectCommand = personalization\n .command(\"select\")\n .argument(\"<character>\", registerOptions.translator.t(\"cli.personalization.select.argument\"))\n .description(registerOptions.translator.t(\"cli.personalization.select.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.select.option.json\"));\n\n selectCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.select\",\n options: () => selectCommand.opts(),\n },\n async (character: string) => {\n const commandOptions = selectCommand.opts<{ json?: boolean }>();\n\n await printResult(\n await personalizationCapability().execute({\n action: \"select-preset\",\n characterId: character,\n }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const updateCommand = personalization\n .command(\"update\")\n .description(registerOptions.translator.t(\"cli.personalization.update.description\"))\n .option(\"--name <name>\", registerOptions.translator.t(\"cli.personalization.update.option.name\"))\n .option(\n \"--character <character>\",\n registerOptions.translator.t(\"cli.personalization.update.option.character\"),\n )\n .option(\n \"--behavior <behavior>\",\n registerOptions.translator.t(\"cli.personalization.update.option.behavior\"),\n )\n .option(\"--tone <tone>\", registerOptions.translator.t(\"cli.personalization.update.option.tone\"))\n .option(\n \"--detail <detail>\",\n registerOptions.translator.t(\"cli.personalization.update.option.detail\"),\n )\n .option(\n \"--gender <gender>\",\n registerOptions.translator.t(\"cli.personalization.update.option.gender\"),\n )\n .option(\n \"--traits <traits>\",\n registerOptions.translator.t(\"cli.personalization.update.option.traits\"),\n )\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.update.option.json\"));\n\n updateCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.update\",\n options: () => updateCommand.opts(),\n },\n async () => {\n const commandOptions = updateCommand.opts<UpdateCommandOptions>();\n\n await printResult(\n await personalizationCapability().execute({\n action: \"update\",\n profile: {\n name: commandOptions.name,\n behavior: commandOptions.behavior as never,\n characterId: commandOptions.character,\n detailLevel: commandOptions.detail as never,\n gender: commandOptions.gender as never,\n tone: commandOptions.tone as never,\n traits: parseTraits(commandOptions.traits),\n },\n }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const createCommand = personalization\n .command(\"create\")\n .requiredOption(\n \"--id <id>\",\n registerOptions.translator.t(\"cli.personalization.create.option.id\"),\n )\n .requiredOption(\n \"--name <name>\",\n registerOptions.translator.t(\"cli.personalization.create.option.name\"),\n )\n .option(\"--from <id>\", registerOptions.translator.t(\"cli.personalization.create.option.from\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.create.option.json\"));\n\n createCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.create\",\n options: () => createCommand.opts(),\n },\n async () => {\n const commandOptions = createCommand.opts<{\n from?: string;\n id: string;\n json?: boolean;\n name: string;\n }>();\n\n await printResult(\n await personalizationCapability().execute({\n action: \"create-character\",\n character: {\n fromCharacterId: commandOptions.from,\n id: commandOptions.id,\n name: commandOptions.name,\n },\n }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const importSpriteCommand = personalization\n .command(\"import-sprite\")\n .requiredOption(\n \"--character <character>\",\n registerOptions.translator.t(\"cli.personalization.importSprite.option.character\"),\n )\n .requiredOption(\n \"--path <path>\",\n registerOptions.translator.t(\"cli.personalization.importSprite.option.path\"),\n )\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.importSprite.option.json\"));\n\n importSpriteCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.import-sprite\",\n options: () => importSpriteCommand.opts(),\n },\n async () => {\n const commandOptions = importSpriteCommand.opts<{\n character: string;\n json?: boolean;\n path: string;\n }>();\n\n await printResult(\n await personalizationCapability().execute({\n action: \"import-sprite\",\n characterId: commandOptions.character,\n sourcePath: commandOptions.path,\n }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const resetCurrentCommand = personalization\n .command(\"reset-current\")\n .description(registerOptions.translator.t(\"cli.personalization.resetCurrent.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.resetCurrent.option.json\"));\n\n resetCurrentCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.reset-current\",\n options: () => resetCurrentCommand.opts(),\n },\n async () => {\n const commandOptions = resetCurrentCommand.opts<{ json?: boolean }>();\n\n await printResult(\n await personalizationCapability().execute({ action: \"reset-current\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const resetDefaultsCommand = personalization\n .command(\"reset-defaults\")\n .description(registerOptions.translator.t(\"cli.personalization.resetDefaults.description\"))\n .option(\n \"--json\",\n registerOptions.translator.t(\"cli.personalization.resetDefaults.option.json\"),\n );\n\n resetDefaultsCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.reset-defaults\",\n options: () => resetDefaultsCommand.opts(),\n },\n async () => {\n const commandOptions = resetDefaultsCommand.opts<{ json?: boolean }>();\n\n await printResult(\n await personalizationCapability().execute({ action: \"reset-defaults\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { LanguageId, Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport type { PreferencesResult } from \"../../../modules/user/user.index\";\nimport { createUserModuleBindings, formatPreferencesText } from \"../../../modules/user/user.index\";\nimport { parsePositiveInteger, wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\nfunction preferencesCapability() {\n const bindings = createUserModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.preferences;\n}\n\ntype RegisterPreferencesCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, PreferencesResult>,\n translator: Translator,\n json?: boolean,\n) {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatPreferencesText(payload, translator));\n}\n\nexport function registerPreferencesCommand(\n program: Command,\n options: RegisterPreferencesCommandOptions,\n): void {\n const registerOptions = options;\n const preferences = program\n .command(\"preferences\")\n .alias(\"prefs\")\n .description(registerOptions.translator.t(\"cli.preferences.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.option.json\"))\n .action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences\",\n options: () => preferences.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await preferencesCapability().execute({ action: \"view\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const themesCommand = preferences\n .command(\"themes\")\n .description(registerOptions.translator.t(\"cli.preferences.themes.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.themes.option.json\"));\n\n themesCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.themes\",\n options: () => themesCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await preferencesCapability().execute({ action: \"view\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const languagesCommand = preferences\n .command(\"languages\")\n .description(registerOptions.translator.t(\"cli.preferences.languages.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.languages.option.json\"));\n\n languagesCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.languages\",\n options: () => languagesCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await preferencesCapability().execute({ action: \"view\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const setThemeCommand = preferences\n .command(\"set-theme\")\n .argument(\"<theme>\", registerOptions.translator.t(\"cli.preferences.setTheme.argument\"))\n .description(registerOptions.translator.t(\"cli.preferences.setTheme.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.setTheme.option.json\"));\n\n setThemeCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.set-theme\",\n options: () => setThemeCommand.opts(),\n },\n async (theme: string) => {\n const options = setThemeCommand.opts<{ json?: boolean }>();\n await printResult(\n await preferencesCapability().execute({ action: \"set-theme\", theme }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n\n const setLanguageCommand = preferences\n .command(\"set-language\")\n .argument(\"<language>\", registerOptions.translator.t(\"cli.preferences.setLanguage.argument\"))\n .description(registerOptions.translator.t(\"cli.preferences.setLanguage.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.setLanguage.option.json\"));\n\n setLanguageCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.set-language\",\n options: () => setLanguageCommand.opts(),\n },\n async (language: string) => {\n const options = setLanguageCommand.opts<{ json?: boolean }>();\n await printResult(\n await preferencesCapability().execute({\n action: \"set-language\",\n language: language as LanguageId,\n }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n\n const setLogRetentionCommand = preferences\n .command(\"set-log-retention\")\n .argument(\"<days>\", registerOptions.translator.t(\"cli.preferences.setLogRetention.argument\"))\n .description(registerOptions.translator.t(\"cli.preferences.setLogRetention.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.setLogRetention.option.json\"));\n\n setLogRetentionCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.set-log-retention\",\n options: () => setLogRetentionCommand.opts(),\n },\n async (days: string) => {\n const options = setLogRetentionCommand.opts<{ json?: boolean }>();\n await printResult(\n await preferencesCapability().execute({\n action: \"set-log-retention\",\n logRetentionDays: parsePositiveInteger(days),\n }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n\n const updateCommand = preferences\n .command(\"update\")\n .description(registerOptions.translator.t(\"cli.preferences.update.description\"))\n .option(\"--theme <theme>\", registerOptions.translator.t(\"cli.preferences.update.option.theme\"))\n .option(\n \"--language <language>\",\n registerOptions.translator.t(\"cli.preferences.update.option.language\"),\n )\n .option(\n \"--log-retention-days <days>\",\n registerOptions.translator.t(\"cli.preferences.update.option.logRetentionDays\"),\n )\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.update.option.json\"));\n\n updateCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.update\",\n options: () => updateCommand.opts(),\n },\n async () => {\n const options = updateCommand.opts<{\n json?: boolean;\n language?: string;\n logRetentionDays?: string;\n theme?: string;\n }>();\n\n await printResult(\n await preferencesCapability().execute({\n action: \"update\",\n language: options.language as LanguageId | undefined,\n logRetentionDays:\n options.logRetentionDays === undefined\n ? undefined\n : parsePositiveInteger(options.logRetentionDays),\n theme: options.theme,\n }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n\n const resetDefaultsCommand = preferences\n .command(\"reset-defaults\")\n .description(registerOptions.translator.t(\"cli.preferences.resetDefaults.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.resetDefaults.option.json\"));\n\n resetDefaultsCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.reset-defaults\",\n options: () => resetDefaultsCommand.opts(),\n },\n async () => {\n const options = resetDefaultsCommand.opts<{ json?: boolean }>();\n await printResult(\n await preferencesCapability().execute({ action: \"reset-defaults\" }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n type ContextProjectsOptions,\n type ContextProjectsResult,\n createContextModuleBindings,\n formatContextProjectsText,\n} from \"../../../modules/context/context.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterProjectsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\ntype ProjectStatusSelection = \"active\" | \"archived\" | \"deleted\" | \"all\";\n\nfunction parseTags(value?: string): string[] | undefined {\n const tags = value\n ?.split(\",\")\n .map((tag) => tag.trim())\n .filter((tag) => tag.length > 0);\n\n return tags === undefined || tags.length === 0 ? undefined : tags;\n}\n\nfunction projectsCapability() {\n const bindings = createContextModuleBindings();\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.projects;\n}\n\nasync function printProjectsResult(\n commandOptions: { json?: boolean },\n options: ContextProjectsOptions,\n): Promise<void> {\n const result = await projectsCapability().execute(options);\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload: ContextProjectsResult = result.unwrap();\n\n if (wantsJson(commandOptions)) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatContextProjectsText(payload));\n}\n\nexport function registerProjectsCommand(\n program: Command,\n options: RegisterProjectsCommandOptions,\n): void {\n const projectsCommand = program\n .command(\"projects\")\n .alias(\"project\")\n .description(\"list and manage Agent DevKit context projects\")\n .option(\"--json\", \"print project result as JSON\")\n .option(\"--query <query>\", \"filter projects by text\")\n .option(\"--status <status>\", \"active, archived, deleted or all\");\n\n projectsCommand.action(\n options.usageLogging.track(\n {\n area: \"user\",\n command: \"projects\",\n options: () => projectsCommand.opts(),\n },\n async (commandOptions: {\n json?: boolean;\n query?: string;\n status?: ProjectStatusSelection;\n }) => {\n await printProjectsResult(commandOptions, {\n action: \"list\",\n query: commandOptions.query,\n status: commandOptions.status,\n });\n },\n ),\n );\n\n const createCommand = projectsCommand\n .command(\"create\")\n .description(\"create a context project\")\n .requiredOption(\"--name <name>\", \"project name\")\n .option(\"--description <description>\", \"project description\")\n .option(\"--json\", \"print project result as JSON\")\n .option(\"--path <path>\", \"project path\")\n .option(\"--tags <tags>\", \"comma-separated tags\");\n\n createCommand.action(\n options.usageLogging.track(\n {\n area: \"user\",\n command: \"projects.create\",\n options: () => createCommand.opts(),\n },\n async (commandOptions: {\n description?: string;\n json?: boolean;\n name: string;\n path?: string;\n tags?: string;\n }) => {\n await printProjectsResult(commandOptions, {\n action: \"create\",\n description: commandOptions.description,\n metadata: { homeDirectory: homedir() },\n name: commandOptions.name,\n path: commandOptions.path,\n tags: parseTags(commandOptions.tags),\n });\n },\n ),\n );\n\n const showCommand = projectsCommand\n .command(\"show\")\n .argument(\"<projectId>\", \"project id\")\n .description(\"show a context project\")\n .option(\"--json\", \"print project result as JSON\");\n\n showCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"projects.show\", options: () => showCommand.opts() },\n async (projectId: string, commandOptions: { json?: boolean }) => {\n await printProjectsResult(commandOptions, { action: \"show\", projectId });\n },\n ),\n );\n\n const updateCommand = projectsCommand\n .command(\"update\")\n .argument(\"<projectId>\", \"project id\")\n .description(\"update a context project\")\n .option(\"--description <description>\", \"project description\")\n .option(\"--json\", \"print project result as JSON\")\n .option(\"--name <name>\", \"project name\")\n .option(\"--path <path>\", \"project path\")\n .option(\"--tags <tags>\", \"comma-separated tags\");\n\n updateCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"projects.update\", options: () => updateCommand.opts() },\n async (\n projectId: string,\n commandOptions: {\n description?: string;\n json?: boolean;\n name?: string;\n path?: string;\n tags?: string;\n },\n ) => {\n await printProjectsResult(commandOptions, {\n action: \"update\",\n description: commandOptions.description,\n name: commandOptions.name,\n path: commandOptions.path,\n projectId,\n tags: parseTags(commandOptions.tags),\n });\n },\n ),\n );\n\n const archiveCommand = projectsCommand\n .command(\"archive\")\n .argument(\"<projectId>\", \"project id\")\n .description(\"archive a context project\")\n .option(\"--json\", \"print project result as JSON\");\n\n archiveCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"projects.archive\", options: () => archiveCommand.opts() },\n async (projectId: string, commandOptions: { json?: boolean }) => {\n await printProjectsResult(commandOptions, { action: \"archive\", projectId });\n },\n ),\n );\n\n const deleteCommand = projectsCommand\n .command(\"delete\")\n .argument(\"<projectId>\", \"project id\")\n .description(\"delete a context project\")\n .option(\"--hard\", \"remove project files\")\n .option(\"--json\", \"print project result as JSON\")\n .option(\"--yes\", \"confirm hard delete\");\n\n deleteCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"projects.delete\", options: () => deleteCommand.opts() },\n async (\n projectId: string,\n commandOptions: { hard?: boolean; json?: boolean; yes?: boolean },\n ) => {\n if (commandOptions.hard === true && commandOptions.yes !== true) {\n throw new Error(\"Hard delete requires --yes.\");\n }\n\n await printProjectsResult(commandOptions, {\n action: \"delete\",\n hard: commandOptions.hard === true,\n projectId,\n });\n },\n ),\n );\n}\n","import type { ContextProject, ContextProjectsResult } from \"./projects.entities\";\n\nfunction projectLine(project: ContextProject): string {\n return `${project.id.padEnd(24)} ${project.status.padEnd(8)} ${project.name}`;\n}\n\nexport function formatContextProjectsText(result: ContextProjectsResult): string {\n if (result.action === \"list\") {\n return [\"Agent DevKit Projects\", \"\", ...result.projects.map(projectLine)].join(\"\\n\");\n }\n\n if (result.action === \"delete\") {\n return `Agent DevKit Projects\\n\\n[delete] ${result.projectId} removed=${result.removed} hard=${result.hard}`;\n }\n\n return [\n \"Agent DevKit Projects\",\n \"\",\n `[${result.action}] ${result.project.id}`,\n projectLine(result.project),\n ].join(\"\\n\");\n}\n","import type { ContextSessionIndex, ContextSessionsResult } from \"./sessions.entities\";\n\nfunction sessionLine(session: ContextSessionIndex): string {\n return `${session.sessionId.padEnd(32)} ${session.status.padEnd(8)} ${session.title}`;\n}\n\nexport function formatContextSessionsText(result: ContextSessionsResult): string {\n if (result.action === \"list\") {\n return [\"Agent DevKit Sessions\", \"\", ...result.sessions.map(sessionLine)].join(\"\\n\");\n }\n\n if (result.action === \"search\") {\n return [\n \"Agent DevKit Sessions\",\n \"\",\n `[search] ${result.query}`,\n ...result.results.map((session) => `${sessionLine(session)} score=${session.score}`),\n ].join(\"\\n\");\n }\n\n if (result.action === \"delete\") {\n return `Agent DevKit Sessions\\n\\n[delete] ${result.sessionId} removed=${result.removed} hard=${result.hard}`;\n }\n\n const session = \"index\" in result ? result.index : undefined;\n const id = \"session\" in result ? result.session.id : session?.sessionId;\n\n return [\"Agent DevKit Sessions\", \"\", `[${result.action}] ${id ?? \"\"}`].join(\"\\n\");\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n createProjectModuleBindings,\n formatResetText,\n} from \"../../../modules/project/project.index\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterResetCommandOptions = {\n appVersion: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nexport function registerResetCommand(program: Command, options: RegisterResetCommandOptions): void {\n const resetCommand = program\n .command(\"reset\")\n .description(options.translator.t(\"cli.reset.description\"))\n .option(\"-g, --global\", options.translator.t(\"cli.reset.option.global\"))\n .option(\"--dry-run\", options.translator.t(\"cli.reset.option.dryRun\"))\n .option(\"--json\", options.translator.t(\"cli.reset.option.json\"))\n .option(\"--yes\", options.translator.t(\"cli.reset.option.yes\"));\n\n resetCommand.action(\n options.usageLogging.track(\n {\n area: \"project\",\n command: \"reset\",\n options: () => resetCommand.opts(),\n },\n async (commandOptions: {\n dryRun?: boolean;\n global?: boolean;\n json?: boolean;\n yes?: boolean;\n }) => {\n const bindings = createProjectModuleBindings({\n appVersion: options.appVersion,\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.reset.execute({\n confirmed: commandOptions.yes === true,\n dryRun: commandOptions.dryRun === true,\n homeDirectory: homedir(),\n projectRoot: process.cwd(),\n scope: commandOptions.global === true ? \"global\" : \"project\",\n });\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const resetResult = result.unwrap();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(resetResult, null, 2));\n return;\n }\n\n console.log(formatResetText(resetResult, options.translator));\n },\n ),\n );\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { ToolRuntimeResult } from \"../../../infra/bases/tool_runtime\";\nimport { createCliToolRuntime } from \"../toolRuntime\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterRunCommandOptions = {\n currentVersion: string;\n packageName: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction parseJsonInput(input: string): unknown {\n try {\n return JSON.parse(input);\n } catch {\n throw new Error(\"Invalid JSON passed to --input.\");\n }\n}\n\nfunction formatRunText(result: ToolRuntimeResult): string {\n if (result.status === \"succeeded\") {\n return JSON.stringify(result.output, null, 2);\n }\n\n return [`${result.status}: ${result.capabilityId}`, result.error?.message, result.error?.hint]\n .filter((line) => line !== undefined && line.length > 0)\n .join(\"\\n\");\n}\n\nexport function registerRunCommand(program: Command, options: RegisterRunCommandOptions): void {\n const runCommand = program\n .command(\"run\")\n .argument(\"<capabilityId>\", options.translator.t(\"cli.run.argument.capabilityId\"))\n .description(options.translator.t(\"cli.run.description\"))\n .requiredOption(\"--input <json>\", options.translator.t(\"cli.run.option.input\"))\n .option(\"--approve\", options.translator.t(\"cli.run.option.approve\"))\n .option(\"--json\", options.translator.t(\"cli.run.option.json\"));\n\n runCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"run\",\n options: () => runCommand.opts(),\n redactOptions: [\"--input\"],\n },\n async (\n capabilityId: string,\n commandOptions: { approve?: boolean; input: string; json?: boolean },\n ) => {\n const runtime = createCliToolRuntime({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n });\n const result = await runtime.execute({\n approved: commandOptions.approve === true,\n capabilityId,\n input: parseJsonInput(commandOptions.input),\n interface: \"cli\",\n requestedBy: \"agent.run\",\n });\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(result, null, 2));\n } else if (result.status === \"succeeded\") {\n console.log(formatRunText(result));\n } else {\n console.error(formatRunText(result));\n }\n\n if (result.status !== \"succeeded\") {\n process.exitCode = 1;\n }\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport { text } from \"node:stream/consumers\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport type { SecretsVaultResult } from \"../../../modules/secrets/secrets.index\";\nimport {\n createSecretsModuleBindings,\n formatSecretsVaultText,\n} from \"../../../modules/secrets/secrets.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterSecretsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction secretsCapability() {\n const bindings = createSecretsModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.vault;\n}\n\nasync function resolveSecretValue(options: { stdin?: boolean; value?: string }): Promise<string> {\n if (options.stdin === true && options.value !== undefined) {\n throw new Error(\"Use --stdin or --value, not both.\");\n }\n\n if (options.stdin === true) {\n const value = (await text(process.stdin)).replace(/\\r?\\n$/, \"\");\n\n if (value.length === 0) {\n throw new Error(\"Secret value from stdin cannot be empty.\");\n }\n\n return value;\n }\n\n if (options.value === undefined || options.value.length === 0) {\n throw new Error(\"Secret value is required. Use --stdin or --value.\");\n }\n\n return options.value;\n}\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, SecretsVaultResult>,\n translator: Translator,\n json?: boolean,\n) {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatSecretsVaultText(payload, translator));\n}\n\nexport function registerSecretsCommand(\n program: Command,\n options: RegisterSecretsCommandOptions,\n): void {\n const secretsCommand = program\n .command(\"secrets\")\n .description(options.translator.t(\"cli.secrets.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"));\n\n secretsCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets\",\n options: () => secretsCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await secretsCapability().execute({ action: \"list\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const listCommand = secretsCommand\n .command(\"list\")\n .description(options.translator.t(\"cli.secrets.list.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"));\n\n listCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.list\",\n options: () => listCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await secretsCapability().execute({ action: \"list\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const setCommand = secretsCommand\n .command(\"set\")\n .argument(\"<name>\", options.translator.t(\"cli.secrets.argument.name\"))\n .description(options.translator.t(\"cli.secrets.set.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"))\n .option(\"--service <service>\", options.translator.t(\"cli.secrets.set.option.service\"))\n .option(\"--stdin\", options.translator.t(\"cli.secrets.set.option.stdin\"))\n .option(\"--value <value>\", options.translator.t(\"cli.secrets.set.option.value\"));\n\n setCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.set\",\n options: () => setCommand.opts(),\n redactOptions: [\"--value\"],\n },\n async (name: string) => {\n const commandOptions = setCommand.opts<{\n json?: boolean;\n service?: string;\n stdin?: boolean;\n value?: string;\n }>();\n const value = await resolveSecretValue(commandOptions);\n await printResult(\n await secretsCapability().execute({\n action: \"set\",\n name,\n service: commandOptions.service,\n value,\n }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const showCommand = secretsCommand\n .command(\"show\")\n .argument(\"<name>\", options.translator.t(\"cli.secrets.argument.name\"))\n .description(options.translator.t(\"cli.secrets.show.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"))\n .option(\"--reveal\", options.translator.t(\"cli.secrets.show.option.reveal\"));\n\n showCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.show\",\n options: () => showCommand.opts(),\n },\n async (name: string) => {\n const commandOptions = showCommand.opts<{ json?: boolean; reveal?: boolean }>();\n await printResult(\n await secretsCapability().execute({\n action: \"show\",\n name,\n reveal: commandOptions.reveal === true,\n }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const rotateCommand = secretsCommand\n .command(\"rotate\")\n .argument(\"<name>\", options.translator.t(\"cli.secrets.argument.name\"))\n .description(options.translator.t(\"cli.secrets.rotate.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"))\n .option(\"--service <service>\", options.translator.t(\"cli.secrets.set.option.service\"))\n .option(\"--stdin\", options.translator.t(\"cli.secrets.set.option.stdin\"))\n .option(\"--value <value>\", options.translator.t(\"cli.secrets.set.option.value\"));\n\n rotateCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.rotate\",\n options: () => rotateCommand.opts(),\n redactOptions: [\"--value\"],\n },\n async (name: string) => {\n const commandOptions = rotateCommand.opts<{\n json?: boolean;\n service?: string;\n stdin?: boolean;\n value?: string;\n }>();\n const value = await resolveSecretValue(commandOptions);\n await printResult(\n await secretsCapability().execute({\n action: \"rotate\",\n name,\n service: commandOptions.service,\n value,\n }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const auditCommand = secretsCommand\n .command(\"audit\")\n .argument(\"[name]\", options.translator.t(\"cli.secrets.audit.argument.name\"))\n .description(options.translator.t(\"cli.secrets.audit.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"));\n\n auditCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.audit\",\n options: () => auditCommand.opts(),\n },\n async (name: string | undefined) => {\n const commandOptions = auditCommand.opts<{ json?: boolean }>();\n await printResult(\n await secretsCapability().execute({ action: \"audit\", name }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const removeCommand = secretsCommand\n .command(\"remove\")\n .alias(\"rm\")\n .argument(\"<name>\", options.translator.t(\"cli.secrets.argument.name\"))\n .description(options.translator.t(\"cli.secrets.remove.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"));\n\n removeCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.remove\",\n options: () => removeCommand.opts(),\n },\n async (name: string) => {\n const commandOptions = removeCommand.opts<{ json?: boolean }>();\n await printResult(\n await secretsCapability().execute({ action: \"remove\", name }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { SecretsVaultResult, SecretView } from \"./vault.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nfunction formatSecret(secret: SecretView): string {\n return ` ${secret.name.padEnd(28)} ${(secret.service ?? \"-\").padEnd(12)} ${secret.value ?? \"********\"}`;\n}\n\nfunction formatAuditEvent(event: SecretsVaultResult & { action: \"audit\" }): string[] {\n return event.events.map(\n (auditEvent) =>\n ` ${auditEvent.timestamp.padEnd(24)} ${auditEvent.action.padEnd(8)} ${auditEvent.name.padEnd(28)} ${auditEvent.service ?? \"-\"}`,\n );\n}\n\nexport function formatSecretsVaultText(\n result: SecretsVaultResult,\n translator: Translator = defaultTranslator,\n): string {\n const t = (key: string, values?: Record<string, string | number | boolean>) =>\n translator.t(key, values);\n const rows = [t(\"secrets.title\"), t(\"secrets.command\"), \"\", `[${result.action}] ${result.path}`];\n\n if (result.action === \"audit\") {\n rows.push(\"\", ` ${t(\"secrets.section.audit\")}`, ...formatAuditEvent(result));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"list\") {\n rows.push(\"\", ` ${t(\"secrets.section.items\")}`, ...result.secrets.map(formatSecret));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"remove\") {\n rows.push(` ${t(\"secrets.field.name\").padEnd(8)} ${result.secret.name}`);\n rows.push(` ${t(\"secrets.field.removed\").padEnd(8)} ${String(result.removed)}`);\n return rows.join(\"\\n\");\n }\n\n rows.push(formatSecret(result.secret));\n return rows.join(\"\\n\");\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n type ContextMessageKind,\n type ContextMessageRole,\n type ContextSessionOrigin,\n type ContextSessionsOptions,\n type ContextSessionsResult,\n createContextModuleBindings,\n formatContextSessionsText,\n} from \"../../../modules/context/context.index\";\nimport { parseNonNegativeInteger, wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterSessionsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\ntype SessionStatusSelection = \"active\" | \"archived\" | \"deleted\" | \"all\";\n\nfunction parseTags(value?: string): string[] | undefined {\n const tags = value\n ?.split(\",\")\n .map((tag) => tag.trim())\n .filter((tag) => tag.length > 0);\n\n return tags === undefined || tags.length === 0 ? undefined : tags;\n}\n\nfunction sessionsCapability() {\n const bindings = createContextModuleBindings();\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.sessions;\n}\n\nasync function printSessionsResult(\n commandOptions: { json?: boolean },\n options: ContextSessionsOptions,\n): Promise<void> {\n const result = await sessionsCapability().execute(options);\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload: ContextSessionsResult = result.unwrap();\n\n if (wantsJson(commandOptions)) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatContextSessionsText(payload));\n}\n\nexport function registerSessionsCommand(\n program: Command,\n options: RegisterSessionsCommandOptions,\n): void {\n const sessionsCommand = program\n .command(\"sessions\")\n .alias(\"session\")\n .description(\"list and manage Agent DevKit context sessions\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--limit <limit>\", \"maximum number of sessions\")\n .option(\"--project <projectId>\", \"project id\")\n .option(\"--query <query>\", \"filter sessions by text\")\n .option(\"--status <status>\", \"active, archived, deleted or all\");\n\n sessionsCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions\", options: () => sessionsCommand.opts() },\n async (commandOptions: {\n json?: boolean;\n limit?: string;\n project?: string;\n query?: string;\n status?: SessionStatusSelection;\n }) => {\n await printSessionsResult(commandOptions, {\n action: \"list\",\n limit: parseNonNegativeInteger(commandOptions.limit),\n projectId: commandOptions.project,\n query: commandOptions.query,\n status: commandOptions.status,\n });\n },\n ),\n );\n\n const createCommand = sessionsCommand\n .command(\"create\")\n .description(\"create a context session\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--origin <origin>\", \"cli, tui, mcp or agent\", \"cli\")\n .option(\"--project <projectId>\", \"project id\")\n .option(\"--tags <tags>\", \"comma-separated tags\")\n .option(\"--title <title>\", \"session title\");\n\n createCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.create\", options: () => createCommand.opts() },\n async (commandOptions: {\n json?: boolean;\n origin?: ContextSessionOrigin;\n project?: string;\n tags?: string;\n title?: string;\n }) => {\n await printSessionsResult(commandOptions, {\n action: \"create\",\n origin: commandOptions.origin ?? \"cli\",\n projectId: commandOptions.project,\n tags: parseTags(commandOptions.tags),\n title: commandOptions.title,\n });\n },\n ),\n );\n\n const appendCommand = sessionsCommand\n .command(\"append\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"append a message to a context session\")\n .requiredOption(\"--content <content>\", \"message content\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--kind <kind>\", \"message, event, tool-call, tool-result or summary\", \"message\")\n .option(\"--role <role>\", \"user, assistant, system or tool\", \"user\");\n\n appendCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.append\", options: () => appendCommand.opts() },\n async (\n sessionId: string,\n commandOptions: {\n content: string;\n json?: boolean;\n kind?: ContextMessageKind;\n role?: ContextMessageRole;\n },\n ) => {\n await printSessionsResult(commandOptions, {\n action: \"append-message\",\n content: commandOptions.content,\n kind: commandOptions.kind ?? \"message\",\n role: commandOptions.role ?? \"user\",\n sessionId,\n });\n },\n ),\n );\n\n const showCommand = sessionsCommand\n .command(\"show\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"show a context session\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--limit <limit>\", \"maximum number of messages\")\n .option(\"--messages\", \"include messages\");\n\n showCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.show\", options: () => showCommand.opts() },\n async (\n sessionId: string,\n commandOptions: { json?: boolean; limit?: string; messages?: boolean },\n ) => {\n await printSessionsResult(commandOptions, {\n action: \"show\",\n includeMessages: commandOptions.messages === true,\n limit: parseNonNegativeInteger(commandOptions.limit),\n sessionId,\n });\n },\n ),\n );\n\n const searchCommand = sessionsCommand\n .command(\"search\")\n .argument(\"<query>\", \"query\")\n .description(\"search context sessions\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--limit <limit>\", \"maximum number of results\")\n .option(\"--project <projectId>\", \"project id\");\n\n searchCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.search\", options: () => searchCommand.opts() },\n async (\n query: string,\n commandOptions: { json?: boolean; limit?: string; project?: string },\n ) => {\n await printSessionsResult(commandOptions, {\n action: \"search\",\n limit: parseNonNegativeInteger(commandOptions.limit),\n projectId: commandOptions.project,\n query,\n });\n },\n ),\n );\n\n const resumeCommand = sessionsCommand\n .command(\"resume\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"resume a context session\")\n .option(\"--json\", \"print session result as JSON\");\n\n resumeCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.resume\", options: () => resumeCommand.opts() },\n async (sessionId: string, commandOptions: { json?: boolean }) => {\n await printSessionsResult(commandOptions, { action: \"resume\", sessionId });\n },\n ),\n );\n\n const archiveCommand = sessionsCommand\n .command(\"archive\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"archive a context session\")\n .option(\"--json\", \"print session result as JSON\");\n\n archiveCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.archive\", options: () => archiveCommand.opts() },\n async (sessionId: string, commandOptions: { json?: boolean }) => {\n await printSessionsResult(commandOptions, { action: \"archive\", sessionId });\n },\n ),\n );\n\n const deleteCommand = sessionsCommand\n .command(\"delete\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"delete a context session\")\n .option(\"--hard\", \"remove session files\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--yes\", \"confirm hard delete\");\n\n deleteCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.delete\", options: () => deleteCommand.opts() },\n async (\n sessionId: string,\n commandOptions: { hard?: boolean; json?: boolean; yes?: boolean },\n ) => {\n if (commandOptions.hard === true && commandOptions.yes !== true) {\n throw new Error(\"Hard delete requires --yes.\");\n }\n\n await printSessionsResult(commandOptions, {\n action: \"delete\",\n hard: commandOptions.hard === true,\n sessionId,\n });\n },\n ),\n );\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { ToolRuntimeTool } from \"../../../infra/bases/tool_runtime\";\nimport { createCliToolRuntime } from \"../toolRuntime\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterToolsCommandOptions = {\n currentVersion: string;\n packageName: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction formatToolsText(tools: ToolRuntimeTool[]): string {\n const rows = tools.map((tool) => ({\n id: tool.id,\n kind: tool.kind,\n module: tool.moduleId,\n risk: tool.risk,\n }));\n const widths = {\n id: Math.max(\"id\".length, ...rows.map((row) => row.id.length)),\n kind: Math.max(\"kind\".length, ...rows.map((row) => row.kind.length)),\n module: Math.max(\"module\".length, ...rows.map((row) => row.module.length)),\n risk: Math.max(\"risk\".length, ...rows.map((row) => row.risk.length)),\n };\n const line = (row: { id: string; kind: string; module: string; risk: string }) =>\n `${row.id.padEnd(widths.id)} ${row.module.padEnd(widths.module)} ${row.risk.padEnd(\n widths.risk,\n )} ${row.kind.padEnd(widths.kind)}`;\n\n return [\n line({ id: \"id\", kind: \"kind\", module: \"module\", risk: \"risk\" }),\n line({\n id: \"-\".repeat(widths.id),\n kind: \"-\".repeat(widths.kind),\n module: \"-\".repeat(widths.module),\n risk: \"-\".repeat(widths.risk),\n }),\n ...rows.map(line),\n ].join(\"\\n\");\n}\n\nexport function registerToolsCommand(program: Command, options: RegisterToolsCommandOptions): void {\n const toolsCommand = program\n .command(\"tools\")\n .description(options.translator.t(\"cli.tools.description\"))\n .option(\"--json\", options.translator.t(\"cli.tools.option.json\"));\n\n toolsCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"tools\",\n createStateIfMissing: false,\n options: () => toolsCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n const runtime = createCliToolRuntime({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n });\n const tools = runtime.listTools();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify({ tools }, null, 2));\n return;\n }\n\n console.log(formatToolsText(tools));\n },\n ),\n );\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { SelfUpdateResult } from \"./update.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatUpdateText(result: SelfUpdateResult, translator?: Translator): string {\n const activeTranslator = translator ?? defaultTranslator;\n const t = (key: string) => activeTranslator.t(key);\n\n return [\n t(\"update.title\"),\n t(\"update.command\"),\n \"\",\n `[${result.status}] ${result.packageName}`,\n ` ${t(\"update.field.current\").padEnd(8)} ${result.currentVersion}`,\n ` ${t(\"update.field.selected\").padEnd(8)} ${result.selectedVersion}`,\n result.command\n ? ` ${t(\"update.field.command\").padEnd(8)} ${result.command}`\n : ` ${t(\"update.field.command\").padEnd(8)} ${t(\"update.noUpdateRequired\")}`,\n \"\",\n ` ${t(\"update.section.versions\")}`,\n ...result.versions.slice(0, 8).map((version) => {\n const marker = version.selected ? \">\" : \" \";\n const labels = [\n version.current ? t(\"update.label.current\") : undefined,\n version.latest ? t(\"update.label.latest\") : undefined,\n ]\n .filter(Boolean)\n .join(\", \");\n return ` ${marker} ${version.version}${labels ? ` ${labels}` : \"\"}`;\n }),\n ].join(\"\\n\");\n}\n","import type { Command } from \"commander\";\nimport packageJson from \"../../../../package.json\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport { createSelfModuleBindings, formatUpdateText } from \"../../../modules/self/self.index\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterUpdateCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nexport function registerUpdateCommand(\n program: Command,\n options: RegisterUpdateCommandOptions,\n): void {\n const updateCommand = program\n .command(\"update\")\n .argument(\"[version]\", options.translator.t(\"cli.update.argument.version\"))\n .description(options.translator.t(\"cli.update.description\"))\n .option(\"--dry-run\", options.translator.t(\"cli.update.option.dryRun\"))\n .option(\"--json\", options.translator.t(\"cli.update.option.json\"))\n .option(\"--latest\", options.translator.t(\"cli.update.option.latest\"))\n .option(\"--yes\", options.translator.t(\"cli.update.option.yes\"));\n\n updateCommand.action(\n options.usageLogging.track(\n {\n area: \"self\",\n command: \"update\",\n options: () => updateCommand.opts(),\n },\n async (\n targetVersion: string | undefined,\n commandOptions: {\n dryRun?: boolean;\n json?: boolean;\n latest?: boolean;\n yes?: boolean;\n },\n ) => {\n const bindings = createSelfModuleBindings({\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.update.execute({\n dryRun: commandOptions.dryRun === true,\n latest: commandOptions.latest === true,\n version: targetVersion,\n yes: commandOptions.yes === true,\n });\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const updateResult = result.unwrap();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(updateResult, null, 2));\n return;\n }\n\n console.log(formatUpdateText(updateResult, options.translator));\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport { createInterface } from \"node:readline/promises\";\nimport type { Translator } from \"../../infra/bases/i18n\";\nimport { ModelCatalogLoader } from \"../../infra/models/model_catalog\";\nimport { createModelsModuleBindings } from \"../../modules/models/models.index\";\n\nfunction affirmative(answer: string): boolean {\n const normalized = answer.trim().toLowerCase();\n return normalized === \"y\" || normalized === \"yes\" || normalized === \"s\" || normalized === \"sim\";\n}\n\n/**\n * On the first interactive `agent` run, confirm a local model is available.\n * If none is installed, offer to download the recommended one. Never blocks the\n * tool: any failure or a non-interactive terminal falls through silently.\n */\nexport async function ensureFirstRunModel(translator: Translator): Promise<void> {\n const bindings = createModelsModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n return;\n }\n\n const registry = bindings.unwrap().capabilities.registry;\n const models = await registry.execute({ action: \"list\" });\n\n if (models.isErr()) {\n return;\n }\n\n const modelsResult = models.unwrap();\n\n if (modelsResult.action !== \"list\" || modelsResult.models.some((model) => model.installed)) {\n return;\n }\n\n const recommended = await new ModelCatalogLoader().recommended();\n const entry = recommended.isOk() ? recommended.unwrap() : undefined;\n\n if (entry === undefined) {\n return;\n }\n\n const interactive = process.stdin.isTTY === true && process.stdout.isTTY === true;\n\n if (!interactive) {\n process.stderr.write(`${translator.t(\"cli.firstRun.hint\", { id: entry.id })}\\n`);\n return;\n }\n\n const readline = createInterface({ input: process.stdin, output: process.stdout });\n\n try {\n const answer = await readline.question(\n `${translator.t(\"cli.firstRun.prompt\", { id: entry.id })} `,\n );\n\n if (!affirmative(answer)) {\n return;\n }\n\n process.stdout.write(`${translator.t(\"cli.models.install.progress\", { id: entry.id })}\\n`);\n\n const result = await registry.execute({ action: \"install\", id: entry.id });\n\n if (result.isErr()) {\n process.stderr.write(`${translator.t(\"cli.firstRun.failed\", { id: entry.id })}\\n`);\n return;\n }\n\n await registry.execute({ action: \"use\", id: entry.id });\n process.stdout.write(`${translator.t(\"cli.firstRun.installed\", { id: entry.id })}\\n`);\n } finally {\n readline.close();\n }\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { I18nCatalog } from \"../../infra/assets/i18n_catalog\";\nimport type { LanguageId, Translator } from \"../../infra/bases/i18n\";\n\nconst supportedLanguages: LanguageId[] = [\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"];\n\nexport type CliUserPreferences = {\n language: LanguageId;\n logRetentionDays: number;\n};\n\nfunction isLanguageId(value: unknown): value is LanguageId {\n return typeof value === \"string\" && supportedLanguages.includes(value as LanguageId);\n}\n\nfunction isLogRetentionDays(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 1 && value <= 3650;\n}\n\nexport function loadCliUserPreferences(homeDirectory: string = homedir()): CliUserPreferences {\n const canonicalPreferencesPath = join(\n homeDirectory,\n \".agent-devkit\",\n \"data\",\n \"preferences\",\n \"preferences.json\",\n );\n const legacyPreferencesPath = join(homeDirectory, \".agent-devkit\", \"preferences.json\");\n const preferencesPath = existsSync(canonicalPreferencesPath)\n ? canonicalPreferencesPath\n : legacyPreferencesPath;\n\n if (!existsSync(preferencesPath)) {\n return { language: \"pt-BR\", logRetentionDays: 30 };\n }\n\n try {\n const payload = JSON.parse(readFileSync(preferencesPath, \"utf8\")) as {\n language?: unknown;\n logRetentionDays?: unknown;\n };\n\n return {\n language: isLanguageId(payload.language) ? payload.language : \"pt-BR\",\n logRetentionDays: isLogRetentionDays(payload.logRetentionDays)\n ? payload.logRetentionDays\n : 30,\n };\n } catch {\n return { language: \"pt-BR\", logRetentionDays: 30 };\n }\n}\n\nexport function createCliTranslator(homeDirectory = homedir()): Translator {\n return new I18nCatalog().translator(loadCliUserPreferences(homeDirectory).language);\n}\n\nexport function configureLocalizedHelp(program: Command, translator: Translator): void {\n const titleMap: Record<string, string> = {\n \"Arguments:\": \"cli.help.title.arguments\",\n \"Commands:\": \"cli.help.title.commands\",\n \"Global Options:\": \"cli.help.title.globalOptions\",\n \"Options:\": \"cli.help.title.options\",\n \"Usage:\": \"cli.help.title.usage\",\n };\n\n program.configureHelp({\n styleTitle: (title) => translator.t(titleMap[title] ?? title),\n });\n program.helpOption(\"-h, --help\", translator.t(\"cli.help.option\"));\n}\n","import { homedir } from \"node:os\";\nimport { createBrainDockProvider } from \"../../infra/brain/brain_dock\";\nimport {\n createConversationModuleBindings,\n formatConversationChatText,\n} from \"../../modules/conversation/conversation.index\";\n\nexport async function runRootConversation(message: string): Promise<void> {\n const bindings = createConversationModuleBindings({\n brainProvider: createBrainDockProvider({ stateDirectory: `${homedir()}/.agent-devkit` }),\n homeDirectory: homedir(),\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.chat.execute({\n action: \"send\",\n message,\n });\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n console.log(formatConversationChatText(result.unwrap()));\n}\n","import type { ConversationChatResult } from \"./chat.entities\";\n\nexport function formatConversationChatText(result: ConversationChatResult): string {\n const lines = [\"Agent:\", result.reply, \"\", `Session: ${result.sessionId}`];\n\n if (result.projectId !== undefined) {\n lines.push(`Project: ${result.projectId}`);\n }\n\n return lines.join(\"\\n\");\n}\n","const redacted = \"[redacted]\";\nconst sensitiveKeyPattern = /(api[-_]?key|auth|credential|password|secret|token|value)/i;\n\nfunction normalizeOptionName(option: string): string {\n return option.replace(/^--?/, \"\").replace(/-([a-z])/g, (_, char: string) => char.toUpperCase());\n}\n\nfunction isSensitiveKey(key: string, sensitiveKeys: Set<string>): boolean {\n return sensitiveKeys.has(key) || sensitiveKeyPattern.test(key);\n}\n\nexport function redactArgv(argv: string[], sensitiveOptions: string[] = []): string[] {\n const sensitiveFlags = new Set(sensitiveOptions);\n const output: string[] = [];\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === undefined) {\n continue;\n }\n\n if (sensitiveFlags.has(token)) {\n output.push(token);\n if (index + 1 < argv.length) {\n output.push(redacted);\n index += 1;\n }\n continue;\n }\n\n const [flag] = token.split(\"=\");\n if (flag !== undefined && sensitiveFlags.has(flag) && token.includes(\"=\")) {\n output.push(`${flag}=${redacted}`);\n continue;\n }\n\n output.push(token);\n }\n\n return output;\n}\n\nexport function redactUnknown(value: unknown, sensitiveOptionNames: string[] = []): unknown {\n const sensitiveKeys = new Set(sensitiveOptionNames.map(normalizeOptionName));\n\n if (Array.isArray(value)) {\n return value.map((item) => redactUnknown(item, sensitiveOptionNames));\n }\n\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined && typeof entryValue !== \"function\")\n .map(([key, entryValue]) => [\n key,\n isSensitiveKey(key, sensitiveKeys)\n ? redacted\n : redactUnknown(entryValue, sensitiveOptionNames),\n ]),\n );\n}\n\nexport function redactRecord(\n value: Record<string, unknown>,\n sensitiveOptionNames: string[] = [],\n): Record<string, unknown> {\n return redactUnknown(value, sensitiveOptionNames) as Record<string, unknown>;\n}\n","import type {\n LogLevel,\n TechnicalLogger,\n UsageLogArea,\n UsageLogger,\n} from \"../../infra/bases/logger\";\nimport { errorCause } from \"../../infra/helpers/error_cause\";\nimport { redactArgv, redactRecord } from \"../../infra/helpers/redaction\";\n\ntype CliUsageLoggingMiddlewareOptions = {\n argv?: string[];\n clock?: () => number;\n logger: UsageLogger;\n technicalLogger?: TechnicalLogger;\n};\n\ntype CliUsageMetadata = {\n area: UsageLogArea;\n command: string;\n createStateIfMissing?: boolean;\n options?: () => Record<string, unknown>;\n redactOptions?: string[];\n};\n\nexport class CliUsageLoggingMiddleware {\n readonly #argv: string[];\n readonly #clock: () => number;\n readonly #logger: UsageLogger;\n readonly #technicalLogger?: TechnicalLogger;\n\n constructor(options: CliUsageLoggingMiddlewareOptions) {\n this.#argv = options.argv ?? process.argv.slice(2);\n this.#clock = options.clock ?? (() => Date.now());\n this.#logger = options.logger;\n this.#technicalLogger = options.technicalLogger;\n }\n\n track<TArgs extends unknown[]>(\n metadata: CliUsageMetadata,\n handler: (...args: TArgs) => Promise<void> | void,\n ): (...args: TArgs) => Promise<void> {\n return async (...args: TArgs) => {\n const startedAt = this.#clock();\n\n try {\n await this.#writeTechnical(metadata, \"command.started\", \"info\", \"CLI command started\");\n await handler(...args);\n await this.#writeTechnical(\n metadata,\n \"command.succeeded\",\n \"info\",\n \"CLI command succeeded\",\n this.#clock() - startedAt,\n );\n await this.#write(metadata, \"succeeded\", this.#clock() - startedAt);\n } catch (error) {\n await this.#writeTechnical(\n metadata,\n \"command.failed\",\n \"error\",\n \"CLI command failed\",\n this.#clock() - startedAt,\n error,\n );\n await this.#write(metadata, \"failed\", this.#clock() - startedAt, error);\n throw error;\n }\n };\n }\n\n async #write(\n metadata: CliUsageMetadata,\n status: \"failed\" | \"succeeded\",\n durationMs: number,\n error?: unknown,\n ): Promise<void> {\n await this.#logger.writeUsage({\n area: metadata.area,\n argv: redactArgv(this.#argv, metadata.redactOptions),\n command: metadata.command,\n createStateIfMissing: metadata.createStateIfMissing,\n durationMs: Math.max(0, durationMs),\n error: error === undefined ? undefined : errorCause(error),\n interface: \"cli\",\n options: redactRecord(metadata.options?.() ?? {}, metadata.redactOptions),\n status,\n });\n }\n\n async #writeTechnical(\n metadata: CliUsageMetadata,\n event: string,\n level: LogLevel,\n message: string,\n durationMs?: number,\n error?: unknown,\n ): Promise<void> {\n if (this.#technicalLogger === undefined) {\n return;\n }\n\n await this.#technicalLogger.writeTechnical({\n area: metadata.area,\n command: metadata.command,\n createStateIfMissing: metadata.createStateIfMissing,\n durationMs: durationMs === undefined ? undefined : Math.max(0, durationMs),\n error: error === undefined ? undefined : errorCause(error),\n event,\n interface: \"cli\",\n level,\n message,\n metadata: {\n argv: redactArgv(this.#argv, metadata.redactOptions),\n options: redactRecord(metadata.options?.() ?? {}, metadata.redactOptions),\n },\n });\n }\n}\n","import { Box, Text } from \"ink\";\nimport type { Translator } from \"../../infra/bases/i18n\";\n\ntype AppProps = {\n initialPrompt?: string;\n translator: Translator;\n};\n\nexport function App({ initialPrompt, translator }: AppProps) {\n return (\n <Box flexDirection=\"column\">\n <Text bold>{translator.t(\"tui.title\")}</Text>\n <Text>{translator.t(\"tui.foundation\")}</Text>\n {initialPrompt ? (\n <Text>{translator.t(\"tui.prompt\", { prompt: initialPrompt })}</Text>\n ) : (\n <Text>{translator.t(\"tui.helpHint\")}</Text>\n )}\n </Box>\n );\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentDataStore } from \"../bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { TechnicalLogEvent, TechnicalLogger, TechnicalLogInput } from \"../bases/logger\";\nimport { Result } from \"../bases/result\";\nimport { LocalAgentDataStore } from \"../data\";\nimport { redactRecord } from \"../helpers/redaction\";\n\nexport type JsonTechnicalLoggerOptions = {\n clock?: () => Date;\n dataStore?: AgentDataStore;\n retentionDays?: number;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nfunction logFileName(timestamp: Date): string {\n return `technical-${timestamp.toISOString().slice(0, 10)}.jsonl`;\n}\n\nfunction cutoffDate(timestamp: Date, retentionDays: number): string {\n const cutoff = new Date(\n Date.UTC(timestamp.getUTCFullYear(), timestamp.getUTCMonth(), timestamp.getUTCDate()),\n );\n cutoff.setUTCDate(cutoff.getUTCDate() - retentionDays);\n return cutoff.toISOString().slice(0, 10);\n}\n\nfunction dateFromLogFile(fileName: string): string | undefined {\n return /^technical-\\d{4}-\\d{2}-\\d{2}\\.jsonl$/.test(fileName)\n ? fileName.replace(/^technical-/, \"\").replace(/\\.jsonl$/, \"\")\n : undefined;\n}\n\nfunction normalizeMetadata(\n metadata?: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (metadata === undefined) {\n return undefined;\n }\n\n const normalized = Object.fromEntries(\n Object.entries(metadata).filter(\n ([, value]) => value !== undefined && typeof value !== \"function\",\n ),\n );\n\n return Object.keys(normalized).length > 0 ? redactRecord(normalized) : undefined;\n}\n\nexport class JsonTechnicalLogger implements TechnicalLogger {\n readonly #clock: () => Date;\n readonly #dataStore: AgentDataStore;\n readonly #retentionDays: number;\n\n constructor(options: JsonTechnicalLoggerOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#dataStore =\n options.dataStore ??\n new LocalAgentDataStore({\n rootDirectory: join(options.stateDirectory ?? defaultStateDirectory(), \"data\"),\n });\n this.#retentionDays = options.retentionDays ?? 30;\n }\n\n async writeTechnical(input: TechnicalLogInput): Promise<Result<AgentDevKitErrorCode, void>> {\n const timestamp = this.#clock();\n const { createStateIfMissing, ...logInput } = input;\n const event: TechnicalLogEvent = {\n ...logInput,\n category: \"technical\",\n metadata: normalizeMetadata(input.metadata),\n schema: \"agent-devkit.technical-log/v1\",\n timestamp: timestamp.toISOString(),\n };\n\n try {\n if (createStateIfMissing === false) {\n const logsExist = await this.#dataStore.exists({ namespace: \"logs\", segments: [] });\n\n if (logsExist.isErr()) {\n return Result.fail(logsExist.unwrapError());\n }\n\n if (!logsExist.unwrap()) {\n return Result.ok(undefined);\n }\n }\n\n const write = await this.#dataStore.appendJsonl(\n { namespace: \"logs\", segments: [logFileName(timestamp)] },\n event,\n );\n\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n\n await this.#cleanupOldLogs(timestamp);\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async #cleanupOldLogs(timestamp: Date): Promise<void> {\n if (!Number.isInteger(this.#retentionDays) || this.#retentionDays < 1) {\n return;\n }\n\n const cutoff = cutoffDate(timestamp, this.#retentionDays);\n const entries = await this.#dataStore.list({ namespace: \"logs\", segments: [] });\n\n if (entries.isErr()) {\n return;\n }\n\n await Promise.all(\n entries.unwrap().flatMap((entry) => {\n const date = dateFromLogFile(entry.name);\n return date !== undefined && date < cutoff ? [this.#dataStore.remove(entry.path)] : [];\n }),\n );\n }\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentDataStore } from \"../bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { UsageLogEvent, UsageLogger, UsageLogInput } from \"../bases/logger\";\nimport { Result } from \"../bases/result\";\nimport { LocalAgentDataStore } from \"../data\";\nimport { redactRecord } from \"../helpers/redaction\";\n\nexport type JsonUsageLoggerOptions = {\n clock?: () => Date;\n dataStore?: AgentDataStore;\n retentionDays?: number;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nfunction logFileName(timestamp: Date): string {\n return `usage-${timestamp.toISOString().slice(0, 10)}.jsonl`;\n}\n\nfunction cutoffDate(timestamp: Date, retentionDays: number): string {\n const cutoff = new Date(\n Date.UTC(timestamp.getUTCFullYear(), timestamp.getUTCMonth(), timestamp.getUTCDate()),\n );\n cutoff.setUTCDate(cutoff.getUTCDate() - retentionDays);\n return cutoff.toISOString().slice(0, 10);\n}\n\nfunction dateFromLogFile(fileName: string): string | undefined {\n return /^usage-\\d{4}-\\d{2}-\\d{2}\\.jsonl$/.test(fileName)\n ? fileName.replace(/^usage-/, \"\").replace(/\\.jsonl$/, \"\")\n : undefined;\n}\n\nfunction normalizeOptions(options: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(options).filter(\n ([, value]) => value !== undefined && typeof value !== \"function\",\n ),\n );\n}\n\nexport class JsonUsageLogger implements UsageLogger {\n readonly #clock: () => Date;\n readonly #dataStore: AgentDataStore;\n readonly #retentionDays: number;\n\n constructor(options: JsonUsageLoggerOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#dataStore =\n options.dataStore ??\n new LocalAgentDataStore({\n rootDirectory: join(options.stateDirectory ?? defaultStateDirectory(), \"data\"),\n });\n this.#retentionDays = options.retentionDays ?? 30;\n }\n\n async writeUsage(input: UsageLogInput): Promise<Result<AgentDevKitErrorCode, void>> {\n const timestamp = this.#clock();\n const { createStateIfMissing, ...logInput } = input;\n const event: UsageLogEvent = {\n ...logInput,\n category: \"usage\",\n level: input.status === \"failed\" ? \"error\" : \"info\",\n options: redactRecord(normalizeOptions(input.options)),\n schema: \"agent-devkit.usage-log/v1\",\n timestamp: timestamp.toISOString(),\n };\n\n try {\n if (createStateIfMissing === false) {\n const logsExist = await this.#dataStore.exists({ namespace: \"logs\", segments: [] });\n\n if (logsExist.isErr()) {\n return Result.fail(logsExist.unwrapError());\n }\n\n if (!logsExist.unwrap()) {\n return Result.ok(undefined);\n }\n }\n\n const write = await this.#dataStore.appendJsonl(\n { namespace: \"logs\", segments: [logFileName(timestamp)] },\n event,\n );\n\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n\n await this.#cleanupOldLogs(timestamp);\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async #cleanupOldLogs(timestamp: Date): Promise<void> {\n if (!Number.isInteger(this.#retentionDays) || this.#retentionDays < 1) {\n return;\n }\n\n const cutoff = cutoffDate(timestamp, this.#retentionDays);\n const entries = await this.#dataStore.list({ namespace: \"logs\", segments: [] });\n\n if (entries.isErr()) {\n return;\n }\n\n await Promise.all(\n entries.unwrap().flatMap((entry) => {\n const date = dateFromLogFile(entry.name);\n return date !== undefined && date < cutoff ? [this.#dataStore.remove(entry.path)] : [];\n }),\n );\n }\n}\n"],"mappings":"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","names":["homedir","z","moduleDirectory","translator","z","z","z","characters","translator","z","z","z","fallbackTranslator","translator","readFile","dirname","join","join","readFile","dirname","existsSync","access","mkdir","readdir","readFile","homedir","basename","dirname","join","resolve","fileURLToPath","access","mkdir","readdir","readFile","rm","writeFile","homedir","dirname","join","resolve","join","homedir","resolve","mkdir","dirname","readFile","readdir","rm","access","writeFile","moduleDirectory","dirname","fileURLToPath","resolve","existsSync","homedir","join","access","basename","mkdir","readFile","readdir","existsSync","access","readdir","readFile","homedir","dirname","join","resolve","fileURLToPath","moduleDirectory","dirname","fileURLToPath","resolve","existsSync","homedir","join","access","readFile","readdir","homedir","translator","program","join","z","platform","join","defaultTranslator","translator","z","defaultTranslator","translator","join","z","join","defaultTranslator","translator","access","readdir","homedir","basename","join","access","homedir","join","readdir","basename","access","mkdir","writeFile","dirname","join","access","join","mkdir","dirname","writeFile","access","rm","access","rm","defaultDependencies","dirname","fileURLToPath","existsSync","readFile","join","resolve","z","readFile","join","moduleDirectory","resolve","existsSync","dirname","fileURLToPath","program","program","z","defaultTranslator","translator","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","homedir","access","mkdir","readdir","readFile","rename","rm","writeFile","homedir","basename","join","z","join","homedir","readFile","access","readdir","basename","mkdir","resolve","rm","rename","writeFile","text","text","response","z","endedAt","z","z","now","z","now","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","z","z","characterName","z","z","z","z","normalizeOptions","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","readdir","readFile","homedir","join","z","join","homedir","readFile","readdir","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","existsSync","dirname","resolve","fileURLToPath","readFile","join","resolve","resolve","readFile","join","moduleDirectory","dirname","fileURLToPath","resolve","existsSync","z","defaultId","stateDirectory","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","randomBytes","access","chmod","mkdir","readFile","rename","writeFile","homedir","dirname","join","defaultStateDirectory","join","homedir","isNotFoundError","stateDirectory","secret","now","access","readFile","dirname","randomBytes","mkdir","writeFile","chmod","rename","randomBytes","chmod","mkdir","readFile","writeFile","homedir","dirname","join","defaultStateDirectory","join","homedir","stateDirectory","readFile","randomBytes","mkdir","dirname","writeFile","chmod","randomBytes","randomBytes","z","stateDirectory","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","z","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","capabilities","homedir","runtime","printResult","translator","program","homedir","defaultTranslator","commandName","durationMs","statusName","translator","homedir","translator","program","homedir","join","z","z","text","compact","join","homedir","tool","text","resolve","runtime","program","homedir","defaultTranslator","translator","homedir","printResult","translator","program","homedir","homedir","printResult","translator","program","homedir","homedir","printResult","translator","program","options","homedir","session","program","homedir","homedir","program","homedir","program","runtime","homedir","defaultTranslator","translator","homedir","printResult","translator","program","parseTags","program","program","runtime","defaultTranslator","translator","program","homedir","translator","homedir","existsSync","readFileSync","homedir","join","homedir","join","existsSync","readFileSync","program","translator","homedir","homedir","durationMs","translator","homedir","join","defaultStateDirectory","join","homedir","homedir","join","defaultStateDirectory","join","homedir","logFileName","cutoffDate","dateFromLogFile","normalizeOptions"]}
1
+ {"version":3,"sources":["../src/main.tsx","../package.json","../src/app/cli/commands/aliasCommand.ts","../src/infra/bases/capability.ts","../src/infra/bases/errors.ts","../src/infra/bases/result.ts","../src/modules/user/capabilities/cliAlias/cliAlias.entities.ts","../src/modules/user/capabilities/cliAlias/cliAlias.service.ts","../src/infra/assets/i18n_catalog.ts","../src/infra/bases/i18n.ts","../src/modules/user/capabilities/cliAlias/cliAlias.viewmodel.ts","../src/modules/user/capabilities/personalization/personalization.entities.ts","../src/infra/bases/character.ts","../src/modules/user/capabilities/personalization/personalization.service.ts","../src/modules/user/capabilities/personalization/personalization.viewmodel.ts","../src/modules/user/capabilities/preferences/preferences.entities.ts","../src/infra/bases/theme.ts","../src/modules/user/capabilities/preferences/preferences.service.ts","../src/modules/user/capabilities/preferences/preferences.viewmodel.ts","../src/infra/bases/bind.ts","../src/modules/user/capabilities/cliAlias/cliAlias.repository.ts","../src/modules/user/capabilities/personalization/personalization.repository.ts","../src/infra/data/local_agent_data_store.ts","../src/modules/user/capabilities/preferences/preferences.repository.ts","../src/infra/bases/module.ts","../src/modules/user/user.config.ts","../src/modules/user/user.bind.ts","../src/app/cli/command_options.ts","../src/modules/project/capabilities/doctor/doctor.service.ts","../src/modules/project/capabilities/doctor/doctor.entities.ts","../src/modules/project/capabilities/doctor/doctor.viewmodel.ts","../src/modules/project/capabilities/init/init.entities.ts","../src/modules/project/capabilities/init/init.service.ts","../src/modules/project/capabilities/init/init.viewmodel.ts","../src/modules/project/capabilities/reset/reset.service.ts","../src/modules/project/capabilities/reset/reset.entities.ts","../src/modules/project/capabilities/reset/reset.viewmodel.ts","../src/modules/project/capabilities/doctor/doctor.repository.ts","../src/modules/project/capabilities/init/init.repository.ts","../src/modules/project/capabilities/reset/reset.repository.ts","../src/modules/project/project.config.ts","../src/modules/project/project.bind.ts","../src/modules/project/project.surface.ts","../src/infra/helpers/surface_capabilities.ts","../src/infra/helpers/surface_loader.ts","../src/infra/bases/surface.ts","../src/app/cli/commands/doctorCommand.ts","../src/app/cli/commands/initCommand.ts","../src/modules/environment/capabilities/dependencies/providers/node.provider.ts","../src/modules/environment/capabilities/dependencies/dependencies.repository.ts","../src/modules/environment/capabilities/dependencies/dependencies.entities.ts","../src/modules/environment/capabilities/dependencies/dependencies.service.ts","../src/modules/environment/capabilities/dependencies/dependencies.viewmodel.ts","../src/modules/environment/environment.config.ts","../src/modules/environment/environment.bind.ts","../src/modules/environment/environment.surface.ts","../src/app/cli/toolRuntime.ts","../src/infra/models/model_store.ts","../src/infra/bases/model.ts","../src/infra/brain/local_llama_provider.ts","../src/infra/brain/mock_provider.ts","../src/infra/brain/brain_dock.ts","../src/infra/capabilities/capability_registry.ts","../src/modules/context/capabilities/projects/projects.entities.ts","../src/modules/context/capabilities/projects/projects.repository.ts","../src/modules/context/capabilities/projects/projects.service.ts","../src/modules/context/capabilities/sessions/sessions.entities.ts","../src/modules/context/capabilities/sessions/sessions.repository.ts","../src/modules/context/capabilities/sessions/sessions.service.ts","../src/modules/context/context.config.ts","../src/modules/context/context.bind.ts","../src/modules/context/context.surface.ts","../src/infra/bases/prompt.ts","../src/modules/conversation/capabilities/chat/chat.repository.ts","../src/modules/conversation/capabilities/chat/chat.entities.ts","../src/infra/bases/brain.ts","../src/modules/conversation/capabilities/chat/chat.service.ts","../src/modules/conversation/conversation.config.ts","../src/modules/conversation/conversation.bind.ts","../src/modules/conversation/conversation.surface.ts","../src/modules/logs/capabilities/analysis/analysis.repository.ts","../src/modules/logs/capabilities/analysis/analysis.entities.ts","../src/modules/logs/capabilities/analysis/analysis.service.ts","../src/modules/logs/logs.config.ts","../src/modules/logs/logs.bind.ts","../src/modules/logs/logs.surface.ts","../src/infra/models/model_catalog.ts","../src/infra/assets/asset_loader.ts","../src/modules/models/capabilities/registry/registry.repository.ts","../src/modules/models/capabilities/registry/registry.entities.ts","../src/modules/models/capabilities/registry/registry.service.ts","../src/modules/models/models.config.ts","../src/modules/models/models.bind.ts","../src/modules/models/models.surface.ts","../src/infra/crypto/encrypted_secret_store.ts","../src/infra/bases/logger.ts","../src/infra/helpers/error_cause.ts","../src/infra/crypto/local_master_key_provider.ts","../src/infra/crypto/local_secret_crypto.ts","../src/modules/secrets/capabilities/vault/vault.repository.ts","../src/modules/secrets/capabilities/vault/vault.entities.ts","../src/modules/secrets/capabilities/vault/vault.service.ts","../src/modules/secrets/secrets.config.ts","../src/modules/secrets/secrets.bind.ts","../src/modules/secrets/secrets.surface.ts","../src/modules/self/capabilities/update/update.repository.ts","../src/modules/self/capabilities/update/update.entities.ts","../src/modules/self/capabilities/update/update.service.ts","../src/modules/self/self.config.ts","../src/modules/self/self.bind.ts","../src/modules/self/self.surface.ts","../src/modules/user/user.surface.ts","../src/modules/modules.registry.ts","../src/modules/capability_registry.ts","../src/modules/capability_tool_runtime.ts","../src/app/cli/commands/installCommand.ts","../src/app/cli/commands/logsCommand.ts","../src/modules/logs/capabilities/analysis/analysis.viewmodel.ts","../src/app/mcp/mcp_http_transport.ts","../src/app/mcp/mcp_server.ts","../src/infra/agent/agent_runtime.ts","../src/app/mcp/mcp_result_mapper.ts","../src/app/mcp/mcp_stdio_transport.ts","../src/app/cli/commands/mcpCommand.ts","../src/app/cli/commands/modelsCommand.ts","../src/modules/models/capabilities/registry/registry.viewmodel.ts","../src/app/cli/commands/personalizationCommand.ts","../src/app/cli/commands/preferencesCommand.ts","../src/app/cli/commands/projectsCommand.ts","../src/modules/context/capabilities/projects/projects.viewmodel.ts","../src/modules/context/capabilities/sessions/sessions.viewmodel.ts","../src/app/cli/commands/resetCommand.ts","../src/app/cli/commands/runCommand.ts","../src/app/cli/commands/secretsCommand.ts","../src/modules/secrets/capabilities/vault/vault.viewmodel.ts","../src/app/cli/commands/sessionsCommand.ts","../src/app/cli/commands/toolsCommand.ts","../src/modules/self/capabilities/update/update.viewmodel.ts","../src/app/cli/commands/updateCommand.ts","../src/app/cli/firstRun.ts","../src/app/cli/i18n.ts","../src/app/cli/rootConversation.ts","../src/modules/conversation/capabilities/chat/chat.viewmodel.ts","../src/infra/helpers/redaction.ts","../src/app/cli/usageLogging.ts","../src/app/tui/App.tsx","../src/infra/logging/json_technical_logger.ts","../src/infra/logging/json_usage_logger.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { render } from \"ink\";\nimport React from \"react\";\nimport packageJson from \"../package.json\";\nimport { registerAliasCommand } from \"./app/cli/commands/aliasCommand\";\nimport { registerDoctorCommand } from \"./app/cli/commands/doctorCommand\";\nimport { registerInitCommand } from \"./app/cli/commands/initCommand\";\nimport { registerInstallCommand } from \"./app/cli/commands/installCommand\";\nimport { registerLogsCommand } from \"./app/cli/commands/logsCommand\";\nimport { registerMcpCommand } from \"./app/cli/commands/mcpCommand\";\nimport { registerModelsCommand } from \"./app/cli/commands/modelsCommand\";\nimport { registerPersonalizationCommand } from \"./app/cli/commands/personalizationCommand\";\nimport { registerPreferencesCommand } from \"./app/cli/commands/preferencesCommand\";\nimport { registerProjectsCommand } from \"./app/cli/commands/projectsCommand\";\nimport { registerResetCommand } from \"./app/cli/commands/resetCommand\";\nimport { registerRunCommand } from \"./app/cli/commands/runCommand\";\nimport { registerSecretsCommand } from \"./app/cli/commands/secretsCommand\";\nimport { registerSessionsCommand } from \"./app/cli/commands/sessionsCommand\";\nimport { registerToolsCommand } from \"./app/cli/commands/toolsCommand\";\nimport { registerUpdateCommand } from \"./app/cli/commands/updateCommand\";\nimport { ensureFirstRunModel } from \"./app/cli/firstRun\";\nimport {\n configureLocalizedHelp,\n createCliTranslator,\n loadCliUserPreferences,\n} from \"./app/cli/i18n\";\nimport { runRootConversation } from \"./app/cli/rootConversation\";\nimport { CliUsageLoggingMiddleware } from \"./app/cli/usageLogging\";\nimport { App } from \"./app/tui/App\";\nimport { JsonTechnicalLogger } from \"./infra/logging/json_technical_logger\";\nimport { JsonUsageLogger } from \"./infra/logging/json_usage_logger\";\n\nconst program = new Command();\nconst userPreferences = loadCliUserPreferences();\nconst translator = createCliTranslator();\nconst usageLogging = new CliUsageLoggingMiddleware({\n logger: new JsonUsageLogger({ retentionDays: userPreferences.logRetentionDays }),\n technicalLogger: new JsonTechnicalLogger({ retentionDays: userPreferences.logRetentionDays }),\n});\nconfigureLocalizedHelp(program, translator);\n\nconst removedRootCommandAliases = new Set([\"ask\", \"chat\"]);\n\nprogram\n .name(\"agent\")\n .description(translator.t(\"cli.root.description\"))\n .version(packageJson.version, \"-v, --version\", translator.t(\"cli.version.option\"))\n .argument(\"[prompt...]\", translator.t(\"cli.root.promptArgument\"))\n .action(\n usageLogging.track({ area: \"user\", command: \"tui\" }, async (promptParts: string[]) => {\n const initialPrompt = promptParts.join(\" \").trim();\n const firstPromptPart = promptParts[0]?.toLowerCase();\n\n if (typeof firstPromptPart === \"string\" && removedRootCommandAliases.has(firstPromptPart)) {\n program.error(translator.t(\"cli.root.removedChatCommand\"));\n }\n\n if (initialPrompt.length > 0) {\n await runRootConversation(initialPrompt);\n return;\n }\n\n await ensureFirstRunModel(translator);\n render(React.createElement(App, { translator }));\n }),\n );\n\nregisterDoctorCommand(program, { appVersion: packageJson.version, translator, usageLogging });\nregisterAliasCommand(program, { translator, usageLogging });\nregisterInitCommand(program, { appVersion: packageJson.version, translator, usageLogging });\nregisterInstallCommand(program, {\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n translator,\n usageLogging,\n});\nregisterLogsCommand(program, { translator, usageLogging });\nregisterMcpCommand(program, {\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n translator,\n usageLogging,\n});\nregisterModelsCommand(program, { translator, usageLogging });\nregisterPersonalizationCommand(program, { translator, usageLogging });\nregisterPreferencesCommand(program, { translator, usageLogging });\nregisterProjectsCommand(program, { translator, usageLogging });\nregisterResetCommand(program, { appVersion: packageJson.version, translator, usageLogging });\nregisterRunCommand(program, {\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n translator,\n usageLogging,\n});\nregisterSecretsCommand(program, { translator, usageLogging });\nregisterSessionsCommand(program, { translator, usageLogging });\nregisterToolsCommand(program, {\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n translator,\n usageLogging,\n});\nregisterUpdateCommand(program, { translator, usageLogging });\n\nawait program.parseAsync(process.argv);\n","{\n \"name\": \"agent-devkit\",\n \"version\": \"0.3.4\",\n \"description\": \"Agent DevKit CLI and TUI runtime for specialist AI agents, capabilities and provider-aware workflows.\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"bin\": {\n \"agent\": \"./dist/main.js\"\n },\n \"files\": [\n \"dist\",\n \"src/assets\",\n \"src/modules/*/surface/*.json\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/jhenriquedev/agent-devkit.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/jhenriquedev/agent-devkit/issues\"\n },\n \"homepage\": \"https://github.com/jhenriquedev/agent-devkit#readme\",\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"check:fast\": \"npm run typecheck && npm run lint && npm run test:modules:changed\",\n \"check\": \"npm run typecheck && npm run lint && npm run test && npm run build && npm run package:verify\",\n \"clean\": \"node scripts/clean.mjs\",\n \"dev\": \"tsx src/main.tsx\",\n \"docker:agent\": \"docker compose run --rm agent ./node_modules/.bin/tsx src/main.tsx\",\n \"docker:build\": \"docker compose build agent\",\n \"docker:check\": \"docker compose run --rm agent npm run check\",\n \"docker:shell\": \"docker compose run --rm agent bash\",\n \"format\": \"biome format --write .\",\n \"lint\": \"biome check .\",\n \"package:pack\": \"npm pack\",\n \"package:verify\": \"node scripts/verify-package.mjs\",\n \"release:verify\": \"node scripts/verify-release-alignment.mjs\",\n \"test\": \"npm run test:architecture && npm run test:infra && npm run test:app && npm run test:modules\",\n \"test:app\": \"vitest run src/app/cli/commands src/app/mcp src/app/tui src/package.test.ts\",\n \"test:architecture\": \"vitest run src/architecture.test.ts src/modules/capability_registry.test.ts src/modules/capability_tool_runtime.test.ts src/modules/modules.registry.test.ts\",\n \"test:infra\": \"vitest run src/infra\",\n \"test:module\": \"tsx scripts/test-modules.ts\",\n \"test:modules\": \"tsx scripts/test-modules.ts\",\n \"test:modules:changed\": \"tsx scripts/test-modules.ts --changed\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"overrides\": {\n \"esbuild\": \"0.28.1\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.29.0\",\n \"commander\": \"^15.0.0\",\n \"ink\": \"^7.1.0\",\n \"react\": \"^19.2.7\",\n \"zod\": \"^4.4.3\"\n },\n \"optionalDependencies\": {\n \"node-llama-cpp\": \"^3.0.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.5.1\",\n \"@types/node\": \"^26.0.1\",\n \"@types/react\": \"^19.2.17\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.22.4\",\n \"typescript\": \"^6.0.3\",\n \"vitest\": \"^4.1.9\"\n }\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport {\n type CliAliasResult,\n createUserModuleBindings,\n formatCliAliasText,\n} from \"../../../modules/user/user.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterAliasCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction cliAliasCapability() {\n const bindings = createUserModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.cliAlias;\n}\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, CliAliasResult>,\n translator: Translator,\n json?: boolean,\n): void {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatCliAliasText(payload, translator));\n}\n\nexport function registerAliasCommand(program: Command, options: RegisterAliasCommandOptions): void {\n const aliasCommand = program\n .command(\"alias\")\n .description(options.translator.t(\"cli.alias.description\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"))\n .action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias\", options: () => aliasCommand.opts() },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await cliAliasCapability().execute({ action: \"status\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const setCommand = aliasCommand\n .command(\"set\")\n .argument(\"<name>\", options.translator.t(\"cli.alias.argument.name\"))\n .description(options.translator.t(\"cli.alias.set.description\"))\n .option(\"--force\", options.translator.t(\"cli.alias.option.force\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"));\n\n setCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias.set\", options: () => setCommand.opts() },\n async (name: string, commandOptions: { force?: boolean; json?: boolean }) => {\n printResult(\n await cliAliasCapability().execute({\n action: \"set\",\n force: commandOptions.force,\n name,\n }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const removeCommand = aliasCommand\n .command(\"remove\")\n .description(options.translator.t(\"cli.alias.remove.description\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"));\n\n removeCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias.remove\", options: () => removeCommand.opts() },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await cliAliasCapability().execute({ action: \"remove\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const syncCommand = aliasCommand\n .command(\"sync\")\n .description(options.translator.t(\"cli.alias.sync.description\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"));\n\n syncCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias.sync\", options: () => syncCommand.opts() },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await cliAliasCapability().execute({ action: \"sync\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const shellCommand = aliasCommand\n .command(\"shell\")\n .description(options.translator.t(\"cli.alias.shell.description\"))\n .option(\"--json\", options.translator.t(\"cli.alias.option.json\"));\n\n shellCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"alias.shell\", options: () => shellCommand.opts() },\n async (commandOptions: { json?: boolean }) => {\n const result = await cliAliasCapability().execute({ action: \"shell\" });\n\n if (wantsJson(commandOptions)) {\n printResult(result, options.translator, true);\n return;\n }\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n console.log(result.unwrap().shellCommand);\n },\n ),\n );\n}\n","import type { z } from \"zod\";\nimport type { AgentDevKitConfig } from \"./config\";\nimport type { AgentDevKitErrorCode } from \"./errors\";\nimport type { Result } from \"./result\";\n\nexport type CapabilityKind = \"brain-assisted\" | \"composite\" | \"deterministic\" | \"external\";\n\nexport type CapabilityRisk =\n | \"destructive\"\n | \"external-write\"\n | \"read-only\"\n | \"writes-global-state\"\n | \"writes-project-state\";\n\nexport type CapabilityConfig = AgentDevKitConfig & {\n readonly kind: CapabilityKind;\n readonly moduleId: string;\n readonly risk: CapabilityRisk;\n};\n\nexport type CapabilityRepositoryPort = {\n readonly repositoryId: string;\n};\n\nexport type CapabilityInvocationInterface = \"agent\" | \"cli\" | \"mcp\" | \"tui\";\n\nexport type CapabilityInvocationContext = {\n approved?: boolean;\n correlationId?: string;\n interface: CapabilityInvocationInterface;\n requestedBy?: string;\n};\n\nexport type CapabilityEffectOperation = \"delete\" | \"external-write\" | \"read\" | \"write\";\n\nexport type CapabilityEffectScope =\n | \"external\"\n | \"global\"\n | \"none\"\n | \"project\"\n | \"project-or-global\";\n\nexport type CapabilityEffect = {\n operation: CapabilityEffectOperation;\n scope: CapabilityEffectScope;\n};\n\nexport type CapabilityApproval = {\n reason: string;\n required: boolean;\n};\n\nexport type CapabilityInvocationAudit = {\n durationMs: number;\n endedAt: string;\n startedAt: string;\n};\n\nexport type CapabilityInvocationFailure = {\n capabilityId: string;\n audit: CapabilityInvocationAudit;\n error: {\n code: AgentDevKitErrorCode;\n hint?: string;\n message: string;\n recoverable: boolean;\n };\n ok: false;\n};\n\nexport type CapabilityInvocationSuccess<TOutput = unknown> = {\n capabilityId: string;\n audit: CapabilityInvocationAudit;\n data: TOutput;\n effects: CapabilityEffect[];\n ok: true;\n};\n\nexport type CapabilityInvocationResult<TOutput = unknown> =\n | CapabilityInvocationFailure\n | CapabilityInvocationSuccess<TOutput>;\n\nexport type InvokableCapabilityDescriptor = CapabilityConfig & {\n approval: CapabilityApproval;\n inputSchema: Record<string, unknown>;\n outputSchema: Record<string, unknown>;\n};\n\nexport type InvokableCapabilityService<TInput = unknown, TOutput = unknown> = BaseCapabilityService<\n CapabilityConfig,\n unknown,\n TInput,\n TOutput\n>;\n\nexport type CapabilityExecution<\n TInput,\n TOutput,\n TError extends string = AgentDevKitErrorCode,\n> = TInput extends void\n ? {\n execute(): Promise<Result<TError, TOutput>>;\n }\n : {\n execute(input: TInput): Promise<Result<TError, TOutput>>;\n };\n\nexport abstract class BaseCapabilityService<\n TConfig extends CapabilityConfig,\n TDependencies,\n TInput = unknown,\n TOutput = unknown,\n> {\n readonly capability: TConfig;\n abstract readonly inputSchema: z.ZodType<TInput>;\n abstract readonly outputSchema: z.ZodType<TOutput>;\n protected readonly dependencies: TDependencies;\n\n protected constructor(capability: TConfig, dependencies: TDependencies) {\n this.capability = capability;\n this.dependencies = dependencies;\n }\n\n abstract invoke(\n input: TInput,\n context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, TOutput>>;\n\n approvalForInput?(input: TInput, context: CapabilityInvocationContext): CapabilityApproval;\n\n effectsForInput?(input: TInput, context: CapabilityInvocationContext): CapabilityEffect[];\n}\n\nexport function defineCapabilityConfig<TConfig extends CapabilityConfig>(config: TConfig): TConfig {\n return config;\n}\n","export const ErrorCodes = {\n AssetReadFailed: \"ASSET_READ_FAILED\",\n ApprovalRequired: \"APPROVAL_REQUIRED\",\n BrainProviderUnavailable: \"BRAIN_PROVIDER_UNAVAILABLE\",\n CacheReadFailed: \"CACHE_READ_FAILED\",\n CapabilityNotFound: \"CAPABILITY_NOT_FOUND\",\n CapabilityExecutionFailed: \"CAPABILITY_EXECUTION_FAILED\",\n DatabaseReadFailed: \"DATABASE_READ_FAILED\",\n DecryptionFailed: \"DECRYPTION_FAILED\",\n EncryptionFailed: \"ENCRYPTION_FAILED\",\n FileReadFailed: \"FILE_READ_FAILED\",\n FileWriteFailed: \"FILE_WRITE_FAILED\",\n InvalidInput: \"INVALID_INPUT\",\n ModelNotFound: \"MODEL_NOT_FOUND\",\n ModelVerificationFailed: \"MODEL_VERIFICATION_FAILED\",\n NetworkRequestFailed: \"NETWORK_REQUEST_FAILED\",\n PackageInstallFailed: \"PACKAGE_INSTALL_FAILED\",\n PackageRegistryFailed: \"PACKAGE_REGISTRY_FAILED\",\n StateResetFailed: \"STATE_RESET_FAILED\",\n} as const;\n\nexport type AgentDevKitErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];\n","export class Result<Left, Right> {\n readonly #left?: Left;\n readonly #right?: Right;\n readonly #ok: boolean;\n\n private constructor(ok: boolean, left?: Left, right?: Right) {\n this.#ok = ok;\n this.#left = left;\n this.#right = right;\n }\n\n static ok<Left, Right>(right: Right): Result<Left, Right> {\n return new Result<Left, Right>(true, undefined, right);\n }\n\n static fail<Left, Right>(left: Left): Result<Left, Right> {\n return new Result<Left, Right>(false, left);\n }\n\n isOk(): boolean {\n return this.#ok;\n }\n\n isErr(): boolean {\n return !this.#ok;\n }\n\n flatMap<NextRight>(mapper: (right: Right) => Result<Left, NextRight>): Result<Left, NextRight> {\n return this.#ok ? mapper(this.#right as Right) : Result.fail(this.#left as Left);\n }\n\n map<NextRight>(mapper: (right: Right) => NextRight): Result<Left, NextRight> {\n return this.#ok ? Result.ok(mapper(this.#right as Right)) : Result.fail(this.#left as Left);\n }\n\n mapError<NextLeft>(mapper: (left: Left) => NextLeft): Result<NextLeft, Right> {\n return this.#ok ? Result.ok(this.#right as Right) : Result.fail(mapper(this.#left as Left));\n }\n\n match<TOutput>(handlers: {\n error: (left: Left) => TOutput;\n ok: (right: Right) => TOutput;\n }): TOutput {\n return this.#ok ? handlers.ok(this.#right as Right) : handlers.error(this.#left as Left);\n }\n\n unwrap(): Right {\n if (!this.#ok) {\n throw new Error(\"Cannot unwrap a failed Result\");\n }\n\n return this.#right as Right;\n }\n\n unwrapError(): Left {\n if (this.#ok) {\n throw new Error(\"Cannot unwrapError an ok Result\");\n }\n\n return this.#left as Left;\n }\n}\n","import { z } from \"zod\";\n\nexport const CliAliasNameSchema = z\n .string()\n .min(2)\n .max(40)\n .regex(/^[a-z][a-z0-9-]*$/);\n\nexport const CliAliasStateSchema = z\n .object({\n binDirectory: z.string().min(1),\n enabled: z.boolean(),\n name: CliAliasNameSchema,\n shimPath: z.string().min(1),\n updatedAt: z.string().datetime(),\n })\n .strict();\n\nexport type CliAliasState = z.infer<typeof CliAliasStateSchema>;\n\nexport const CliAliasOptionsSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"status\") }).strict(),\n z\n .object({\n action: z.literal(\"set\"),\n force: z.boolean().optional(),\n name: CliAliasNameSchema,\n })\n .strict(),\n z.object({ action: z.literal(\"remove\") }).strict(),\n z.object({ action: z.literal(\"sync\") }).strict(),\n z.object({ action: z.literal(\"shell\") }).strict(),\n]);\n\nexport type CliAliasOptions = z.infer<typeof CliAliasOptionsSchema>;\n\nexport const CliAliasResultSchema = z\n .object({\n activationCommand: z.string().min(1),\n alias: CliAliasStateSchema.optional(),\n binDirectory: z.string().min(1),\n binDirectoryInPath: z.boolean(),\n shellCommand: z.string().min(1),\n status: z.enum([\"configured\", \"removed\", \"shell\", \"view\"]),\n })\n .strict();\n\nexport type CliAliasResult = z.infer<typeof CliAliasResultSchema>;\n","import {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type CliAliasOptions,\n CliAliasOptionsSchema,\n type CliAliasResult,\n CliAliasResultSchema,\n} from \"./cliAlias.entities\";\nimport type { CliAliasRepositoryPort } from \"./cliAlias.repository\";\n\ntype CliAliasServiceDependencies = {\n repository: CliAliasRepositoryPort;\n};\n\nexport const cliAliasCapabilityConfig = defineCapabilityConfig({\n id: \"user.cliAlias\",\n moduleId: \"user\",\n name: \"CLI alias\",\n description: \"Create and manage a local command alias for the Agent DevKit CLI.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class CliAliasService extends BaseCapabilityService<\n typeof cliAliasCapabilityConfig,\n CliAliasServiceDependencies,\n CliAliasOptions,\n CliAliasResult\n> {\n readonly inputSchema = CliAliasOptionsSchema;\n readonly outputSchema = CliAliasResultSchema;\n readonly #repository: CliAliasRepositoryPort;\n\n constructor(dependencies: CliAliasServiceDependencies) {\n super(cliAliasCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(options: CliAliasOptions): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const input = parsed.data;\n const result =\n input.action === \"set\"\n ? await this.#set(input.name, input.force)\n : input.action === \"remove\"\n ? await this.#remove()\n : input.action === \"sync\"\n ? await this.#sync()\n : await this.#view(input.action === \"shell\" ? \"shell\" : \"view\");\n\n if (result.isErr()) {\n return Result.fail(result.unwrapError());\n }\n\n const output = this.outputSchema.safeParse(result.unwrap());\n return output.success ? Result.ok(output.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n invoke(options: CliAliasOptions): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n return this.execute(options);\n }\n\n override approvalForInput(input: CliAliasOptions): CapabilityApproval {\n if (input.action === \"status\" || input.action === \"shell\") {\n return { reason: \"CLI alias read action.\", required: false };\n }\n\n return {\n reason: \"CLI alias action writes user shell state.\",\n required: true,\n };\n }\n\n override effectsForInput(input: CliAliasOptions): CapabilityEffect[] {\n if (input.action === \"status\" || input.action === \"shell\") {\n return [{ operation: \"read\", scope: \"none\" }];\n }\n\n return [{ operation: \"write\", scope: \"global\" }];\n }\n\n async #remove(): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const remove = await this.#repository.removeAlias();\n\n if (remove.isErr()) {\n return Result.fail(remove.unwrapError());\n }\n\n return this.#view(\"removed\");\n }\n\n async #set(name: string, force?: boolean): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const alias = await this.#repository.saveAlias(name, force);\n\n if (alias.isErr()) {\n return Result.fail(alias.unwrapError());\n }\n\n return Result.ok(this.#result(\"configured\", alias.unwrap()));\n }\n\n async #sync(): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const alias = await this.#repository.syncAlias();\n\n if (alias.isErr()) {\n return Result.fail(alias.unwrapError());\n }\n\n return Result.ok(this.#result(\"configured\", alias.unwrap()));\n }\n\n async #view(\n status: CliAliasResult[\"status\"],\n ): Promise<Result<AgentDevKitErrorCode, CliAliasResult>> {\n const alias = await this.#repository.loadAlias();\n\n return alias.isOk()\n ? Result.ok(this.#result(status, alias.unwrap()))\n : Result.fail(alias.unwrapError());\n }\n\n #result(status: CliAliasResult[\"status\"], alias?: CliAliasResult[\"alias\"]): CliAliasResult {\n return {\n activationCommand: this.#repository.activationCommand(),\n alias,\n binDirectory: this.#repository.binDirectory(),\n binDirectoryInPath: this.#repository.binDirectoryInPath(),\n shellCommand: this.#repository.shellCommand(),\n status,\n };\n }\n}\n","import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport {\n type LanguageDefinition,\n LanguageDefinitionSchema,\n type LanguageId,\n type Translator,\n} from \"../bases/i18n\";\nimport { Result } from \"../bases/result\";\n\nexport type I18nCatalogOptions = {\n directory?: string;\n fallbackLanguage?: LanguageId;\n};\n\nconst languageOrder: LanguageId[] = [\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"];\n\nfunction defaultI18nDirectory(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDirectory, \"../../assets/i18n\"),\n resolve(moduleDirectory, \"../src/assets/i18n\"),\n resolve(process.cwd(), \"src/assets/i18n\"),\n ];\n\n return (\n candidates.find((candidate) => existsSync(candidate)) ??\n resolve(process.cwd(), \"src/assets/i18n\")\n );\n}\n\nfunction sortLanguages(languages: LanguageDefinition[]): LanguageDefinition[] {\n return languages.sort(\n (left, right) => languageOrder.indexOf(left.id) - languageOrder.indexOf(right.id),\n );\n}\n\nfunction interpolate(value: string, variables: Record<string, string | number | boolean>): string {\n return value.replaceAll(/\\{\\{([a-zA-Z0-9_.-]+)\\}\\}/g, (_, key: string) =>\n variables[key] === undefined ? `{{${key}}}` : String(variables[key]),\n );\n}\n\nexport class I18nCatalog {\n readonly #directory: string;\n readonly #fallbackLanguage: LanguageId;\n #languages?: LanguageDefinition[];\n\n constructor(options: I18nCatalogOptions = {}) {\n this.#directory = options.directory ?? defaultI18nDirectory();\n this.#fallbackLanguage = options.fallbackLanguage ?? \"pt-BR\";\n }\n\n async loadLanguages(): Promise<Result<AgentDevKitErrorCode, LanguageDefinition[]>> {\n if (this.#languages !== undefined) {\n return Result.ok(this.#languages);\n }\n\n try {\n const files = (await readdir(this.#directory)).filter((file) => file.endsWith(\".json\"));\n const languages: LanguageDefinition[] = [];\n\n for (const file of files) {\n const parsed = LanguageDefinitionSchema.safeParse(\n JSON.parse(await readFile(join(this.#directory, file), \"utf8\")),\n );\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n languages.push(parsed.data);\n }\n\n this.#languages = sortLanguages(languages);\n return Result.ok(this.#languages);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n loadLanguagesSync(): Result<AgentDevKitErrorCode, LanguageDefinition[]> {\n if (this.#languages !== undefined) {\n return Result.ok(this.#languages);\n }\n\n try {\n const files = readdirSync(this.#directory).filter((file) => file.endsWith(\".json\"));\n const languages: LanguageDefinition[] = [];\n\n for (const file of files) {\n const parsed = LanguageDefinitionSchema.safeParse(\n JSON.parse(readFileSync(join(this.#directory, file), \"utf8\")),\n );\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n languages.push(parsed.data);\n }\n\n this.#languages = sortLanguages(languages);\n return Result.ok(this.#languages);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n async translate(\n language: LanguageId,\n key: string,\n values: Record<string, string | number | boolean> = {},\n ): Promise<Result<AgentDevKitErrorCode, string>> {\n const languages = await this.loadLanguages();\n\n if (languages.isErr()) {\n return Result.fail(languages.unwrapError());\n }\n\n return Result.ok(this.#translateFromLanguages(languages.unwrap(), language, key, values));\n }\n\n translator(language: LanguageId): Translator {\n const languages = this.loadLanguagesSync();\n\n return {\n language,\n t: (key, values = {}) => {\n if (languages.isErr()) {\n return key;\n }\n\n return this.#translateFromLanguages(languages.unwrap(), language, key, values);\n },\n };\n }\n\n #translateFromLanguages(\n languages: LanguageDefinition[],\n language: LanguageId,\n key: string,\n values: Record<string, string | number | boolean>,\n ): string {\n const selected =\n languages.find((candidate) => candidate.id === language) ??\n languages.find((candidate) => candidate.id === this.#fallbackLanguage);\n const fallback = languages.find((candidate) => candidate.id === this.#fallbackLanguage);\n const value = selected?.messages[key] ?? fallback?.messages[key] ?? key;\n\n return interpolate(value, values);\n }\n}\n","import { z } from \"zod\";\n\nexport const LanguageDefinitionSchema = z.object({\n schema: z.literal(\"agent-devkit.i18n/v1\"),\n id: z.enum([\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"]),\n name: z.string().min(1),\n nativeName: z.string().min(1),\n messages: z.record(z.string().min(1), z.string()),\n});\n\nexport type LanguageDefinition = z.infer<typeof LanguageDefinitionSchema>;\nexport type LanguageId = LanguageDefinition[\"id\"];\n\nexport type LanguageSummary = {\n id: LanguageId;\n name: string;\n nativeName: string;\n selected: boolean;\n};\n\nexport interface Translator {\n language: LanguageId;\n t(key: string, values?: Record<string, string | number | boolean>): string;\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { CliAliasResult } from \"./cliAlias.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatCliAliasText(\n result: CliAliasResult,\n translator: Translator = defaultTranslator,\n): string {\n const t = (key: string, values?: Record<string, string | number | boolean>) =>\n translator.t(key, values);\n const lines = [t(\"alias.title\")];\n\n if (result.alias === undefined) {\n lines.push(t(\"alias.status.notConfigured\"));\n } else {\n lines.push(t(\"alias.line.name\", { name: result.alias.name }));\n lines.push(t(\"alias.line.shim\", { path: result.alias.shimPath }));\n }\n\n lines.push(t(\"alias.line.bin\", { path: result.binDirectory }));\n\n if (!result.binDirectoryInPath) {\n lines.push(t(\"alias.line.activate\", { command: result.activationCommand }));\n }\n\n return lines.join(\"\\n\");\n}\n","import { z } from \"zod\";\nimport {\n CharacterDefinitionSchema,\n CharacterIdSchema,\n CharacterProfileSchema,\n} from \"../../../../infra/bases/character\";\n\nexport const UserPersonalizationStateSchema = z\n .object({\n currentCharacter: CharacterDefinitionSchema,\n schema: z.literal(\"agent-devkit.agent-personalization/v2\"),\n selectedPresetId: CharacterIdSchema,\n updatedAt: z.string().min(1),\n })\n .strict();\n\nconst CharacterUpdateSchema = CharacterProfileSchema.partial()\n .extend({\n active: z.boolean().optional(),\n name: z.string().min(1).max(80).optional(),\n traits: z.array(z.string().min(1).max(120)).max(20).optional(),\n })\n .strict();\n\nconst CreateCharacterSchema = z\n .object({\n active: z.boolean().optional(),\n fromCharacterId: CharacterIdSchema.optional(),\n id: CharacterIdSchema,\n name: z.string().min(1).max(80),\n })\n .merge(CharacterProfileSchema.partial())\n .strict();\n\nexport const PersonalizationServiceOptionsSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"view\") }).strict(),\n z.object({ action: z.literal(\"list-characters\") }).strict(),\n z\n .object({\n action: z.literal(\"select-preset\"),\n characterId: CharacterIdSchema,\n })\n .strict(),\n z\n .object({\n action: z.literal(\"update-current\"),\n profile: CharacterUpdateSchema,\n })\n .strict(),\n z\n .object({\n action: z.literal(\"create-character\"),\n character: CreateCharacterSchema,\n })\n .strict(),\n z\n .object({\n action: z.literal(\"import-sprite\"),\n characterId: CharacterIdSchema,\n sourcePath: z.string().min(1),\n })\n .strict(),\n z.object({ action: z.literal(\"reset-current\") }).strict(),\n z.object({ action: z.literal(\"reset-defaults\") }).strict(),\n z\n .object({\n action: z.literal(\"update\"),\n profile: CharacterUpdateSchema.extend({\n characterId: CharacterIdSchema.optional(),\n }),\n })\n .strict(),\n]);\n\nexport type UserPersonalizationState = z.infer<typeof UserPersonalizationStateSchema>;\nexport type PersonalizationServiceOptions = z.infer<typeof PersonalizationServiceOptionsSchema>;\nexport type PersonalizationStatus =\n | \"character-created\"\n | \"character-updated\"\n | \"preset-selected\"\n | \"reset\"\n | \"sprite-imported\"\n | \"updated\"\n | \"view\";\n\nexport type CharacterListItem = z.infer<typeof CharacterDefinitionSchema> & {\n readonly custom: boolean;\n readonly selected: boolean;\n readonly spritePath?: string;\n};\n\nexport type PersonalizationResult = {\n characters: CharacterListItem[];\n path: string;\n profile: UserPersonalizationState;\n status: PersonalizationStatus;\n};\n\nconst CharacterListItemSchema = CharacterDefinitionSchema.extend({\n custom: z.boolean(),\n selected: z.boolean(),\n spritePath: z.string().min(1).optional(),\n});\n\nexport const PersonalizationResultSchema = z.object({\n characters: z.array(CharacterListItemSchema),\n path: z.string().min(1),\n profile: UserPersonalizationStateSchema,\n status: z.enum([\n \"character-created\",\n \"character-updated\",\n \"preset-selected\",\n \"reset\",\n \"sprite-imported\",\n \"updated\",\n \"view\",\n ]),\n});\n","import { z } from \"zod\";\n\nexport const CharacterIdSchema = z\n .string()\n .min(1)\n .max(80)\n .regex(/^[a-z0-9][a-z0-9-]*$/);\n\nexport const CharacterGenderSchema = z.enum([\"female\", \"male\", \"neutral\", \"unspecified\"]);\n\nexport const CharacterBehaviorSchema = z.enum([\n \"balanced\",\n \"proactive\",\n \"analytical\",\n \"creative\",\n \"pragmatic\",\n \"minimalist\",\n]);\n\nexport const CharacterToneSchema = z.enum([\n \"direct\",\n \"friendly\",\n \"formal\",\n \"animated\",\n \"neutral\",\n \"succinct\",\n]);\n\nexport const CharacterDetailLevelSchema = z.enum([\n \"minimal\",\n \"concise\",\n \"balanced\",\n \"detailed\",\n \"technical\",\n]);\n\nexport const CharacterI18nSchema = z\n .object({\n descriptionKey: z.string().min(1),\n nameKey: z.string().min(1),\n taglineKey: z.string().min(1),\n })\n .strict();\n\nexport const CharacterProfileSchema = z\n .object({\n archetype: z.string().min(1).max(120),\n behavior: CharacterBehaviorSchema,\n detailLevel: CharacterDetailLevelSchema,\n gender: CharacterGenderSchema,\n tone: CharacterToneSchema,\n traits: z.array(z.string().min(1).max(120)).max(20),\n })\n .strict();\n\nexport const CharacterDefinitionSchema = z\n .object({\n active: z.boolean(),\n default: z.boolean(),\n i18n: CharacterI18nSchema,\n id: CharacterIdSchema,\n name: z.string().min(1).max(80).optional(),\n profile: CharacterProfileSchema,\n schema: z.literal(\"agent-devkit.character/v1\"),\n })\n .strict();\n\nexport type CharacterId = z.infer<typeof CharacterIdSchema>;\nexport type CharacterGender = z.infer<typeof CharacterGenderSchema>;\nexport type CharacterBehavior = z.infer<typeof CharacterBehaviorSchema>;\nexport type CharacterTone = z.infer<typeof CharacterToneSchema>;\nexport type CharacterDetailLevel = z.infer<typeof CharacterDetailLevelSchema>;\nexport type CharacterDefinition = z.infer<typeof CharacterDefinitionSchema>;\n","import { BaseCapabilityService, defineCapabilityConfig } from \"../../../../infra/bases/capability\";\nimport type { CharacterDefinition, CharacterId } from \"../../../../infra/bases/character\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type {\n PersonalizationResult,\n PersonalizationServiceOptions,\n UserPersonalizationState,\n} from \"./personalization.entities\";\nimport {\n PersonalizationResultSchema,\n PersonalizationServiceOptionsSchema,\n} from \"./personalization.entities\";\nimport type { PersonalizationRepositoryPort } from \"./personalization.repository\";\n\ntype PersonalizationServiceDependencies = {\n repository: PersonalizationRepositoryPort;\n};\n\nexport const personalizationCapabilityConfig = defineCapabilityConfig({\n id: \"user.personalization\",\n moduleId: \"user\",\n name: \"Agent personalization\",\n description: \"Read and update the local agent identity, behavior, tone and detail level.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class PersonalizationService extends BaseCapabilityService<\n typeof personalizationCapabilityConfig,\n PersonalizationServiceDependencies,\n PersonalizationServiceOptions,\n PersonalizationResult\n> {\n readonly inputSchema = PersonalizationServiceOptionsSchema;\n readonly outputSchema = PersonalizationResultSchema;\n readonly #repository: PersonalizationRepositoryPort;\n\n constructor(dependencies: PersonalizationServiceDependencies) {\n super(personalizationCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: PersonalizationServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, PersonalizationResult>> {\n const parsedOptions = PersonalizationServiceOptionsSchema.safeParse(options);\n\n if (!parsedOptions.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const input = parsedOptions.data;\n const existing = await this.#repository.loadProfile();\n\n if (existing.isErr()) {\n return Result.fail(existing.unwrapError());\n }\n\n let profile = existing.unwrap();\n let status: PersonalizationResult[\"status\"] = \"view\";\n\n if (input.action === \"select-preset\") {\n const preset = await this.#repository.loadPresetCharacter(input.characterId);\n\n if (preset.isErr()) {\n return Result.fail(preset.unwrapError());\n }\n\n profile = this.#stateFromCharacter(preset.unwrap(), preset.unwrap().id);\n status = \"preset-selected\";\n }\n\n if (input.action === \"update\" && input.profile.characterId !== undefined) {\n const preset = await this.#repository.loadPresetCharacter(input.profile.characterId);\n\n if (preset.isErr()) {\n return Result.fail(preset.unwrapError());\n }\n\n profile = this.#stateFromCharacter(\n this.#mergeCharacter(preset.unwrap(), input.profile),\n preset.unwrap().id,\n );\n status = \"updated\";\n } else if (input.action === \"update-current\" || input.action === \"update\") {\n profile = {\n ...profile,\n currentCharacter: this.#mergeCharacter(profile.currentCharacter, input.profile),\n updatedAt: new Date().toISOString(),\n };\n status = \"character-updated\";\n }\n\n if (input.action === \"create-character\") {\n const character = await this.#createCharacter(input.character);\n\n if (character.isErr()) {\n return Result.fail(character.unwrapError());\n }\n\n const save = await this.#repository.saveCustomCharacter(character.unwrap());\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n profile = this.#stateFromCharacter(\n character.unwrap(),\n input.character.fromCharacterId ?? profile.selectedPresetId,\n );\n status = \"character-created\";\n }\n\n if (input.action === \"import-sprite\") {\n const characters = await this.#repository.loadCharacters(profile.currentCharacter.id);\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n const character = characters.unwrap().find((candidate) => candidate.id === input.characterId);\n\n if (character === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const imported = await this.#repository.importSprite(input.characterId, input.sourcePath);\n\n if (imported.isErr()) {\n return Result.fail(imported.unwrapError());\n }\n\n const { custom, selected, spritePath, ...characterDefinition } = character;\n void custom;\n void selected;\n void spritePath;\n\n const saveCharacter = await this.#repository.saveCustomCharacter(characterDefinition);\n\n if (saveCharacter.isErr()) {\n return Result.fail(saveCharacter.unwrapError());\n }\n\n profile = {\n ...profile,\n currentCharacter:\n profile.currentCharacter.id === character.id\n ? characterDefinition\n : profile.currentCharacter,\n updatedAt: new Date().toISOString(),\n };\n status = \"sprite-imported\";\n }\n\n if (input.action === \"reset-current\") {\n const preset = await this.#repository.loadPresetCharacter(profile.selectedPresetId);\n\n if (preset.isErr()) {\n return Result.fail(preset.unwrapError());\n }\n\n profile = this.#stateFromCharacter(preset.unwrap(), preset.unwrap().id);\n status = \"reset\";\n }\n\n if (input.action === \"reset-defaults\") {\n const defaults = await this.#repository.defaultState();\n\n if (defaults.isErr()) {\n return Result.fail(defaults.unwrapError());\n }\n\n profile = {\n ...defaults.unwrap(),\n updatedAt: new Date().toISOString(),\n };\n status = \"reset\";\n }\n\n if (status !== \"view\") {\n const save = await this.#repository.saveProfile(profile);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n }\n\n const characters = await this.#repository.loadCharacters(profile.currentCharacter.id);\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n return Result.ok({\n characters: characters.unwrap().filter((character) => character.active),\n path: this.#repository.profilePath(),\n profile,\n status,\n });\n }\n\n invoke(\n options: PersonalizationServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, PersonalizationResult>> {\n return this.execute(options);\n }\n\n async #createCharacter(\n input: Extract<PersonalizationServiceOptions, { action: \"create-character\" }>[\"character\"],\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition>> {\n let base: CharacterDefinition | undefined;\n\n if (input.fromCharacterId !== undefined) {\n const preset = await this.#repository.loadPresetCharacter(input.fromCharacterId);\n\n if (preset.isErr()) {\n return Result.fail(preset.unwrapError());\n }\n\n base = preset.unwrap();\n }\n\n const defaults = base === undefined ? await this.#repository.defaultState() : undefined;\n\n if (defaults?.isErr()) {\n return Result.fail(defaults.unwrapError());\n }\n\n const fallback = base ?? defaults?.unwrap().currentCharacter;\n\n if (fallback === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(\n this.#mergeCharacter(\n {\n ...fallback,\n active: input.active ?? true,\n default: false,\n id: input.id,\n i18n: { ...fallback.i18n },\n },\n input,\n input.name,\n ),\n );\n }\n\n #mergeCharacter(\n character: CharacterDefinition,\n update: Partial<CharacterDefinition[\"profile\"]> & {\n active?: boolean;\n name?: string;\n },\n name?: string,\n ): CharacterDefinition {\n const nextName = name ?? update.name;\n\n return {\n ...character,\n active: update.active ?? character.active,\n name: nextName ?? character.name,\n profile: {\n ...character.profile,\n archetype: update.archetype ?? character.profile.archetype,\n behavior: update.behavior ?? character.profile.behavior,\n detailLevel: update.detailLevel ?? character.profile.detailLevel,\n gender: update.gender ?? character.profile.gender,\n tone: update.tone ?? character.profile.tone,\n traits: update.traits === undefined ? character.profile.traits : [...update.traits],\n },\n };\n }\n\n #stateFromCharacter(\n character: CharacterDefinition,\n selectedPresetId: CharacterId,\n ): UserPersonalizationState {\n return {\n schema: \"agent-devkit.agent-personalization/v2\",\n currentCharacter: {\n ...character,\n i18n: { ...character.i18n },\n profile: { ...character.profile, traits: [...character.profile.traits] },\n },\n selectedPresetId,\n updatedAt: new Date().toISOString(),\n };\n }\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { CharacterDefinition } from \"../../../../infra/bases/character\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { CharacterListItem, PersonalizationResult } from \"./personalization.entities\";\n\nconst fallbackTranslator = new I18nCatalog().translator(\"pt-BR\");\n\nfunction characterName(character: CharacterDefinition, translator: Translator): string {\n return character.name ?? translator.t(character.i18n.nameKey);\n}\n\nexport function formatPersonalizationText(\n result: PersonalizationResult,\n translator: Translator = fallbackTranslator,\n): string {\n const current = result.profile.currentCharacter;\n\n return [\n translator.t(\"personalization.title\"),\n translator.t(\"personalization.command\"),\n \"\",\n `[${translator.t(\"personalization.status\", { status: result.status })}]`,\n ` ${translator.t(\"personalization.field.file\").padEnd(12)} ${result.path}`,\n ` ${translator.t(\"personalization.field.name\").padEnd(12)} ${characterName(current, translator)}`,\n ` ${translator.t(\"personalization.field.character\").padEnd(12)} ${current.id}`,\n ` ${translator.t(\"personalization.field.behavior\").padEnd(12)} ${current.profile.behavior}`,\n ` ${translator.t(\"personalization.field.tone\").padEnd(12)} ${current.profile.tone}`,\n ` ${translator.t(\"personalization.field.detail\").padEnd(12)} ${current.profile.detailLevel}`,\n ` ${translator.t(\"personalization.field.traits\").padEnd(12)} ${current.profile.traits.join(\", \")}`,\n ` ${translator.t(\"personalization.field.sprite\").padEnd(12)} ${current.id}/sprite`,\n \"\",\n ` ${translator.t(\"personalization.section.characters\")}`,\n ...result.characters.map((character) => formatCharacterLine(character, translator)),\n ].join(\"\\n\");\n}\n\nfunction formatCharacterLine(character: CharacterListItem, translator: Translator): string {\n const source = character.custom\n ? translator.t(\"personalization.label.custom\")\n : translator.t(\"personalization.label.preset\");\n\n return ` ${character.selected ? \"*\" : \" \"} ${character.id.padEnd(8)} ${characterName(character, translator).padEnd(10)} ${source} ${character.profile.behavior} / ${character.profile.tone} / ${character.profile.detailLevel}`;\n}\n","import { z } from \"zod\";\nimport {\n type LanguageDefinition,\n LanguageDefinitionSchema,\n type LanguageId,\n type LanguageSummary,\n} from \"../../../../infra/bases/i18n\";\nimport { type ThemeDefinition, ThemeDefinitionSchema } from \"../../../../infra/bases/theme\";\nimport { type CliAliasState, CliAliasStateSchema } from \"../cliAlias/cliAlias.entities\";\n\nexport const PreferencesServiceOptionsSchema = z\n .object({\n action: z.enum([\n \"reset-defaults\",\n \"set-language\",\n \"set-log-retention\",\n \"set-theme\",\n \"update\",\n \"view\",\n ]),\n language: z.enum([\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"]).optional(),\n logRetentionDays: z.number().int().min(1).max(3650).optional(),\n theme: z.string().min(1).optional(),\n })\n .strict();\n\nexport type UserPreferences = {\n schema: \"agent-devkit.user-preferences/v1\";\n cliAlias?: CliAliasState;\n language: LanguageId;\n logRetentionDays: number;\n theme: string;\n updatedAt: string;\n};\n\nexport type ThemeSummary = {\n id: string;\n name: string;\n primary: string;\n selected: boolean;\n};\n\nexport type PreferencesStatus = \"reset\" | \"updated\" | \"view\";\n\nexport type PreferencesResult = {\n activeLanguage: LanguageDefinition;\n activeTheme: ThemeDefinition;\n languages: LanguageSummary[];\n path: string;\n preferences: UserPreferences;\n status: PreferencesStatus;\n themes: ThemeSummary[];\n};\n\nexport type PreferencesServiceOptions = {\n action: \"reset-defaults\" | \"set-language\" | \"set-log-retention\" | \"set-theme\" | \"update\" | \"view\";\n language?: LanguageId;\n logRetentionDays?: number;\n theme?: string;\n};\n\nexport const PreferencesResultSchema = z.object({\n activeLanguage: LanguageDefinitionSchema.omit({ messages: true }),\n activeTheme: ThemeDefinitionSchema,\n languages: z.array(\n z.object({\n id: z.enum([\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"]),\n name: z.string().min(1),\n nativeName: z.string().min(1),\n selected: z.boolean(),\n }),\n ),\n path: z.string().min(1),\n preferences: z.object({\n schema: z.literal(\"agent-devkit.user-preferences/v1\"),\n cliAlias: CliAliasStateSchema.optional(),\n language: z.enum([\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"]),\n logRetentionDays: z.number().int().min(1).max(3650),\n theme: z.string().min(1),\n updatedAt: z.string().min(1),\n }),\n status: z.enum([\"reset\", \"updated\", \"view\"]),\n themes: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n primary: z.string().min(1),\n selected: z.boolean(),\n }),\n ),\n});\n","import { z } from \"zod\";\n\nexport const ThemeDefinitionSchema = z.object({\n schema: z.literal(\"agent-devkit.theme/v1\"),\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().min(1),\n appearance: z.enum([\"dark\", \"light\"]),\n colors: z.object({\n background: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n panel: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n elevated: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n border: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n borderStrong: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n text: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n textMuted: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n textDim: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n primary: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n primaryStrong: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n success: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n warning: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n danger: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n accent: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n }),\n fonts: z.object({\n heading: z.string().min(1),\n mono: z.string().min(1),\n body: z.string().min(1),\n }),\n});\n\nexport type ThemeDefinition = z.infer<typeof ThemeDefinitionSchema>;\n","import {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type {\n PreferencesResult,\n PreferencesServiceOptions,\n UserPreferences,\n} from \"./preferences.entities\";\nimport { PreferencesResultSchema, PreferencesServiceOptionsSchema } from \"./preferences.entities\";\nimport type { PreferencesRepositoryPort } from \"./preferences.repository\";\n\ntype PreferencesServiceDependencies = {\n repository: PreferencesRepositoryPort;\n};\n\nfunction isValidRetentionDays(value: number | undefined): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 1 && value <= 3650;\n}\n\nexport const preferencesCapabilityConfig = defineCapabilityConfig({\n id: \"user.preferences\",\n moduleId: \"user\",\n name: \"Preferences\",\n description: \"Read and update user Agent DevKit preferences.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class PreferencesService\n extends BaseCapabilityService<typeof preferencesCapabilityConfig, PreferencesServiceDependencies>\n implements CapabilityExecution<PreferencesServiceOptions, PreferencesResult>\n{\n readonly inputSchema = PreferencesServiceOptionsSchema;\n readonly outputSchema = PreferencesResultSchema;\n readonly #repository: PreferencesRepositoryPort;\n\n constructor(dependencies: PreferencesServiceDependencies) {\n super(preferencesCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: PreferencesServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, PreferencesResult>> {\n const themes = await this.#repository.loadThemes();\n const languages = await this.#repository.loadLanguages();\n\n if (themes.isErr()) {\n return Result.fail(themes.unwrapError());\n }\n\n if (languages.isErr()) {\n return Result.fail(languages.unwrapError());\n }\n\n const availableThemes = themes.unwrap();\n const availableLanguages = languages.unwrap();\n const existing = await this.#repository.loadPreferences();\n\n if (existing.isErr()) {\n return Result.fail(existing.unwrapError());\n }\n\n let preferences = existing.unwrap();\n let status: PreferencesResult[\"status\"] = \"view\";\n\n if (options.action === \"reset-defaults\") {\n preferences = {\n ...this.#repository.defaultPreferences(),\n updatedAt: new Date().toISOString(),\n };\n status = \"reset\";\n }\n\n if (options.action === \"set-theme\" || options.action === \"update\") {\n if (options.theme === undefined) {\n if (options.action === \"set-theme\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n } else {\n if (!availableThemes.some((theme) => theme.id === options.theme)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n preferences = {\n ...preferences,\n theme: options.theme,\n updatedAt: new Date().toISOString(),\n };\n status = \"updated\";\n }\n }\n\n if (options.action === \"set-language\" || options.action === \"update\") {\n if (options.language === undefined) {\n if (options.action === \"set-language\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n } else {\n if (!availableLanguages.some((language) => language.id === options.language)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n preferences = {\n ...preferences,\n language: options.language,\n updatedAt: new Date().toISOString(),\n };\n status = \"updated\";\n }\n }\n\n if (options.action === \"set-log-retention\" || options.action === \"update\") {\n if (options.logRetentionDays === undefined) {\n if (options.action === \"set-log-retention\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n } else {\n if (!isValidRetentionDays(options.logRetentionDays)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n preferences = {\n ...preferences,\n logRetentionDays: options.logRetentionDays,\n updatedAt: new Date().toISOString(),\n };\n status = \"updated\";\n }\n }\n\n if (status === \"updated\" || status === \"reset\") {\n const save = await this.#repository.savePreferences(preferences);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n }\n\n const activeTheme =\n availableThemes.find((theme) => theme.id === preferences.theme) ?? availableThemes[0];\n const activeLanguage =\n availableLanguages.find((language) => language.id === preferences.language) ??\n availableLanguages[0];\n\n if (activeTheme === undefined || activeLanguage === undefined) {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n\n return Result.ok({\n activeLanguage,\n activeTheme,\n languages: availableLanguages.map((language) => ({\n id: language.id,\n name: language.name,\n nativeName: language.nativeName,\n selected: language.id === activeLanguage.id,\n })),\n path: this.#repository.preferencesPath(),\n preferences: this.#normalizePreferences(preferences, activeTheme.id, activeLanguage.id),\n status,\n themes: availableThemes.map((theme) => ({\n id: theme.id,\n name: theme.name,\n primary: theme.colors.primary,\n selected: theme.id === activeTheme.id,\n })),\n });\n }\n\n #normalizePreferences(\n preferences: UserPreferences,\n theme: string,\n language: UserPreferences[\"language\"],\n ): UserPreferences {\n return {\n schema: \"agent-devkit.user-preferences/v1\",\n cliAlias: preferences.cliAlias,\n language,\n logRetentionDays: preferences.logRetentionDays,\n theme,\n updatedAt: preferences.updatedAt,\n };\n }\n\n invoke(\n options: PreferencesServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, PreferencesResult>> {\n return this.execute(options);\n }\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { PreferencesResult } from \"./preferences.entities\";\n\nconst fallbackTranslator = new I18nCatalog().translator(\"pt-BR\");\n\nexport function formatPreferencesText(\n result: PreferencesResult,\n translator: Translator = fallbackTranslator,\n): string {\n return [\n translator.t(\"preferences.title\"),\n translator.t(\"preferences.command\"),\n \"\",\n `[${translator.t(\"preferences.status\", { status: result.status })}]`,\n ` ${translator.t(\"preferences.field.file\").padEnd(8)} ${result.path}`,\n ` ${translator.t(\"preferences.field.theme\").padEnd(8)} ${result.preferences.theme}`,\n ` ${translator.t(\"preferences.field.language\").padEnd(8)} ${result.preferences.language}`,\n ` ${translator.t(\"preferences.field.logRetentionDays\").padEnd(8)} ${result.preferences.logRetentionDays}d`,\n \"\",\n ` ${translator.t(\"preferences.section.themes\")}`,\n ...result.themes.map(\n (theme) =>\n ` ${theme.selected ? \"*\" : \" \"} ${theme.id.padEnd(16)} ${theme.primary} ${theme.name}`,\n ),\n \"\",\n ` ${translator.t(\"preferences.section.languages\")}`,\n ...result.languages.map(\n (language) =>\n ` ${language.selected ? \"*\" : \" \"} ${language.id.padEnd(8)} ${language.nativeName} ${language.name}`,\n ),\n ].join(\"\\n\");\n}\n","import type { BaseCapabilityService, CapabilityConfig } from \"./capability\";\nimport type { AgentDevKitErrorCode } from \"./errors\";\nimport type { AgentDevKitModuleConfig } from \"./module\";\nimport { Result } from \"./result\";\n\nexport type ModuleCapabilityMap = Record<string, BaseCapabilityService<CapabilityConfig, unknown>>;\n\nexport type ModuleBinding<\n TConfig extends AgentDevKitModuleConfig,\n TCapabilities extends ModuleCapabilityMap,\n> = {\n readonly capabilities: TCapabilities;\n readonly config: TConfig;\n};\n\nexport abstract class ModuleBinder<\n TOptions,\n TConfig extends AgentDevKitModuleConfig,\n TCapabilities extends ModuleCapabilityMap,\n> {\n abstract bind(\n options: TOptions,\n ): Result<AgentDevKitErrorCode, ModuleBinding<TConfig, TCapabilities>>;\n}\n\nexport function defineModuleBinding<\n TConfig extends AgentDevKitModuleConfig,\n TCapabilities extends ModuleCapabilityMap,\n>(\n binding: ModuleBinding<TConfig, TCapabilities>,\n): Result<AgentDevKitErrorCode, ModuleBinding<TConfig, TCapabilities>> {\n return Result.ok(binding);\n}\n","import { access, chmod, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, delimiter, dirname, join } from \"node:path\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type { PreferencesRepositoryPort } from \"../preferences/preferences.repository\";\nimport type { CliAliasState } from \"./cliAlias.entities\";\nimport { CliAliasNameSchema } from \"./cliAlias.entities\";\n\nexport type CliAliasRepositoryOptions = {\n agentCommand?: string;\n envPath?: string;\n homeDirectory?: string;\n shell?: string;\n preferencesRepository: PreferencesRepositoryPort;\n};\n\nexport interface CliAliasRepositoryPort extends CapabilityRepositoryPort {\n activationCommand(): string;\n binDirectory(): string;\n binDirectoryInPath(): boolean;\n loadAlias(): Promise<Result<AgentDevKitErrorCode, CliAliasState | undefined>>;\n removeAlias(): Promise<Result<AgentDevKitErrorCode, void>>;\n saveAlias(name: string, force?: boolean): Promise<Result<AgentDevKitErrorCode, CliAliasState>>;\n shellCommand(): string;\n syncAlias(): Promise<Result<AgentDevKitErrorCode, CliAliasState>>;\n}\n\nconst reservedAliases = new Set([\n \"agent\",\n \"bash\",\n \"cat\",\n \"cd\",\n \"chmod\",\n \"curl\",\n \"git\",\n \"node\",\n \"npm\",\n \"npx\",\n \"rm\",\n \"sh\",\n \"sudo\",\n \"tsx\",\n \"yarn\",\n \"zsh\",\n]);\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nexport class CliAliasRepository implements CliAliasRepositoryPort {\n readonly repositoryId = \"user.cli_alias.repository\";\n readonly #agentCommand: string;\n readonly #envPath: string;\n readonly #homeDirectory: string;\n readonly #preferencesRepository: PreferencesRepositoryPort;\n readonly #shell: string;\n\n constructor(options: CliAliasRepositoryOptions) {\n this.#agentCommand = options.agentCommand ?? \"agent\";\n this.#envPath = options.envPath ?? process.env.PATH ?? \"\";\n this.#homeDirectory = options.homeDirectory ?? homedir();\n this.#preferencesRepository = options.preferencesRepository;\n this.#shell = options.shell ?? process.env.SHELL ?? \"\";\n }\n\n activationCommand(): string {\n return `export PATH=\"${this.binDirectory()}:$PATH\"`;\n }\n\n binDirectory(): string {\n return join(this.#homeDirectory, \".agent-devkit\", \"bin\");\n }\n\n binDirectoryInPath(): boolean {\n return this.#envPath.split(delimiter).filter(Boolean).includes(this.binDirectory());\n }\n\n async loadAlias(): Promise<Result<AgentDevKitErrorCode, CliAliasState | undefined>> {\n const preferences = await this.#preferencesRepository.loadPreferences();\n\n if (preferences.isErr()) {\n return Result.fail(preferences.unwrapError());\n }\n\n return Result.ok(preferences.unwrap().cliAlias);\n }\n\n async removeAlias(): Promise<Result<AgentDevKitErrorCode, void>> {\n const preferences = await this.#preferencesRepository.loadPreferences();\n\n if (preferences.isErr()) {\n return Result.fail(preferences.unwrapError());\n }\n\n const alias = preferences.unwrap().cliAlias;\n\n if (alias !== undefined) {\n await this.#removeManagedShim(alias.shimPath);\n }\n\n const { cliAlias, ...next } = preferences.unwrap();\n void cliAlias;\n\n return this.#preferencesRepository.savePreferences({\n ...next,\n updatedAt: now(),\n });\n }\n\n async saveAlias(\n name: string,\n force = false,\n ): Promise<Result<AgentDevKitErrorCode, CliAliasState>> {\n const validName = this.#validateName(name);\n\n if (validName.isErr()) {\n return Result.fail(validName.unwrapError());\n }\n\n const preferences = await this.#preferencesRepository.loadPreferences();\n\n if (preferences.isErr()) {\n return Result.fail(preferences.unwrapError());\n }\n\n const alias: CliAliasState = {\n binDirectory: this.binDirectory(),\n enabled: true,\n name: validName.unwrap(),\n shimPath: this.#shimPath(validName.unwrap()),\n updatedAt: now(),\n };\n const collision = await this.#hasUnsafeCollision(alias, force);\n\n if (collision.isErr()) {\n return Result.fail(collision.unwrapError());\n }\n\n if (preferences.unwrap().cliAlias?.name !== alias.name) {\n await this.#removeManagedShim(preferences.unwrap().cliAlias?.shimPath);\n }\n\n const write = await this.#writeShim(alias);\n\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n\n const profile = await this.#ensureShellProfilePath();\n\n if (profile.isErr()) {\n return Result.fail(profile.unwrapError());\n }\n\n const save = await this.#preferencesRepository.savePreferences({\n ...preferences.unwrap(),\n cliAlias: alias,\n updatedAt: now(),\n });\n\n return save.isOk() ? Result.ok(alias) : Result.fail(save.unwrapError());\n }\n\n shellCommand(): string {\n return this.activationCommand();\n }\n\n async syncAlias(): Promise<Result<AgentDevKitErrorCode, CliAliasState>> {\n const alias = await this.loadAlias();\n\n if (alias.isErr()) {\n return Result.fail(alias.unwrapError());\n }\n\n const current = alias.unwrap();\n\n if (current === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return this.saveAlias(current.name, true);\n }\n\n async #hasUnsafeCollision(\n alias: CliAliasState,\n force: boolean,\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n if (force) {\n return Result.ok(undefined);\n }\n\n for (const directory of this.#envPath.split(delimiter).filter(Boolean)) {\n const candidate = join(directory, alias.name);\n\n try {\n await access(candidate);\n } catch {\n continue;\n }\n\n if (candidate === alias.shimPath && (await this.#isManagedShim(candidate))) {\n return Result.ok(undefined);\n }\n\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(undefined);\n }\n\n async #isManagedShim(path: string): Promise<boolean> {\n try {\n return (await readFile(path, \"utf8\")).includes(\"agent-devkit managed alias shim\");\n } catch {\n return false;\n }\n }\n\n async #removeManagedShim(path: string | undefined): Promise<void> {\n if (path === undefined || !(await this.#isManagedShim(path))) {\n return;\n }\n\n await rm(path, { force: true });\n }\n\n #shimPath(name: string): string {\n return join(this.binDirectory(), name);\n }\n\n #shellProfilePath(): string {\n const shellName = basename(this.#shell);\n\n if (shellName === \"zsh\") {\n return join(this.#homeDirectory, \".zshrc\");\n }\n\n if (shellName === \"bash\") {\n return join(this.#homeDirectory, \".bashrc\");\n }\n\n return join(this.#homeDirectory, \".profile\");\n }\n\n #validateName(name: string): Result<AgentDevKitErrorCode, string> {\n const parsed = CliAliasNameSchema.safeParse(name);\n\n if (!parsed.success || reservedAliases.has(parsed.data)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(parsed.data);\n }\n\n async #writeShim(alias: CliAliasState): Promise<Result<AgentDevKitErrorCode, void>> {\n const script = [\n \"#!/usr/bin/env sh\",\n \"# agent-devkit managed alias shim\",\n `exec ${this.#agentCommand} \"$@\"`,\n \"\",\n ].join(\"\\n\");\n\n try {\n await mkdir(dirname(alias.shimPath), { recursive: true, mode: 0o700 });\n await writeFile(alias.shimPath, script, \"utf8\");\n await chmod(alias.shimPath, 0o755);\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async #ensureShellProfilePath(): Promise<Result<AgentDevKitErrorCode, void>> {\n const profilePath = this.#shellProfilePath();\n const block = [\n \"\",\n \"# agent-devkit managed PATH\",\n `case \":$PATH:\" in *\":${this.binDirectory()}:\"*) ;; *) export PATH=\"${this.binDirectory()}:$PATH\" ;; esac`,\n \"# /agent-devkit managed PATH\",\n \"\",\n ].join(\"\\n\");\n\n try {\n await mkdir(dirname(profilePath), { recursive: true, mode: 0o700 });\n\n let current = \"\";\n\n try {\n current = await readFile(profilePath, \"utf8\");\n } catch {\n current = \"\";\n }\n\n if (!current.includes(\"# agent-devkit managed PATH\")) {\n await writeFile(profilePath, `${current.trimEnd()}${block}`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n }\n\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { access, copyFile, mkdir, readdir, readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport {\n type CharacterDefinition,\n CharacterDefinitionSchema,\n type CharacterId,\n} from \"../../../../infra/bases/character\";\nimport type { AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../../../infra/data/local_agent_data_store\";\nimport {\n type CharacterListItem,\n type UserPersonalizationState,\n UserPersonalizationStateSchema,\n} from \"./personalization.entities\";\n\nexport type PersonalizationRepositoryOptions = {\n assetsDirectory?: string;\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n};\n\nexport interface PersonalizationRepositoryPort extends CapabilityRepositoryPort {\n charactersDirectory(): string;\n customCharactersDirectory(): string;\n defaultState(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>>;\n importSprite(\n characterId: CharacterId,\n sourcePath: string,\n ): Promise<Result<AgentDevKitErrorCode, string>>;\n loadCharacters(\n selectedCharacterId?: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterListItem[]>>;\n loadPresetCharacter(\n characterId: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition>>;\n loadProfile(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>>;\n profilePath(): string;\n saveCustomCharacter(character: CharacterDefinition): Promise<Result<AgentDevKitErrorCode, void>>;\n saveProfile(profile: UserPersonalizationState): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nfunction defaultAssetsDirectory(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDirectory, \"../../../../assets\"),\n resolve(moduleDirectory, \"../src/assets\"),\n resolve(process.cwd(), \"src/assets\"),\n ];\n\n return (\n candidates.find((candidate) => existsSync(candidate)) ?? resolve(process.cwd(), \"src/assets\")\n );\n}\n\nfunction cloneCharacter(character: CharacterDefinition): CharacterDefinition {\n return {\n ...character,\n i18n: { ...character.i18n },\n profile: {\n ...character.profile,\n traits: [...character.profile.traits],\n },\n };\n}\n\nexport class PersonalizationRepository implements PersonalizationRepositoryPort {\n readonly repositoryId = \"user.personalization.repository\";\n readonly #assetsDirectory: string;\n readonly #dataStore: AgentDataStore;\n readonly #homeDirectory: string;\n\n constructor(options: PersonalizationRepositoryOptions = {}) {\n this.#assetsDirectory = options.assetsDirectory ?? defaultAssetsDirectory();\n this.#homeDirectory = options.homeDirectory ?? homedir();\n this.#dataStore =\n options.dataStore ??\n new LocalAgentDataStore({\n rootDirectory: join(this.#homeDirectory, \".agent-devkit\", \"data\"),\n });\n }\n\n charactersDirectory(): string {\n return join(this.#assetsDirectory, \"characters\");\n }\n\n customCharactersDirectory(): string {\n const resolved = this.#dataStore.resolve({\n namespace: \"personalization\",\n segments: [\"characters\"],\n });\n\n return resolved.isOk()\n ? resolved.unwrap()\n : join(this.#homeDirectory, \".agent-devkit\", \"data\", \"personalization\", \"characters\");\n }\n\n async defaultState(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>> {\n const characters = await this.#loadPresetCharacters();\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n const defaultCharacter =\n characters.unwrap().find((character) => character.default && character.active) ??\n characters.unwrap().find((character) => character.id === \"kit\" && character.active);\n\n if (defaultCharacter === undefined) {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n\n return Result.ok({\n schema: \"agent-devkit.agent-personalization/v2\",\n currentCharacter: cloneCharacter(defaultCharacter),\n selectedPresetId: defaultCharacter.id,\n updatedAt: new Date(0).toISOString(),\n });\n }\n\n async importSprite(\n characterId: CharacterId,\n sourcePath: string,\n ): Promise<Result<AgentDevKitErrorCode, string>> {\n try {\n await access(sourcePath);\n const extension = basename(sourcePath).includes(\".\")\n ? `.${basename(sourcePath).split(\".\").pop() ?? \"sprite\"}`\n : \"\";\n const targetDirectory = join(this.customCharactersDirectory(), characterId);\n const targetPath = join(targetDirectory, `sprite${extension}`);\n\n await mkdir(targetDirectory, { recursive: true });\n await copyFile(sourcePath, targetPath);\n\n return Result.ok(targetPath);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async loadCharacters(\n selectedCharacterId?: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterListItem[]>> {\n const presets = await this.#loadPresetCharacters();\n const custom = await this.#loadCustomCharacters();\n\n if (presets.isErr()) {\n return Result.fail(presets.unwrapError());\n }\n\n if (custom.isErr()) {\n return Result.fail(custom.unwrapError());\n }\n\n const charactersById = new Map<string, CharacterListItem>();\n\n for (const character of presets.unwrap()) {\n charactersById.set(character.id, this.#listItem(character, false, selectedCharacterId));\n }\n\n for (const character of custom.unwrap()) {\n charactersById.set(character.id, this.#listItem(character, true, selectedCharacterId));\n }\n\n return Result.ok([...charactersById.values()]);\n }\n\n async loadPresetCharacter(\n characterId: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition>> {\n const characters = await this.#loadPresetCharacters();\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n const character = characters\n .unwrap()\n .find((candidate) => candidate.id === characterId && candidate.active);\n\n return character === undefined\n ? Result.fail(ErrorCodes.InvalidInput)\n : Result.ok(cloneCharacter(character));\n }\n\n async loadProfile(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>> {\n const path = { namespace: \"personalization\" as const, segments: [\"profile.json\"] };\n const exists = await this.#dataStore.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (exists.unwrap()) {\n const payload = await this.#dataStore.readJson<unknown>(path);\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = UserPersonalizationStateSchema.safeParse(payload.unwrap());\n\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n const legacy = await this.#loadLegacyProfile();\n\n if (legacy.isOk()) {\n await this.saveProfile(legacy.unwrap());\n return legacy;\n }\n\n if (legacy.unwrapError() !== ErrorCodes.FileReadFailed) {\n return Result.fail(legacy.unwrapError());\n }\n\n return this.defaultState();\n }\n\n async #loadLegacyProfile(): Promise<Result<AgentDevKitErrorCode, UserPersonalizationState>> {\n try {\n await access(this.#legacyProfilePath());\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n try {\n const payload = JSON.parse(await readFile(this.#legacyProfilePath(), \"utf8\"));\n const parsed = UserPersonalizationStateSchema.safeParse(payload);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(parsed.data);\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n profilePath(): string {\n const resolved = this.#dataStore.resolve({\n namespace: \"personalization\",\n segments: [\"profile.json\"],\n });\n\n return resolved.isOk()\n ? resolved.unwrap()\n : join(this.#homeDirectory, \".agent-devkit\", \"data\", \"personalization\", \"profile.json\");\n }\n\n async saveCustomCharacter(\n character: CharacterDefinition,\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n try {\n return await this.#dataStore.writeJson(\n { namespace: \"personalization\", segments: [\"characters\", character.id, \"character.json\"] },\n character,\n );\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async saveProfile(\n profile: UserPersonalizationState,\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n try {\n return await this.#dataStore.writeJson(\n { namespace: \"personalization\", segments: [\"profile.json\"] },\n profile,\n );\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async #loadCustomCharacters(): Promise<Result<AgentDevKitErrorCode, CharacterDefinition[]>> {\n const legacy = await this.#loadLegacyCustomCharacters();\n\n if (legacy.isOk()) {\n for (const character of legacy.unwrap()) {\n await this.saveCustomCharacter(character);\n await this.#migrateLegacySprite(character.id);\n }\n } else if (legacy.unwrapError() !== ErrorCodes.FileReadFailed) {\n return Result.fail(legacy.unwrapError());\n }\n\n try {\n await access(this.customCharactersDirectory());\n } catch {\n return Result.ok([]);\n }\n\n return this.#loadCharactersFromDirectory(this.customCharactersDirectory());\n }\n\n async #loadPresetCharacters(): Promise<Result<AgentDevKitErrorCode, CharacterDefinition[]>> {\n return this.#loadCharactersFromDirectory(this.charactersDirectory());\n }\n\n async #loadCharactersFromDirectory(\n directory: string,\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition[]>> {\n try {\n const entries = (await readdir(directory, { withFileTypes: true }))\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort((left, right) => left.localeCompare(right));\n const characters: CharacterDefinition[] = [];\n\n for (const entry of entries) {\n const payload = JSON.parse(\n await readFile(join(directory, entry, \"character.json\"), \"utf8\"),\n );\n const parsed = CharacterDefinitionSchema.safeParse(payload);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n characters.push(parsed.data);\n }\n\n return Result.ok(characters);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n #listItem(\n character: CharacterDefinition,\n custom: boolean,\n selectedCharacterId?: CharacterId,\n ): CharacterListItem {\n const packageSpritePath = this.#findPackageCharacterSprite(character.id);\n const userSpritePath = this.#findUserCharacterSprite(character.id);\n\n return {\n ...cloneCharacter(character),\n custom,\n selected: character.id === selectedCharacterId,\n spritePath:\n userSpritePath !== undefined\n ? userSpritePath\n : packageSpritePath !== undefined\n ? packageSpritePath\n : undefined,\n };\n }\n\n #findPackageCharacterSprite(characterId: CharacterId): string | undefined {\n const directory = join(this.charactersDirectory(), characterId);\n const candidates = [\"sprite.js\", \"sprite.svg\", \"sprite.png\", \"sprite.jpg\", \"sprite.jpeg\"];\n\n return candidates\n .map((candidate) => join(directory, candidate))\n .find((candidate) => existsSync(candidate));\n }\n\n #findUserCharacterSprite(characterId: CharacterId): string | undefined {\n const directory = join(this.customCharactersDirectory(), characterId);\n\n if (!existsSync(directory)) {\n return undefined;\n }\n\n const candidates = [\"sprite.js\", \"sprite.svg\", \"sprite.png\", \"sprite.jpg\", \"sprite.jpeg\"];\n\n return candidates\n .map((candidate) => join(directory, candidate))\n .find((candidate) => existsSync(candidate));\n }\n\n async #loadLegacyCustomCharacters(): Promise<\n Result<AgentDevKitErrorCode, CharacterDefinition[]>\n > {\n try {\n await access(this.#legacyCustomCharactersDirectory());\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return this.#loadCharactersFromDirectory(this.#legacyCustomCharactersDirectory());\n }\n\n async #migrateLegacySprite(characterId: CharacterId): Promise<void> {\n const source = [\"sprite.js\", \"sprite.svg\", \"sprite.png\", \"sprite.jpg\", \"sprite.jpeg\"]\n .map((candidate) => join(this.#legacyCustomCharactersDirectory(), characterId, candidate))\n .find((candidate) => existsSync(candidate));\n\n if (source === undefined) {\n return;\n }\n\n const extension = basename(source).includes(\".\")\n ? `.${basename(source).split(\".\").pop() ?? \"sprite\"}`\n : \"\";\n const target = this.#dataStore.resolve({\n namespace: \"personalization\",\n segments: [\"characters\", characterId, `sprite${extension}`],\n });\n\n if (target.isErr()) {\n return;\n }\n\n await mkdir(dirname(target.unwrap()), { recursive: true });\n await copyFile(source, target.unwrap()).catch(() => undefined);\n }\n\n #legacyCustomCharactersDirectory(): string {\n return join(this.#homeDirectory, \".agent-devkit\", \"characters\");\n }\n\n #legacyProfilePath(): string {\n return join(this.#homeDirectory, \".agent-devkit\", \"personalization.json\");\n }\n}\n","import { randomBytes } from \"node:crypto\";\nimport {\n access,\n appendFile,\n mkdir,\n readdir,\n readFile,\n rename,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, resolve, sep } from \"node:path\";\nimport type {\n AgentDataEntry,\n AgentDataPath,\n AgentDataStore,\n AgentDataWriteOptions,\n} from \"../bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\n\nexport type LocalAgentDataStoreOptions = {\n rootDirectory?: string;\n};\n\nfunction defaultRootDirectory(): string {\n return join(homedir(), \".agent-devkit\", \"data\");\n}\n\nfunction hasPathSeparator(segment: string): boolean {\n return segment.includes(\"/\") || segment.includes(\"\\\\\");\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: unknown }).code === \"ENOENT\"\n );\n}\n\nexport class LocalAgentDataStore implements AgentDataStore {\n readonly #rootDirectory: string;\n\n constructor(options: LocalAgentDataStoreOptions = {}) {\n this.#rootDirectory = resolve(options.rootDirectory ?? defaultRootDirectory());\n }\n\n rootDirectory(): string {\n return this.#rootDirectory;\n }\n\n resolve(path: AgentDataPath): Result<AgentDevKitErrorCode, string> {\n if (\n path.segments.some(\n (segment) =>\n segment.length === 0 ||\n segment === \".\" ||\n segment === \"..\" ||\n isAbsolute(segment) ||\n hasPathSeparator(segment),\n )\n ) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const target = resolve(this.#rootDirectory, path.namespace, ...path.segments);\n const allowedRoot = `${this.#rootDirectory}${sep}`;\n\n if (target !== this.#rootDirectory && !target.startsWith(allowedRoot)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(target);\n }\n\n async readJson<T>(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, T>> {\n const content = await this.readText(path);\n\n if (content.isErr()) {\n return Result.fail(content.unwrapError());\n }\n\n try {\n return Result.ok(JSON.parse(content.unwrap()) as T);\n } catch {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n }\n\n async writeJson<T>(\n path: AgentDataPath,\n value: T,\n options: AgentDataWriteOptions = {},\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n return this.writeText(path, `${JSON.stringify(value, null, 2)}\\n`, options);\n }\n\n async appendJsonl<T>(\n path: AgentDataPath,\n value: T,\n _options: AgentDataWriteOptions = {},\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n await mkdir(dirname(target.unwrap()), { recursive: true });\n await appendFile(target.unwrap(), `${JSON.stringify(value)}\\n`, \"utf8\");\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async readJsonl<T>(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, T[]>> {\n const content = await this.readText(path);\n\n if (content.isErr()) {\n return Result.fail(content.unwrapError());\n }\n\n try {\n return Result.ok(\n content\n .unwrap()\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line) => JSON.parse(line) as T),\n );\n } catch {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n }\n\n async readText(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, string>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n return Result.ok(await readFile(target.unwrap(), \"utf8\"));\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async writeText(\n path: AgentDataPath,\n value: string,\n options: AgentDataWriteOptions = {},\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n return this.#write(path, value, options);\n }\n\n async readBinary(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, Uint8Array>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n return Result.ok(await readFile(target.unwrap()));\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async writeBinary(\n path: AgentDataPath,\n value: Uint8Array,\n options: AgentDataWriteOptions = {},\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n return this.#write(path, value, options);\n }\n\n async list(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, AgentDataEntry[]>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n const entries = await readdir(target.unwrap(), { withFileTypes: true });\n return Result.ok(\n entries\n .map((entry) => ({\n kind: entry.isDirectory() ? (\"directory\" as const) : (\"file\" as const),\n name: entry.name,\n path: { namespace: path.namespace, segments: [...path.segments, entry.name] },\n }))\n .sort((left, right) => left.name.localeCompare(right.name)),\n );\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async remove(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, void>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n await rm(target.unwrap(), { force: true, recursive: true });\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async exists(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, boolean>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n await access(target.unwrap());\n return Result.ok(true);\n } catch (error) {\n return isNotFoundError(error) ? Result.ok(false) : Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async #write(\n path: AgentDataPath,\n value: string | Uint8Array,\n options: AgentDataWriteOptions,\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n const target = this.resolve(path);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n const atomic = options.atomic ?? true;\n\n try {\n await mkdir(dirname(target.unwrap()), { recursive: true });\n\n if (!atomic) {\n await writeFile(target.unwrap(), value);\n return Result.ok(undefined);\n }\n\n const tempPath = join(\n dirname(target.unwrap()),\n `.agent-data-${process.pid}-${randomBytes(6).toString(\"hex\")}.tmp`,\n );\n\n try {\n await writeFile(tempPath, value, { flag: \"wx\" });\n await rename(tempPath, target.unwrap());\n } catch (error) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n throw error;\n }\n\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { access, readdir, readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport type { LanguageDefinition } from \"../../../../infra/bases/i18n\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { type ThemeDefinition, ThemeDefinitionSchema } from \"../../../../infra/bases/theme\";\nimport { LocalAgentDataStore } from \"../../../../infra/data/local_agent_data_store\";\nimport { CliAliasStateSchema } from \"../cliAlias/cliAlias.entities\";\nimport type { UserPreferences } from \"./preferences.entities\";\n\nexport type PreferencesRepositoryOptions = {\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n i18nDirectory?: string;\n themesDirectory?: string;\n};\n\nexport interface PreferencesRepositoryPort extends CapabilityRepositoryPort {\n defaultPreferences(): UserPreferences;\n loadLanguages(): Promise<Result<AgentDevKitErrorCode, LanguageDefinition[]>>;\n loadPreferences(): Promise<Result<AgentDevKitErrorCode, UserPreferences>>;\n loadThemes(): Promise<Result<AgentDevKitErrorCode, ThemeDefinition[]>>;\n preferencesPath(): string;\n savePreferences(preferences: UserPreferences): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nconst defaultLanguage = \"pt-BR\";\nconst defaultLogRetentionDays = 30;\nconst defaultTheme = \"default-purple\";\n\nfunction defaultThemesDirectory(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDirectory, \"../../../../assets/themes\"),\n resolve(moduleDirectory, \"../src/assets/themes\"),\n resolve(process.cwd(), \"src/assets/themes\"),\n ];\n\n return (\n candidates.find((candidate) => existsSync(candidate)) ??\n resolve(process.cwd(), \"src/assets/themes\")\n );\n}\n\nfunction createDefaultPreferences(): UserPreferences {\n return {\n schema: \"agent-devkit.user-preferences/v1\",\n language: defaultLanguage,\n logRetentionDays: defaultLogRetentionDays,\n theme: defaultTheme,\n updatedAt: new Date(0).toISOString(),\n };\n}\n\nexport class PreferencesRepository implements PreferencesRepositoryPort {\n readonly repositoryId = \"user.preferences.repository\";\n readonly #dataStore: AgentDataStore;\n readonly #homeDirectory: string;\n readonly #i18nCatalog: I18nCatalog;\n readonly #themesDirectory: string;\n\n constructor(options: PreferencesRepositoryOptions = {}) {\n this.#homeDirectory = options.homeDirectory ?? homedir();\n this.#dataStore =\n options.dataStore ??\n new LocalAgentDataStore({\n rootDirectory: join(this.#homeDirectory, \".agent-devkit\", \"data\"),\n });\n this.#i18nCatalog = new I18nCatalog({ directory: options.i18nDirectory });\n this.#themesDirectory = options.themesDirectory ?? defaultThemesDirectory();\n }\n\n defaultPreferences(): UserPreferences {\n return createDefaultPreferences();\n }\n\n async loadLanguages(): Promise<Result<AgentDevKitErrorCode, LanguageDefinition[]>> {\n return this.#i18nCatalog.loadLanguages();\n }\n\n async loadPreferences(): Promise<Result<AgentDevKitErrorCode, UserPreferences>> {\n const path = { namespace: \"preferences\" as const, segments: [\"preferences.json\"] };\n const exists = await this.#dataStore.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (exists.unwrap()) {\n const payload = await this.#dataStore.readJson<Partial<UserPreferences>>(path);\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n return this.#normalizePayload(payload.unwrap());\n }\n\n const legacy = await this.#loadLegacyPreferences();\n\n if (legacy.isOk()) {\n await this.savePreferences(legacy.unwrap());\n return legacy;\n }\n\n if (legacy.unwrapError() !== ErrorCodes.FileReadFailed) {\n return Result.fail(legacy.unwrapError());\n }\n\n return Result.ok(this.defaultPreferences());\n }\n\n async #loadLegacyPreferences(): Promise<Result<AgentDevKitErrorCode, UserPreferences>> {\n try {\n await access(this.#legacyPreferencesPath());\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n try {\n const payload = JSON.parse(\n await readFile(this.#legacyPreferencesPath(), \"utf8\"),\n ) as Partial<UserPreferences>;\n return this.#normalizePayload(payload);\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n #normalizePayload(\n payload: Partial<UserPreferences>,\n ): Result<AgentDevKitErrorCode, UserPreferences> {\n if (payload.schema !== \"agent-devkit.user-preferences/v1\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok({\n schema: \"agent-devkit.user-preferences/v1\",\n cliAlias:\n payload.cliAlias === undefined\n ? undefined\n : CliAliasStateSchema.safeParse(payload.cliAlias).success\n ? CliAliasStateSchema.parse(payload.cliAlias)\n : undefined,\n language: payload.language ?? defaultLanguage,\n logRetentionDays: payload.logRetentionDays ?? defaultLogRetentionDays,\n theme: payload.theme ?? defaultTheme,\n updatedAt: payload.updatedAt ?? new Date(0).toISOString(),\n });\n }\n\n async loadThemes(): Promise<Result<AgentDevKitErrorCode, ThemeDefinition[]>> {\n try {\n const files = (await readdir(this.#themesDirectory))\n .filter((file) => file.endsWith(\".json\"))\n .sort((left, right) =>\n left === \"default-purple.json\"\n ? -1\n : right === \"default-purple.json\"\n ? 1\n : left.localeCompare(right),\n );\n const themes: ThemeDefinition[] = [];\n\n for (const file of files) {\n const payload = JSON.parse(await readFile(join(this.#themesDirectory, file), \"utf8\"));\n const parsed = ThemeDefinitionSchema.safeParse(payload);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n themes.push(parsed.data);\n }\n\n return Result.ok(themes);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n preferencesPath(): string {\n const resolved = this.#dataStore.resolve({\n namespace: \"preferences\",\n segments: [\"preferences.json\"],\n });\n\n return resolved.isOk()\n ? resolved.unwrap()\n : join(this.#homeDirectory, \".agent-devkit\", \"data\", \"preferences\", \"preferences.json\");\n }\n\n async savePreferences(preferences: UserPreferences): Promise<Result<AgentDevKitErrorCode, void>> {\n return this.#dataStore.writeJson(\n { namespace: \"preferences\", segments: [\"preferences.json\"] },\n preferences,\n );\n }\n\n #legacyPreferencesPath(): string {\n return join(this.#homeDirectory, \".agent-devkit\", \"preferences.json\");\n }\n}\n","import type { AgentDevKitConfig } from \"./config\";\n\nexport type ModuleTestBinding = {\n include: readonly [string, ...string[]];\n};\n\nexport type AgentDevKitModuleConfig = AgentDevKitConfig & {\n capabilities: readonly string[];\n tests: ModuleTestBinding;\n};\n\nexport function defineModuleConfig<TConfig extends AgentDevKitModuleConfig>(\n config: TConfig,\n): TConfig {\n return config;\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { cliAliasCapabilityConfig } from \"./capabilities/cliAlias/cliAlias.service\";\nimport { personalizationCapabilityConfig } from \"./capabilities/personalization/personalization.service\";\nimport { preferencesCapabilityConfig } from \"./capabilities/preferences/preferences.service\";\n\nexport const userModuleConfig = defineModuleConfig({\n id: \"user\",\n name: \"User\",\n description: \"User-level Agent DevKit preferences and personalization.\",\n capabilities: [\n cliAliasCapabilityConfig.id,\n personalizationCapabilityConfig.id,\n preferencesCapabilityConfig.id,\n ],\n tests: {\n include: [\n \"src/modules/user/user.surface.test.ts\",\n \"src/modules/user/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n CliAliasRepository,\n type CliAliasRepositoryPort,\n} from \"./capabilities/cliAlias/cliAlias.repository\";\nimport { CliAliasService } from \"./capabilities/cliAlias/cliAlias.service\";\nimport {\n PersonalizationRepository,\n type PersonalizationRepositoryPort,\n} from \"./capabilities/personalization/personalization.repository\";\nimport { PersonalizationService } from \"./capabilities/personalization/personalization.service\";\nimport {\n PreferencesRepository,\n type PreferencesRepositoryPort,\n} from \"./capabilities/preferences/preferences.repository\";\nimport { PreferencesService } from \"./capabilities/preferences/preferences.service\";\nimport { userModuleConfig } from \"./user.config\";\n\nexport type UserModuleBindOptions = {\n homeDirectory?: string;\n};\n\nexport type UserModuleCapabilities = {\n cliAlias: CliAliasService;\n personalization: PersonalizationService;\n preferences: PreferencesService;\n};\n\nexport type UserModuleBinding = ModuleBinding<typeof userModuleConfig, UserModuleCapabilities>;\n\ntype UserModuleBinderDependencies = {\n cliAliasRepository: (options: UserModuleBindOptions) => CliAliasRepositoryPort;\n personalizationRepository: (options: UserModuleBindOptions) => PersonalizationRepositoryPort;\n preferencesRepository: (options: UserModuleBindOptions) => PreferencesRepositoryPort;\n};\n\nconst defaultDependencies: UserModuleBinderDependencies = {\n cliAliasRepository: (options) =>\n new CliAliasRepository({\n homeDirectory: options.homeDirectory,\n preferencesRepository: new PreferencesRepository(options),\n }),\n personalizationRepository: (options) => new PersonalizationRepository(options),\n preferencesRepository: (options) => new PreferencesRepository(options),\n};\n\nexport class UserModuleBinder extends ModuleBinder<\n UserModuleBindOptions,\n typeof userModuleConfig,\n UserModuleCapabilities\n> {\n readonly #dependencies: UserModuleBinderDependencies;\n\n constructor(dependencies: UserModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(options: UserModuleBindOptions): Result<AgentDevKitErrorCode, UserModuleBinding> {\n return defineModuleBinding({\n config: userModuleConfig,\n capabilities: {\n cliAlias: new CliAliasService({\n repository: this.#dependencies.cliAliasRepository(options),\n }),\n personalization: new PersonalizationService({\n repository: this.#dependencies.personalizationRepository(options),\n }),\n preferences: new PreferencesService({\n repository: this.#dependencies.preferencesRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createUserModuleBindings(\n options: UserModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, UserModuleBinding> {\n return new UserModuleBinder().bind(options);\n}\n","import type { LogCategorySelection } from \"../../modules/logs/logs.index\";\n\nexport type JsonCommandOptions = {\n json?: boolean;\n};\n\nexport type LogCategoryCommandOptions = {\n all?: boolean;\n technical?: boolean;\n};\n\nexport function wantsJson(options?: JsonCommandOptions, argv: string[] = process.argv): boolean {\n return options?.json === true || argv.includes(\"--json\");\n}\n\nexport function parseNonNegativeInteger(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const parsed = Number.parseInt(value, 10);\n return Number.isInteger(parsed) && parsed >= 0 && String(parsed) === value.trim()\n ? parsed\n : undefined;\n}\n\nexport function parsePositiveInteger(value: string): number {\n const parsed = Number.parseInt(value, 10);\n\n if (!Number.isInteger(parsed) || parsed < 1 || String(parsed) !== value.trim()) {\n throw new Error(`Expected a positive integer, received: ${value}`);\n }\n\n return parsed;\n}\n\nexport function logCategoryFromOptions(\n options: LogCategoryCommandOptions,\n argv: string[] = process.argv,\n): LogCategorySelection | undefined {\n if (options.all === true || argv.includes(\"--all\")) {\n return \"all\";\n }\n\n if (options.technical === true || argv.includes(\"--technical\")) {\n return \"technical\";\n }\n\n return undefined;\n}\n","import { join } from \"node:path\";\nimport {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { DoctorInputSchema, type DoctorReport, DoctorReportSchema } from \"./doctor.entities\";\nimport type { DoctorRepositoryPort } from \"./doctor.repository\";\n\ntype DoctorServiceDependencies = {\n appVersion: string;\n repository: DoctorRepositoryPort;\n};\n\nexport const doctorCapabilityConfig = defineCapabilityConfig({\n id: \"project.doctor\",\n moduleId: \"project\",\n name: \"Doctor\",\n description: \"Inspect the local Agent DevKit environment without changing state.\",\n kind: \"deterministic\",\n risk: \"read-only\",\n} as const);\n\nexport class DoctorService\n extends BaseCapabilityService<typeof doctorCapabilityConfig, DoctorServiceDependencies>\n implements CapabilityExecution<void, DoctorReport>\n{\n readonly inputSchema = DoctorInputSchema;\n readonly outputSchema = DoctorReportSchema;\n readonly #appVersion: string;\n readonly #repository: DoctorRepositoryPort;\n\n constructor(dependencies: DoctorServiceDependencies) {\n super(doctorCapabilityConfig, dependencies);\n this.#appVersion = dependencies.appVersion;\n this.#repository = dependencies.repository;\n }\n\n async execute(): Promise<Result<AgentDevKitErrorCode, DoctorReport>> {\n const homeDirectory = this.#repository.homeDirectory();\n const cwd = this.#repository.cwd();\n const nodeVersion = this.#repository.nodeVersion();\n const platform = this.#repository.platform();\n const stdinIsTTY = this.#repository.stdinIsTTY();\n const stdoutIsTTY = this.#repository.stdoutIsTTY();\n\n for (const result of [homeDirectory, cwd, nodeVersion, platform, stdinIsTTY, stdoutIsTTY]) {\n if (result.isErr()) {\n return Result.fail(result.unwrapError());\n }\n }\n\n const globalStatePath = join(homeDirectory.unwrap(), \".agent-devkit\");\n const projectStatePath = join(cwd.unwrap(), \".agent-devkit\");\n const globalStateExists = await this.#repository.exists(globalStatePath);\n const projectStateExists = await this.#repository.exists(projectStatePath);\n\n if (globalStateExists.isErr()) {\n return Result.fail(globalStateExists.unwrapError());\n }\n\n if (projectStateExists.isErr()) {\n return Result.fail(projectStateExists.unwrapError());\n }\n\n let models: DoctorReport[\"models\"];\n\n if (this.#repository.installedModels !== undefined) {\n const installedModels = await this.#repository.installedModels(homeDirectory.unwrap());\n\n if (installedModels.isErr()) {\n return Result.fail(installedModels.unwrapError());\n }\n\n models = {\n directory: installedModels.unwrap().directory,\n installed: installedModels.unwrap().ids.length,\n ids: installedModels.unwrap().ids,\n };\n }\n\n return Result.ok({\n status: globalStateExists.unwrap() || projectStateExists.unwrap() ? \"ok\" : \"warning\",\n version: this.#appVersion,\n node: {\n version: nodeVersion.unwrap(),\n },\n system: {\n platform: platform.unwrap(),\n cwd: cwd.unwrap(),\n },\n terminal: {\n stdinIsTTY: stdinIsTTY.unwrap(),\n stdoutIsTTY: stdoutIsTTY.unwrap(),\n },\n runtime: {\n globalState: {\n path: globalStatePath,\n exists: globalStateExists.unwrap(),\n },\n projectState: {\n path: projectStatePath,\n exists: projectStateExists.unwrap(),\n },\n },\n models,\n });\n }\n\n invoke(): Promise<Result<AgentDevKitErrorCode, DoctorReport>> {\n return this.execute();\n }\n}\n","import { z } from \"zod\";\n\nexport const DoctorInputSchema = z.object({}).strict();\n\nexport type DoctorStatus = \"ok\" | \"warning\" | \"error\";\n\nexport const DoctorReportSchema = z.object({\n status: z.enum([\"ok\", \"warning\", \"error\"]),\n version: z.string().min(1),\n node: z.object({\n version: z.string().min(1),\n }),\n system: z.object({\n platform: z.string().min(1),\n cwd: z.string().min(1),\n }),\n terminal: z.object({\n stdinIsTTY: z.boolean(),\n stdoutIsTTY: z.boolean(),\n }),\n runtime: z.object({\n globalState: z.object({\n path: z.string().min(1),\n exists: z.boolean(),\n }),\n projectState: z.object({\n path: z.string().min(1),\n exists: z.boolean(),\n }),\n }),\n models: z\n .object({\n directory: z.string().min(1),\n installed: z.number().int().nonnegative(),\n ids: z.array(z.string().min(1)),\n })\n .optional(),\n});\n\nexport type DoctorStatePath = {\n path: string;\n exists: boolean;\n};\n\nexport type DoctorReport = {\n status: DoctorStatus;\n version: string;\n node: {\n version: string;\n };\n system: {\n platform: string;\n cwd: string;\n };\n terminal: {\n stdinIsTTY: boolean;\n stdoutIsTTY: boolean;\n };\n runtime: {\n globalState: DoctorStatePath;\n projectState: DoctorStatePath;\n };\n models?: {\n directory: string;\n installed: number;\n ids: string[];\n };\n};\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { DoctorReport, DoctorStatePath } from \"./doctor.entities\";\n\ntype FormatDoctorTextOptions = {\n color?: boolean;\n translator?: Translator;\n};\n\nconst colors = {\n dim: \"#9D98B8\",\n error: \"#E87A8E\",\n indigo: \"#8B7AE6\",\n ok: \"#5FD0C8\",\n text: \"#E8E6F2\",\n};\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nfunction colorize(value: string, hex: string, enabled: boolean): string {\n if (!enabled) {\n return value;\n }\n\n const [red, green, blue] = [hex.slice(1, 3), hex.slice(3, 5), hex.slice(5, 7)].map((part) =>\n Number.parseInt(part, 16),\n );\n\n return `\\u001b[38;2;${red};${green};${blue}m${value}\\u001b[0m`;\n}\n\nfunction stateStatus(state: DoctorStatePath): string {\n return state.exists ? \"found\" : \"missing\";\n}\n\nfunction statusColor(status: string): string {\n if (status === \"ok\" || status === \"found\") {\n return colors.ok;\n }\n\n if (status === \"missing\") {\n return colors.dim;\n }\n\n return colors.error;\n}\n\nfunction pill(label: string, enabled: boolean): string {\n const value = `[${label}]`;\n return colorize(value, statusColor(label), enabled);\n}\n\nfunction statusText(status: string, label: string, enabled: boolean): string {\n return colorize(label, statusColor(status), enabled);\n}\n\nfunction section(title: string, rows: Array<[string, string]>, enabled: boolean): string[] {\n return [\n colorize(` ${title}`, colors.indigo, enabled),\n ...rows.map(([label, value]) => ` ${label.padEnd(7)} ${value}`),\n ];\n}\n\nexport function formatDoctorText(\n report: DoctorReport,\n options: FormatDoctorTextOptions = {},\n): string {\n const color = options.color === true;\n const translator = options.translator ?? defaultTranslator;\n const t = (key: string, values?: Record<string, string>) => translator.t(key, values);\n const globalStatus = stateStatus(report.runtime.globalState);\n const projectStatus = stateStatus(report.runtime.projectState);\n const globalStatusLabel = t(`doctor.status.${globalStatus}`);\n const projectStatusLabel = t(`doctor.status.${projectStatus}`);\n\n return [\n `${colorize(t(\"doctor.title\"), colors.text, color)} ${colorize(t(\"doctor.subtitle\"), colors.dim, color)}`,\n colorize(t(\"doctor.command\"), colors.indigo, color),\n \"\",\n `${pill(report.status, color)} ${t(\"doctor.health\")}`,\n ...section(\n t(\"doctor.section.runtime\"),\n [\n [t(\"doctor.field.version\"), report.version],\n [t(\"doctor.field.node\"), report.node.version],\n ],\n color,\n ),\n ...section(\n t(\"doctor.section.environment\"),\n [\n [t(\"doctor.field.platform\"), report.system.platform],\n [t(\"doctor.field.cwd\"), report.system.cwd],\n [\n t(\"doctor.field.tty\"),\n `stdin=${String(report.terminal.stdinIsTTY)} stdout=${String(report.terminal.stdoutIsTTY)}`,\n ],\n ],\n color,\n ),\n ...section(\n t(\"doctor.section.state\"),\n [\n [\n t(\"doctor.field.global\"),\n `${statusText(globalStatus, globalStatusLabel, color).padEnd(8)} ${report.runtime.globalState.path}`,\n ],\n [\n t(\"doctor.field.project\"),\n `${statusText(projectStatus, projectStatusLabel, color).padEnd(8)} ${report.runtime.projectState.path}`,\n ],\n ],\n color,\n ),\n \"\",\n t(\"doctor.line.version\", { version: report.version }),\n t(\"doctor.line.globalState\", {\n path: report.runtime.globalState.path,\n status: globalStatusLabel,\n }),\n t(\"doctor.line.projectState\", {\n path: report.runtime.projectState.path,\n status: projectStatusLabel,\n }),\n ...(report.models === undefined\n ? []\n : [t(\"doctor.line.models\", { count: String(report.models.installed) })]),\n ].join(\"\\n\");\n}\n","import { z } from \"zod\";\n\nexport const InitServiceOptionsSchema = z\n .object({\n dryRun: z.boolean(),\n projectRoot: z.string().min(1),\n })\n .strict();\n\nexport type ProjectInitStatus = \"already-initialized\" | \"initialized\" | \"planned\";\n\nexport type ProjectInitFile = {\n content: unknown;\n path: string;\n};\n\nexport type ProjectInitResult = {\n status: ProjectInitStatus;\n version: string;\n project: {\n root: string;\n };\n planned: string[];\n created: string[];\n skipped: string[];\n};\n\nexport const ProjectInitResultSchema = z.object({\n status: z.enum([\"already-initialized\", \"initialized\", \"planned\"]),\n version: z.string().min(1),\n project: z.object({\n root: z.string().min(1),\n }),\n planned: z.array(z.string()),\n created: z.array(z.string()),\n skipped: z.array(z.string()),\n});\n\nexport type InitServiceOptions = z.infer<typeof InitServiceOptionsSchema>;\n","import {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type InitServiceOptions,\n InitServiceOptionsSchema,\n type ProjectInitFile,\n type ProjectInitResult,\n ProjectInitResultSchema,\n} from \"./init.entities\";\nimport type { InitRepositoryPort } from \"./init.repository\";\n\ntype InitServiceDependencies = {\n appVersion: string;\n repository: InitRepositoryPort;\n};\n\nconst projectFiles = [\".agent-devkit/config.json\", \".agent-devkit/agent-devkit.lock\"];\n\nexport const initCapabilityConfig = defineCapabilityConfig({\n id: \"project.init\",\n moduleId: \"project\",\n name: \"Init\",\n description: \"Initialize Agent DevKit project-local state files.\",\n kind: \"deterministic\",\n risk: \"writes-project-state\",\n} as const);\n\nexport class InitService\n extends BaseCapabilityService<typeof initCapabilityConfig, InitServiceDependencies>\n implements CapabilityExecution<InitServiceOptions, ProjectInitResult>\n{\n readonly inputSchema = InitServiceOptionsSchema;\n readonly outputSchema = ProjectInitResultSchema;\n readonly #appVersion: string;\n readonly #repository: InitRepositoryPort;\n\n constructor(dependencies: InitServiceDependencies) {\n super(initCapabilityConfig, dependencies);\n this.#appVersion = dependencies.appVersion;\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: InitServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, ProjectInitResult>> {\n if (options.dryRun) {\n return Result.ok({\n status: \"planned\",\n version: this.#appVersion,\n project: {\n root: options.projectRoot,\n },\n planned: projectFiles,\n created: [],\n skipped: [],\n });\n }\n\n const skipped = await this.#repository.existingFiles(options.projectRoot, projectFiles);\n\n if (skipped.isErr()) {\n return Result.fail(skipped.unwrapError());\n }\n\n const skippedFiles = skipped.unwrap();\n const filesToCreate = this.#files().filter((file) => !skippedFiles.includes(file.path));\n\n if (filesToCreate.length > 0) {\n const write = await this.#repository.writeFiles(options.projectRoot, filesToCreate);\n\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n }\n\n return Result.ok({\n status: filesToCreate.length > 0 ? \"initialized\" : \"already-initialized\",\n version: this.#appVersion,\n project: {\n root: options.projectRoot,\n },\n planned: projectFiles,\n created: filesToCreate.map((file) => file.path),\n skipped: skippedFiles,\n });\n }\n\n #files(): ProjectInitFile[] {\n return [\n {\n path: \".agent-devkit/config.json\",\n content: {\n schema: \"agent-devkit.project-config/v1\",\n version: this.#appVersion,\n },\n },\n {\n path: \".agent-devkit/agent-devkit.lock\",\n content: {\n schema: \"agent-devkit.project-lock/v1\",\n version: this.#appVersion,\n },\n },\n ];\n }\n\n invoke(options: InitServiceOptions): Promise<Result<AgentDevKitErrorCode, ProjectInitResult>> {\n return this.execute(options);\n }\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { ProjectInitResult } from \"./init.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatInitText(result: ProjectInitResult, translator?: Translator): string {\n const activeTranslator = translator ?? defaultTranslator;\n const t = (key: string) => activeTranslator.t(key);\n const rows = [\n t(\"init.title\"),\n t(\"init.command\"),\n \"\",\n `[${result.status}] ${t(\"init.projectState\")}`,\n ` ${t(\"init.field.root\").padEnd(7)} ${result.project.root}`,\n ];\n\n if (result.planned.length > 0) {\n rows.push(` ${t(\"init.section.planned\")}`);\n rows.push(...result.planned.map((file) => ` ${file}`));\n }\n\n if (result.created.length > 0) {\n rows.push(` ${t(\"init.section.created\")}`);\n rows.push(...result.created.map((file) => ` ${file}`));\n }\n\n if (result.skipped.length > 0) {\n rows.push(` ${t(\"init.section.skipped\")}`);\n rows.push(...result.skipped.map((file) => ` ${file}`));\n }\n\n return rows.join(\"\\n\");\n}\n","import { join } from \"node:path\";\nimport {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ResetResult,\n ResetResultSchema,\n type ResetServiceOptions,\n ResetServiceOptionsSchema,\n} from \"./reset.entities\";\nimport type { ResetRepositoryPort } from \"./reset.repository\";\n\ntype ResetServiceDependencies = {\n repository: ResetRepositoryPort;\n};\n\nexport const resetCapabilityConfig = defineCapabilityConfig({\n id: \"project.reset\",\n moduleId: \"project\",\n name: \"Reset\",\n description: \"Remove Agent DevKit state from project or global scope after confirmation.\",\n kind: \"deterministic\",\n risk: \"destructive\",\n} as const);\n\nexport class ResetService\n extends BaseCapabilityService<typeof resetCapabilityConfig, ResetServiceDependencies>\n implements CapabilityExecution<ResetServiceOptions, ResetResult>\n{\n readonly inputSchema = ResetServiceOptionsSchema;\n readonly outputSchema = ResetResultSchema;\n readonly #repository: ResetRepositoryPort;\n\n constructor(dependencies: ResetServiceDependencies) {\n super(resetCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(options: ResetServiceOptions): Promise<Result<AgentDevKitErrorCode, ResetResult>> {\n const shouldPlan = options.dryRun || options.confirmed !== true;\n const path =\n options.scope === \"global\"\n ? join(options.homeDirectory, \".agent-devkit\")\n : join(options.projectRoot, \".agent-devkit\");\n\n const exists = await this.#repository.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n return Result.ok({\n scope: options.scope,\n status: \"missing\",\n path,\n removed: false,\n });\n }\n\n if (shouldPlan) {\n return Result.ok({\n scope: options.scope,\n status: \"planned\",\n path,\n removed: false,\n });\n }\n\n const remove = await this.#repository.remove(path);\n\n if (remove.isErr()) {\n return Result.fail(remove.unwrapError());\n }\n\n return Result.ok({\n scope: options.scope,\n status: \"reset\",\n path,\n removed: true,\n });\n }\n\n invoke(options: ResetServiceOptions): Promise<Result<AgentDevKitErrorCode, ResetResult>> {\n return this.execute(options);\n }\n}\n","import { z } from \"zod\";\n\nexport type ResetScope = \"global\" | \"project\";\nexport type ResetStatus = \"missing\" | \"planned\" | \"reset\";\n\nexport const ResetServiceOptionsSchema = z\n .object({\n confirmed: z.boolean().optional(),\n dryRun: z.boolean(),\n homeDirectory: z.string().min(1),\n projectRoot: z.string().min(1),\n scope: z.enum([\"global\", \"project\"]),\n })\n .strict();\n\nexport type ResetResult = {\n scope: ResetScope;\n status: ResetStatus;\n path: string;\n removed: boolean;\n};\n\nexport const ResetResultSchema = z.object({\n scope: z.enum([\"global\", \"project\"]),\n status: z.enum([\"missing\", \"planned\", \"reset\"]),\n path: z.string().min(1),\n removed: z.boolean(),\n});\n\nexport type ResetServiceOptions = z.infer<typeof ResetServiceOptionsSchema>;\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { ResetResult } from \"./reset.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatResetText(result: ResetResult, translator?: Translator): string {\n const activeTranslator = translator ?? defaultTranslator;\n const t = (key: string, values?: Record<string, string>) => activeTranslator.t(key, values);\n const scope = t(`reset.scope.${result.scope}`);\n\n return [\n t(\"reset.title\"),\n t(\"reset.command\"),\n \"\",\n `[${result.status}] ${t(\"reset.state\", { scope })}`,\n ` ${t(\"reset.field.path\").padEnd(7)} ${result.path}`,\n ` ${t(\"reset.field.removed\").padEnd(7)} ${String(result.removed)}`,\n ].join(\"\\n\");\n}\n","import { access, readdir } from \"node:fs/promises\";\nimport { homedir, platform } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\n\nexport type DoctorInstalledModels = {\n directory: string;\n ids: string[];\n};\n\nexport interface DoctorRepositoryPort extends CapabilityRepositoryPort {\n cwd(): Result<AgentDevKitErrorCode, string>;\n exists(path: string): Promise<Result<AgentDevKitErrorCode, boolean>>;\n homeDirectory(): Result<AgentDevKitErrorCode, string>;\n installedModels?(\n homeDirectory: string,\n ): Promise<Result<AgentDevKitErrorCode, DoctorInstalledModels>>;\n nodeVersion(): Result<AgentDevKitErrorCode, string>;\n platform(): Result<AgentDevKitErrorCode, string>;\n stdinIsTTY(): Result<AgentDevKitErrorCode, boolean>;\n stdoutIsTTY(): Result<AgentDevKitErrorCode, boolean>;\n}\n\nexport class DoctorRepository implements DoctorRepositoryPort {\n readonly repositoryId = \"project.doctor.repository\";\n\n cwd(): Result<AgentDevKitErrorCode, string> {\n return Result.ok(process.cwd());\n }\n\n async exists(path: string): Promise<Result<AgentDevKitErrorCode, boolean>> {\n try {\n await access(path);\n return Result.ok(true);\n } catch {\n return Result.ok(false);\n }\n }\n\n homeDirectory(): Result<AgentDevKitErrorCode, string> {\n return Result.ok(homedir());\n }\n\n async installedModels(\n homeDirectory: string,\n ): Promise<Result<AgentDevKitErrorCode, DoctorInstalledModels>> {\n const directory = join(homeDirectory, \".agent-devkit\", \"models\");\n\n try {\n const files = await readdir(directory);\n return Result.ok({\n directory,\n ids: files\n .filter((file) => file.endsWith(\".gguf\"))\n .map((file) => basename(file, \".gguf\"))\n .sort(),\n });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return Result.ok({ directory, ids: [] });\n }\n\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n nodeVersion(): Result<AgentDevKitErrorCode, string> {\n return Result.ok(process.version);\n }\n\n platform(): Result<AgentDevKitErrorCode, string> {\n return Result.ok(platform());\n }\n\n stdinIsTTY(): Result<AgentDevKitErrorCode, boolean> {\n return Result.ok(process.stdin.isTTY === true);\n }\n\n stdoutIsTTY(): Result<AgentDevKitErrorCode, boolean> {\n return Result.ok(process.stdout.isTTY === true);\n }\n}\n","import { access, mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type { ProjectInitFile } from \"./init.entities\";\n\nexport interface InitRepositoryPort extends CapabilityRepositoryPort {\n existingFiles(\n projectRoot: string,\n files: string[],\n ): Promise<Result<AgentDevKitErrorCode, string[]>>;\n writeFiles(\n projectRoot: string,\n files: ProjectInitFile[],\n ): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nexport class InitRepository implements InitRepositoryPort {\n readonly repositoryId = \"project.init.repository\";\n\n async existingFiles(\n projectRoot: string,\n files: string[],\n ): Promise<Result<AgentDevKitErrorCode, string[]>> {\n try {\n const checks = await Promise.all(\n files.map(async (file) => {\n try {\n await access(join(projectRoot, file));\n return file;\n } catch {\n return undefined;\n }\n }),\n );\n\n return Result.ok(checks.filter((file): file is string => file !== undefined));\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async writeFiles(\n projectRoot: string,\n files: ProjectInitFile[],\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n try {\n for (const file of files) {\n const target = join(projectRoot, file.path);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, `${JSON.stringify(file.content, null, 2)}\\n`, { flag: \"wx\" });\n }\n\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n}\n","import { access, rm } from \"node:fs/promises\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\n\nexport interface ResetRepositoryPort extends CapabilityRepositoryPort {\n exists(path: string): Promise<Result<AgentDevKitErrorCode, boolean>>;\n remove(path: string): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nexport class ResetRepository implements ResetRepositoryPort {\n readonly repositoryId = \"project.reset.repository\";\n\n async exists(path: string): Promise<Result<AgentDevKitErrorCode, boolean>> {\n try {\n await access(path);\n return Result.ok(true);\n } catch {\n return Result.ok(false);\n }\n }\n\n async remove(path: string): Promise<Result<AgentDevKitErrorCode, void>> {\n try {\n await rm(path, { force: true, recursive: true });\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.StateResetFailed);\n }\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { doctorCapabilityConfig } from \"./capabilities/doctor/doctor.service\";\nimport { initCapabilityConfig } from \"./capabilities/init/init.service\";\nimport { resetCapabilityConfig } from \"./capabilities/reset/reset.service\";\n\nexport const projectModuleConfig = defineModuleConfig({\n id: \"project\",\n name: \"Project\",\n description: \"Project-local Agent DevKit state, diagnostics and maintenance.\",\n capabilities: [doctorCapabilityConfig.id, initCapabilityConfig.id, resetCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/project/project.surface.test.ts\",\n \"src/modules/project/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n DoctorRepository,\n type DoctorRepositoryPort,\n} from \"./capabilities/doctor/doctor.repository\";\nimport { DoctorService } from \"./capabilities/doctor/doctor.service\";\nimport { InitRepository, type InitRepositoryPort } from \"./capabilities/init/init.repository\";\nimport { InitService } from \"./capabilities/init/init.service\";\nimport { ResetRepository, type ResetRepositoryPort } from \"./capabilities/reset/reset.repository\";\nimport { ResetService } from \"./capabilities/reset/reset.service\";\nimport { projectModuleConfig } from \"./project.config\";\n\nexport type ProjectModuleBindOptions = {\n appVersion: string;\n};\n\nexport type ProjectModuleCapabilities = {\n doctor: DoctorService;\n init: InitService;\n reset: ResetService;\n};\n\nexport type ProjectModuleBinding = ModuleBinding<\n typeof projectModuleConfig,\n ProjectModuleCapabilities\n>;\n\ntype ProjectModuleBinderDependencies = {\n doctorRepository: () => DoctorRepositoryPort;\n initRepository: () => InitRepositoryPort;\n resetRepository: () => ResetRepositoryPort;\n};\n\nconst defaultDependencies: ProjectModuleBinderDependencies = {\n doctorRepository: () => new DoctorRepository(),\n initRepository: () => new InitRepository(),\n resetRepository: () => new ResetRepository(),\n};\n\nexport class ProjectModuleBinder extends ModuleBinder<\n ProjectModuleBindOptions,\n typeof projectModuleConfig,\n ProjectModuleCapabilities\n> {\n readonly #dependencies: ProjectModuleBinderDependencies;\n\n constructor(dependencies: ProjectModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: ProjectModuleBindOptions,\n ): Result<AgentDevKitErrorCode, ProjectModuleBinding> {\n return defineModuleBinding({\n config: projectModuleConfig,\n capabilities: {\n doctor: new DoctorService({\n appVersion: options.appVersion,\n repository: this.#dependencies.doctorRepository(),\n }),\n init: new InitService({\n appVersion: options.appVersion,\n repository: this.#dependencies.initRepository(),\n }),\n reset: new ResetService({\n repository: this.#dependencies.resetRepository(),\n }),\n },\n });\n }\n}\n\nexport function createProjectModuleBindings(\n options: ProjectModuleBindOptions,\n): Result<AgentDevKitErrorCode, ProjectModuleBinding> {\n return new ProjectModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport { Result as ResultValue } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { doctorCapabilityConfig } from \"./capabilities/doctor/doctor.service\";\nimport { initCapabilityConfig } from \"./capabilities/init/init.service\";\nimport { resetCapabilityConfig } from \"./capabilities/reset/reset.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createProjectSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"project\", moduleDirectory));\n\n return {\n moduleId: \"project\",\n capabilities: async () =>\n ResultValue.ok(\n surfaceCapabilitiesFromConfigs([\n doctorCapabilityConfig,\n initCapabilityConfig,\n resetCapabilityConfig,\n ]),\n ),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n\nexport type ProjectSurfaceResult<T> = Result<AgentDevKitErrorCode, T>;\n","import type { CapabilityConfig } from \"../bases/capability\";\nimport type { SurfaceCapability } from \"../bases/surface\";\n\nexport function surfaceCapabilitiesFromConfigs(\n configs: readonly CapabilityConfig[],\n): SurfaceCapability[] {\n return configs.map((config) => ({\n id: config.id,\n kind: config.kind,\n risk: config.risk,\n summary: config.description,\n title: config.name,\n }));\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\nimport {\n type SurfaceKnowledge,\n SurfaceKnowledgeSchema,\n type SurfaceLoop,\n SurfaceLoopSchema,\n type SurfacePrompt,\n type SurfacePromptInput,\n SurfacePromptSchema,\n type SurfaceSkill,\n SurfaceSkillSchema,\n} from \"../bases/surface\";\n\nexport class SurfaceLoader {\n readonly #surfaceDirectory: string;\n\n constructor(surfaceDirectory: string) {\n this.#surfaceDirectory = surfaceDirectory;\n }\n\n async knowledge(): Promise<Result<AgentDevKitErrorCode, SurfaceKnowledge>> {\n const payload = await this.#readJson(\"knowledge.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = SurfaceKnowledgeSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async loop(): Promise<Result<AgentDevKitErrorCode, SurfaceLoop>> {\n const payload = await this.#readJson(\"loop.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = SurfaceLoopSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async prompt(\n input: SurfacePromptInput = {},\n ): Promise<Result<AgentDevKitErrorCode, SurfacePrompt>> {\n const payload = await this.#readJson(\"prompt.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = SurfacePromptSchema.safeParse(payload.unwrap());\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok({\n ...parsed.data,\n templates: parsed.data.templates\n .filter(\n (template) => input.capabilityId === undefined || template.id === input.capabilityId,\n )\n .map((template) => ({\n ...template,\n template: this.#renderTemplate(template.template, input.variables ?? {}),\n })),\n });\n }\n\n async skill(): Promise<Result<AgentDevKitErrorCode, SurfaceSkill>> {\n const payload = await this.#readJson(\"skill.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = SurfaceSkillSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #readJson(fileName: string): Promise<Result<AgentDevKitErrorCode, unknown>> {\n try {\n return Result.ok(JSON.parse(await readFile(join(this.#surfaceDirectory, fileName), \"utf8\")));\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n #renderTemplate(template: string, variables: Record<string, string>): string {\n return Object.entries(variables).reduce(\n (current, [key, value]) => current.replaceAll(`{{${key}}}`, value),\n template,\n );\n }\n}\n\nexport function resolveModuleSurfaceDirectory(moduleId: string, moduleDirectory: string): string {\n const localSurfaceDirectory = join(moduleDirectory, \"surface\");\n const candidates = [\n localSurfaceDirectory,\n resolve(moduleDirectory, \"../src/modules\", moduleId, \"surface\"),\n resolve(process.cwd(), \"src/modules\", moduleId, \"surface\"),\n ];\n\n return candidates.find((candidate) => existsSync(candidate)) ?? localSurfaceDirectory;\n}\n","import { z } from \"zod\";\nimport type { AgentDevKitErrorCode } from \"./errors\";\nimport type { Result } from \"./result\";\n\nexport const SurfaceCapabilitySchema = z.object({\n id: z.string().min(1),\n kind: z.enum([\"brain-assisted\", \"composite\", \"deterministic\", \"external\"]),\n risk: z.enum([\n \"destructive\",\n \"external-write\",\n \"read-only\",\n \"writes-global-state\",\n \"writes-project-state\",\n ]),\n summary: z.string().min(1),\n title: z.string().min(1),\n});\n\nexport const SurfaceSkillSchema = z.object({\n moduleId: z.string().min(1),\n purpose: z.string().min(1),\n whenNotToUse: z.array(z.string().min(1)).default([]),\n whenToUse: z.array(z.string().min(1)).min(1),\n});\n\nexport const SurfaceKnowledgeSchema = z.object({\n facts: z.array(z.string().min(1)).default([]),\n moduleId: z.string().min(1),\n summary: z.string().min(1),\n});\n\nexport const SurfacePromptSchema = z.object({\n moduleId: z.string().min(1),\n templates: z\n .array(\n z.object({\n id: z.string().min(1),\n template: z.string().min(1),\n variables: z.array(z.string().min(1)).default([]),\n }),\n )\n .min(1),\n});\n\nexport const SurfaceLoopSchema = z.object({\n allowedActions: z.array(z.string().min(1)).default([]),\n approvalRequired: z.boolean(),\n forbiddenActions: z.array(z.string().min(1)).default([]),\n mode: z.string().min(1),\n moduleId: z.string().min(1),\n});\n\nexport const SurfaceCapabilitiesSchema = z.object({\n capabilities: z.array(SurfaceCapabilitySchema).min(1),\n moduleId: z.string().min(1),\n});\n\nexport type SurfaceCapability = z.infer<typeof SurfaceCapabilitySchema>;\nexport type SurfaceSkill = z.infer<typeof SurfaceSkillSchema>;\nexport type SurfaceKnowledge = z.infer<typeof SurfaceKnowledgeSchema>;\nexport type SurfacePrompt = z.infer<typeof SurfacePromptSchema>;\nexport type SurfaceLoop = z.infer<typeof SurfaceLoopSchema>;\n\nexport type SurfacePromptInput = {\n capabilityId?: string;\n variables?: Record<string, string>;\n};\n\nexport interface IModuleSurface {\n moduleId: string;\n capabilities(): Promise<Result<AgentDevKitErrorCode, SurfaceCapability[]>>;\n knowledge(): Promise<Result<AgentDevKitErrorCode, SurfaceKnowledge>>;\n loop(): Promise<Result<AgentDevKitErrorCode, SurfaceLoop>>;\n prompt(input?: SurfacePromptInput): Promise<Result<AgentDevKitErrorCode, SurfacePrompt>>;\n skill(): Promise<Result<AgentDevKitErrorCode, SurfaceSkill>>;\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n createProjectModuleBindings,\n formatDoctorText,\n} from \"../../../modules/project/project.index\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterDoctorCommandOptions = {\n appVersion: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nexport function registerDoctorCommand(\n program: Command,\n options: RegisterDoctorCommandOptions,\n): void {\n const doctorCommand = program\n .command(\"doctor\")\n .description(options.translator.t(\"cli.doctor.description\"))\n .option(\"--json\", options.translator.t(\"cli.doctor.option.json\"));\n\n doctorCommand.action(\n options.usageLogging.track(\n {\n area: \"project\",\n command: \"doctor\",\n createStateIfMissing: false,\n options: () => doctorCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n const bindings = createProjectModuleBindings({\n appVersion: options.appVersion,\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.doctor.execute();\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const report = result.unwrap();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n\n console.log(\n formatDoctorText(report, {\n color: report.terminal.stdoutIsTTY && !process.env.NO_COLOR,\n translator: options.translator,\n }),\n );\n },\n ),\n );\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n createProjectModuleBindings,\n formatInitText,\n} from \"../../../modules/project/project.index\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterInitCommandOptions = {\n appVersion: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nexport function registerInitCommand(program: Command, options: RegisterInitCommandOptions): void {\n const initCommand = program\n .command(\"init\")\n .description(options.translator.t(\"cli.init.description\"))\n .option(\"--dry-run\", options.translator.t(\"cli.init.option.dryRun\"))\n .option(\"--json\", options.translator.t(\"cli.init.option.json\"));\n\n initCommand.action(\n options.usageLogging.track(\n {\n area: \"project\",\n command: \"init\",\n options: () => initCommand.opts(),\n },\n async (commandOptions: { dryRun?: boolean; json?: boolean }) => {\n const bindings = createProjectModuleBindings({\n appVersion: options.appVersion,\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.init.execute({\n dryRun: commandOptions.dryRun === true,\n projectRoot: process.cwd(),\n });\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const initResult = result.unwrap();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(initResult, null, 2));\n return;\n }\n\n console.log(formatInitText(initResult, options.translator));\n },\n ),\n );\n}\n","import type {\n DependencyCheck,\n DependencyMetadata,\n DependencyOperationResult,\n DependencyPlan,\n DependencyProvider,\n} from \"../../../../../infra/bases/dependency\";\nimport type { AgentDevKitErrorCode } from \"../../../../../infra/bases/errors\";\nimport { Result } from \"../../../../../infra/bases/result\";\n\nconst minimumMajorVersion = 20;\n\nfunction nodeMajorVersion(): number {\n return Number.parseInt(process.versions.node.split(\".\")[0] ?? \"0\", 10);\n}\n\nfunction unsupportedPlan(id: string, action: string): DependencyPlan {\n return {\n commands: [],\n id,\n message: `${action} is not supported for Node.js by Agent DevKit yet.`,\n requiresApproval: false,\n status: \"unsupported\",\n };\n}\n\nfunction unsupportedResult(id: string, action: string): DependencyOperationResult {\n return {\n id,\n message: `${action} is not supported for Node.js by Agent DevKit yet.`,\n status: \"unsupported\",\n };\n}\n\nexport class NodeDependencyProvider implements DependencyProvider {\n readonly #id = \"node\";\n\n metadata(): DependencyMetadata {\n return {\n category: \"runtime\",\n description: \"Node.js runtime used by Agent DevKit.\",\n id: this.#id,\n name: \"Node.js\",\n risk: \"read-only\",\n };\n }\n\n async checkEnvironment(): Promise<Result<AgentDevKitErrorCode, DependencyCheck>> {\n return Result.ok({\n details: {\n arch: process.arch,\n platform: process.platform,\n },\n id: this.#id,\n message: `Running on ${process.platform}/${process.arch}.`,\n status: \"ok\",\n });\n }\n\n async checkInstalled(): Promise<Result<AgentDevKitErrorCode, DependencyCheck>> {\n return Result.ok({\n details: {\n execPath: process.execPath,\n version: process.version,\n },\n id: this.#id,\n message: `Node.js ${process.version} is available.`,\n status: \"installed\",\n });\n }\n\n async checkCompatibility(): Promise<Result<AgentDevKitErrorCode, DependencyCheck>> {\n const compatible = nodeMajorVersion() >= minimumMajorVersion;\n\n return Result.ok({\n details: {\n current: process.version,\n required: `>=${minimumMajorVersion}`,\n },\n id: this.#id,\n message: compatible\n ? `Node.js ${process.version} is compatible.`\n : `Node.js ${process.version} is below the required major version ${minimumMajorVersion}.`,\n status: compatible ? \"compatible\" : \"incompatible\",\n });\n }\n\n async verify(): Promise<Result<AgentDevKitErrorCode, DependencyCheck>> {\n const compatibility = await this.checkCompatibility();\n\n if (compatibility.isErr()) {\n return compatibility;\n }\n\n const compatible = compatibility.unwrap();\n\n return Result.ok({\n details: {\n execPath: process.execPath,\n platform: process.platform,\n required: `>=${minimumMajorVersion}`,\n version: process.version,\n },\n id: this.#id,\n message:\n compatible.status === \"compatible\" ? \"Node.js runtime is ready.\" : compatible.message,\n status: compatible.status === \"compatible\" ? \"ok\" : \"incompatible\",\n });\n }\n\n async planInstall(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok(unsupportedPlan(this.#id, \"Install\"));\n }\n\n async install(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok(unsupportedResult(this.#id, \"Install\"));\n }\n\n async planConfigure(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok({\n commands: [],\n id: this.#id,\n message: \"Node.js does not require Agent DevKit credential configuration.\",\n requiresApproval: false,\n status: \"planned\",\n });\n }\n\n async configure(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok({\n id: this.#id,\n message: \"Node.js does not require Agent DevKit credential configuration.\",\n status: \"configured\",\n });\n }\n\n async planUpgrade(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok(unsupportedPlan(this.#id, \"Upgrade\"));\n }\n\n async upgrade(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok(unsupportedResult(this.#id, \"Upgrade\"));\n }\n\n async planDowngrade(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok(unsupportedPlan(this.#id, \"Downgrade\"));\n }\n\n async downgrade(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok(unsupportedResult(this.#id, \"Downgrade\"));\n }\n\n async planUninstall(): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n return Result.ok(unsupportedPlan(this.#id, \"Uninstall\"));\n }\n\n async uninstall(): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n return Result.ok(unsupportedResult(this.#id, \"Uninstall\"));\n }\n}\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type {\n DependencyCheck,\n DependencyMetadata,\n DependencyOperationResult,\n DependencyPlan,\n DependencyProvider,\n DependencyProviderOptions,\n} from \"../../../../infra/bases/dependency\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { NodeDependencyProvider } from \"./providers/node.provider\";\n\nexport interface DependenciesRepositoryPort extends CapabilityRepositoryPort {\n check(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n checkCompatibility(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n checkEnvironment(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n checkInstalled(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n listProviders(): DependencyMetadata[];\n operation(\n dependency: string,\n action: \"configure\" | \"downgrade\" | \"install\" | \"uninstall\" | \"upgrade\",\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>>;\n plan(\n dependency: string,\n action:\n | \"plan-configure\"\n | \"plan-downgrade\"\n | \"plan-install\"\n | \"plan-uninstall\"\n | \"plan-upgrade\",\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyPlan>>;\n verify(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>>;\n}\n\nexport type DependenciesRepositoryOptions = {\n providers?: DependencyProvider[];\n};\n\nconst defaultProviders = [new NodeDependencyProvider()];\n\nasync function collectChecks(\n providers: DependencyProvider[],\n mapper: (provider: DependencyProvider) => Promise<Result<AgentDevKitErrorCode, DependencyCheck>>,\n): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n const checks: DependencyCheck[] = [];\n\n for (const provider of providers) {\n const result = await mapper(provider);\n\n if (result.isErr()) {\n return Result.fail(result.unwrapError());\n }\n\n checks.push(result.unwrap());\n }\n\n return Result.ok(checks);\n}\n\nexport class DependenciesRepository implements DependenciesRepositoryPort {\n readonly repositoryId = \"environment.dependencies.repository\";\n readonly #providers: Map<string, DependencyProvider>;\n\n constructor(options: DependenciesRepositoryOptions = {}) {\n this.#providers = new Map(\n (options.providers ?? defaultProviders).map((provider) => [provider.metadata().id, provider]),\n );\n }\n\n listProviders(): DependencyMetadata[] {\n return [...this.#providers.values()]\n .map((provider) => provider.metadata())\n .sort((left, right) => left.id.localeCompare(right.id));\n }\n\n check(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.verify(options));\n }\n\n checkCompatibility(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.checkCompatibility(options));\n }\n\n checkEnvironment(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.checkEnvironment(options));\n }\n\n checkInstalled(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.checkInstalled(options));\n }\n\n operation(\n dependency: string,\n action: \"configure\" | \"downgrade\" | \"install\" | \"uninstall\" | \"upgrade\",\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyOperationResult>> {\n const provider = this.#provider(dependency);\n\n if (provider.isErr()) {\n return Promise.resolve(Result.fail(provider.unwrapError()));\n }\n\n switch (action) {\n case \"configure\":\n return provider.unwrap().configure(options);\n case \"downgrade\":\n return provider.unwrap().downgrade(options);\n case \"install\":\n return provider.unwrap().install(options);\n case \"uninstall\":\n return provider.unwrap().uninstall(options);\n case \"upgrade\":\n return provider.unwrap().upgrade(options);\n }\n }\n\n plan(\n dependency: string,\n action:\n | \"plan-configure\"\n | \"plan-downgrade\"\n | \"plan-install\"\n | \"plan-uninstall\"\n | \"plan-upgrade\",\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyPlan>> {\n const provider = this.#provider(dependency);\n\n if (provider.isErr()) {\n return Promise.resolve(Result.fail(provider.unwrapError()));\n }\n\n switch (action) {\n case \"plan-configure\":\n return provider.unwrap().planConfigure(options);\n case \"plan-downgrade\":\n return provider.unwrap().planDowngrade(options);\n case \"plan-install\":\n return provider.unwrap().planInstall(options);\n case \"plan-uninstall\":\n return provider.unwrap().planUninstall(options);\n case \"plan-upgrade\":\n return provider.unwrap().planUpgrade(options);\n }\n }\n\n verify(\n dependency: string | undefined,\n options?: DependencyProviderOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n return this.#runChecks(dependency, (provider) => provider.verify(options));\n }\n\n #provider(id: string): Result<AgentDevKitErrorCode, DependencyProvider> {\n const provider = this.#providers.get(id);\n return provider === undefined ? Result.fail(ErrorCodes.InvalidInput) : Result.ok(provider);\n }\n\n #selectedProviders(\n dependency: string | undefined,\n ): Result<AgentDevKitErrorCode, DependencyProvider[]> {\n if (dependency === undefined) {\n return Result.ok([...this.#providers.values()]);\n }\n\n return this.#provider(dependency).map((provider) => [provider]);\n }\n\n async #runChecks(\n dependency: string | undefined,\n mapper: (\n provider: DependencyProvider,\n ) => Promise<Result<AgentDevKitErrorCode, DependencyCheck>>,\n ): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n const providers = this.#selectedProviders(dependency);\n\n if (providers.isErr()) {\n return Result.fail(providers.unwrapError());\n }\n\n return collectChecks(providers.unwrap(), mapper);\n }\n}\n","import { z } from \"zod\";\n\nexport const DependencyActionSchema = z.enum([\n \"check\",\n \"check-compatibility\",\n \"check-environment\",\n \"check-installed\",\n \"configure\",\n \"downgrade\",\n \"install\",\n \"list\",\n \"plan-configure\",\n \"plan-downgrade\",\n \"plan-install\",\n \"plan-uninstall\",\n \"plan-upgrade\",\n \"uninstall\",\n \"upgrade\",\n \"verify\",\n]);\n\nexport const DependencyStatusSchema = z.enum([\n \"compatible\",\n \"configured\",\n \"incompatible\",\n \"installed\",\n \"missing\",\n \"ok\",\n \"planned\",\n \"unsupported\",\n \"warning\",\n]);\n\nexport const DependencyRiskSchema = z.enum([\"read-only\", \"writes-external\", \"writes-global-state\"]);\n\nexport const DependenciesOptionsSchema = z\n .object({\n action: DependencyActionSchema,\n confirmed: z.boolean().optional(),\n dependency: z.string().min(1).optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n version: z.string().min(1).optional(),\n })\n .strict();\n\nexport type DependenciesOptions = z.infer<typeof DependenciesOptionsSchema>;\n\nexport const DependencyMetadataSchema = z.object({\n category: z.string().min(1),\n description: z.string().min(1),\n id: z.string().min(1),\n name: z.string().min(1),\n risk: DependencyRiskSchema,\n});\n\nexport type DependencyMetadataView = z.infer<typeof DependencyMetadataSchema>;\n\nexport const DependencyCheckSchema = z.object({\n details: z.record(z.string(), z.unknown()).optional(),\n id: z.string().min(1),\n message: z.string().min(1),\n status: DependencyStatusSchema,\n});\n\nexport const DependencyCommandPlanSchema = z.object({\n command: z.string().min(1),\n description: z.string().min(1),\n risk: DependencyRiskSchema,\n});\n\nexport const DependencyPlanSchema = z.object({\n commands: z.array(DependencyCommandPlanSchema),\n id: z.string().min(1),\n message: z.string().min(1),\n requiresApproval: z.boolean(),\n status: DependencyStatusSchema,\n});\n\nexport const DependencyOperationResultSchema = z.object({\n id: z.string().min(1),\n message: z.string().min(1),\n status: DependencyStatusSchema,\n});\n\nexport const DependenciesResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n dependencies: z.array(DependencyMetadataSchema),\n status: DependencyStatusSchema,\n }),\n z.object({\n action: z.enum([\n \"check\",\n \"check-compatibility\",\n \"check-environment\",\n \"check-installed\",\n \"verify\",\n ]),\n checks: z.array(DependencyCheckSchema),\n dependency: z.string().min(1).optional(),\n status: DependencyStatusSchema,\n }),\n z.object({\n action: z.enum([\n \"plan-configure\",\n \"plan-downgrade\",\n \"plan-install\",\n \"plan-uninstall\",\n \"plan-upgrade\",\n ]),\n dependency: z.string().min(1),\n plan: DependencyPlanSchema,\n status: DependencyStatusSchema,\n }),\n z.object({\n action: z.enum([\"configure\", \"downgrade\", \"install\", \"uninstall\", \"upgrade\"]),\n dependency: z.string().min(1),\n result: DependencyOperationResultSchema,\n status: DependencyStatusSchema,\n }),\n]);\n\nexport type DependenciesResult = z.infer<typeof DependenciesResultSchema>;\n","import { BaseCapabilityService, defineCapabilityConfig } from \"../../../../infra/bases/capability\";\nimport type { DependencyCheck } from \"../../../../infra/bases/dependency\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type DependenciesOptions,\n DependenciesOptionsSchema,\n type DependenciesResult,\n DependenciesResultSchema,\n} from \"./dependencies.entities\";\nimport type { DependenciesRepositoryPort } from \"./dependencies.repository\";\n\ntype DependenciesServiceDependencies = {\n repository: DependenciesRepositoryPort;\n};\n\nexport const dependenciesCapabilityConfig = defineCapabilityConfig({\n id: \"environment.dependencies\",\n moduleId: \"environment\",\n name: \"Environment Dependencies\",\n description: \"Inspect and plan lifecycle operations for external Agent DevKit dependencies.\",\n kind: \"deterministic\",\n risk: \"read-only\",\n} as const);\n\nfunction aggregateStatus(statuses: string[]): DependenciesResult[\"status\"] {\n if (statuses.includes(\"incompatible\")) {\n return \"incompatible\";\n }\n\n if (statuses.includes(\"missing\")) {\n return \"missing\";\n }\n\n if (statuses.includes(\"unsupported\")) {\n return \"unsupported\";\n }\n\n if (statuses.includes(\"warning\")) {\n return \"warning\";\n }\n\n return \"ok\";\n}\n\nfunction providerOptions(options: DependenciesOptions) {\n return {\n options: options.options,\n version: options.version,\n };\n}\n\nexport class DependenciesService extends BaseCapabilityService<\n typeof dependenciesCapabilityConfig,\n DependenciesServiceDependencies\n> {\n readonly inputSchema = DependenciesOptionsSchema;\n readonly outputSchema = DependenciesResultSchema;\n readonly #repository: DependenciesRepositoryPort;\n\n constructor(dependencies: DependenciesServiceDependencies) {\n super(dependenciesCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: DependenciesOptions,\n ): Promise<Result<AgentDevKitErrorCode, DependenciesResult>> {\n if (options.action === \"list\") {\n return Result.ok({\n action: \"list\",\n dependencies: this.#repository.listProviders(),\n status: \"ok\",\n });\n }\n\n if (\n options.action === \"plan-configure\" ||\n options.action === \"plan-downgrade\" ||\n options.action === \"plan-install\" ||\n options.action === \"plan-uninstall\" ||\n options.action === \"plan-upgrade\"\n ) {\n if (options.dependency === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const plan = await this.#repository.plan(\n options.dependency,\n options.action,\n providerOptions(options),\n );\n\n return plan.isOk()\n ? Result.ok({\n action: options.action,\n dependency: options.dependency,\n plan: plan.unwrap(),\n status: plan.unwrap().status,\n })\n : Result.fail(plan.unwrapError());\n }\n\n if (\n options.action === \"configure\" ||\n options.action === \"downgrade\" ||\n options.action === \"install\" ||\n options.action === \"uninstall\" ||\n options.action === \"upgrade\"\n ) {\n if (options.dependency === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n if (options.confirmed !== true) {\n const planAction = `plan-${options.action}` as\n | \"plan-configure\"\n | \"plan-downgrade\"\n | \"plan-install\"\n | \"plan-uninstall\"\n | \"plan-upgrade\";\n const plan = await this.#repository.plan(\n options.dependency,\n planAction,\n providerOptions(options),\n );\n\n return plan.isOk()\n ? Result.ok({\n action: planAction,\n dependency: options.dependency,\n plan: plan.unwrap(),\n status: plan.unwrap().status,\n })\n : Result.fail(plan.unwrapError());\n }\n\n const operation = await this.#repository.operation(\n options.dependency,\n options.action,\n providerOptions(options),\n );\n\n return operation.isOk()\n ? Result.ok({\n action: options.action,\n dependency: options.dependency,\n result: operation.unwrap(),\n status: operation.unwrap().status,\n })\n : Result.fail(operation.unwrapError());\n }\n\n const checks = await this.#checks(options);\n\n return checks.isOk()\n ? Result.ok({\n action: options.action,\n checks: checks.unwrap(),\n dependency: options.dependency,\n status: aggregateStatus(checks.unwrap().map((check) => check.status)),\n })\n : Result.fail(checks.unwrapError());\n }\n\n invoke(options: DependenciesOptions): Promise<Result<AgentDevKitErrorCode, DependenciesResult>> {\n return this.execute(options);\n }\n\n #checks(options: DependenciesOptions): Promise<Result<AgentDevKitErrorCode, DependencyCheck[]>> {\n switch (options.action) {\n case \"check\":\n return this.#repository.check(options.dependency, providerOptions(options));\n case \"check-compatibility\":\n return this.#repository.checkCompatibility(options.dependency, providerOptions(options));\n case \"check-environment\":\n return this.#repository.checkEnvironment(options.dependency, providerOptions(options));\n case \"check-installed\":\n return this.#repository.checkInstalled(options.dependency, providerOptions(options));\n case \"verify\":\n return this.#repository.verify(options.dependency, providerOptions(options));\n default:\n return Promise.resolve(Result.fail(ErrorCodes.InvalidInput));\n }\n }\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { DependenciesResult } from \"./dependencies.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatDependenciesText(\n result: DependenciesResult,\n translator: Translator = defaultTranslator,\n): string {\n const rows = [\n translator.t(\"dependencies.title\"),\n translator.t(\"dependencies.command\"),\n \"\",\n `[${result.action}] ${result.status}`,\n ];\n\n if (result.action === \"list\") {\n rows.push(\"\", ` ${translator.t(\"dependencies.section.known\")}`);\n rows.push(\n ...result.dependencies.map(\n (dependency) => ` ${dependency.id.padEnd(12)} ${dependency.name}`,\n ),\n );\n return rows.join(\"\\n\");\n }\n\n if (\"checks\" in result) {\n rows.push(\"\", ` ${translator.t(\"dependencies.section.checks\")}`);\n rows.push(\n ...result.checks.map(\n (check) => ` ${check.id.padEnd(12)} ${check.status.padEnd(14)} ${check.message}`,\n ),\n );\n return rows.join(\"\\n\");\n }\n\n if (\"plan\" in result) {\n rows.push(\"\", ` ${translator.t(\"dependencies.section.plan\")}`, ` ${result.plan.message}`);\n rows.push(\n ...result.plan.commands.map((command) => ` ${command.risk.padEnd(18)} ${command.command}`),\n );\n return rows.join(\"\\n\");\n }\n\n rows.push(\"\", ` ${translator.t(\"dependencies.section.result\")}`, ` ${result.result.message}`);\n return rows.join(\"\\n\");\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { dependenciesCapabilityConfig } from \"./capabilities/dependencies/dependencies.service\";\n\nexport const environmentModuleConfig = defineModuleConfig({\n id: \"environment\",\n name: \"Environment\",\n description: \"External dependency discovery, planning and runtime environment checks.\",\n capabilities: [dependenciesCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/environment/environment.surface.test.ts\",\n \"src/modules/environment/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n DependenciesRepository,\n type DependenciesRepositoryPort,\n} from \"./capabilities/dependencies/dependencies.repository\";\nimport { DependenciesService } from \"./capabilities/dependencies/dependencies.service\";\nimport { environmentModuleConfig } from \"./environment.config\";\n\nexport type EnvironmentModuleBindOptions = Record<string, never>;\n\nexport type EnvironmentModuleCapabilities = {\n dependencies: DependenciesService;\n};\n\nexport type EnvironmentModuleBinding = ModuleBinding<\n typeof environmentModuleConfig,\n EnvironmentModuleCapabilities\n>;\n\ntype EnvironmentModuleBinderDependencies = {\n dependenciesRepository: () => DependenciesRepositoryPort;\n};\n\nconst defaultDependencies: EnvironmentModuleBinderDependencies = {\n dependenciesRepository: () => new DependenciesRepository(),\n};\n\nexport class EnvironmentModuleBinder extends ModuleBinder<\n EnvironmentModuleBindOptions,\n typeof environmentModuleConfig,\n EnvironmentModuleCapabilities\n> {\n readonly #dependencies: EnvironmentModuleBinderDependencies;\n\n constructor(dependencies: EnvironmentModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n _options: EnvironmentModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, EnvironmentModuleBinding> {\n return defineModuleBinding({\n config: environmentModuleConfig,\n capabilities: {\n dependencies: new DependenciesService({\n repository: this.#dependencies.dependenciesRepository(),\n }),\n },\n });\n }\n}\n\nexport function createEnvironmentModuleBindings(\n options: EnvironmentModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, EnvironmentModuleBinding> {\n return new EnvironmentModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { dependenciesCapabilityConfig } from \"./capabilities/dependencies/dependencies.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createEnvironmentSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"environment\", moduleDirectory));\n\n return {\n moduleId: \"environment\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([dependenciesCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { homedir } from \"node:os\";\nimport type { ToolRuntime } from \"../../infra/bases/tool_runtime\";\nimport { createBrainDockProvider } from \"../../infra/brain/brain_dock\";\nimport { createCapabilityToolRuntime } from \"../../modules/capability_tool_runtime\";\n\nexport type CliToolRuntimeOptions = {\n currentVersion: string;\n packageName: string;\n};\n\nexport function createCliToolRuntime(options: CliToolRuntimeOptions): ToolRuntime {\n const homeDirectory = homedir();\n const runtime = createCapabilityToolRuntime({\n appVersion: options.currentVersion,\n context: { homeDirectory },\n conversation: {\n brainProvider: createBrainDockProvider({ stateDirectory: `${homeDirectory}/.agent-devkit` }),\n homeDirectory,\n },\n currentVersion: options.currentVersion,\n logs: { homeDirectory },\n packageName: options.packageName,\n secrets: { homeDirectory },\n user: { homeDirectory },\n });\n\n if (runtime.isErr()) {\n throw new Error(runtime.unwrapError());\n }\n\n return runtime.unwrap();\n}\n","import { createHash } from \"node:crypto\";\nimport { once } from \"node:events\";\nimport { createReadStream, createWriteStream } from \"node:fs\";\nimport { access, mkdir, readdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { type InstalledModel, InstalledModelSchema, type ModelCatalogEntry } from \"../bases/model\";\nimport { Result } from \"../bases/result\";\n\nexport type ModelDownloadProgress = {\n downloadedBytes: number;\n totalBytes: number;\n};\n\nexport type ModelStoreOptions = {\n clock?: () => Date;\n downloadTimeoutMs?: number;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nfunction errno(error: unknown): string | undefined {\n return typeof (error as NodeJS.ErrnoException).code === \"string\"\n ? (error as NodeJS.ErrnoException).code\n : undefined;\n}\n\nexport class ModelStore {\n readonly #clock: () => Date;\n readonly #directory: string;\n readonly #downloadTimeoutMs: number;\n\n constructor(options: ModelStoreOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#directory = join(options.stateDirectory ?? defaultStateDirectory(), \"models\");\n this.#downloadTimeoutMs = options.downloadTimeoutMs ?? 10 * 60 * 1000;\n }\n\n directory(): string {\n return this.#directory;\n }\n\n async status(id: string): Promise<Result<AgentDevKitErrorCode, InstalledModel | undefined>> {\n let raw: string;\n\n try {\n raw = await readFile(this.#metadataPath(id), \"utf8\");\n } catch (error) {\n return errno(error) === \"ENOENT\"\n ? Result.ok(undefined)\n : Result.fail(ErrorCodes.FileReadFailed);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return Result.ok(undefined);\n }\n\n const model = InstalledModelSchema.safeParse(parsed);\n\n if (!model.success) {\n return Result.ok(undefined);\n }\n\n try {\n await access(this.#modelPath(id));\n } catch {\n return Result.ok(undefined);\n }\n\n return Result.ok(model.data);\n }\n\n async list(): Promise<Result<AgentDevKitErrorCode, InstalledModel[]>> {\n const ids = await this.installedIds();\n\n if (ids.isErr()) {\n return Result.fail(ids.unwrapError());\n }\n\n const installed: InstalledModel[] = [];\n\n for (const id of ids.unwrap()) {\n const status = await this.status(id);\n const model = status.isOk() ? status.unwrap() : undefined;\n\n if (model !== undefined) {\n installed.push(model);\n }\n }\n\n return Result.ok(installed);\n }\n\n async installedIds(): Promise<Result<AgentDevKitErrorCode, string[]>> {\n let files: string[];\n\n try {\n files = await readdir(this.#directory);\n } catch (error) {\n return errno(error) === \"ENOENT\" ? Result.ok([]) : Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return Result.ok(\n files\n .filter((file) => file.endsWith(\".gguf\"))\n .map((file) => basename(file, \".gguf\"))\n .sort(),\n );\n }\n\n async install(\n entry: ModelCatalogEntry,\n options: { onProgress?: (progress: ModelDownloadProgress) => void } = {},\n ): Promise<Result<AgentDevKitErrorCode, InstalledModel>> {\n const target = this.#modelPath(entry.id);\n const temp = `${target}.part`;\n const hash = createHash(\"sha256\");\n const abortController = new AbortController();\n const timeout = setTimeout(() => abortController.abort(), this.#downloadTimeoutMs);\n\n try {\n await mkdir(this.#directory, { recursive: true, mode: 0o700 });\n\n const response = await fetch(entry.url, { signal: abortController.signal });\n\n if (!response.ok || response.body === null) {\n return Result.fail(ErrorCodes.NetworkRequestFailed);\n }\n\n const writeStream = createWriteStream(temp, { mode: 0o600 });\n const reader = response.body.getReader();\n let downloadedBytes = 0;\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n if (value === undefined) {\n continue;\n }\n\n hash.update(value);\n downloadedBytes += value.byteLength;\n options.onProgress?.({ downloadedBytes, totalBytes: entry.sizeBytes });\n\n if (!writeStream.write(value)) {\n await once(writeStream, \"drain\");\n }\n }\n\n await new Promise<void>((resolve, reject) => {\n writeStream.on(\"error\", reject);\n writeStream.end(() => resolve());\n });\n } finally {\n reader.releaseLock();\n }\n\n const digest = hash.digest(\"hex\");\n\n if (entry.sha256 !== undefined && digest.toLowerCase() !== entry.sha256.toLowerCase()) {\n await rm(temp, { force: true }).catch(() => undefined);\n return Result.fail(ErrorCodes.ModelVerificationFailed);\n }\n\n await rename(temp, target);\n\n const installed: InstalledModel = {\n id: entry.id,\n path: target,\n sizeBytes: downloadedBytes,\n sha256: digest,\n installedAt: this.#clock().toISOString(),\n };\n\n await writeFile(this.#metadataPath(entry.id), `${JSON.stringify(installed, null, 2)}\\n`, {\n mode: 0o600,\n });\n\n return Result.ok(installed);\n } catch (error) {\n await rm(temp, { force: true }).catch(() => undefined);\n return Result.fail(\n errno(error) === undefined ? ErrorCodes.NetworkRequestFailed : ErrorCodes.FileWriteFailed,\n );\n } finally {\n clearTimeout(timeout);\n }\n }\n\n async uninstall(id: string): Promise<Result<AgentDevKitErrorCode, { removed: boolean }>> {\n try {\n let removed = false;\n\n for (const path of [this.#modelPath(id), this.#metadataPath(id)]) {\n try {\n await rm(path);\n removed = true;\n } catch (error) {\n if (errno(error) !== \"ENOENT\") {\n throw error;\n }\n }\n }\n\n for (const role of [undefined, \"agent\", \"chat\"]) {\n const current = await this.#readDefaultFile(this.#defaultPath(role));\n\n if (current.isOk() && current.unwrap() === id) {\n await rm(this.#defaultPath(role), { force: true }).catch(() => undefined);\n }\n }\n\n return Result.ok({ removed });\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async verify(\n id: string,\n expectedSha256?: string,\n ): Promise<Result<AgentDevKitErrorCode, boolean>> {\n const status = await this.status(id);\n\n if (status.isErr()) {\n return Result.fail(status.unwrapError());\n }\n\n const installed = status.unwrap();\n\n if (installed === undefined) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n const expected = (expectedSha256 ?? installed.sha256)?.toLowerCase();\n\n if (expected === undefined) {\n return Result.ok(true);\n }\n\n try {\n const hash = createHash(\"sha256\");\n\n for await (const chunk of createReadStream(this.#modelPath(id))) {\n hash.update(chunk as Buffer);\n }\n\n return Result.ok(hash.digest(\"hex\").toLowerCase() === expected);\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async getDefault(role?: string): Promise<Result<AgentDevKitErrorCode, string | undefined>> {\n const primary = await this.#readDefaultFile(this.#defaultPath(role));\n\n if (primary.isErr() || primary.unwrap() !== undefined || role === undefined) {\n return primary;\n }\n\n return this.#readDefaultFile(this.#defaultPath());\n }\n\n async setDefault(id: string, role?: string): Promise<Result<AgentDevKitErrorCode, void>> {\n const status = await this.status(id);\n\n if (status.isErr()) {\n return Result.fail(status.unwrapError());\n }\n\n if (status.unwrap() === undefined) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n try {\n await mkdir(this.#directory, { recursive: true, mode: 0o700 });\n await writeFile(this.#defaultPath(role), `${id}\\n`, { mode: 0o600 });\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n #modelPath(id: string): string {\n return join(this.#directory, `${id}.gguf`);\n }\n\n #metadataPath(id: string): string {\n return join(this.#directory, `${id}.json`);\n }\n\n #defaultPath(role?: string): string {\n return join(this.#directory, role === undefined ? \"default\" : `default-${role}`);\n }\n\n async #readDefaultFile(path: string): Promise<Result<AgentDevKitErrorCode, string | undefined>> {\n try {\n const id = (await readFile(path, \"utf8\")).trim();\n return Result.ok(id.length > 0 ? id : undefined);\n } catch (error) {\n return errno(error) === \"ENOENT\"\n ? Result.ok(undefined)\n : Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n}\n","import { z } from \"zod\";\n\nconst sha256Pattern = /^[a-f0-9]{64}$/i;\n\nexport const ModelCatalogEntrySchema = z\n .object({\n id: z.string().min(1),\n name: z.string().min(1),\n family: z.string().min(1),\n parameters: z.string().min(1),\n quantization: z.string().min(1),\n format: z.literal(\"gguf\"),\n contextLength: z.number().int().positive(),\n sizeBytes: z.number().int().positive(),\n url: z.string().regex(/^https:\\/\\//),\n sha256: z.string().regex(sha256Pattern),\n license: z.string().min(1),\n recommended: z.boolean().default(false),\n })\n .strict();\n\nexport type ModelCatalogEntry = z.infer<typeof ModelCatalogEntrySchema>;\n\nexport const ModelCatalogSchema = z\n .object({\n schema: z.literal(\"agent-devkit.model-catalog/v1\"),\n models: z.array(ModelCatalogEntrySchema).min(1),\n })\n .strict();\n\nexport type ModelCatalog = z.infer<typeof ModelCatalogSchema>;\n\nexport const InstalledModelSchema = z\n .object({\n id: z.string().min(1),\n path: z.string().min(1),\n sizeBytes: z.number().int().nonnegative(),\n sha256: z.string().min(1).optional(),\n installedAt: z.string().min(1),\n })\n .strict();\n\nexport type InstalledModel = z.infer<typeof InstalledModelSchema>;\n","import type {\n BrainProviderPort,\n BrainRequest,\n BrainResponse,\n BrainStreamHandler,\n BrainStructuredResponse,\n} from \"../bases/brain\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { AgentPrompt } from \"../bases/prompt\";\nimport { Result } from \"../bases/result\";\nimport { ModelStore } from \"../models/model_store\";\n\n// Minimal structural view of the parts of `node-llama-cpp` we depend on. The\n// package is an optional native dependency resolved at runtime, so we describe\n// only the surface we use instead of importing its types.\ntype LlamaContextSequence = unknown;\n\ntype LlamaChatSession = {\n prompt(\n text: string,\n options?: {\n grammar?: unknown;\n maxTokens?: number;\n onTextChunk?: (chunk: string) => void;\n seed?: number;\n temperature?: number;\n topK?: number;\n topP?: number;\n },\n ): Promise<string>;\n};\n\ntype LlamaContext = { getSequence(): LlamaContextSequence };\ntype LlamaModel = { createContext(): Promise<LlamaContext> };\ntype Llama = {\n createGrammarForJsonSchema?(schema: Record<string, unknown>): Promise<unknown>;\n loadModel(options: { modelPath: string }): Promise<LlamaModel>;\n};\n\ntype NodeLlamaCpp = {\n getLlama(): Promise<Llama>;\n LlamaChatSession: new (options: {\n contextSequence: LlamaContextSequence;\n systemPrompt?: string;\n }) => LlamaChatSession;\n};\n\n// Widened to `string` so TypeScript does not try to resolve the optional\n// dependency at build time; it is loaded lazily at runtime.\nconst nodeLlamaModuleName: string = \"node-llama-cpp\";\n\nfunction shouldSuppressNodeLlamaLog(line: string): boolean {\n return line.startsWith(\"[node-llama-cpp]\");\n}\n\nconst defaultLocalGenerationOptions = {\n maxTokens: 512,\n temperature: 0.25,\n topK: 40,\n topP: 0.9,\n} as const;\n\nasync function suppressNodeLlamaLogs<T>(operation: () => Promise<T>): Promise<T> {\n const originalWrite = process.stderr.write;\n let pending = \"\";\n const filteredWrite = ((\n chunk: string | Uint8Array,\n encodingOrCallback?: BufferEncoding | ((error?: Error | null) => void),\n callback?: (error?: Error | null) => void,\n ): boolean => {\n const encoding = typeof encodingOrCallback === \"string\" ? encodingOrCallback : \"utf8\";\n const done = typeof encodingOrCallback === \"function\" ? encodingOrCallback : callback;\n const text =\n typeof chunk === \"string\"\n ? chunk\n : Buffer.isBuffer(chunk)\n ? chunk.toString(encoding)\n : String(chunk);\n const lines = `${pending}${text}`.split(/\\r?\\n/);\n pending = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (!shouldSuppressNodeLlamaLog(line)) {\n originalWrite.call(process.stderr, `${line}\\n`);\n }\n }\n\n done?.();\n return true;\n }) as typeof process.stderr.write;\n\n process.stderr.write = filteredWrite;\n\n try {\n return await operation();\n } finally {\n if (pending.length > 0 && !shouldSuppressNodeLlamaLog(pending)) {\n originalWrite.call(process.stderr, pending);\n }\n\n process.stderr.write = originalWrite;\n }\n}\n\nasync function loadNodeLlama(): Promise<Result<AgentDevKitErrorCode, NodeLlamaCpp>> {\n try {\n return Result.ok((await import(nodeLlamaModuleName)) as NodeLlamaCpp);\n } catch {\n return Result.fail(ErrorCodes.BrainProviderUnavailable);\n }\n}\n\nexport function systemPromptFrom(prompt: AgentPrompt): string {\n const { agent } = prompt;\n const lines = [\n `You are ${agent.name}, the user's configured Agent DevKit personality.`,\n \"You operate inside Agent DevKit, a local AI agent toolkit exposed through the `agent` CLI, TUI and MCP.\",\n \"Answer as the agent. Do not answer as the user, as a generic person, or as a generic chatbot.\",\n `Behavior: ${agent.behavior}. Tone: ${agent.tone}. Detail level: ${agent.detailLevel}.`,\n \"If the user asks personal questions about you, your personality or what you can do, answer from your configured persona and conversation abilities. Do not list generic human activities. Do not describe Agent DevKit internals unless the user explicitly asks about Agent DevKit, tools, commands, MCP, modules or project capabilities.\",\n ];\n\n if (agent.traits.length > 0) {\n lines.push(`Traits: ${agent.traits.join(\", \")}.`);\n }\n\n const { project } = prompt.context;\n\n if (project !== undefined) {\n lines.push(\n `Project: ${project.name}${project.description === undefined ? \"\" : ` — ${project.description}`}.`,\n );\n }\n\n const { session } = prompt.context;\n\n if (session !== undefined) {\n lines.push(\n `Session: ${session.id}. Title: ${session.title}. Messages: ${session.messageCount}.`,\n );\n }\n\n if (prompt.context.knowledge.length > 0) {\n lines.push(\n \"\",\n \"Agent DevKit knowledge:\",\n ...prompt.context.knowledge.map((knowledge) => `- ${knowledge.content}`),\n );\n }\n\n if (prompt.tools.length > 0) {\n lines.push(\n \"\",\n \"Available tools:\",\n ...prompt.tools.map((tool) => `- ${tool.id} (${tool.risk}): ${tool.description}`),\n );\n }\n\n lines.push(\n \"\",\n \"Tool policy:\",\n `- Tool calls allowed: ${prompt.policies.allowToolCalls ? \"yes\" : \"no\"}.`,\n `- Approval required: ${prompt.policies.approvalRequired ? \"yes\" : \"no\"}.`,\n `- Max tool calls: ${prompt.policies.maxToolCalls}.`,\n );\n\n if (!prompt.policies.allowToolCalls) {\n lines.push(\n \"- In this mode, do not claim that you already executed actions. If the user asks for a concrete action, explain that direct tool execution is unavailable in this chat turn.\",\n );\n }\n\n lines.push(`Reply in ${prompt.output.language}.`);\n\n const history = prompt.messages\n .filter((message) => message.role === \"user\" || message.role === \"assistant\")\n .slice(0, -1)\n .map((message) => `${message.role === \"user\" ? \"User\" : agent.name}: ${message.content}`);\n\n if (history.length > 0) {\n lines.push(\"\", \"Conversation so far:\", ...history);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction extractJson(text: string): unknown {\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n\n if (start === -1 || end === -1 || end <= start) {\n return undefined;\n }\n\n try {\n return JSON.parse(text.slice(start, end + 1));\n } catch {\n return undefined;\n }\n}\n\nexport type LocalLlamaBrainProviderOptions = {\n store?: ModelStore;\n stateDirectory?: string;\n};\n\nexport class LocalLlamaBrainProvider implements BrainProviderPort {\n readonly #store: ModelStore;\n readonly #models = new Map<string, LlamaModel>();\n #llama?: Llama;\n #nodeLlama?: NodeLlamaCpp;\n\n constructor(options: LocalLlamaBrainProviderOptions = {}) {\n this.#store = options.store ?? new ModelStore({ stateDirectory: options.stateDirectory });\n }\n\n generate(request: BrainRequest): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n return this.#run(request);\n }\n\n generateStream(\n request: BrainRequest,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n return this.#run(request, { onToken });\n }\n\n async generateStructured(\n request: BrainRequest,\n jsonSchema: Record<string, unknown>,\n ): Promise<Result<AgentDevKitErrorCode, BrainStructuredResponse>> {\n const generated = await this.#run(request, { jsonSchema });\n\n if (generated.isErr()) {\n return Result.fail(generated.unwrapError());\n }\n\n const raw = generated.unwrap().text;\n let json: unknown;\n\n try {\n json = JSON.parse(raw);\n } catch {\n json = extractJson(raw);\n }\n\n return Result.ok({ json, raw });\n }\n\n async #run(\n request: BrainRequest,\n options: { jsonSchema?: Record<string, unknown>; onToken?: BrainStreamHandler } = {},\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n const model = await this.#resolveModelPath(request.options.model, request.options.role);\n\n if (model.isErr()) {\n return Result.fail(model.unwrapError());\n }\n\n const nodeLlama = await this.#ensureNodeLlama();\n\n if (nodeLlama.isErr()) {\n return Result.fail(nodeLlama.unwrapError());\n }\n\n try {\n return await suppressNodeLlamaLogs(async () => {\n const llama = nodeLlama.unwrap();\n const loadedModel = await this.#loadModel(llama, model.unwrap().path);\n const context = await loadedModel.createContext();\n const session = new llama.LlamaChatSession({\n contextSequence: context.getSequence(),\n systemPrompt: systemPromptFrom(request.prompt),\n });\n\n const text = await session.prompt(request.prompt.task.userMessage, {\n grammar: await this.#grammarFor(options.jsonSchema),\n maxTokens: request.options.maxOutputTokens ?? defaultLocalGenerationOptions.maxTokens,\n onTextChunk: options.onToken,\n seed: request.options.seed,\n temperature: request.options.temperature ?? defaultLocalGenerationOptions.temperature,\n topK: request.options.topK ?? defaultLocalGenerationOptions.topK,\n topP: request.options.topP ?? defaultLocalGenerationOptions.topP,\n });\n\n const outputTokens = text.split(/\\s+/g).filter(Boolean).length;\n\n return Result.ok({\n finishReason: \"stop\",\n model: model.unwrap().id,\n provider: \"local\",\n schema: \"agent-devkit.brain-response/v1\",\n text,\n usage: { outputTokens },\n });\n });\n } catch {\n return Result.fail(ErrorCodes.BrainProviderUnavailable);\n }\n }\n\n // Best-effort JSON-schema grammar for constrained decoding. Falls back to\n // free-form output (and prompt-based JSON extraction) if the installed\n // node-llama-cpp version does not expose grammar creation.\n async #grammarFor(jsonSchema?: Record<string, unknown>): Promise<unknown> {\n if (jsonSchema === undefined || this.#llama?.createGrammarForJsonSchema === undefined) {\n return undefined;\n }\n\n try {\n return await this.#llama.createGrammarForJsonSchema(jsonSchema);\n } catch {\n return undefined;\n }\n }\n\n async #resolveModelPath(\n requestedModel: string | undefined,\n role: string | undefined,\n ): Promise<Result<AgentDevKitErrorCode, { id: string; path: string }>> {\n let modelId = requestedModel;\n\n if (modelId === undefined) {\n const defaultId = await this.#store.getDefault(role);\n modelId = defaultId.isOk() ? defaultId.unwrap() : undefined;\n }\n\n if (modelId === undefined) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n const status = await this.#store.status(modelId);\n\n if (status.isErr()) {\n return Result.fail(status.unwrapError());\n }\n\n const installed = status.unwrap();\n\n if (installed === undefined) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n return Result.ok({ id: modelId, path: installed.path });\n }\n\n async #ensureNodeLlama(): Promise<Result<AgentDevKitErrorCode, NodeLlamaCpp>> {\n if (this.#nodeLlama !== undefined) {\n return Result.ok(this.#nodeLlama);\n }\n\n const loaded = await loadNodeLlama();\n\n if (loaded.isOk()) {\n this.#nodeLlama = loaded.unwrap();\n }\n\n return loaded;\n }\n\n async #loadModel(llama: NodeLlamaCpp, modelPath: string): Promise<LlamaModel> {\n const cached = this.#models.get(modelPath);\n\n if (cached !== undefined) {\n return cached;\n }\n\n if (this.#llama === undefined) {\n this.#llama = await llama.getLlama();\n }\n\n const model = await this.#llama.loadModel({ modelPath });\n this.#models.set(modelPath, model);\n return model;\n }\n}\n","import type {\n BrainProviderPort,\n BrainRequest,\n BrainResponse,\n BrainStreamHandler,\n BrainStructuredResponse,\n} from \"../bases/brain\";\nimport type { AgentDevKitErrorCode } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\n\nfunction reply(request: BrainRequest): BrainResponse {\n const text = `${request.prompt.agent.name}: Entendi. Vou responder no contexto da sessão atual: \"${request.prompt.task.userMessage}\".`;\n const inputTokens = request.prompt.messages\n .map((message) => message.content.split(/\\s+/g).filter(Boolean).length)\n .reduce((total, count) => total + count, 0);\n const outputTokens = text.split(/\\s+/g).filter(Boolean).length;\n\n return {\n finishReason: \"stop\",\n model: request.options.model ?? \"mock-chat\",\n provider: \"mock\",\n schema: \"agent-devkit.brain-response/v1\",\n text,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n },\n };\n}\n\nexport class MockBrainProvider implements BrainProviderPort {\n async generate(request: BrainRequest): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n return Result.ok(reply(request));\n }\n\n async generateStream(\n request: BrainRequest,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n const response = reply(request);\n onToken(response.text);\n return Result.ok(response);\n }\n\n async generateStructured(\n request: BrainRequest,\n _jsonSchema: Record<string, unknown>,\n ): Promise<Result<AgentDevKitErrorCode, BrainStructuredResponse>> {\n const raw = JSON.stringify({ action: \"final\", reply: reply(request).text });\n return Result.ok({ json: JSON.parse(raw), raw });\n }\n}\n","import type {\n BrainProviderPort,\n BrainRequest,\n BrainResponse,\n BrainStreamHandler,\n BrainStructuredResponse,\n} from \"../bases/brain\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\nimport { LocalLlamaBrainProvider } from \"./local_llama_provider\";\nimport { MockBrainProvider } from \"./mock_provider\";\n\nexport type BrainDockOptions = {\n stateDirectory?: string;\n};\n\ntype ProviderFactory = () => BrainProviderPort;\n\nconst defaultProvider = \"local\";\nconst fallbackProvider = \"mock\";\n\nfunction shouldFallback(error: AgentDevKitErrorCode): boolean {\n return error === ErrorCodes.BrainProviderUnavailable || error === ErrorCodes.ModelNotFound;\n}\n\n/**\n * The \"dock\": a `BrainProviderPort` that routes each request to a concrete\n * provider by `request.options.provider` (local, mock, and hosted providers\n * later). Streaming is forwarded when the resolved provider supports it, and\n * degrades to a single chunk otherwise.\n */\nexport class BrainDockProvider implements BrainProviderPort {\n readonly #factories: Map<string, ProviderFactory>;\n readonly #instances = new Map<string, BrainProviderPort>();\n\n constructor(options: BrainDockOptions = {}) {\n this.#factories = new Map<string, ProviderFactory>([\n [\"local\", () => new LocalLlamaBrainProvider({ stateDirectory: options.stateDirectory })],\n [\"mock\", () => new MockBrainProvider()],\n ]);\n }\n\n async generate(request: BrainRequest): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n const provider = this.#resolve(request);\n const response = await provider.generate(request);\n\n if (\n response.isOk() ||\n request.options.provider === fallbackProvider ||\n !shouldFallback(response.unwrapError())\n ) {\n return response;\n }\n\n return this.#resolveById(fallbackProvider).generate({\n ...request,\n options: { ...request.options, provider: fallbackProvider },\n });\n }\n\n async generateStream(\n request: BrainRequest,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>> {\n const provider = this.#resolve(request);\n\n if (provider.generateStream !== undefined) {\n const response = await provider.generateStream(request, onToken);\n\n if (\n response.isOk() ||\n request.options.provider === fallbackProvider ||\n !shouldFallback(response.unwrapError())\n ) {\n return response;\n }\n\n return (\n this.#resolveById(fallbackProvider).generateStream?.(\n {\n ...request,\n options: { ...request.options, provider: fallbackProvider },\n },\n onToken,\n ) ??\n this.#resolveById(fallbackProvider).generate({\n ...request,\n options: { ...request.options, provider: fallbackProvider },\n })\n );\n }\n\n const response = await provider.generate(request);\n\n if (response.isOk()) {\n onToken(response.unwrap().text);\n }\n\n return response;\n }\n\n async generateStructured(\n request: BrainRequest,\n jsonSchema: Record<string, unknown>,\n ): Promise<Result<AgentDevKitErrorCode, BrainStructuredResponse>> {\n const provider = this.#resolve(request);\n\n if (provider.generateStructured !== undefined) {\n const response = await provider.generateStructured(request, jsonSchema);\n\n if (\n response.isOk() ||\n request.options.provider === fallbackProvider ||\n !shouldFallback(response.unwrapError())\n ) {\n return response;\n }\n\n return (\n this.#resolveById(fallbackProvider).generateStructured?.(\n {\n ...request,\n options: { ...request.options, provider: fallbackProvider },\n },\n jsonSchema,\n ) ?? Result.fail(ErrorCodes.BrainProviderUnavailable)\n );\n }\n\n return Result.fail(ErrorCodes.BrainProviderUnavailable);\n }\n\n #resolve(request: BrainRequest): BrainProviderPort {\n const id = request.options.provider ?? defaultProvider;\n return this.#resolveById(id);\n }\n\n #resolveById(id: string): BrainProviderPort {\n const cached = this.#instances.get(id);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const factory = this.#factories.get(id) ?? this.#factories.get(defaultProvider);\n const provider = factory === undefined ? new MockBrainProvider() : factory();\n this.#instances.set(id, provider);\n return provider;\n }\n}\n\nexport function createBrainDockProvider(options: BrainDockOptions = {}): BrainProviderPort {\n return new BrainDockProvider(options);\n}\n","import { z } from \"zod\";\nimport type {\n CapabilityApproval,\n CapabilityEffect,\n CapabilityInvocationAudit,\n CapabilityInvocationContext,\n CapabilityInvocationFailure,\n CapabilityInvocationResult,\n InvokableCapabilityDescriptor,\n InvokableCapabilityService,\n} from \"../bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\n\nexport type CapabilityRegistryOptions = {\n capabilities: InvokableCapabilityService[];\n clock?: () => Date;\n};\n\nfunction effectsFor(capability: InvokableCapabilityService): CapabilityEffect[] {\n switch (capability.capability.risk) {\n case \"destructive\":\n return [{ operation: \"delete\", scope: \"project-or-global\" }];\n case \"external-write\":\n return [{ operation: \"external-write\", scope: \"external\" }];\n case \"read-only\":\n return [{ operation: \"read\", scope: \"none\" }];\n case \"writes-global-state\":\n return [{ operation: \"write\", scope: \"global\" }];\n case \"writes-project-state\":\n return [{ operation: \"write\", scope: \"project\" }];\n }\n}\n\nfunction approvalFor(capability: InvokableCapabilityService): CapabilityApproval {\n switch (capability.capability.risk) {\n case \"destructive\":\n return {\n reason: \"Capability can remove state and requires explicit approval.\",\n required: true,\n };\n case \"external-write\":\n return {\n reason: \"Capability writes to an external system.\",\n required: true,\n };\n case \"read-only\":\n return {\n reason: \"Capability is read-only.\",\n required: false,\n };\n case \"writes-global-state\":\n return {\n reason: \"Capability writes global state.\",\n required: true,\n };\n case \"writes-project-state\":\n return {\n reason: \"Capability writes project state.\",\n required: true,\n };\n }\n}\n\nfunction audit(startedAt: Date, endedAt: Date): CapabilityInvocationAudit {\n return {\n durationMs: Math.max(0, endedAt.getTime() - startedAt.getTime()),\n endedAt: endedAt.toISOString(),\n startedAt: startedAt.toISOString(),\n };\n}\n\nfunction failure(\n capabilityId: string,\n auditPayload: CapabilityInvocationAudit,\n code: CapabilityInvocationFailure[\"error\"][\"code\"],\n message: string,\n hint?: string,\n): CapabilityInvocationFailure {\n return {\n audit: auditPayload,\n capabilityId,\n error: {\n code,\n hint,\n message,\n recoverable:\n code === ErrorCodes.InvalidInput ||\n code === ErrorCodes.CapabilityNotFound ||\n code === ErrorCodes.ApprovalRequired,\n },\n ok: false,\n };\n}\n\nexport class CapabilityRegistry {\n readonly #capabilities: Map<string, InvokableCapabilityService>;\n readonly #clock: () => Date;\n\n constructor(options: CapabilityRegistryOptions) {\n this.#clock = options.clock ?? (() => new Date());\n this.#capabilities = new Map(\n options.capabilities.map((capability) => [capability.capability.id, capability]),\n );\n }\n\n describe(id: string): Result<AgentDevKitErrorCode, InvokableCapabilityDescriptor> {\n const capability = this.#capabilities.get(id);\n\n if (capability === undefined) {\n return Result.fail(ErrorCodes.CapabilityNotFound);\n }\n\n return Result.ok(this.#descriptor(capability));\n }\n\n list(): InvokableCapabilityDescriptor[] {\n return [...this.#capabilities.values()]\n .map((capability) => this.#descriptor(capability))\n .sort((left, right) => left.id.localeCompare(right.id));\n }\n\n async invoke(\n capabilityId: string,\n input: unknown,\n context: CapabilityInvocationContext,\n ): Promise<CapabilityInvocationResult> {\n const startedAt = this.#clock();\n const capability = this.#capabilities.get(capabilityId);\n\n if (capability === undefined) {\n const endedAt = this.#clock();\n return failure(\n capabilityId,\n audit(startedAt, endedAt),\n ErrorCodes.CapabilityNotFound,\n `Capability ${capabilityId} was not found.`,\n );\n }\n\n const parsed = capability.inputSchema.safeParse(input);\n\n if (!parsed.success) {\n const endedAt = this.#clock();\n return failure(\n capabilityId,\n audit(startedAt, endedAt),\n ErrorCodes.InvalidInput,\n \"Capability input did not match the declared schema.\",\n z.prettifyError(parsed.error),\n );\n }\n\n const approval = capability.approvalForInput?.(parsed.data, context) ?? approvalFor(capability);\n\n if (approval.required && context.approved !== true) {\n const endedAt = this.#clock();\n return failure(\n capabilityId,\n audit(startedAt, endedAt),\n ErrorCodes.ApprovalRequired,\n `Capability ${capabilityId} requires explicit approval.`,\n approval.reason,\n );\n }\n\n const result = await capability.invoke(parsed.data, context);\n const endedAt = this.#clock();\n const auditPayload = audit(startedAt, endedAt);\n\n if (result.isErr()) {\n return failure(\n capabilityId,\n auditPayload,\n result.unwrapError(),\n `Capability ${capabilityId} failed.`,\n );\n }\n\n const output = capability.outputSchema.safeParse(result.unwrap());\n\n if (!output.success) {\n return failure(\n capabilityId,\n auditPayload,\n ErrorCodes.CapabilityExecutionFailed,\n \"Capability output did not match the declared schema.\",\n z.prettifyError(output.error),\n );\n }\n\n return {\n audit: auditPayload,\n capabilityId,\n data: output.data,\n effects: capability.effectsForInput?.(parsed.data, context) ?? effectsFor(capability),\n ok: true,\n };\n }\n\n #descriptor(capability: InvokableCapabilityService): InvokableCapabilityDescriptor {\n return {\n ...capability.capability,\n approval: approvalFor(capability),\n inputSchema: z.toJSONSchema(capability.inputSchema) as Record<string, unknown>,\n outputSchema: z.toJSONSchema(capability.outputSchema) as Record<string, unknown>,\n };\n }\n}\n\nexport function createCapabilityRegistry(\n options: CapabilityRegistryOptions,\n): Result<AgentDevKitErrorCode, CapabilityRegistry> {\n const seen = new Set<string>();\n\n for (const capability of options.capabilities) {\n if (seen.has(capability.capability.id)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n seen.add(capability.capability.id);\n }\n\n return Result.ok(new CapabilityRegistry(options));\n}\n","import { z } from \"zod\";\n\nexport const ContextProjectStatusSchema = z.enum([\"active\", \"archived\", \"deleted\"]);\nexport type ContextProjectStatus = z.infer<typeof ContextProjectStatusSchema>;\n\nexport const ContextProjectSchema = z.object({\n schema: z.literal(\"agent-devkit.context-project/v1\"),\n createdAt: z.string().datetime(),\n description: z.string().max(2000).optional(),\n id: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).default({}),\n name: z.string().min(1).max(160),\n path: z.string().min(1).optional(),\n status: ContextProjectStatusSchema,\n tags: z.array(z.string().min(1).max(80)).default([]),\n updatedAt: z.string().datetime(),\n});\n\nexport type ContextProject = z.infer<typeof ContextProjectSchema>;\n\nexport const ContextProjectIndexSchema = z.object({\n schema: z.literal(\"agent-devkit.context-project-index/v1\"),\n description: z.string().optional(),\n id: z.string().min(1),\n name: z.string().min(1),\n path: z.string().optional(),\n status: ContextProjectStatusSchema,\n tags: z.array(z.string()).default([]),\n updatedAt: z.string().datetime(),\n});\n\nexport type ContextProjectIndex = z.infer<typeof ContextProjectIndexSchema>;\n\nexport const ContextProjectsOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"list\"),\n query: z.string().min(1).optional(),\n status: z.enum([\"active\", \"archived\", \"deleted\", \"all\"]).optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"create\"),\n description: z.string().max(2000).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n name: z.string().min(1).max(160),\n path: z.string().min(1).optional(),\n tags: z.array(z.string().min(1).max(80)).optional(),\n })\n .strict(),\n z.object({ action: z.literal(\"show\"), projectId: z.string().min(1) }).strict(),\n z\n .object({\n action: z.literal(\"update\"),\n description: z.string().max(2000).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n name: z.string().min(1).max(160).optional(),\n path: z.string().min(1).optional(),\n projectId: z.string().min(1),\n tags: z.array(z.string().min(1).max(80)).optional(),\n })\n .strict(),\n z.object({ action: z.literal(\"archive\"), projectId: z.string().min(1) }).strict(),\n z\n .object({\n action: z.literal(\"delete\"),\n hard: z.boolean().optional(),\n projectId: z.string().min(1),\n })\n .strict(),\n]);\n\nexport type ContextProjectsOptions = z.infer<typeof ContextProjectsOptionsSchema>;\n\nexport type ContextProjectsListResult = {\n action: \"list\";\n projects: ContextProject[];\n};\n\nexport type ContextProjectResult = {\n action: \"archive\" | \"create\" | \"show\" | \"update\";\n project: ContextProject;\n};\n\nexport type ContextProjectDeleteResult = {\n action: \"delete\";\n hard: boolean;\n projectId: string;\n removed: boolean;\n};\n\nexport type ContextProjectsResult =\n | ContextProjectDeleteResult\n | ContextProjectResult\n | ContextProjectsListResult;\n\nexport const ContextProjectsResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n projects: z.array(ContextProjectSchema),\n }),\n z.object({\n action: z.literal(\"create\"),\n project: ContextProjectSchema,\n }),\n z.object({\n action: z.literal(\"show\"),\n project: ContextProjectSchema,\n }),\n z.object({\n action: z.literal(\"update\"),\n project: ContextProjectSchema,\n }),\n z.object({\n action: z.literal(\"archive\"),\n project: ContextProjectSchema,\n }),\n z.object({\n action: z.literal(\"delete\"),\n hard: z.boolean(),\n projectId: z.string().min(1),\n removed: z.boolean(),\n }),\n]);\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDataPath, AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../../../infra/data\";\nimport {\n type ContextProject,\n ContextProjectIndexSchema,\n ContextProjectSchema,\n type ContextProjectStatus,\n} from \"./projects.entities\";\n\nexport type ContextProjectsRepositoryOptions = {\n clock?: () => Date;\n dataStore?: AgentDataStore;\n};\n\nexport type CreateContextProjectInput = {\n description?: string;\n metadata?: Record<string, unknown>;\n name: string;\n path?: string;\n tags?: string[];\n};\n\nexport type ListContextProjectsInput = {\n query?: string;\n status?: ContextProjectStatus | \"all\";\n};\n\nexport type UpdateContextProjectInput = {\n description?: string;\n metadata?: Record<string, unknown>;\n name?: string;\n path?: string;\n projectId: string;\n tags?: string[];\n};\n\nexport interface ContextProjectsRepositoryPort extends CapabilityRepositoryPort {\n archive(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>>;\n create(input: CreateContextProjectInput): Promise<Result<AgentDevKitErrorCode, ContextProject>>;\n delete(projectId: string, hard?: boolean): Promise<Result<AgentDevKitErrorCode, boolean>>;\n list(input?: ListContextProjectsInput): Promise<Result<AgentDevKitErrorCode, ContextProject[]>>;\n show(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>>;\n update(input: UpdateContextProjectInput): Promise<Result<AgentDevKitErrorCode, ContextProject>>;\n}\n\nconst knowledgeBase = `# Project Knowledge Base\n\nThis file stores durable project knowledge promoted from sessions or written manually.\n`;\n\nfunction slugify(value: string): string {\n const slug = value\n .trim()\n .toLowerCase()\n .normalize(\"NFD\")\n .replaceAll(/[\\u0300-\\u036f]/g, \"\")\n .replaceAll(/[^a-z0-9]+/g, \"_\")\n .replaceAll(/^_+|_+$/g, \"\");\n\n return slug.length > 0 ? slug : \"project\";\n}\n\nfunction includesQuery(project: ContextProject, query: string): boolean {\n const normalized = query.trim().toLowerCase();\n const haystack = [\n project.name,\n project.path,\n project.description,\n project.status,\n ...project.tags,\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n\n return haystack.includes(normalized);\n}\n\nexport class ContextProjectsRepository implements ContextProjectsRepositoryPort {\n readonly repositoryId = \"context.projects.repository\";\n readonly #clock: () => Date;\n readonly #dataStore: AgentDataStore;\n\n constructor(options: ContextProjectsRepositoryOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#dataStore = options.dataStore ?? new LocalAgentDataStore();\n }\n\n async archive(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n return this.#setStatus(projectId, \"archived\");\n }\n\n async create(\n input: CreateContextProjectInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n const id = await this.#uniqueProjectId(input.name);\n const now = this.#now();\n const project: ContextProject = {\n schema: \"agent-devkit.context-project/v1\",\n createdAt: now,\n description: input.description,\n id,\n metadata: input.metadata ?? {},\n name: input.name,\n path: input.path,\n status: \"active\",\n tags: input.tags ?? [],\n updatedAt: now,\n };\n\n const save = await this.#saveProject(project);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n const bootstrap = await this.#bootstrapProject(project.id);\n\n if (bootstrap.isErr()) {\n return Result.fail(bootstrap.unwrapError());\n }\n\n return Result.ok(project);\n }\n\n async delete(projectId: string, hard = false): Promise<Result<AgentDevKitErrorCode, boolean>> {\n if (hard) {\n const remove = await this.#dataStore.remove(this.#projectDirectory(projectId));\n return remove.isOk() ? Result.ok(true) : Result.fail(remove.unwrapError());\n }\n\n const project = await this.#setStatus(projectId, \"deleted\");\n return project.isOk() ? Result.ok(true) : Result.fail(project.unwrapError());\n }\n\n async list(\n input: ListContextProjectsInput = {},\n ): Promise<Result<AgentDevKitErrorCode, ContextProject[]>> {\n const projectsDirectory = { namespace: \"context\" as const, segments: [\"projects\"] };\n const exists = await this.#dataStore.exists(projectsDirectory);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n return Result.ok([]);\n }\n\n const entries = await this.#dataStore.list(projectsDirectory);\n\n if (entries.isErr()) {\n return Result.fail(entries.unwrapError());\n }\n\n const projects: ContextProject[] = [];\n\n for (const entry of entries.unwrap().filter((candidate) => candidate.kind === \"directory\")) {\n const project = await this.#readProject(entry.name);\n\n if (project.isErr()) {\n return Result.fail(project.unwrapError());\n }\n\n projects.push(project.unwrap());\n }\n\n const status = input.status ?? \"active\";\n const query = input.query?.trim();\n\n return Result.ok(\n projects\n .filter((project) => status === \"all\" || project.status === status)\n .filter(\n (project) => query === undefined || query.length === 0 || includesQuery(project, query),\n )\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt)),\n );\n }\n\n async show(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n return this.#readProject(projectId);\n }\n\n async update(\n input: UpdateContextProjectInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n const current = await this.#readProject(input.projectId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const updated: ContextProject = {\n ...current.unwrap(),\n description: input.description ?? current.unwrap().description,\n metadata: input.metadata ?? current.unwrap().metadata,\n name: input.name ?? current.unwrap().name,\n path: input.path ?? current.unwrap().path,\n tags: input.tags ?? current.unwrap().tags,\n updatedAt: this.#now(),\n };\n const save = await this.#saveProject(updated);\n\n return save.isOk() ? Result.ok(updated) : Result.fail(save.unwrapError());\n }\n\n async #bootstrapProject(projectId: string): Promise<Result<AgentDevKitErrorCode, void>> {\n const writes = [\n this.#dataStore.writeText(\n { namespace: \"context\", segments: [\"projects\", projectId, \"knowledge\", \"base.md\"] },\n knowledgeBase,\n ),\n this.#dataStore.writeJson(\n { namespace: \"context\", segments: [\"projects\", projectId, \"knowledge\", \"index.json\"] },\n { schema: \"agent-devkit.context-knowledge-index/v1\", projectId, entries: [] },\n ),\n this.#dataStore.writeText(\n { namespace: \"context\", segments: [\"projects\", projectId, \"knowledge\", \"facts.jsonl\"] },\n \"\",\n ),\n this.#dataStore.writeText(\n {\n namespace: \"context\",\n segments: [\"projects\", projectId, \"knowledge\", \"decisions.jsonl\"],\n },\n \"\",\n ),\n this.#dataStore.writeText(\n {\n namespace: \"context\",\n segments: [\"projects\", projectId, \"knowledge\", \"preferences.jsonl\"],\n },\n \"\",\n ),\n this.#dataStore.writeText(\n {\n namespace: \"context\",\n segments: [\"projects\", projectId, \"knowledge\", \"references.jsonl\"],\n },\n \"\",\n ),\n this.#dataStore.writeText(\n { namespace: \"context\", segments: [\"projects\", projectId, \"sessions\", \".keep\"] },\n \"\",\n ),\n ];\n\n for (const write of await Promise.all(writes)) {\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n }\n\n return Result.ok(undefined);\n }\n\n #index(project: ContextProject) {\n return ContextProjectIndexSchema.parse({\n schema: \"agent-devkit.context-project-index/v1\",\n description: project.description,\n id: project.id,\n name: project.name,\n path: project.path,\n status: project.status,\n tags: project.tags,\n updatedAt: project.updatedAt,\n });\n }\n\n async #readProject(projectId: string): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n const payload = await this.#dataStore.readJson<unknown>({\n namespace: \"context\",\n segments: [\"projects\", projectId, \"project.json\"],\n });\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = ContextProjectSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #saveProject(project: ContextProject): Promise<Result<AgentDevKitErrorCode, void>> {\n const projectWrite = await this.#dataStore.writeJson(\n { namespace: \"context\", segments: [\"projects\", project.id, \"project.json\"] },\n project,\n );\n\n if (projectWrite.isErr()) {\n return Result.fail(projectWrite.unwrapError());\n }\n\n return this.#dataStore.writeJson(\n { namespace: \"context\", segments: [\"projects\", project.id, \"index.json\"] },\n this.#index(project),\n );\n }\n\n async #setStatus(\n projectId: string,\n status: ContextProjectStatus,\n ): Promise<Result<AgentDevKitErrorCode, ContextProject>> {\n const current = await this.#readProject(projectId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const updated: ContextProject = { ...current.unwrap(), status, updatedAt: this.#now() };\n const save = await this.#saveProject(updated);\n\n return save.isOk() ? Result.ok(updated) : Result.fail(save.unwrapError());\n }\n\n async #uniqueProjectId(name: string): Promise<string> {\n const base = `proj_${slugify(name)}`;\n let candidate = base;\n let index = 2;\n\n while ((await this.#dataStore.exists(this.#projectDirectory(candidate))).unwrap()) {\n candidate = `${base}_${index}`;\n index += 1;\n }\n\n return candidate;\n }\n\n #now(): string {\n return this.#clock().toISOString();\n }\n\n #projectDirectory(projectId: string): AgentDataPath {\n return { namespace: \"context\", segments: [\"projects\", projectId] };\n }\n}\n","import {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n type CapabilityInvocationContext,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ContextProjectsOptions,\n ContextProjectsOptionsSchema,\n type ContextProjectsResult,\n ContextProjectsResultSchema,\n} from \"./projects.entities\";\nimport type { ContextProjectsRepositoryPort } from \"./projects.repository\";\n\ntype ContextProjectsServiceDependencies = {\n repository: ContextProjectsRepositoryPort;\n};\n\nexport const contextProjectsCapabilityConfig = defineCapabilityConfig({\n id: \"context.projects\",\n moduleId: \"context\",\n name: \"Context Projects\",\n description: \"Create, list and manage Agent DevKit context projects.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class ContextProjectsService extends BaseCapabilityService<\n typeof contextProjectsCapabilityConfig,\n ContextProjectsServiceDependencies,\n ContextProjectsOptions,\n ContextProjectsResult\n> {\n readonly inputSchema = ContextProjectsOptionsSchema;\n readonly outputSchema = ContextProjectsResultSchema;\n readonly #repository: ContextProjectsRepositoryPort;\n\n constructor(dependencies: ContextProjectsServiceDependencies) {\n super(contextProjectsCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: ContextProjectsOptions,\n ): Promise<Result<AgentDevKitErrorCode, ContextProjectsResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const input = parsed.data;\n\n if (input.action === \"list\") {\n return (await this.#repository.list(input)).map((projects) => ({\n action: \"list\",\n projects,\n }));\n }\n\n if (input.action === \"create\") {\n return (await this.#repository.create(input)).map((project) => ({\n action: \"create\",\n project,\n }));\n }\n\n if (input.action === \"show\") {\n return (await this.#repository.show(input.projectId)).map((project) => ({\n action: \"show\",\n project,\n }));\n }\n\n if (input.action === \"update\") {\n return (await this.#repository.update(input)).map((project) => ({\n action: \"update\",\n project,\n }));\n }\n\n if (input.action === \"archive\") {\n return (await this.#repository.archive(input.projectId)).map((project) => ({\n action: \"archive\",\n project,\n }));\n }\n\n return (await this.#repository.delete(input.projectId, input.hard)).map((removed) => ({\n action: \"delete\",\n hard: input.hard === true,\n projectId: input.projectId,\n removed,\n }));\n }\n\n invoke(\n input: ContextProjectsOptions,\n _context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, ContextProjectsResult>> {\n return this.execute(input);\n }\n\n override approvalForInput(input: ContextProjectsOptions): CapabilityApproval {\n if (input.action === \"list\" || input.action === \"show\") {\n return { reason: \"Context project read action.\", required: false };\n }\n\n if (input.action === \"delete\" && input.hard === true) {\n return {\n reason: \"Context project hard delete removes durable state.\",\n required: true,\n };\n }\n\n return {\n reason: \"Context project action writes global state.\",\n required: true,\n };\n }\n\n override effectsForInput(input: ContextProjectsOptions): CapabilityEffect[] {\n if (input.action === \"list\" || input.action === \"show\") {\n return [{ operation: \"read\", scope: \"none\" }];\n }\n\n if (input.action === \"delete\" && input.hard === true) {\n return [{ operation: \"delete\", scope: \"global\" }];\n }\n\n return [{ operation: \"write\", scope: \"global\" }];\n }\n}\n","import { z } from \"zod\";\n\nexport const ContextSessionStatusSchema = z.enum([\"active\", \"archived\", \"deleted\"]);\nexport type ContextSessionStatus = z.infer<typeof ContextSessionStatusSchema>;\n\nexport const ContextSessionOriginSchema = z.enum([\"cli\", \"tui\", \"mcp\", \"agent\"]);\nexport type ContextSessionOrigin = z.infer<typeof ContextSessionOriginSchema>;\n\nexport const ContextMessageRoleSchema = z.enum([\"user\", \"assistant\", \"system\", \"tool\"]);\nexport type ContextMessageRole = z.infer<typeof ContextMessageRoleSchema>;\n\nexport const ContextMessageKindSchema = z.enum([\n \"message\",\n \"event\",\n \"tool-call\",\n \"tool-result\",\n \"summary\",\n]);\nexport type ContextMessageKind = z.infer<typeof ContextMessageKindSchema>;\n\nexport const ContextSessionSchema = z.object({\n schema: z.literal(\"agent-devkit.context-session/v1\"),\n createdAt: z.string().datetime(),\n id: z.string().min(1),\n lastMessageAt: z.string().datetime().optional(),\n metadata: z.record(z.string(), z.unknown()).default({}),\n origin: ContextSessionOriginSchema,\n projectId: z.string().min(1).optional(),\n status: ContextSessionStatusSchema,\n tags: z.array(z.string().min(1).max(80)).default([]),\n title: z.string().min(1).max(160),\n updatedAt: z.string().datetime(),\n});\n\nexport type ContextSession = z.infer<typeof ContextSessionSchema>;\n\nexport const ContextMessageSchema = z.object({\n schema: z.literal(\"agent-devkit.context-message/v1\"),\n content: z.string(),\n createdAt: z.string().datetime(),\n id: z.string().min(1),\n kind: ContextMessageKindSchema,\n metadata: z.record(z.string(), z.unknown()).default({}),\n role: ContextMessageRoleSchema,\n sessionId: z.string().min(1),\n});\n\nexport type ContextMessage = z.infer<typeof ContextMessageSchema>;\n\nexport const ContextSessionIndexSchema = z.object({\n schema: z.literal(\"agent-devkit.context-session-index/v1\"),\n createdAt: z.string().datetime(),\n keywords: z.array(z.string()),\n lastMessageAt: z.string().datetime().optional(),\n messageCount: z.number().int().nonnegative(),\n preview: z.string(),\n projectId: z.string().min(1).optional(),\n sessionId: z.string().min(1),\n status: ContextSessionStatusSchema,\n title: z.string().min(1),\n updatedAt: z.string().datetime(),\n});\n\nexport type ContextSessionIndex = z.infer<typeof ContextSessionIndexSchema>;\n\nexport type ContextSessionSearchResult = ContextSessionIndex & {\n score: number;\n};\n\nexport const ContextSessionsOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"list\"),\n limit: z.number().int().nonnegative().optional(),\n projectId: z.string().min(1).optional(),\n query: z.string().min(1).optional(),\n status: z.enum([\"active\", \"archived\", \"deleted\", \"all\"]).optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"create\"),\n metadata: z.record(z.string(), z.unknown()).optional(),\n origin: ContextSessionOriginSchema,\n projectId: z.string().min(1).optional(),\n tags: z.array(z.string().min(1).max(80)).optional(),\n title: z.string().min(1).max(160).optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"append-message\"),\n content: z.string(),\n kind: ContextMessageKindSchema.optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n role: ContextMessageRoleSchema,\n sessionId: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"show\"),\n includeMessages: z.boolean().optional(),\n limit: z.number().int().nonnegative().optional(),\n sessionId: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"search\"),\n limit: z.number().int().nonnegative().optional(),\n projectId: z.string().min(1).optional(),\n query: z.string().min(1),\n })\n .strict(),\n z.object({ action: z.literal(\"resume\"), sessionId: z.string().min(1) }).strict(),\n z.object({ action: z.literal(\"archive\"), sessionId: z.string().min(1) }).strict(),\n z\n .object({\n action: z.literal(\"delete\"),\n hard: z.boolean().optional(),\n sessionId: z.string().min(1),\n })\n .strict(),\n]);\n\nexport type ContextSessionsOptions = z.infer<typeof ContextSessionsOptionsSchema>;\n\nexport type ContextSessionsListResult = {\n action: \"list\";\n sessions: ContextSessionIndex[];\n};\n\nexport type ContextSessionsCreateResult = {\n action: \"create\";\n session: ContextSession;\n};\n\nexport type ContextSessionsAppendMessageResult = {\n action: \"append-message\";\n index: ContextSessionIndex;\n message: ContextMessage;\n session: ContextSession;\n};\n\nexport type ContextSessionsShowResult = {\n action: \"show\";\n index: ContextSessionIndex;\n messages?: ContextMessage[];\n session: ContextSession;\n};\n\nexport type ContextSessionsSearchResult = {\n action: \"search\";\n query: string;\n results: ContextSessionSearchResult[];\n};\n\nexport type ContextSessionsResumeResult = {\n action: \"resume\";\n index: ContextSessionIndex;\n messages: ContextMessage[];\n session: ContextSession;\n};\n\nexport type ContextSessionsArchiveResult = {\n action: \"archive\";\n index: ContextSessionIndex;\n session: ContextSession;\n};\n\nexport type ContextSessionsDeleteResult = {\n action: \"delete\";\n hard: boolean;\n removed: boolean;\n sessionId: string;\n};\n\nexport type ContextSessionsResult =\n | ContextSessionsAppendMessageResult\n | ContextSessionsArchiveResult\n | ContextSessionsCreateResult\n | ContextSessionsDeleteResult\n | ContextSessionsListResult\n | ContextSessionsResumeResult\n | ContextSessionsSearchResult\n | ContextSessionsShowResult;\n\nexport const ContextSessionIndexOutputSchema = ContextSessionIndexSchema;\nexport const ContextMessageOutputSchema = ContextMessageSchema;\nexport const ContextSessionSearchResultSchema = ContextSessionIndexSchema.extend({\n score: z.number().nonnegative(),\n});\n\nexport const ContextSessionsResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n sessions: z.array(ContextSessionIndexOutputSchema),\n }),\n z.object({\n action: z.literal(\"create\"),\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"append-message\"),\n index: ContextSessionIndexOutputSchema,\n message: ContextMessageOutputSchema,\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"show\"),\n index: ContextSessionIndexOutputSchema,\n messages: z.array(ContextMessageOutputSchema).optional(),\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"search\"),\n query: z.string(),\n results: z.array(ContextSessionSearchResultSchema),\n }),\n z.object({\n action: z.literal(\"resume\"),\n index: ContextSessionIndexOutputSchema,\n messages: z.array(ContextMessageOutputSchema),\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"archive\"),\n index: ContextSessionIndexOutputSchema,\n session: ContextSessionSchema,\n }),\n z.object({\n action: z.literal(\"delete\"),\n hard: z.boolean(),\n removed: z.boolean(),\n sessionId: z.string().min(1),\n }),\n]);\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDataPath, AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../../../infra/data\";\nimport { ContextProjectSchema } from \"../projects/projects.entities\";\nimport {\n type ContextMessage,\n type ContextMessageKind,\n type ContextMessageRole,\n ContextMessageSchema,\n type ContextSession,\n type ContextSessionIndex,\n ContextSessionIndexSchema,\n ContextSessionSchema,\n type ContextSessionSearchResult,\n type ContextSessionStatus,\n} from \"./sessions.entities\";\n\nexport type ContextSessionsRepositoryOptions = {\n clock?: () => Date;\n dataStore?: AgentDataStore;\n idFactory?: () => string;\n messageIdFactory?: () => string;\n};\n\nexport type CreateContextSessionInput = {\n metadata?: Record<string, unknown>;\n origin: ContextSession[\"origin\"];\n projectId?: string;\n tags?: string[];\n title?: string;\n};\n\nexport type AppendContextMessageInput = {\n content: string;\n kind?: ContextMessageKind;\n metadata?: Record<string, unknown>;\n role: ContextMessageRole;\n sessionId: string;\n};\n\nexport type ListContextSessionsInput = {\n limit?: number;\n projectId?: string;\n query?: string;\n status?: ContextSessionStatus | \"all\";\n};\n\nexport type ShowContextSessionInput = {\n includeMessages?: boolean;\n limit?: number;\n sessionId: string;\n};\n\nexport type SearchContextSessionsInput = {\n limit?: number;\n projectId?: string;\n query: string;\n};\n\nexport type ContextSessionDetails = {\n index: ContextSessionIndex;\n messages?: ContextMessage[];\n session: ContextSession;\n};\n\nexport interface ContextSessionsRepositoryPort extends CapabilityRepositoryPort {\n appendMessage(\n input: AppendContextMessageInput,\n ): Promise<\n Result<\n AgentDevKitErrorCode,\n { index: ContextSessionIndex; message: ContextMessage; session: ContextSession }\n >\n >;\n archive(sessionId: string): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>>;\n create(input: CreateContextSessionInput): Promise<Result<AgentDevKitErrorCode, ContextSession>>;\n delete(sessionId: string, hard?: boolean): Promise<Result<AgentDevKitErrorCode, boolean>>;\n list(\n input?: ListContextSessionsInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionIndex[]>>;\n resume(sessionId: string): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>>;\n search(\n input: SearchContextSessionsInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionSearchResult[]>>;\n show(\n input: ShowContextSessionInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>>;\n}\n\nconst stopwords = new Set([\n \"a\",\n \"as\",\n \"com\",\n \"da\",\n \"de\",\n \"do\",\n \"e\",\n \"for\",\n \"in\",\n \"of\",\n \"o\",\n \"os\",\n \"para\",\n \"the\",\n \"to\",\n \"um\",\n \"uma\",\n]);\n\nfunction compactWhitespace(value: string): string {\n return value.replaceAll(/\\s+/g, \" \").trim();\n}\n\nfunction generateId(prefix: string): string {\n return `${prefix}_${crypto.randomUUID().replaceAll(\"-\", \"\").slice(0, 26)}`;\n}\n\nfunction keywordsFor(values: string[], max = 12): string[] {\n const counts = new Map<string, number>();\n\n for (const token of values\n .join(\" \")\n .toLowerCase()\n .normalize(\"NFD\")\n .replaceAll(/[\\u0300-\\u036f]/g, \"\")\n .split(/[^a-z0-9]+/g)\n .filter((candidate) => candidate.length > 3 && !stopwords.has(candidate))) {\n counts.set(token, (counts.get(token) ?? 0) + 1);\n }\n\n return [...counts.entries()]\n .sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]))\n .slice(0, max)\n .map(([token]) => token);\n}\n\nfunction scoreText(haystack: string, query: string): number {\n const normalizedHaystack = haystack.toLowerCase();\n const normalizedQuery = query.toLowerCase();\n let score = 0;\n let index = normalizedHaystack.indexOf(normalizedQuery);\n\n while (index >= 0) {\n score += 1;\n index = normalizedHaystack.indexOf(normalizedQuery, index + normalizedQuery.length);\n }\n\n return score;\n}\n\nexport class ContextSessionsRepository implements ContextSessionsRepositoryPort {\n readonly repositoryId = \"context.sessions.repository\";\n readonly #clock: () => Date;\n readonly #dataStore: AgentDataStore;\n readonly #idFactory: () => string;\n readonly #messageIdFactory: () => string;\n\n constructor(options: ContextSessionsRepositoryOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#dataStore = options.dataStore ?? new LocalAgentDataStore();\n this.#idFactory = options.idFactory ?? (() => generateId(\"ses\"));\n this.#messageIdFactory = options.messageIdFactory ?? (() => generateId(\"msg\"));\n }\n\n async appendMessage(\n input: AppendContextMessageInput,\n ): Promise<\n Result<\n AgentDevKitErrorCode,\n { index: ContextSessionIndex; message: ContextMessage; session: ContextSession }\n >\n > {\n const current = await this.#readSessionById(input.sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const { session } = current.unwrap();\n const now = this.#now();\n const message: ContextMessage = {\n schema: \"agent-devkit.context-message/v1\",\n content: input.content,\n createdAt: now,\n id: this.#messageIdFactory(),\n kind: input.kind ?? \"message\",\n metadata: input.metadata ?? {},\n role: input.role,\n sessionId: input.sessionId,\n };\n const parsedMessage = ContextMessageSchema.safeParse(message);\n\n if (!parsedMessage.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const nextSession: ContextSession = {\n ...session,\n lastMessageAt: now,\n title:\n session.title === \"Untitled session\" && message.role === \"user\"\n ? compactWhitespace(message.content).slice(0, 80) || session.title\n : session.title,\n updatedAt: now,\n };\n const parsedSession = ContextSessionSchema.safeParse(nextSession);\n\n if (!parsedSession.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const writeMessage = await this.#dataStore.appendJsonl(\n this.#sessionPath(parsedSession.data, \"messages.jsonl\"),\n parsedMessage.data,\n );\n\n if (writeMessage.isErr()) {\n return Result.fail(writeMessage.unwrapError());\n }\n\n const messages = await this.#readMessages(parsedSession.data);\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const save = await this.#saveSession(parsedSession.data, messages.unwrap());\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n return Result.ok({\n index: this.#index(nextSession, messages.unwrap()),\n message: parsedMessage.data,\n session: parsedSession.data,\n });\n }\n\n async archive(sessionId: string): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>> {\n const updated = await this.#setStatus(sessionId, \"archived\");\n\n if (updated.isErr()) {\n return Result.fail(updated.unwrapError());\n }\n\n return this.show({ includeMessages: false, sessionId });\n }\n\n async create(\n input: CreateContextSessionInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSession>> {\n if (input.projectId !== undefined) {\n const project = await this.#validateProjectExists(input.projectId);\n\n if (project.isErr()) {\n return Result.fail(project.unwrapError());\n }\n }\n\n const now = this.#now();\n const session: ContextSession = {\n schema: \"agent-devkit.context-session/v1\",\n createdAt: now,\n id: this.#idFactory(),\n metadata: input.metadata ?? {},\n origin: input.origin,\n projectId: input.projectId,\n status: \"active\",\n tags: input.tags ?? [],\n title: input.title ?? \"Untitled session\",\n updatedAt: now,\n };\n const parsedSession = ContextSessionSchema.safeParse(session);\n\n if (!parsedSession.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const save = await this.#saveSession(parsedSession.data, []);\n\n return save.isOk() ? Result.ok(parsedSession.data) : Result.fail(save.unwrapError());\n }\n\n async delete(sessionId: string, hard = false): Promise<Result<AgentDevKitErrorCode, boolean>> {\n const current = await this.#readSessionById(sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n if (hard) {\n const remove = await this.#dataStore.remove(this.#sessionDirectory(current.unwrap().session));\n return remove.isOk() ? Result.ok(true) : Result.fail(remove.unwrapError());\n }\n\n const updated = await this.#setStatus(sessionId, \"deleted\");\n return updated.isOk() ? Result.ok(true) : Result.fail(updated.unwrapError());\n }\n\n async list(\n input: ListContextSessionsInput = {},\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionIndex[]>> {\n const entries = await this.#allSessionReferences(input.projectId);\n\n if (entries.isErr()) {\n return Result.fail(entries.unwrapError());\n }\n\n const status = input.status ?? \"active\";\n const query = input.query?.trim();\n const indexes: ContextSessionIndex[] = [];\n\n for (const session of entries.unwrap()) {\n const index = await this.#readIndex(session);\n\n if (index.isErr()) {\n return Result.fail(index.unwrapError());\n }\n\n indexes.push(index.unwrap());\n }\n\n return Result.ok(\n indexes\n .filter((index) => status === \"all\" || index.status === status)\n .filter((index) => query === undefined || this.#indexMatches(index, query))\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))\n .slice(0, input.limit ?? 20),\n );\n }\n\n async resume(sessionId: string): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>> {\n const current = await this.#readSessionById(sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n if (current.unwrap().session.status !== \"active\") {\n const updated = await this.#setStatus(sessionId, \"active\");\n\n if (updated.isErr()) {\n return Result.fail(updated.unwrapError());\n }\n }\n\n return this.show({ includeMessages: true, limit: 20, sessionId });\n }\n\n async search(\n input: SearchContextSessionsInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionSearchResult[]>> {\n const entries = await this.#allSessionReferences(input.projectId);\n\n if (entries.isErr()) {\n return Result.fail(entries.unwrapError());\n }\n\n const results: ContextSessionSearchResult[] = [];\n\n for (const reference of entries.unwrap()) {\n const index = await this.#readIndex(reference);\n const messages = await this.#readMessages(reference.session);\n\n if (index.isErr()) {\n return Result.fail(index.unwrapError());\n }\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const haystack = [\n index.unwrap().title,\n index.unwrap().preview,\n index.unwrap().keywords.join(\" \"),\n ...messages.unwrap().map((message) => message.content),\n ].join(\" \");\n const score = scoreText(haystack, input.query);\n\n if (score > 0 && index.unwrap().status !== \"deleted\") {\n results.push({ ...index.unwrap(), score });\n }\n }\n\n return Result.ok(\n results\n .sort(\n (left, right) =>\n right.score - left.score || right.updatedAt.localeCompare(left.updatedAt),\n )\n .slice(0, input.limit ?? 20),\n );\n }\n\n async show(\n input: ShowContextSessionInput,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionDetails>> {\n const current = await this.#readSessionById(input.sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const index = await this.#readIndex(current.unwrap());\n\n if (index.isErr()) {\n return Result.fail(index.unwrapError());\n }\n\n if (input.includeMessages !== true) {\n return Result.ok({ index: index.unwrap(), session: current.unwrap().session });\n }\n\n const messages = await this.#readMessages(current.unwrap().session);\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n return Result.ok({\n index: index.unwrap(),\n messages: messages.unwrap().slice(-(input.limit ?? messages.unwrap().length)),\n session: current.unwrap().session,\n });\n }\n\n async #allSessionReferences(\n projectId?: string,\n ): Promise<Result<AgentDevKitErrorCode, Array<{ session: ContextSession }>>> {\n const references: Array<{ session: ContextSession }> = [];\n const roots =\n projectId === undefined ? await this.#sessionRoots() : [this.#projectSessionsRoot(projectId)];\n\n for (const root of roots) {\n const exists = await this.#dataStore.exists(root);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n continue;\n }\n\n const entries = await this.#dataStore.list(root);\n\n if (entries.isErr()) {\n return Result.fail(entries.unwrapError());\n }\n\n for (const entry of entries.unwrap().filter((candidate) => candidate.kind === \"directory\")) {\n const session = await this.#readSessionAt({\n namespace: \"context\",\n segments: [...entry.path.segments, \"session.json\"],\n });\n\n if (session.isOk()) {\n references.push({ session: session.unwrap() });\n }\n }\n }\n\n return Result.ok(references);\n }\n\n async #readSessionById(\n sessionId: string,\n ): Promise<Result<AgentDevKitErrorCode, { session: ContextSession }>> {\n const references = await this.#allSessionReferences();\n\n if (references.isErr()) {\n return Result.fail(references.unwrapError());\n }\n\n const found = references.unwrap().find((reference) => reference.session.id === sessionId);\n\n return found === undefined ? Result.fail(ErrorCodes.InvalidInput) : Result.ok(found);\n }\n\n async #readSessionAt(path: AgentDataPath): Promise<Result<AgentDevKitErrorCode, ContextSession>> {\n const payload = await this.#dataStore.readJson<unknown>(path);\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = ContextSessionSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #saveSession(\n session: ContextSession,\n messages: ContextMessage[],\n ): Promise<Result<AgentDevKitErrorCode, void>> {\n const sessionWrite = await this.#dataStore.writeJson(\n this.#sessionPath(session, \"session.json\"),\n session,\n );\n\n if (sessionWrite.isErr()) {\n return Result.fail(sessionWrite.unwrapError());\n }\n\n const indexWrite = await this.#dataStore.writeJson(\n this.#sessionPath(session, \"index.json\"),\n this.#index(session, messages),\n );\n\n if (indexWrite.isErr()) {\n return Result.fail(indexWrite.unwrapError());\n }\n\n return this.#dataStore.writeText(\n this.#sessionPath(session, \"summary.md\"),\n this.#summary(session, messages),\n );\n }\n\n async #setStatus(\n sessionId: string,\n status: ContextSessionStatus,\n ): Promise<Result<AgentDevKitErrorCode, ContextSession>> {\n const current = await this.#readSessionById(sessionId);\n\n if (current.isErr()) {\n return Result.fail(current.unwrapError());\n }\n\n const messages = await this.#readMessages(current.unwrap().session);\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const session: ContextSession = {\n ...current.unwrap().session,\n status,\n updatedAt: this.#now(),\n };\n const save = await this.#saveSession(session, messages.unwrap());\n\n return save.isOk() ? Result.ok(session) : Result.fail(save.unwrapError());\n }\n\n async #validateProjectExists(projectId: string): Promise<Result<AgentDevKitErrorCode, void>> {\n const path: AgentDataPath = {\n namespace: \"context\",\n segments: [\"projects\", projectId, \"project.json\"],\n };\n const exists = await this.#dataStore.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const project = await this.#dataStore.readJson<unknown>(path);\n\n if (project.isErr()) {\n return Result.fail(project.unwrapError());\n }\n\n return ContextProjectSchema.safeParse(project.unwrap()).success\n ? Result.ok(undefined)\n : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #sessionRoots(): Promise<AgentDataPath[]> {\n const roots: AgentDataPath[] = [{ namespace: \"context\", segments: [\"sessions\"] }];\n const projectsRoot: AgentDataPath = { namespace: \"context\", segments: [\"projects\"] };\n const exists = await this.#dataStore.exists(projectsRoot);\n\n if (exists.isErr() || !exists.unwrap()) {\n return roots;\n }\n\n const projects = await this.#dataStore.list(projectsRoot);\n\n if (projects.isErr()) {\n return roots;\n }\n\n return [\n ...roots,\n ...projects\n .unwrap()\n .filter((entry) => entry.kind === \"directory\")\n .map((entry) => this.#projectSessionsRoot(entry.name)),\n ];\n }\n\n async #readIndex(reference: {\n session: ContextSession;\n }): Promise<Result<AgentDevKitErrorCode, ContextSessionIndex>> {\n const payload = await this.#dataStore.readJson<unknown>(\n this.#sessionPath(reference.session, \"index.json\"),\n );\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = ContextSessionIndexSchema.safeParse(payload.unwrap());\n return parsed.success ? Result.ok(parsed.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n\n async #readMessages(\n session: ContextSession,\n ): Promise<Result<AgentDevKitErrorCode, ContextMessage[]>> {\n const path = this.#sessionPath(session, \"messages.jsonl\");\n const exists = await this.#dataStore.exists(path);\n\n if (exists.isErr()) {\n return Result.fail(exists.unwrapError());\n }\n\n if (!exists.unwrap()) {\n return Result.ok([]);\n }\n\n const messages = await this.#dataStore.readJsonl<unknown>(path);\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const parsed: ContextMessage[] = [];\n\n for (const message of messages.unwrap()) {\n const result = ContextMessageSchema.safeParse(message);\n\n if (!result.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n parsed.push(result.data);\n }\n\n return Result.ok(parsed);\n }\n\n #index(session: ContextSession, messages: ContextMessage[]): ContextSessionIndex {\n const preview = compactWhitespace(\n [...messages].reverse().find((message) => message.content.trim().length > 0)?.content ?? \"\",\n ).slice(0, 240);\n\n return ContextSessionIndexSchema.parse({\n schema: \"agent-devkit.context-session-index/v1\",\n createdAt: session.createdAt,\n keywords: keywordsFor([session.title, preview, session.tags.join(\" \")]),\n lastMessageAt: session.lastMessageAt,\n messageCount: messages.length,\n preview,\n projectId: session.projectId,\n sessionId: session.id,\n status: session.status,\n title: session.title,\n updatedAt: session.updatedAt,\n });\n }\n\n #indexMatches(index: ContextSessionIndex, query: string): boolean {\n return [index.title, index.preview, index.keywords.join(\" \")]\n .join(\" \")\n .toLowerCase()\n .includes(query.toLowerCase());\n }\n\n #summary(session: ContextSession, messages: ContextMessage[]): string {\n return [`# ${session.title}`, \"\", `Messages: ${messages.length}`, \"\"].join(\"\\n\");\n }\n\n #sessionDirectory(session: ContextSession): AgentDataPath {\n return session.projectId === undefined\n ? { namespace: \"context\", segments: [\"sessions\", session.id] }\n : {\n namespace: \"context\",\n segments: [\"projects\", session.projectId, \"sessions\", session.id],\n };\n }\n\n #sessionPath(session: ContextSession, fileName: string): AgentDataPath {\n return {\n ...this.#sessionDirectory(session),\n segments: [...this.#sessionDirectory(session).segments, fileName],\n };\n }\n\n #projectSessionsRoot(projectId: string): AgentDataPath {\n return { namespace: \"context\", segments: [\"projects\", projectId, \"sessions\"] };\n }\n\n #now(): string {\n return this.#clock().toISOString();\n }\n}\n","import {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n type CapabilityInvocationContext,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ContextSessionsOptions,\n ContextSessionsOptionsSchema,\n type ContextSessionsResult,\n ContextSessionsResultSchema,\n} from \"./sessions.entities\";\nimport type { ContextSessionsRepositoryPort } from \"./sessions.repository\";\n\ntype ContextSessionsServiceDependencies = {\n repository: ContextSessionsRepositoryPort;\n};\n\nexport const contextSessionsCapabilityConfig = defineCapabilityConfig({\n id: \"context.sessions\",\n moduleId: \"context\",\n name: \"Context Sessions\",\n description: \"Create, search, resume and manage Agent DevKit context sessions.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class ContextSessionsService extends BaseCapabilityService<\n typeof contextSessionsCapabilityConfig,\n ContextSessionsServiceDependencies,\n ContextSessionsOptions,\n ContextSessionsResult\n> {\n readonly inputSchema = ContextSessionsOptionsSchema;\n readonly outputSchema = ContextSessionsResultSchema;\n readonly #repository: ContextSessionsRepositoryPort;\n\n constructor(dependencies: ContextSessionsServiceDependencies) {\n super(contextSessionsCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: ContextSessionsOptions,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionsResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const input = parsed.data;\n\n if (input.action === \"list\") {\n return (await this.#repository.list(input)).map((sessions) => ({\n action: \"list\",\n sessions,\n }));\n }\n\n if (input.action === \"create\") {\n return (await this.#repository.create(input)).map((session) => ({\n action: \"create\",\n session,\n }));\n }\n\n if (input.action === \"append-message\") {\n return (await this.#repository.appendMessage(input)).map((result) => ({\n action: \"append-message\",\n ...result,\n }));\n }\n\n if (input.action === \"show\") {\n return (await this.#repository.show(input)).map((result) => ({\n action: \"show\",\n ...result,\n }));\n }\n\n if (input.action === \"search\") {\n return (await this.#repository.search(input)).map((results) => ({\n action: \"search\",\n query: input.query,\n results,\n }));\n }\n\n if (input.action === \"resume\") {\n return (await this.#repository.resume(input.sessionId)).map((result) => ({\n action: \"resume\",\n index: result.index,\n messages: result.messages ?? [],\n session: result.session,\n }));\n }\n\n if (input.action === \"archive\") {\n return (await this.#repository.archive(input.sessionId)).map((result) => ({\n action: \"archive\",\n index: result.index,\n session: result.session,\n }));\n }\n\n return (await this.#repository.delete(input.sessionId, input.hard)).map((removed) => ({\n action: \"delete\",\n hard: input.hard === true,\n removed,\n sessionId: input.sessionId,\n }));\n }\n\n invoke(\n input: ContextSessionsOptions,\n _context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, ContextSessionsResult>> {\n return this.execute(input);\n }\n\n override approvalForInput(input: ContextSessionsOptions): CapabilityApproval {\n if (input.action === \"delete\" && input.hard === true) {\n return {\n reason: \"Context session hard delete removes durable memory.\",\n required: true,\n };\n }\n\n return { reason: \"Context session action is safe for local memory.\", required: false };\n }\n\n override effectsForInput(input: ContextSessionsOptions): CapabilityEffect[] {\n if (input.action === \"list\" || input.action === \"show\" || input.action === \"search\") {\n return [{ operation: \"read\", scope: \"none\" }];\n }\n\n if (input.action === \"delete\" && input.hard === true) {\n return [{ operation: \"delete\", scope: \"global\" }];\n }\n\n return [{ operation: \"write\", scope: \"global\" }];\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { contextProjectsCapabilityConfig } from \"./capabilities/projects/projects.service\";\nimport { contextSessionsCapabilityConfig } from \"./capabilities/sessions/sessions.service\";\n\nexport const contextModuleConfig = defineModuleConfig({\n id: \"context\",\n name: \"Context\",\n description: \"Agent DevKit projects, sessions and durable context foundations.\",\n capabilities: [contextProjectsCapabilityConfig.id, contextSessionsCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/context/context.surface.test.ts\",\n \"src/modules/context/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDataStore } from \"../../infra/bases/data_store\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../infra/data\";\nimport {\n ContextProjectsRepository,\n type ContextProjectsRepositoryPort,\n} from \"./capabilities/projects/projects.repository\";\nimport { ContextProjectsService } from \"./capabilities/projects/projects.service\";\nimport {\n ContextSessionsRepository,\n type ContextSessionsRepositoryPort,\n} from \"./capabilities/sessions/sessions.repository\";\nimport { ContextSessionsService } from \"./capabilities/sessions/sessions.service\";\nimport { contextModuleConfig } from \"./context.config\";\n\nexport type ContextModuleBindOptions = {\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n};\n\nexport type ContextModuleCapabilities = {\n projects: ContextProjectsService;\n sessions: ContextSessionsService;\n};\n\nexport type ContextModuleBinding = ModuleBinding<\n typeof contextModuleConfig,\n ContextModuleCapabilities\n>;\n\ntype ContextModuleBinderDependencies = {\n projectsRepository: (options: ContextModuleBindOptions) => ContextProjectsRepositoryPort;\n sessionsRepository: (options: ContextModuleBindOptions) => ContextSessionsRepositoryPort;\n};\n\nconst defaultDependencies: ContextModuleBinderDependencies = {\n projectsRepository: (options) => new ContextProjectsRepository(normalizeOptions(options)),\n sessionsRepository: (options) => new ContextSessionsRepository(normalizeOptions(options)),\n};\n\nfunction normalizeOptions(options: ContextModuleBindOptions): ContextModuleBindOptions {\n if (options.dataStore !== undefined || options.homeDirectory === undefined) {\n return options;\n }\n\n return {\n ...options,\n dataStore: new LocalAgentDataStore({\n rootDirectory: `${options.homeDirectory}/.agent-devkit/data`,\n }),\n };\n}\n\nexport class ContextModuleBinder extends ModuleBinder<\n ContextModuleBindOptions,\n typeof contextModuleConfig,\n ContextModuleCapabilities\n> {\n readonly #dependencies: ContextModuleBinderDependencies;\n\n constructor(dependencies: ContextModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: ContextModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, ContextModuleBinding> {\n return defineModuleBinding({\n config: contextModuleConfig,\n capabilities: {\n projects: new ContextProjectsService({\n repository: this.#dependencies.projectsRepository(options),\n }),\n sessions: new ContextSessionsService({\n repository: this.#dependencies.sessionsRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createContextModuleBindings(\n options: ContextModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, ContextModuleBinding> {\n return new ContextModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { contextProjectsCapabilityConfig } from \"./capabilities/projects/projects.service\";\nimport { contextSessionsCapabilityConfig } from \"./capabilities/sessions/sessions.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createContextSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"context\", moduleDirectory));\n\n return {\n moduleId: \"context\",\n capabilities: async () =>\n Result.ok(\n surfaceCapabilitiesFromConfigs([\n contextProjectsCapabilityConfig,\n contextSessionsCapabilityConfig,\n ]),\n ),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { z } from \"zod\";\nimport {\n CharacterBehaviorSchema,\n CharacterDetailLevelSchema,\n CharacterIdSchema,\n CharacterToneSchema,\n} from \"./character\";\n\nexport const PromptMessageRoleSchema = z.enum([\"assistant\", \"system\", \"tool\", \"user\"]);\n\nexport const PromptMessageSchema = z\n .object({\n content: z.string(),\n createdAt: z.string().datetime().optional(),\n id: z.string().min(1).optional(),\n role: PromptMessageRoleSchema,\n })\n .strict();\n\nexport const PromptProjectContextSchema = z\n .object({\n description: z.string().optional(),\n id: z.string().min(1),\n name: z.string().min(1),\n path: z.string().optional(),\n tags: z.array(z.string()).default([]),\n })\n .strict();\n\nexport const PromptSessionContextSchema = z\n .object({\n id: z.string().min(1),\n messageCount: z.number().int().nonnegative(),\n title: z.string().min(1),\n })\n .strict();\n\nexport const PromptKnowledgeContextSchema = z\n .object({\n content: z.string().min(1),\n id: z.string().min(1),\n source: z.string().min(1).optional(),\n })\n .strict();\n\nexport const PromptToolDescriptorSchema = z\n .object({\n description: z.string().min(1),\n id: z.string().min(1),\n inputSchema: z.record(z.string(), z.unknown()).optional(),\n risk: z.string().min(1),\n })\n .strict();\n\nexport const PromptOutputContractSchema = z\n .object({\n format: z.enum([\"json\", \"text\"]).default(\"text\"),\n language: z.string().min(1).default(\"pt-BR\"),\n })\n .strict();\n\nexport const AgentPromptSchema = z\n .object({\n agent: z\n .object({\n behavior: CharacterBehaviorSchema,\n characterId: CharacterIdSchema,\n detailLevel: CharacterDetailLevelSchema,\n name: z.string().min(1),\n tone: CharacterToneSchema,\n traits: z.array(z.string().min(1)).default([]),\n })\n .strict(),\n context: z\n .object({\n knowledge: z.array(PromptKnowledgeContextSchema).default([]),\n project: PromptProjectContextSchema.optional(),\n session: PromptSessionContextSchema.optional(),\n })\n .strict(),\n locale: z.string().min(1).default(\"pt-BR\"),\n messages: z.array(PromptMessageSchema),\n output: PromptOutputContractSchema.default({ format: \"text\", language: \"pt-BR\" }),\n policies: z\n .object({\n allowToolCalls: z.boolean(),\n approvalRequired: z.boolean(),\n maxToolCalls: z.number().int().nonnegative(),\n })\n .strict(),\n schema: z.literal(\"agent-devkit.prompt/v1\"),\n task: z\n .object({\n intent: z.string().min(1).optional(),\n userMessage: z.string().min(1),\n })\n .strict(),\n tools: z.array(PromptToolDescriptorSchema).default([]),\n })\n .strict();\n\nexport type PromptMessage = z.infer<typeof PromptMessageSchema>;\nexport type AgentPrompt = z.infer<typeof AgentPromptSchema>;\nexport type PromptToolDescriptor = z.infer<typeof PromptToolDescriptorSchema>;\n","import type {\n CapabilityInvocationInterface,\n CapabilityRepositoryPort,\n} from \"../../../../infra/bases/capability\";\nimport type { CharacterDefinition, CharacterId } from \"../../../../infra/bases/character\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport type { AgentPrompt, PromptMessage } from \"../../../../infra/bases/prompt\";\nimport { AgentPromptSchema } from \"../../../../infra/bases/prompt\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type { ContextProject } from \"../../../context/capabilities/projects/projects.entities\";\nimport type { ContextProjectsRepositoryPort } from \"../../../context/capabilities/projects/projects.repository\";\nimport type {\n ContextMessage,\n ContextSession,\n ContextSessionOrigin,\n} from \"../../../context/capabilities/sessions/sessions.entities\";\nimport type { ContextSessionsRepositoryPort } from \"../../../context/capabilities/sessions/sessions.repository\";\nimport type { PersonalizationRepositoryPort } from \"../../../user/capabilities/personalization/personalization.repository\";\nimport type { ConversationChatOptions } from \"./chat.entities\";\n\nexport type ConversationPromptPreparation = {\n messages: ContextMessage[];\n prompt: AgentPrompt;\n projectId?: string;\n sessionId: string;\n};\n\nexport type ConversationChatRepositoryOptions = {\n clock?: () => Date;\n personalizationRepository: PersonalizationRepositoryPort;\n projectsRepository: ContextProjectsRepositoryPort;\n sessionsRepository: ContextSessionsRepositoryPort;\n};\n\nexport interface ConversationChatRepositoryPort extends CapabilityRepositoryPort {\n appendAssistantMessage(\n sessionId: string,\n content: string,\n ): Promise<Result<AgentDevKitErrorCode, ContextMessage[]>>;\n preparePrompt(\n input: ConversationChatOptions,\n origin: CapabilityInvocationInterface,\n ): Promise<Result<AgentDevKitErrorCode, ConversationPromptPreparation>>;\n}\n\nfunction originFromInterface(origin: CapabilityInvocationInterface): ContextSessionOrigin {\n return origin;\n}\n\nfunction promptMessages(messages: ContextMessage[]): PromptMessage[] {\n return messages.map((message) => ({\n content: message.content,\n createdAt: message.createdAt,\n id: message.id,\n role: message.role === \"tool\" ? \"tool\" : message.role,\n }));\n}\n\nfunction characterName(character: CharacterDefinition): string {\n return character.name ?? character.id;\n}\n\nfunction compact(value: string): string {\n return value.replaceAll(/\\s+/g, \" \").trim();\n}\n\nconst agentDevKitConversationKnowledge = [\n {\n content:\n \"Agent DevKit is a local AI agent toolkit exposed through the `agent` CLI, a TUI and MCP. It helps users operate this project through capabilities, local state, sessions, projects, preferences, personalization, logs, secrets, dependencies and local models.\",\n id: \"agent-devkit.identity\",\n source: \"conversation.chat\",\n },\n {\n content:\n \"When the user asks personal questions about you, your personality or what you can do, answer as the configured character using your behavior, tone, detail level and traits. Do not answer as a generic human and do not list unrelated human activities.\",\n id: \"agent-devkit.self-description-rule\",\n source: \"conversation.chat\",\n },\n {\n content:\n \"Only describe Agent DevKit internals, modules, tools, MCP, CLI commands or project capabilities when the user explicitly asks about Agent DevKit, the project, tools, commands, MCP or capabilities.\",\n id: \"agent-devkit.project-scope-rule\",\n source: \"conversation.chat\",\n },\n {\n content:\n \"This conversation mode can answer, keep session memory and use project context. Direct tool execution is disabled in this chat prompt.\",\n id: \"agent-devkit.chat-mode-limits\",\n source: \"conversation.chat\",\n },\n {\n content:\n \"Current capability areas include project doctor/init/reset, package update, preferences, themes, aliases, personalization characters, logs, encrypted secrets, dependency inspection/planning, models, projects, sessions and conversation.\",\n id: \"agent-devkit.capability-map\",\n source: \"conversation.chat\",\n },\n];\n\nexport class ConversationChatRepository implements ConversationChatRepositoryPort {\n readonly repositoryId = \"conversation.chat.repository\";\n readonly #clock: () => Date;\n readonly #personalizationRepository: PersonalizationRepositoryPort;\n readonly #projectsRepository: ContextProjectsRepositoryPort;\n readonly #sessionsRepository: ContextSessionsRepositoryPort;\n\n constructor(options: ConversationChatRepositoryOptions) {\n this.#clock = options.clock ?? (() => new Date());\n this.#personalizationRepository = options.personalizationRepository;\n this.#projectsRepository = options.projectsRepository;\n this.#sessionsRepository = options.sessionsRepository;\n }\n\n async appendAssistantMessage(\n sessionId: string,\n content: string,\n ): Promise<Result<AgentDevKitErrorCode, ContextMessage[]>> {\n const append = await this.#sessionsRepository.appendMessage({\n content,\n role: \"assistant\",\n sessionId,\n });\n\n if (append.isErr()) {\n return Result.fail(append.unwrapError());\n }\n\n const details = await this.#sessionsRepository.show({\n includeMessages: true,\n sessionId,\n });\n\n if (details.isErr()) {\n return Result.fail(details.unwrapError());\n }\n\n return Result.ok(details.unwrap().messages ?? []);\n }\n\n async preparePrompt(\n input: ConversationChatOptions,\n origin: CapabilityInvocationInterface,\n ): Promise<Result<AgentDevKitErrorCode, ConversationPromptPreparation>> {\n if (input.action !== \"send\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const character = await this.#loadCharacter(input.characterId);\n\n if (character.isErr()) {\n return Result.fail(character.unwrapError());\n }\n\n const project = await this.#loadProject(input.projectId);\n\n if (project.isErr()) {\n return Result.fail(project.unwrapError());\n }\n\n const session = await this.#ensureSession(input, originFromInterface(origin));\n\n if (session.isErr()) {\n return Result.fail(session.unwrapError());\n }\n\n const append = await this.#sessionsRepository.appendMessage({\n content: input.message,\n role: \"user\",\n sessionId: session.unwrap().id,\n });\n\n if (append.isErr()) {\n return Result.fail(append.unwrapError());\n }\n\n const details = await this.#sessionsRepository.show({\n includeMessages: true,\n sessionId: session.unwrap().id,\n });\n\n if (details.isErr()) {\n return Result.fail(details.unwrapError());\n }\n\n const loadedProject =\n project.unwrap() ??\n (details.unwrap().session.projectId === undefined\n ? undefined\n : await this.#loadProject(details.unwrap().session.projectId).then((result) =>\n result.isOk() ? result.unwrap() : undefined,\n ));\n const allMessages = details.unwrap().messages ?? [];\n const messagesForPrompt = input.includeHistory === false ? allMessages.slice(-1) : allMessages;\n const prompt = this.#prompt({\n character: character.unwrap(),\n messages: messagesForPrompt,\n project: loadedProject,\n session: details.unwrap().session,\n userMessage: input.message,\n });\n\n if (prompt.isErr()) {\n return Result.fail(prompt.unwrapError());\n }\n\n return Result.ok({\n messages: allMessages,\n projectId: loadedProject?.id,\n prompt: prompt.unwrap(),\n sessionId: details.unwrap().session.id,\n });\n }\n\n async #ensureSession(\n input: Extract<ConversationChatOptions, { action: \"send\" }>,\n origin: ContextSessionOrigin,\n ): Promise<Result<AgentDevKitErrorCode, ContextSession>> {\n if (input.sessionId !== undefined) {\n const details = await this.#sessionsRepository.show({\n includeMessages: false,\n sessionId: input.sessionId,\n });\n\n if (details.isErr()) {\n return Result.fail(details.unwrapError());\n }\n\n if (input.projectId !== undefined && details.unwrap().session.projectId !== input.projectId) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(details.unwrap().session);\n }\n\n const created = await this.#sessionsRepository.create({\n origin,\n projectId: input.projectId,\n title: compact(input.message).slice(0, 80) || \"Untitled chat\",\n });\n\n return created.isOk() ? Result.ok(created.unwrap()) : Result.fail(created.unwrapError());\n }\n\n async #loadCharacter(\n characterId?: CharacterId,\n ): Promise<Result<AgentDevKitErrorCode, CharacterDefinition>> {\n const profile = await this.#personalizationRepository.loadProfile();\n\n if (profile.isErr()) {\n return Result.fail(profile.unwrapError());\n }\n\n if (characterId === undefined || characterId === profile.unwrap().currentCharacter.id) {\n return Result.ok(profile.unwrap().currentCharacter);\n }\n\n const characters = await this.#personalizationRepository.loadCharacters(characterId);\n\n if (characters.isErr()) {\n return Result.fail(characters.unwrapError());\n }\n\n const character = characters.unwrap().find((candidate) => candidate.id === characterId);\n\n if (character === undefined || !character.active) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const { custom, selected, spritePath, ...definition } = character;\n void custom;\n void selected;\n void spritePath;\n\n return Result.ok(definition);\n }\n\n async #loadProject(\n projectId?: string,\n ): Promise<Result<AgentDevKitErrorCode, ContextProject | undefined>> {\n if (projectId === undefined) {\n return Result.ok(undefined);\n }\n\n const project = await this.#projectsRepository.show(projectId);\n\n return project.isOk() ? Result.ok(project.unwrap()) : Result.fail(project.unwrapError());\n }\n\n #prompt(input: {\n character: CharacterDefinition;\n messages: ContextMessage[];\n project?: ContextProject;\n session: ContextSession;\n userMessage: string;\n }): Result<AgentDevKitErrorCode, AgentPrompt> {\n const prompt = AgentPromptSchema.safeParse({\n agent: {\n behavior: input.character.profile.behavior,\n characterId: input.character.id,\n detailLevel: input.character.profile.detailLevel,\n name: characterName(input.character),\n tone: input.character.profile.tone,\n traits: input.character.profile.traits,\n },\n context: {\n knowledge: agentDevKitConversationKnowledge,\n project:\n input.project === undefined\n ? undefined\n : {\n description: input.project.description,\n id: input.project.id,\n name: input.project.name,\n path: input.project.path,\n tags: input.project.tags,\n },\n session: {\n id: input.session.id,\n messageCount: input.messages.length,\n title: input.session.title,\n },\n },\n locale: \"pt-BR\",\n messages: promptMessages(input.messages),\n output: { format: \"text\", language: \"pt-BR\" },\n policies: {\n allowToolCalls: false,\n approvalRequired: false,\n maxToolCalls: 0,\n },\n schema: \"agent-devkit.prompt/v1\",\n task: {\n userMessage: input.userMessage,\n },\n tools: [],\n });\n\n return prompt.success ? Result.ok(prompt.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n}\n","import { z } from \"zod\";\nimport { BrainGenerationOptionsSchema, BrainResponseSchema } from \"../../../../infra/bases/brain\";\nimport { CharacterIdSchema } from \"../../../../infra/bases/character\";\nimport { AgentPromptSchema } from \"../../../../infra/bases/prompt\";\nimport { ContextMessageSchema } from \"../../../context/capabilities/sessions/sessions.entities\";\n\nexport const ConversationChatOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"send\"),\n brain: BrainGenerationOptionsSchema.optional(),\n characterId: CharacterIdSchema.optional(),\n includeHistory: z.boolean().optional(),\n message: z.string().min(1),\n projectId: z.string().min(1).optional(),\n sessionId: z.string().min(1).optional(),\n })\n .strict(),\n]);\n\nexport type ConversationChatOptions = z.infer<typeof ConversationChatOptionsSchema>;\n\nexport const ConversationChatResultSchema = z\n .object({\n action: z.literal(\"send\"),\n brain: BrainResponseSchema,\n messages: z.array(ContextMessageSchema),\n projectId: z.string().min(1).optional(),\n prompt: AgentPromptSchema,\n reply: z.string(),\n sessionId: z.string().min(1),\n })\n .strict();\n\nexport type ConversationChatResult = z.infer<typeof ConversationChatResultSchema>;\n","import { z } from \"zod\";\nimport type { AgentDevKitErrorCode } from \"./errors\";\nimport { AgentPromptSchema } from \"./prompt\";\nimport type { Result } from \"./result\";\n\nexport const BrainGenerationOptionsSchema = z\n .object({\n maxInputTokens: z.number().int().positive().optional(),\n maxOutputTokens: z.number().int().positive().optional(),\n model: z.string().min(1).optional(),\n provider: z.enum([\"local\", \"mock\"]).default(\"local\"),\n role: z.enum([\"agent\", \"chat\"]).optional(),\n seed: z.number().int().optional(),\n stop: z.array(z.string().min(1)).optional(),\n stream: z.boolean().optional(),\n temperature: z.number().min(0).max(2).optional(),\n topK: z.number().int().positive().optional(),\n topP: z.number().min(0).max(1).optional(),\n })\n .strict();\n\nexport const BrainRequestSchema = z\n .object({\n options: BrainGenerationOptionsSchema.default({ provider: \"local\" }),\n prompt: AgentPromptSchema,\n schema: z.literal(\"agent-devkit.brain-request/v1\"),\n })\n .strict();\n\nexport const BrainToolCallSchema = z\n .object({\n arguments: z.record(z.string(), z.unknown()).default({}),\n id: z.string().min(1).optional(),\n name: z.string().min(1),\n })\n .strict();\n\nexport const BrainResponseSchema = z\n .object({\n finishReason: z.enum([\"error\", \"length\", \"stop\", \"tool-call\"]).optional(),\n model: z.string().min(1).optional(),\n provider: z.string().min(1).optional(),\n schema: z.literal(\"agent-devkit.brain-response/v1\"),\n text: z.string(),\n toolCalls: z.array(BrainToolCallSchema).optional(),\n usage: z\n .object({\n inputTokens: z.number().int().nonnegative().optional(),\n outputTokens: z.number().int().nonnegative().optional(),\n totalTokens: z.number().int().nonnegative().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type BrainGenerationOptions = z.infer<typeof BrainGenerationOptionsSchema>;\nexport type BrainRequest = z.infer<typeof BrainRequestSchema>;\nexport type BrainResponse = z.infer<typeof BrainResponseSchema>;\nexport type BrainToolCall = z.infer<typeof BrainToolCallSchema>;\n\n/** Live token callback for streaming-capable providers. */\nexport type BrainStreamHandler = (delta: string) => void;\n\n/** Result of a JSON-schema-constrained generation used by the agent loop. */\nexport type BrainStructuredResponse = {\n json: unknown;\n raw: string;\n};\n\nexport interface BrainProviderPort {\n generate(request: BrainRequest): Promise<Result<AgentDevKitErrorCode, BrainResponse>>;\n /**\n * Optional streaming path. Emits text deltas via `onToken` while still\n * resolving to the complete `BrainResponse` for persistence. Providers that\n * cannot stream simply omit this method; callers fall back to `generate`.\n */\n generateStream?(\n request: BrainRequest,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, BrainResponse>>;\n /**\n * Optional structured path for the agent loop: generate output shaped by a\n * JSON schema and return the parsed value plus the raw text. Providers that\n * cannot constrain output omit this method; the agent falls back gracefully.\n */\n generateStructured?(\n request: BrainRequest,\n jsonSchema: Record<string, unknown>,\n ): Promise<Result<AgentDevKitErrorCode, BrainStructuredResponse>>;\n}\n","import type {\n BrainProviderPort,\n BrainRequest,\n BrainResponse,\n BrainStreamHandler,\n} from \"../../../../infra/bases/brain\";\nimport {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n type CapabilityInvocationContext,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ConversationChatOptions,\n ConversationChatOptionsSchema,\n type ConversationChatResult,\n ConversationChatResultSchema,\n} from \"./chat.entities\";\nimport type { ConversationChatRepositoryPort } from \"./chat.repository\";\n\ntype ConversationChatServiceDependencies = {\n brainProvider: BrainProviderPort;\n repository: ConversationChatRepositoryPort;\n};\n\nexport const conversationChatCapabilityConfig = defineCapabilityConfig({\n id: \"conversation.chat\",\n moduleId: \"conversation\",\n name: \"Conversation chat\",\n description: \"Send a chat message using local personalization, projects and session memory.\",\n kind: \"brain-assisted\",\n risk: \"writes-global-state\",\n} as const);\n\nexport { MockBrainProvider } from \"../../../../infra/brain/mock_provider\";\n\nfunction normalizeQuestion(value: string): string {\n return value\n .normalize(\"NFD\")\n .replaceAll(/\\p{Diacritic}/gu, \"\")\n .toLowerCase()\n .replaceAll(/[^\\p{Letter}\\p{Number}\\s]/gu, \" \")\n .replaceAll(/\\s+/g, \" \")\n .trim();\n}\n\nfunction isSelfDescriptionQuestion(message: string): boolean {\n const normalized = normalizeQuestion(message);\n\n return (\n normalized === \"o que voce pode fazer\" ||\n normalized === \"o que voce faz\" ||\n normalized === \"quais sao suas capacidades\" ||\n normalized === \"quais suas capacidades\" ||\n normalized === \"what can you do\" ||\n normalized === \"what do you do\"\n );\n}\n\nfunction countPromptTokens(request: BrainRequest): number {\n return request.prompt.messages\n .map((message) => message.content.split(/\\s+/g).filter(Boolean).length)\n .reduce((total, count) => total + count, 0);\n}\n\nfunction selfDescriptionResponse(request: BrainRequest): BrainResponse | undefined {\n if (!isSelfDescriptionQuestion(request.prompt.task.userMessage)) {\n return undefined;\n }\n\n const { agent } = request.prompt;\n const traits =\n agent.traits.length === 0 ? \"sem tracos extras configurados\" : agent.traits.join(\", \");\n const text = `${agent.name}: Eu posso conversar com voce mantendo o contexto da sessao, ajudar a raciocinar, organizar ideias, analisar informacoes e responder no meu estilo configurado. Minha postura e ${agent.behavior}, meu tom e ${agent.tone}, meu nivel de detalhe e ${agent.detailLevel}, e meus tracos atuais sao: ${traits}.`;\n const inputTokens = countPromptTokens(request);\n const outputTokens = text.split(/\\s+/g).filter(Boolean).length;\n\n return {\n finishReason: \"stop\",\n model: \"self-description\",\n provider: \"system\",\n schema: \"agent-devkit.brain-response/v1\",\n text,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n },\n };\n}\n\nexport class ConversationChatService extends BaseCapabilityService<\n typeof conversationChatCapabilityConfig,\n ConversationChatServiceDependencies,\n ConversationChatOptions,\n ConversationChatResult\n> {\n readonly inputSchema = ConversationChatOptionsSchema;\n readonly outputSchema = ConversationChatResultSchema;\n readonly #brainProvider: BrainProviderPort;\n readonly #repository: ConversationChatRepositoryPort;\n\n constructor(dependencies: ConversationChatServiceDependencies) {\n super(conversationChatCapabilityConfig, dependencies);\n this.#brainProvider = dependencies.brainProvider;\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: ConversationChatOptions,\n ): Promise<Result<AgentDevKitErrorCode, ConversationChatResult>> {\n return this.#run(options, { interface: \"cli\" });\n }\n\n invoke(\n input: ConversationChatOptions,\n context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, ConversationChatResult>> {\n return this.#run(input, context);\n }\n\n /**\n * Interactive streaming variant used by the CLI/TUI. Emits reply tokens via\n * `onToken` while still resolving to the same `ConversationChatResult` and\n * persisting session memory. MCP and `agent run` use the buffered `execute`.\n */\n stream(\n input: ConversationChatOptions,\n onToken: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, ConversationChatResult>> {\n return this.#run(input, { interface: \"cli\" }, onToken);\n }\n\n override effectsForInput(): CapabilityEffect[] {\n return [{ operation: \"write\", scope: \"global\" }];\n }\n\n override approvalForInput(): CapabilityApproval {\n return {\n reason: \"Conversation chat writes local session memory without tool calls.\",\n required: false,\n };\n }\n\n async #run(\n options: ConversationChatOptions,\n context: Pick<CapabilityInvocationContext, \"interface\">,\n onToken?: BrainStreamHandler,\n ): Promise<Result<AgentDevKitErrorCode, ConversationChatResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const prepared = await this.#repository.preparePrompt(parsed.data, context.interface);\n\n if (prepared.isErr()) {\n return Result.fail(prepared.unwrapError());\n }\n\n const request: BrainRequest = {\n options: parsed.data.brain ?? { provider: \"local\" },\n prompt: prepared.unwrap().prompt,\n schema: \"agent-devkit.brain-request/v1\",\n };\n const selfDescription = selfDescriptionResponse(request);\n const brain: Result<AgentDevKitErrorCode, BrainResponse> =\n selfDescription === undefined\n ? onToken !== undefined && this.#brainProvider.generateStream !== undefined\n ? await this.#brainProvider.generateStream(request, onToken)\n : await this.#brainProvider.generate(request)\n : Result.ok(selfDescription);\n\n if (selfDescription !== undefined) {\n onToken?.(selfDescription.text);\n }\n\n if (brain.isErr()) {\n return Result.fail(brain.unwrapError());\n }\n\n const messages = await this.#repository.appendAssistantMessage(\n prepared.unwrap().sessionId,\n brain.unwrap().text,\n );\n\n if (messages.isErr()) {\n return Result.fail(messages.unwrapError());\n }\n\n const result = this.outputSchema.safeParse({\n action: \"send\",\n brain: brain.unwrap(),\n messages: messages.unwrap(),\n projectId: prepared.unwrap().projectId,\n prompt: prepared.unwrap().prompt,\n reply: brain.unwrap().text,\n sessionId: prepared.unwrap().sessionId,\n });\n\n return result.success ? Result.ok(result.data) : Result.fail(ErrorCodes.InvalidInput);\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { conversationChatCapabilityConfig } from \"./capabilities/chat/chat.service\";\n\nexport const conversationModuleConfig = defineModuleConfig({\n id: \"conversation\",\n name: \"Conversation\",\n description: \"Agent DevKit chat runtime backed by personalization, projects and sessions.\",\n capabilities: [conversationChatCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/conversation/conversation.surface.test.ts\",\n \"src/modules/conversation/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { BrainProviderPort } from \"../../infra/bases/brain\";\nimport type { AgentDataStore } from \"../../infra/bases/data_store\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../infra/data\";\nimport { ContextProjectsRepository } from \"../context/capabilities/projects/projects.repository\";\nimport { ContextSessionsRepository } from \"../context/capabilities/sessions/sessions.repository\";\nimport { PersonalizationRepository } from \"../user/capabilities/personalization/personalization.repository\";\nimport {\n ConversationChatRepository,\n type ConversationChatRepositoryPort,\n} from \"./capabilities/chat/chat.repository\";\nimport { ConversationChatService, MockBrainProvider } from \"./capabilities/chat/chat.service\";\nimport { conversationModuleConfig } from \"./conversation.config\";\n\nexport type ConversationModuleBindOptions = {\n brainProvider?: BrainProviderPort;\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n};\n\nexport type ConversationModuleCapabilities = {\n chat: ConversationChatService;\n};\n\nexport type ConversationModuleBinding = ModuleBinding<\n typeof conversationModuleConfig,\n ConversationModuleCapabilities\n>;\n\ntype ConversationModuleBinderDependencies = {\n chatRepository: (options: ConversationModuleBindOptions) => ConversationChatRepositoryPort;\n};\n\nfunction normalizeOptions(options: ConversationModuleBindOptions): ConversationModuleBindOptions {\n if (options.dataStore !== undefined || options.homeDirectory === undefined) {\n return options;\n }\n\n return {\n ...options,\n dataStore: new LocalAgentDataStore({\n rootDirectory: `${options.homeDirectory}/.agent-devkit/data`,\n }),\n };\n}\n\nconst defaultDependencies: ConversationModuleBinderDependencies = {\n chatRepository: (options) => {\n const normalized = normalizeOptions(options);\n const dataStore = normalized.dataStore;\n\n return new ConversationChatRepository({\n personalizationRepository: new PersonalizationRepository({\n dataStore,\n homeDirectory: normalized.homeDirectory,\n }),\n projectsRepository: new ContextProjectsRepository({ dataStore }),\n sessionsRepository: new ContextSessionsRepository({ dataStore }),\n });\n },\n};\n\nexport class ConversationModuleBinder extends ModuleBinder<\n ConversationModuleBindOptions,\n typeof conversationModuleConfig,\n ConversationModuleCapabilities\n> {\n readonly #dependencies: ConversationModuleBinderDependencies;\n\n constructor(dependencies: ConversationModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: ConversationModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, ConversationModuleBinding> {\n return defineModuleBinding({\n config: conversationModuleConfig,\n capabilities: {\n chat: new ConversationChatService({\n brainProvider: options.brainProvider ?? new MockBrainProvider(),\n repository: this.#dependencies.chatRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createConversationModuleBindings(\n options: ConversationModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, ConversationModuleBinding> {\n return new ConversationModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { conversationChatCapabilityConfig } from \"./capabilities/chat/chat.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createConversationSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"conversation\", moduleDirectory));\n\n return {\n moduleId: \"conversation\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([conversationChatCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDataStore } from \"../../../../infra/bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { LocalAgentDataStore } from \"../../../../infra/data\";\nimport {\n type LogCategory,\n type LogCategorySelection,\n type LogEvent,\n type LogsFileSummary,\n type TechnicalLogRecord,\n TechnicalLogRecordSchema,\n type UsageLogRecord,\n UsageLogRecordSchema,\n} from \"./analysis.entities\";\n\nexport type LogsAnalysisRepositoryOptions = {\n dataStore?: AgentDataStore;\n homeDirectory?: string;\n stateDirectory?: string;\n};\n\nexport interface LogsAnalysisRepositoryPort extends CapabilityRepositoryPort {\n logsPath(): string;\n listFiles(\n category?: LogCategorySelection,\n ): Promise<Result<AgentDevKitErrorCode, LogsFileSummary[]>>;\n readEvents(\n date?: string,\n category?: LogCategorySelection,\n ): Promise<Result<AgentDevKitErrorCode, LogEvent[]>>;\n}\n\ntype LogFileReference = {\n file: string;\n path: string;\n};\n\nfunction stateDirectory(options: LogsAnalysisRepositoryOptions): string {\n return options.stateDirectory ?? join(options.homeDirectory ?? homedir(), \".agent-devkit\");\n}\n\nfunction fileInfo(file: string): { category: LogCategory; date: string } | undefined {\n const usage = /^usage-(\\d{4}-\\d{2}-\\d{2})\\.jsonl$/.exec(file);\n if (usage?.[1] !== undefined) {\n return { category: \"usage\", date: usage[1] };\n }\n\n const technical = /^technical-(\\d{4}-\\d{2}-\\d{2})\\.jsonl$/.exec(file);\n if (technical?.[1] !== undefined) {\n return { category: \"technical\", date: technical[1] };\n }\n\n return undefined;\n}\n\nfunction categoryMatches(\n category: LogCategory,\n selection: LogCategorySelection = \"usage\",\n): boolean {\n return selection === \"all\" || selection === category;\n}\n\nfunction toEvent(\n record: TechnicalLogRecord | UsageLogRecord,\n source: string,\n line: number,\n): LogEvent {\n return {\n ...record,\n date: record.timestamp.slice(0, 10),\n line,\n source,\n };\n}\n\nfunction parseEvents(content: string, source: string): LogEvent[] {\n return content\n .split(\"\\n\")\n .map((line, index) => ({ index, line: line.trim() }))\n .filter(({ line }) => line.length > 0)\n .flatMap(({ index, line }) => {\n try {\n const payload = JSON.parse(line);\n const parsed =\n payload.category === \"technical\"\n ? TechnicalLogRecordSchema.safeParse(payload)\n : UsageLogRecordSchema.safeParse(payload);\n return parsed.success ? [toEvent(parsed.data, source, index + 1)] : [];\n } catch {\n return [];\n }\n });\n}\n\nexport class LogsAnalysisRepository implements LogsAnalysisRepositoryPort {\n readonly repositoryId = \"logs.analysis.repository\";\n readonly #dataStore: AgentDataStore;\n readonly #legacyLogsDirectory: string;\n readonly #logsDirectory: string;\n\n constructor(options: LogsAnalysisRepositoryOptions = {}) {\n const state = stateDirectory(options);\n this.#dataStore =\n options.dataStore ?? new LocalAgentDataStore({ rootDirectory: join(state, \"data\") });\n const resolvedLogsDirectory = this.#dataStore.resolve({ namespace: \"logs\", segments: [] });\n this.#logsDirectory = resolvedLogsDirectory.isOk()\n ? resolvedLogsDirectory.unwrap()\n : join(state, \"data\", \"logs\");\n this.#legacyLogsDirectory = join(state, \"logs\");\n }\n\n logsPath(): string {\n return this.#logsDirectory;\n }\n\n async listFiles(\n category: LogCategorySelection = \"usage\",\n ): Promise<Result<AgentDevKitErrorCode, LogsFileSummary[]>> {\n const files = await this.#logFiles();\n\n if (files.isErr()) {\n return Result.fail(files.unwrapError());\n }\n\n const summaries: LogsFileSummary[] = [];\n\n try {\n for (const file of files.unwrap()) {\n const info = fileInfo(file.file);\n\n if (info === undefined || !categoryMatches(info.category, category)) {\n continue;\n }\n\n const [metadata, content] = await Promise.all([\n stat(file.path),\n readFile(file.path, \"utf8\"),\n ]);\n summaries.push({\n category: info.category,\n date: info.date,\n eventCount: parseEvents(content, file.file).length,\n file: file.file,\n path: file.path,\n sizeBytes: metadata.size,\n });\n }\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return Result.ok(\n summaries.sort(\n (left, right) =>\n right.date.localeCompare(left.date) || left.category.localeCompare(right.category),\n ),\n );\n }\n\n async readEvents(\n date?: string,\n category: LogCategorySelection = \"usage\",\n ): Promise<Result<AgentDevKitErrorCode, LogEvent[]>> {\n const files = await this.#logFiles();\n\n if (files.isErr()) {\n return Result.fail(files.unwrapError());\n }\n\n const selectedFiles = files\n .unwrap()\n .filter((file) => {\n const info = fileInfo(file.file);\n return (\n info !== undefined &&\n categoryMatches(info.category, category) &&\n (date === undefined || info.date === date)\n );\n })\n .sort((left, right) => left.file.localeCompare(right.file));\n const events: LogEvent[] = [];\n\n try {\n for (const file of selectedFiles) {\n events.push(...parseEvents(await readFile(file.path, \"utf8\"), file.file));\n }\n } catch {\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return Result.ok(events.sort((left, right) => left.timestamp.localeCompare(right.timestamp)));\n }\n\n async #logFiles(): Promise<Result<AgentDevKitErrorCode, LogFileReference[]>> {\n try {\n const files = new Map<string, LogFileReference>();\n\n for (const reference of [\n ...(await this.#readFilesFromDirectory(this.#logsDirectory)),\n ...(await this.#readFilesFromDirectory(this.#legacyLogsDirectory)),\n ]) {\n if (!files.has(reference.file)) {\n files.set(reference.file, reference);\n }\n }\n\n return Result.ok(\n [...files.values()].sort((left, right) => left.file.localeCompare(right.file)),\n );\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return Result.ok([]);\n }\n\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async #readFilesFromDirectory(directory: string): Promise<LogFileReference[]> {\n try {\n const files = await readdir(directory);\n return files\n .filter((file) => fileInfo(file) !== undefined)\n .map((file) => ({ file, path: join(directory, file) }));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return [];\n }\n\n throw error;\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const UsageLogRecordSchema = z.object({\n area: z.string().min(1),\n argv: z.array(z.string()),\n category: z.literal(\"usage\"),\n command: z.string().min(1),\n durationMs: z.number().nonnegative(),\n error: z\n .object({\n message: z.string(),\n name: z.string(),\n })\n .optional(),\n interface: z.string().min(1),\n level: z.string().min(1),\n options: z.record(z.string(), z.unknown()),\n schema: z.literal(\"agent-devkit.usage-log/v1\"),\n status: z.string().min(1),\n timestamp: z.string().min(1),\n});\n\nexport type UsageLogRecord = z.infer<typeof UsageLogRecordSchema>;\n\nexport const TechnicalLogRecordSchema = z.object({\n area: z.string().min(1),\n category: z.literal(\"technical\"),\n command: z.string().min(1).optional(),\n durationMs: z.number().nonnegative().optional(),\n error: z\n .object({\n message: z.string(),\n name: z.string(),\n })\n .optional(),\n event: z.string().min(1),\n interface: z.string().min(1),\n level: z.string().min(1),\n message: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).optional(),\n schema: z.literal(\"agent-devkit.technical-log/v1\"),\n timestamp: z.string().min(1),\n});\n\nexport type TechnicalLogRecord = z.infer<typeof TechnicalLogRecordSchema>;\nexport type LogCategory = \"technical\" | \"usage\";\nexport type LogCategorySelection = LogCategory | \"all\";\n\nexport type LogEvent = (TechnicalLogRecord | UsageLogRecord) & {\n date: string;\n line: number;\n source: string;\n};\n\nexport type LogsFileSummary = {\n category: LogCategory;\n date: string;\n eventCount: number;\n file: string;\n path: string;\n sizeBytes: number;\n};\n\nexport type LogsAnalysisOptions =\n | { action: \"list\"; category?: LogCategorySelection }\n | {\n action: \"read\";\n category?: LogCategorySelection;\n date?: string;\n limit?: number;\n tail?: boolean;\n }\n | {\n action: \"search\";\n category?: LogCategorySelection;\n date?: string;\n limit?: number;\n query: string;\n }\n | { action: \"summary\"; category?: LogCategorySelection; date?: string };\n\nexport const LogsAnalysisOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"list\"),\n category: z.enum([\"usage\", \"technical\", \"all\"]).optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"read\"),\n category: z.enum([\"usage\", \"technical\", \"all\"]).optional(),\n date: z.string().min(1).optional(),\n limit: z.number().int().nonnegative().optional(),\n tail: z.boolean().optional(),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"search\"),\n category: z.enum([\"usage\", \"technical\", \"all\"]).optional(),\n date: z.string().min(1).optional(),\n limit: z.number().int().nonnegative().optional(),\n query: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"summary\"),\n category: z.enum([\"usage\", \"technical\", \"all\"]).optional(),\n date: z.string().min(1).optional(),\n })\n .strict(),\n]);\n\nexport type LogsListResult = {\n action: \"list\";\n files: LogsFileSummary[];\n path: string;\n};\n\nexport type LogsReadResult = {\n action: \"read\";\n events: LogEvent[];\n path: string;\n totalEvents: number;\n};\n\nexport type LogsSearchResult = {\n action: \"search\";\n events: LogEvent[];\n path: string;\n query: string;\n totalMatches: number;\n};\n\nexport type LogsSummaryResult = {\n action: \"summary\";\n averageDurationMs: number;\n byArea: Record<string, number>;\n byCategory: Record<string, number>;\n byCommand: Record<string, number>;\n byStatus: Record<string, number>;\n path: string;\n slowest: LogEvent[];\n totalEvents: number;\n};\n\nexport type LogsAnalysisResult =\n | LogsListResult\n | LogsReadResult\n | LogsSearchResult\n | LogsSummaryResult;\n\nexport const LogsFileSummarySchema = z.object({\n category: z.enum([\"usage\", \"technical\"]),\n date: z.string().min(1),\n eventCount: z.number().int().nonnegative(),\n file: z.string().min(1),\n path: z.string().min(1),\n sizeBytes: z.number().int().nonnegative(),\n});\n\nexport const UsageLogEventSchema = UsageLogRecordSchema.extend({\n date: z.string().min(1),\n line: z.number().int().positive(),\n source: z.string().min(1),\n});\n\nexport const TechnicalLogEventSchema = TechnicalLogRecordSchema.extend({\n date: z.string().min(1),\n line: z.number().int().positive(),\n source: z.string().min(1),\n});\n\nexport const LogEventSchema = z.union([UsageLogEventSchema, TechnicalLogEventSchema]);\n\nexport const LogsAnalysisResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n files: z.array(LogsFileSummarySchema),\n path: z.string().min(1),\n }),\n z.object({\n action: z.literal(\"read\"),\n events: z.array(LogEventSchema),\n path: z.string().min(1),\n totalEvents: z.number().int().nonnegative(),\n }),\n z.object({\n action: z.literal(\"search\"),\n events: z.array(LogEventSchema),\n path: z.string().min(1),\n query: z.string(),\n totalMatches: z.number().int().nonnegative(),\n }),\n z.object({\n action: z.literal(\"summary\"),\n averageDurationMs: z.number().nonnegative(),\n byArea: z.record(z.string(), z.number().int().nonnegative()),\n byCategory: z.record(z.string(), z.number().int().nonnegative()),\n byCommand: z.record(z.string(), z.number().int().nonnegative()),\n byStatus: z.record(z.string(), z.number().int().nonnegative()),\n path: z.string().min(1),\n slowest: z.array(LogEventSchema),\n totalEvents: z.number().int().nonnegative(),\n }),\n]);\n","import { BaseCapabilityService, defineCapabilityConfig } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type LogCategorySelection,\n type LogEvent,\n type LogsAnalysisOptions,\n LogsAnalysisOptionsSchema,\n type LogsAnalysisResult,\n LogsAnalysisResultSchema,\n} from \"./analysis.entities\";\nimport type { LogsAnalysisRepositoryPort } from \"./analysis.repository\";\n\ntype LogsAnalysisServiceDependencies = {\n repository: LogsAnalysisRepositoryPort;\n};\n\nexport const logsAnalysisCapabilityConfig = defineCapabilityConfig({\n id: \"logs.analysis\",\n moduleId: \"logs\",\n name: \"Logs Analysis\",\n description: \"Inspect, search and summarize Agent DevKit usage logs.\",\n kind: \"deterministic\",\n risk: \"read-only\",\n} as const);\n\nfunction countBy(\n events: LogEvent[],\n selector: (event: LogEvent) => string,\n): Record<string, number> {\n return events.reduce<Record<string, number>>((accumulator, event) => {\n const key = selector(event);\n accumulator[key] = (accumulator[key] ?? 0) + 1;\n return accumulator;\n }, {});\n}\n\nfunction limitEvents(events: LogEvent[], limit = 20): LogEvent[] {\n return events.slice(0, Math.max(0, limit));\n}\n\nfunction tailEvents(events: LogEvent[], limit = 20): LogEvent[] {\n const normalizedLimit = Math.max(0, limit);\n return normalizedLimit === 0 ? [] : events.slice(-normalizedLimit);\n}\n\nfunction commandName(event: LogEvent): string {\n return event.category === \"usage\" ? event.command : (event.command ?? event.event);\n}\n\nfunction durationMs(event: LogEvent): number {\n return event.durationMs ?? 0;\n}\n\nfunction statusName(event: LogEvent): string {\n return event.category === \"usage\" ? event.status : event.level;\n}\n\nfunction searchableText(event: LogEvent): string {\n return [\n event.area,\n commandName(event),\n statusName(event),\n event.timestamp,\n event.interface,\n event.category === \"usage\" ? event.argv.join(\" \") : undefined,\n event.category === \"usage\" ? JSON.stringify(event.options) : JSON.stringify(event.metadata),\n event.category === \"technical\" ? event.event : undefined,\n event.category === \"technical\" ? event.message : undefined,\n event.error?.message,\n event.error?.name,\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n}\n\nexport class LogsAnalysisService extends BaseCapabilityService<\n typeof logsAnalysisCapabilityConfig,\n LogsAnalysisServiceDependencies\n> {\n readonly inputSchema = LogsAnalysisOptionsSchema;\n readonly outputSchema = LogsAnalysisResultSchema;\n readonly #repository: LogsAnalysisRepositoryPort;\n\n constructor(dependencies: LogsAnalysisServiceDependencies) {\n super(logsAnalysisCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: LogsAnalysisOptions,\n ): Promise<Result<AgentDevKitErrorCode, LogsAnalysisResult>> {\n if (options.action === \"list\") {\n const files = await this.#repository.listFiles(options.category);\n return files.isOk()\n ? Result.ok({ action: \"list\", files: files.unwrap(), path: this.#repository.logsPath() })\n : Result.fail(files.unwrapError());\n }\n\n const category: LogCategorySelection =\n \"category\" in options ? (options.category ?? \"usage\") : \"usage\";\n const events = await this.#repository.readEvents(\n \"date\" in options ? options.date : undefined,\n category,\n );\n\n if (events.isErr()) {\n return Result.fail(events.unwrapError());\n }\n\n const allEvents = events.unwrap();\n\n if (options.action === \"read\") {\n const selected =\n options.tail === true\n ? tailEvents(allEvents, options.limit)\n : limitEvents(allEvents, options.limit);\n return Result.ok({\n action: \"read\",\n events: selected,\n path: this.#repository.logsPath(),\n totalEvents: allEvents.length,\n });\n }\n\n if (options.action === \"search\") {\n const query = options.query.trim().toLowerCase();\n\n if (query.length === 0) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const matches = allEvents.filter((event) => searchableText(event).includes(query));\n return Result.ok({\n action: \"search\",\n events: limitEvents(matches, options.limit),\n path: this.#repository.logsPath(),\n query: options.query,\n totalMatches: matches.length,\n });\n }\n\n const totalDurationMs = allEvents.reduce((total, event) => total + durationMs(event), 0);\n\n return Result.ok({\n action: \"summary\",\n averageDurationMs:\n allEvents.length === 0 ? 0 : Math.round(totalDurationMs / allEvents.length),\n byArea: countBy(allEvents, (event) => event.area),\n byCategory: countBy(allEvents, (event) => event.category),\n byCommand: countBy(allEvents, commandName),\n byStatus: countBy(allEvents, statusName),\n path: this.#repository.logsPath(),\n slowest: [...allEvents]\n .sort((left, right) => durationMs(right) - durationMs(left))\n .slice(0, 5),\n totalEvents: allEvents.length,\n });\n }\n\n invoke(options: LogsAnalysisOptions): Promise<Result<AgentDevKitErrorCode, LogsAnalysisResult>> {\n return this.execute(options);\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { logsAnalysisCapabilityConfig } from \"./capabilities/analysis/analysis.service\";\n\nexport const logsModuleConfig = defineModuleConfig({\n id: \"logs\",\n name: \"Logs\",\n description: \"Agent DevKit usage log analysis and inspection.\",\n capabilities: [logsAnalysisCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/logs/logs.surface.test.ts\",\n \"src/modules/logs/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n LogsAnalysisRepository,\n type LogsAnalysisRepositoryPort,\n} from \"./capabilities/analysis/analysis.repository\";\nimport { LogsAnalysisService } from \"./capabilities/analysis/analysis.service\";\nimport { logsModuleConfig } from \"./logs.config\";\n\nexport type LogsModuleBindOptions = {\n homeDirectory?: string;\n stateDirectory?: string;\n};\n\nexport type LogsModuleCapabilities = {\n analysis: LogsAnalysisService;\n};\n\nexport type LogsModuleBinding = ModuleBinding<typeof logsModuleConfig, LogsModuleCapabilities>;\n\ntype LogsModuleBinderDependencies = {\n analysisRepository: (options: LogsModuleBindOptions) => LogsAnalysisRepositoryPort;\n};\n\nconst defaultDependencies: LogsModuleBinderDependencies = {\n analysisRepository: (options) => new LogsAnalysisRepository(options),\n};\n\nexport class LogsModuleBinder extends ModuleBinder<\n LogsModuleBindOptions,\n typeof logsModuleConfig,\n LogsModuleCapabilities\n> {\n readonly #dependencies: LogsModuleBinderDependencies;\n\n constructor(dependencies: LogsModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(options: LogsModuleBindOptions): Result<AgentDevKitErrorCode, LogsModuleBinding> {\n return defineModuleBinding({\n config: logsModuleConfig,\n capabilities: {\n analysis: new LogsAnalysisService({\n repository: this.#dependencies.analysisRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createLogsModuleBindings(\n options: LogsModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, LogsModuleBinding> {\n return new LogsModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { logsAnalysisCapabilityConfig } from \"./capabilities/analysis/analysis.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createLogsSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"logs\", moduleDirectory));\n\n return {\n moduleId: \"logs\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([logsAnalysisCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { AssetLoader } from \"../assets/asset_loader\";\nimport type { AssetReader } from \"../bases/assets\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { type ModelCatalog, type ModelCatalogEntry, ModelCatalogSchema } from \"../bases/model\";\nimport { Result } from \"../bases/result\";\n\nexport type ModelCatalogLoaderOptions = {\n loader?: AssetReader;\n};\n\nfunction defaultAssetsRoot(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDirectory, \"../../assets\"),\n resolve(moduleDirectory, \"../src/assets\"),\n resolve(process.cwd(), \"src/assets\"),\n ];\n\n return (\n candidates.find((candidate) => existsSync(candidate)) ?? resolve(process.cwd(), \"src/assets\")\n );\n}\n\nexport class ModelCatalogLoader {\n readonly #loader: AssetReader;\n #catalog?: ModelCatalog;\n\n constructor(options: ModelCatalogLoaderOptions = {}) {\n this.#loader = options.loader ?? new AssetLoader({ rootDirectory: defaultAssetsRoot() });\n }\n\n async load(): Promise<Result<AgentDevKitErrorCode, ModelCatalog>> {\n if (this.#catalog !== undefined) {\n return Result.ok(this.#catalog);\n }\n\n const payload = await this.#loader.loadJson<unknown>(\"models\", \"catalog.json\");\n\n if (payload.isErr()) {\n return Result.fail(payload.unwrapError());\n }\n\n const parsed = ModelCatalogSchema.safeParse(payload.unwrap());\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n this.#catalog = parsed.data;\n return Result.ok(this.#catalog);\n }\n\n async list(): Promise<Result<AgentDevKitErrorCode, ModelCatalogEntry[]>> {\n return (await this.load()).map((catalog) => catalog.models);\n }\n\n async find(id: string): Promise<Result<AgentDevKitErrorCode, ModelCatalogEntry>> {\n const catalog = await this.load();\n\n if (catalog.isErr()) {\n return Result.fail(catalog.unwrapError());\n }\n\n const entry = catalog.unwrap().models.find((model) => model.id === id);\n return entry === undefined ? Result.fail(ErrorCodes.ModelNotFound) : Result.ok(entry);\n }\n\n async recommended(): Promise<Result<AgentDevKitErrorCode, ModelCatalogEntry | undefined>> {\n const catalog = await this.load();\n\n if (catalog.isErr()) {\n return Result.fail(catalog.unwrapError());\n }\n\n const models = catalog.unwrap().models;\n return Result.ok(models.find((model) => model.recommended) ?? models[0]);\n }\n}\n","import { readFile, realpath } from \"node:fs/promises\";\nimport { join, relative, resolve } from \"node:path\";\nimport type { AssetKind, AssetReader } from \"../bases/assets\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { Result } from \"../bases/result\";\n\nexport type AssetLoaderOptions = {\n readonly rootDirectory: string;\n};\n\nconst textDecoder = new TextDecoder();\n\nexport class AssetLoader implements AssetReader {\n readonly #rootDirectory: string;\n\n constructor(options: AssetLoaderOptions) {\n this.#rootDirectory = resolve(options.rootDirectory);\n }\n\n async loadBinary(\n kind: AssetKind,\n name: string,\n ): Promise<Result<AgentDevKitErrorCode, Uint8Array>> {\n const target = await this.#resolve(kind, name);\n\n if (target.isErr()) {\n return Result.fail(target.unwrapError());\n }\n\n try {\n return Result.ok(await readFile(target.unwrap()));\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n\n async loadJson<TValue>(\n kind: AssetKind,\n name: string,\n ): Promise<Result<AgentDevKitErrorCode, TValue>> {\n const content = await this.loadText(kind, name);\n\n if (content.isErr()) {\n return Result.fail(content.unwrapError());\n }\n\n try {\n return Result.ok(JSON.parse(content.unwrap()) as TValue);\n } catch {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n }\n\n async loadText(kind: AssetKind, name: string): Promise<Result<AgentDevKitErrorCode, string>> {\n const binary = await this.loadBinary(kind, name);\n\n if (binary.isErr()) {\n return Result.fail(binary.unwrapError());\n }\n\n return Result.ok(textDecoder.decode(binary.unwrap()));\n }\n\n async #resolve(kind: AssetKind, name: string): Promise<Result<AgentDevKitErrorCode, string>> {\n const target = resolve(join(this.#rootDirectory, kind, name));\n const pathFromRoot = relative(this.#rootDirectory, target);\n\n if (pathFromRoot.startsWith(\"..\") || pathFromRoot === \"\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n try {\n const [realRoot, realTarget] = await Promise.all([\n realpath(this.#rootDirectory),\n realpath(target),\n ]);\n const realPathFromRoot = relative(realRoot, realTarget);\n\n if (realPathFromRoot.startsWith(\"..\") || realPathFromRoot === \"\") {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok(realTarget);\n } catch {\n return Result.fail(ErrorCodes.AssetReadFailed);\n }\n }\n}\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport type { InstalledModel, ModelCatalogEntry } from \"../../../../infra/bases/model\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport { ModelCatalogLoader } from \"../../../../infra/models/model_catalog\";\nimport { type ModelDownloadProgress, ModelStore } from \"../../../../infra/models/model_store\";\nimport type { ModelView } from \"./registry.entities\";\n\nexport type ModelInstallProgress = (progress: ModelDownloadProgress) => void;\n\nexport interface ModelsRegistryRepositoryPort extends CapabilityRepositoryPort {\n directory(): string;\n defaultId(): Promise<Result<AgentDevKitErrorCode, string | undefined>>;\n install(\n id: string,\n onProgress?: ModelInstallProgress,\n ): Promise<Result<AgentDevKitErrorCode, ModelView>>;\n listModels(): Promise<Result<AgentDevKitErrorCode, ModelView[]>>;\n setDefault(id: string, role?: \"agent\" | \"chat\"): Promise<Result<AgentDevKitErrorCode, string>>;\n statusModels(id?: string): Promise<Result<AgentDevKitErrorCode, ModelView[]>>;\n uninstall(id: string): Promise<Result<AgentDevKitErrorCode, { id: string; removed: boolean }>>;\n update(id?: string): Promise<Result<AgentDevKitErrorCode, ModelView[]>>;\n}\n\nexport type ModelsRegistryRepositoryOptions = {\n catalog?: ModelCatalogLoader;\n store?: ModelStore;\n stateDirectory?: string;\n};\n\nexport class ModelsRegistryRepository implements ModelsRegistryRepositoryPort {\n readonly repositoryId = \"models.registry.repository\";\n readonly #catalog: ModelCatalogLoader;\n readonly #store: ModelStore;\n\n constructor(options: ModelsRegistryRepositoryOptions = {}) {\n this.#catalog = options.catalog ?? new ModelCatalogLoader();\n this.#store = options.store ?? new ModelStore({ stateDirectory: options.stateDirectory });\n }\n\n directory(): string {\n return this.#store.directory();\n }\n\n defaultId(): Promise<Result<AgentDevKitErrorCode, string | undefined>> {\n return this.#store.getDefault();\n }\n\n async listModels(): Promise<Result<AgentDevKitErrorCode, ModelView[]>> {\n const catalog = await this.#catalog.list();\n return catalog.isErr()\n ? Result.fail(catalog.unwrapError())\n : this.#buildViews(catalog.unwrap());\n }\n\n async statusModels(id?: string): Promise<Result<AgentDevKitErrorCode, ModelView[]>> {\n const catalog = await this.#catalog.list();\n\n if (catalog.isErr()) {\n return Result.fail(catalog.unwrapError());\n }\n\n const entries =\n id === undefined ? catalog.unwrap() : catalog.unwrap().filter((entry) => entry.id === id);\n\n if (id !== undefined && entries.length === 0) {\n return Result.fail(ErrorCodes.ModelNotFound);\n }\n\n return this.#buildViews(entries);\n }\n\n async install(\n id: string,\n onProgress?: ModelInstallProgress,\n ): Promise<Result<AgentDevKitErrorCode, ModelView>> {\n const entry = await this.#catalog.find(id);\n\n if (entry.isErr()) {\n return Result.fail(entry.unwrapError());\n }\n\n const installed = await this.#store.install(entry.unwrap(), { onProgress });\n\n if (installed.isErr()) {\n return Result.fail(installed.unwrapError());\n }\n\n const defaultId = await this.#store.getDefault();\n\n return Result.ok(\n this.#toView(\n entry.unwrap(),\n installed.unwrap(),\n defaultId.isOk() ? defaultId.unwrap() : undefined,\n ),\n );\n }\n\n async uninstall(\n id: string,\n ): Promise<Result<AgentDevKitErrorCode, { id: string; removed: boolean }>> {\n const removed = await this.#store.uninstall(id);\n\n return removed.isOk()\n ? Result.ok({ id, removed: removed.unwrap().removed })\n : Result.fail(removed.unwrapError());\n }\n\n async update(id?: string): Promise<Result<AgentDevKitErrorCode, ModelView[]>> {\n if (id !== undefined) {\n const view = await this.install(id);\n return view.isOk() ? Result.ok([view.unwrap()]) : Result.fail(view.unwrapError());\n }\n\n const installedIds = await this.#store.installedIds();\n\n if (installedIds.isErr()) {\n return Result.fail(installedIds.unwrapError());\n }\n\n const views: ModelView[] = [];\n\n for (const modelId of installedIds.unwrap()) {\n const entry = await this.#catalog.find(modelId);\n\n if (entry.isErr()) {\n continue;\n }\n\n const verified = await this.#store.verify(modelId, entry.unwrap().sha256);\n\n if (verified.isOk() && verified.unwrap() === false) {\n const repaired = await this.install(modelId);\n\n if (repaired.isOk()) {\n views.push(repaired.unwrap());\n continue;\n }\n }\n\n const status = await this.#store.status(modelId);\n const defaultId = await this.#store.getDefault();\n views.push(\n this.#toView(\n entry.unwrap(),\n status.isOk() ? status.unwrap() : undefined,\n defaultId.isOk() ? defaultId.unwrap() : undefined,\n ),\n );\n }\n\n return Result.ok(views);\n }\n\n async setDefault(\n id: string,\n role?: \"agent\" | \"chat\",\n ): Promise<Result<AgentDevKitErrorCode, string>> {\n const set = await this.#store.setDefault(id, role);\n return set.isOk() ? Result.ok(id) : Result.fail(set.unwrapError());\n }\n\n async #buildViews(\n entries: ModelCatalogEntry[],\n ): Promise<Result<AgentDevKitErrorCode, ModelView[]>> {\n const defaultId = await this.#store.getDefault();\n const resolvedDefault = defaultId.isOk() ? defaultId.unwrap() : undefined;\n const views: ModelView[] = [];\n\n for (const entry of entries) {\n const status = await this.#store.status(entry.id);\n views.push(this.#toView(entry, status.isOk() ? status.unwrap() : undefined, resolvedDefault));\n }\n\n return Result.ok(views);\n }\n\n #toView(\n entry: ModelCatalogEntry,\n installed: InstalledModel | undefined,\n defaultId: string | undefined,\n ): ModelView {\n return {\n id: entry.id,\n name: entry.name,\n family: entry.family,\n parameters: entry.parameters,\n quantization: entry.quantization,\n sizeBytes: installed?.sizeBytes ?? entry.sizeBytes,\n contextLength: entry.contextLength,\n license: entry.license,\n recommended: entry.recommended,\n installed: installed !== undefined,\n isDefault: defaultId === entry.id,\n path: installed?.path,\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const ModelsRegistryOptionsSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"list\") }).strict(),\n z.object({ action: z.literal(\"status\"), id: z.string().min(1).optional() }).strict(),\n z.object({ action: z.literal(\"install\"), id: z.string().min(1) }).strict(),\n z.object({ action: z.literal(\"uninstall\"), id: z.string().min(1) }).strict(),\n z.object({ action: z.literal(\"update\"), id: z.string().min(1).optional() }).strict(),\n z\n .object({\n action: z.literal(\"use\"),\n id: z.string().min(1),\n role: z.enum([\"agent\", \"chat\"]).optional(),\n })\n .strict(),\n]);\n\nexport type ModelsRegistryOptions =\n | { action: \"list\" }\n | { action: \"status\"; id?: string }\n | { action: \"install\"; id: string }\n | { action: \"uninstall\"; id: string }\n | { action: \"update\"; id?: string }\n | { action: \"use\"; id: string; role?: \"agent\" | \"chat\" };\n\nexport const ModelViewSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n family: z.string().min(1),\n parameters: z.string().min(1),\n quantization: z.string().min(1),\n sizeBytes: z.number().int().nonnegative(),\n contextLength: z.number().int().positive(),\n license: z.string().min(1),\n recommended: z.boolean(),\n installed: z.boolean(),\n isDefault: z.boolean(),\n path: z.string().min(1).optional(),\n});\n\nexport type ModelView = z.infer<typeof ModelViewSchema>;\n\nexport const ModelsRegistryResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"list\"),\n directory: z.string().min(1),\n models: z.array(ModelViewSchema),\n defaultId: z.string().min(1).optional(),\n }),\n z.object({\n action: z.literal(\"status\"),\n directory: z.string().min(1),\n models: z.array(ModelViewSchema),\n }),\n z.object({\n action: z.literal(\"install\"),\n directory: z.string().min(1),\n model: ModelViewSchema,\n }),\n z.object({\n action: z.literal(\"uninstall\"),\n directory: z.string().min(1),\n id: z.string().min(1),\n removed: z.boolean(),\n }),\n z.object({\n action: z.literal(\"update\"),\n directory: z.string().min(1),\n models: z.array(ModelViewSchema),\n }),\n z.object({\n action: z.literal(\"use\"),\n directory: z.string().min(1),\n defaultId: z.string().min(1),\n role: z.enum([\"agent\", \"chat\"]).optional(),\n }),\n]);\n\nexport type ModelsRegistryResult =\n | { action: \"list\"; directory: string; models: ModelView[]; defaultId?: string }\n | { action: \"status\"; directory: string; models: ModelView[] }\n | { action: \"install\"; directory: string; model: ModelView }\n | { action: \"uninstall\"; directory: string; id: string; removed: boolean }\n | { action: \"update\"; directory: string; models: ModelView[] }\n | { action: \"use\"; directory: string; defaultId: string; role?: \"agent\" | \"chat\" };\n","import {\n BaseCapabilityService,\n type CapabilityApproval,\n type CapabilityEffect,\n type CapabilityInvocationContext,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type ModelsRegistryOptions,\n ModelsRegistryOptionsSchema,\n type ModelsRegistryResult,\n ModelsRegistryResultSchema,\n} from \"./registry.entities\";\nimport type { ModelsRegistryRepositoryPort } from \"./registry.repository\";\n\ntype ModelsRegistryServiceDependencies = {\n repository: ModelsRegistryRepositoryPort;\n};\n\nexport const modelsRegistryCapabilityConfig = defineCapabilityConfig({\n id: \"models.registry\",\n moduleId: \"models\",\n name: \"Models registry\",\n description: \"List, install, update, remove and select local LLM model artifacts.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nexport class ModelsRegistryService extends BaseCapabilityService<\n typeof modelsRegistryCapabilityConfig,\n ModelsRegistryServiceDependencies\n> {\n readonly inputSchema = ModelsRegistryOptionsSchema;\n readonly outputSchema = ModelsRegistryResultSchema;\n readonly #repository: ModelsRegistryRepositoryPort;\n\n constructor(dependencies: ModelsRegistryServiceDependencies) {\n super(modelsRegistryCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: ModelsRegistryOptions,\n ): Promise<Result<AgentDevKitErrorCode, ModelsRegistryResult>> {\n const parsed = this.inputSchema.safeParse(options);\n\n if (!parsed.success) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return this.#run(parsed.data);\n }\n\n invoke(\n options: ModelsRegistryOptions,\n _context: CapabilityInvocationContext,\n ): Promise<Result<AgentDevKitErrorCode, ModelsRegistryResult>> {\n return this.execute(options);\n }\n\n override approvalForInput(input: ModelsRegistryOptions): CapabilityApproval {\n if (input.action === \"list\" || input.action === \"status\") {\n return { reason: \"Models registry read action.\", required: false };\n }\n\n return {\n reason: \"Models registry action writes local model state.\",\n required: true,\n };\n }\n\n override effectsForInput(input: ModelsRegistryOptions): CapabilityEffect[] {\n if (input.action === \"list\" || input.action === \"status\") {\n return [{ operation: \"read\", scope: \"none\" }];\n }\n\n if (input.action === \"uninstall\") {\n return [{ operation: \"delete\", scope: \"global\" }];\n }\n\n return [{ operation: \"write\", scope: \"global\" }];\n }\n\n async #run(\n options: ModelsRegistryOptions,\n ): Promise<Result<AgentDevKitErrorCode, ModelsRegistryResult>> {\n const directory = this.#repository.directory();\n\n if (options.action === \"list\") {\n const models = await this.#repository.listModels();\n\n if (models.isErr()) {\n return Result.fail(models.unwrapError());\n }\n\n const defaultId = await this.#repository.defaultId();\n\n return Result.ok({\n action: \"list\",\n directory,\n models: models.unwrap(),\n defaultId: defaultId.isOk() ? defaultId.unwrap() : undefined,\n });\n }\n\n if (options.action === \"status\") {\n const models = await this.#repository.statusModels(options.id);\n\n return models.isOk()\n ? Result.ok({ action: \"status\", directory, models: models.unwrap() })\n : Result.fail(models.unwrapError());\n }\n\n if (options.action === \"install\") {\n const model = await this.#repository.install(options.id);\n\n return model.isOk()\n ? Result.ok({ action: \"install\", directory, model: model.unwrap() })\n : Result.fail(model.unwrapError());\n }\n\n if (options.action === \"uninstall\") {\n const removed = await this.#repository.uninstall(options.id);\n\n return removed.isOk()\n ? Result.ok({\n action: \"uninstall\",\n directory,\n id: removed.unwrap().id,\n removed: removed.unwrap().removed,\n })\n : Result.fail(removed.unwrapError());\n }\n\n if (options.action === \"update\") {\n const models = await this.#repository.update(options.id);\n\n return models.isOk()\n ? Result.ok({ action: \"update\", directory, models: models.unwrap() })\n : Result.fail(models.unwrapError());\n }\n\n const defaultId = await this.#repository.setDefault(options.id, options.role);\n\n return defaultId.isOk()\n ? Result.ok({ action: \"use\", directory, defaultId: defaultId.unwrap(), role: options.role })\n : Result.fail(defaultId.unwrapError());\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { modelsRegistryCapabilityConfig } from \"./capabilities/registry/registry.service\";\n\nexport const modelsModuleConfig = defineModuleConfig({\n id: \"models\",\n name: \"Models\",\n description: \"Local LLM model catalog and lifecycle: list, install, update, remove and select.\",\n capabilities: [modelsRegistryCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/models/models.surface.test.ts\",\n \"src/modules/models/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n ModelsRegistryRepository,\n type ModelsRegistryRepositoryPort,\n} from \"./capabilities/registry/registry.repository\";\nimport { ModelsRegistryService } from \"./capabilities/registry/registry.service\";\nimport { modelsModuleConfig } from \"./models.config\";\n\nexport type ModelsModuleBindOptions = {\n homeDirectory?: string;\n stateDirectory?: string;\n};\n\nexport type ModelsModuleCapabilities = {\n registry: ModelsRegistryService;\n};\n\nexport type ModelsModuleBinding = ModuleBinding<\n typeof modelsModuleConfig,\n ModelsModuleCapabilities\n>;\n\ntype ModelsModuleBinderDependencies = {\n registryRepository: (options: ModelsModuleBindOptions) => ModelsRegistryRepositoryPort;\n};\n\nfunction stateDirectory(options: ModelsModuleBindOptions): string | undefined {\n return (\n options.stateDirectory ??\n (options.homeDirectory ? `${options.homeDirectory}/.agent-devkit` : undefined)\n );\n}\n\nconst defaultDependencies: ModelsModuleBinderDependencies = {\n registryRepository: (options) =>\n new ModelsRegistryRepository({ stateDirectory: stateDirectory(options) }),\n};\n\nexport class ModelsModuleBinder extends ModuleBinder<\n ModelsModuleBindOptions,\n typeof modelsModuleConfig,\n ModelsModuleCapabilities\n> {\n readonly #dependencies: ModelsModuleBinderDependencies;\n\n constructor(dependencies: ModelsModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: ModelsModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, ModelsModuleBinding> {\n return defineModuleBinding({\n config: modelsModuleConfig,\n capabilities: {\n registry: new ModelsRegistryService({\n repository: this.#dependencies.registryRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createModelsModuleBindings(\n options: ModelsModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, ModelsModuleBinding> {\n return new ModelsModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { modelsRegistryCapabilityConfig } from \"./capabilities/registry/registry.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createModelsSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"models\", moduleDirectory));\n\n return {\n moduleId: \"models\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([modelsRegistryCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { randomBytes } from \"node:crypto\";\nimport { access, chmod, mkdir, readFile, rename, unlink, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { EncryptedPayload, SecretCrypto } from \"../bases/crypto\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { Logger } from \"../bases/logger\";\nimport { NullLogger } from \"../bases/logger\";\nimport { Result } from \"../bases/result\";\nimport { errorCause } from \"../helpers/error_cause\";\n\nexport type SecretMetadata = {\n createdAt: string;\n name: string;\n service?: string;\n updatedAt: string;\n};\n\nexport type SecretAuditAction = \"created\" | \"removed\" | \"revealed\" | \"rotated\" | \"updated\";\n\nexport type SecretAuditEntry = {\n action: SecretAuditAction;\n name: string;\n service?: string;\n timestamp: string;\n};\n\nexport type StoredSecret = SecretMetadata & {\n encrypted: EncryptedPayload;\n};\n\nexport type SecretSummary = SecretMetadata;\nexport type RevealedSecret = {\n secret: SecretSummary;\n value: string;\n};\n\ntype VaultFile = {\n audit: SecretAuditEntry[];\n schema: \"agent-devkit.secret-vault/v1\";\n secrets: StoredSecret[];\n};\n\nexport type EncryptedSecretStoreOptions = {\n clock?: () => Date;\n crypto: SecretCrypto;\n logger?: Logger;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nfunction defaultVault(): VaultFile {\n return {\n audit: [],\n schema: \"agent-devkit.secret-vault/v1\",\n secrets: [],\n };\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: unknown }).code === \"ENOENT\"\n );\n}\n\nfunction sortSecrets(left: SecretSummary, right: SecretSummary): number {\n return left.name.localeCompare(right.name);\n}\n\nexport class EncryptedSecretStore {\n readonly #clock: () => Date;\n readonly #crypto: SecretCrypto;\n readonly #legacyVaultPath: string;\n readonly #logger: Logger;\n readonly #vaultPath: string;\n\n constructor(options: EncryptedSecretStoreOptions) {\n const stateDirectory = options.stateDirectory ?? defaultStateDirectory();\n this.#clock = options.clock ?? (() => new Date());\n this.#crypto = options.crypto;\n this.#logger = options.logger ?? new NullLogger();\n this.#vaultPath = join(stateDirectory, \"data\", \"secrets\", \"vault.json\");\n this.#legacyVaultPath = join(stateDirectory, \"secrets\", \"vault.json\");\n }\n\n path(): string {\n return this.#vaultPath;\n }\n\n async get(name: string): Promise<Result<AgentDevKitErrorCode, string>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const secret = vault.unwrap().secrets.find((candidate) => candidate.name === name);\n\n if (secret === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return this.#crypto.decryptString(secret.encrypted);\n }\n\n async reveal(name: string): Promise<Result<AgentDevKitErrorCode, RevealedSecret>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const existing = vault.unwrap();\n const secret = existing.secrets.find((candidate) => candidate.name === name);\n\n if (secret === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const value = await this.#crypto.decryptString(secret.encrypted);\n\n if (value.isErr()) {\n return Result.fail(value.unwrapError());\n }\n\n const save = await this.#writeVault({\n ...existing,\n audit: [...existing.audit, this.#auditEntry(\"revealed\", secret)],\n });\n\n return save.isOk()\n ? Result.ok({\n secret: this.#summary(secret),\n value: value.unwrap(),\n })\n : Result.fail(save.unwrapError());\n }\n\n async list(): Promise<Result<AgentDevKitErrorCode, SecretSummary[]>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n return Result.ok(\n vault\n .unwrap()\n .secrets.map((secret) => this.#summary(secret))\n .sort(sortSecrets),\n );\n }\n\n async audit(name?: string): Promise<Result<AgentDevKitErrorCode, SecretAuditEntry[]>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const events = vault\n .unwrap()\n .audit.filter((entry) => name === undefined || entry.name === name)\n .sort((left, right) => left.timestamp.localeCompare(right.timestamp));\n\n return Result.ok(events);\n }\n\n async remove(name: string): Promise<Result<AgentDevKitErrorCode, { removed: boolean }>> {\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const existing = vault.unwrap();\n const removed = existing.secrets.find((secret) => secret.name === name);\n const next: VaultFile = {\n ...existing,\n audit:\n removed === undefined\n ? existing.audit\n : [...existing.audit, this.#auditEntry(\"removed\", removed)],\n secrets: existing.secrets.filter((secret) => secret.name !== name),\n };\n const save = await this.#writeVault(next);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n return Result.ok({ removed: next.secrets.length !== existing.secrets.length });\n }\n\n async rotate(\n name: string,\n value: string,\n metadata: { service?: string } = {},\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>> {\n if (name.trim().length === 0 || value.length === 0) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const existing = vault.unwrap().secrets.find((secret) => secret.name === name);\n\n if (existing === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const encrypted = await this.#crypto.encryptString(value);\n\n if (encrypted.isErr()) {\n return Result.fail(encrypted.unwrapError());\n }\n\n const now = this.#now();\n const secret: StoredSecret = {\n createdAt: existing.createdAt,\n encrypted: encrypted.unwrap(),\n name,\n service: metadata.service ?? existing.service,\n updatedAt: now,\n };\n const next: VaultFile = {\n schema: \"agent-devkit.secret-vault/v1\",\n audit: [...vault.unwrap().audit, this.#auditEntry(\"rotated\", secret, now)],\n secrets: [...vault.unwrap().secrets.filter((candidate) => candidate.name !== name), secret],\n };\n const save = await this.#writeVault(next);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n return Result.ok({\n createdAt: secret.createdAt,\n name: secret.name,\n service: secret.service,\n updatedAt: secret.updatedAt,\n });\n }\n\n async set(\n name: string,\n value: string,\n metadata: { service?: string } = {},\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>> {\n if (name.trim().length === 0 || value.length === 0) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n const vault = await this.#readVault();\n\n if (vault.isErr()) {\n return Result.fail(vault.unwrapError());\n }\n\n const encrypted = await this.#crypto.encryptString(value);\n\n if (encrypted.isErr()) {\n return Result.fail(encrypted.unwrapError());\n }\n\n const now = this.#now();\n const existing = vault.unwrap().secrets.find((secret) => secret.name === name);\n const secret: StoredSecret = {\n createdAt: existing?.createdAt ?? now,\n encrypted: encrypted.unwrap(),\n name,\n service: metadata.service ?? existing?.service,\n updatedAt: now,\n };\n const next: VaultFile = {\n schema: \"agent-devkit.secret-vault/v1\",\n audit: [\n ...vault.unwrap().audit,\n this.#auditEntry(existing === undefined ? \"created\" : \"updated\", secret, now),\n ],\n secrets: [...vault.unwrap().secrets.filter((candidate) => candidate.name !== name), secret],\n };\n const save = await this.#writeVault(next);\n\n if (save.isErr()) {\n return Result.fail(save.unwrapError());\n }\n\n return Result.ok({\n createdAt: secret.createdAt,\n name: secret.name,\n service: secret.service,\n updatedAt: secret.updatedAt,\n });\n }\n\n async #readVault(): Promise<Result<AgentDevKitErrorCode, VaultFile>> {\n try {\n await access(this.#vaultPath);\n } catch (error) {\n if (!isNotFoundError(error)) {\n this.#logger.write(\"error\", \"Secret vault access failed.\", {\n error: errorCause(error),\n path: this.#vaultPath,\n });\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n try {\n await access(this.#legacyVaultPath);\n } catch (legacyError) {\n if (!isNotFoundError(legacyError)) {\n this.#logger.write(\"error\", \"Legacy secret vault access failed.\", {\n error: errorCause(legacyError),\n path: this.#legacyVaultPath,\n });\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n\n return Result.ok(defaultVault());\n }\n\n const legacy = await this.#readVaultFile(this.#legacyVaultPath);\n\n if (legacy.isErr()) {\n return Result.fail(legacy.unwrapError());\n }\n\n const migrate = await this.#writeVault(legacy.unwrap());\n\n if (migrate.isErr()) {\n return Result.fail(migrate.unwrapError());\n }\n\n this.#logger.write(\"info\", \"Secret vault migrated to canonical data directory.\", {\n from: this.#legacyVaultPath,\n to: this.#vaultPath,\n });\n\n return legacy;\n }\n\n return this.#readVaultFile(this.#vaultPath);\n }\n\n async #readVaultFile(path: string): Promise<Result<AgentDevKitErrorCode, VaultFile>> {\n try {\n const payload = JSON.parse(await readFile(path, \"utf8\")) as Partial<VaultFile>;\n\n if (payload.schema !== \"agent-devkit.secret-vault/v1\" || !Array.isArray(payload.secrets)) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok({\n audit: Array.isArray(payload.audit) ? payload.audit : [],\n schema: payload.schema,\n secrets: payload.secrets,\n });\n } catch (error) {\n this.#logger.write(\"error\", \"Secret vault read failed.\", {\n error: errorCause(error),\n path,\n });\n return Result.fail(ErrorCodes.FileReadFailed);\n }\n }\n\n async #writeVault(vault: VaultFile): Promise<Result<AgentDevKitErrorCode, void>> {\n const directory = dirname(this.#vaultPath);\n const tempPath = join(directory, `.vault-${process.pid}-${randomBytes(6).toString(\"hex\")}.tmp`);\n\n try {\n await mkdir(directory, { recursive: true, mode: 0o700 });\n await writeFile(tempPath, `${JSON.stringify(vault, null, 2)}\\n`, {\n flag: \"wx\",\n mode: 0o600,\n });\n if (process.platform !== \"win32\") {\n await chmod(tempPath, 0o600);\n }\n await rename(tempPath, this.#vaultPath);\n return Result.ok(undefined);\n } catch (error) {\n await unlink(tempPath).catch(() => undefined);\n this.#logger.write(\"error\", \"Secret vault write failed.\", {\n error: errorCause(error),\n path: this.#vaultPath,\n });\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n #summary(secret: SecretMetadata): SecretSummary {\n return {\n createdAt: secret.createdAt,\n name: secret.name,\n service: secret.service,\n updatedAt: secret.updatedAt,\n };\n }\n\n #auditEntry(action: SecretAuditAction, secret: SecretMetadata, timestamp = this.#now()) {\n return {\n action,\n name: secret.name,\n service: secret.service,\n timestamp,\n };\n }\n\n #now(): string {\n return this.#clock().toISOString();\n }\n}\n","import type { AgentDevKitErrorCode } from \"./errors\";\nimport type { Result } from \"./result\";\n\nexport type LogLevel = \"debug\" | \"error\" | \"info\" | \"warn\";\nexport type UsageLogArea = \"project\" | \"self\" | \"system\" | \"user\";\nexport type UsageLogInterface = \"cli\" | \"mcp\" | \"tui\";\nexport type UsageLogStatus = \"failed\" | \"succeeded\";\n\nexport interface Logger {\n write(level: LogLevel, message: string, metadata?: Record<string, unknown>): void;\n}\n\nexport type UsageLogInput = {\n area: UsageLogArea;\n argv: string[];\n command: string;\n createStateIfMissing?: boolean;\n durationMs: number;\n error?: {\n message: string;\n name: string;\n };\n interface: UsageLogInterface;\n options: Record<string, unknown>;\n status: UsageLogStatus;\n};\n\nexport type UsageLogEvent = UsageLogInput & {\n category: \"usage\";\n level: \"error\" | \"info\";\n schema: \"agent-devkit.usage-log/v1\";\n timestamp: string;\n};\n\nexport interface UsageLogger {\n writeUsage(event: UsageLogInput): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nexport type TechnicalLogInput = {\n area: UsageLogArea;\n command?: string;\n createStateIfMissing?: boolean;\n durationMs?: number;\n error?: {\n message: string;\n name: string;\n };\n event: string;\n interface: UsageLogInterface;\n level: LogLevel;\n message: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TechnicalLogEvent = TechnicalLogInput & {\n category: \"technical\";\n schema: \"agent-devkit.technical-log/v1\";\n timestamp: string;\n};\n\nexport interface TechnicalLogger {\n writeTechnical(event: TechnicalLogInput): Promise<Result<AgentDevKitErrorCode, void>>;\n}\n\nexport class ConsoleLogger implements Logger {\n write(level: LogLevel, message: string, metadata?: Record<string, unknown>): void {\n const payload = metadata ? ` ${JSON.stringify(metadata)}` : \"\";\n console.error(`[${level}] ${message}${payload}`);\n }\n}\n\nexport class NullLogger implements Logger {\n write(): void {\n // Intentionally empty.\n }\n}\n","export type ErrorCause = {\n code?: string;\n message: string;\n name: string;\n};\n\nexport function errorCause(error: unknown): ErrorCause {\n if (error instanceof Error) {\n const code =\n typeof (error as NodeJS.ErrnoException).code === \"string\"\n ? (error as NodeJS.ErrnoException).code\n : undefined;\n\n return {\n code,\n message: error.message,\n name: error.name,\n };\n }\n\n return {\n message: String(error),\n name: \"Error\",\n };\n}\n","import { randomBytes } from \"node:crypto\";\nimport { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { SecretKeyProvider } from \"../bases/crypto\";\nimport type { Logger } from \"../bases/logger\";\nimport { NullLogger } from \"../bases/logger\";\nimport { errorCause } from \"../helpers/error_cause\";\n\nexport type LocalMasterKeyProviderOptions = {\n logger?: Logger;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nexport class LocalMasterKeyProvider implements SecretKeyProvider {\n readonly #legacyKeyPaths: string[];\n readonly #keyPath: string;\n readonly #logger: Logger;\n\n constructor(options: LocalMasterKeyProviderOptions = {}) {\n const stateDirectory = options.stateDirectory ?? defaultStateDirectory();\n this.#keyPath = join(stateDirectory, \"keys\", \"master.key\");\n this.#legacyKeyPaths = [\n join(stateDirectory, \"keys\", \"local.key\"),\n join(stateDirectory, \"secrets\", \"master.key\"),\n join(stateDirectory, \"master.key\"),\n ];\n this.#logger = options.logger ?? new NullLogger();\n }\n\n keyId(): string {\n return \"local\";\n }\n\n async getKey(): Promise<Buffer> {\n try {\n return Buffer.from((await readFile(this.#keyPath, \"utf8\")).trim(), \"base64\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n this.#logger.write(\"error\", \"Local master key read failed.\", {\n error: errorCause(error),\n path: this.#keyPath,\n });\n throw error;\n }\n }\n\n const legacyKey = await this.#readLegacyKey();\n\n if (legacyKey !== undefined) {\n return this.#persistKey(legacyKey);\n }\n\n const key = randomBytes(32);\n return this.#persistKey(key);\n }\n\n async #persistKey(key: Buffer): Promise<Buffer> {\n await mkdir(dirname(this.#keyPath), { recursive: true, mode: 0o700 });\n\n try {\n await writeFile(this.#keyPath, `${key.toString(\"base64\")}\\n`, { flag: \"wx\", mode: 0o600 });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"EEXIST\") {\n return Buffer.from((await readFile(this.#keyPath, \"utf8\")).trim(), \"base64\");\n }\n\n this.#logger.write(\"error\", \"Local master key creation failed.\", {\n error: errorCause(error),\n path: this.#keyPath,\n });\n throw error;\n }\n\n if (process.platform !== \"win32\") {\n await chmod(dirname(this.#keyPath), 0o700);\n await chmod(this.#keyPath, 0o600);\n }\n\n return key;\n }\n\n async #readLegacyKey(): Promise<Buffer | undefined> {\n for (const path of this.#legacyKeyPaths) {\n try {\n return Buffer.from((await readFile(path, \"utf8\")).trim(), \"base64\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n this.#logger.write(\"error\", \"Legacy local master key read failed.\", {\n error: errorCause(error),\n path,\n });\n throw error;\n }\n }\n }\n\n return undefined;\n }\n}\n","import { createCipheriv, createDecipheriv, randomBytes } from \"node:crypto\";\nimport type { EncryptedPayload, SecretCrypto, SecretKeyProvider } from \"../bases/crypto\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { Logger } from \"../bases/logger\";\nimport { NullLogger } from \"../bases/logger\";\nimport { Result } from \"../bases/result\";\nimport { errorCause } from \"../helpers/error_cause\";\n\nexport type LocalSecretCryptoOptions = {\n clock?: () => Date;\n keyProvider: SecretKeyProvider;\n logger?: Logger;\n};\n\nfunction keyId(provider: SecretKeyProvider): string {\n return provider.keyId?.() ?? \"local\";\n}\n\nasync function resolveKey(provider: SecretKeyProvider): Promise<Buffer> {\n const key = await provider.getKey();\n return Buffer.isBuffer(key) ? key : Buffer.from(key);\n}\n\nexport class LocalSecretCrypto implements SecretCrypto {\n readonly #clock: () => Date;\n readonly #keyProvider: SecretKeyProvider;\n readonly #logger: Logger;\n\n constructor(options: LocalSecretCryptoOptions) {\n this.#clock = options.clock ?? (() => new Date());\n this.#keyProvider = options.keyProvider;\n this.#logger = options.logger ?? new NullLogger();\n }\n\n async encryptString(value: string): Promise<Result<AgentDevKitErrorCode, EncryptedPayload>> {\n try {\n const key = await resolveKey(this.#keyProvider);\n\n if (key.length !== 32) {\n return Result.fail(ErrorCodes.EncryptionFailed);\n }\n\n const iv = randomBytes(12);\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n const ciphertext = Buffer.concat([cipher.update(value, \"utf8\"), cipher.final()]);\n const authTag = cipher.getAuthTag();\n\n return Result.ok({\n algorithm: \"aes-256-gcm\",\n authTag: authTag.toString(\"base64\"),\n ciphertext: ciphertext.toString(\"base64\"),\n createdAt: this.#clock().toISOString(),\n iv: iv.toString(\"base64\"),\n keyId: keyId(this.#keyProvider),\n schema: \"agent-devkit.encrypted-payload/v1\",\n });\n } catch (error) {\n this.#logger.write(\"error\", \"Secret encryption failed.\", { error: errorCause(error) });\n return Result.fail(ErrorCodes.EncryptionFailed);\n }\n }\n\n async decryptString(payload: EncryptedPayload): Promise<Result<AgentDevKitErrorCode, string>> {\n try {\n const key = await resolveKey(this.#keyProvider);\n\n if (\n key.length !== 32 ||\n payload.algorithm !== \"aes-256-gcm\" ||\n payload.keyId !== keyId(this.#keyProvider)\n ) {\n return Result.fail(ErrorCodes.DecryptionFailed);\n }\n\n const decipher = createDecipheriv(\"aes-256-gcm\", key, Buffer.from(payload.iv, \"base64\"));\n decipher.setAuthTag(Buffer.from(payload.authTag, \"base64\"));\n\n const decrypted = Buffer.concat([\n decipher.update(Buffer.from(payload.ciphertext, \"base64\")),\n decipher.final(),\n ]);\n\n return Result.ok(decrypted.toString(\"utf8\"));\n } catch (error) {\n this.#logger.write(\"error\", \"Secret decryption failed.\", { error: errorCause(error) });\n return Result.fail(ErrorCodes.DecryptionFailed);\n }\n }\n}\n","import type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport type { Result } from \"../../../../infra/bases/result\";\nimport type {\n EncryptedSecretStore,\n RevealedSecret,\n SecretAuditEntry,\n SecretSummary,\n} from \"../../../../infra/crypto/encrypted_secret_store\";\n\nexport interface SecretsVaultRepositoryPort extends CapabilityRepositoryPort {\n audit(name?: string): Promise<Result<AgentDevKitErrorCode, SecretAuditEntry[]>>;\n get(name: string): Promise<Result<AgentDevKitErrorCode, string>>;\n list(): Promise<Result<AgentDevKitErrorCode, SecretSummary[]>>;\n path(): string;\n reveal(name: string): Promise<Result<AgentDevKitErrorCode, RevealedSecret>>;\n remove(name: string): Promise<Result<AgentDevKitErrorCode, { removed: boolean }>>;\n rotate(\n name: string,\n value: string,\n metadata?: { service?: string },\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>>;\n set(\n name: string,\n value: string,\n metadata?: { service?: string },\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>>;\n}\n\nexport type SecretsVaultRepositoryOptions = {\n store: EncryptedSecretStore;\n};\n\nexport class SecretsVaultRepository implements SecretsVaultRepositoryPort {\n readonly repositoryId = \"secrets.vault.repository\";\n readonly #store: EncryptedSecretStore;\n\n constructor(options: SecretsVaultRepositoryOptions) {\n this.#store = options.store;\n }\n\n audit(name?: string): Promise<Result<AgentDevKitErrorCode, SecretAuditEntry[]>> {\n return this.#store.audit(name);\n }\n\n get(name: string): Promise<Result<AgentDevKitErrorCode, string>> {\n return this.#store.get(name);\n }\n\n list(): Promise<Result<AgentDevKitErrorCode, SecretSummary[]>> {\n return this.#store.list();\n }\n\n path(): string {\n return this.#store.path();\n }\n\n remove(name: string): Promise<Result<AgentDevKitErrorCode, { removed: boolean }>> {\n return this.#store.remove(name);\n }\n\n reveal(name: string): Promise<Result<AgentDevKitErrorCode, RevealedSecret>> {\n return this.#store.reveal(name);\n }\n\n rotate(\n name: string,\n value: string,\n metadata: { service?: string } = {},\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>> {\n return this.#store.rotate(name, value, metadata);\n }\n\n set(\n name: string,\n value: string,\n metadata: { service?: string } = {},\n ): Promise<Result<AgentDevKitErrorCode, SecretSummary>> {\n return this.#store.set(name, value, metadata);\n }\n}\n","import { z } from \"zod\";\nimport type {\n SecretAuditEntry,\n SecretSummary,\n} from \"../../../../infra/crypto/encrypted_secret_store\";\n\nconst SecretViewSchema = z.object({\n createdAt: z.string().min(1),\n name: z.string().min(1),\n service: z.string().min(1).optional(),\n updatedAt: z.string().min(1),\n value: z.string().optional(),\n});\n\nconst SecretAuditEntrySchema = z.object({\n action: z.enum([\"created\", \"removed\", \"revealed\", \"rotated\", \"updated\"]),\n name: z.string().min(1),\n service: z.string().min(1).optional(),\n timestamp: z.string().min(1),\n});\n\nexport const SecretsVaultOptionsSchema = z.discriminatedUnion(\"action\", [\n z\n .object({\n action: z.literal(\"audit\"),\n name: z.string().min(1).optional(),\n })\n .strict(),\n z.object({ action: z.literal(\"list\") }).strict(),\n z\n .object({\n action: z.literal(\"remove\"),\n name: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"rotate\"),\n name: z.string().min(1),\n service: z.string().min(1).optional(),\n value: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"set\"),\n name: z.string().min(1),\n service: z.string().min(1).optional(),\n value: z.string().min(1),\n })\n .strict(),\n z\n .object({\n action: z.literal(\"show\"),\n name: z.string().min(1),\n reveal: z.boolean().optional(),\n })\n .strict(),\n]);\n\nexport type SecretView = SecretSummary & {\n value?: string;\n};\n\nexport type SecretsVaultOptions =\n | { action: \"audit\"; name?: string }\n | { action: \"list\" }\n | { action: \"remove\"; name: string }\n | { action: \"rotate\"; name: string; service?: string; value: string }\n | { action: \"set\"; name: string; service?: string; value: string }\n | { action: \"show\"; name: string; reveal?: boolean };\n\nexport type SecretsVaultResult =\n | {\n action: \"audit\";\n events: SecretAuditEntry[];\n path: string;\n }\n | {\n action: \"list\";\n path: string;\n secrets: SecretView[];\n }\n | {\n action: \"remove\";\n path: string;\n removed: boolean;\n secret: { name: string };\n }\n | {\n action: \"rotate\";\n path: string;\n secret: SecretView;\n }\n | {\n action: \"set\";\n path: string;\n secret: SecretView;\n }\n | {\n action: \"show\";\n path: string;\n secret: SecretView;\n };\n\nexport const SecretsVaultResultSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"audit\"),\n events: z.array(SecretAuditEntrySchema),\n path: z.string().min(1),\n }),\n z.object({\n action: z.literal(\"list\"),\n path: z.string().min(1),\n secrets: z.array(SecretViewSchema),\n }),\n z.object({\n action: z.literal(\"remove\"),\n path: z.string().min(1),\n removed: z.boolean(),\n secret: z.object({ name: z.string().min(1) }),\n }),\n z.object({\n action: z.literal(\"rotate\"),\n path: z.string().min(1),\n secret: SecretViewSchema,\n }),\n z.object({\n action: z.literal(\"set\"),\n path: z.string().min(1),\n secret: SecretViewSchema,\n }),\n z.object({\n action: z.literal(\"show\"),\n path: z.string().min(1),\n secret: SecretViewSchema,\n }),\n]);\n","import { BaseCapabilityService, defineCapabilityConfig } from \"../../../../infra/bases/capability\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type SecretsVaultOptions,\n SecretsVaultOptionsSchema,\n type SecretsVaultResult,\n SecretsVaultResultSchema,\n type SecretView,\n} from \"./vault.entities\";\nimport type { SecretsVaultRepositoryPort } from \"./vault.repository\";\n\ntype SecretsVaultServiceDependencies = {\n repository: SecretsVaultRepositoryPort;\n};\n\nexport const secretsVaultCapabilityConfig = defineCapabilityConfig({\n id: \"secrets.vault\",\n moduleId: \"secrets\",\n name: \"Secrets Vault\",\n description: \"Store and retrieve encrypted local credentials.\",\n kind: \"deterministic\",\n risk: \"writes-global-state\",\n} as const);\n\nfunction masked(summary: Omit<SecretView, \"value\">): SecretView {\n return {\n ...summary,\n value: \"********\",\n };\n}\n\nexport class SecretsVaultService extends BaseCapabilityService<\n typeof secretsVaultCapabilityConfig,\n SecretsVaultServiceDependencies\n> {\n readonly inputSchema = SecretsVaultOptionsSchema;\n readonly outputSchema = SecretsVaultResultSchema;\n readonly #repository: SecretsVaultRepositoryPort;\n\n constructor(dependencies: SecretsVaultServiceDependencies) {\n super(secretsVaultCapabilityConfig, dependencies);\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: SecretsVaultOptions,\n ): Promise<Result<AgentDevKitErrorCode, SecretsVaultResult>> {\n if (options.action === \"audit\") {\n const events = await this.#repository.audit(options.name);\n\n return events.isOk()\n ? Result.ok({\n action: \"audit\",\n events: events.unwrap(),\n path: this.#repository.path(),\n })\n : Result.fail(events.unwrapError());\n }\n\n if (options.action === \"list\") {\n const secrets = await this.#repository.list();\n\n return secrets.isOk()\n ? Result.ok({\n action: \"list\",\n path: this.#repository.path(),\n secrets: secrets.unwrap().map((secret) => masked(secret)),\n })\n : Result.fail(secrets.unwrapError());\n }\n\n if (options.action === \"set\") {\n const secret = await this.#repository.set(options.name, options.value, {\n service: options.service,\n });\n\n return secret.isOk()\n ? Result.ok({\n action: \"set\",\n path: this.#repository.path(),\n secret: masked(secret.unwrap()),\n })\n : Result.fail(secret.unwrapError());\n }\n\n if (options.action === \"rotate\") {\n const secret = await this.#repository.rotate(options.name, options.value, {\n service: options.service,\n });\n\n return secret.isOk()\n ? Result.ok({\n action: \"rotate\",\n path: this.#repository.path(),\n secret: masked(secret.unwrap()),\n })\n : Result.fail(secret.unwrapError());\n }\n\n if (options.action === \"remove\") {\n const removed = await this.#repository.remove(options.name);\n\n return removed.isOk()\n ? Result.ok({\n action: \"remove\",\n path: this.#repository.path(),\n removed: removed.unwrap().removed,\n secret: { name: options.name },\n })\n : Result.fail(removed.unwrapError());\n }\n\n if (options.reveal === true) {\n const revealed = await this.#repository.reveal(options.name);\n\n return revealed.isOk()\n ? Result.ok({\n action: \"show\",\n path: this.#repository.path(),\n secret: { ...revealed.unwrap().secret, value: revealed.unwrap().value },\n })\n : Result.fail(revealed.unwrapError());\n }\n\n const summaries = await this.#repository.list();\n\n if (summaries.isErr()) {\n return Result.fail(summaries.unwrapError());\n }\n\n const summary = summaries.unwrap().find((secret) => secret.name === options.name);\n\n if (summary === undefined) {\n return Result.fail(ErrorCodes.InvalidInput);\n }\n\n return Result.ok({\n action: \"show\",\n path: this.#repository.path(),\n secret: masked(summary),\n });\n }\n\n invoke(options: SecretsVaultOptions): Promise<Result<AgentDevKitErrorCode, SecretsVaultResult>> {\n return this.execute(options);\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { secretsVaultCapabilityConfig } from \"./capabilities/vault/vault.service\";\n\nexport const secretsModuleConfig = defineModuleConfig({\n id: \"secrets\",\n name: \"Secrets\",\n description: \"Encrypted local credential storage for external service configuration.\",\n capabilities: [secretsVaultCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/secrets/secrets.surface.test.ts\",\n \"src/modules/secrets/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport { EncryptedSecretStore } from \"../../infra/crypto/encrypted_secret_store\";\nimport { LocalMasterKeyProvider } from \"../../infra/crypto/local_master_key_provider\";\nimport { LocalSecretCrypto } from \"../../infra/crypto/local_secret_crypto\";\nimport {\n SecretsVaultRepository,\n type SecretsVaultRepositoryPort,\n} from \"./capabilities/vault/vault.repository\";\nimport { SecretsVaultService } from \"./capabilities/vault/vault.service\";\nimport { secretsModuleConfig } from \"./secrets.config\";\n\nexport type SecretsModuleBindOptions = {\n homeDirectory?: string;\n stateDirectory?: string;\n};\n\nexport type SecretsModuleCapabilities = {\n vault: SecretsVaultService;\n};\n\nexport type SecretsModuleBinding = ModuleBinding<\n typeof secretsModuleConfig,\n SecretsModuleCapabilities\n>;\n\ntype SecretsModuleBinderDependencies = {\n vaultRepository: (options: SecretsModuleBindOptions) => SecretsVaultRepositoryPort;\n};\n\nfunction stateDirectory(options: SecretsModuleBindOptions): string | undefined {\n return (\n options.stateDirectory ??\n (options.homeDirectory ? `${options.homeDirectory}/.agent-devkit` : undefined)\n );\n}\n\nconst defaultDependencies: SecretsModuleBinderDependencies = {\n vaultRepository: (options) => {\n const resolvedStateDirectory = stateDirectory(options);\n const keyProvider = new LocalMasterKeyProvider({ stateDirectory: resolvedStateDirectory });\n\n return new SecretsVaultRepository({\n store: new EncryptedSecretStore({\n crypto: new LocalSecretCrypto({ keyProvider }),\n stateDirectory: resolvedStateDirectory,\n }),\n });\n },\n};\n\nexport class SecretsModuleBinder extends ModuleBinder<\n SecretsModuleBindOptions,\n typeof secretsModuleConfig,\n SecretsModuleCapabilities\n> {\n readonly #dependencies: SecretsModuleBinderDependencies;\n\n constructor(dependencies: SecretsModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(\n options: SecretsModuleBindOptions = {},\n ): Result<AgentDevKitErrorCode, SecretsModuleBinding> {\n return defineModuleBinding({\n config: secretsModuleConfig,\n capabilities: {\n vault: new SecretsVaultService({\n repository: this.#dependencies.vaultRepository(options),\n }),\n },\n });\n }\n}\n\nexport function createSecretsModuleBindings(\n options: SecretsModuleBindOptions = {},\n): Result<AgentDevKitErrorCode, SecretsModuleBinding> {\n return new SecretsModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { secretsVaultCapabilityConfig } from \"./capabilities/vault/vault.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createSecretsSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"secrets\", moduleDirectory));\n\n return {\n moduleId: \"secrets\",\n capabilities: async () =>\n Result.ok(surfaceCapabilitiesFromConfigs([secretsVaultCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport type { CapabilityRepositoryPort } from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { ErrorCodes } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport type { PackageInstallResult, PackageVersions } from \"./update.entities\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface UpdateRepositoryPort extends CapabilityRepositoryPort {\n getPackageVersions(packageName: string): Promise<Result<AgentDevKitErrorCode, PackageVersions>>;\n installGlobal(\n packageName: string,\n version: string,\n options: { dryRun: boolean },\n ): Promise<Result<AgentDevKitErrorCode, PackageInstallResult>>;\n}\n\nexport class UpdateRepository implements UpdateRepositoryPort {\n readonly repositoryId = \"self.update.repository\";\n\n async getPackageVersions(\n packageName: string,\n ): Promise<Result<AgentDevKitErrorCode, PackageVersions>> {\n try {\n const [{ stdout: versionsOutput }, { stdout: distTagsOutput }] = await Promise.all([\n execFileAsync(\"npm\", [\"view\", packageName, \"versions\", \"--json\"]),\n execFileAsync(\"npm\", [\"view\", packageName, \"dist-tags\", \"--json\"]),\n ]);\n\n return Result.ok({\n versions: JSON.parse(versionsOutput) as string[],\n distTags: JSON.parse(distTagsOutput) as Record<string, string | undefined>,\n });\n } catch {\n return Result.fail(ErrorCodes.PackageRegistryFailed);\n }\n }\n\n async installGlobal(\n packageName: string,\n version: string,\n options: { dryRun: boolean },\n ): Promise<Result<AgentDevKitErrorCode, PackageInstallResult>> {\n const command = `npm install -g ${packageName}@${version}`;\n\n try {\n if (!options.dryRun) {\n await execFileAsync(\"npm\", [\"install\", \"-g\", `${packageName}@${version}`]);\n }\n\n return Result.ok({\n command,\n executed: !options.dryRun,\n });\n } catch {\n return Result.fail(ErrorCodes.PackageInstallFailed);\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const UpdateServiceOptionsSchema = z\n .object({\n dryRun: z.boolean(),\n latest: z.boolean(),\n version: z.string().min(1).optional(),\n yes: z.boolean(),\n })\n .strict();\n\nexport type SelfUpdateStatus = \"current\" | \"planned\" | \"updated\";\n\nexport type PackageVersionOption = {\n version: string;\n current: boolean;\n latest: boolean;\n selected: boolean;\n};\n\nexport type SelfUpdateResult = {\n status: SelfUpdateStatus;\n packageName: string;\n currentVersion: string;\n selectedVersion: string;\n command: string;\n executed: boolean;\n versions: PackageVersionOption[];\n};\n\nexport const SelfUpdateResultSchema = z.object({\n status: z.enum([\"current\", \"planned\", \"updated\"]),\n packageName: z.string().min(1),\n currentVersion: z.string().min(1),\n selectedVersion: z.string().min(1),\n command: z.string(),\n executed: z.boolean(),\n versions: z.array(\n z.object({\n version: z.string().min(1),\n current: z.boolean(),\n latest: z.boolean(),\n selected: z.boolean(),\n }),\n ),\n});\n\nexport type UpdateServiceOptions = z.infer<typeof UpdateServiceOptionsSchema>;\n\nexport type PackageVersions = {\n distTags: Record<string, string | undefined>;\n versions: string[];\n};\n\nexport type PackageInstallResult = {\n command: string;\n executed: boolean;\n};\n","import {\n BaseCapabilityService,\n type CapabilityExecution,\n defineCapabilityConfig,\n} from \"../../../../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../../../../infra/bases/errors\";\nimport { Result } from \"../../../../infra/bases/result\";\nimport {\n type SelfUpdateResult,\n SelfUpdateResultSchema,\n type UpdateServiceOptions,\n UpdateServiceOptionsSchema,\n} from \"./update.entities\";\nimport type { UpdateRepositoryPort } from \"./update.repository\";\n\ntype UpdateServiceDependencies = {\n currentVersion: string;\n packageName: string;\n repository: UpdateRepositoryPort;\n};\n\nfunction versionParts(version: string): number[] {\n return version.split(/[.-]/).map((part) => Number.parseInt(part, 10) || 0);\n}\n\nfunction compareVersions(left: string, right: string): number {\n const leftParts = versionParts(left);\n const rightParts = versionParts(right);\n const length = Math.max(leftParts.length, rightParts.length);\n\n for (let index = 0; index < length; index += 1) {\n const diff = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);\n\n if (diff !== 0) {\n return diff;\n }\n }\n\n return left.localeCompare(right);\n}\n\nfunction compareVersionsDesc(left: string, right: string): number {\n return compareVersions(right, left);\n}\n\nexport const updateCapabilityConfig = defineCapabilityConfig({\n id: \"self.update\",\n moduleId: \"self\",\n name: \"Update\",\n description: \"Plan or execute Agent DevKit package updates through npm.\",\n kind: \"external\",\n risk: \"external-write\",\n} as const);\n\nexport class UpdateService\n extends BaseCapabilityService<typeof updateCapabilityConfig, UpdateServiceDependencies>\n implements CapabilityExecution<UpdateServiceOptions, SelfUpdateResult>\n{\n readonly inputSchema = UpdateServiceOptionsSchema;\n readonly outputSchema = SelfUpdateResultSchema;\n readonly #currentVersion: string;\n readonly #packageName: string;\n readonly #repository: UpdateRepositoryPort;\n\n constructor(dependencies: UpdateServiceDependencies) {\n super(updateCapabilityConfig, dependencies);\n this.#currentVersion = dependencies.currentVersion;\n this.#packageName = dependencies.packageName;\n this.#repository = dependencies.repository;\n }\n\n async execute(\n options: UpdateServiceOptions,\n ): Promise<Result<AgentDevKitErrorCode, SelfUpdateResult>> {\n const packageVersions = await this.#repository.getPackageVersions(this.#packageName);\n\n if (packageVersions.isErr()) {\n return Result.fail(packageVersions.unwrapError());\n }\n\n const versionsPayload = packageVersions.unwrap();\n const latestVersion =\n versionsPayload.distTags.latest ?? versionsPayload.versions.at(-1) ?? this.#currentVersion;\n const explicitVersion = options.version !== undefined;\n const selectedVersion =\n options.version ?? (options.latest === true ? latestVersion : this.#currentVersion);\n const listedVersions = Array.from(\n new Set([...versionsPayload.versions, this.#currentVersion, selectedVersion]),\n );\n\n if (\n selectedVersion === this.#currentVersion ||\n (!explicitVersion && compareVersions(latestVersion, this.#currentVersion) <= 0)\n ) {\n return Result.ok({\n status: \"current\",\n packageName: this.#packageName,\n currentVersion: this.#currentVersion,\n selectedVersion: this.#currentVersion,\n command: \"\",\n executed: false,\n versions: listedVersions.sort(compareVersionsDesc).map((version) => ({\n version,\n current: version === this.#currentVersion,\n latest: version === latestVersion,\n selected: version === this.#currentVersion,\n })),\n });\n }\n\n const dryRun = options.dryRun || !options.yes;\n const install = await this.#repository.installGlobal(this.#packageName, selectedVersion, {\n dryRun,\n });\n\n if (install.isErr()) {\n return Result.fail(install.unwrapError());\n }\n\n return Result.ok({\n status: install.unwrap().executed ? \"updated\" : \"planned\",\n packageName: this.#packageName,\n currentVersion: this.#currentVersion,\n selectedVersion,\n command: install.unwrap().command,\n executed: install.unwrap().executed,\n versions: listedVersions.sort(compareVersionsDesc).map((version) => ({\n version,\n current: version === this.#currentVersion,\n latest: version === latestVersion,\n selected: version === selectedVersion,\n })),\n });\n }\n\n invoke(options: UpdateServiceOptions): Promise<Result<AgentDevKitErrorCode, SelfUpdateResult>> {\n return this.execute(options);\n }\n}\n","import { defineModuleConfig } from \"../../infra/bases/module\";\nimport { updateCapabilityConfig } from \"./capabilities/update/update.service\";\n\nexport const selfModuleConfig = defineModuleConfig({\n id: \"self\",\n name: \"Self\",\n description: \"Agent DevKit package maintenance capabilities.\",\n capabilities: [updateCapabilityConfig.id],\n tests: {\n include: [\n \"src/modules/self/self.surface.test.ts\",\n \"src/modules/self/capabilities/**/*.test.ts\",\n ],\n },\n} as const);\n","import { defineModuleBinding, ModuleBinder, type ModuleBinding } from \"../../infra/bases/bind\";\nimport type { AgentDevKitErrorCode } from \"../../infra/bases/errors\";\nimport type { Result } from \"../../infra/bases/result\";\nimport {\n UpdateRepository,\n type UpdateRepositoryPort,\n} from \"./capabilities/update/update.repository\";\nimport { UpdateService } from \"./capabilities/update/update.service\";\nimport { selfModuleConfig } from \"./self.config\";\n\nexport type SelfModuleBindOptions = {\n currentVersion: string;\n packageName: string;\n};\n\nexport type SelfModuleCapabilities = {\n update: UpdateService;\n};\n\nexport type SelfModuleBinding = ModuleBinding<typeof selfModuleConfig, SelfModuleCapabilities>;\n\ntype SelfModuleBinderDependencies = {\n updateRepository: () => UpdateRepositoryPort;\n};\n\nconst defaultDependencies: SelfModuleBinderDependencies = {\n updateRepository: () => new UpdateRepository(),\n};\n\nexport class SelfModuleBinder extends ModuleBinder<\n SelfModuleBindOptions,\n typeof selfModuleConfig,\n SelfModuleCapabilities\n> {\n readonly #dependencies: SelfModuleBinderDependencies;\n\n constructor(dependencies: SelfModuleBinderDependencies = defaultDependencies) {\n super();\n this.#dependencies = dependencies;\n }\n\n override bind(options: SelfModuleBindOptions): Result<AgentDevKitErrorCode, SelfModuleBinding> {\n return defineModuleBinding({\n config: selfModuleConfig,\n capabilities: {\n update: new UpdateService({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n repository: this.#dependencies.updateRepository(),\n }),\n },\n });\n }\n}\n\nexport function createSelfModuleBindings(\n options: SelfModuleBindOptions,\n): Result<AgentDevKitErrorCode, SelfModuleBinding> {\n return new SelfModuleBinder().bind(options);\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { updateCapabilityConfig } from \"./capabilities/update/update.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createSelfSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"self\", moduleDirectory));\n\n return {\n moduleId: \"self\",\n capabilities: async () => Result.ok(surfaceCapabilitiesFromConfigs([updateCapabilityConfig])),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Result } from \"../../infra/bases/result\";\nimport type { IModuleSurface, SurfacePromptInput } from \"../../infra/bases/surface\";\nimport { surfaceCapabilitiesFromConfigs } from \"../../infra/helpers/surface_capabilities\";\nimport { resolveModuleSurfaceDirectory, SurfaceLoader } from \"../../infra/helpers/surface_loader\";\nimport { cliAliasCapabilityConfig } from \"./capabilities/cliAlias/cliAlias.service\";\nimport { personalizationCapabilityConfig } from \"./capabilities/personalization/personalization.service\";\nimport { preferencesCapabilityConfig } from \"./capabilities/preferences/preferences.service\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport function createUserSurface(): IModuleSurface {\n const loader = new SurfaceLoader(resolveModuleSurfaceDirectory(\"user\", moduleDirectory));\n\n return {\n moduleId: \"user\",\n capabilities: async () =>\n Result.ok(\n surfaceCapabilitiesFromConfigs([\n cliAliasCapabilityConfig,\n personalizationCapabilityConfig,\n preferencesCapabilityConfig,\n ]),\n ),\n knowledge: () => loader.knowledge(),\n loop: () => loader.loop(),\n prompt: (input?: SurfacePromptInput) => loader.prompt(input),\n skill: () => loader.skill(),\n };\n}\n","import type { InvokableCapabilityService } from \"../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../infra/bases/errors\";\nimport type { AgentDevKitModuleConfig } from \"../infra/bases/module\";\nimport type { Result } from \"../infra/bases/result\";\nimport type { IModuleSurface } from \"../infra/bases/surface\";\nimport { type ContextModuleBindOptions, createContextModuleBindings } from \"./context/context.bind\";\nimport { contextModuleConfig } from \"./context/context.config\";\nimport { createContextSurface } from \"./context/context.surface\";\nimport {\n type ConversationModuleBindOptions,\n createConversationModuleBindings,\n} from \"./conversation/conversation.bind\";\nimport { conversationModuleConfig } from \"./conversation/conversation.config\";\nimport { createConversationSurface } from \"./conversation/conversation.surface\";\nimport {\n createEnvironmentModuleBindings,\n type EnvironmentModuleBindOptions,\n} from \"./environment/environment.bind\";\nimport { environmentModuleConfig } from \"./environment/environment.config\";\nimport { createEnvironmentSurface } from \"./environment/environment.surface\";\nimport { createLogsModuleBindings, type LogsModuleBindOptions } from \"./logs/logs.bind\";\nimport { logsModuleConfig } from \"./logs/logs.config\";\nimport { createLogsSurface } from \"./logs/logs.surface\";\nimport { createModelsModuleBindings, type ModelsModuleBindOptions } from \"./models/models.bind\";\nimport { modelsModuleConfig } from \"./models/models.config\";\nimport { createModelsSurface } from \"./models/models.surface\";\nimport { createProjectModuleBindings, type ProjectModuleBindOptions } from \"./project/project.bind\";\nimport { projectModuleConfig } from \"./project/project.config\";\nimport { createProjectSurface } from \"./project/project.surface\";\nimport { createSecretsModuleBindings, type SecretsModuleBindOptions } from \"./secrets/secrets.bind\";\nimport { secretsModuleConfig } from \"./secrets/secrets.config\";\nimport { createSecretsSurface } from \"./secrets/secrets.surface\";\nimport { createSelfModuleBindings, type SelfModuleBindOptions } from \"./self/self.bind\";\nimport { selfModuleConfig } from \"./self/self.config\";\nimport { createSelfSurface } from \"./self/self.surface\";\nimport { createUserModuleBindings, type UserModuleBindOptions } from \"./user/user.bind\";\nimport { userModuleConfig } from \"./user/user.config\";\nimport { createUserSurface } from \"./user/user.surface\";\n\nexport type AgentModuleRegistryOptions = ProjectModuleBindOptions &\n SelfModuleBindOptions & {\n conversation?: ConversationModuleBindOptions;\n context?: ContextModuleBindOptions;\n environment?: EnvironmentModuleBindOptions;\n logs?: LogsModuleBindOptions;\n models?: ModelsModuleBindOptions;\n secrets?: SecretsModuleBindOptions;\n user?: UserModuleBindOptions;\n };\n\nexport type AgentModuleBindingView = {\n capabilities: Record<string, InvokableCapabilityService>;\n};\n\nexport type AgentModuleDefinition = {\n bind: (\n options: AgentModuleRegistryOptions,\n ) => Result<AgentDevKitErrorCode, AgentModuleBindingView>;\n capabilities: (binding: AgentModuleBindingView) => InvokableCapabilityService[];\n config: AgentDevKitModuleConfig;\n id: string;\n surface: () => IModuleSurface;\n};\n\nfunction capabilities(binding: AgentModuleBindingView): InvokableCapabilityService[] {\n return Object.values(binding.capabilities);\n}\n\nfunction bindingView<TBinding extends { capabilities: Record<string, InvokableCapabilityService> }>(\n binding: TBinding,\n): AgentModuleBindingView {\n return binding;\n}\n\nexport const agentModuleDefinitions: AgentModuleDefinition[] = [\n {\n id: \"conversation\",\n config: conversationModuleConfig,\n surface: createConversationSurface,\n bind: (options) =>\n createConversationModuleBindings(options.conversation ?? {}).map((binding) =>\n bindingView(binding),\n ),\n capabilities,\n },\n {\n id: \"context\",\n config: contextModuleConfig,\n surface: createContextSurface,\n bind: (options) =>\n createContextModuleBindings(options.context ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"environment\",\n config: environmentModuleConfig,\n surface: createEnvironmentSurface,\n bind: (options) =>\n createEnvironmentModuleBindings(options.environment ?? {}).map((binding) =>\n bindingView(binding),\n ),\n capabilities,\n },\n {\n id: \"logs\",\n config: logsModuleConfig,\n surface: createLogsSurface,\n bind: (options) =>\n createLogsModuleBindings(options.logs ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"models\",\n config: modelsModuleConfig,\n surface: createModelsSurface,\n bind: (options) =>\n createModelsModuleBindings(options.models ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"project\",\n config: projectModuleConfig,\n surface: createProjectSurface,\n bind: (options) =>\n createProjectModuleBindings({ appVersion: options.appVersion }).map((binding) =>\n bindingView(binding),\n ),\n capabilities,\n },\n {\n id: \"secrets\",\n config: secretsModuleConfig,\n surface: createSecretsSurface,\n bind: (options) =>\n createSecretsModuleBindings(options.secrets ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"self\",\n config: selfModuleConfig,\n surface: createSelfSurface,\n bind: (options) =>\n createSelfModuleBindings({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n }).map((binding) => bindingView(binding)),\n capabilities,\n },\n {\n id: \"user\",\n config: userModuleConfig,\n surface: createUserSurface,\n bind: (options) =>\n createUserModuleBindings(options.user ?? {}).map((binding) => bindingView(binding)),\n capabilities,\n },\n];\n","import type { InvokableCapabilityService } from \"../infra/bases/capability\";\nimport type { AgentDevKitErrorCode } from \"../infra/bases/errors\";\nimport { Result } from \"../infra/bases/result\";\nimport {\n type CapabilityRegistry,\n createCapabilityRegistry,\n} from \"../infra/capabilities/capability_registry\";\nimport { type AgentModuleRegistryOptions, agentModuleDefinitions } from \"./modules.registry\";\n\nexport type AgentCapabilityRegistryOptions = AgentModuleRegistryOptions;\n\nexport function createAgentCapabilityRegistry(\n options: AgentCapabilityRegistryOptions,\n): Result<AgentDevKitErrorCode, CapabilityRegistry> {\n const capabilities: InvokableCapabilityService[] = [];\n\n for (const definition of agentModuleDefinitions) {\n const binding = definition.bind(options);\n if (binding.isErr()) {\n return Result.fail(binding.unwrapError());\n }\n\n capabilities.push(...definition.capabilities(binding.unwrap()));\n }\n\n return createCapabilityRegistry({\n capabilities,\n });\n}\n","import { type AgentDevKitErrorCode, ErrorCodes } from \"../infra/bases/errors\";\nimport type { Result } from \"../infra/bases/result\";\nimport type {\n ToolRuntime,\n ToolRuntimeExecuteInput,\n ToolRuntimeResult,\n ToolRuntimeTool,\n} from \"../infra/bases/tool_runtime\";\nimport type { CapabilityRegistry } from \"../infra/capabilities/capability_registry\";\nimport {\n type AgentCapabilityRegistryOptions,\n createAgentCapabilityRegistry,\n} from \"./capability_registry\";\n\nexport type CapabilityToolRuntimeOptions = {\n registry: CapabilityRegistry;\n};\n\nfunction toolFromDescriptor(\n descriptor: ReturnType<CapabilityRegistry[\"list\"]>[number],\n): ToolRuntimeTool {\n return {\n approval: descriptor.approval,\n description: descriptor.description,\n id: descriptor.id,\n inputSchema: descriptor.inputSchema,\n kind: descriptor.kind,\n moduleId: descriptor.moduleId,\n name: descriptor.name,\n outputSchema: descriptor.outputSchema,\n risk: descriptor.risk,\n };\n}\n\nexport class CapabilityToolRuntime implements ToolRuntime {\n readonly #registry: CapabilityRegistry;\n\n constructor(options: CapabilityToolRuntimeOptions) {\n this.#registry = options.registry;\n }\n\n listTools(): ToolRuntimeTool[] {\n return this.#registry.list().map(toolFromDescriptor);\n }\n\n getTool(capabilityId: string): Result<AgentDevKitErrorCode, ToolRuntimeTool> {\n return this.#registry.describe(capabilityId).map(toolFromDescriptor);\n }\n\n async execute(input: ToolRuntimeExecuteInput): Promise<ToolRuntimeResult> {\n const tool = this.getTool(input.capabilityId);\n const invocation = await this.#registry.invoke(input.capabilityId, input.input, {\n approved: input.approved,\n interface: input.interface,\n requestedBy: input.requestedBy,\n });\n\n if (tool.isErr()) {\n return {\n approval: { reason: \"Capability was not found.\", required: false },\n audit: invocation.audit,\n capabilityId: input.capabilityId,\n effects: [],\n error: invocation.ok\n ? {\n code: ErrorCodes.CapabilityNotFound,\n message: `Capability ${input.capabilityId} was not found.`,\n recoverable: true,\n }\n : invocation.error,\n input: input.input,\n interface: input.interface,\n risk: \"read-only\",\n status: \"failed\",\n };\n }\n\n const descriptor = tool.unwrap();\n\n if (!invocation.ok) {\n return {\n approval: descriptor.approval,\n audit: invocation.audit,\n capabilityId: input.capabilityId,\n effects: [],\n error: invocation.error,\n input: input.input,\n interface: input.interface,\n risk: descriptor.risk,\n status:\n invocation.error.code === ErrorCodes.ApprovalRequired ? \"approval_required\" : \"failed\",\n };\n }\n\n return {\n approval: descriptor.approval,\n audit: invocation.audit,\n capabilityId: input.capabilityId,\n effects: invocation.effects,\n input: input.input,\n interface: input.interface,\n output: invocation.data,\n risk: descriptor.risk,\n status: \"succeeded\",\n };\n }\n}\n\nexport function createCapabilityToolRuntime(\n options: AgentCapabilityRegistryOptions,\n): Result<AgentDevKitErrorCode, CapabilityToolRuntime> {\n return createAgentCapabilityRegistry(options).map(\n (registry) => new CapabilityToolRuntime({ registry }),\n );\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { ToolRuntimeResult } from \"../../../infra/bases/tool_runtime\";\nimport { formatDependenciesText } from \"../../../modules/environment/environment.index\";\nimport { wantsJson } from \"../command_options\";\nimport { createCliToolRuntime } from \"../toolRuntime\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterInstallCommandOptions = {\n currentVersion: string;\n packageName: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\ntype InstallCommandOptions = {\n dryRun?: boolean;\n json?: boolean;\n node?: boolean;\n verify?: boolean;\n yes?: boolean;\n};\n\nfunction selectedDependency(\n dependency: string | undefined,\n options: InstallCommandOptions,\n): string {\n if (options.node === true) {\n return \"node\";\n }\n\n if (dependency !== undefined && dependency.trim().length > 0) {\n return dependency.trim();\n }\n\n throw new Error(\"Expected a dependency id.\");\n}\n\nfunction runtime(options: RegisterInstallCommandOptions) {\n return createCliToolRuntime({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n });\n}\n\nfunction dependencyAction(options: InstallCommandOptions): \"install\" | \"plan-install\" | \"verify\" {\n if (options.verify === true) {\n return \"verify\";\n }\n\n return options.yes === true && options.dryRun !== true ? \"install\" : \"plan-install\";\n}\n\nfunction printResult(result: ToolRuntimeResult, translator: Translator, json: boolean): void {\n if (json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.status !== \"succeeded\") {\n console.error(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(formatDependenciesText(result.output as never, translator));\n}\n\nexport function registerInstallCommand(\n program: Command,\n options: RegisterInstallCommandOptions,\n): void {\n const installCommand = program\n .command(\"install\")\n .argument(\"[dependency]\", options.translator.t(\"cli.install.argument.dependency\"))\n .description(options.translator.t(\"cli.install.description\"))\n .option(\"--dry-run\", options.translator.t(\"cli.install.option.dryRun\"))\n .option(\"--json\", options.translator.t(\"cli.install.option.json\"))\n .option(\"--node\", options.translator.t(\"cli.install.option.node\"))\n .option(\"--verify\", options.translator.t(\"cli.install.option.verify\"))\n .option(\"--yes\", options.translator.t(\"cli.install.option.yes\"));\n\n installCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"install\",\n options: () => installCommand.opts(),\n },\n async (dependency: string | undefined, commandOptions: InstallCommandOptions) => {\n const id = selectedDependency(dependency, commandOptions);\n const action = dependencyAction(commandOptions);\n const result = await runtime(options).execute({\n approved: commandOptions.yes === true,\n capabilityId: \"environment.dependencies\",\n input: {\n action,\n confirmed: commandOptions.yes === true,\n dependency: id,\n },\n interface: \"cli\",\n requestedBy: \"agent.install\",\n });\n\n printResult(result, options.translator, wantsJson(commandOptions));\n\n if (result.status !== \"succeeded\") {\n process.exitCode = 1;\n }\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { LogsAnalysisOptions, LogsAnalysisResult } from \"../../../modules/logs/logs.index\";\nimport { createLogsModuleBindings, formatLogsAnalysisText } from \"../../../modules/logs/logs.index\";\nimport { logCategoryFromOptions, parseNonNegativeInteger, wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterLogsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction logsCapability() {\n const bindings = createLogsModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.analysis;\n}\n\nasync function printLogsResult(\n commandOptions: { json?: boolean },\n translator: Translator,\n options: LogsAnalysisOptions,\n): Promise<void> {\n const result = await logsCapability().execute(options);\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload: LogsAnalysisResult = result.unwrap();\n\n if (wantsJson(commandOptions)) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatLogsAnalysisText(payload, translator));\n}\n\nexport function registerLogsCommand(program: Command, options: RegisterLogsCommandOptions): void {\n const logsCommand = program\n .command(\"logs\")\n .description(options.translator.t(\"cli.logs.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"));\n\n logsCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs\",\n options: () => logsCommand.opts(),\n },\n async (commandOptions: { all?: boolean; json?: boolean; technical?: boolean }) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"list\",\n category: logCategoryFromOptions(commandOptions),\n });\n },\n ),\n );\n\n const showCommand = logsCommand\n .command(\"show\")\n .argument(\"[date]\", options.translator.t(\"cli.logs.show.argument.date\"))\n .description(options.translator.t(\"cli.logs.show.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"))\n .option(\"--limit <limit>\", options.translator.t(\"cli.logs.option.limit\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"));\n\n showCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs.show\",\n options: () => showCommand.opts(),\n },\n async (\n date: string | undefined,\n commandOptions: {\n all?: boolean;\n json?: boolean;\n limit?: string;\n technical?: boolean;\n },\n ) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"read\",\n category: logCategoryFromOptions(commandOptions),\n date,\n limit: parseNonNegativeInteger(commandOptions.limit),\n });\n },\n ),\n );\n\n const tailCommand = logsCommand\n .command(\"tail\")\n .description(options.translator.t(\"cli.logs.tail.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--date <date>\", options.translator.t(\"cli.logs.option.date\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"))\n .option(\"--limit <limit>\", options.translator.t(\"cli.logs.option.limit\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"));\n\n tailCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs.tail\",\n options: () => tailCommand.opts(),\n },\n async (commandOptions: {\n all?: boolean;\n date?: string;\n json?: boolean;\n limit?: string;\n technical?: boolean;\n }) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"read\",\n category: logCategoryFromOptions(commandOptions),\n date: commandOptions.date,\n limit: parseNonNegativeInteger(commandOptions.limit),\n tail: true,\n });\n },\n ),\n );\n\n const searchCommand = logsCommand\n .command(\"search\")\n .argument(\"<query>\", options.translator.t(\"cli.logs.search.argument.query\"))\n .description(options.translator.t(\"cli.logs.search.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--date <date>\", options.translator.t(\"cli.logs.option.date\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"))\n .option(\"--limit <limit>\", options.translator.t(\"cli.logs.option.limit\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"));\n\n searchCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs.search\",\n options: () => searchCommand.opts(),\n },\n async (\n query: string,\n commandOptions: {\n all?: boolean;\n date?: string;\n json?: boolean;\n limit?: string;\n technical?: boolean;\n },\n ) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"search\",\n category: logCategoryFromOptions(commandOptions),\n date: commandOptions.date,\n limit: parseNonNegativeInteger(commandOptions.limit),\n query,\n });\n },\n ),\n );\n\n const summaryCommand = logsCommand\n .command(\"summary\")\n .description(options.translator.t(\"cli.logs.summary.description\"))\n .option(\"--all\", options.translator.t(\"cli.logs.option.all\"))\n .option(\"--date <date>\", options.translator.t(\"cli.logs.option.date\"))\n .option(\"--json\", options.translator.t(\"cli.logs.option.json\"))\n .option(\"--technical\", options.translator.t(\"cli.logs.option.technical\"));\n\n summaryCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"logs.summary\",\n options: () => summaryCommand.opts(),\n },\n async (commandOptions: {\n all?: boolean;\n date?: string;\n json?: boolean;\n technical?: boolean;\n }) => {\n await printLogsResult(commandOptions, options.translator, {\n action: \"summary\",\n category: logCategoryFromOptions(commandOptions),\n date: commandOptions.date,\n });\n },\n ),\n );\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { LogEvent, LogsAnalysisResult, LogsFileSummary } from \"./analysis.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nfunction commandName(event: LogEvent): string {\n return event.category === \"usage\" ? event.command : (event.command ?? event.event);\n}\n\nfunction durationMs(event: LogEvent): number {\n return event.durationMs ?? 0;\n}\n\nfunction statusName(event: LogEvent): string {\n return event.category === \"usage\" ? event.status : event.level;\n}\n\nfunction formatEvent(event: LogEvent): string {\n return `${event.timestamp} ${event.category.padEnd(9)} ${statusName(event).padEnd(9)} ${event.area.padEnd(7)} ${commandName(event)} ${durationMs(event)}ms`;\n}\n\nfunction formatFiles(files: LogsFileSummary[]): string[] {\n return files.map(\n (file) =>\n ` ${file.date} ${file.category.padEnd(9)} ${String(file.eventCount).padStart(4)} events ${String(file.sizeBytes).padStart(6)} bytes`,\n );\n}\n\nfunction formatCounts(counts: Record<string, number>): string[] {\n return Object.entries(counts)\n .sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]))\n .map(([key, count]) => ` ${key.padEnd(18)} ${count}`);\n}\n\nexport function formatLogsAnalysisText(\n result: LogsAnalysisResult,\n translator: Translator = defaultTranslator,\n): string {\n const t = (key: string, values?: Record<string, string | number>) => translator.t(key, values);\n const rows = [t(\"logs.title\"), t(\"logs.command\"), \"\", `[${result.action}] ${result.path}`];\n\n if (result.action === \"list\") {\n rows.push(\"\", ` ${t(\"logs.section.files\")}`);\n rows.push(...formatFiles(result.files));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"read\") {\n rows.push(\"\", ` ${t(\"logs.section.events\", { count: result.events.length })}`);\n rows.push(...result.events.map(formatEvent));\n rows.push(` ${t(\"logs.totalEvents\", { count: result.totalEvents })}`);\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"search\") {\n rows.push(\n \"\",\n ` ${t(\"logs.section.matches\", { count: result.totalMatches, query: result.query })}`,\n );\n rows.push(...result.events.map(formatEvent));\n return rows.join(\"\\n\");\n }\n\n rows.push(\n \"\",\n ` ${t(\"logs.totalEvents\", { count: result.totalEvents })}`,\n ` ${t(\"logs.averageDuration\", { duration: result.averageDurationMs })}`,\n \"\",\n ` ${t(\"logs.section.byCommand\")}`,\n ...formatCounts(result.byCommand),\n \"\",\n ` ${t(\"logs.section.byCategory\")}`,\n ...formatCounts(result.byCategory),\n \"\",\n ` ${t(\"logs.section.byArea\")}`,\n ...formatCounts(result.byArea),\n \"\",\n ` ${t(\"logs.section.byStatus\")}`,\n ...formatCounts(result.byStatus),\n \"\",\n ` ${t(\"logs.section.slowest\")}`,\n ...result.slowest.map(formatEvent),\n );\n\n return rows.join(\"\\n\");\n}\n","import { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport type { ToolRuntime } from \"../../infra/bases/tool_runtime\";\nimport { createAgentMcpServer } from \"./mcp_server\";\n\nexport type StartMcpHttpServerOptions = {\n allowedOrigins?: string[];\n host: string;\n packageName: string;\n port: number;\n runtime: ToolRuntime;\n version: string;\n};\n\nconst endpointPath = \"/mcp\";\n\nfunction isOriginAllowed(origin: string | undefined, allowedOrigins: string[]): boolean {\n if (origin === undefined) {\n return true;\n }\n\n return allowedOrigins.includes(origin);\n}\n\nfunction writeText(res: ServerResponse, statusCode: number, text: string): void {\n res.writeHead(statusCode, { \"content-type\": \"text/plain; charset=utf-8\" });\n res.end(text);\n}\n\nexport async function startMcpHttpServer(options: StartMcpHttpServerOptions): Promise<Server> {\n const httpServer = createServer(async (req: IncomingMessage, res: ServerResponse) => {\n const pathname = req.url === undefined ? \"\" : new URL(req.url, \"http://127.0.0.1\").pathname;\n\n if (pathname === \"/health\" && req.method === \"GET\") {\n res.writeHead(200, { \"content-type\": \"application/json; charset=utf-8\" });\n res.end(\n JSON.stringify({ name: options.packageName, status: \"ok\", version: options.version }),\n );\n return;\n }\n\n if (pathname !== endpointPath) {\n writeText(res, 404, \"Not found\");\n return;\n }\n\n if (req.method !== \"POST\" && req.method !== \"GET\") {\n writeText(res, 405, \"Method not allowed\");\n return;\n }\n\n if (!isOriginAllowed(req.headers.origin, options.allowedOrigins ?? [])) {\n writeText(res, 403, \"Forbidden origin\");\n return;\n }\n\n try {\n const address = httpServer.address();\n const activePort =\n typeof address === \"object\" && address !== null ? address.port : options.port;\n const server = createAgentMcpServer(options);\n const transport = new StreamableHTTPServerTransport({\n allowedHosts: [\n `${options.host}:${activePort}`,\n `127.0.0.1:${activePort}`,\n `localhost:${activePort}`,\n ],\n enableDnsRebindingProtection: true,\n sessionIdGenerator: undefined,\n });\n\n await server.connect(transport);\n res.on(\"close\", () => {\n void transport.close();\n void server.close();\n });\n await transport.handleRequest(req, res);\n } catch (error) {\n if (!res.headersSent) {\n writeText(res, 500, error instanceof Error ? error.message : \"MCP request failed\");\n } else {\n res.end();\n }\n }\n });\n\n await new Promise<void>((resolve) => {\n httpServer.listen(options.port, options.host, resolve);\n });\n\n return httpServer;\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n type Tool,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { AgentRuntime } from \"../../infra/agent/agent_runtime\";\nimport type { ToolRuntime } from \"../../infra/bases/tool_runtime\";\nimport { createBrainDockProvider } from \"../../infra/brain/brain_dock\";\nimport {\n hasObjectOutputSchema,\n inputSchemaWithAgentControl,\n runtimeResultToMcpContent,\n splitMcpToolInput,\n} from \"./mcp_result_mapper\";\n\nconst AGENT_TASK_TOOL_NAME = \"agent.task\";\n\nconst agentTaskTool: Tool = {\n name: AGENT_TASK_TOOL_NAME,\n title: \"Delegate a task to the local agent\",\n description:\n \"Delegate a bounded, multi-step or routine local task to the Agent DevKit local agent: it plans and runs the necessary capabilities on your behalf and returns a concise result. Prefer this to offload orchestration and reduce token usage. Use the individual capability tools directly when you need step-by-step control, precise intermediate results, or to intervene mid-task.\",\n inputSchema: {\n type: \"object\",\n properties: {\n approvedTools: {\n type: \"array\",\n description:\n \"Capability ids that are explicitly approved for this run. Approval is scoped per tool call.\",\n items: { type: \"string\" },\n },\n task: {\n type: \"string\",\n description: \"The task to perform, described in natural language.\",\n },\n },\n required: [\"task\"],\n } as Tool[\"inputSchema\"],\n outputSchema: {\n type: \"object\",\n properties: {\n reply: { type: \"string\" },\n steps: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n ok: { type: \"boolean\" },\n summary: { type: \"string\" },\n tool: { type: \"string\" },\n },\n },\n },\n },\n required: [\"reply\", \"steps\"],\n } as Tool[\"outputSchema\"],\n annotations: { openWorldHint: true },\n _meta: { \"agent-devkit/kind\": \"agent-delegation\" },\n};\n\nexport type AgentMcpServerOptions = {\n packageName: string;\n runtime: ToolRuntime;\n version: string;\n};\n\nfunction mcpToolFromRuntimeTool(tool: ReturnType<ToolRuntime[\"listTools\"]>[number]): Tool {\n const mcpTool: Tool = {\n name: tool.id,\n title: tool.name,\n description: tool.description,\n inputSchema: inputSchemaWithAgentControl(tool) as Tool[\"inputSchema\"],\n annotations: {\n destructiveHint: tool.risk === \"destructive\",\n openWorldHint: tool.risk === \"external-write\",\n readOnlyHint: tool.risk === \"read-only\",\n },\n _meta: {\n \"agent-devkit/approvalRequired\": tool.approval.required,\n \"agent-devkit/moduleId\": tool.moduleId,\n \"agent-devkit/risk\": tool.risk,\n },\n };\n\n if (hasObjectOutputSchema(tool)) {\n return { ...mcpTool, outputSchema: tool.outputSchema as Tool[\"outputSchema\"] };\n }\n\n return mcpTool;\n}\n\nexport function createAgentMcpServer(options: AgentMcpServerOptions): Server {\n const server = new Server(\n {\n name: options.packageName,\n version: options.version,\n },\n {\n capabilities: {\n tools: {},\n },\n instructions:\n \"Agent DevKit exposes local capabilities as MCP tools, plus an `agent.task` delegation tool. Prefer `agent.task` for bounded, multi-step or routine local tasks to offload orchestration and reduce token usage; use the individual capability tools directly when you need step-by-step control or precise intermediate results. Risky tools require explicit approval through _agent.approved. For agent.task, approval must be scoped with approvedTools.\",\n },\n );\n\n const agent = new AgentRuntime({\n brainProvider: createBrainDockProvider({ stateDirectory: join(homedir(), \".agent-devkit\") }),\n toolRuntime: options.runtime,\n });\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [agentTaskTool, ...options.runtime.listTools().map(mcpToolFromRuntimeTool)],\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n if (request.params.name === AGENT_TASK_TOOL_NAME) {\n const args = (request.params.arguments ?? {}) as Record<string, unknown>;\n const task = typeof args.task === \"string\" ? args.task : \"\";\n const approvedTools = Array.isArray(args.approvedTools)\n ? args.approvedTools.filter((tool): tool is string => typeof tool === \"string\")\n : undefined;\n\n if (task.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"Missing 'task'.\" }], isError: true };\n }\n\n const run = await agent.run({ approvedTools, task });\n\n if (run.isErr()) {\n return {\n content: [{ type: \"text\" as const, text: `Agent run failed: ${run.unwrapError()}` }],\n isError: true,\n };\n }\n\n const payload = run.unwrap();\n const stepsText = payload.steps.map((step) => `- ${step.tool}: ${step.summary}`).join(\"\\n\");\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: stepsText.length > 0 ? `${payload.reply}\\n\\nSteps:\\n${stepsText}` : payload.reply,\n },\n ],\n isError: false,\n structuredContent: { reply: payload.reply, steps: payload.steps },\n };\n }\n\n const { approved, capabilityInput } = splitMcpToolInput(request.params.arguments ?? {});\n const result = await options.runtime.execute({\n approved,\n capabilityId: request.params.name,\n input: capabilityInput,\n interface: \"mcp\",\n requestedBy: \"mcp.tools.call\",\n });\n const tool = options.runtime.getTool(request.params.name);\n\n return runtimeResultToMcpContent(result, tool.isOk() && hasObjectOutputSchema(tool.unwrap()));\n });\n\n return server;\n}\n","import { z } from \"zod\";\nimport type { BrainProviderPort, BrainRequest } from \"../bases/brain\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport { type AgentPrompt, AgentPromptSchema, type PromptMessage } from \"../bases/prompt\";\nimport { Result } from \"../bases/result\";\nimport type { ToolRuntime, ToolRuntimeResult, ToolRuntimeTool } from \"../bases/tool_runtime\";\n\nexport const AgentDecisionSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"tool\"), input: z.unknown(), tool: z.string().min(1) }),\n z.object({ action: z.literal(\"final\"), reply: z.string() }),\n]);\n\nexport type AgentDecision = z.infer<typeof AgentDecisionSchema>;\n\nconst agentDecisionJsonSchema: Record<string, unknown> = {\n type: \"object\",\n properties: {\n action: { type: \"string\", enum: [\"tool\", \"final\"] },\n input: { type: \"object\" },\n reply: { type: \"string\" },\n tool: { type: \"string\" },\n },\n required: [\"action\"],\n};\n\nexport type AgentStep = {\n ok: boolean;\n summary: string;\n tool: string;\n};\n\nexport type AgentRunResult = {\n reply: string;\n steps: AgentStep[];\n};\n\nexport type AgentStreamEvent =\n | { type: \"tool\"; tool: string }\n | { type: \"observation\"; ok: boolean; summary: string; tool: string }\n | { type: \"final\"; reply: string };\n\nexport type AgentRunInput = {\n approved?: boolean;\n approvedTools?: string[];\n history?: { content: string; role: \"assistant\" | \"user\" }[];\n maxSteps?: number;\n onEvent?: (event: AgentStreamEvent) => void;\n task: string;\n};\n\nexport type AgentRuntimeOptions = {\n brainProvider: BrainProviderPort;\n toolRuntime: ToolRuntime;\n};\n\nfunction summarize(value: unknown): string {\n const text = typeof value === \"string\" ? value : JSON.stringify(value ?? \"\");\n const compact = text.replaceAll(/\\s+/g, \" \").trim();\n return compact.length > 240 ? `${compact.slice(0, 240)}…` : compact;\n}\n\nfunction observationSummary(result: ToolRuntimeResult): string {\n if (result.status === \"succeeded\") {\n return summarize(result.output);\n }\n\n return `${result.status}${result.error === undefined ? \"\" : `: ${result.error.message}`}`;\n}\n\n/**\n * Single-agent tool-use loop over the ToolRuntime. Lives outside the capability\n * registry on purpose (so the agent is not a tool that can call itself). Uses a\n * JSON-constrained decision each turn: run a tool, or answer.\n */\nexport class AgentRuntime {\n readonly #brain: BrainProviderPort;\n readonly #tools: ToolRuntime;\n\n constructor(options: AgentRuntimeOptions) {\n this.#brain = options.brainProvider;\n this.#tools = options.toolRuntime;\n }\n\n async run(input: AgentRunInput): Promise<Result<AgentDevKitErrorCode, AgentRunResult>> {\n const generateStructured = this.#brain.generateStructured?.bind(this.#brain);\n\n if (generateStructured === undefined) {\n return Result.fail(ErrorCodes.BrainProviderUnavailable);\n }\n\n const maxSteps = input.maxSteps ?? 6;\n const steps: AgentStep[] = [];\n const transcript: PromptMessage[] = (input.history ?? []).map((message) => ({\n content: message.content,\n role: message.role,\n }));\n const tools = this.#tools.listTools();\n\n for (let step = 0; step < maxSteps; step += 1) {\n const prompt = this.#buildPrompt(input.task, transcript, tools);\n const request: BrainRequest = {\n options: { provider: \"local\", role: \"agent\" },\n prompt,\n schema: \"agent-devkit.brain-request/v1\",\n };\n const structured = await generateStructured(request, agentDecisionJsonSchema);\n\n if (structured.isErr()) {\n return Result.fail(structured.unwrapError());\n }\n\n const decision = AgentDecisionSchema.safeParse(structured.unwrap().json);\n\n if (!decision.success) {\n return Result.ok({ reply: structured.unwrap().raw.trim(), steps });\n }\n\n if (decision.data.action === \"final\") {\n input.onEvent?.({ reply: decision.data.reply, type: \"final\" });\n return Result.ok({ reply: decision.data.reply, steps });\n }\n\n const tool = decision.data.tool;\n input.onEvent?.({ tool, type: \"tool\" });\n\n const execution = await this.#tools.execute({\n approved: this.#isApproved(tool, input),\n capabilityId: tool,\n input: decision.data.input,\n interface: \"agent\",\n requestedBy: \"agent.run\",\n });\n const ok = execution.status === \"succeeded\";\n const summary = observationSummary(execution);\n\n steps.push({ ok, summary, tool });\n input.onEvent?.({ ok, summary, tool, type: \"observation\" });\n transcript.push({ content: `Observation from ${tool}: ${summary}`, role: \"tool\" });\n\n if (execution.status === \"approval_required\") {\n return Result.ok({\n reply: `A ferramenta ${tool} requer aprovação explícita. Reexecute autorizando para continuar.`,\n steps,\n });\n }\n }\n\n return Result.ok({\n reply: \"Limite de passos do agente atingido sem uma resposta final.\",\n steps,\n });\n }\n\n #isApproved(tool: string, input: AgentRunInput): boolean {\n if (input.approvedTools !== undefined) {\n return input.approvedTools.includes(tool);\n }\n\n return input.approved === true;\n }\n\n #buildPrompt(task: string, transcript: PromptMessage[], tools: ToolRuntimeTool[]): AgentPrompt {\n const toolList = tools\n .map((tool) => `- ${tool.id} (${tool.risk}): ${tool.description}`)\n .join(\"\\n\");\n const instruction = [\n `Tarefa do usuário: ${task}`,\n \"\",\n \"Ferramentas disponíveis:\",\n toolList,\n \"\",\n 'Responda SOMENTE com JSON. Para usar uma ferramenta: {\"action\":\"tool\",\"tool\":\"<id>\",\"input\":{...}}. Para responder ao usuário: {\"action\":\"final\",\"reply\":\"<texto>\"}. Uma ação por vez.',\n ].join(\"\\n\");\n\n return AgentPromptSchema.parse({\n agent: {\n behavior: \"balanced\",\n characterId: \"agent\",\n detailLevel: \"concise\",\n name: \"Agent\",\n tone: \"direct\",\n traits: [],\n },\n context: { knowledge: [] },\n locale: \"pt-BR\",\n messages: transcript,\n output: { format: \"json\", language: \"pt-BR\" },\n policies: {\n allowToolCalls: true,\n approvalRequired: false,\n maxToolCalls: maxToolCallsFor(tools),\n },\n schema: \"agent-devkit.prompt/v1\",\n task: { userMessage: instruction },\n tools: tools.map((tool) => ({\n description: tool.description,\n id: tool.id,\n inputSchema: tool.inputSchema,\n risk: tool.risk,\n })),\n });\n }\n}\n\nfunction maxToolCallsFor(tools: ToolRuntimeTool[]): number {\n return Math.max(1, tools.length);\n}\n","import type { ToolRuntimeResult, ToolRuntimeTool } from \"../../infra/bases/tool_runtime\";\n\nexport type McpToolInput = Record<string, unknown> & {\n _agent?: {\n approved?: boolean;\n };\n};\n\nexport function inputSchemaWithAgentControl(tool: ToolRuntimeTool): Record<string, unknown> {\n const schema = structuredClone(tool.inputSchema);\n const properties =\n typeof schema.properties === \"object\" && schema.properties !== null\n ? (schema.properties as Record<string, unknown>)\n : {};\n\n const normalized = {\n ...schema,\n type: \"object\",\n properties: { ...properties },\n };\n\n if (!tool.approval.required) {\n return normalized;\n }\n\n return {\n ...normalized,\n properties: {\n ...properties,\n _agent: {\n additionalProperties: false,\n description: \"Agent DevKit MCP control metadata. Removed before capability execution.\",\n properties: {\n approved: {\n description: \"Explicitly approve a capability that requires approval.\",\n type: \"boolean\",\n },\n },\n type: \"object\",\n },\n },\n };\n}\n\nexport function splitMcpToolInput(input: unknown): {\n approved?: boolean;\n capabilityInput: unknown;\n} {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n return { capabilityInput: input };\n }\n\n const { _agent, ...capabilityInput } = input as McpToolInput;\n const approved =\n _agent !== undefined && typeof _agent === \"object\" && _agent.approved === true\n ? true\n : undefined;\n\n return {\n approved,\n capabilityInput,\n };\n}\n\nfunction isStructuredObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function hasObjectOutputSchema(tool: ToolRuntimeTool): boolean {\n return isStructuredObject(tool.outputSchema) && tool.outputSchema.type === \"object\";\n}\n\nexport function runtimeResultToMcpContent(\n result: ToolRuntimeResult,\n includeStructuredContent = false,\n) {\n const isError = result.status !== \"succeeded\";\n const content = [\n {\n type: \"text\" as const,\n text: JSON.stringify(result, null, 2),\n },\n ];\n\n if (!isError && includeStructuredContent && isStructuredObject(result.output)) {\n return { content, isError, structuredContent: result.output };\n }\n\n return { content, isError };\n}\n","import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport type { ToolRuntime } from \"../../infra/bases/tool_runtime\";\nimport { createAgentMcpServer } from \"./mcp_server\";\n\nexport type StartMcpStdioServerOptions = {\n packageName: string;\n runtime: ToolRuntime;\n version: string;\n};\n\nexport async function startMcpStdioServer(options: StartMcpStdioServerOptions): Promise<void> {\n const server = createAgentMcpServer(options);\n const transport = new StdioServerTransport();\n\n const shutdown = async (): Promise<void> => {\n await server.close().catch(() => undefined);\n await transport.close().catch(() => undefined);\n };\n\n process.once(\"SIGINT\", () => {\n void shutdown().finally(() => process.exit(0));\n });\n process.once(\"SIGTERM\", () => {\n void shutdown().finally(() => process.exit(0));\n });\n\n await server.connect(transport);\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport { startMcpHttpServer } from \"../../mcp/mcp_http_transport\";\nimport { startMcpStdioServer } from \"../../mcp/mcp_stdio_transport\";\nimport { parsePositiveInteger } from \"../command_options\";\nimport { createCliToolRuntime } from \"../toolRuntime\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterMcpCommandOptions = {\n currentVersion: string;\n packageName: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction runtime(options: RegisterMcpCommandOptions) {\n return createCliToolRuntime({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n });\n}\n\nasync function runStdio(options: RegisterMcpCommandOptions): Promise<void> {\n await startMcpStdioServer({\n packageName: options.packageName,\n runtime: runtime(options),\n version: options.currentVersion,\n });\n}\n\nexport function registerMcpCommand(program: Command, options: RegisterMcpCommandOptions): void {\n const mcpCommand = program\n .command(\"mcp\")\n .description(options.translator.t(\"cli.mcp.description\"));\n\n mcpCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"mcp.stdio\",\n createStateIfMissing: false,\n options: () => ({}),\n },\n async () => {\n await runStdio(options);\n },\n ),\n );\n\n const stdioCommand = mcpCommand\n .command(\"stdio\")\n .description(options.translator.t(\"cli.mcp.stdio.description\"));\n\n stdioCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"mcp.stdio\",\n createStateIfMissing: false,\n options: () => stdioCommand.opts(),\n },\n async () => {\n await runStdio(options);\n },\n ),\n );\n\n const httpCommand = mcpCommand\n .command(\"http\")\n .description(options.translator.t(\"cli.mcp.http.description\"))\n .option(\"--host <host>\", options.translator.t(\"cli.mcp.http.option.host\"), \"127.0.0.1\")\n .option(\"--port <port>\", options.translator.t(\"cli.mcp.http.option.port\"), \"3333\")\n .option(\n \"--origin <origin...>\",\n options.translator.t(\"cli.mcp.http.option.origin\"),\n [] as string[],\n );\n\n httpCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"mcp.http\",\n createStateIfMissing: false,\n options: () => httpCommand.opts(),\n },\n async (commandOptions: { host: string; origin: string[]; port: string }) => {\n if (commandOptions.host !== \"127.0.0.1\" && commandOptions.host !== \"localhost\") {\n throw new Error(\"MCP HTTP currently supports only localhost hosts.\");\n }\n\n const server = await startMcpHttpServer({\n allowedOrigins: commandOptions.origin,\n host: commandOptions.host,\n packageName: options.packageName,\n port: parsePositiveInteger(commandOptions.port),\n runtime: runtime(options),\n version: options.currentVersion,\n });\n\n const address = server.address();\n const port =\n typeof address === \"object\" && address !== null ? address.port : commandOptions.port;\n process.stderr.write(\n `Agent DevKit MCP HTTP listening on http://${commandOptions.host}:${port}/mcp\\n`,\n );\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport type { ModelsRegistryResult } from \"../../../modules/models/models.index\";\nimport {\n createModelsModuleBindings,\n formatModelsRegistryText,\n} from \"../../../modules/models/models.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterModelsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction modelsCapability() {\n const bindings = createModelsModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.registry;\n}\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, ModelsRegistryResult>,\n translator: Translator,\n json?: boolean,\n): void {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatModelsRegistryText(payload, translator));\n}\n\nexport function registerModelsCommand(\n program: Command,\n options: RegisterModelsCommandOptions,\n): void {\n const modelsCommand = program\n .command(\"models\")\n .description(options.translator.t(\"cli.models.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n modelsCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"models\",\n createStateIfMissing: false,\n options: () => modelsCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await modelsCapability().execute({ action: \"list\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const listCommand = modelsCommand\n .command(\"list\")\n .description(options.translator.t(\"cli.models.list.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n listCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"models.list\",\n createStateIfMissing: false,\n options: () => listCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n printResult(\n await modelsCapability().execute({ action: \"list\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const statusCommand = modelsCommand\n .command(\"status\")\n .argument(\"[id]\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.status.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n statusCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"models.status\",\n createStateIfMissing: false,\n options: () => statusCommand.opts(),\n },\n async (id: string | undefined) => {\n const commandOptions = statusCommand.opts<{ json?: boolean }>();\n printResult(\n await modelsCapability().execute({ action: \"status\", id }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const installCommand = modelsCommand\n .command(\"install\")\n .argument(\"<id>\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.install.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n installCommand.action(\n options.usageLogging.track(\n { area: \"system\", command: \"models.install\", options: () => installCommand.opts() },\n async (id: string) => {\n const commandOptions = installCommand.opts<{ json?: boolean }>();\n\n if (wantsJson(commandOptions) !== true) {\n process.stderr.write(`${options.translator.t(\"cli.models.install.progress\", { id })}\\n`);\n }\n\n printResult(\n await modelsCapability().execute({ action: \"install\", id }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const uninstallCommand = modelsCommand\n .command(\"uninstall\")\n .alias(\"rm\")\n .argument(\"<id>\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.uninstall.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n uninstallCommand.action(\n options.usageLogging.track(\n { area: \"system\", command: \"models.uninstall\", options: () => uninstallCommand.opts() },\n async (id: string) => {\n const commandOptions = uninstallCommand.opts<{ json?: boolean }>();\n printResult(\n await modelsCapability().execute({ action: \"uninstall\", id }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const updateCommand = modelsCommand\n .command(\"update\")\n .argument(\"[id]\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.update.description\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n updateCommand.action(\n options.usageLogging.track(\n { area: \"system\", command: \"models.update\", options: () => updateCommand.opts() },\n async (id: string | undefined) => {\n const commandOptions = updateCommand.opts<{ json?: boolean }>();\n printResult(\n await modelsCapability().execute({ action: \"update\", id }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const useCommand = modelsCommand\n .command(\"use\")\n .argument(\"<id>\", options.translator.t(\"cli.models.argument.id\"))\n .description(options.translator.t(\"cli.models.use.description\"))\n .option(\"--agent\", options.translator.t(\"cli.models.use.option.agent\"))\n .option(\"--chat\", options.translator.t(\"cli.models.use.option.chat\"))\n .option(\"--json\", options.translator.t(\"cli.models.option.json\"));\n\n useCommand.action(\n options.usageLogging.track(\n { area: \"system\", command: \"models.use\", options: () => useCommand.opts() },\n async (id: string) => {\n const commandOptions = useCommand.opts<{\n agent?: boolean;\n chat?: boolean;\n json?: boolean;\n }>();\n\n if (commandOptions.agent === true && commandOptions.chat === true) {\n throw new Error(\"Use only one of --agent or --chat.\");\n }\n\n const role =\n commandOptions.agent === true\n ? \"agent\"\n : commandOptions.chat === true\n ? \"chat\"\n : undefined;\n printResult(\n await modelsCapability().execute({ action: \"use\", id, role }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { ModelsRegistryResult, ModelView } from \"./registry.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nfunction formatSize(bytes: number): string {\n if (bytes <= 0) {\n return \"-\";\n }\n\n const megabytes = bytes / 1_000_000;\n return megabytes >= 1000 ? `${(megabytes / 1000).toFixed(1)}GB` : `${Math.round(megabytes)}MB`;\n}\n\nfunction formatModel(model: ModelView): string {\n const installedMark = model.installed ? \"*\" : \" \";\n const defaultMark = model.isDefault ? \"D\" : \" \";\n const state = model.installed ? \"installed\" : \"available\";\n\n return ` ${installedMark}${defaultMark} ${model.id.padEnd(32)} ${model.parameters.padEnd(6)} ${model.quantization.padEnd(8)} ${formatSize(model.sizeBytes).padEnd(7)} ${state}`;\n}\n\nexport function formatModelsRegistryText(\n result: ModelsRegistryResult,\n translator: Translator = defaultTranslator,\n): string {\n const t = (key: string, values?: Record<string, string | number | boolean>) =>\n translator.t(key, values);\n const rows = [\n t(\"models.title\"),\n t(\"models.command\"),\n \"\",\n `[${result.action}] ${result.directory}`,\n ];\n\n if (result.action === \"list\" || result.action === \"status\" || result.action === \"update\") {\n if (result.action === \"list\" && result.defaultId !== undefined) {\n rows.push(` ${t(\"models.field.default\")} ${result.defaultId}`);\n }\n\n rows.push(\"\", ...result.models.map(formatModel));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"install\") {\n rows.push(formatModel(result.model));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"uninstall\") {\n rows.push(` ${result.id} ${result.removed ? \"removed\" : \"not found\"}`);\n return rows.join(\"\\n\");\n }\n\n const roleSuffix = result.role === undefined ? \"\" : ` (${result.role})`;\n rows.push(` ${t(\"models.field.default\")} ${result.defaultId}${roleSuffix}`);\n return rows.join(\"\\n\");\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport type { PersonalizationResult } from \"../../../modules/user/user.index\";\nimport {\n createUserModuleBindings,\n formatPersonalizationText,\n} from \"../../../modules/user/user.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\nfunction personalizationCapability() {\n const bindings = createUserModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.personalization;\n}\n\ntype RegisterPersonalizationCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\ntype UpdateCommandOptions = {\n behavior?: string;\n character?: string;\n detail?: string;\n gender?: string;\n json?: boolean;\n name?: string;\n tone?: string;\n traits?: string;\n};\n\nfunction parseTraits(value: string | undefined): string[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n return value\n .split(\",\")\n .map((trait) => trait.trim())\n .filter((trait) => trait.length > 0);\n}\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, PersonalizationResult>,\n translator: Translator,\n json?: boolean,\n) {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatPersonalizationText(payload, translator));\n}\n\nexport function registerPersonalizationCommand(\n program: Command,\n options: RegisterPersonalizationCommandOptions,\n): void {\n const registerOptions = options;\n const personalization = program\n .command(\"personalization\")\n .alias(\"personalize\")\n .description(registerOptions.translator.t(\"cli.personalization.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.option.json\"))\n .action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization\",\n options: () => personalization.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await personalizationCapability().execute({ action: \"view\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const presetsCommand = personalization\n .command(\"characters\")\n .alias(\"presets\")\n .description(registerOptions.translator.t(\"cli.personalization.characters.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.characters.option.json\"));\n\n presetsCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.presets\",\n options: () => presetsCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await personalizationCapability().execute({ action: \"list-characters\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const selectCommand = personalization\n .command(\"select\")\n .argument(\"<character>\", registerOptions.translator.t(\"cli.personalization.select.argument\"))\n .description(registerOptions.translator.t(\"cli.personalization.select.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.select.option.json\"));\n\n selectCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.select\",\n options: () => selectCommand.opts(),\n },\n async (character: string) => {\n const commandOptions = selectCommand.opts<{ json?: boolean }>();\n\n await printResult(\n await personalizationCapability().execute({\n action: \"select-preset\",\n characterId: character,\n }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const updateCommand = personalization\n .command(\"update\")\n .description(registerOptions.translator.t(\"cli.personalization.update.description\"))\n .option(\"--name <name>\", registerOptions.translator.t(\"cli.personalization.update.option.name\"))\n .option(\n \"--character <character>\",\n registerOptions.translator.t(\"cli.personalization.update.option.character\"),\n )\n .option(\n \"--behavior <behavior>\",\n registerOptions.translator.t(\"cli.personalization.update.option.behavior\"),\n )\n .option(\"--tone <tone>\", registerOptions.translator.t(\"cli.personalization.update.option.tone\"))\n .option(\n \"--detail <detail>\",\n registerOptions.translator.t(\"cli.personalization.update.option.detail\"),\n )\n .option(\n \"--gender <gender>\",\n registerOptions.translator.t(\"cli.personalization.update.option.gender\"),\n )\n .option(\n \"--traits <traits>\",\n registerOptions.translator.t(\"cli.personalization.update.option.traits\"),\n )\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.update.option.json\"));\n\n updateCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.update\",\n options: () => updateCommand.opts(),\n },\n async () => {\n const commandOptions = updateCommand.opts<UpdateCommandOptions>();\n\n await printResult(\n await personalizationCapability().execute({\n action: \"update\",\n profile: {\n name: commandOptions.name,\n behavior: commandOptions.behavior as never,\n characterId: commandOptions.character,\n detailLevel: commandOptions.detail as never,\n gender: commandOptions.gender as never,\n tone: commandOptions.tone as never,\n traits: parseTraits(commandOptions.traits),\n },\n }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const createCommand = personalization\n .command(\"create\")\n .requiredOption(\n \"--id <id>\",\n registerOptions.translator.t(\"cli.personalization.create.option.id\"),\n )\n .requiredOption(\n \"--name <name>\",\n registerOptions.translator.t(\"cli.personalization.create.option.name\"),\n )\n .option(\"--from <id>\", registerOptions.translator.t(\"cli.personalization.create.option.from\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.create.option.json\"));\n\n createCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.create\",\n options: () => createCommand.opts(),\n },\n async () => {\n const commandOptions = createCommand.opts<{\n from?: string;\n id: string;\n json?: boolean;\n name: string;\n }>();\n\n await printResult(\n await personalizationCapability().execute({\n action: \"create-character\",\n character: {\n fromCharacterId: commandOptions.from,\n id: commandOptions.id,\n name: commandOptions.name,\n },\n }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const importSpriteCommand = personalization\n .command(\"import-sprite\")\n .requiredOption(\n \"--character <character>\",\n registerOptions.translator.t(\"cli.personalization.importSprite.option.character\"),\n )\n .requiredOption(\n \"--path <path>\",\n registerOptions.translator.t(\"cli.personalization.importSprite.option.path\"),\n )\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.importSprite.option.json\"));\n\n importSpriteCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.import-sprite\",\n options: () => importSpriteCommand.opts(),\n },\n async () => {\n const commandOptions = importSpriteCommand.opts<{\n character: string;\n json?: boolean;\n path: string;\n }>();\n\n await printResult(\n await personalizationCapability().execute({\n action: \"import-sprite\",\n characterId: commandOptions.character,\n sourcePath: commandOptions.path,\n }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const resetCurrentCommand = personalization\n .command(\"reset-current\")\n .description(registerOptions.translator.t(\"cli.personalization.resetCurrent.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.personalization.resetCurrent.option.json\"));\n\n resetCurrentCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.reset-current\",\n options: () => resetCurrentCommand.opts(),\n },\n async () => {\n const commandOptions = resetCurrentCommand.opts<{ json?: boolean }>();\n\n await printResult(\n await personalizationCapability().execute({ action: \"reset-current\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const resetDefaultsCommand = personalization\n .command(\"reset-defaults\")\n .description(registerOptions.translator.t(\"cli.personalization.resetDefaults.description\"))\n .option(\n \"--json\",\n registerOptions.translator.t(\"cli.personalization.resetDefaults.option.json\"),\n );\n\n resetDefaultsCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"personalization.reset-defaults\",\n options: () => resetDefaultsCommand.opts(),\n },\n async () => {\n const commandOptions = resetDefaultsCommand.opts<{ json?: boolean }>();\n\n await printResult(\n await personalizationCapability().execute({ action: \"reset-defaults\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { LanguageId, Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport type { PreferencesResult } from \"../../../modules/user/user.index\";\nimport { createUserModuleBindings, formatPreferencesText } from \"../../../modules/user/user.index\";\nimport { parsePositiveInteger, wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\nfunction preferencesCapability() {\n const bindings = createUserModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.preferences;\n}\n\ntype RegisterPreferencesCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, PreferencesResult>,\n translator: Translator,\n json?: boolean,\n) {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatPreferencesText(payload, translator));\n}\n\nexport function registerPreferencesCommand(\n program: Command,\n options: RegisterPreferencesCommandOptions,\n): void {\n const registerOptions = options;\n const preferences = program\n .command(\"preferences\")\n .alias(\"prefs\")\n .description(registerOptions.translator.t(\"cli.preferences.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.option.json\"))\n .action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences\",\n options: () => preferences.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await preferencesCapability().execute({ action: \"view\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const themesCommand = preferences\n .command(\"themes\")\n .description(registerOptions.translator.t(\"cli.preferences.themes.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.themes.option.json\"));\n\n themesCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.themes\",\n options: () => themesCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await preferencesCapability().execute({ action: \"view\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const languagesCommand = preferences\n .command(\"languages\")\n .description(registerOptions.translator.t(\"cli.preferences.languages.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.languages.option.json\"));\n\n languagesCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.languages\",\n options: () => languagesCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await preferencesCapability().execute({ action: \"view\" }),\n registerOptions.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const setThemeCommand = preferences\n .command(\"set-theme\")\n .argument(\"<theme>\", registerOptions.translator.t(\"cli.preferences.setTheme.argument\"))\n .description(registerOptions.translator.t(\"cli.preferences.setTheme.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.setTheme.option.json\"));\n\n setThemeCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.set-theme\",\n options: () => setThemeCommand.opts(),\n },\n async (theme: string) => {\n const options = setThemeCommand.opts<{ json?: boolean }>();\n await printResult(\n await preferencesCapability().execute({ action: \"set-theme\", theme }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n\n const setLanguageCommand = preferences\n .command(\"set-language\")\n .argument(\"<language>\", registerOptions.translator.t(\"cli.preferences.setLanguage.argument\"))\n .description(registerOptions.translator.t(\"cli.preferences.setLanguage.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.setLanguage.option.json\"));\n\n setLanguageCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.set-language\",\n options: () => setLanguageCommand.opts(),\n },\n async (language: string) => {\n const options = setLanguageCommand.opts<{ json?: boolean }>();\n await printResult(\n await preferencesCapability().execute({\n action: \"set-language\",\n language: language as LanguageId,\n }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n\n const setLogRetentionCommand = preferences\n .command(\"set-log-retention\")\n .argument(\"<days>\", registerOptions.translator.t(\"cli.preferences.setLogRetention.argument\"))\n .description(registerOptions.translator.t(\"cli.preferences.setLogRetention.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.setLogRetention.option.json\"));\n\n setLogRetentionCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.set-log-retention\",\n options: () => setLogRetentionCommand.opts(),\n },\n async (days: string) => {\n const options = setLogRetentionCommand.opts<{ json?: boolean }>();\n await printResult(\n await preferencesCapability().execute({\n action: \"set-log-retention\",\n logRetentionDays: parsePositiveInteger(days),\n }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n\n const updateCommand = preferences\n .command(\"update\")\n .description(registerOptions.translator.t(\"cli.preferences.update.description\"))\n .option(\"--theme <theme>\", registerOptions.translator.t(\"cli.preferences.update.option.theme\"))\n .option(\n \"--language <language>\",\n registerOptions.translator.t(\"cli.preferences.update.option.language\"),\n )\n .option(\n \"--log-retention-days <days>\",\n registerOptions.translator.t(\"cli.preferences.update.option.logRetentionDays\"),\n )\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.update.option.json\"));\n\n updateCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.update\",\n options: () => updateCommand.opts(),\n },\n async () => {\n const options = updateCommand.opts<{\n json?: boolean;\n language?: string;\n logRetentionDays?: string;\n theme?: string;\n }>();\n\n await printResult(\n await preferencesCapability().execute({\n action: \"update\",\n language: options.language as LanguageId | undefined,\n logRetentionDays:\n options.logRetentionDays === undefined\n ? undefined\n : parsePositiveInteger(options.logRetentionDays),\n theme: options.theme,\n }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n\n const resetDefaultsCommand = preferences\n .command(\"reset-defaults\")\n .description(registerOptions.translator.t(\"cli.preferences.resetDefaults.description\"))\n .option(\"--json\", registerOptions.translator.t(\"cli.preferences.resetDefaults.option.json\"));\n\n resetDefaultsCommand.action(\n registerOptions.usageLogging.track(\n {\n area: \"user\",\n command: \"preferences.reset-defaults\",\n options: () => resetDefaultsCommand.opts(),\n },\n async () => {\n const options = resetDefaultsCommand.opts<{ json?: boolean }>();\n await printResult(\n await preferencesCapability().execute({ action: \"reset-defaults\" }),\n registerOptions.translator,\n wantsJson(options),\n );\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n type ContextProjectsOptions,\n type ContextProjectsResult,\n createContextModuleBindings,\n formatContextProjectsText,\n} from \"../../../modules/context/context.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterProjectsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\ntype ProjectStatusSelection = \"active\" | \"archived\" | \"deleted\" | \"all\";\n\nfunction parseTags(value?: string): string[] | undefined {\n const tags = value\n ?.split(\",\")\n .map((tag) => tag.trim())\n .filter((tag) => tag.length > 0);\n\n return tags === undefined || tags.length === 0 ? undefined : tags;\n}\n\nfunction projectsCapability() {\n const bindings = createContextModuleBindings();\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.projects;\n}\n\nasync function printProjectsResult(\n commandOptions: { json?: boolean },\n options: ContextProjectsOptions,\n): Promise<void> {\n const result = await projectsCapability().execute(options);\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload: ContextProjectsResult = result.unwrap();\n\n if (wantsJson(commandOptions)) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatContextProjectsText(payload));\n}\n\nexport function registerProjectsCommand(\n program: Command,\n options: RegisterProjectsCommandOptions,\n): void {\n const projectsCommand = program\n .command(\"projects\")\n .alias(\"project\")\n .description(\"list and manage Agent DevKit context projects\")\n .option(\"--json\", \"print project result as JSON\")\n .option(\"--query <query>\", \"filter projects by text\")\n .option(\"--status <status>\", \"active, archived, deleted or all\");\n\n projectsCommand.action(\n options.usageLogging.track(\n {\n area: \"user\",\n command: \"projects\",\n options: () => projectsCommand.opts(),\n },\n async (commandOptions: {\n json?: boolean;\n query?: string;\n status?: ProjectStatusSelection;\n }) => {\n await printProjectsResult(commandOptions, {\n action: \"list\",\n query: commandOptions.query,\n status: commandOptions.status,\n });\n },\n ),\n );\n\n const createCommand = projectsCommand\n .command(\"create\")\n .description(\"create a context project\")\n .requiredOption(\"--name <name>\", \"project name\")\n .option(\"--description <description>\", \"project description\")\n .option(\"--json\", \"print project result as JSON\")\n .option(\"--path <path>\", \"project path\")\n .option(\"--tags <tags>\", \"comma-separated tags\");\n\n createCommand.action(\n options.usageLogging.track(\n {\n area: \"user\",\n command: \"projects.create\",\n options: () => createCommand.opts(),\n },\n async (commandOptions: {\n description?: string;\n json?: boolean;\n name: string;\n path?: string;\n tags?: string;\n }) => {\n await printProjectsResult(commandOptions, {\n action: \"create\",\n description: commandOptions.description,\n metadata: { homeDirectory: homedir() },\n name: commandOptions.name,\n path: commandOptions.path,\n tags: parseTags(commandOptions.tags),\n });\n },\n ),\n );\n\n const showCommand = projectsCommand\n .command(\"show\")\n .argument(\"<projectId>\", \"project id\")\n .description(\"show a context project\")\n .option(\"--json\", \"print project result as JSON\");\n\n showCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"projects.show\", options: () => showCommand.opts() },\n async (projectId: string, commandOptions: { json?: boolean }) => {\n await printProjectsResult(commandOptions, { action: \"show\", projectId });\n },\n ),\n );\n\n const updateCommand = projectsCommand\n .command(\"update\")\n .argument(\"<projectId>\", \"project id\")\n .description(\"update a context project\")\n .option(\"--description <description>\", \"project description\")\n .option(\"--json\", \"print project result as JSON\")\n .option(\"--name <name>\", \"project name\")\n .option(\"--path <path>\", \"project path\")\n .option(\"--tags <tags>\", \"comma-separated tags\");\n\n updateCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"projects.update\", options: () => updateCommand.opts() },\n async (\n projectId: string,\n commandOptions: {\n description?: string;\n json?: boolean;\n name?: string;\n path?: string;\n tags?: string;\n },\n ) => {\n await printProjectsResult(commandOptions, {\n action: \"update\",\n description: commandOptions.description,\n name: commandOptions.name,\n path: commandOptions.path,\n projectId,\n tags: parseTags(commandOptions.tags),\n });\n },\n ),\n );\n\n const archiveCommand = projectsCommand\n .command(\"archive\")\n .argument(\"<projectId>\", \"project id\")\n .description(\"archive a context project\")\n .option(\"--json\", \"print project result as JSON\");\n\n archiveCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"projects.archive\", options: () => archiveCommand.opts() },\n async (projectId: string, commandOptions: { json?: boolean }) => {\n await printProjectsResult(commandOptions, { action: \"archive\", projectId });\n },\n ),\n );\n\n const deleteCommand = projectsCommand\n .command(\"delete\")\n .argument(\"<projectId>\", \"project id\")\n .description(\"delete a context project\")\n .option(\"--hard\", \"remove project files\")\n .option(\"--json\", \"print project result as JSON\")\n .option(\"--yes\", \"confirm hard delete\");\n\n deleteCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"projects.delete\", options: () => deleteCommand.opts() },\n async (\n projectId: string,\n commandOptions: { hard?: boolean; json?: boolean; yes?: boolean },\n ) => {\n if (commandOptions.hard === true && commandOptions.yes !== true) {\n throw new Error(\"Hard delete requires --yes.\");\n }\n\n await printProjectsResult(commandOptions, {\n action: \"delete\",\n hard: commandOptions.hard === true,\n projectId,\n });\n },\n ),\n );\n}\n","import type { ContextProject, ContextProjectsResult } from \"./projects.entities\";\n\nfunction projectLine(project: ContextProject): string {\n return `${project.id.padEnd(24)} ${project.status.padEnd(8)} ${project.name}`;\n}\n\nexport function formatContextProjectsText(result: ContextProjectsResult): string {\n if (result.action === \"list\") {\n return [\"Agent DevKit Projects\", \"\", ...result.projects.map(projectLine)].join(\"\\n\");\n }\n\n if (result.action === \"delete\") {\n return `Agent DevKit Projects\\n\\n[delete] ${result.projectId} removed=${result.removed} hard=${result.hard}`;\n }\n\n return [\n \"Agent DevKit Projects\",\n \"\",\n `[${result.action}] ${result.project.id}`,\n projectLine(result.project),\n ].join(\"\\n\");\n}\n","import type { ContextSessionIndex, ContextSessionsResult } from \"./sessions.entities\";\n\nfunction sessionLine(session: ContextSessionIndex): string {\n return `${session.sessionId.padEnd(32)} ${session.status.padEnd(8)} ${session.title}`;\n}\n\nexport function formatContextSessionsText(result: ContextSessionsResult): string {\n if (result.action === \"list\") {\n return [\"Agent DevKit Sessions\", \"\", ...result.sessions.map(sessionLine)].join(\"\\n\");\n }\n\n if (result.action === \"search\") {\n return [\n \"Agent DevKit Sessions\",\n \"\",\n `[search] ${result.query}`,\n ...result.results.map((session) => `${sessionLine(session)} score=${session.score}`),\n ].join(\"\\n\");\n }\n\n if (result.action === \"delete\") {\n return `Agent DevKit Sessions\\n\\n[delete] ${result.sessionId} removed=${result.removed} hard=${result.hard}`;\n }\n\n const session = \"index\" in result ? result.index : undefined;\n const id = \"session\" in result ? result.session.id : session?.sessionId;\n\n return [\"Agent DevKit Sessions\", \"\", `[${result.action}] ${id ?? \"\"}`].join(\"\\n\");\n}\n","import { homedir } from \"node:os\";\nimport type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n createProjectModuleBindings,\n formatResetText,\n} from \"../../../modules/project/project.index\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterResetCommandOptions = {\n appVersion: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nexport function registerResetCommand(program: Command, options: RegisterResetCommandOptions): void {\n const resetCommand = program\n .command(\"reset\")\n .description(options.translator.t(\"cli.reset.description\"))\n .option(\"-g, --global\", options.translator.t(\"cli.reset.option.global\"))\n .option(\"--dry-run\", options.translator.t(\"cli.reset.option.dryRun\"))\n .option(\"--json\", options.translator.t(\"cli.reset.option.json\"))\n .option(\"--yes\", options.translator.t(\"cli.reset.option.yes\"));\n\n resetCommand.action(\n options.usageLogging.track(\n {\n area: \"project\",\n command: \"reset\",\n options: () => resetCommand.opts(),\n },\n async (commandOptions: {\n dryRun?: boolean;\n global?: boolean;\n json?: boolean;\n yes?: boolean;\n }) => {\n const bindings = createProjectModuleBindings({\n appVersion: options.appVersion,\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.reset.execute({\n confirmed: commandOptions.yes === true,\n dryRun: commandOptions.dryRun === true,\n homeDirectory: homedir(),\n projectRoot: process.cwd(),\n scope: commandOptions.global === true ? \"global\" : \"project\",\n });\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const resetResult = result.unwrap();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(resetResult, null, 2));\n return;\n }\n\n console.log(formatResetText(resetResult, options.translator));\n },\n ),\n );\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { ToolRuntimeResult } from \"../../../infra/bases/tool_runtime\";\nimport { createCliToolRuntime } from \"../toolRuntime\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterRunCommandOptions = {\n currentVersion: string;\n packageName: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction parseJsonInput(input: string): unknown {\n try {\n return JSON.parse(input);\n } catch {\n throw new Error(\"Invalid JSON passed to --input.\");\n }\n}\n\nfunction formatRunText(result: ToolRuntimeResult): string {\n if (result.status === \"succeeded\") {\n return JSON.stringify(result.output, null, 2);\n }\n\n return [`${result.status}: ${result.capabilityId}`, result.error?.message, result.error?.hint]\n .filter((line) => line !== undefined && line.length > 0)\n .join(\"\\n\");\n}\n\nexport function registerRunCommand(program: Command, options: RegisterRunCommandOptions): void {\n const runCommand = program\n .command(\"run\")\n .argument(\"<capabilityId>\", options.translator.t(\"cli.run.argument.capabilityId\"))\n .description(options.translator.t(\"cli.run.description\"))\n .requiredOption(\"--input <json>\", options.translator.t(\"cli.run.option.input\"))\n .option(\"--approve\", options.translator.t(\"cli.run.option.approve\"))\n .option(\"--json\", options.translator.t(\"cli.run.option.json\"));\n\n runCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"run\",\n options: () => runCommand.opts(),\n redactOptions: [\"--input\"],\n },\n async (\n capabilityId: string,\n commandOptions: { approve?: boolean; input: string; json?: boolean },\n ) => {\n const runtime = createCliToolRuntime({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n });\n const result = await runtime.execute({\n approved: commandOptions.approve === true,\n capabilityId,\n input: parseJsonInput(commandOptions.input),\n interface: \"cli\",\n requestedBy: \"agent.run\",\n });\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(result, null, 2));\n } else if (result.status === \"succeeded\") {\n console.log(formatRunText(result));\n } else {\n console.error(formatRunText(result));\n }\n\n if (result.status !== \"succeeded\") {\n process.exitCode = 1;\n }\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport { text } from \"node:stream/consumers\";\nimport type { Command } from \"commander\";\nimport type { AgentDevKitErrorCode } from \"../../../infra/bases/errors\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { Result } from \"../../../infra/bases/result\";\nimport type { SecretsVaultResult } from \"../../../modules/secrets/secrets.index\";\nimport {\n createSecretsModuleBindings,\n formatSecretsVaultText,\n} from \"../../../modules/secrets/secrets.index\";\nimport { wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterSecretsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction secretsCapability() {\n const bindings = createSecretsModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.vault;\n}\n\nasync function resolveSecretValue(options: { stdin?: boolean; value?: string }): Promise<string> {\n if (options.stdin === true && options.value !== undefined) {\n throw new Error(\"Use --stdin or --value, not both.\");\n }\n\n if (options.stdin === true) {\n const value = (await text(process.stdin)).replace(/\\r?\\n$/, \"\");\n\n if (value.length === 0) {\n throw new Error(\"Secret value from stdin cannot be empty.\");\n }\n\n return value;\n }\n\n if (options.value === undefined || options.value.length === 0) {\n throw new Error(\"Secret value is required. Use --stdin or --value.\");\n }\n\n return options.value;\n}\n\nfunction printResult(\n result: Result<AgentDevKitErrorCode, SecretsVaultResult>,\n translator: Translator,\n json?: boolean,\n) {\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n\n if (json === true) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatSecretsVaultText(payload, translator));\n}\n\nexport function registerSecretsCommand(\n program: Command,\n options: RegisterSecretsCommandOptions,\n): void {\n const secretsCommand = program\n .command(\"secrets\")\n .description(options.translator.t(\"cli.secrets.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"));\n\n secretsCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets\",\n options: () => secretsCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await secretsCapability().execute({ action: \"list\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const listCommand = secretsCommand\n .command(\"list\")\n .description(options.translator.t(\"cli.secrets.list.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"));\n\n listCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.list\",\n options: () => listCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n await printResult(\n await secretsCapability().execute({ action: \"list\" }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const setCommand = secretsCommand\n .command(\"set\")\n .argument(\"<name>\", options.translator.t(\"cli.secrets.argument.name\"))\n .description(options.translator.t(\"cli.secrets.set.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"))\n .option(\"--service <service>\", options.translator.t(\"cli.secrets.set.option.service\"))\n .option(\"--stdin\", options.translator.t(\"cli.secrets.set.option.stdin\"))\n .option(\"--value <value>\", options.translator.t(\"cli.secrets.set.option.value\"));\n\n setCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.set\",\n options: () => setCommand.opts(),\n redactOptions: [\"--value\"],\n },\n async (name: string) => {\n const commandOptions = setCommand.opts<{\n json?: boolean;\n service?: string;\n stdin?: boolean;\n value?: string;\n }>();\n const value = await resolveSecretValue(commandOptions);\n await printResult(\n await secretsCapability().execute({\n action: \"set\",\n name,\n service: commandOptions.service,\n value,\n }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const showCommand = secretsCommand\n .command(\"show\")\n .argument(\"<name>\", options.translator.t(\"cli.secrets.argument.name\"))\n .description(options.translator.t(\"cli.secrets.show.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"))\n .option(\"--reveal\", options.translator.t(\"cli.secrets.show.option.reveal\"));\n\n showCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.show\",\n options: () => showCommand.opts(),\n },\n async (name: string) => {\n const commandOptions = showCommand.opts<{ json?: boolean; reveal?: boolean }>();\n await printResult(\n await secretsCapability().execute({\n action: \"show\",\n name,\n reveal: commandOptions.reveal === true,\n }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const rotateCommand = secretsCommand\n .command(\"rotate\")\n .argument(\"<name>\", options.translator.t(\"cli.secrets.argument.name\"))\n .description(options.translator.t(\"cli.secrets.rotate.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"))\n .option(\"--service <service>\", options.translator.t(\"cli.secrets.set.option.service\"))\n .option(\"--stdin\", options.translator.t(\"cli.secrets.set.option.stdin\"))\n .option(\"--value <value>\", options.translator.t(\"cli.secrets.set.option.value\"));\n\n rotateCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.rotate\",\n options: () => rotateCommand.opts(),\n redactOptions: [\"--value\"],\n },\n async (name: string) => {\n const commandOptions = rotateCommand.opts<{\n json?: boolean;\n service?: string;\n stdin?: boolean;\n value?: string;\n }>();\n const value = await resolveSecretValue(commandOptions);\n await printResult(\n await secretsCapability().execute({\n action: \"rotate\",\n name,\n service: commandOptions.service,\n value,\n }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const auditCommand = secretsCommand\n .command(\"audit\")\n .argument(\"[name]\", options.translator.t(\"cli.secrets.audit.argument.name\"))\n .description(options.translator.t(\"cli.secrets.audit.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"));\n\n auditCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.audit\",\n options: () => auditCommand.opts(),\n },\n async (name: string | undefined) => {\n const commandOptions = auditCommand.opts<{ json?: boolean }>();\n await printResult(\n await secretsCapability().execute({ action: \"audit\", name }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n\n const removeCommand = secretsCommand\n .command(\"remove\")\n .alias(\"rm\")\n .argument(\"<name>\", options.translator.t(\"cli.secrets.argument.name\"))\n .description(options.translator.t(\"cli.secrets.remove.description\"))\n .option(\"--json\", options.translator.t(\"cli.secrets.option.json\"));\n\n removeCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"secrets.remove\",\n options: () => removeCommand.opts(),\n },\n async (name: string) => {\n const commandOptions = removeCommand.opts<{ json?: boolean }>();\n await printResult(\n await secretsCapability().execute({ action: \"remove\", name }),\n options.translator,\n wantsJson(commandOptions),\n );\n },\n ),\n );\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { SecretsVaultResult, SecretView } from \"./vault.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nfunction formatSecret(secret: SecretView): string {\n return ` ${secret.name.padEnd(28)} ${(secret.service ?? \"-\").padEnd(12)} ${secret.value ?? \"********\"}`;\n}\n\nfunction formatAuditEvent(event: SecretsVaultResult & { action: \"audit\" }): string[] {\n return event.events.map(\n (auditEvent) =>\n ` ${auditEvent.timestamp.padEnd(24)} ${auditEvent.action.padEnd(8)} ${auditEvent.name.padEnd(28)} ${auditEvent.service ?? \"-\"}`,\n );\n}\n\nexport function formatSecretsVaultText(\n result: SecretsVaultResult,\n translator: Translator = defaultTranslator,\n): string {\n const t = (key: string, values?: Record<string, string | number | boolean>) =>\n translator.t(key, values);\n const rows = [t(\"secrets.title\"), t(\"secrets.command\"), \"\", `[${result.action}] ${result.path}`];\n\n if (result.action === \"audit\") {\n rows.push(\"\", ` ${t(\"secrets.section.audit\")}`, ...formatAuditEvent(result));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"list\") {\n rows.push(\"\", ` ${t(\"secrets.section.items\")}`, ...result.secrets.map(formatSecret));\n return rows.join(\"\\n\");\n }\n\n if (result.action === \"remove\") {\n rows.push(` ${t(\"secrets.field.name\").padEnd(8)} ${result.secret.name}`);\n rows.push(` ${t(\"secrets.field.removed\").padEnd(8)} ${String(result.removed)}`);\n return rows.join(\"\\n\");\n }\n\n rows.push(formatSecret(result.secret));\n return rows.join(\"\\n\");\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport {\n type ContextMessageKind,\n type ContextMessageRole,\n type ContextSessionOrigin,\n type ContextSessionsOptions,\n type ContextSessionsResult,\n createContextModuleBindings,\n formatContextSessionsText,\n} from \"../../../modules/context/context.index\";\nimport { parseNonNegativeInteger, wantsJson } from \"../command_options\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterSessionsCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\ntype SessionStatusSelection = \"active\" | \"archived\" | \"deleted\" | \"all\";\n\nfunction parseTags(value?: string): string[] | undefined {\n const tags = value\n ?.split(\",\")\n .map((tag) => tag.trim())\n .filter((tag) => tag.length > 0);\n\n return tags === undefined || tags.length === 0 ? undefined : tags;\n}\n\nfunction sessionsCapability() {\n const bindings = createContextModuleBindings();\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n return bindings.unwrap().capabilities.sessions;\n}\n\nasync function printSessionsResult(\n commandOptions: { json?: boolean },\n options: ContextSessionsOptions,\n): Promise<void> {\n const result = await sessionsCapability().execute(options);\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload: ContextSessionsResult = result.unwrap();\n\n if (wantsJson(commandOptions)) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log(formatContextSessionsText(payload));\n}\n\nexport function registerSessionsCommand(\n program: Command,\n options: RegisterSessionsCommandOptions,\n): void {\n const sessionsCommand = program\n .command(\"sessions\")\n .alias(\"session\")\n .description(\"list and manage Agent DevKit context sessions\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--limit <limit>\", \"maximum number of sessions\")\n .option(\"--project <projectId>\", \"project id\")\n .option(\"--query <query>\", \"filter sessions by text\")\n .option(\"--status <status>\", \"active, archived, deleted or all\");\n\n sessionsCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions\", options: () => sessionsCommand.opts() },\n async (commandOptions: {\n json?: boolean;\n limit?: string;\n project?: string;\n query?: string;\n status?: SessionStatusSelection;\n }) => {\n await printSessionsResult(commandOptions, {\n action: \"list\",\n limit: parseNonNegativeInteger(commandOptions.limit),\n projectId: commandOptions.project,\n query: commandOptions.query,\n status: commandOptions.status,\n });\n },\n ),\n );\n\n const createCommand = sessionsCommand\n .command(\"create\")\n .description(\"create a context session\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--origin <origin>\", \"cli, tui, mcp or agent\", \"cli\")\n .option(\"--project <projectId>\", \"project id\")\n .option(\"--tags <tags>\", \"comma-separated tags\")\n .option(\"--title <title>\", \"session title\");\n\n createCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.create\", options: () => createCommand.opts() },\n async (commandOptions: {\n json?: boolean;\n origin?: ContextSessionOrigin;\n project?: string;\n tags?: string;\n title?: string;\n }) => {\n await printSessionsResult(commandOptions, {\n action: \"create\",\n origin: commandOptions.origin ?? \"cli\",\n projectId: commandOptions.project,\n tags: parseTags(commandOptions.tags),\n title: commandOptions.title,\n });\n },\n ),\n );\n\n const appendCommand = sessionsCommand\n .command(\"append\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"append a message to a context session\")\n .requiredOption(\"--content <content>\", \"message content\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--kind <kind>\", \"message, event, tool-call, tool-result or summary\", \"message\")\n .option(\"--role <role>\", \"user, assistant, system or tool\", \"user\");\n\n appendCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.append\", options: () => appendCommand.opts() },\n async (\n sessionId: string,\n commandOptions: {\n content: string;\n json?: boolean;\n kind?: ContextMessageKind;\n role?: ContextMessageRole;\n },\n ) => {\n await printSessionsResult(commandOptions, {\n action: \"append-message\",\n content: commandOptions.content,\n kind: commandOptions.kind ?? \"message\",\n role: commandOptions.role ?? \"user\",\n sessionId,\n });\n },\n ),\n );\n\n const showCommand = sessionsCommand\n .command(\"show\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"show a context session\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--limit <limit>\", \"maximum number of messages\")\n .option(\"--messages\", \"include messages\");\n\n showCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.show\", options: () => showCommand.opts() },\n async (\n sessionId: string,\n commandOptions: { json?: boolean; limit?: string; messages?: boolean },\n ) => {\n await printSessionsResult(commandOptions, {\n action: \"show\",\n includeMessages: commandOptions.messages === true,\n limit: parseNonNegativeInteger(commandOptions.limit),\n sessionId,\n });\n },\n ),\n );\n\n const searchCommand = sessionsCommand\n .command(\"search\")\n .argument(\"<query>\", \"query\")\n .description(\"search context sessions\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--limit <limit>\", \"maximum number of results\")\n .option(\"--project <projectId>\", \"project id\");\n\n searchCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.search\", options: () => searchCommand.opts() },\n async (\n query: string,\n commandOptions: { json?: boolean; limit?: string; project?: string },\n ) => {\n await printSessionsResult(commandOptions, {\n action: \"search\",\n limit: parseNonNegativeInteger(commandOptions.limit),\n projectId: commandOptions.project,\n query,\n });\n },\n ),\n );\n\n const resumeCommand = sessionsCommand\n .command(\"resume\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"resume a context session\")\n .option(\"--json\", \"print session result as JSON\");\n\n resumeCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.resume\", options: () => resumeCommand.opts() },\n async (sessionId: string, commandOptions: { json?: boolean }) => {\n await printSessionsResult(commandOptions, { action: \"resume\", sessionId });\n },\n ),\n );\n\n const archiveCommand = sessionsCommand\n .command(\"archive\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"archive a context session\")\n .option(\"--json\", \"print session result as JSON\");\n\n archiveCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.archive\", options: () => archiveCommand.opts() },\n async (sessionId: string, commandOptions: { json?: boolean }) => {\n await printSessionsResult(commandOptions, { action: \"archive\", sessionId });\n },\n ),\n );\n\n const deleteCommand = sessionsCommand\n .command(\"delete\")\n .argument(\"<sessionId>\", \"session id\")\n .description(\"delete a context session\")\n .option(\"--hard\", \"remove session files\")\n .option(\"--json\", \"print session result as JSON\")\n .option(\"--yes\", \"confirm hard delete\");\n\n deleteCommand.action(\n options.usageLogging.track(\n { area: \"user\", command: \"sessions.delete\", options: () => deleteCommand.opts() },\n async (\n sessionId: string,\n commandOptions: { hard?: boolean; json?: boolean; yes?: boolean },\n ) => {\n if (commandOptions.hard === true && commandOptions.yes !== true) {\n throw new Error(\"Hard delete requires --yes.\");\n }\n\n await printSessionsResult(commandOptions, {\n action: \"delete\",\n hard: commandOptions.hard === true,\n sessionId,\n });\n },\n ),\n );\n}\n","import type { Command } from \"commander\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport type { ToolRuntimeTool } from \"../../../infra/bases/tool_runtime\";\nimport { createCliToolRuntime } from \"../toolRuntime\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterToolsCommandOptions = {\n currentVersion: string;\n packageName: string;\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nfunction formatToolsText(tools: ToolRuntimeTool[]): string {\n const rows = tools.map((tool) => ({\n id: tool.id,\n kind: tool.kind,\n module: tool.moduleId,\n risk: tool.risk,\n }));\n const widths = {\n id: Math.max(\"id\".length, ...rows.map((row) => row.id.length)),\n kind: Math.max(\"kind\".length, ...rows.map((row) => row.kind.length)),\n module: Math.max(\"module\".length, ...rows.map((row) => row.module.length)),\n risk: Math.max(\"risk\".length, ...rows.map((row) => row.risk.length)),\n };\n const line = (row: { id: string; kind: string; module: string; risk: string }) =>\n `${row.id.padEnd(widths.id)} ${row.module.padEnd(widths.module)} ${row.risk.padEnd(\n widths.risk,\n )} ${row.kind.padEnd(widths.kind)}`;\n\n return [\n line({ id: \"id\", kind: \"kind\", module: \"module\", risk: \"risk\" }),\n line({\n id: \"-\".repeat(widths.id),\n kind: \"-\".repeat(widths.kind),\n module: \"-\".repeat(widths.module),\n risk: \"-\".repeat(widths.risk),\n }),\n ...rows.map(line),\n ].join(\"\\n\");\n}\n\nexport function registerToolsCommand(program: Command, options: RegisterToolsCommandOptions): void {\n const toolsCommand = program\n .command(\"tools\")\n .description(options.translator.t(\"cli.tools.description\"))\n .option(\"--json\", options.translator.t(\"cli.tools.option.json\"));\n\n toolsCommand.action(\n options.usageLogging.track(\n {\n area: \"system\",\n command: \"tools\",\n createStateIfMissing: false,\n options: () => toolsCommand.opts(),\n },\n async (commandOptions: { json?: boolean }) => {\n const runtime = createCliToolRuntime({\n currentVersion: options.currentVersion,\n packageName: options.packageName,\n });\n const tools = runtime.listTools();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify({ tools }, null, 2));\n return;\n }\n\n console.log(formatToolsText(tools));\n },\n ),\n );\n}\n","import { I18nCatalog } from \"../../../../infra/assets/i18n_catalog\";\nimport type { Translator } from \"../../../../infra/bases/i18n\";\nimport type { SelfUpdateResult } from \"./update.entities\";\n\nconst defaultTranslator = new I18nCatalog().translator(\"en-US\");\n\nexport function formatUpdateText(result: SelfUpdateResult, translator?: Translator): string {\n const activeTranslator = translator ?? defaultTranslator;\n const t = (key: string) => activeTranslator.t(key);\n\n return [\n t(\"update.title\"),\n t(\"update.command\"),\n \"\",\n `[${result.status}] ${result.packageName}`,\n ` ${t(\"update.field.current\").padEnd(8)} ${result.currentVersion}`,\n ` ${t(\"update.field.selected\").padEnd(8)} ${result.selectedVersion}`,\n result.command\n ? ` ${t(\"update.field.command\").padEnd(8)} ${result.command}`\n : ` ${t(\"update.field.command\").padEnd(8)} ${t(\"update.noUpdateRequired\")}`,\n \"\",\n ` ${t(\"update.section.versions\")}`,\n ...result.versions.slice(0, 8).map((version) => {\n const marker = version.selected ? \">\" : \" \";\n const labels = [\n version.current ? t(\"update.label.current\") : undefined,\n version.latest ? t(\"update.label.latest\") : undefined,\n ]\n .filter(Boolean)\n .join(\", \");\n return ` ${marker} ${version.version}${labels ? ` ${labels}` : \"\"}`;\n }),\n ].join(\"\\n\");\n}\n","import type { Command } from \"commander\";\nimport packageJson from \"../../../../package.json\";\nimport type { Translator } from \"../../../infra/bases/i18n\";\nimport { createSelfModuleBindings, formatUpdateText } from \"../../../modules/self/self.index\";\nimport type { CliUsageLoggingMiddleware } from \"../usageLogging\";\n\ntype RegisterUpdateCommandOptions = {\n translator: Translator;\n usageLogging: CliUsageLoggingMiddleware;\n};\n\nexport function registerUpdateCommand(\n program: Command,\n options: RegisterUpdateCommandOptions,\n): void {\n const updateCommand = program\n .command(\"update\")\n .argument(\"[version]\", options.translator.t(\"cli.update.argument.version\"))\n .description(options.translator.t(\"cli.update.description\"))\n .option(\"--dry-run\", options.translator.t(\"cli.update.option.dryRun\"))\n .option(\"--json\", options.translator.t(\"cli.update.option.json\"))\n .option(\"--latest\", options.translator.t(\"cli.update.option.latest\"))\n .option(\"--yes\", options.translator.t(\"cli.update.option.yes\"));\n\n updateCommand.action(\n options.usageLogging.track(\n {\n area: \"self\",\n command: \"update\",\n options: () => updateCommand.opts(),\n },\n async (\n targetVersion: string | undefined,\n commandOptions: {\n dryRun?: boolean;\n json?: boolean;\n latest?: boolean;\n yes?: boolean;\n },\n ) => {\n const bindings = createSelfModuleBindings({\n currentVersion: packageJson.version,\n packageName: packageJson.name,\n });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n const result = await bindings.unwrap().capabilities.update.execute({\n dryRun: commandOptions.dryRun === true,\n latest: commandOptions.latest === true,\n version: targetVersion,\n yes: commandOptions.yes === true,\n });\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const updateResult = result.unwrap();\n\n if (commandOptions.json === true) {\n console.log(JSON.stringify(updateResult, null, 2));\n return;\n }\n\n console.log(formatUpdateText(updateResult, options.translator));\n },\n ),\n );\n}\n","import { homedir } from \"node:os\";\nimport { createInterface } from \"node:readline/promises\";\nimport type { Translator } from \"../../infra/bases/i18n\";\nimport { ModelCatalogLoader } from \"../../infra/models/model_catalog\";\nimport { createModelsModuleBindings } from \"../../modules/models/models.index\";\n\nfunction affirmative(answer: string): boolean {\n const normalized = answer.trim().toLowerCase();\n return normalized === \"y\" || normalized === \"yes\" || normalized === \"s\" || normalized === \"sim\";\n}\n\n/**\n * On the first interactive `agent` run, confirm a local model is available.\n * If none is installed, offer to download the recommended one. Never blocks the\n * tool: any failure or a non-interactive terminal falls through silently.\n */\nexport async function ensureFirstRunModel(translator: Translator): Promise<void> {\n const bindings = createModelsModuleBindings({ homeDirectory: homedir() });\n\n if (bindings.isErr()) {\n return;\n }\n\n const registry = bindings.unwrap().capabilities.registry;\n const models = await registry.execute({ action: \"list\" });\n\n if (models.isErr()) {\n return;\n }\n\n const modelsResult = models.unwrap();\n\n if (modelsResult.action !== \"list\" || modelsResult.models.some((model) => model.installed)) {\n return;\n }\n\n const recommended = await new ModelCatalogLoader().recommended();\n const entry = recommended.isOk() ? recommended.unwrap() : undefined;\n\n if (entry === undefined) {\n return;\n }\n\n const interactive = process.stdin.isTTY === true && process.stdout.isTTY === true;\n\n if (!interactive) {\n process.stderr.write(`${translator.t(\"cli.firstRun.hint\", { id: entry.id })}\\n`);\n return;\n }\n\n const readline = createInterface({ input: process.stdin, output: process.stdout });\n\n try {\n const answer = await readline.question(\n `${translator.t(\"cli.firstRun.prompt\", { id: entry.id })} `,\n );\n\n if (!affirmative(answer)) {\n return;\n }\n\n process.stdout.write(`${translator.t(\"cli.models.install.progress\", { id: entry.id })}\\n`);\n\n const result = await registry.execute({ action: \"install\", id: entry.id });\n\n if (result.isErr()) {\n process.stderr.write(`${translator.t(\"cli.firstRun.failed\", { id: entry.id })}\\n`);\n return;\n }\n\n await registry.execute({ action: \"use\", id: entry.id });\n process.stdout.write(`${translator.t(\"cli.firstRun.installed\", { id: entry.id })}\\n`);\n } finally {\n readline.close();\n }\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { I18nCatalog } from \"../../infra/assets/i18n_catalog\";\nimport type { LanguageId, Translator } from \"../../infra/bases/i18n\";\n\nconst supportedLanguages: LanguageId[] = [\"pt-BR\", \"en-US\", \"fr-FR\", \"zh-CN\", \"ja-JP\"];\n\nexport type CliUserPreferences = {\n language: LanguageId;\n logRetentionDays: number;\n};\n\nfunction isLanguageId(value: unknown): value is LanguageId {\n return typeof value === \"string\" && supportedLanguages.includes(value as LanguageId);\n}\n\nfunction isLogRetentionDays(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 1 && value <= 3650;\n}\n\nexport function loadCliUserPreferences(homeDirectory: string = homedir()): CliUserPreferences {\n const canonicalPreferencesPath = join(\n homeDirectory,\n \".agent-devkit\",\n \"data\",\n \"preferences\",\n \"preferences.json\",\n );\n const legacyPreferencesPath = join(homeDirectory, \".agent-devkit\", \"preferences.json\");\n const preferencesPath = existsSync(canonicalPreferencesPath)\n ? canonicalPreferencesPath\n : legacyPreferencesPath;\n\n if (!existsSync(preferencesPath)) {\n return { language: \"pt-BR\", logRetentionDays: 30 };\n }\n\n try {\n const payload = JSON.parse(readFileSync(preferencesPath, \"utf8\")) as {\n language?: unknown;\n logRetentionDays?: unknown;\n };\n\n return {\n language: isLanguageId(payload.language) ? payload.language : \"pt-BR\",\n logRetentionDays: isLogRetentionDays(payload.logRetentionDays)\n ? payload.logRetentionDays\n : 30,\n };\n } catch {\n return { language: \"pt-BR\", logRetentionDays: 30 };\n }\n}\n\nexport function createCliTranslator(homeDirectory = homedir()): Translator {\n return new I18nCatalog().translator(loadCliUserPreferences(homeDirectory).language);\n}\n\nexport function configureLocalizedHelp(program: Command, translator: Translator): void {\n const titleMap: Record<string, string> = {\n \"Arguments:\": \"cli.help.title.arguments\",\n \"Commands:\": \"cli.help.title.commands\",\n \"Global Options:\": \"cli.help.title.globalOptions\",\n \"Options:\": \"cli.help.title.options\",\n \"Usage:\": \"cli.help.title.usage\",\n };\n\n program.configureHelp({\n styleTitle: (title) => translator.t(titleMap[title] ?? title),\n });\n program.helpOption(\"-h, --help\", translator.t(\"cli.help.option\"));\n}\n","import { homedir } from \"node:os\";\nimport type { AgentDataPath, AgentDataStore } from \"../../infra/bases/data_store\";\nimport { createBrainDockProvider } from \"../../infra/brain/brain_dock\";\nimport { LocalAgentDataStore } from \"../../infra/data\";\nimport {\n type ContextSessionsService,\n createContextModuleBindings,\n} from \"../../modules/context/context.index\";\nimport {\n createConversationModuleBindings,\n formatConversationChatText,\n} from \"../../modules/conversation/conversation.index\";\n\ntype CliConversationState = {\n activeSessionId: string;\n schema: \"agent-devkit.cli-conversation-state/v1\";\n updatedAt: string;\n};\n\nconst cliConversationStatePath = {\n namespace: \"conversation\",\n segments: [\"cli-state.json\"],\n} satisfies AgentDataPath;\n\nfunction isCliConversationState(value: unknown): value is CliConversationState {\n const record = value as Partial<CliConversationState>;\n\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"activeSessionId\" in value &&\n \"schema\" in value &&\n typeof record.activeSessionId === \"string\" &&\n record.activeSessionId.length > 0 &&\n record.schema === \"agent-devkit.cli-conversation-state/v1\"\n );\n}\n\nasync function loadActiveCliSessionId(\n dataStore: AgentDataStore,\n sessions: ContextSessionsService,\n): Promise<string | undefined> {\n const state = await dataStore.readJson<unknown>(cliConversationStatePath);\n\n if (state.isErr()) {\n return undefined;\n }\n\n const statePayload = state.unwrap();\n\n if (!isCliConversationState(statePayload)) {\n return undefined;\n }\n\n const current = await sessions.execute({\n action: \"show\",\n includeMessages: false,\n sessionId: statePayload.activeSessionId,\n });\n\n if (current.isErr()) {\n return undefined;\n }\n\n const result = current.unwrap();\n\n if (\n result.action !== \"show\" ||\n result.session.origin !== \"cli\" ||\n result.session.status !== \"active\"\n ) {\n return undefined;\n }\n\n return result.session.id;\n}\n\nasync function saveActiveCliSessionId(dataStore: AgentDataStore, sessionId: string): Promise<void> {\n await dataStore.writeJson<CliConversationState>(\n cliConversationStatePath,\n {\n activeSessionId: sessionId,\n schema: \"agent-devkit.cli-conversation-state/v1\",\n updatedAt: new Date().toISOString(),\n },\n { atomic: true },\n );\n}\n\nexport async function runRootConversation(message: string): Promise<void> {\n const homeDirectory = homedir();\n const dataStore = new LocalAgentDataStore({\n rootDirectory: `${homeDirectory}/.agent-devkit/data`,\n });\n const bindings = createConversationModuleBindings({\n brainProvider: createBrainDockProvider({ stateDirectory: `${homeDirectory}/.agent-devkit` }),\n dataStore,\n homeDirectory,\n });\n const contextBindings = createContextModuleBindings({ dataStore, homeDirectory });\n\n if (bindings.isErr()) {\n throw new Error(bindings.unwrapError());\n }\n\n if (contextBindings.isErr()) {\n throw new Error(contextBindings.unwrapError());\n }\n\n const activeSessionId = await loadActiveCliSessionId(\n dataStore,\n contextBindings.unwrap().capabilities.sessions,\n );\n const result = await bindings.unwrap().capabilities.chat.execute({\n action: \"send\",\n message,\n sessionId: activeSessionId,\n });\n\n if (result.isErr()) {\n throw new Error(result.unwrapError());\n }\n\n const payload = result.unwrap();\n await saveActiveCliSessionId(dataStore, payload.sessionId);\n console.log(formatConversationChatText(payload));\n}\n","import type { ConversationChatResult } from \"./chat.entities\";\n\nexport function formatConversationChatText(result: ConversationChatResult): string {\n const agentName = result.prompt.agent.name.trim();\n const reply = result.reply.trim();\n const speakerPrefix = `${agentName}:`;\n const normalizedReply = reply.toLowerCase().startsWith(speakerPrefix.toLowerCase())\n ? reply\n : `${speakerPrefix} ${reply}`;\n const metadata = [`Session: ${result.sessionId}`];\n\n if (result.projectId !== undefined) {\n metadata.push(`Project: ${result.projectId}`);\n }\n\n if (result.brain.model !== undefined || result.brain.provider !== undefined) {\n metadata.push(\n `Model: ${[result.brain.provider, result.brain.model].filter(Boolean).join(\"/\")}`,\n );\n }\n\n if (result.brain.usage !== undefined) {\n const tokens = [\n result.brain.usage.inputTokens === undefined\n ? undefined\n : `input ${result.brain.usage.inputTokens}`,\n result.brain.usage.outputTokens === undefined\n ? undefined\n : `output ${result.brain.usage.outputTokens}`,\n result.brain.usage.totalTokens === undefined\n ? undefined\n : `total ${result.brain.usage.totalTokens}`,\n ].filter(Boolean);\n\n if (tokens.length > 0) {\n metadata.push(`Tokens: ${tokens.join(\", \")}`);\n }\n }\n\n return [normalizedReply, \"\", ...metadata].join(\"\\n\");\n}\n","const redacted = \"[redacted]\";\nconst sensitiveKeyPattern = /(api[-_]?key|auth|credential|password|secret|token|value)/i;\n\nfunction normalizeOptionName(option: string): string {\n return option.replace(/^--?/, \"\").replace(/-([a-z])/g, (_, char: string) => char.toUpperCase());\n}\n\nfunction isSensitiveKey(key: string, sensitiveKeys: Set<string>): boolean {\n return sensitiveKeys.has(key) || sensitiveKeyPattern.test(key);\n}\n\nexport function redactArgv(argv: string[], sensitiveOptions: string[] = []): string[] {\n const sensitiveFlags = new Set(sensitiveOptions);\n const output: string[] = [];\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === undefined) {\n continue;\n }\n\n if (sensitiveFlags.has(token)) {\n output.push(token);\n if (index + 1 < argv.length) {\n output.push(redacted);\n index += 1;\n }\n continue;\n }\n\n const [flag] = token.split(\"=\");\n if (flag !== undefined && sensitiveFlags.has(flag) && token.includes(\"=\")) {\n output.push(`${flag}=${redacted}`);\n continue;\n }\n\n output.push(token);\n }\n\n return output;\n}\n\nexport function redactUnknown(value: unknown, sensitiveOptionNames: string[] = []): unknown {\n const sensitiveKeys = new Set(sensitiveOptionNames.map(normalizeOptionName));\n\n if (Array.isArray(value)) {\n return value.map((item) => redactUnknown(item, sensitiveOptionNames));\n }\n\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined && typeof entryValue !== \"function\")\n .map(([key, entryValue]) => [\n key,\n isSensitiveKey(key, sensitiveKeys)\n ? redacted\n : redactUnknown(entryValue, sensitiveOptionNames),\n ]),\n );\n}\n\nexport function redactRecord(\n value: Record<string, unknown>,\n sensitiveOptionNames: string[] = [],\n): Record<string, unknown> {\n return redactUnknown(value, sensitiveOptionNames) as Record<string, unknown>;\n}\n","import type {\n LogLevel,\n TechnicalLogger,\n UsageLogArea,\n UsageLogger,\n} from \"../../infra/bases/logger\";\nimport { errorCause } from \"../../infra/helpers/error_cause\";\nimport { redactArgv, redactRecord } from \"../../infra/helpers/redaction\";\n\ntype CliUsageLoggingMiddlewareOptions = {\n argv?: string[];\n clock?: () => number;\n logger: UsageLogger;\n technicalLogger?: TechnicalLogger;\n};\n\ntype CliUsageMetadata = {\n area: UsageLogArea;\n command: string;\n createStateIfMissing?: boolean;\n options?: () => Record<string, unknown>;\n redactOptions?: string[];\n};\n\nexport class CliUsageLoggingMiddleware {\n readonly #argv: string[];\n readonly #clock: () => number;\n readonly #logger: UsageLogger;\n readonly #technicalLogger?: TechnicalLogger;\n\n constructor(options: CliUsageLoggingMiddlewareOptions) {\n this.#argv = options.argv ?? process.argv.slice(2);\n this.#clock = options.clock ?? (() => Date.now());\n this.#logger = options.logger;\n this.#technicalLogger = options.technicalLogger;\n }\n\n track<TArgs extends unknown[]>(\n metadata: CliUsageMetadata,\n handler: (...args: TArgs) => Promise<void> | void,\n ): (...args: TArgs) => Promise<void> {\n return async (...args: TArgs) => {\n const startedAt = this.#clock();\n\n try {\n await this.#writeTechnical(metadata, \"command.started\", \"info\", \"CLI command started\");\n await handler(...args);\n await this.#writeTechnical(\n metadata,\n \"command.succeeded\",\n \"info\",\n \"CLI command succeeded\",\n this.#clock() - startedAt,\n );\n await this.#write(metadata, \"succeeded\", this.#clock() - startedAt);\n } catch (error) {\n await this.#writeTechnical(\n metadata,\n \"command.failed\",\n \"error\",\n \"CLI command failed\",\n this.#clock() - startedAt,\n error,\n );\n await this.#write(metadata, \"failed\", this.#clock() - startedAt, error);\n throw error;\n }\n };\n }\n\n async #write(\n metadata: CliUsageMetadata,\n status: \"failed\" | \"succeeded\",\n durationMs: number,\n error?: unknown,\n ): Promise<void> {\n await this.#logger.writeUsage({\n area: metadata.area,\n argv: redactArgv(this.#argv, metadata.redactOptions),\n command: metadata.command,\n createStateIfMissing: metadata.createStateIfMissing,\n durationMs: Math.max(0, durationMs),\n error: error === undefined ? undefined : errorCause(error),\n interface: \"cli\",\n options: redactRecord(metadata.options?.() ?? {}, metadata.redactOptions),\n status,\n });\n }\n\n async #writeTechnical(\n metadata: CliUsageMetadata,\n event: string,\n level: LogLevel,\n message: string,\n durationMs?: number,\n error?: unknown,\n ): Promise<void> {\n if (this.#technicalLogger === undefined) {\n return;\n }\n\n await this.#technicalLogger.writeTechnical({\n area: metadata.area,\n command: metadata.command,\n createStateIfMissing: metadata.createStateIfMissing,\n durationMs: durationMs === undefined ? undefined : Math.max(0, durationMs),\n error: error === undefined ? undefined : errorCause(error),\n event,\n interface: \"cli\",\n level,\n message,\n metadata: {\n argv: redactArgv(this.#argv, metadata.redactOptions),\n options: redactRecord(metadata.options?.() ?? {}, metadata.redactOptions),\n },\n });\n }\n}\n","import { Box, Text } from \"ink\";\nimport type { Translator } from \"../../infra/bases/i18n\";\n\ntype AppProps = {\n initialPrompt?: string;\n translator: Translator;\n};\n\nexport function App({ initialPrompt, translator }: AppProps) {\n return (\n <Box flexDirection=\"column\">\n <Text bold>{translator.t(\"tui.title\")}</Text>\n <Text>{translator.t(\"tui.foundation\")}</Text>\n {initialPrompt ? (\n <Text>{translator.t(\"tui.prompt\", { prompt: initialPrompt })}</Text>\n ) : (\n <Text>{translator.t(\"tui.helpHint\")}</Text>\n )}\n </Box>\n );\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentDataStore } from \"../bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { TechnicalLogEvent, TechnicalLogger, TechnicalLogInput } from \"../bases/logger\";\nimport { Result } from \"../bases/result\";\nimport { LocalAgentDataStore } from \"../data\";\nimport { redactRecord } from \"../helpers/redaction\";\n\nexport type JsonTechnicalLoggerOptions = {\n clock?: () => Date;\n dataStore?: AgentDataStore;\n retentionDays?: number;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nfunction logFileName(timestamp: Date): string {\n return `technical-${timestamp.toISOString().slice(0, 10)}.jsonl`;\n}\n\nfunction cutoffDate(timestamp: Date, retentionDays: number): string {\n const cutoff = new Date(\n Date.UTC(timestamp.getUTCFullYear(), timestamp.getUTCMonth(), timestamp.getUTCDate()),\n );\n cutoff.setUTCDate(cutoff.getUTCDate() - retentionDays);\n return cutoff.toISOString().slice(0, 10);\n}\n\nfunction dateFromLogFile(fileName: string): string | undefined {\n return /^technical-\\d{4}-\\d{2}-\\d{2}\\.jsonl$/.test(fileName)\n ? fileName.replace(/^technical-/, \"\").replace(/\\.jsonl$/, \"\")\n : undefined;\n}\n\nfunction normalizeMetadata(\n metadata?: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (metadata === undefined) {\n return undefined;\n }\n\n const normalized = Object.fromEntries(\n Object.entries(metadata).filter(\n ([, value]) => value !== undefined && typeof value !== \"function\",\n ),\n );\n\n return Object.keys(normalized).length > 0 ? redactRecord(normalized) : undefined;\n}\n\nexport class JsonTechnicalLogger implements TechnicalLogger {\n readonly #clock: () => Date;\n readonly #dataStore: AgentDataStore;\n readonly #retentionDays: number;\n\n constructor(options: JsonTechnicalLoggerOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#dataStore =\n options.dataStore ??\n new LocalAgentDataStore({\n rootDirectory: join(options.stateDirectory ?? defaultStateDirectory(), \"data\"),\n });\n this.#retentionDays = options.retentionDays ?? 30;\n }\n\n async writeTechnical(input: TechnicalLogInput): Promise<Result<AgentDevKitErrorCode, void>> {\n const timestamp = this.#clock();\n const { createStateIfMissing, ...logInput } = input;\n const event: TechnicalLogEvent = {\n ...logInput,\n category: \"technical\",\n metadata: normalizeMetadata(input.metadata),\n schema: \"agent-devkit.technical-log/v1\",\n timestamp: timestamp.toISOString(),\n };\n\n try {\n if (createStateIfMissing === false) {\n const logsExist = await this.#dataStore.exists({ namespace: \"logs\", segments: [] });\n\n if (logsExist.isErr()) {\n return Result.fail(logsExist.unwrapError());\n }\n\n if (!logsExist.unwrap()) {\n return Result.ok(undefined);\n }\n }\n\n const write = await this.#dataStore.appendJsonl(\n { namespace: \"logs\", segments: [logFileName(timestamp)] },\n event,\n );\n\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n\n await this.#cleanupOldLogs(timestamp);\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async #cleanupOldLogs(timestamp: Date): Promise<void> {\n if (!Number.isInteger(this.#retentionDays) || this.#retentionDays < 1) {\n return;\n }\n\n const cutoff = cutoffDate(timestamp, this.#retentionDays);\n const entries = await this.#dataStore.list({ namespace: \"logs\", segments: [] });\n\n if (entries.isErr()) {\n return;\n }\n\n await Promise.all(\n entries.unwrap().flatMap((entry) => {\n const date = dateFromLogFile(entry.name);\n return date !== undefined && date < cutoff ? [this.#dataStore.remove(entry.path)] : [];\n }),\n );\n }\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AgentDataStore } from \"../bases/data_store\";\nimport { type AgentDevKitErrorCode, ErrorCodes } from \"../bases/errors\";\nimport type { UsageLogEvent, UsageLogger, UsageLogInput } from \"../bases/logger\";\nimport { Result } from \"../bases/result\";\nimport { LocalAgentDataStore } from \"../data\";\nimport { redactRecord } from \"../helpers/redaction\";\n\nexport type JsonUsageLoggerOptions = {\n clock?: () => Date;\n dataStore?: AgentDataStore;\n retentionDays?: number;\n stateDirectory?: string;\n};\n\nfunction defaultStateDirectory(): string {\n return join(homedir(), \".agent-devkit\");\n}\n\nfunction logFileName(timestamp: Date): string {\n return `usage-${timestamp.toISOString().slice(0, 10)}.jsonl`;\n}\n\nfunction cutoffDate(timestamp: Date, retentionDays: number): string {\n const cutoff = new Date(\n Date.UTC(timestamp.getUTCFullYear(), timestamp.getUTCMonth(), timestamp.getUTCDate()),\n );\n cutoff.setUTCDate(cutoff.getUTCDate() - retentionDays);\n return cutoff.toISOString().slice(0, 10);\n}\n\nfunction dateFromLogFile(fileName: string): string | undefined {\n return /^usage-\\d{4}-\\d{2}-\\d{2}\\.jsonl$/.test(fileName)\n ? fileName.replace(/^usage-/, \"\").replace(/\\.jsonl$/, \"\")\n : undefined;\n}\n\nfunction normalizeOptions(options: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(options).filter(\n ([, value]) => value !== undefined && typeof value !== \"function\",\n ),\n );\n}\n\nexport class JsonUsageLogger implements UsageLogger {\n readonly #clock: () => Date;\n readonly #dataStore: AgentDataStore;\n readonly #retentionDays: number;\n\n constructor(options: JsonUsageLoggerOptions = {}) {\n this.#clock = options.clock ?? (() => new Date());\n this.#dataStore =\n options.dataStore ??\n new LocalAgentDataStore({\n rootDirectory: join(options.stateDirectory ?? defaultStateDirectory(), \"data\"),\n });\n this.#retentionDays = options.retentionDays ?? 30;\n }\n\n async writeUsage(input: UsageLogInput): Promise<Result<AgentDevKitErrorCode, void>> {\n const timestamp = this.#clock();\n const { createStateIfMissing, ...logInput } = input;\n const event: UsageLogEvent = {\n ...logInput,\n category: \"usage\",\n level: input.status === \"failed\" ? \"error\" : \"info\",\n options: redactRecord(normalizeOptions(input.options)),\n schema: \"agent-devkit.usage-log/v1\",\n timestamp: timestamp.toISOString(),\n };\n\n try {\n if (createStateIfMissing === false) {\n const logsExist = await this.#dataStore.exists({ namespace: \"logs\", segments: [] });\n\n if (logsExist.isErr()) {\n return Result.fail(logsExist.unwrapError());\n }\n\n if (!logsExist.unwrap()) {\n return Result.ok(undefined);\n }\n }\n\n const write = await this.#dataStore.appendJsonl(\n { namespace: \"logs\", segments: [logFileName(timestamp)] },\n event,\n );\n\n if (write.isErr()) {\n return Result.fail(write.unwrapError());\n }\n\n await this.#cleanupOldLogs(timestamp);\n return Result.ok(undefined);\n } catch {\n return Result.fail(ErrorCodes.FileWriteFailed);\n }\n }\n\n async #cleanupOldLogs(timestamp: Date): Promise<void> {\n if (!Number.isInteger(this.#retentionDays) || this.#retentionDays < 1) {\n return;\n }\n\n const cutoff = cutoffDate(timestamp, this.#retentionDays);\n const entries = await this.#dataStore.list({ namespace: \"logs\", segments: [] });\n\n if (entries.isErr()) {\n return;\n }\n\n await Promise.all(\n entries.unwrap().flatMap((entry) => {\n const date = dateFromLogFile(entry.name);\n return date !== undefined && date < cutoff ? [this.#dataStore.remove(entry.path)] : [];\n }),\n );\n }\n}\n"],"mappings":"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","names":["homedir","z","moduleDirectory","translator","z","z","z","characters","translator","z","z","z","fallbackTranslator","translator","readFile","dirname","join","join","readFile","dirname","existsSync","access","mkdir","readdir","readFile","homedir","basename","dirname","join","resolve","fileURLToPath","access","mkdir","readdir","readFile","rm","writeFile","homedir","dirname","join","resolve","join","homedir","resolve","mkdir","dirname","readFile","readdir","rm","access","writeFile","moduleDirectory","dirname","fileURLToPath","resolve","existsSync","homedir","join","access","basename","mkdir","readFile","readdir","existsSync","access","readdir","readFile","homedir","dirname","join","resolve","fileURLToPath","moduleDirectory","dirname","fileURLToPath","resolve","existsSync","homedir","join","access","readFile","readdir","homedir","translator","program","join","z","platform","join","defaultTranslator","translator","z","defaultTranslator","translator","join","z","join","defaultTranslator","translator","access","readdir","homedir","basename","join","access","homedir","join","readdir","basename","access","mkdir","writeFile","dirname","join","access","join","mkdir","dirname","writeFile","access","rm","access","rm","defaultDependencies","dirname","fileURLToPath","existsSync","readFile","join","resolve","z","readFile","join","moduleDirectory","resolve","existsSync","dirname","fileURLToPath","program","program","z","defaultTranslator","translator","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","homedir","access","mkdir","readdir","readFile","rename","rm","writeFile","homedir","basename","join","z","join","homedir","readFile","access","readdir","basename","mkdir","resolve","rm","rename","writeFile","text","text","response","z","endedAt","z","z","now","z","now","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","z","z","characterName","z","z","z","z","text","normalizeOptions","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","readdir","readFile","homedir","join","z","join","homedir","readFile","readdir","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","existsSync","dirname","resolve","fileURLToPath","readFile","join","resolve","resolve","readFile","join","moduleDirectory","dirname","fileURLToPath","resolve","existsSync","z","defaultId","stateDirectory","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","randomBytes","access","chmod","mkdir","readFile","rename","writeFile","homedir","dirname","join","defaultStateDirectory","join","homedir","isNotFoundError","stateDirectory","secret","now","access","readFile","dirname","randomBytes","mkdir","writeFile","chmod","rename","randomBytes","chmod","mkdir","readFile","writeFile","homedir","dirname","join","defaultStateDirectory","join","homedir","stateDirectory","readFile","randomBytes","mkdir","dirname","writeFile","chmod","randomBytes","randomBytes","z","stateDirectory","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","z","defaultDependencies","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","dirname","fileURLToPath","moduleDirectory","dirname","fileURLToPath","capabilities","homedir","runtime","printResult","translator","program","homedir","defaultTranslator","commandName","durationMs","statusName","translator","homedir","translator","program","homedir","join","z","z","text","compact","join","homedir","tool","text","resolve","runtime","program","homedir","defaultTranslator","translator","homedir","printResult","translator","program","homedir","homedir","printResult","translator","program","homedir","homedir","printResult","translator","program","options","homedir","session","program","homedir","homedir","program","homedir","program","runtime","homedir","defaultTranslator","translator","homedir","printResult","translator","program","parseTags","program","program","runtime","defaultTranslator","translator","program","homedir","translator","homedir","existsSync","readFileSync","homedir","join","homedir","join","existsSync","readFileSync","program","translator","homedir","reply","homedir","durationMs","translator","homedir","join","defaultStateDirectory","join","homedir","homedir","join","defaultStateDirectory","join","homedir","logFileName","cutoffDate","dateFromLogFile","normalizeOptions"]}