aemeathcli 1.0.0

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.
Files changed (102) hide show
  1. package/README.md +607 -0
  2. package/dist/App-P4MYD4QY.js +2719 -0
  3. package/dist/App-P4MYD4QY.js.map +1 -0
  4. package/dist/api-key-fallback-YQQBOQIL.js +11 -0
  5. package/dist/api-key-fallback-YQQBOQIL.js.map +1 -0
  6. package/dist/chunk-4IJD72YB.js +184 -0
  7. package/dist/chunk-4IJD72YB.js.map +1 -0
  8. package/dist/chunk-6PDJ45T4.js +325 -0
  9. package/dist/chunk-6PDJ45T4.js.map +1 -0
  10. package/dist/chunk-CARHU3DO.js +562 -0
  11. package/dist/chunk-CARHU3DO.js.map +1 -0
  12. package/dist/chunk-CGEV3ARR.js +80 -0
  13. package/dist/chunk-CGEV3ARR.js.map +1 -0
  14. package/dist/chunk-CS5X3BWX.js +27 -0
  15. package/dist/chunk-CS5X3BWX.js.map +1 -0
  16. package/dist/chunk-CYQNBB25.js +44 -0
  17. package/dist/chunk-CYQNBB25.js.map +1 -0
  18. package/dist/chunk-DAHGLHNR.js +657 -0
  19. package/dist/chunk-DAHGLHNR.js.map +1 -0
  20. package/dist/chunk-H66O5Z2V.js +305 -0
  21. package/dist/chunk-H66O5Z2V.js.map +1 -0
  22. package/dist/chunk-HCIHOHLX.js +322 -0
  23. package/dist/chunk-HCIHOHLX.js.map +1 -0
  24. package/dist/chunk-HMJRPNPZ.js +1031 -0
  25. package/dist/chunk-HMJRPNPZ.js.map +1 -0
  26. package/dist/chunk-I5PZ4JTS.js +119 -0
  27. package/dist/chunk-I5PZ4JTS.js.map +1 -0
  28. package/dist/chunk-IYW62KKR.js +255 -0
  29. package/dist/chunk-IYW62KKR.js.map +1 -0
  30. package/dist/chunk-JAXXTYID.js +51 -0
  31. package/dist/chunk-JAXXTYID.js.map +1 -0
  32. package/dist/chunk-LSOYPSAT.js +183 -0
  33. package/dist/chunk-LSOYPSAT.js.map +1 -0
  34. package/dist/chunk-MFBHNWGV.js +416 -0
  35. package/dist/chunk-MFBHNWGV.js.map +1 -0
  36. package/dist/chunk-MXZSI3AY.js +311 -0
  37. package/dist/chunk-MXZSI3AY.js.map +1 -0
  38. package/dist/chunk-NBR3GHMT.js +72 -0
  39. package/dist/chunk-NBR3GHMT.js.map +1 -0
  40. package/dist/chunk-O3ZF22SW.js +246 -0
  41. package/dist/chunk-O3ZF22SW.js.map +1 -0
  42. package/dist/chunk-SUSJPZU2.js +181 -0
  43. package/dist/chunk-SUSJPZU2.js.map +1 -0
  44. package/dist/chunk-TEVZS4FA.js +310 -0
  45. package/dist/chunk-TEVZS4FA.js.map +1 -0
  46. package/dist/chunk-UY2SYSEZ.js +211 -0
  47. package/dist/chunk-UY2SYSEZ.js.map +1 -0
  48. package/dist/chunk-WAHVZH7V.js +260 -0
  49. package/dist/chunk-WAHVZH7V.js.map +1 -0
  50. package/dist/chunk-WPP3PEDE.js +234 -0
  51. package/dist/chunk-WPP3PEDE.js.map +1 -0
  52. package/dist/chunk-Y5XVD2CD.js +1610 -0
  53. package/dist/chunk-Y5XVD2CD.js.map +1 -0
  54. package/dist/chunk-YL5XFHR3.js +56 -0
  55. package/dist/chunk-YL5XFHR3.js.map +1 -0
  56. package/dist/chunk-ZGOHARPV.js +122 -0
  57. package/dist/chunk-ZGOHARPV.js.map +1 -0
  58. package/dist/claude-adapter-QMLFMSP3.js +6 -0
  59. package/dist/claude-adapter-QMLFMSP3.js.map +1 -0
  60. package/dist/claude-login-5WELXPKT.js +324 -0
  61. package/dist/claude-login-5WELXPKT.js.map +1 -0
  62. package/dist/cli.d.ts +1 -0
  63. package/dist/cli.js +703 -0
  64. package/dist/cli.js.map +1 -0
  65. package/dist/codex-login-7HHLJHBF.js +164 -0
  66. package/dist/codex-login-7HHLJHBF.js.map +1 -0
  67. package/dist/config-store-W6FBCQAQ.js +6 -0
  68. package/dist/config-store-W6FBCQAQ.js.map +1 -0
  69. package/dist/executor-6RIKIGXK.js +4 -0
  70. package/dist/executor-6RIKIGXK.js.map +1 -0
  71. package/dist/gemini-adapter-6JIHZ7WI.js +6 -0
  72. package/dist/gemini-adapter-6JIHZ7WI.js.map +1 -0
  73. package/dist/gemini-login-ZZLYC3J6.js +346 -0
  74. package/dist/gemini-login-ZZLYC3J6.js.map +1 -0
  75. package/dist/index.d.ts +2210 -0
  76. package/dist/index.js +1419 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/kimi-adapter-JN4HFFHU.js +6 -0
  79. package/dist/kimi-adapter-JN4HFFHU.js.map +1 -0
  80. package/dist/kimi-login-CZPS63NK.js +149 -0
  81. package/dist/kimi-login-CZPS63NK.js.map +1 -0
  82. package/dist/native-cli-adapters-OLW3XX57.js +6 -0
  83. package/dist/native-cli-adapters-OLW3XX57.js.map +1 -0
  84. package/dist/ollama-adapter-OJQ3FKWK.js +6 -0
  85. package/dist/ollama-adapter-OJQ3FKWK.js.map +1 -0
  86. package/dist/openai-adapter-XU46EN7B.js +6 -0
  87. package/dist/openai-adapter-XU46EN7B.js.map +1 -0
  88. package/dist/registry-4KD24ZC3.js +6 -0
  89. package/dist/registry-4KD24ZC3.js.map +1 -0
  90. package/dist/registry-H7B3AHPQ.js +5 -0
  91. package/dist/registry-H7B3AHPQ.js.map +1 -0
  92. package/dist/server-manager-PTGBHCLS.js +5 -0
  93. package/dist/server-manager-PTGBHCLS.js.map +1 -0
  94. package/dist/session-manager-ECEEACGY.js +12 -0
  95. package/dist/session-manager-ECEEACGY.js.map +1 -0
  96. package/dist/team-manager-HC4XGCFY.js +11 -0
  97. package/dist/team-manager-HC4XGCFY.js.map +1 -0
  98. package/dist/tmux-manager-GPYZ3WQH.js +6 -0
  99. package/dist/tmux-manager-GPYZ3WQH.js.map +1 -0
  100. package/dist/tools-TSMXMHIF.js +6 -0
  101. package/dist/tools-TSMXMHIF.js.map +1 -0
  102. package/package.json +89 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storage/migrations/001-initial.ts","../src/storage/sqlite-store.ts","../src/storage/conversation-store.ts","../src/panes/iterm2-manager.ts","../src/panes/ipc-hub.ts","../src/panes/pane-process.ts","../src/mcp/tool-bridge.ts"],"names":["NEWLINE","createHmac"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Initial database migration — PRD section 17.1\n * Creates all core tables and indexes for AemeathCLI persistence.\n *\n * SAFETY: All DDL is static SQL. No user input is interpolated.\n */\n\nimport type Database from \"better-sqlite3\";\n\nconst MIGRATION_ID = \"001-initial\";\n\nconst CREATE_CONVERSATIONS = `\nCREATE TABLE IF NOT EXISTS conversations (\n id TEXT PRIMARY KEY,\n project_root TEXT NOT NULL,\n default_model TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now')),\n metadata TEXT DEFAULT '{}'\n)`;\n\nconst CREATE_MESSAGES = `\nCREATE TABLE IF NOT EXISTS messages (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,\n role TEXT NOT NULL,\n model TEXT,\n provider TEXT,\n content TEXT NOT NULL,\n tool_calls TEXT,\n token_usage TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n)`;\n\nconst CREATE_FILE_CONTEXT = `\nCREATE TABLE IF NOT EXISTS file_context (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,\n file_path TEXT NOT NULL,\n content_hash TEXT,\n token_count INTEGER,\n added_at TEXT DEFAULT (datetime('now'))\n)`;\n\nconst CREATE_COST_TRACKING = `\nCREATE TABLE IF NOT EXISTS cost_tracking (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,\n provider TEXT NOT NULL,\n model TEXT NOT NULL,\n role TEXT,\n input_tokens INTEGER,\n output_tokens INTEGER,\n cost_usd REAL,\n created_at TEXT DEFAULT (datetime('now'))\n)`;\n\nconst CREATE_TEAMS = `\nCREATE TABLE IF NOT EXISTS teams (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n status TEXT DEFAULT 'active',\n config TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n)`;\n\nconst CREATE_INDEXES = [\n \"CREATE INDEX IF NOT EXISTS idx_messages_conversation ON messages(conversation_id)\",\n \"CREATE INDEX IF NOT EXISTS idx_cost_conversation ON cost_tracking(conversation_id)\",\n \"CREATE INDEX IF NOT EXISTS idx_cost_provider ON cost_tracking(provider)\",\n \"CREATE INDEX IF NOT EXISTS idx_file_context_conversation ON file_context(conversation_id)\",\n] as const;\n\nconst DROP_INDEXES = [\n \"DROP INDEX IF EXISTS idx_file_context_conversation\",\n \"DROP INDEX IF EXISTS idx_cost_provider\",\n \"DROP INDEX IF EXISTS idx_cost_conversation\",\n \"DROP INDEX IF EXISTS idx_messages_conversation\",\n] as const;\n\nconst DROP_TABLES = [\n \"DROP TABLE IF EXISTS cost_tracking\",\n \"DROP TABLE IF EXISTS file_context\",\n \"DROP TABLE IF EXISTS messages\",\n \"DROP TABLE IF EXISTS teams\",\n \"DROP TABLE IF EXISTS conversations\",\n] as const;\n\nexport function up(db: Database.Database): void {\n db.transaction(() => {\n db.exec(CREATE_CONVERSATIONS);\n db.exec(CREATE_MESSAGES);\n db.exec(CREATE_FILE_CONTEXT);\n db.exec(CREATE_COST_TRACKING);\n db.exec(CREATE_TEAMS);\n\n for (const sql of CREATE_INDEXES) {\n db.exec(sql);\n }\n })();\n}\n\nexport function down(db: Database.Database): void {\n db.transaction(() => {\n for (const sql of DROP_INDEXES) {\n db.exec(sql);\n }\n for (const sql of DROP_TABLES) {\n db.exec(sql);\n }\n })();\n}\n\nexport { MIGRATION_ID };\n","/**\n * SQLite database store — PRD section 17.1\n * Uses better-sqlite3 with WAL mode for concurrent reads.\n * Runs migrations on startup. Provides raw query interface.\n */\n\nimport Database from \"better-sqlite3\";\nimport { chmodSync } from \"node:fs\";\nimport { logger } from \"../utils/logger.js\";\nimport {\n getDatabasePath,\n getDatabaseDir,\n ensureDirectory,\n} from \"../utils/pathResolver.js\";\nimport { up as initialMigrationUp } from \"./migrations/001-initial.js\";\n\nconst MIGRATIONS_TABLE_DDL = `\nCREATE TABLE IF NOT EXISTS _migrations (\n id TEXT PRIMARY KEY,\n applied_at TEXT DEFAULT (datetime('now'))\n)`;\n\ninterface IMigration {\n readonly id: string;\n readonly up: (db: Database.Database) => void;\n}\n\nconst MIGRATIONS: readonly IMigration[] = [\n { id: \"001-initial\", up: initialMigrationUp },\n] as const;\n\nexport class SqliteStore {\n private db: Database.Database | undefined;\n private closed = false;\n\n get database(): Database.Database {\n if (this.closed || !this.db) {\n throw new Error(\"SqliteStore is closed or not initialized\");\n }\n return this.db;\n }\n\n open(dbPath?: string): void {\n if (this.db) {\n return;\n }\n\n const resolvedPath = dbPath ?? getDatabasePath();\n ensureDirectory(getDatabaseDir());\n\n logger.info({ path: resolvedPath }, \"Opening SQLite database\");\n\n this.db = new Database(resolvedPath);\n\n // WAL mode for concurrent reads (PRD section 17.1)\n this.db.pragma(\"journal_mode = WAL\");\n this.db.pragma(\"busy_timeout = 5000\");\n this.db.pragma(\"foreign_keys = ON\");\n this.db.pragma(\"synchronous = NORMAL\");\n\n // Secure file permissions (PRD section 14.1)\n try {\n chmodSync(resolvedPath, 0o600);\n } catch {\n logger.warn(\n { path: resolvedPath },\n \"Could not set database file permissions to 600\",\n );\n }\n\n this.runMigrations();\n this.registerCleanupHandlers();\n }\n\n private runMigrations(): void {\n const db = this.database;\n db.exec(MIGRATIONS_TABLE_DDL);\n\n const appliedStmt = db.prepare(\n \"SELECT id FROM _migrations WHERE id = ?\",\n );\n\n const insertStmt = db.prepare(\n \"INSERT INTO _migrations (id) VALUES (?)\",\n );\n\n for (const migration of MIGRATIONS) {\n const existing = appliedStmt.get(migration.id) as\n | { id: string }\n | undefined;\n\n if (!existing) {\n logger.info({ migrationId: migration.id }, \"Running migration\");\n db.transaction(() => {\n migration.up(db);\n insertStmt.run(migration.id);\n })();\n logger.info({ migrationId: migration.id }, \"Migration applied\");\n }\n }\n }\n\n prepare(sql: string): Database.Statement {\n return this.database.prepare(sql);\n }\n\n run(sql: string, ...params: readonly unknown[]): Database.RunResult {\n return this.database.prepare(sql).run(...params);\n }\n\n get<T>(sql: string, ...params: readonly unknown[]): T | undefined {\n return this.database.prepare(sql).get(...params) as T | undefined;\n }\n\n all<T>(sql: string, ...params: readonly unknown[]): T[] {\n return this.database.prepare(sql).all(...params) as T[];\n }\n\n transaction<T>(fn: () => T): T {\n return this.database.transaction(fn)();\n }\n\n close(): void {\n if (this.closed || !this.db) {\n return;\n }\n\n logger.info(\"Closing SQLite database\");\n this.closed = true;\n\n try {\n this.db.pragma(\"wal_checkpoint(TRUNCATE)\");\n this.db.close();\n } catch (error: unknown) {\n const message =\n error instanceof Error ? error.message : String(error);\n logger.error({ error: message }, \"Error closing database\");\n }\n\n this.db = undefined;\n }\n\n private registerCleanupHandlers(): void {\n const cleanup = (): void => {\n this.close();\n };\n\n process.on(\"exit\", cleanup);\n process.on(\"SIGINT\", () => {\n cleanup();\n process.exit(130);\n });\n process.on(\"SIGTERM\", () => {\n cleanup();\n process.exit(143);\n });\n }\n}\n","/**\n * Conversation store — PRD section 17.1\n * CRUD for conversations, messages, file context, and cost tracking.\n * All queries use parameterized prepared statements.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { logger } from \"../utils/logger.js\";\nimport type { SqliteStore } from \"./sqlite-store.js\";\nimport type { MessageRole } from \"../types/message.js\";\nimport type { ProviderName } from \"../types/model.js\";\nimport type {\n IConversationRow,\n IMessageRow,\n IFileContextRow,\n ICostRow,\n IConversation,\n IMessage,\n IStoredTokenUsage,\n IFileContext,\n ICostEntry,\n IPaginationOptions,\n IAddMessageParams,\n IAddCostParams,\n IAddFileContextParams,\n} from \"./conversation-types.js\";\n\nexport type {\n IConversation,\n IMessage,\n IStoredTokenUsage,\n IFileContext,\n ICostEntry,\n IPaginationOptions,\n IAddMessageParams,\n IAddCostParams,\n IAddFileContextParams,\n} from \"./conversation-types.js\";\n\nexport class ConversationStore {\n private readonly store: SqliteStore;\n\n constructor(store: SqliteStore) {\n this.store = store;\n }\n\n createConversation(\n projectRoot: string,\n defaultModel?: string,\n metadata?: Record<string, unknown>,\n ): IConversation {\n const id = randomUUID();\n const metadataJson = JSON.stringify(metadata ?? {});\n\n this.store.run(\n `INSERT INTO conversations (id, project_root, default_model, metadata)\n VALUES (?, ?, ?, ?)`,\n id,\n projectRoot,\n defaultModel ?? null,\n metadataJson,\n );\n\n logger.info({ conversationId: id, projectRoot }, \"Conversation created\");\n\n const row = this.store.get<IConversationRow>(\n \"SELECT * FROM conversations WHERE id = ?\",\n id,\n );\n\n if (!row) {\n throw new Error(`Failed to retrieve created conversation: ${id}`);\n }\n\n return this.mapConversationRow(row);\n }\n\n getConversation(id: string): IConversation | undefined {\n const row = this.store.get<IConversationRow>(\n \"SELECT * FROM conversations WHERE id = ?\",\n id,\n );\n return row ? this.mapConversationRow(row) : undefined;\n }\n\n listConversations(projectRoot?: string): IConversation[] {\n const rows = projectRoot\n ? this.store.all<IConversationRow>(\n \"SELECT * FROM conversations WHERE project_root = ? ORDER BY updated_at DESC\",\n projectRoot,\n )\n : this.store.all<IConversationRow>(\n \"SELECT * FROM conversations ORDER BY updated_at DESC\",\n );\n\n return rows.map((row) => this.mapConversationRow(row));\n }\n\n deleteConversation(id: string): void {\n this.store.run(\"DELETE FROM conversations WHERE id = ?\", id);\n logger.info({ conversationId: id }, \"Conversation deleted\");\n }\n\n addMessage(params: IAddMessageParams): IMessage {\n const toolCallsJson = params.toolCalls\n ? JSON.stringify(params.toolCalls)\n : null;\n const tokenUsageJson = params.tokenUsage\n ? JSON.stringify(params.tokenUsage)\n : null;\n\n const result = this.store.run(\n `INSERT INTO messages\n (conversation_id, role, model, provider, content, tool_calls, token_usage)\n VALUES (?, ?, ?, ?, ?, ?, ?)`,\n params.conversationId,\n params.role,\n params.model ?? null,\n params.provider ?? null,\n params.content,\n toolCallsJson,\n tokenUsageJson,\n );\n\n this.store.run(\n \"UPDATE conversations SET updated_at = datetime('now') WHERE id = ?\",\n params.conversationId,\n );\n\n const row = this.store.get<IMessageRow>(\n \"SELECT * FROM messages WHERE id = ?\",\n result.lastInsertRowid,\n );\n\n if (!row) {\n throw new Error(\"Failed to retrieve created message\");\n }\n\n return this.mapMessageRow(row);\n }\n\n getMessages(\n conversationId: string,\n pagination?: IPaginationOptions,\n ): IMessage[] {\n const limit = pagination?.limit ?? 100;\n const offset = pagination?.offset ?? 0;\n\n const rows = this.store.all<IMessageRow>(\n `SELECT * FROM messages\n WHERE conversation_id = ?\n ORDER BY created_at ASC\n LIMIT ? OFFSET ?`,\n conversationId,\n limit,\n offset,\n );\n\n return rows.map((row) => this.mapMessageRow(row));\n }\n\n getMessageCount(conversationId: string): number {\n const result = this.store.get<{ count: number }>(\n \"SELECT COUNT(*) as count FROM messages WHERE conversation_id = ?\",\n conversationId,\n );\n return result?.count ?? 0;\n }\n\n addFileContext(params: IAddFileContextParams): IFileContext {\n const result = this.store.run(\n `INSERT INTO file_context\n (conversation_id, file_path, content_hash, token_count)\n VALUES (?, ?, ?, ?)`,\n params.conversationId,\n params.filePath,\n params.contentHash ?? null,\n params.tokenCount ?? null,\n );\n\n const row = this.store.get<IFileContextRow>(\n \"SELECT * FROM file_context WHERE id = ?\",\n result.lastInsertRowid,\n );\n\n if (!row) {\n throw new Error(\"Failed to retrieve created file context\");\n }\n\n return this.mapFileContextRow(row);\n }\n\n getFileContext(conversationId: string): IFileContext[] {\n const rows = this.store.all<IFileContextRow>(\n \"SELECT * FROM file_context WHERE conversation_id = ? ORDER BY added_at DESC\",\n conversationId,\n );\n return rows.map((row) => this.mapFileContextRow(row));\n }\n\n removeFileContext(conversationId: string, filePath: string): void {\n this.store.run(\n \"DELETE FROM file_context WHERE conversation_id = ? AND file_path = ?\",\n conversationId,\n filePath,\n );\n }\n\n addCost(params: IAddCostParams): ICostEntry {\n const result = this.store.run(\n `INSERT INTO cost_tracking\n (conversation_id, provider, model, role, input_tokens, output_tokens, cost_usd)\n VALUES (?, ?, ?, ?, ?, ?, ?)`,\n params.conversationId,\n params.provider,\n params.model,\n params.role ?? null,\n params.inputTokens ?? null,\n params.outputTokens ?? null,\n params.costUsd ?? null,\n );\n\n const row = this.store.get<ICostRow>(\n \"SELECT * FROM cost_tracking WHERE id = ?\",\n result.lastInsertRowid,\n );\n\n if (!row) {\n throw new Error(\"Failed to retrieve created cost entry\");\n }\n\n return this.mapCostRow(row);\n }\n\n getConversationCost(conversationId: string): number {\n const result = this.store.get<{ total: number | null }>(\n \"SELECT SUM(cost_usd) as total FROM cost_tracking WHERE conversation_id = ?\",\n conversationId,\n );\n return result?.total ?? 0;\n }\n\n getCostBreakdown(conversationId: string): ICostEntry[] {\n const rows = this.store.all<ICostRow>(\n \"SELECT * FROM cost_tracking WHERE conversation_id = ? ORDER BY created_at ASC\",\n conversationId,\n );\n return rows.map((row) => this.mapCostRow(row));\n }\n\n // ── Private row mappers ─────────────────────────────────────────────\n\n private mapConversationRow(row: IConversationRow): IConversation {\n let metadata: Record<string, unknown> = {};\n try {\n metadata = JSON.parse(row.metadata) as Record<string, unknown>;\n } catch {\n metadata = {};\n }\n\n return {\n id: row.id,\n projectRoot: row.project_root,\n defaultModel: row.default_model,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n metadata,\n };\n }\n\n private mapMessageRow(row: IMessageRow): IMessage {\n let toolCalls: unknown[] | null = null;\n if (row.tool_calls) {\n try {\n toolCalls = JSON.parse(row.tool_calls) as unknown[];\n } catch {\n toolCalls = null;\n }\n }\n\n let tokenUsage: IStoredTokenUsage | null = null;\n if (row.token_usage) {\n try {\n tokenUsage = JSON.parse(row.token_usage) as IStoredTokenUsage;\n } catch {\n tokenUsage = null;\n }\n }\n\n return {\n id: row.id,\n conversationId: row.conversation_id,\n role: row.role as MessageRole,\n model: row.model,\n provider: row.provider as ProviderName | null,\n content: row.content,\n toolCalls,\n tokenUsage,\n createdAt: row.created_at,\n };\n }\n\n private mapFileContextRow(row: IFileContextRow): IFileContext {\n return {\n id: row.id,\n conversationId: row.conversation_id,\n filePath: row.file_path,\n contentHash: row.content_hash,\n tokenCount: row.token_count,\n addedAt: row.added_at,\n };\n }\n\n private mapCostRow(row: ICostRow): ICostEntry {\n return {\n id: row.id,\n conversationId: row.conversation_id,\n provider: row.provider,\n model: row.model,\n role: row.role,\n inputTokens: row.input_tokens,\n outputTokens: row.output_tokens,\n costUsd: row.cost_usd,\n createdAt: row.created_at,\n };\n }\n}\n","/**\n * iTerm2Manager — macOS iTerm2 Python API bridge per PRD section 9.3.\n * Splits sessions into panes, sets profiles, sends commands.\n * Graceful fallback if iTerm2 is not available.\n */\n\nimport { execa } from \"execa\";\nimport type { ILayoutConfig, IPaneConfig, PaneLayout } from \"../types/team.js\";\nimport { getEventBus } from \"../core/event-bus.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { AgentSpawnError } from \"../types/errors.js\";\n\n// ── Types ───────────────────────────────────────────────────────────────\n\nexport interface IITerm2PaneInfo {\n readonly paneId: string;\n readonly sessionId: string;\n readonly agentName: string;\n readonly title: string;\n}\n\ninterface IRoleProfile {\n readonly backgroundColor: string;\n readonly badgeText: string;\n}\n\n// ── Role color profiles per agent role ──────────────────────────────────\n\nconst ROLE_PROFILES: Readonly<Record<string, IRoleProfile>> = {\n planning: { backgroundColor: \"#1a1a2e\", badgeText: \"Planner\" },\n coding: { backgroundColor: \"#162447\", badgeText: \"Coder\" },\n review: { backgroundColor: \"#1b2a1b\", badgeText: \"Reviewer\" },\n testing: { backgroundColor: \"#2a1b1b\", badgeText: \"Tester\" },\n bugfix: { backgroundColor: \"#2a2a1b\", badgeText: \"Debugger\" },\n documentation: { backgroundColor: \"#1b1b2a\", badgeText: \"Docs\" },\n};\n\nconst DEFAULT_PROFILE: IRoleProfile = {\n backgroundColor: \"#1e1e1e\",\n badgeText: \"Agent\",\n};\n\n// ── iTerm2 Manager ──────────────────────────────────────────────────────\n\nexport class ITerm2Manager {\n private readonly panes = new Map<string, IITerm2PaneInfo>();\n private disposed = false;\n\n /**\n * Check if currently running inside iTerm2 on macOS.\n */\n isAvailable(): boolean {\n if (process.platform !== \"darwin\") {\n logger.debug(\"iTerm2 manager is macOS-only\");\n return false;\n }\n\n const termProgram = process.env[\"TERM_PROGRAM\"];\n if (termProgram !== \"iTerm.app\") {\n logger.debug({ termProgram }, \"Not running inside iTerm2\");\n return false;\n }\n\n return true;\n }\n\n /**\n * Check if the iTerm2 Python API is accessible.\n */\n async isPythonAPIAvailable(): Promise<boolean> {\n if (!this.isAvailable()) return false;\n\n try {\n const result = await execa(\"python3\", [\"-c\", \"import iterm2\"]);\n return result.exitCode === 0;\n } catch {\n logger.warn(\"iTerm2 Python API module (iterm2) not installed\");\n return false;\n }\n }\n\n /**\n * Create panes in the current iTerm2 window based on layout config.\n */\n async createPanes(layoutConfig: ILayoutConfig): Promise<void> {\n this.assertNotDisposed();\n\n if (!(await this.isPythonAPIAvailable())) {\n throw new AgentSpawnError(\n \"iterm2\",\n \"iTerm2 Python API is not available. Install with: pip3 install iterm2\",\n );\n }\n\n const script = this.buildCreatePanesScript(layoutConfig);\n\n try {\n await this.executePythonScript(script);\n logger.info(\n { paneCount: layoutConfig.panes.length },\n \"iTerm2 panes created\",\n );\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n throw new AgentSpawnError(\"iterm2\", `Failed to create iTerm2 panes: ${message}`);\n }\n }\n\n /**\n * Send a command to a specific pane via iTerm2 Python API.\n */\n async sendCommand(paneId: string, command: string): Promise<void> {\n this.assertNotDisposed();\n\n const info = this.panes.get(paneId);\n if (!info) {\n logger.warn({ paneId }, \"iTerm2 pane not found, cannot send command\");\n return;\n }\n\n const escapedCommand = command.replace(/\"/g, '\\\\\"').replace(/\\\\/g, \"\\\\\\\\\");\n const script = this.buildSendCommandScript(info.sessionId, escapedCommand);\n\n try {\n await this.executePythonScript(script);\n logger.debug({ paneId, command: command.slice(0, 80) }, \"Command sent to iTerm2 pane\");\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error({ paneId, error: message }, \"Failed to send command to iTerm2 pane\");\n }\n }\n\n /**\n * Set the profile (colors) for a pane based on agent role.\n */\n async setProfile(paneId: string, role: string): Promise<void> {\n this.assertNotDisposed();\n\n const info = this.panes.get(paneId);\n if (!info) return;\n\n const profile = ROLE_PROFILES[role] ?? DEFAULT_PROFILE;\n const script = this.buildSetProfileScript(info.sessionId, profile);\n\n try {\n await this.executePythonScript(script);\n logger.debug({ paneId, role }, \"iTerm2 pane profile set\");\n } catch {\n logger.debug({ paneId, role }, \"Failed to set iTerm2 profile (non-fatal)\");\n }\n }\n\n /**\n * Destroy all managed iTerm2 panes.\n */\n async destroy(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n\n for (const [paneId, info] of this.panes) {\n try {\n const script = this.buildCloseSessionScript(info.sessionId);\n await this.executePythonScript(script);\n } catch {\n // Pane may already be closed\n }\n getEventBus().emit(\"pane:closed\", { paneId });\n }\n\n this.panes.clear();\n logger.info(\"iTerm2 panes destroyed\");\n }\n\n /**\n * Get all tracked pane info.\n */\n getPanes(): ReadonlyMap<string, IITerm2PaneInfo> {\n return this.panes;\n }\n\n /**\n * Register a pane that was created externally.\n */\n registerPane(info: IITerm2PaneInfo): void {\n this.panes.set(info.paneId, info);\n getEventBus().emit(\"pane:created\", {\n paneId: info.paneId,\n agentName: info.agentName,\n });\n }\n\n // ── Python Script Builders ─────────────────────────────────────────\n\n private buildCreatePanesScript(layoutConfig: ILayoutConfig): string {\n const paneConfigs = layoutConfig.panes;\n const splitCommands = this.buildSplitCommands(paneConfigs, layoutConfig.layout);\n\n return `\nimport iterm2\nimport asyncio\n\nasync def main(connection):\n app = await iterm2.async_get_app(connection)\n window = app.current_terminal_window\n if window is None:\n return\n\n tab = window.current_tab\n root_session = tab.current_session\n sessions = [root_session]\n\n${splitCommands}\n\n # Output session IDs for tracking\n for s in sessions:\n print(s.session_id)\n\niterm2.run_until_complete(main)\n`.trim();\n }\n\n private buildSplitCommands(\n panes: readonly IPaneConfig[],\n layout: PaneLayout,\n ): string {\n const lines: string[] = [];\n\n for (let i = 1; i < panes.length; i++) {\n const vertical = this.shouldSplitVertically(i, panes.length, layout);\n const direction = vertical ? \"True\" : \"False\";\n lines.push(\n ` new_session = await sessions[${Math.floor(i / 2)}].async_split_pane(vertical=${direction})`,\n );\n lines.push(` sessions.append(new_session)`);\n\n const pane = panes[i];\n if (pane) {\n const escapedTitle = pane.title.replace(/'/g, \"\\\\'\");\n lines.push(` await new_session.async_set_name(\"${escapedTitle}\")`);\n }\n }\n\n return lines.join(\"\\n\");\n }\n\n private shouldSplitVertically(\n index: number,\n total: number,\n layout: PaneLayout,\n ): boolean {\n if (layout === \"vertical\") return true;\n if (layout === \"horizontal\") return false;\n // Auto and grid: alternate directions\n if (total <= 2) return false;\n return index % 2 === 1;\n }\n\n private buildSendCommandScript(sessionId: string, command: string): string {\n return `\nimport iterm2\n\nasync def main(connection):\n app = await iterm2.async_get_app(connection)\n session = app.get_session_by_id(\"${sessionId}\")\n if session:\n await session.async_send_text(\"${command}\\\\n\")\n\niterm2.run_until_complete(main)\n`.trim();\n }\n\n private buildSetProfileScript(sessionId: string, profile: IRoleProfile): string {\n return `\nimport iterm2\n\nasync def main(connection):\n app = await iterm2.async_get_app(connection)\n session = app.get_session_by_id(\"${sessionId}\")\n if session:\n change = iterm2.LocalWriteOnlyProfile()\n color = iterm2.Color.from_hex(\"${profile.backgroundColor}\")\n change.set_background_color(color)\n change.set_badge_text(\"${profile.badgeText}\")\n await session.async_set_profile_properties(change)\n\niterm2.run_until_complete(main)\n`.trim();\n }\n\n private buildCloseSessionScript(sessionId: string): string {\n return `\nimport iterm2\n\nasync def main(connection):\n app = await iterm2.async_get_app(connection)\n session = app.get_session_by_id(\"${sessionId}\")\n if session:\n await session.async_close()\n\niterm2.run_until_complete(main)\n`.trim();\n }\n\n // ── Execution ──────────────────────────────────────────────────────\n\n private async executePythonScript(script: string): Promise<string> {\n const result = await execa(\"python3\", [\"-c\", script], {\n timeout: 10_000,\n });\n return result.stdout;\n }\n\n private assertNotDisposed(): void {\n if (this.disposed) {\n throw new AgentSpawnError(\"iterm2\", \"ITerm2Manager has been disposed\");\n }\n }\n}\n","/**\n * IPCHub — Unix domain socket server for inter-agent communication.\n * JSON-RPC 2.0 protocol with HMAC authentication per PRD section 9.4 & 14.5.\n */\n\nimport { createServer, type Server, type Socket } from \"node:net\";\nimport { createHmac, randomBytes, timingSafeEqual } from \"node:crypto\";\nimport { chmod, unlink } from \"node:fs/promises\";\nimport type { IIPCMessage, IIPCResponse } from \"../types/team.js\";\nimport { getIPCSocketDir, getIPCSocketPath, ensureSecureDirectory } from \"../utils/pathResolver.js\";\nimport { getEventBus } from \"../core/event-bus.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { IPCError } from \"../types/errors.js\";\n\n// ── Types ───────────────────────────────────────────────────────────────\n\ninterface IRegisteredClient {\n readonly agentId: string;\n readonly agentName: string;\n readonly socket: Socket;\n}\n\ntype MethodHandler = (\n clientId: string, params: Record<string, unknown>,\n id: number | undefined, socket: Socket,\n) => Promise<unknown>;\n\n// ── Constants ───────────────────────────────────────────────────────────\n\nconst NEWLINE = 0x0a;\nconst SOCKET_PERMS = 0o700;\nconst MAX_MSG_SIZE = 1_048_576;\nconst RPC_PARSE_ERROR = -32700;\nconst RPC_INVALID_REQ = -32600;\nconst RPC_METHOD_NOT_FOUND = -32601;\nconst RPC_INTERNAL_ERROR = -32603;\nconst RPC_AUTH_ERROR = -32000;\n\n// ── IPCHub ──────────────────────────────────────────────────────────────\n\nexport class IPCHub {\n private readonly sessionId: string;\n private readonly hmacSecret: string;\n private readonly socketPath: string;\n private readonly clients = new Map<string, IRegisteredClient>();\n private readonly handlers = new Map<string, MethodHandler>();\n private server: Server | undefined;\n private disposed = false;\n\n constructor(sessionId: string) {\n this.sessionId = sessionId;\n this.hmacSecret = randomBytes(32).toString(\"hex\");\n this.socketPath = getIPCSocketPath(sessionId);\n this.registerDefaultHandlers();\n }\n\n getHmacSecret(): string { return this.hmacSecret; }\n getSocketPath(): string { return this.socketPath; }\n getClientCount(): number { return this.clients.size; }\n getConnectedAgentIds(): readonly string[] { return [...this.clients.keys()]; }\n\n /** Start the Unix domain socket server. */\n async start(): Promise<void> {\n this.assertAlive();\n ensureSecureDirectory(getIPCSocketDir());\n await this.removeStaleSocket();\n\n return new Promise<void>((resolve, reject) => {\n this.server = createServer((socket) => this.handleConnection(socket));\n this.server.on(\"error\", (err: Error) => {\n logger.error({ error: err.message }, \"IPC server error\");\n reject(new IPCError(`Server error: ${err.message}`));\n });\n this.server.listen(this.socketPath, async () => {\n try { await chmod(this.socketPath, SOCKET_PERMS); } catch { /* non-fatal */ }\n logger.info({ socketPath: this.socketPath }, \"IPC hub listening\");\n this.setupProcessCleanup();\n resolve();\n });\n });\n }\n\n /** Send a message to a specific registered client. */\n sendToClient(agentId: string, message: IIPCMessage): void {\n this.assertAlive();\n const client = this.clients.get(agentId);\n if (client) this.write(client.socket, message);\n }\n\n /** Broadcast a message to all connected clients. */\n broadcast(message: IIPCMessage, excludeId?: string): void {\n this.assertAlive();\n for (const [id, client] of this.clients) {\n if (id !== excludeId) this.write(client.socket, message);\n }\n }\n\n /** Register a custom method handler. */\n onMethod(method: string, handler: MethodHandler): void {\n this.handlers.set(method, handler);\n }\n\n /** Compute HMAC-SHA256 for a message. */\n computeHmac(message: IIPCMessage): string {\n return createHmac(\"sha256\", this.hmacSecret)\n .update(JSON.stringify(message)).digest(\"hex\");\n }\n\n /** Register a connected socket as a client (also called by agent.register). */\n registerClientSocket(agentId: string, agentName: string, socket: Socket): void {\n this.clients.set(agentId, { agentId, agentName, socket });\n }\n\n /** Gracefully shut down the hub and all connections. */\n async destroy(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n const msg: IIPCMessage = { jsonrpc: \"2.0\", method: \"hub.shutdown\", params: { reason: \"Hub shutting down\" } };\n for (const c of this.clients.values()) {\n try { this.write(c.socket, msg); c.socket.end(); } catch { /* already gone */ }\n }\n this.clients.clear();\n if (this.server) {\n await new Promise<void>((r) => { this.server!.close(() => r()); });\n this.server = undefined;\n }\n await this.removeStaleSocket();\n logger.info({ sessionId: this.sessionId }, \"IPC hub destroyed\");\n }\n\n // ── Connection Handling ───────────────────────────────────────────\n\n private handleConnection(socket: Socket): void {\n let buffer = Buffer.alloc(0);\n let agentId: string | undefined;\n\n socket.on(\"data\", (data: Buffer) => {\n buffer = Buffer.concat([buffer, data]);\n if (buffer.length > MAX_MSG_SIZE) { socket.destroy(); return; }\n\n let idx: number;\n while ((idx = buffer.indexOf(NEWLINE)) !== -1) {\n const raw = buffer.subarray(0, idx).toString(\"utf-8\");\n buffer = buffer.subarray(idx + 1);\n if (raw.length === 0) continue;\n this.processRaw(raw, socket, agentId).then((id) => { if (id) agentId = id; })\n .catch((e: unknown) => {\n logger.error({ error: e instanceof Error ? e.message : String(e) }, \"IPC msg error\");\n });\n }\n });\n\n socket.on(\"close\", () => {\n if (agentId) { this.clients.delete(agentId); logger.info({ agentId }, \"Client disconnected\"); }\n });\n socket.on(\"error\", (err: Error) => {\n logger.error({ error: err.message, agentId }, \"Socket error\");\n });\n }\n\n private async processRaw(raw: string, socket: Socket, currentId: string | undefined): Promise<string | undefined> {\n let parsed: unknown;\n try { parsed = JSON.parse(raw) as unknown; } catch {\n this.sendError(socket, undefined, RPC_PARSE_ERROR, \"Parse error\"); return undefined;\n }\n\n if (!this.isAuthEnvelope(parsed)) {\n this.sendError(socket, undefined, RPC_INVALID_REQ, \"Invalid request format\"); return undefined;\n }\n const { message, hmac } = parsed;\n\n if (!this.verifyHmac(message, hmac)) {\n this.sendError(socket, message.id, RPC_AUTH_ERROR, \"Authentication failed\"); return undefined;\n }\n if (message.jsonrpc !== \"2.0\" || !message.method) {\n this.sendError(socket, message.id, RPC_INVALID_REQ, \"Invalid JSON-RPC 2.0\"); return undefined;\n }\n\n const handler = this.handlers.get(message.method);\n if (!handler) {\n this.sendError(socket, message.id, RPC_METHOD_NOT_FOUND, `Unknown: ${message.method}`); return undefined;\n }\n\n try {\n const aid = currentId ?? (message.params[\"agentId\"] as string | undefined) ?? \"unknown\";\n const result = await handler(aid, message.params, message.id, socket);\n if (message.id !== undefined) this.sendResult(socket, message.id, result);\n if (message.method === \"agent.register\") return message.params[\"agentId\"] as string | undefined;\n } catch (e: unknown) {\n this.sendError(socket, message.id, RPC_INTERNAL_ERROR, e instanceof Error ? e.message : String(e));\n }\n return undefined;\n }\n\n // ── Default Handlers ──────────────────────────────────────────────\n\n private registerDefaultHandlers(): void {\n this.handlers.set(\"agent.register\", async (_cid, params, _id, socket) => {\n const agentId = params[\"agentId\"] as string | undefined;\n const agentName = params[\"agentName\"] as string | undefined;\n if (!agentId || !agentName) throw new IPCError(\"agent.register requires agentId and agentName\");\n this.registerClientSocket(agentId, agentName, socket);\n logger.info({ agentId, agentName }, \"Agent registered\");\n return { registered: true, agentId };\n });\n\n this.handlers.set(\"agent.streamChunk\", async (_cid, params) => {\n getEventBus().emit(\"model:stream:chunk\", {\n model: (params[\"model\"] as string | undefined) ?? \"unknown\",\n content: (params[\"content\"] as string | undefined) ?? \"\",\n });\n return { received: true };\n });\n\n this.handlers.set(\"agent.taskUpdate\", async (_cid, params) => {\n const taskId = params[\"taskId\"] as string | undefined;\n const status = params[\"status\"] as string | undefined;\n if (taskId && status) getEventBus().emit(\"task:updated\", { taskId, status });\n return { received: true };\n });\n\n this.handlers.set(\"agent.message\", async (_cid, params) => {\n const to = params[\"to\"] as string | undefined;\n const content = params[\"content\"] as string | undefined;\n const from = params[\"from\"] as string | undefined;\n if (from && to && content) {\n getEventBus().emit(\"agent:message\", { from, to, content });\n const target = this.clients.get(to);\n if (target) {\n this.write(target.socket, { jsonrpc: \"2.0\", method: \"agent.message\", params: { from, content } });\n }\n }\n return { delivered: this.clients.has(to ?? \"\") };\n });\n\n this.handlers.set(\"hub.taskAssign\", async (_cid, params) => {\n const agentId = params[\"agentId\"] as string | undefined;\n const taskId = params[\"taskId\"] as string | undefined;\n if (agentId && taskId) {\n const target = this.clients.get(agentId);\n if (target) this.write(target.socket, { jsonrpc: \"2.0\", method: \"hub.taskAssign\", params: { taskId, ...params } });\n }\n return { assigned: this.clients.has(agentId ?? \"\") };\n });\n\n this.handlers.set(\"hub.shutdown\", async (_cid, params) => {\n const agentId = params[\"agentId\"] as string | undefined;\n if (agentId) {\n const target = this.clients.get(agentId);\n if (target) {\n this.write(target.socket, {\n jsonrpc: \"2.0\", method: \"hub.shutdown\",\n params: { reason: (params[\"reason\"] as string | undefined) ?? \"Shutdown requested\" },\n });\n }\n }\n return { notified: this.clients.has(agentId ?? \"\") };\n });\n }\n\n // ── HMAC ──────────────────────────────────────────────────────────\n\n private verifyHmac(message: IIPCMessage, hmac: string): boolean {\n const expected = this.computeHmac(message);\n if (expected.length !== hmac.length) return false;\n return timingSafeEqual(Buffer.from(expected, \"hex\"), Buffer.from(hmac, \"hex\"));\n }\n\n private isAuthEnvelope(v: unknown): v is { message: IIPCMessage; hmac: string } {\n if (typeof v !== \"object\" || v === null) return false;\n const o = v as Record<string, unknown>;\n return typeof o[\"hmac\"] === \"string\" && typeof o[\"message\"] === \"object\" && o[\"message\"] !== null;\n }\n\n // ── I/O ───────────────────────────────────────────────────────────\n\n private write(socket: Socket, msg: IIPCMessage | IIPCResponse): void {\n if (!socket.destroyed) socket.write(JSON.stringify(msg) + \"\\n\");\n }\n\n private sendResult(socket: Socket, id: number, result: unknown): void {\n this.write(socket, { jsonrpc: \"2.0\", result, id } as IIPCResponse);\n }\n\n private sendError(socket: Socket, id: number | undefined, code: number, message: string): void {\n this.write(socket, { jsonrpc: \"2.0\", error: { code, message }, id: id ?? 0 } as IIPCResponse);\n }\n\n // ── Lifecycle ─────────────────────────────────────────────────────\n\n private async removeStaleSocket(): Promise<void> {\n try { await unlink(this.socketPath); } catch { /* may not exist */ }\n }\n\n private setupProcessCleanup(): void {\n const cleanup = (): void => { this.destroy().catch(() => {}); };\n process.once(\"exit\", cleanup);\n process.once(\"SIGINT\", cleanup);\n process.once(\"SIGTERM\", cleanup);\n }\n\n private assertAlive(): void {\n if (this.disposed) throw new IPCError(\"IPCHub has been disposed\");\n }\n}\n","/**\n * PaneProcess — IPC client connecting to the IPCHub from an agent process.\n * JSON-RPC 2.0 with HMAC auth, reconnection, and heartbeat per PRD 9.4 & 20.2.\n */\n\nimport { connect, type Socket } from \"node:net\";\nimport { createHmac } from \"node:crypto\";\nimport type { IIPCMessage, IIPCResponse, IPCMethod } from \"../types/team.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { IPCError } from \"../types/errors.js\";\nimport { withRetry, sleep } from \"../utils/retry.js\";\n\n// ── Types ───────────────────────────────────────────────────────────────\n\ninterface IPaneProcessOptions {\n readonly agentId: string;\n readonly agentName: string;\n readonly socketPath: string;\n readonly hmacSecret: string;\n readonly heartbeatIntervalMs?: number;\n readonly reconnectMaxRetries?: number;\n}\n\ntype MessageHandler = (message: IIPCMessage) => void;\ntype PendingRequest = {\n readonly resolve: (result: unknown) => void;\n readonly reject: (error: Error) => void;\n readonly timer: ReturnType<typeof setTimeout>;\n};\n\n// ── Constants ───────────────────────────────────────────────────────────\n\nconst DEFAULT_HEARTBEAT_MS = 15_000;\nconst DEFAULT_RECONNECT_RETRIES = 5;\nconst REQUEST_TIMEOUT_MS = 30_000;\nconst NEWLINE = 0x0a;\n\n// ── PaneProcess ─────────────────────────────────────────────────────────\n\nexport class PaneProcess {\n private readonly agentId: string;\n private readonly agentName: string;\n private readonly socketPath: string;\n private readonly hmacSecret: string;\n private readonly heartbeatMs: number;\n private readonly maxRetries: number;\n private readonly msgHandlers = new Map<string, Set<MessageHandler>>();\n private readonly pending = new Map<number, PendingRequest>();\n\n private socket: Socket | undefined;\n private heartbeatTimer: ReturnType<typeof setInterval> | undefined;\n private nextId = 1;\n private connected = false;\n private disposed = false;\n\n constructor(options: IPaneProcessOptions) {\n this.agentId = options.agentId;\n this.agentName = options.agentName;\n this.socketPath = options.socketPath;\n this.hmacSecret = options.hmacSecret;\n this.heartbeatMs = options.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_MS;\n this.maxRetries = options.reconnectMaxRetries ?? DEFAULT_RECONNECT_RETRIES;\n }\n\n /** Connect to the IPC hub and register this agent. */\n async connect(): Promise<void> {\n this.assertAlive();\n await this.establish();\n await this.register();\n this.startHeartbeat();\n logger.info({ agentId: this.agentId }, \"PaneProcess connected\");\n }\n\n /** Send a JSON-RPC 2.0 request and wait for response. */\n async request(method: IPCMethod, params: Record<string, unknown>): Promise<unknown> {\n this.assertAlive();\n this.assertConnected();\n const id = this.nextId++;\n const message: IIPCMessage = { jsonrpc: \"2.0\", method, params: { ...params, agentId: this.agentId }, id };\n\n return new Promise<unknown>((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pending.delete(id);\n reject(new IPCError(`Request timeout: ${method}`));\n }, REQUEST_TIMEOUT_MS);\n this.pending.set(id, { resolve, reject, timer });\n this.sendAuthenticated(message);\n });\n }\n\n /** Send a notification (no response expected). */\n notify(method: IPCMethod, params: Record<string, unknown>): void {\n this.assertAlive();\n this.assertConnected();\n this.sendAuthenticated({ jsonrpc: \"2.0\", method, params: { ...params, agentId: this.agentId } });\n }\n\n /** Convenience: send a stream chunk. */\n sendStreamChunk(content: string, model: string, taskId?: string): void {\n this.notify(\"agent.streamChunk\", { content, model, taskId });\n }\n\n /** Convenience: send a task status update. */\n sendTaskUpdate(taskId: string, status: string): void {\n this.notify(\"agent.taskUpdate\", { taskId, status });\n }\n\n /** Convenience: send a message to another agent via the hub. */\n async sendMessage(to: string, content: string): Promise<unknown> {\n return this.request(\"agent.message\", { from: this.agentId, to, content });\n }\n\n /** Register a handler for incoming messages of a specific method. */\n onMessage(method: string, handler: MessageHandler): () => void {\n const set = this.msgHandlers.get(method) ?? new Set();\n set.add(handler);\n this.msgHandlers.set(method, set);\n return () => { set.delete(handler); if (set.size === 0) this.msgHandlers.delete(method); };\n }\n\n isConnected(): boolean { return this.connected && !this.disposed; }\n\n /** Gracefully disconnect from the hub. */\n async disconnect(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n this.stopHeartbeat();\n this.rejectAll();\n if (this.socket) { this.socket.end(); this.socket = undefined; }\n this.connected = false;\n logger.info({ agentId: this.agentId }, \"PaneProcess disconnected\");\n }\n\n // ── Connection ────────────────────────────────────────────────────\n\n private async establish(): Promise<void> {\n await withRetry(() => this.connectSocket(), {\n maxRetries: this.maxRetries,\n baseDelayMs: 500,\n maxDelayMs: 10_000,\n shouldRetry: () => !this.disposed,\n });\n }\n\n private connectSocket(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const socket = connect(this.socketPath);\n let buffer = Buffer.alloc(0);\n\n socket.on(\"connect\", () => {\n this.socket = socket;\n this.connected = true;\n resolve();\n });\n\n socket.on(\"data\", (data: Buffer) => {\n buffer = Buffer.concat([buffer, data]);\n let idx: number;\n while ((idx = buffer.indexOf(NEWLINE)) !== -1) {\n const raw = buffer.subarray(0, idx).toString(\"utf-8\");\n buffer = buffer.subarray(idx + 1);\n if (raw.length > 0) this.handleIncoming(raw);\n }\n });\n\n socket.on(\"close\", () => {\n this.connected = false;\n if (!this.disposed) {\n logger.warn({ agentId: this.agentId }, \"Connection lost, reconnecting\");\n this.attemptReconnect();\n }\n });\n\n socket.on(\"error\", (err: Error) => {\n if (!this.connected) reject(new IPCError(`Connection failed: ${err.message}`));\n else logger.error({ agentId: this.agentId, error: err.message }, \"Socket error\");\n });\n });\n }\n\n private async attemptReconnect(): Promise<void> {\n if (this.disposed) return;\n this.stopHeartbeat();\n try {\n await sleep(1_000);\n await this.establish();\n await this.register();\n this.startHeartbeat();\n logger.info({ agentId: this.agentId }, \"Reconnected\");\n } catch (e: unknown) {\n logger.error({ agentId: this.agentId, error: e instanceof Error ? e.message : String(e) }, \"Reconnect failed\");\n }\n }\n\n private async register(): Promise<void> {\n await this.request(\"agent.register\", { agentId: this.agentId, agentName: this.agentName });\n }\n\n // ── Message Processing ────────────────────────────────────────────\n\n private handleIncoming(raw: string): void {\n let parsed: unknown;\n try { parsed = JSON.parse(raw) as unknown; } catch { return; }\n\n if (this.isResponse(parsed)) { this.resolveResponse(parsed); return; }\n if (this.isMessage(parsed)) { this.dispatch(parsed); return; }\n }\n\n private resolveResponse(response: IIPCResponse): void {\n const p = this.pending.get(response.id);\n if (!p) return;\n this.pending.delete(response.id);\n clearTimeout(p.timer);\n if (response.error) p.reject(new IPCError(`RPC ${response.error.code}: ${response.error.message}`));\n else p.resolve(response.result);\n }\n\n private dispatch(message: IIPCMessage): void {\n const handlers = this.msgHandlers.get(message.method);\n if (!handlers) return;\n for (const h of handlers) {\n try { h(message); } catch (e: unknown) {\n logger.error({ method: message.method, error: e instanceof Error ? e.message : String(e) }, \"Handler error\");\n }\n }\n }\n\n // ── Heartbeat ─────────────────────────────────────────────────────\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n this.heartbeatTimer = setInterval(() => {\n if (this.connected && this.socket && !this.socket.destroyed) {\n this.notify(\"agent.streamChunk\", { content: \"\", model: \"heartbeat\", heartbeat: true });\n }\n }, this.heartbeatMs);\n if (this.heartbeatTimer.unref) this.heartbeatTimer.unref();\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) { clearInterval(this.heartbeatTimer); this.heartbeatTimer = undefined; }\n }\n\n // ── HMAC ──────────────────────────────────────────────────────────\n\n private sendAuthenticated(message: IIPCMessage): void {\n if (!this.socket || this.socket.destroyed) return;\n const hmac = createHmac(\"sha256\", this.hmacSecret).update(JSON.stringify(message)).digest(\"hex\");\n this.socket.write(JSON.stringify({ message, hmac }) + \"\\n\");\n }\n\n // ── Type Guards ───────────────────────────────────────────────────\n\n private isResponse(v: unknown): v is IIPCResponse {\n if (typeof v !== \"object\" || v === null) return false;\n const o = v as Record<string, unknown>;\n return o[\"jsonrpc\"] === \"2.0\" && typeof o[\"id\"] === \"number\" && !(\"method\" in o);\n }\n\n private isMessage(v: unknown): v is IIPCMessage {\n if (typeof v !== \"object\" || v === null) return false;\n const o = v as Record<string, unknown>;\n return o[\"jsonrpc\"] === \"2.0\" && typeof o[\"method\"] === \"string\";\n }\n\n // ── Helpers ───────────────────────────────────────────────────────\n\n private rejectAll(): void {\n const err = new IPCError(\"PaneProcess disconnected\");\n for (const [, p] of this.pending) { clearTimeout(p.timer); p.reject(err); }\n this.pending.clear();\n }\n\n private assertAlive(): void { if (this.disposed) throw new IPCError(\"PaneProcess disposed\"); }\n private assertConnected(): void { if (!this.connected || !this.socket) throw new IPCError(\"Not connected\"); }\n}\n","/**\n * MCP tool bridge per PRD section 11.3\n * Converts MCP tool schemas to AemeathCLI IToolDefinition format and back.\n * Registers MCP tools into the unified tool registry with lazy loading.\n * Tool namespacing: mcp__{serverName}__{toolName}\n */\n\nimport { logger } from \"../utils/logger.js\";\nimport { ToolCallError } from \"../types/errors.js\";\nimport type { IToolDefinition, IToolParameter, IToolCall, IToolResult } from \"../types/message.js\";\nimport type { IToolRegistration, IToolRegistry, ToolCategory } from \"../types/tool.js\";\nimport type { PermissionMode } from \"../types/tool.js\";\nimport type { MCPServerManager } from \"./server-manager.js\";\nimport type { IMCPToolSchema } from \"./client.js\";\n\n// ── Constants ───────────────────────────────────────────────────────────\n\nconst NAMESPACE_SEPARATOR = \"__\";\nconst MCP_PREFIX = \"mcp\";\nconst MCP_CATEGORY: ToolCategory = \"mcp\";\n\n// ── Namespacing ─────────────────────────────────────────────────────────\n\nfunction buildToolName(serverName: string, toolName: string): string {\n return `${MCP_PREFIX}${NAMESPACE_SEPARATOR}${serverName}${NAMESPACE_SEPARATOR}${toolName}`;\n}\n\nfunction parseToolName(\n namespacedName: string,\n): { serverName: string; toolName: string } | undefined {\n const parts = namespacedName.split(NAMESPACE_SEPARATOR);\n if (parts.length < 3 || parts[0] !== MCP_PREFIX) {\n return undefined;\n }\n const serverName = parts[1];\n const toolName = parts.slice(2).join(NAMESPACE_SEPARATOR);\n if (!serverName || !toolName) {\n return undefined;\n }\n return { serverName, toolName };\n}\n\n// ── Schema Conversion ───────────────────────────────────────────────────\n\ninterface IJsonSchemaProperty {\n readonly type?: string;\n readonly description?: string;\n readonly default?: unknown;\n readonly enum?: readonly string[];\n}\n\nfunction convertInputSchema(\n inputSchema: Readonly<Record<string, unknown>>,\n): readonly IToolParameter[] {\n const properties = inputSchema[\"properties\"];\n if (!properties || typeof properties !== \"object\") {\n return [];\n }\n\n const requiredList = inputSchema[\"required\"];\n const requiredSet = new Set<string>(\n Array.isArray(requiredList) ? (requiredList as string[]) : [],\n );\n\n const params: IToolParameter[] = [];\n for (const [name, rawSchema] of Object.entries(\n properties as Record<string, unknown>,\n )) {\n const schema = rawSchema as IJsonSchemaProperty | undefined;\n if (!schema || typeof schema !== \"object\") {\n continue;\n }\n\n const param: IToolParameter = {\n name,\n type: schema.type ?? \"string\",\n description: schema.description ?? \"\",\n required: requiredSet.has(name),\n ...(schema.default !== undefined ? { default: schema.default } : {}),\n ...(schema.enum !== undefined ? { enum: schema.enum } : {}),\n };\n params.push(param);\n }\n\n return params;\n}\n\nfunction mcpToolToDefinition(\n serverName: string,\n mcpTool: IMCPToolSchema,\n): IToolDefinition {\n return {\n name: buildToolName(serverName, mcpTool.name),\n description: `[MCP:${serverName}] ${mcpTool.description}`,\n parameters: convertInputSchema(mcpTool.inputSchema),\n };\n}\n\n// ── Tool Call Conversion ────────────────────────────────────────────────\n\ninterface IMCPCallRequest {\n readonly serverName: string;\n readonly toolName: string;\n readonly arguments: Record<string, unknown>;\n}\n\nfunction toolCallToMCPRequest(call: IToolCall): IMCPCallRequest {\n const parsed = parseToolName(call.name);\n if (!parsed) {\n throw new ToolCallError(\n call.name,\n \"Invalid MCP tool name format — expected mcp__{server}__{tool}\",\n );\n }\n return {\n serverName: parsed.serverName,\n toolName: parsed.toolName,\n arguments: call.arguments,\n };\n}\n\nfunction mcpResultToToolResult(\n toolCallId: string,\n toolName: string,\n content: string,\n isError: boolean,\n): IToolResult {\n return { toolCallId, name: toolName, content, isError };\n}\n\n// ── Argument Validation (PRD 11.4) ──────────────────────────────────────\n\nfunction validateArguments(\n args: Record<string, unknown>,\n parameters: readonly IToolParameter[],\n): string | undefined {\n for (const param of parameters) {\n if (param.required && !(param.name in args)) {\n return `Missing required argument: ${param.name}`;\n }\n }\n return undefined;\n}\n\n// ── MCPToolBridge ───────────────────────────────────────────────────────\n\nexport class MCPToolBridge {\n private readonly serverManager: MCPServerManager;\n private readonly toolCache = new Map<string, readonly IToolDefinition[]>();\n\n constructor(serverManager: MCPServerManager) {\n this.serverManager = serverManager;\n }\n\n /**\n * Discover tools from all connected MCP servers and register them.\n * Uses lazy loading: definitions are fetched and cached on first request.\n */\n async registerAll(registry: IToolRegistry): Promise<number> {\n const servers = this.serverManager.getConnectedServers();\n let totalRegistered = 0;\n\n for (const serverName of servers) {\n try {\n const count = await this.registerServerTools(serverName, registry);\n totalRegistered += count;\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n logger.error(\n { server: serverName, error: msg },\n \"Failed to register MCP tools\",\n );\n }\n }\n\n logger.info(\n { totalRegistered, servers: servers.length },\n \"MCP tool registration complete\",\n );\n\n return totalRegistered;\n }\n\n /**\n * Register tools from a single MCP server.\n * Fetches tool schemas and caches definitions.\n */\n async registerServerTools(\n serverName: string,\n registry: IToolRegistry,\n ): Promise<number> {\n const definitions = await this.loadToolDefinitions(serverName);\n\n for (const definition of definitions) {\n const registration = this.createRegistration(serverName, definition);\n registry.register(registration);\n }\n\n logger.info(\n { server: serverName, tools: definitions.length },\n \"Registered MCP server tools\",\n );\n\n return definitions.length;\n }\n\n /**\n * Lazy-load tool definitions for a server.\n * Returns cached definitions if already loaded.\n */\n async loadToolDefinitions(\n serverName: string,\n ): Promise<readonly IToolDefinition[]> {\n const cached = this.toolCache.get(serverName);\n if (cached) {\n return cached;\n }\n\n const mcpTools = await this.serverManager.listServerTools(serverName);\n const definitions = mcpTools.map((tool) =>\n mcpToolToDefinition(serverName, tool),\n );\n\n this.toolCache.set(serverName, definitions);\n return definitions;\n }\n\n /**\n * Execute an MCP tool call: validate, convert, call, return result.\n */\n async executeTool(call: IToolCall): Promise<IToolResult> {\n const request = toolCallToMCPRequest(call);\n\n // Validate arguments against cached schema\n const definitions = this.toolCache.get(request.serverName);\n if (definitions) {\n const def = definitions.find((d) => d.name === call.name);\n if (def) {\n const validationError = validateArguments(call.arguments, def.parameters);\n if (validationError) {\n return mcpResultToToolResult(call.id, call.name, validationError, true);\n }\n }\n }\n\n // Rate-limit check\n this.serverManager.checkRateLimitFor(request.serverName);\n this.serverManager.recordCall(request.serverName);\n\n const client = this.serverManager.getClient(request.serverName);\n if (!client) {\n return mcpResultToToolResult(\n call.id,\n call.name,\n `MCP server \"${request.serverName}\" is not connected`,\n true,\n );\n }\n\n try {\n const result = await client.callTool(request.toolName, request.arguments);\n return mcpResultToToolResult(\n call.id,\n call.name,\n result.content,\n result.isError,\n );\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n return mcpResultToToolResult(call.id, call.name, msg, true);\n }\n }\n\n /** Invalidate cached tool definitions for a server (e.g. after config reload). */\n invalidateCache(serverName?: string): void {\n if (serverName) {\n this.toolCache.delete(serverName);\n } else {\n this.toolCache.clear();\n }\n }\n\n /** Check whether a tool name is an MCP-namespaced tool. */\n isMCPTool(toolName: string): boolean {\n return parseToolName(toolName) !== undefined;\n }\n\n /** Get all cached tool definitions across all servers. */\n getAllDefinitions(): readonly IToolDefinition[] {\n const all: IToolDefinition[] = [];\n for (const defs of this.toolCache.values()) {\n all.push(...defs);\n }\n return all;\n }\n\n // ── Private ─────────────────────────────────────────────────────────\n\n private createRegistration(\n _serverName: string,\n definition: IToolDefinition,\n ): IToolRegistration {\n return {\n definition,\n category: MCP_CATEGORY,\n requiresApproval: (mode: PermissionMode, _args: Record<string, unknown>) => {\n // MCP tools always require approval in strict mode\n return mode === \"strict\";\n },\n execute: async (args: Record<string, unknown>) => {\n const call: IToolCall = {\n id: `mcp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n name: definition.name,\n arguments: args,\n };\n return this.executeTool(call);\n },\n };\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export { KimiAdapter } from './chunk-MXZSI3AY.js';
2
+ import './chunk-HCIHOHLX.js';
3
+ import './chunk-ZGOHARPV.js';
4
+ import './chunk-JAXXTYID.js';
5
+ //# sourceMappingURL=kimi-adapter-JN4HFFHU.js.map
6
+ //# sourceMappingURL=kimi-adapter-JN4HFFHU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"kimi-adapter-JN4HFFHU.js"}
@@ -0,0 +1,149 @@
1
+ import { CredentialStore } from './chunk-4IJD72YB.js';
2
+ import './chunk-CGEV3ARR.js';
3
+ import './chunk-CYQNBB25.js';
4
+ import './chunk-NBR3GHMT.js';
5
+ import './chunk-CS5X3BWX.js';
6
+ import './chunk-HCIHOHLX.js';
7
+ import { AuthenticationError } from './chunk-ZGOHARPV.js';
8
+ import { logger } from './chunk-JAXXTYID.js';
9
+ import { execFile, spawn } from 'child_process';
10
+ import { promisify } from 'util';
11
+ import { existsSync, readFileSync } from 'fs';
12
+ import { join } from 'path';
13
+ import { homedir } from 'os';
14
+
15
+ var execFileAsync = promisify(execFile);
16
+ var CLI_COMMAND = "kimi";
17
+ function getKimiHome() {
18
+ return process.env["KIMI_HOME"] ?? join(homedir(), ".kimi");
19
+ }
20
+ function getCredentialsPath() {
21
+ return join(getKimiHome(), "credentials", "kimi-code.json");
22
+ }
23
+ function readKimiCredentials() {
24
+ const credsPath = getCredentialsPath();
25
+ if (!existsSync(credsPath)) return void 0;
26
+ try {
27
+ return JSON.parse(readFileSync(credsPath, "utf-8"));
28
+ } catch {
29
+ return void 0;
30
+ }
31
+ }
32
+ var KimiLogin = class {
33
+ credentialStore;
34
+ constructor(store) {
35
+ this.credentialStore = store ?? new CredentialStore();
36
+ }
37
+ /**
38
+ * Login via the Kimi CLI.
39
+ * First checks for cached credentials. If not found, spawns the Kimi CLI
40
+ * interactive session which handles browser-based login automatically.
41
+ */
42
+ async login() {
43
+ const existing = this.readCachedCredentials();
44
+ if (existing) {
45
+ logger.info("Found existing Kimi CLI credentials");
46
+ await this.credentialStore.set("kimi", existing);
47
+ return existing;
48
+ }
49
+ const cliAvailable = await this.isCliAvailable();
50
+ if (!cliAvailable) {
51
+ throw new AuthenticationError(
52
+ "kimi",
53
+ "Kimi CLI not found. Install it first: npm install -g @anthropic-ai/kimi-cli\nOr set an API key: aemeathcli auth set-key kimi <key>"
54
+ );
55
+ }
56
+ logger.info("Spawning Kimi CLI for login (browser will open automatically)");
57
+ try {
58
+ await this.spawnInteractive(CLI_COMMAND, ["login"]);
59
+ } catch {
60
+ try {
61
+ await this.spawnInteractive(CLI_COMMAND, []);
62
+ } catch (error2) {
63
+ const msg = error2 instanceof Error ? error2.message : String(error2);
64
+ throw new AuthenticationError("kimi", `Kimi login failed: ${msg}`);
65
+ }
66
+ }
67
+ const credential = this.readCachedCredentials();
68
+ if (!credential) {
69
+ throw new AuthenticationError(
70
+ "kimi",
71
+ "No Kimi credentials found after login. Please try again or set an API key: aemeathcli auth set-key kimi <key>"
72
+ );
73
+ }
74
+ await this.credentialStore.set("kimi", credential);
75
+ logger.info("Kimi credentials imported successfully");
76
+ return credential;
77
+ }
78
+ async logout() {
79
+ await this.credentialStore.delete("kimi");
80
+ logger.info("Kimi session revoked from AemeathCLI");
81
+ }
82
+ async isLoggedIn() {
83
+ const credential = this.readCachedCredentials();
84
+ if (!credential) {
85
+ return false;
86
+ }
87
+ await this.credentialStore.set("kimi", credential);
88
+ return true;
89
+ }
90
+ async getStatus() {
91
+ const loggedIn = await this.isLoggedIn();
92
+ if (!loggedIn) return { loggedIn: false };
93
+ const credential = await this.credentialStore.get("kimi");
94
+ if (!credential) return { loggedIn: false };
95
+ return {
96
+ loggedIn: true,
97
+ ...credential.email !== void 0 ? { email: credential.email } : {}
98
+ };
99
+ }
100
+ async getCachedCredential() {
101
+ const credential = this.readCachedCredentials();
102
+ if (credential) {
103
+ await this.credentialStore.set("kimi", credential);
104
+ }
105
+ return credential;
106
+ }
107
+ // ── Internal ──────────────────────────────────────────────────────────
108
+ readCachedCredentials() {
109
+ const kimiCreds = readKimiCredentials();
110
+ if (!kimiCreds?.access_token) return void 0;
111
+ if (kimiCreds.expires_at) {
112
+ const expiresAt2 = new Date(kimiCreds.expires_at * 1e3);
113
+ if (/* @__PURE__ */ new Date() > expiresAt2 && !kimiCreds.refresh_token) {
114
+ logger.debug("Kimi CLI token expired with no refresh token");
115
+ return void 0;
116
+ }
117
+ }
118
+ const expiresAt = kimiCreds.expires_at ? new Date(kimiCreds.expires_at * 1e3) : void 0;
119
+ return {
120
+ provider: "kimi",
121
+ method: "native_login",
122
+ token: kimiCreds.access_token,
123
+ ...kimiCreds.refresh_token !== void 0 ? { refreshToken: kimiCreds.refresh_token } : {},
124
+ ...expiresAt !== void 0 ? { expiresAt } : {}
125
+ };
126
+ }
127
+ spawnInteractive(command, args) {
128
+ return new Promise((resolve, reject) => {
129
+ const child = spawn(command, [...args], { stdio: "inherit", timeout: 3e5 });
130
+ child.on("close", (code) => {
131
+ if (code === 0) resolve();
132
+ else reject(new Error(`Process exited with code ${String(code)}`));
133
+ });
134
+ child.on("error", reject);
135
+ });
136
+ }
137
+ async isCliAvailable() {
138
+ try {
139
+ await execFileAsync("which", [CLI_COMMAND], { timeout: 3e3 });
140
+ return true;
141
+ } catch {
142
+ return false;
143
+ }
144
+ }
145
+ };
146
+
147
+ export { KimiLogin };
148
+ //# sourceMappingURL=kimi-login-CZPS63NK.js.map
149
+ //# sourceMappingURL=kimi-login-CZPS63NK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/providers/kimi-login.ts"],"names":["expiresAt"],"mappings":"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","file":"kimi-login-CZPS63NK.js","sourcesContent":["/**\n * Kimi (Moonshot) delegated authentication\n * Reads cached credentials from Kimi CLI's ~/.kimi/credentials/kimi-code.json.\n * If not found, spawns `kimi` CLI for interactive login.\n * Kimi's login opens a browser automatically from its interactive session.\n */\n\nimport { execFile, spawn } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readFileSync, existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport type { ICredential } from \"../../types/index.js\";\nimport { AuthenticationError } from \"../../types/index.js\";\nimport { CredentialStore } from \"../credential-store.js\";\nimport { logger } from \"../../utils/index.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Kimi CLI Token Paths ────────────────────────────────────────────────\n\nconst CLI_COMMAND = \"kimi\";\n\nfunction getKimiHome(): string {\n return process.env[\"KIMI_HOME\"] ?? join(homedir(), \".kimi\");\n}\n\nfunction getCredentialsPath(): string {\n return join(getKimiHome(), \"credentials\", \"kimi-code.json\");\n}\n\n// ── kimi-code.json Schema ───────────────────────────────────────────────\n\ninterface IKimiCredentials {\n readonly access_token?: string;\n readonly refresh_token?: string;\n readonly expires_at?: number;\n readonly scope?: string;\n readonly token_type?: string;\n}\n\nfunction readKimiCredentials(): IKimiCredentials | undefined {\n const credsPath = getCredentialsPath();\n if (!existsSync(credsPath)) return undefined;\n try {\n return JSON.parse(readFileSync(credsPath, \"utf-8\")) as IKimiCredentials;\n } catch {\n return undefined;\n }\n}\n\n// ── KimiLogin Class ─────────────────────────────────────────────────────\n\nexport class KimiLogin {\n private readonly credentialStore: CredentialStore;\n\n constructor(store?: CredentialStore) {\n this.credentialStore = store ?? new CredentialStore();\n }\n\n /**\n * Login via the Kimi CLI.\n * First checks for cached credentials. If not found, spawns the Kimi CLI\n * interactive session which handles browser-based login automatically.\n */\n async login(): Promise<ICredential> {\n // Check if already logged in via cached tokens\n const existing = this.readCachedCredentials();\n if (existing) {\n logger.info(\"Found existing Kimi CLI credentials\");\n await this.credentialStore.set(\"kimi\", existing);\n return existing;\n }\n\n // Check if the CLI is available\n const cliAvailable = await this.isCliAvailable();\n if (!cliAvailable) {\n throw new AuthenticationError(\n \"kimi\",\n \"Kimi CLI not found. Install it first: npm install -g @anthropic-ai/kimi-cli\\n\" +\n \"Or set an API key: aemeathcli auth set-key kimi <key>\",\n );\n }\n\n // Spawn kimi CLI — it handles login with browser automatically\n logger.info(\"Spawning Kimi CLI for login (browser will open automatically)\");\n try {\n await this.spawnInteractive(CLI_COMMAND, [\"login\"]);\n } catch {\n // Some versions may not have `kimi login` — try spawning interactive session\n try {\n await this.spawnInteractive(CLI_COMMAND, []);\n } catch (error2: unknown) {\n const msg = error2 instanceof Error ? error2.message : String(error2);\n throw new AuthenticationError(\"kimi\", `Kimi login failed: ${msg}`);\n }\n }\n\n // Read the freshly cached credentials\n const credential = this.readCachedCredentials();\n if (!credential) {\n throw new AuthenticationError(\n \"kimi\",\n \"No Kimi credentials found after login. Please try again or set an API key: aemeathcli auth set-key kimi <key>\",\n );\n }\n\n await this.credentialStore.set(\"kimi\", credential);\n logger.info(\"Kimi credentials imported successfully\");\n return credential;\n }\n\n async logout(): Promise<void> {\n await this.credentialStore.delete(\"kimi\");\n logger.info(\"Kimi session revoked from AemeathCLI\");\n }\n\n async isLoggedIn(): Promise<boolean> {\n const credential = this.readCachedCredentials();\n if (!credential) {\n return false;\n }\n\n await this.credentialStore.set(\"kimi\", credential);\n return true;\n }\n\n async getStatus(): Promise<{ loggedIn: boolean; email?: string | undefined; plan?: string | undefined }> {\n const loggedIn = await this.isLoggedIn();\n if (!loggedIn) return { loggedIn: false };\n\n const credential = await this.credentialStore.get(\"kimi\");\n if (!credential) return { loggedIn: false };\n\n return {\n loggedIn: true,\n ...(credential.email !== undefined ? { email: credential.email } : {}),\n };\n }\n\n async getCachedCredential(): Promise<ICredential | undefined> {\n const credential = this.readCachedCredentials();\n if (credential) {\n await this.credentialStore.set(\"kimi\", credential);\n }\n return credential;\n }\n\n // ── Internal ──────────────────────────────────────────────────────────\n\n private readCachedCredentials(): ICredential | undefined {\n const kimiCreds = readKimiCredentials();\n if (!kimiCreds?.access_token) return undefined;\n\n // Check expiry (expires_at is seconds since epoch)\n if (kimiCreds.expires_at) {\n const expiresAt = new Date(kimiCreds.expires_at * 1000);\n if (new Date() > expiresAt && !kimiCreds.refresh_token) {\n logger.debug(\"Kimi CLI token expired with no refresh token\");\n return undefined;\n }\n }\n\n const expiresAt = kimiCreds.expires_at\n ? new Date(kimiCreds.expires_at * 1000)\n : undefined;\n\n return {\n provider: \"kimi\",\n method: \"native_login\",\n token: kimiCreds.access_token,\n ...(kimiCreds.refresh_token !== undefined ? { refreshToken: kimiCreds.refresh_token } : {}),\n ...(expiresAt !== undefined ? { expiresAt } : {}),\n };\n }\n\n private spawnInteractive(command: string, args: readonly string[]): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, [...args], { stdio: \"inherit\", timeout: 300_000 });\n child.on(\"close\", (code) => {\n if (code === 0) resolve();\n else reject(new Error(`Process exited with code ${String(code)}`));\n });\n child.on(\"error\", reject);\n });\n }\n\n private async isCliAvailable(): Promise<boolean> {\n try {\n await execFileAsync(\"which\", [CLI_COMMAND], { timeout: 3000 });\n return true;\n } catch {\n return false;\n }\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export { ClaudeNativeCLIAdapter, CodexNativeCLIAdapter, GeminiNativeCLIAdapter, KimiNativeCLIAdapter, logNativeAdapterSelection } from './chunk-6PDJ45T4.js';
2
+ import './chunk-HCIHOHLX.js';
3
+ import './chunk-ZGOHARPV.js';
4
+ import './chunk-JAXXTYID.js';
5
+ //# sourceMappingURL=native-cli-adapters-OLW3XX57.js.map
6
+ //# sourceMappingURL=native-cli-adapters-OLW3XX57.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"native-cli-adapters-OLW3XX57.js"}
@@ -0,0 +1,6 @@
1
+ export { OllamaAdapter } from './chunk-H66O5Z2V.js';
2
+ import './chunk-HCIHOHLX.js';
3
+ import './chunk-ZGOHARPV.js';
4
+ import './chunk-JAXXTYID.js';
5
+ //# sourceMappingURL=ollama-adapter-OJQ3FKWK.js.map
6
+ //# sourceMappingURL=ollama-adapter-OJQ3FKWK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ollama-adapter-OJQ3FKWK.js"}
@@ -0,0 +1,6 @@
1
+ export { OpenAIAdapter } from './chunk-WPP3PEDE.js';
2
+ import './chunk-HCIHOHLX.js';
3
+ import './chunk-ZGOHARPV.js';
4
+ import './chunk-JAXXTYID.js';
5
+ //# sourceMappingURL=openai-adapter-XU46EN7B.js.map
6
+ //# sourceMappingURL=openai-adapter-XU46EN7B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"openai-adapter-XU46EN7B.js"}
@@ -0,0 +1,6 @@
1
+ export { ProviderRegistry, createDefaultRegistry } from './chunk-O3ZF22SW.js';
2
+ import './chunk-HCIHOHLX.js';
3
+ import './chunk-ZGOHARPV.js';
4
+ import './chunk-JAXXTYID.js';
5
+ //# sourceMappingURL=registry-4KD24ZC3.js.map
6
+ //# sourceMappingURL=registry-4KD24ZC3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"registry-4KD24ZC3.js"}
@@ -0,0 +1,5 @@
1
+ export { SkillRegistry } from './chunk-TEVZS4FA.js';
2
+ import './chunk-NBR3GHMT.js';
3
+ import './chunk-JAXXTYID.js';
4
+ //# sourceMappingURL=registry-H7B3AHPQ.js.map
5
+ //# sourceMappingURL=registry-H7B3AHPQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"registry-H7B3AHPQ.js"}
@@ -0,0 +1,5 @@
1
+ export { MCPServerManager } from './chunk-MFBHNWGV.js';
2
+ import './chunk-ZGOHARPV.js';
3
+ import './chunk-JAXXTYID.js';
4
+ //# sourceMappingURL=server-manager-PTGBHCLS.js.map
5
+ //# sourceMappingURL=server-manager-PTGBHCLS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"server-manager-PTGBHCLS.js"}
@@ -0,0 +1,12 @@
1
+ export { SessionManager } from './chunk-SUSJPZU2.js';
2
+ import './chunk-I5PZ4JTS.js';
3
+ import './chunk-4IJD72YB.js';
4
+ import './chunk-CGEV3ARR.js';
5
+ import './chunk-CYQNBB25.js';
6
+ import './chunk-NBR3GHMT.js';
7
+ import './chunk-CS5X3BWX.js';
8
+ import './chunk-HCIHOHLX.js';
9
+ import './chunk-ZGOHARPV.js';
10
+ import './chunk-JAXXTYID.js';
11
+ //# sourceMappingURL=session-manager-ECEEACGY.js.map
12
+ //# sourceMappingURL=session-manager-ECEEACGY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"session-manager-ECEEACGY.js"}
@@ -0,0 +1,11 @@
1
+ export { TeamManager } from './chunk-HMJRPNPZ.js';
2
+ import './chunk-YL5XFHR3.js';
3
+ import './chunk-CGEV3ARR.js';
4
+ import './chunk-CYQNBB25.js';
5
+ import './chunk-NBR3GHMT.js';
6
+ import './chunk-CS5X3BWX.js';
7
+ import './chunk-HCIHOHLX.js';
8
+ import './chunk-ZGOHARPV.js';
9
+ import './chunk-JAXXTYID.js';
10
+ //# sourceMappingURL=team-manager-HC4XGCFY.js.map
11
+ //# sourceMappingURL=team-manager-HC4XGCFY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"team-manager-HC4XGCFY.js"}
@@ -0,0 +1,6 @@
1
+ export { TmuxManager } from './chunk-CARHU3DO.js';
2
+ import './chunk-YL5XFHR3.js';
3
+ import './chunk-ZGOHARPV.js';
4
+ import './chunk-JAXXTYID.js';
5
+ //# sourceMappingURL=tmux-manager-GPYZ3WQH.js.map
6
+ //# sourceMappingURL=tmux-manager-GPYZ3WQH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"tmux-manager-GPYZ3WQH.js"}
@@ -0,0 +1,6 @@
1
+ export { ToolRegistry, createBashTool, createDefaultRegistry, createEditTool, createGitTool, createGlobTool, createGrepTool, createReadTool, createWebFetchTool, createWebSearchTool, createWriteTool, setBashBlockedCommands, setBashWorkingDirectory, setEditProjectRoot, setGitWorkingDirectory, setGlobProjectRoot, setGrepProjectRoot, setReadProjectRoot, setWebSearchProvider, setWriteProjectRoot } from './chunk-Y5XVD2CD.js';
2
+ import './chunk-CS5X3BWX.js';
3
+ import './chunk-ZGOHARPV.js';
4
+ import './chunk-JAXXTYID.js';
5
+ //# sourceMappingURL=tools-TSMXMHIF.js.map
6
+ //# sourceMappingURL=tools-TSMXMHIF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"tools-TSMXMHIF.js"}