@tonycasey/lisa 1.2.0 → 2.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.
- package/README.md +22 -15
- package/dist/hooks/session-start.js +43114 -0
- package/dist/hooks/session-stop.js +42699 -0
- package/dist/hooks/user-prompt-submit.js +42757 -0
- package/dist/lib/application/handlers/PromptSubmitHandler.d.ts +27 -0
- package/dist/lib/application/handlers/PromptSubmitHandler.d.ts.map +1 -0
- package/dist/lib/application/handlers/PromptSubmitHandler.js +53 -0
- package/dist/lib/application/handlers/PromptSubmitHandler.js.map +1 -0
- package/dist/lib/application/handlers/SessionStartHandler.d.ts +50 -0
- package/dist/lib/application/handlers/SessionStartHandler.d.ts.map +1 -0
- package/dist/lib/application/handlers/SessionStartHandler.js +448 -0
- package/dist/lib/application/handlers/SessionStartHandler.js.map +1 -0
- package/dist/lib/application/handlers/SessionStopHandler.d.ts +15 -0
- package/dist/lib/application/handlers/SessionStopHandler.d.ts.map +1 -0
- package/dist/lib/application/handlers/SessionStopHandler.js +35 -0
- package/dist/lib/application/handlers/SessionStopHandler.js.map +1 -0
- package/dist/lib/application/handlers/index.d.ts +8 -0
- package/dist/lib/application/handlers/index.d.ts.map +1 -0
- package/dist/lib/application/handlers/index.js +14 -0
- package/dist/lib/application/handlers/index.js.map +1 -0
- package/dist/lib/application/index.d.ts +13 -0
- package/dist/lib/application/index.d.ts.map +1 -0
- package/dist/lib/application/index.js +31 -0
- package/dist/lib/application/index.js.map +1 -0
- package/dist/lib/application/interfaces/ISessionStartResult.d.ts +22 -0
- package/dist/lib/application/interfaces/ISessionStartResult.d.ts.map +1 -0
- package/dist/lib/application/interfaces/ISessionStartResult.js +3 -0
- package/dist/lib/application/interfaces/ISessionStartResult.js.map +1 -0
- package/dist/lib/application/interfaces/index.d.ts +5 -0
- package/dist/lib/application/interfaces/index.d.ts.map +1 -0
- package/dist/lib/application/interfaces/index.js +6 -0
- package/dist/lib/application/interfaces/index.js.map +1 -0
- package/dist/lib/cli.d.ts +34 -0
- package/dist/lib/cli.d.ts.map +1 -0
- package/dist/lib/cli.js +664 -0
- package/dist/lib/cli.js.map +1 -0
- package/dist/lib/domain/errors/LisaError.d.ts +41 -0
- package/dist/lib/domain/errors/LisaError.d.ts.map +1 -0
- package/dist/lib/domain/errors/LisaError.js +69 -0
- package/dist/lib/domain/errors/LisaError.js.map +1 -0
- package/dist/lib/domain/errors/index.d.ts +5 -0
- package/dist/lib/domain/errors/index.d.ts.map +1 -0
- package/dist/lib/domain/errors/index.js +14 -0
- package/dist/lib/domain/errors/index.js.map +1 -0
- package/dist/lib/domain/index.d.ts +14 -0
- package/dist/lib/domain/index.d.ts.map +1 -0
- package/dist/lib/domain/index.js +33 -0
- package/dist/lib/domain/index.js.map +1 -0
- package/dist/lib/domain/interfaces/IEventEmitter.d.ts +32 -0
- package/dist/lib/domain/interfaces/IEventEmitter.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/IEventEmitter.js +3 -0
- package/dist/lib/domain/interfaces/IEventEmitter.js.map +1 -0
- package/dist/lib/domain/interfaces/ILisaContext.d.ts +25 -0
- package/dist/lib/domain/interfaces/ILisaContext.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/ILisaContext.js +3 -0
- package/dist/lib/domain/interfaces/ILisaContext.js.map +1 -0
- package/dist/lib/domain/interfaces/ILisaServices.d.ts +34 -0
- package/dist/lib/domain/interfaces/ILisaServices.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/ILisaServices.js +3 -0
- package/dist/lib/domain/interfaces/ILisaServices.js.map +1 -0
- package/dist/lib/domain/interfaces/ILogger.d.ts +94 -0
- package/dist/lib/domain/interfaces/ILogger.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/ILogger.js +3 -0
- package/dist/lib/domain/interfaces/ILogger.js.map +1 -0
- package/dist/lib/domain/interfaces/IMcpClient.d.ts +31 -0
- package/dist/lib/domain/interfaces/IMcpClient.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/IMcpClient.js +3 -0
- package/dist/lib/domain/interfaces/IMcpClient.js.map +1 -0
- package/dist/lib/domain/interfaces/IMemoryService.d.ts +56 -0
- package/dist/lib/domain/interfaces/IMemoryService.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/IMemoryService.js +3 -0
- package/dist/lib/domain/interfaces/IMemoryService.js.map +1 -0
- package/dist/lib/domain/interfaces/IRecursionService.d.ts +52 -0
- package/dist/lib/domain/interfaces/IRecursionService.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/IRecursionService.js +3 -0
- package/dist/lib/domain/interfaces/IRecursionService.js.map +1 -0
- package/dist/lib/domain/interfaces/ISessionCaptureService.d.ts +16 -0
- package/dist/lib/domain/interfaces/ISessionCaptureService.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/ISessionCaptureService.js +3 -0
- package/dist/lib/domain/interfaces/ISessionCaptureService.js.map +1 -0
- package/dist/lib/domain/interfaces/ITaskService.d.ts +52 -0
- package/dist/lib/domain/interfaces/ITaskService.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/ITaskService.js +3 -0
- package/dist/lib/domain/interfaces/ITaskService.js.map +1 -0
- package/dist/lib/domain/interfaces/dal/IConnectionManager.d.ts +110 -0
- package/dist/lib/domain/interfaces/dal/IConnectionManager.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/dal/IConnectionManager.js +8 -0
- package/dist/lib/domain/interfaces/dal/IConnectionManager.js.map +1 -0
- package/dist/lib/domain/interfaces/dal/IMemoryRepository.d.ts +93 -0
- package/dist/lib/domain/interfaces/dal/IMemoryRepository.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/dal/IMemoryRepository.js +9 -0
- package/dist/lib/domain/interfaces/dal/IMemoryRepository.js.map +1 -0
- package/dist/lib/domain/interfaces/dal/IRepositoryRouter.d.ts +88 -0
- package/dist/lib/domain/interfaces/dal/IRepositoryRouter.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/dal/IRepositoryRouter.js +23 -0
- package/dist/lib/domain/interfaces/dal/IRepositoryRouter.js.map +1 -0
- package/dist/lib/domain/interfaces/dal/ITaskRepository.d.ts +87 -0
- package/dist/lib/domain/interfaces/dal/ITaskRepository.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/dal/ITaskRepository.js +9 -0
- package/dist/lib/domain/interfaces/dal/ITaskRepository.js.map +1 -0
- package/dist/lib/domain/interfaces/dal/index.d.ts +14 -0
- package/dist/lib/domain/interfaces/dal/index.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/dal/index.js +15 -0
- package/dist/lib/domain/interfaces/dal/index.js.map +1 -0
- package/dist/lib/domain/interfaces/dal/types.d.ts +81 -0
- package/dist/lib/domain/interfaces/dal/types.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/dal/types.js +28 -0
- package/dist/lib/domain/interfaces/dal/types.js.map +1 -0
- package/dist/lib/domain/interfaces/events/IMemoryEvent.d.ts +27 -0
- package/dist/lib/domain/interfaces/events/IMemoryEvent.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/events/IMemoryEvent.js +26 -0
- package/dist/lib/domain/interfaces/events/IMemoryEvent.js.map +1 -0
- package/dist/lib/domain/interfaces/events/IPromptSubmitEvent.d.ts +20 -0
- package/dist/lib/domain/interfaces/events/IPromptSubmitEvent.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/events/IPromptSubmitEvent.js +16 -0
- package/dist/lib/domain/interfaces/events/IPromptSubmitEvent.js.map +1 -0
- package/dist/lib/domain/interfaces/events/ISessionStartEvent.d.ts +19 -0
- package/dist/lib/domain/interfaces/events/ISessionStartEvent.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/events/ISessionStartEvent.js +15 -0
- package/dist/lib/domain/interfaces/events/ISessionStartEvent.js.map +1 -0
- package/dist/lib/domain/interfaces/events/ISessionStopEvent.d.ts +22 -0
- package/dist/lib/domain/interfaces/events/ISessionStopEvent.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/events/ISessionStopEvent.js +15 -0
- package/dist/lib/domain/interfaces/events/ISessionStopEvent.js.map +1 -0
- package/dist/lib/domain/interfaces/events/LisaEvent.d.ts +13 -0
- package/dist/lib/domain/interfaces/events/LisaEvent.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/events/LisaEvent.js +3 -0
- package/dist/lib/domain/interfaces/events/LisaEvent.js.map +1 -0
- package/dist/lib/domain/interfaces/events/index.d.ts +9 -0
- package/dist/lib/domain/interfaces/events/index.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/events/index.js +16 -0
- package/dist/lib/domain/interfaces/events/index.js.map +1 -0
- package/dist/lib/domain/interfaces/index.d.ts +16 -0
- package/dist/lib/domain/interfaces/index.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/index.js +25 -0
- package/dist/lib/domain/interfaces/index.js.map +1 -0
- package/dist/lib/domain/interfaces/types/ICapturedWork.d.ts +14 -0
- package/dist/lib/domain/interfaces/types/ICapturedWork.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/types/ICapturedWork.js +14 -0
- package/dist/lib/domain/interfaces/types/ICapturedWork.js.map +1 -0
- package/dist/lib/domain/interfaces/types/IMemoryResult.d.ts +39 -0
- package/dist/lib/domain/interfaces/types/IMemoryResult.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/types/IMemoryResult.js +29 -0
- package/dist/lib/domain/interfaces/types/IMemoryResult.js.map +1 -0
- package/dist/lib/domain/interfaces/types/ITask.d.ts +46 -0
- package/dist/lib/domain/interfaces/types/ITask.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/types/ITask.js +17 -0
- package/dist/lib/domain/interfaces/types/ITask.js.map +1 -0
- package/dist/lib/domain/interfaces/types/index.d.ts +7 -0
- package/dist/lib/domain/interfaces/types/index.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/types/index.js +14 -0
- package/dist/lib/domain/interfaces/types/index.js.map +1 -0
- package/dist/lib/domain/types/ISOTimestamp.d.ts +19 -0
- package/dist/lib/domain/types/ISOTimestamp.d.ts.map +1 -0
- package/dist/lib/domain/types/ISOTimestamp.js +18 -0
- package/dist/lib/domain/types/ISOTimestamp.js.map +1 -0
- package/dist/lib/domain/types/index.d.ts +7 -0
- package/dist/lib/domain/types/index.d.ts.map +1 -0
- package/dist/lib/domain/types/index.js +12 -0
- package/dist/lib/domain/types/index.js.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/index.d.ts +8 -0
- package/dist/lib/infrastructure/adapters/claude/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/index.js +18 -0
- package/dist/lib/infrastructure/adapters/claude/index.js.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/session-start.d.ts +9 -0
- package/dist/lib/infrastructure/adapters/claude/session-start.d.ts.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/session-start.js +54 -0
- package/dist/lib/infrastructure/adapters/claude/session-start.js.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/session-stop.d.ts +13 -0
- package/dist/lib/infrastructure/adapters/claude/session-stop.d.ts.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/session-stop.js +43 -0
- package/dist/lib/infrastructure/adapters/claude/session-stop.js.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/stdin.d.ts +13 -0
- package/dist/lib/infrastructure/adapters/claude/stdin.d.ts.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/stdin.js +36 -0
- package/dist/lib/infrastructure/adapters/claude/stdin.js.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.d.ts +13 -0
- package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.d.ts.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.js +58 -0
- package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.js.map +1 -0
- package/dist/lib/infrastructure/adapters/opencode/index.d.ts +7 -0
- package/dist/lib/infrastructure/adapters/opencode/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/adapters/opencode/index.js +18 -0
- package/dist/lib/infrastructure/adapters/opencode/index.js.map +1 -0
- package/dist/lib/infrastructure/adapters/opencode/opencode-events.d.ts +73 -0
- package/dist/lib/infrastructure/adapters/opencode/opencode-events.d.ts.map +1 -0
- package/dist/lib/infrastructure/adapters/opencode/opencode-events.js +131 -0
- package/dist/lib/infrastructure/adapters/opencode/opencode-events.js.map +1 -0
- package/dist/lib/infrastructure/adapters/opencode/plugin.d.ts +60 -0
- package/dist/lib/infrastructure/adapters/opencode/plugin.d.ts.map +1 -0
- package/dist/lib/infrastructure/adapters/opencode/plugin.js +147 -0
- package/dist/lib/infrastructure/adapters/opencode/plugin.js.map +1 -0
- package/dist/lib/infrastructure/context/ContextDetector.d.ts +92 -0
- package/dist/lib/infrastructure/context/ContextDetector.d.ts.map +1 -0
- package/dist/lib/infrastructure/context/ContextDetector.js +415 -0
- package/dist/lib/infrastructure/context/ContextDetector.js.map +1 -0
- package/dist/lib/infrastructure/context/index.d.ts +5 -0
- package/dist/lib/infrastructure/context/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/context/index.js +9 -0
- package/dist/lib/infrastructure/context/index.js.map +1 -0
- package/dist/lib/infrastructure/dal/RepositoryFactory.d.ts +71 -0
- package/dist/lib/infrastructure/dal/RepositoryFactory.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/RepositoryFactory.js +134 -0
- package/dist/lib/infrastructure/dal/RepositoryFactory.js.map +1 -0
- package/dist/lib/infrastructure/dal/connections/McpConnectionManager.d.ts +56 -0
- package/dist/lib/infrastructure/dal/connections/McpConnectionManager.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/connections/McpConnectionManager.js +98 -0
- package/dist/lib/infrastructure/dal/connections/McpConnectionManager.js.map +1 -0
- package/dist/lib/infrastructure/dal/connections/Neo4jConnectionManager.d.ts +60 -0
- package/dist/lib/infrastructure/dal/connections/Neo4jConnectionManager.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/connections/Neo4jConnectionManager.js +181 -0
- package/dist/lib/infrastructure/dal/connections/Neo4jConnectionManager.js.map +1 -0
- package/dist/lib/infrastructure/dal/connections/ZepConnectionManager.d.ts +53 -0
- package/dist/lib/infrastructure/dal/connections/ZepConnectionManager.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/connections/ZepConnectionManager.js +168 -0
- package/dist/lib/infrastructure/dal/connections/ZepConnectionManager.js.map +1 -0
- package/dist/lib/infrastructure/dal/connections/index.d.ts +9 -0
- package/dist/lib/infrastructure/dal/connections/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/connections/index.js +18 -0
- package/dist/lib/infrastructure/dal/connections/index.js.map +1 -0
- package/dist/lib/infrastructure/dal/index.d.ts +27 -0
- package/dist/lib/infrastructure/dal/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/index.js +50 -0
- package/dist/lib/infrastructure/dal/index.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/index.d.ts +7 -0
- package/dist/lib/infrastructure/dal/repositories/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/index.js +19 -0
- package/dist/lib/infrastructure/dal/repositories/index.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/McpMemoryRepository.d.ts +54 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/McpMemoryRepository.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/McpMemoryRepository.js +131 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/McpMemoryRepository.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.d.ts +60 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.js +182 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/index.d.ts +6 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/index.js +11 -0
- package/dist/lib/infrastructure/dal/repositories/mcp/index.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jMemoryRepository.d.ts +47 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jMemoryRepository.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jMemoryRepository.js +144 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jMemoryRepository.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.d.ts +46 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.js +160 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/index.d.ts +6 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/index.js +11 -0
- package/dist/lib/infrastructure/dal/repositories/neo4j/index.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/zep/ZepMemoryRepository.d.ts +55 -0
- package/dist/lib/infrastructure/dal/repositories/zep/ZepMemoryRepository.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/zep/ZepMemoryRepository.js +165 -0
- package/dist/lib/infrastructure/dal/repositories/zep/ZepMemoryRepository.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.d.ts +58 -0
- package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.js +206 -0
- package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.js.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/zep/index.d.ts +6 -0
- package/dist/lib/infrastructure/dal/repositories/zep/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/repositories/zep/index.js +11 -0
- package/dist/lib/infrastructure/dal/repositories/zep/index.js.map +1 -0
- package/dist/lib/infrastructure/dal/routing/RepositoryRouter.d.ts +73 -0
- package/dist/lib/infrastructure/dal/routing/RepositoryRouter.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/routing/RepositoryRouter.js +170 -0
- package/dist/lib/infrastructure/dal/routing/RepositoryRouter.js.map +1 -0
- package/dist/lib/infrastructure/dal/routing/index.d.ts +5 -0
- package/dist/lib/infrastructure/dal/routing/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/dal/routing/index.js +10 -0
- package/dist/lib/infrastructure/dal/routing/index.js.map +1 -0
- package/dist/lib/infrastructure/di/ServiceFactory.d.ts +44 -0
- package/dist/lib/infrastructure/di/ServiceFactory.d.ts.map +1 -0
- package/dist/lib/infrastructure/di/ServiceFactory.js +141 -0
- package/dist/lib/infrastructure/di/ServiceFactory.js.map +1 -0
- package/dist/lib/infrastructure/di/index.d.ts +5 -0
- package/dist/lib/infrastructure/di/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/di/index.js +10 -0
- package/dist/lib/infrastructure/di/index.js.map +1 -0
- package/dist/lib/infrastructure/index.d.ts +17 -0
- package/dist/lib/infrastructure/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/index.js +41 -0
- package/dist/lib/infrastructure/index.js.map +1 -0
- package/dist/lib/infrastructure/logging/Logger.d.ts +50 -0
- package/dist/lib/infrastructure/logging/Logger.d.ts.map +1 -0
- package/dist/lib/infrastructure/logging/Logger.js +167 -0
- package/dist/lib/infrastructure/logging/Logger.js.map +1 -0
- package/dist/lib/infrastructure/logging/context.d.ts +51 -0
- package/dist/lib/infrastructure/logging/context.d.ts.map +1 -0
- package/dist/lib/infrastructure/logging/context.js +77 -0
- package/dist/lib/infrastructure/logging/context.js.map +1 -0
- package/dist/lib/infrastructure/logging/factory.d.ts +36 -0
- package/dist/lib/infrastructure/logging/factory.d.ts.map +1 -0
- package/dist/lib/infrastructure/logging/factory.js +122 -0
- package/dist/lib/infrastructure/logging/factory.js.map +1 -0
- package/dist/lib/infrastructure/logging/index.d.ts +26 -0
- package/dist/lib/infrastructure/logging/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/logging/index.js +45 -0
- package/dist/lib/infrastructure/logging/index.js.map +1 -0
- package/dist/lib/infrastructure/mcp/McpClient.d.ts +36 -0
- package/dist/lib/infrastructure/mcp/McpClient.d.ts.map +1 -0
- package/dist/lib/infrastructure/mcp/McpClient.js +155 -0
- package/dist/lib/infrastructure/mcp/McpClient.js.map +1 -0
- package/dist/lib/infrastructure/mcp/index.d.ts +5 -0
- package/dist/lib/infrastructure/mcp/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/mcp/index.js +9 -0
- package/dist/lib/infrastructure/mcp/index.js.map +1 -0
- package/dist/lib/infrastructure/services/EventEmitter.d.ts +24 -0
- package/dist/lib/infrastructure/services/EventEmitter.d.ts.map +1 -0
- package/dist/lib/infrastructure/services/EventEmitter.js +41 -0
- package/dist/lib/infrastructure/services/EventEmitter.js.map +1 -0
- package/dist/lib/infrastructure/services/MemoryService.d.ts +48 -0
- package/dist/lib/infrastructure/services/MemoryService.d.ts.map +1 -0
- package/dist/lib/infrastructure/services/MemoryService.js +298 -0
- package/dist/lib/infrastructure/services/MemoryService.js.map +1 -0
- package/dist/lib/infrastructure/services/RecursionService.d.ts +50 -0
- package/dist/lib/infrastructure/services/RecursionService.d.ts.map +1 -0
- package/dist/lib/infrastructure/services/RecursionService.js +233 -0
- package/dist/lib/infrastructure/services/RecursionService.js.map +1 -0
- package/dist/lib/infrastructure/services/SessionCaptureService.d.ts +31 -0
- package/dist/lib/infrastructure/services/SessionCaptureService.d.ts.map +1 -0
- package/dist/lib/infrastructure/services/SessionCaptureService.js +38 -0
- package/dist/lib/infrastructure/services/SessionCaptureService.js.map +1 -0
- package/dist/lib/infrastructure/services/TaskService.d.ts +38 -0
- package/dist/lib/infrastructure/services/TaskService.d.ts.map +1 -0
- package/dist/lib/infrastructure/services/TaskService.js +227 -0
- package/dist/lib/infrastructure/services/TaskService.js.map +1 -0
- package/dist/lib/infrastructure/services/index.d.ts +9 -0
- package/dist/lib/infrastructure/services/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/services/index.js +17 -0
- package/dist/lib/infrastructure/services/index.js.map +1 -0
- package/dist/lib/interfaces/IDockerClient.d.ts +6 -0
- package/dist/lib/interfaces/IDockerClient.d.ts.map +1 -0
- package/dist/lib/interfaces/IDockerClient.js +1 -0
- package/dist/lib/interfaces/IDockerClient.js.map +1 -0
- package/dist/lib/interfaces/IMcpClient.d.ts +7 -0
- package/dist/lib/interfaces/IMcpClient.d.ts.map +1 -0
- package/dist/lib/interfaces/IMcpClient.js +1 -0
- package/dist/lib/interfaces/IMcpClient.js.map +1 -0
- package/dist/lib/interfaces/IServices.d.ts +9 -0
- package/dist/lib/interfaces/IServices.d.ts.map +1 -0
- package/dist/lib/interfaces/IServices.js +1 -0
- package/dist/lib/interfaces/IServices.js.map +1 -0
- package/dist/lib/interfaces/ITemplateCopier.d.ts +6 -0
- package/dist/lib/interfaces/ITemplateCopier.d.ts.map +1 -0
- package/dist/lib/interfaces/ITemplateCopier.js +1 -0
- package/dist/lib/interfaces/ITemplateCopier.js.map +1 -0
- package/dist/lib/mcp.d.ts +5 -0
- package/dist/lib/mcp.d.ts.map +1 -0
- package/dist/lib/mcp.js +12 -1
- package/dist/lib/mcp.js.map +1 -0
- package/dist/lib/scanner/analyzer.d.ts +51 -0
- package/dist/lib/scanner/analyzer.d.ts.map +1 -0
- package/dist/lib/scanner/analyzer.js +6 -1
- package/dist/lib/scanner/analyzer.js.map +1 -0
- package/dist/lib/scanner/discovery.d.ts +25 -0
- package/dist/lib/scanner/discovery.d.ts.map +1 -0
- package/dist/lib/scanner/discovery.js +4 -3
- package/dist/lib/scanner/discovery.js.map +1 -0
- package/dist/lib/scanner/facts.d.ts +33 -0
- package/dist/lib/scanner/facts.d.ts.map +1 -0
- package/dist/lib/scanner/facts.js +23 -5
- package/dist/lib/scanner/facts.js.map +1 -0
- package/dist/lib/scanner/index.d.ts +31 -0
- package/dist/lib/scanner/index.d.ts.map +1 -0
- package/dist/lib/scanner/index.js +1 -6
- package/dist/lib/scanner/index.js.map +1 -0
- package/dist/lib/scanner/reviewer.d.ts +62 -0
- package/dist/lib/scanner/reviewer.d.ts.map +1 -0
- package/dist/lib/scanner/reviewer.js +26 -8
- package/dist/lib/scanner/reviewer.js.map +1 -0
- package/dist/lib/services.d.ts +7 -0
- package/dist/lib/services.d.ts.map +1 -0
- package/dist/lib/services.js +1 -0
- package/dist/lib/services.js.map +1 -0
- package/dist/opencode/lisa.js +43344 -0
- package/dist/package.json +15 -3
- package/dist/project/.lisa/.env.template +18 -0
- package/dist/{templates → project/.lisa}/rules/shared/git-rules.md +6 -6
- package/dist/project/.lisa/skills/common/group-id.d.ts.map +1 -0
- package/dist/{templates/agents → project/.lisa}/skills/common/group-id.js +1 -0
- package/dist/project/.lisa/skills/common/group-id.js.map +1 -0
- package/dist/project/.lisa/skills/common/type-mappings.d.ts.map +1 -0
- package/dist/project/.lisa/skills/common/type-mappings.js +93 -0
- package/dist/project/.lisa/skills/common/type-mappings.js.map +1 -0
- package/dist/{templates/agents → project/.lisa}/skills/git/SKILL.md +7 -7
- package/dist/project/.lisa/skills/git/scripts/bump-version.d.ts.map +1 -0
- package/dist/project/.lisa/skills/git/scripts/bump-version.js +58 -0
- package/dist/project/.lisa/skills/git/scripts/bump-version.js.map +1 -0
- package/dist/{templates/agents → project/.lisa}/skills/init-review/SKILL.md +2 -2
- package/dist/project/.lisa/skills/init-review/scripts/ai-enrich.d.ts.map +1 -0
- package/dist/project/.lisa/skills/init-review/scripts/ai-enrich.js +177 -0
- package/dist/project/.lisa/skills/init-review/scripts/ai-enrich.js.map +1 -0
- package/dist/project/.lisa/skills/init-review/scripts/init-review.d.ts.map +1 -0
- package/dist/project/.lisa/skills/init-review/scripts/init-review.js +143 -0
- package/dist/project/.lisa/skills/init-review/scripts/init-review.js.map +1 -0
- package/dist/project/.lisa/skills/jira/scripts/jira.d.ts.map +1 -0
- package/dist/project/.lisa/skills/jira/scripts/jira.js +159 -0
- package/dist/project/.lisa/skills/jira/scripts/jira.js.map +1 -0
- package/dist/{templates/agents → project/.lisa}/skills/lisa/SKILL.md +17 -15
- package/dist/project/.lisa/skills/lisa/scripts/compile-skills.d.ts.map +1 -0
- package/dist/project/.lisa/skills/lisa/scripts/compile-skills.js +75 -0
- package/dist/project/.lisa/skills/lisa/scripts/compile-skills.js.map +1 -0
- package/dist/project/.lisa/skills/lisa/scripts/storage.d.ts.map +1 -0
- package/dist/project/.lisa/skills/lisa/scripts/storage.js +114 -0
- package/dist/project/.lisa/skills/lisa/scripts/storage.js.map +1 -0
- package/dist/{templates/agents → project/.lisa}/skills/memory/SKILL.md +3 -3
- package/dist/project/.lisa/skills/memory/scripts/memory.d.ts.map +1 -0
- package/dist/project/.lisa/skills/memory/scripts/memory.js +95 -0
- package/dist/project/.lisa/skills/memory/scripts/memory.js.map +1 -0
- package/dist/{templates/agents → project/.lisa}/skills/prompt/SKILL.md +1 -1
- package/dist/project/.lisa/skills/prompt/scripts/prompt.d.ts.map +1 -0
- package/dist/project/.lisa/skills/prompt/scripts/prompt.js +80 -0
- package/dist/project/.lisa/skills/prompt/scripts/prompt.js.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/McpClient.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/McpClient.js +117 -0
- package/dist/project/.lisa/skills/shared/clients/McpClient.js.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/Neo4jClient.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/Neo4jClient.js +81 -0
- package/dist/project/.lisa/skills/shared/clients/Neo4jClient.js.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/ZepClient.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/ZepClient.js +238 -0
- package/dist/project/.lisa/skills/shared/clients/ZepClient.js.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/index.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/index.js +33 -0
- package/dist/project/.lisa/skills/shared/clients/index.js.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/IMcpClient.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/IMcpClient.js +3 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/IMcpClient.js.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/INeo4jClient.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/INeo4jClient.js +3 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/INeo4jClient.js.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/IZepClient.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/IZepClient.js +3 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/IZepClient.js.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/index.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/index.js +23 -0
- package/dist/project/.lisa/skills/shared/clients/interfaces/index.js.map +1 -0
- package/dist/project/.lisa/skills/shared/group-id.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/group-id.js +18 -0
- package/dist/project/.lisa/skills/shared/group-id.js.map +1 -0
- package/dist/project/.lisa/skills/shared/index.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/index.js +31 -0
- package/dist/project/.lisa/skills/shared/index.js.map +1 -0
- package/dist/project/.lisa/skills/shared/logger.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/logger.js +18 -0
- package/dist/project/.lisa/skills/shared/logger.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/InitReviewService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/InitReviewService.js +287 -0
- package/dist/project/.lisa/skills/shared/services/InitReviewService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/JiraService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/JiraService.js +257 -0
- package/dist/project/.lisa/skills/shared/services/JiraService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/MemoryCliService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/MemoryCliService.js +36 -0
- package/dist/project/.lisa/skills/shared/services/MemoryCliService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/MemoryService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/MemoryService.js +146 -0
- package/dist/project/.lisa/skills/shared/services/MemoryService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/PromptService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/PromptService.js +53 -0
- package/dist/project/.lisa/skills/shared/services/PromptService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/SkillCompilerService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/SkillCompilerService.js +115 -0
- package/dist/project/.lisa/skills/shared/services/SkillCompilerService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/StorageService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/StorageService.js +257 -0
- package/dist/project/.lisa/skills/shared/services/StorageService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/TaskCliService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/TaskCliService.js +40 -0
- package/dist/project/.lisa/skills/shared/services/TaskCliService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/TaskService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/TaskService.js +158 -0
- package/dist/project/.lisa/skills/shared/services/TaskService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/VersionService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/VersionService.js +88 -0
- package/dist/project/.lisa/skills/shared/services/VersionService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/index.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/index.js +47 -0
- package/dist/project/.lisa/skills/shared/services/index.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/IMemoryService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/IMemoryService.js +7 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/IMemoryService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/ITaskService.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/ITaskService.js +7 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/ITaskService.js.map +1 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/index.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/index.js +22 -0
- package/dist/project/.lisa/skills/shared/services/interfaces/index.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/FileCache.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/FileCache.js +119 -0
- package/dist/project/.lisa/skills/shared/utils/FileCache.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/Logger.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/Logger.js +197 -0
- package/dist/project/.lisa/skills/shared/utils/Logger.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/cache.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/cache.js +76 -0
- package/dist/project/.lisa/skills/shared/utils/cache.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/cli.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/cli.js +87 -0
- package/dist/project/.lisa/skills/shared/utils/cli.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/env.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/env.js +103 -0
- package/dist/project/.lisa/skills/shared/utils/env.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/group-id.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/group-id.js +91 -0
- package/dist/project/.lisa/skills/shared/utils/group-id.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/index.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/index.js +55 -0
- package/dist/project/.lisa/skills/shared/utils/index.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/ICache.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/ICache.js +3 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/ICache.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/ILogger.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/ILogger.js +3 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/ILogger.js.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/index.d.ts.map +1 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/index.js +22 -0
- package/dist/project/.lisa/skills/shared/utils/interfaces/index.js.map +1 -0
- package/dist/{templates/agents → project/.lisa}/skills/tasks/SKILL.md +2 -2
- package/dist/project/.lisa/skills/tasks/scripts/tasks.d.ts.map +1 -0
- package/dist/project/.lisa/skills/tasks/scripts/tasks.js +98 -0
- package/dist/project/.lisa/skills/tasks/scripts/tasks.js.map +1 -0
- package/package.json +31 -10
- package/scripts/postinstall.js +93 -60
- package/dist/cli.js +0 -414
- package/dist/templates/agents/.sample.env +0 -12
- package/dist/templates/agents/docs/EXTENDING-SKILLS.md +0 -291
- package/dist/templates/agents/docs/EXTENDING-rules.md +0 -57
- package/dist/templates/agents/docs/STORAGE_SETUP.md +0 -161
- package/dist/templates/agents/skills/git/scripts/bump-version.js +0 -112
- package/dist/templates/agents/skills/init-review/scripts/ai-enrich.js +0 -258
- package/dist/templates/agents/skills/init-review/scripts/init-review.js +0 -769
- package/dist/templates/agents/skills/jira/scripts/jira.js +0 -406
- package/dist/templates/agents/skills/lisa/scripts/compile-skills.js +0 -177
- package/dist/templates/agents/skills/lisa/scripts/storage.js +0 -374
- package/dist/templates/agents/skills/memory/scripts/memory.js +0 -533
- package/dist/templates/agents/skills/prompt/scripts/prompt.js +0 -184
- package/dist/templates/agents/skills/tasks/scripts/tasks.js +0 -489
- package/dist/templates/claude/config.js +0 -40
- package/dist/templates/claude/hooks/README.md +0 -158
- package/dist/templates/claude/hooks/common/complexity-rater.js +0 -290
- package/dist/templates/claude/hooks/common/context.js +0 -263
- package/dist/templates/claude/hooks/common/group-id.js +0 -188
- package/dist/templates/claude/hooks/common/mcp-client.js +0 -131
- package/dist/templates/claude/hooks/common/transcript-parser.js +0 -256
- package/dist/templates/claude/hooks/common/zep-client.js +0 -175
- package/dist/templates/claude/hooks/session-start.js +0 -511
- package/dist/templates/claude/hooks/session-stop-worker.js +0 -484
- package/dist/templates/claude/hooks/session-stop.js +0 -122
- package/dist/templates/claude/hooks/user-prompt-submit.js +0 -479
- package/dist/templates/claude/settings.json +0 -46
- package/dist/templates/docker/.env.lisa.example +0 -17
- /package/dist/{templates → project/.lisa}/docker/docker-compose.graphiti.yml +0 -0
- /package/dist/{templates → project/.lisa}/rules/shared/clean-architecture.md +0 -0
- /package/dist/{templates → project/.lisa}/rules/shared/code-quality-rules.md +0 -0
- /package/dist/{templates → project/.lisa}/rules/shared/git-rules.local.md +0 -0
- /package/dist/{templates → project/.lisa}/rules/shared/testing-principles.md +0 -0
- /package/dist/{templates → project/.lisa}/rules/typescript/coding-standards.md +0 -0
- /package/dist/{templates → project/.lisa}/rules/typescript/testing.md +0 -0
- /package/dist/{templates → project/.lisa}/rules/typescript/typescript-config-guide.md +0 -0
- /package/dist/{templates/agents → project/.lisa}/skills/git/scripts/poll-ci.sh +0 -0
- /package/dist/{templates/agents → project/.lisa}/skills/jira/SKILL.md +0 -0
- /package/dist/{templates/agents → project/.lisa}/skills/lisa/cache/.gitkeep +0 -0
package/dist/lib/cli.js
ADDED
|
@@ -0,0 +1,664 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.runScan = exports.TEMPLATE_ROOT = exports.DEFAULT_GROUP = exports.DEFAULT_ENDPOINT = exports.createDefaultServices = void 0;
|
|
8
|
+
exports.initCommand = initCommand;
|
|
9
|
+
exports.doctorCommand = doctorCommand;
|
|
10
|
+
exports.upCommand = upCommand;
|
|
11
|
+
exports.downCommand = downCommand;
|
|
12
|
+
const commander_1 = require("commander");
|
|
13
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
16
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
17
|
+
const services_1 = require("./services");
|
|
18
|
+
Object.defineProperty(exports, "createDefaultServices", { enumerable: true, get: function () { return services_1.createDefaultServices; } });
|
|
19
|
+
const scanner_1 = require("./scanner");
|
|
20
|
+
Object.defineProperty(exports, "runScan", { enumerable: true, get: function () { return scanner_1.runScan; } });
|
|
21
|
+
const logging_1 = require("./infrastructure/logging");
|
|
22
|
+
// Templates are copied into dist/project by postbuild; resolve relative to compiled file.
|
|
23
|
+
const TEMPLATE_ROOT = path_1.default.join(__dirname, '..', 'project');
|
|
24
|
+
exports.TEMPLATE_ROOT = TEMPLATE_ROOT;
|
|
25
|
+
// Bundled hooks and plugins are in dist/hooks and dist/opencode
|
|
26
|
+
const BUNDLED_HOOKS_ROOT = path_1.default.join(__dirname, '..', 'hooks');
|
|
27
|
+
const BUNDLED_OPENCODE_ROOT = path_1.default.join(__dirname, '..', 'opencode');
|
|
28
|
+
// Read version from package.json (works in both dev and dist)
|
|
29
|
+
const PACKAGE_JSON_PATH = path_1.default.join(__dirname, '..', '..', 'package.json');
|
|
30
|
+
const VERSION = fs_extra_1.default.existsSync(PACKAGE_JSON_PATH)
|
|
31
|
+
? fs_extra_1.default.readJsonSync(PACKAGE_JSON_PATH).version
|
|
32
|
+
: '0.0.0';
|
|
33
|
+
const DEFAULT_ENDPOINT = 'http://localhost:8010/mcp/';
|
|
34
|
+
exports.DEFAULT_ENDPOINT = DEFAULT_ENDPOINT;
|
|
35
|
+
const ZEP_CLOUD_ENDPOINT = 'https://api.getzep.com/mcp/';
|
|
36
|
+
/**
|
|
37
|
+
* Get project name from package.json or directory name.
|
|
38
|
+
* Used as the default group ID for memory storage.
|
|
39
|
+
*/
|
|
40
|
+
function getProjectName() {
|
|
41
|
+
try {
|
|
42
|
+
const pkgPath = path_1.default.join(process.cwd(), 'package.json');
|
|
43
|
+
if (fs_extra_1.default.existsSync(pkgPath)) {
|
|
44
|
+
const pkg = fs_extra_1.default.readJsonSync(pkgPath);
|
|
45
|
+
if (pkg.name) {
|
|
46
|
+
// Remove scope prefix if present (e.g., @tonycasey/lisa -> lisa)
|
|
47
|
+
return pkg.name.replace(/^@[^/]+\//, '');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Ignore errors reading package.json
|
|
53
|
+
}
|
|
54
|
+
// Fall back to directory name
|
|
55
|
+
return path_1.default.basename(process.cwd());
|
|
56
|
+
}
|
|
57
|
+
const DEFAULT_GROUP = getProjectName();
|
|
58
|
+
exports.DEFAULT_GROUP = DEFAULT_GROUP;
|
|
59
|
+
// Create CLI logger (console disabled by default to avoid interfering with CLI output)
|
|
60
|
+
const cliLogger = (0, logging_1.createLogger)({
|
|
61
|
+
enableConsole: process.env.LOG_CONSOLE === 'true',
|
|
62
|
+
enableFile: process.env.LOG_FILE !== 'false',
|
|
63
|
+
});
|
|
64
|
+
/**
|
|
65
|
+
* Create a symlink with Windows fallback.
|
|
66
|
+
* On Windows, tries junction first, then falls back to directory copy.
|
|
67
|
+
* Records copy fallbacks for later sync.
|
|
68
|
+
*/
|
|
69
|
+
async function createSymlink(target, link, cwd) {
|
|
70
|
+
const isWindows = process.platform === 'win32';
|
|
71
|
+
const projectRoot = cwd || process.cwd();
|
|
72
|
+
// Skip if link already exists (use lstat to detect symlinks even if target doesn't exist)
|
|
73
|
+
try {
|
|
74
|
+
await fs_extra_1.default.lstat(link);
|
|
75
|
+
return; // Link exists (symlink, junction, or regular file/dir)
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Link doesn't exist, proceed with creation
|
|
79
|
+
}
|
|
80
|
+
// Calculate relative path from link to target (for Unix symlinks)
|
|
81
|
+
const linkDir = path_1.default.dirname(link);
|
|
82
|
+
const relativeTarget = path_1.default.relative(linkDir, target);
|
|
83
|
+
try {
|
|
84
|
+
if (isWindows) {
|
|
85
|
+
// Windows junctions require absolute paths
|
|
86
|
+
const absoluteTarget = path_1.default.resolve(target);
|
|
87
|
+
// Try junction first (doesn't require admin rights)
|
|
88
|
+
await fs_extra_1.default.symlink(absoluteTarget, link, 'junction');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Unix: standard symlink with relative path
|
|
92
|
+
await fs_extra_1.default.symlink(relativeTarget, link, 'dir');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
const error = err;
|
|
97
|
+
if (isWindows && (error.code === 'EPERM' || error.code === 'ENOENT' || error.code === 'EINVAL')) {
|
|
98
|
+
// Junction failed, fall back to copy
|
|
99
|
+
console.warn(chalk_1.default.yellow(` Symlink failed, copying directory instead: ${path_1.default.basename(link)}`));
|
|
100
|
+
await fs_extra_1.default.copy(target, link);
|
|
101
|
+
// Record that we used copy (for future sync)
|
|
102
|
+
await recordCopyFallback(projectRoot, link, target);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
throw err;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Track directories that were copied instead of linked.
|
|
111
|
+
* Used by `lisa sync` to keep copies up to date.
|
|
112
|
+
*/
|
|
113
|
+
async function recordCopyFallback(projectRoot, link, target) {
|
|
114
|
+
const fallbackFile = path_1.default.join(projectRoot, '.lisa', '.copy-fallbacks.json');
|
|
115
|
+
let existing = { copies: [] };
|
|
116
|
+
try {
|
|
117
|
+
existing = await fs_extra_1.default.readJson(fallbackFile);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// File doesn't exist yet, use default
|
|
121
|
+
}
|
|
122
|
+
// Store relative paths
|
|
123
|
+
const relLink = path_1.default.relative(projectRoot, link);
|
|
124
|
+
const relTarget = path_1.default.relative(projectRoot, target);
|
|
125
|
+
// Check if already recorded
|
|
126
|
+
if (!existing.copies.some(c => c.link === relLink)) {
|
|
127
|
+
existing.copies.push({ link: relLink, target: relTarget, createdAt: new Date().toISOString() });
|
|
128
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(fallbackFile));
|
|
129
|
+
await fs_extra_1.default.writeJson(fallbackFile, existing, { spaces: 2 });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Interactive prompt functions
|
|
133
|
+
async function promptDeploymentMode() {
|
|
134
|
+
return await (0, prompts_1.select)({
|
|
135
|
+
message: 'How would you like to configure storage?',
|
|
136
|
+
choices: [
|
|
137
|
+
{
|
|
138
|
+
name: 'Local Docker (runs Neo4j + MCP server locally)',
|
|
139
|
+
value: 'local',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'Zep Cloud (managed storage service)',
|
|
143
|
+
value: 'zep-cloud',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'Set up later (scaffold project, configure storage later)',
|
|
147
|
+
value: 'skip',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
async function promptZepCloudConfig() {
|
|
153
|
+
const zepApiKey = await (0, prompts_1.password)({
|
|
154
|
+
message: 'Zep API Key:',
|
|
155
|
+
validate: (val) => val.length > 0 || 'API key is required',
|
|
156
|
+
});
|
|
157
|
+
const zepProjectId = await (0, prompts_1.input)({
|
|
158
|
+
message: 'Zep Project ID:',
|
|
159
|
+
validate: (val) => val.length > 0 || 'Project ID is required',
|
|
160
|
+
});
|
|
161
|
+
return {
|
|
162
|
+
zepApiKey,
|
|
163
|
+
zepProjectId,
|
|
164
|
+
endpoint: ZEP_CLOUD_ENDPOINT,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
async function promptGroupId() {
|
|
168
|
+
const projectName = path_1.default.basename(process.cwd());
|
|
169
|
+
return await (0, prompts_1.input)({
|
|
170
|
+
message: 'Group ID:',
|
|
171
|
+
default: projectName,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
async function promptCliSupport() {
|
|
175
|
+
const choices = await (0, prompts_1.checkbox)({
|
|
176
|
+
message: 'Which CLI tools do you want to support?',
|
|
177
|
+
choices: [
|
|
178
|
+
{
|
|
179
|
+
name: 'Claude Code (Anthropic)',
|
|
180
|
+
value: 'claude-code',
|
|
181
|
+
checked: true,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'OpenCode (open source)',
|
|
185
|
+
value: 'opencode',
|
|
186
|
+
checked: true,
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
});
|
|
190
|
+
// Default to both if none selected
|
|
191
|
+
if (choices.length === 0) {
|
|
192
|
+
return ['claude-code', 'opencode'];
|
|
193
|
+
}
|
|
194
|
+
return choices;
|
|
195
|
+
}
|
|
196
|
+
async function initCommand(opts, services) {
|
|
197
|
+
const force = Boolean(opts.force);
|
|
198
|
+
const cwd = opts.cwd;
|
|
199
|
+
let config;
|
|
200
|
+
let cliSupport;
|
|
201
|
+
// Determine if we need interactive prompts
|
|
202
|
+
const hasExplicitMode = opts.mode !== undefined;
|
|
203
|
+
const skipPrompts = opts.yes || hasExplicitMode;
|
|
204
|
+
if (skipPrompts) {
|
|
205
|
+
// Non-interactive mode - use provided options or defaults
|
|
206
|
+
const mode = opts.mode || 'local';
|
|
207
|
+
config = {
|
|
208
|
+
mode,
|
|
209
|
+
endpoint: opts.endpoint || (mode === 'zep-cloud' ? ZEP_CLOUD_ENDPOINT : DEFAULT_ENDPOINT),
|
|
210
|
+
groupId: opts.group || process.env.GRAPHITI_GROUP_ID || DEFAULT_GROUP,
|
|
211
|
+
zepApiKey: opts.zepApiKey,
|
|
212
|
+
zepProjectId: opts.zepProjectId,
|
|
213
|
+
};
|
|
214
|
+
// Default to both CLIs if not specified
|
|
215
|
+
cliSupport = opts.cliSupport || ['claude-code', 'opencode'];
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
// Interactive mode - prompt user
|
|
219
|
+
const mode = await promptDeploymentMode();
|
|
220
|
+
let modeConfig = {};
|
|
221
|
+
if (mode === 'zep-cloud') {
|
|
222
|
+
modeConfig = await promptZepCloudConfig();
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
modeConfig = { endpoint: DEFAULT_ENDPOINT };
|
|
226
|
+
}
|
|
227
|
+
const groupId = await promptGroupId();
|
|
228
|
+
// Prompt for CLI support
|
|
229
|
+
cliSupport = await promptCliSupport();
|
|
230
|
+
config = {
|
|
231
|
+
mode,
|
|
232
|
+
endpoint: modeConfig.endpoint || DEFAULT_ENDPOINT,
|
|
233
|
+
groupId,
|
|
234
|
+
...modeConfig,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
const includeDocker = opts.includeDocker !== false && config.mode !== 'zep-cloud' && config.mode !== 'skip';
|
|
238
|
+
const supportClaudeCode = cliSupport.includes('claude-code');
|
|
239
|
+
const supportOpenCode = cliSupport.includes('opencode');
|
|
240
|
+
const replacements = {
|
|
241
|
+
GRAPHITI_ENDPOINT: config.endpoint,
|
|
242
|
+
GRAPHITI_GROUP: config.groupId,
|
|
243
|
+
GRAPHITI_GROUP_ID: config.groupId,
|
|
244
|
+
PROJECT_NAME: config.groupId,
|
|
245
|
+
};
|
|
246
|
+
const lisaDir = path_1.default.join(cwd, '.lisa');
|
|
247
|
+
const skillsDir = path_1.default.join(lisaDir, 'skills');
|
|
248
|
+
const rulesDir = path_1.default.join(lisaDir, 'rules');
|
|
249
|
+
const claudeDir = path_1.default.join(cwd, '.claude');
|
|
250
|
+
const composeDest = path_1.default.join(cwd, 'docker-compose.graphiti.yml');
|
|
251
|
+
const copies = [];
|
|
252
|
+
// Create .env from template on first install only (preserve user customizations)
|
|
253
|
+
const envDest = path_1.default.join(lisaDir, '.env');
|
|
254
|
+
if (!await fs_extra_1.default.pathExists(envDest)) {
|
|
255
|
+
await fs_extra_1.default.ensureDir(lisaDir);
|
|
256
|
+
copies.push(services.templateCopier.copy('.lisa/.env.template', envDest, replacements, false // Never force overwrite - preserves user customizations
|
|
257
|
+
));
|
|
258
|
+
}
|
|
259
|
+
// Skill scaffolding (model-neutral)
|
|
260
|
+
copies.push(services.templateCopier.copy('.lisa/skills/memory/SKILL.md', path_1.default.join(skillsDir, 'memory', 'SKILL.md'), replacements, force));
|
|
261
|
+
copies.push(services.templateCopier.copy('.lisa/skills/tasks/SKILL.md', path_1.default.join(skillsDir, 'tasks', 'SKILL.md'), replacements, force));
|
|
262
|
+
// Rules scaffolding (shared)
|
|
263
|
+
copies.push(services.templateCopier.copy('.lisa/rules/shared/clean-architecture.md', path_1.default.join(rulesDir, 'shared', 'clean-architecture.md'), replacements, force));
|
|
264
|
+
copies.push(services.templateCopier.copy('.lisa/rules/shared/code-quality-rules.md', path_1.default.join(rulesDir, 'shared', 'code-quality-rules.md'), replacements, force));
|
|
265
|
+
copies.push(services.templateCopier.copy('.lisa/rules/shared/testing-principles.md', path_1.default.join(rulesDir, 'shared', 'testing-principles.md'), replacements, force));
|
|
266
|
+
// Rules scaffolding (typescript)
|
|
267
|
+
copies.push(services.templateCopier.copy('.lisa/rules/typescript/coding-standards.md', path_1.default.join(rulesDir, 'typescript', 'coding-standards.md'), replacements, force));
|
|
268
|
+
copies.push(services.templateCopier.copy('.lisa/rules/typescript/testing.md', path_1.default.join(rulesDir, 'typescript', 'testing.md'), replacements, force));
|
|
269
|
+
copies.push(services.templateCopier.copy('.lisa/rules/typescript/typescript-config-guide.md', path_1.default.join(rulesDir, 'typescript', 'typescript-config-guide.md'), replacements, force));
|
|
270
|
+
// Claude Code scaffolding (hooks and settings) - only if Claude Code is selected
|
|
271
|
+
if (supportClaudeCode) {
|
|
272
|
+
copies.push(services.templateCopier.copy('.claude/config.js', path_1.default.join(claudeDir, 'config.js'), replacements, force));
|
|
273
|
+
// Copy bundled hooks (these are pre-bundled with all dependencies)
|
|
274
|
+
const hooksDir = path_1.default.join(claudeDir, 'hooks');
|
|
275
|
+
await fs_extra_1.default.ensureDir(hooksDir);
|
|
276
|
+
const bundledHooks = ['session-start.js', 'session-stop.js', 'user-prompt-submit.js'];
|
|
277
|
+
for (const hook of bundledHooks) {
|
|
278
|
+
const src = path_1.default.join(BUNDLED_HOOKS_ROOT, hook);
|
|
279
|
+
const dest = path_1.default.join(hooksDir, hook);
|
|
280
|
+
if (await fs_extra_1.default.pathExists(src)) {
|
|
281
|
+
copies.push(fs_extra_1.default.copy(src, dest, { overwrite: force }));
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Create symlinks for .claude/skills and .claude/rules
|
|
285
|
+
await createSymlink(skillsDir, path_1.default.join(claudeDir, 'skills'), cwd);
|
|
286
|
+
await createSymlink(rulesDir, path_1.default.join(claudeDir, 'rules'), cwd);
|
|
287
|
+
}
|
|
288
|
+
// OpenCode scaffolding - only if OpenCode is selected
|
|
289
|
+
if (supportOpenCode) {
|
|
290
|
+
const opencodeDir = path_1.default.join(cwd, '.opencode');
|
|
291
|
+
const pluginDir = path_1.default.join(opencodeDir, 'plugin');
|
|
292
|
+
await fs_extra_1.default.ensureDir(pluginDir);
|
|
293
|
+
// Copy bundled OpenCode plugin
|
|
294
|
+
const pluginSrc = path_1.default.join(BUNDLED_OPENCODE_ROOT, 'lisa.js');
|
|
295
|
+
const pluginDest = path_1.default.join(pluginDir, 'lisa.js');
|
|
296
|
+
if (await fs_extra_1.default.pathExists(pluginSrc)) {
|
|
297
|
+
copies.push(fs_extra_1.default.copy(pluginSrc, pluginDest, { overwrite: force }));
|
|
298
|
+
}
|
|
299
|
+
// Create symlink for .opencode/skills
|
|
300
|
+
await createSymlink(skillsDir, path_1.default.join(opencodeDir, 'skills'), cwd);
|
|
301
|
+
}
|
|
302
|
+
if (includeDocker) {
|
|
303
|
+
// Choose compose file based on mode
|
|
304
|
+
const composeTemplate = '.lisa/docker/docker-compose.graphiti.yml';
|
|
305
|
+
copies.push(services.templateCopier.copy(composeTemplate, composeDest, replacements, force));
|
|
306
|
+
}
|
|
307
|
+
await Promise.all(copies);
|
|
308
|
+
// Build scaffolded directories list
|
|
309
|
+
const scaffoldedDirs = ['.lisa'];
|
|
310
|
+
if (supportClaudeCode)
|
|
311
|
+
scaffoldedDirs.push('.claude');
|
|
312
|
+
if (supportOpenCode)
|
|
313
|
+
scaffoldedDirs.push('.opencode');
|
|
314
|
+
if (includeDocker)
|
|
315
|
+
scaffoldedDirs.push('Docker assets');
|
|
316
|
+
console.log(chalk_1.default.green(`Scaffolded ${scaffoldedDirs.join(', ')} into ${cwd}`));
|
|
317
|
+
console.log(`Mode: ${config.mode}`);
|
|
318
|
+
console.log(`Endpoint: ${config.endpoint}`);
|
|
319
|
+
console.log(`Group ID: ${config.groupId}`);
|
|
320
|
+
console.log(`CLI Support: ${cliSupport.join(', ')}`);
|
|
321
|
+
// Save config to .lisa/lisa.config.json
|
|
322
|
+
const lisaConfigPath = path_1.default.join(lisaDir, 'lisa.config.json');
|
|
323
|
+
const lisaConfig = {
|
|
324
|
+
graphiti: config,
|
|
325
|
+
cliSupport,
|
|
326
|
+
};
|
|
327
|
+
await fs_extra_1.default.ensureDir(lisaDir);
|
|
328
|
+
await fs_extra_1.default.writeJson(lisaConfigPath, lisaConfig, { spaces: 2 });
|
|
329
|
+
console.log(chalk_1.default.green(`Saved configuration to ${lisaConfigPath}`));
|
|
330
|
+
// Show skip mode instructions
|
|
331
|
+
if (config.mode === 'skip') {
|
|
332
|
+
console.log('');
|
|
333
|
+
console.log(chalk_1.default.cyan('To configure storage later:'));
|
|
334
|
+
console.log(chalk_1.default.cyan(' 1. Read .lisa/docs/STORAGE_SETUP.md'));
|
|
335
|
+
console.log(chalk_1.default.cyan(' 2. Edit .lisa/.env with your configuration'));
|
|
336
|
+
console.log(chalk_1.default.cyan(' 3. Start a new terminal session'));
|
|
337
|
+
console.log(chalk_1.default.cyan(' 4. Run `lisa doctor` to verify connection'));
|
|
338
|
+
}
|
|
339
|
+
// Isolated mode: create .claude/lib structure for non-npm projects
|
|
340
|
+
if (opts.isolated) {
|
|
341
|
+
const libDir = path_1.default.join(claudeDir, 'lib');
|
|
342
|
+
await fs_extra_1.default.ensureDir(libDir);
|
|
343
|
+
// Create minimal package.json in .claude/lib
|
|
344
|
+
const libPackageJson = {
|
|
345
|
+
name: 'claude-lib',
|
|
346
|
+
version: '1.0.0',
|
|
347
|
+
private: true,
|
|
348
|
+
description: 'Lisa support files for Claude Code',
|
|
349
|
+
};
|
|
350
|
+
const libPackagePath = path_1.default.join(libDir, 'package.json');
|
|
351
|
+
if (!await fs_extra_1.default.pathExists(libPackagePath) || force) {
|
|
352
|
+
await fs_extra_1.default.writeJson(libPackagePath, libPackageJson, { spaces: 2 });
|
|
353
|
+
console.log(chalk_1.default.green('Created .claude/lib/package.json'));
|
|
354
|
+
}
|
|
355
|
+
// Add .claude/lib to .gitignore if not already there
|
|
356
|
+
const gitignorePath = path_1.default.join(cwd, '.gitignore');
|
|
357
|
+
if (await fs_extra_1.default.pathExists(gitignorePath)) {
|
|
358
|
+
let gitignore = await fs_extra_1.default.readFile(gitignorePath, 'utf8');
|
|
359
|
+
if (!gitignore.includes('.claude/lib/node_modules')) {
|
|
360
|
+
gitignore += '\n# Lisa support files\n.claude/lib/node_modules/\n';
|
|
361
|
+
await fs_extra_1.default.writeFile(gitignorePath, gitignore);
|
|
362
|
+
console.log(chalk_1.default.green('Added .claude/lib/node_modules to .gitignore'));
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
console.log('');
|
|
366
|
+
console.log(chalk_1.default.cyan('Isolated mode: Lisa installed to .claude/lib/'));
|
|
367
|
+
console.log(chalk_1.default.cyan('Your project root stays clean (no package.json or node_modules).'));
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
async function loadConfig(cwd) {
|
|
371
|
+
const lisaEnv = path_1.default.join(cwd, '.lisa', '.env');
|
|
372
|
+
if (!(await fs_extra_1.default.pathExists(lisaEnv)))
|
|
373
|
+
return null;
|
|
374
|
+
const raw = await fs_extra_1.default.readFile(lisaEnv, 'utf8');
|
|
375
|
+
const map = {};
|
|
376
|
+
raw.split(/\r?\n/).forEach((line) => {
|
|
377
|
+
if (!line || line.startsWith('#'))
|
|
378
|
+
return;
|
|
379
|
+
const idx = line.indexOf('=');
|
|
380
|
+
if (idx === -1)
|
|
381
|
+
return;
|
|
382
|
+
const key = line.slice(0, idx).trim();
|
|
383
|
+
const val = line.slice(idx + 1).trim();
|
|
384
|
+
map[key] = val;
|
|
385
|
+
});
|
|
386
|
+
return {
|
|
387
|
+
endpoint: map.GRAPHITI_ENDPOINT || DEFAULT_ENDPOINT,
|
|
388
|
+
group: map.GRAPHITI_GROUP_ID || DEFAULT_GROUP,
|
|
389
|
+
mode: map.STORAGE_MODE || 'local',
|
|
390
|
+
zepApiKey: map.ZEP_API_KEY,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
async function doctorCommand(opts, services) {
|
|
394
|
+
const cwd = opts.cwd;
|
|
395
|
+
const composeFile = opts.compose || path_1.default.join(cwd, 'docker-compose.graphiti.yml');
|
|
396
|
+
const config = (await loadConfig(cwd)) ?? { endpoint: undefined, group: undefined, mode: 'local' };
|
|
397
|
+
const endpoint = opts.endpoint || config.endpoint || DEFAULT_ENDPOINT;
|
|
398
|
+
const mode = config.mode || 'local';
|
|
399
|
+
const results = [];
|
|
400
|
+
// Show current mode
|
|
401
|
+
results.push(chalk_1.default.cyan(`Mode: ${mode}`));
|
|
402
|
+
results.push(chalk_1.default.cyan(`Group: ${config.group || DEFAULT_GROUP}`));
|
|
403
|
+
results.push('');
|
|
404
|
+
// Mode-specific checks
|
|
405
|
+
if (mode === 'zep-cloud') {
|
|
406
|
+
// Zep Cloud mode - no local Docker needed
|
|
407
|
+
results.push(chalk_1.default.yellow('Zep Cloud mode - no local Docker required'));
|
|
408
|
+
results.push('');
|
|
409
|
+
// Get API key from config or environment for Zep Cloud authentication
|
|
410
|
+
const zepApiKey = config.zepApiKey || process.env.ZEP_API_KEY;
|
|
411
|
+
if (!zepApiKey) {
|
|
412
|
+
results.push(chalk_1.default.yellow('Warning: ZEP_API_KEY not configured (required for Zep Cloud)'));
|
|
413
|
+
}
|
|
414
|
+
try {
|
|
415
|
+
await services.mcp.ping(endpoint, { apiKey: zepApiKey });
|
|
416
|
+
results.push(chalk_1.default.green(`Zep MCP reachable at ${endpoint}`));
|
|
417
|
+
}
|
|
418
|
+
catch (err) {
|
|
419
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
420
|
+
results.push(chalk_1.default.red(`Zep MCP check failed at ${endpoint}: ${message}`));
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
// Local mode - Docker is needed
|
|
425
|
+
try {
|
|
426
|
+
const stdout = await services.docker.version();
|
|
427
|
+
results.push(chalk_1.default.green(`Docker OK: ${stdout}`));
|
|
428
|
+
}
|
|
429
|
+
catch (err) {
|
|
430
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
431
|
+
results.push(chalk_1.default.red(`Docker missing or not running: ${message}`));
|
|
432
|
+
}
|
|
433
|
+
try {
|
|
434
|
+
const stdout = await services.docker.composeVersion();
|
|
435
|
+
results.push(chalk_1.default.green(`Docker Compose OK: ${stdout}`));
|
|
436
|
+
}
|
|
437
|
+
catch (err) {
|
|
438
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
439
|
+
results.push(chalk_1.default.red(`Docker Compose missing: ${message}`));
|
|
440
|
+
}
|
|
441
|
+
if (await fs_extra_1.default.pathExists(composeFile)) {
|
|
442
|
+
results.push(chalk_1.default.green(`Compose file found: ${composeFile}`));
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
results.push(chalk_1.default.red(`Compose file not found: ${composeFile}`));
|
|
446
|
+
}
|
|
447
|
+
try {
|
|
448
|
+
await services.mcp.ping(endpoint);
|
|
449
|
+
results.push(chalk_1.default.green(`MCP reachable at ${endpoint}`));
|
|
450
|
+
}
|
|
451
|
+
catch (err) {
|
|
452
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
453
|
+
results.push(chalk_1.default.red(`MCP check failed at ${endpoint}: ${message}`));
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
console.log(results.join('\n'));
|
|
457
|
+
}
|
|
458
|
+
async function upCommand(opts, services) {
|
|
459
|
+
await services.docker.compose(opts.composeFile, ['up', '-d']);
|
|
460
|
+
}
|
|
461
|
+
async function downCommand(opts, services) {
|
|
462
|
+
await services.docker.compose(opts.composeFile, ['down']);
|
|
463
|
+
}
|
|
464
|
+
const program = new commander_1.Command();
|
|
465
|
+
program
|
|
466
|
+
.name('lisa')
|
|
467
|
+
.description('Lisa remembers everything. Memory for Claude Code and AI assistants.')
|
|
468
|
+
.version(VERSION);
|
|
469
|
+
program
|
|
470
|
+
.command('init')
|
|
471
|
+
.description('Scaffold .lisa, .claude/.opencode, and Docker assets')
|
|
472
|
+
.option('-e, --endpoint <url>', 'MCP endpoint')
|
|
473
|
+
.option('-g, --group <id>', 'Default group id')
|
|
474
|
+
.option('-f, --force', 'Overwrite existing files')
|
|
475
|
+
.option('-m, --mode <mode>', 'Deployment mode: local or zep-cloud')
|
|
476
|
+
.option('--zep-api-key <key>', 'Zep API key (for zep-cloud mode)')
|
|
477
|
+
.option('--zep-project-id <id>', 'Zep project ID (for zep-cloud mode)')
|
|
478
|
+
.option('-y, --yes', 'Skip prompts, use defaults')
|
|
479
|
+
.option('--isolated', 'Install to .claude/lib for non-npm projects (Python, Go, etc.)')
|
|
480
|
+
.option('--claude-only', 'Only scaffold for Claude Code')
|
|
481
|
+
.option('--opencode-only', 'Only scaffold for OpenCode')
|
|
482
|
+
.action(async (cmd) => {
|
|
483
|
+
await (0, logging_1.withCorrelation)(async () => {
|
|
484
|
+
const log = cliLogger.child({ command: 'init' });
|
|
485
|
+
log.info('Starting init command', {
|
|
486
|
+
mode: cmd.mode,
|
|
487
|
+
claudeOnly: cmd.claudeOnly,
|
|
488
|
+
opencodeOnly: cmd.opencodeOnly
|
|
489
|
+
});
|
|
490
|
+
const services = (0, services_1.createDefaultServices)(TEMPLATE_ROOT);
|
|
491
|
+
// Determine CLI support from flags
|
|
492
|
+
let cliSupport;
|
|
493
|
+
if (cmd.claudeOnly && !cmd.opencodeOnly) {
|
|
494
|
+
cliSupport = ['claude-code'];
|
|
495
|
+
}
|
|
496
|
+
else if (cmd.opencodeOnly && !cmd.claudeOnly) {
|
|
497
|
+
cliSupport = ['opencode'];
|
|
498
|
+
}
|
|
499
|
+
else if (cmd.claudeOnly && cmd.opencodeOnly) {
|
|
500
|
+
cliSupport = ['claude-code', 'opencode'];
|
|
501
|
+
}
|
|
502
|
+
// If neither flag is set, cliSupport remains undefined and prompts will be shown
|
|
503
|
+
await initCommand({
|
|
504
|
+
endpoint: cmd.endpoint,
|
|
505
|
+
group: cmd.group,
|
|
506
|
+
force: cmd.force,
|
|
507
|
+
cwd: process.cwd(),
|
|
508
|
+
includeDocker: true,
|
|
509
|
+
mode: cmd.mode,
|
|
510
|
+
zepApiKey: cmd.zepApiKey,
|
|
511
|
+
zepProjectId: cmd.zepProjectId,
|
|
512
|
+
yes: cmd.yes,
|
|
513
|
+
isolated: cmd.isolated,
|
|
514
|
+
cliSupport,
|
|
515
|
+
}, services);
|
|
516
|
+
log.info('Init command completed');
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
program
|
|
520
|
+
.command('setup')
|
|
521
|
+
.description('Scaffold .lisa and .claude/.opencode only (no Docker assets)')
|
|
522
|
+
.option('-e, --endpoint <url>', 'MCP endpoint')
|
|
523
|
+
.option('-g, --group <id>', 'Default group id')
|
|
524
|
+
.option('-f, --force', 'Overwrite existing files')
|
|
525
|
+
.option('-m, --mode <mode>', 'Deployment mode: local or zep-cloud')
|
|
526
|
+
.option('--zep-api-key <key>', 'Zep API key (for zep-cloud mode)')
|
|
527
|
+
.option('--zep-project-id <id>', 'Zep project ID (for zep-cloud mode)')
|
|
528
|
+
.option('-y, --yes', 'Skip prompts, use defaults')
|
|
529
|
+
.option('--isolated', 'Install to .claude/lib for non-npm projects (Python, Go, etc.)')
|
|
530
|
+
.option('--claude-only', 'Only scaffold for Claude Code')
|
|
531
|
+
.option('--opencode-only', 'Only scaffold for OpenCode')
|
|
532
|
+
.action(async (cmd) => {
|
|
533
|
+
const services = (0, services_1.createDefaultServices)(TEMPLATE_ROOT);
|
|
534
|
+
// Determine CLI support from flags
|
|
535
|
+
let cliSupport;
|
|
536
|
+
if (cmd.claudeOnly && !cmd.opencodeOnly) {
|
|
537
|
+
cliSupport = ['claude-code'];
|
|
538
|
+
}
|
|
539
|
+
else if (cmd.opencodeOnly && !cmd.claudeOnly) {
|
|
540
|
+
cliSupport = ['opencode'];
|
|
541
|
+
}
|
|
542
|
+
else if (cmd.claudeOnly && cmd.opencodeOnly) {
|
|
543
|
+
cliSupport = ['claude-code', 'opencode'];
|
|
544
|
+
}
|
|
545
|
+
await initCommand({
|
|
546
|
+
endpoint: cmd.endpoint,
|
|
547
|
+
group: cmd.group,
|
|
548
|
+
force: cmd.force,
|
|
549
|
+
cwd: process.cwd(),
|
|
550
|
+
includeDocker: false,
|
|
551
|
+
mode: cmd.mode,
|
|
552
|
+
zepApiKey: cmd.zepApiKey,
|
|
553
|
+
zepProjectId: cmd.zepProjectId,
|
|
554
|
+
yes: cmd.yes,
|
|
555
|
+
isolated: cmd.isolated,
|
|
556
|
+
cliSupport,
|
|
557
|
+
}, services);
|
|
558
|
+
});
|
|
559
|
+
program
|
|
560
|
+
.command('up')
|
|
561
|
+
.description('Start Neo4j/Graph/graphiti-mcp via docker compose')
|
|
562
|
+
.option('-c, --compose <file>', 'Compose file', 'docker-compose.graphiti.yml')
|
|
563
|
+
.action(async (cmd) => {
|
|
564
|
+
const composeFile = path_1.default.resolve(process.cwd(), cmd.compose);
|
|
565
|
+
const services = (0, services_1.createDefaultServices)(TEMPLATE_ROOT);
|
|
566
|
+
await upCommand({ composeFile }, services);
|
|
567
|
+
});
|
|
568
|
+
program
|
|
569
|
+
.command('down')
|
|
570
|
+
.description('Stop Neo4j/Graph/graphiti-mcp via docker compose')
|
|
571
|
+
.option('-c, --compose <file>', 'Compose file', 'docker-compose.graphiti.yml')
|
|
572
|
+
.action(async (cmd) => {
|
|
573
|
+
const composeFile = path_1.default.resolve(process.cwd(), cmd.compose);
|
|
574
|
+
const services = (0, services_1.createDefaultServices)(TEMPLATE_ROOT);
|
|
575
|
+
await downCommand({ composeFile }, services);
|
|
576
|
+
});
|
|
577
|
+
program
|
|
578
|
+
.command('doctor')
|
|
579
|
+
.description('Validate Docker and MCP connectivity')
|
|
580
|
+
.option('-c, --compose <file>', 'Compose file', 'docker-compose.graphiti.yml')
|
|
581
|
+
.option('-e, --endpoint <url>', 'MCP endpoint override')
|
|
582
|
+
.action(async (cmd) => {
|
|
583
|
+
const services = (0, services_1.createDefaultServices)(TEMPLATE_ROOT);
|
|
584
|
+
await doctorCommand({ cwd: process.cwd(), compose: cmd.compose, endpoint: cmd.endpoint }, services);
|
|
585
|
+
});
|
|
586
|
+
program
|
|
587
|
+
.command('scan [path]')
|
|
588
|
+
.description('Scan a directory for projects and create solution-level knowledge')
|
|
589
|
+
.option('--dry-run', 'Preview what would be discovered without storing facts')
|
|
590
|
+
.option('--clean', 'Remove previous scan facts before adding new ones')
|
|
591
|
+
.option('-v, --verbose', 'Show detailed output for each project')
|
|
592
|
+
.action(async (targetPath, cmd) => {
|
|
593
|
+
await (0, logging_1.withCorrelation)(async () => {
|
|
594
|
+
const log = cliLogger.child({ command: 'scan' });
|
|
595
|
+
const scanPath = targetPath || process.cwd();
|
|
596
|
+
log.info('Starting scan', {
|
|
597
|
+
path: scanPath,
|
|
598
|
+
dryRun: cmd.dryRun,
|
|
599
|
+
clean: cmd.clean,
|
|
600
|
+
verbose: cmd.verbose,
|
|
601
|
+
});
|
|
602
|
+
const options = {
|
|
603
|
+
dryRun: cmd.dryRun,
|
|
604
|
+
clean: cmd.clean,
|
|
605
|
+
verbose: cmd.verbose,
|
|
606
|
+
};
|
|
607
|
+
try {
|
|
608
|
+
const result = await (0, scanner_1.runScan)(scanPath, options);
|
|
609
|
+
log.info('Scan completed', {
|
|
610
|
+
success: result.success,
|
|
611
|
+
projectsFound: result.projectsFound,
|
|
612
|
+
factsGenerated: result.factsGenerated,
|
|
613
|
+
});
|
|
614
|
+
process.exit(result.success ? 0 : 1);
|
|
615
|
+
}
|
|
616
|
+
catch (err) {
|
|
617
|
+
log.error('Scan failed', { error: err instanceof Error ? err.message : String(err) });
|
|
618
|
+
console.error(chalk_1.default.red(`Scan failed: ${err instanceof Error ? err.message : err}`));
|
|
619
|
+
process.exit(1);
|
|
620
|
+
}
|
|
621
|
+
});
|
|
622
|
+
});
|
|
623
|
+
program
|
|
624
|
+
.command('sync')
|
|
625
|
+
.description('Sync copied directories (for Windows when symlinks fail)')
|
|
626
|
+
.action(async () => {
|
|
627
|
+
const cwd = process.cwd();
|
|
628
|
+
const fallbackFile = path_1.default.join(cwd, '.lisa', '.copy-fallbacks.json');
|
|
629
|
+
if (!await fs_extra_1.default.pathExists(fallbackFile)) {
|
|
630
|
+
console.log(chalk_1.default.yellow('No copy fallbacks found. Symlinks are working correctly.'));
|
|
631
|
+
return;
|
|
632
|
+
}
|
|
633
|
+
try {
|
|
634
|
+
const { copies } = await fs_extra_1.default.readJson(fallbackFile);
|
|
635
|
+
if (!copies || copies.length === 0) {
|
|
636
|
+
console.log(chalk_1.default.yellow('No directories need syncing.'));
|
|
637
|
+
return;
|
|
638
|
+
}
|
|
639
|
+
console.log(chalk_1.default.cyan(`Syncing ${copies.length} copied directories...`));
|
|
640
|
+
for (const { link, target } of copies) {
|
|
641
|
+
const linkPath = path_1.default.join(cwd, link);
|
|
642
|
+
const targetPath = path_1.default.join(cwd, target);
|
|
643
|
+
if (!await fs_extra_1.default.pathExists(targetPath)) {
|
|
644
|
+
console.log(chalk_1.default.yellow(` Skipping ${link}: source ${target} not found`));
|
|
645
|
+
continue;
|
|
646
|
+
}
|
|
647
|
+
await fs_extra_1.default.remove(linkPath);
|
|
648
|
+
await fs_extra_1.default.copy(targetPath, linkPath);
|
|
649
|
+
console.log(chalk_1.default.green(` Synced: ${link}`));
|
|
650
|
+
}
|
|
651
|
+
console.log(chalk_1.default.green('Sync complete.'));
|
|
652
|
+
}
|
|
653
|
+
catch (err) {
|
|
654
|
+
console.error(chalk_1.default.red(`Sync failed: ${err instanceof Error ? err.message : err}`));
|
|
655
|
+
process.exit(1);
|
|
656
|
+
}
|
|
657
|
+
});
|
|
658
|
+
if (require.main === module) {
|
|
659
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
660
|
+
console.error(chalk_1.default.red(err.message));
|
|
661
|
+
process.exit(1);
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
//# sourceMappingURL=cli.js.map
|