@tonycasey/lisa 2.2.0 → 2.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/application/handlers/PromptSubmitHandler.d.ts +22 -12
- package/dist/lib/application/handlers/PromptSubmitHandler.d.ts.map +1 -1
- package/dist/lib/application/handlers/PromptSubmitHandler.js +36 -13
- package/dist/lib/application/handlers/PromptSubmitHandler.js.map +1 -1
- package/dist/lib/application/handlers/SessionStartHandler.d.ts +47 -5
- package/dist/lib/application/handlers/SessionStartHandler.d.ts.map +1 -1
- package/dist/lib/application/handlers/SessionStartHandler.js +164 -37
- package/dist/lib/application/handlers/SessionStartHandler.js.map +1 -1
- package/dist/lib/application/handlers/SessionStopHandler.d.ts +29 -5
- package/dist/lib/application/handlers/SessionStopHandler.d.ts.map +1 -1
- package/dist/lib/application/handlers/SessionStopHandler.js +83 -11
- package/dist/lib/application/handlers/SessionStopHandler.js.map +1 -1
- package/dist/lib/application/interfaces/index.d.ts +1 -0
- package/dist/lib/application/interfaces/index.d.ts.map +1 -1
- package/dist/lib/application/mediator/IMediator.d.ts +73 -0
- package/dist/lib/application/mediator/IMediator.d.ts.map +1 -0
- package/dist/lib/application/mediator/IMediator.js +12 -0
- package/dist/lib/application/mediator/IMediator.js.map +1 -0
- package/dist/lib/application/mediator/Mediator.d.ts +29 -0
- package/dist/lib/application/mediator/Mediator.d.ts.map +1 -0
- package/dist/lib/application/mediator/Mediator.js +53 -0
- package/dist/lib/application/mediator/Mediator.js.map +1 -0
- package/dist/lib/application/mediator/index.d.ts +10 -0
- package/dist/lib/application/mediator/index.d.ts.map +1 -0
- package/dist/lib/application/mediator/index.js +18 -0
- package/dist/lib/application/mediator/index.js.map +1 -0
- package/dist/lib/application/mediator/requests/PromptSubmitRequest.d.ts +60 -0
- package/dist/lib/application/mediator/requests/PromptSubmitRequest.d.ts.map +1 -0
- package/dist/lib/application/mediator/requests/PromptSubmitRequest.js +35 -0
- package/dist/lib/application/mediator/requests/PromptSubmitRequest.js.map +1 -0
- package/dist/lib/application/mediator/requests/SessionStartRequest.d.ts +36 -0
- package/dist/lib/application/mediator/requests/SessionStartRequest.d.ts.map +1 -0
- package/dist/lib/application/mediator/requests/SessionStartRequest.js +32 -0
- package/dist/lib/application/mediator/requests/SessionStartRequest.js.map +1 -0
- package/dist/lib/application/mediator/requests/SessionStopRequest.d.ts +67 -0
- package/dist/lib/application/mediator/requests/SessionStopRequest.d.ts.map +1 -0
- package/dist/lib/application/mediator/requests/SessionStopRequest.js +35 -0
- package/dist/lib/application/mediator/requests/SessionStopRequest.js.map +1 -0
- package/dist/lib/application/mediator/requests/index.d.ts +9 -0
- package/dist/lib/application/mediator/requests/index.d.ts.map +1 -0
- package/dist/lib/application/mediator/requests/index.js +13 -0
- package/dist/lib/application/mediator/requests/index.js.map +1 -0
- package/dist/lib/cli.d.ts +2 -44
- package/dist/lib/cli.d.ts.map +1 -1
- package/dist/lib/cli.js +351 -606
- package/dist/lib/cli.js.map +1 -1
- package/dist/lib/commands/docker.d.ts +20 -0
- package/dist/lib/commands/docker.d.ts.map +1 -0
- package/dist/lib/commands/docker.js +27 -0
- package/dist/lib/commands/docker.js.map +1 -0
- package/dist/lib/commands/doctor.d.ts +94 -0
- package/dist/lib/commands/doctor.d.ts.map +1 -0
- package/dist/lib/commands/doctor.js +716 -0
- package/dist/lib/commands/doctor.js.map +1 -0
- package/dist/lib/commands/index.d.ts +10 -0
- package/dist/lib/commands/index.d.ts.map +1 -0
- package/dist/lib/commands/index.js +31 -0
- package/dist/lib/commands/index.js.map +1 -0
- package/dist/lib/commands/init.d.ts +31 -0
- package/dist/lib/commands/init.d.ts.map +1 -0
- package/dist/lib/commands/init.js +497 -0
- package/dist/lib/commands/init.js.map +1 -0
- package/dist/lib/commands/shared/constants.d.ts +27 -0
- package/dist/lib/commands/shared/constants.d.ts.map +1 -0
- package/dist/lib/commands/shared/constants.js +46 -0
- package/dist/lib/commands/shared/constants.js.map +1 -0
- package/dist/lib/commands/shared/index.d.ts +5 -0
- package/dist/lib/commands/shared/index.d.ts.map +1 -0
- package/dist/lib/commands/shared/index.js +15 -0
- package/dist/lib/commands/shared/index.js.map +1 -0
- package/dist/lib/domain/index.d.ts +4 -2
- package/dist/lib/domain/index.d.ts.map +1 -1
- package/dist/lib/domain/index.js +5 -2
- package/dist/lib/domain/index.js.map +1 -1
- package/dist/lib/domain/interfaces/ILabelInference.d.ts +62 -0
- package/dist/lib/domain/interfaces/ILabelInference.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/ILabelInference.js +11 -0
- package/dist/lib/domain/interfaces/ILabelInference.js.map +1 -0
- package/dist/lib/domain/interfaces/ILisaServices.d.ts +6 -0
- package/dist/lib/domain/interfaces/ILisaServices.d.ts.map +1 -1
- package/dist/lib/domain/interfaces/IMcpClient.d.ts +15 -2
- package/dist/lib/domain/interfaces/IMcpClient.d.ts.map +1 -1
- package/dist/lib/domain/interfaces/ISessionCaptureService.d.ts +2 -1
- package/dist/lib/domain/interfaces/ISessionCaptureService.d.ts.map +1 -1
- package/dist/lib/domain/interfaces/IStructuredLog.d.ts +162 -0
- package/dist/lib/domain/interfaces/IStructuredLog.d.ts.map +1 -0
- package/dist/lib/domain/interfaces/IStructuredLog.js +85 -0
- package/dist/lib/domain/interfaces/IStructuredLog.js.map +1 -0
- package/dist/lib/domain/interfaces/index.d.ts +2 -0
- package/dist/lib/domain/interfaces/index.d.ts.map +1 -1
- package/dist/lib/domain/interfaces/index.js +6 -0
- package/dist/lib/domain/interfaces/index.js.map +1 -1
- package/dist/lib/domain/interfaces/types/ITask.d.ts +16 -0
- package/dist/lib/domain/interfaces/types/ITask.d.ts.map +1 -1
- package/dist/lib/domain/interfaces/types/ITask.js.map +1 -1
- package/dist/lib/domain/utils/cancellation.d.ts +111 -0
- package/dist/lib/domain/utils/cancellation.d.ts.map +1 -0
- package/dist/lib/domain/utils/cancellation.js +168 -0
- package/dist/lib/domain/utils/cancellation.js.map +1 -0
- package/dist/lib/domain/utils/index.d.ts +8 -0
- package/dist/lib/domain/utils/index.d.ts.map +1 -0
- package/dist/lib/domain/utils/index.js +16 -0
- package/dist/lib/domain/utils/index.js.map +1 -0
- package/dist/lib/infrastructure/adapters/claude/session-start.d.ts +1 -1
- package/dist/lib/infrastructure/adapters/claude/session-start.js +9 -11
- package/dist/lib/infrastructure/adapters/claude/session-start.js.map +1 -1
- package/dist/lib/infrastructure/adapters/claude/session-stop.d.ts +1 -5
- package/dist/lib/infrastructure/adapters/claude/session-stop.d.ts.map +1 -1
- package/dist/lib/infrastructure/adapters/claude/session-stop.js +12 -15
- package/dist/lib/infrastructure/adapters/claude/session-stop.js.map +1 -1
- package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.d.ts +1 -1
- package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.js +9 -11
- package/dist/lib/infrastructure/adapters/claude/user-prompt-submit.js.map +1 -1
- package/dist/lib/infrastructure/adapters/opencode/plugin.d.ts +2 -2
- package/dist/lib/infrastructure/adapters/opencode/plugin.d.ts.map +1 -1
- package/dist/lib/infrastructure/adapters/opencode/plugin.js +16 -21
- package/dist/lib/infrastructure/adapters/opencode/plugin.js.map +1 -1
- package/dist/lib/infrastructure/cli/index.d.ts +8 -0
- package/dist/lib/infrastructure/cli/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/cli/index.js +15 -0
- package/dist/lib/infrastructure/cli/index.js.map +1 -0
- package/dist/lib/infrastructure/cli/io.d.ts +91 -0
- package/dist/lib/infrastructure/cli/io.d.ts.map +1 -0
- package/dist/lib/infrastructure/cli/io.js +128 -0
- package/dist/lib/infrastructure/cli/io.js.map +1 -0
- package/dist/lib/infrastructure/dal/connections/McpConnectionManager.js +1 -1
- package/dist/lib/infrastructure/dal/connections/McpConnectionManager.js.map +1 -1
- package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.d.ts.map +1 -1
- package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.js +6 -2
- package/dist/lib/infrastructure/dal/repositories/mcp/McpTaskRepository.js.map +1 -1
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.d.ts +5 -2
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.d.ts.map +1 -1
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.js +78 -45
- package/dist/lib/infrastructure/dal/repositories/neo4j/Neo4jTaskRepository.js.map +1 -1
- package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.d.ts.map +1 -1
- package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.js +6 -2
- package/dist/lib/infrastructure/dal/repositories/zep/ZepTaskRepository.js.map +1 -1
- package/dist/lib/infrastructure/di/Container.d.ts +72 -0
- package/dist/lib/infrastructure/di/Container.d.ts.map +1 -0
- package/dist/lib/infrastructure/di/Container.js +182 -0
- package/dist/lib/infrastructure/di/Container.js.map +1 -0
- package/dist/lib/infrastructure/di/IContainer.d.ts +87 -0
- package/dist/lib/infrastructure/di/IContainer.d.ts.map +1 -0
- package/dist/lib/infrastructure/di/IContainer.js +11 -0
- package/dist/lib/infrastructure/di/IContainer.js.map +1 -0
- package/dist/lib/infrastructure/di/ServiceFactory.d.ts +6 -0
- package/dist/lib/infrastructure/di/ServiceFactory.d.ts.map +1 -1
- package/dist/lib/infrastructure/di/ServiceFactory.js +66 -0
- package/dist/lib/infrastructure/di/ServiceFactory.js.map +1 -1
- package/dist/lib/infrastructure/di/bootstrap.d.ts +43 -0
- package/dist/lib/infrastructure/di/bootstrap.d.ts.map +1 -0
- package/dist/lib/infrastructure/di/bootstrap.js +272 -0
- package/dist/lib/infrastructure/di/bootstrap.js.map +1 -0
- package/dist/lib/infrastructure/di/index.d.ts +6 -0
- package/dist/lib/infrastructure/di/index.d.ts.map +1 -1
- package/dist/lib/infrastructure/di/index.js +15 -1
- package/dist/lib/infrastructure/di/index.js.map +1 -1
- package/dist/lib/infrastructure/di/tokens.d.ts +70 -0
- package/dist/lib/infrastructure/di/tokens.d.ts.map +1 -0
- package/dist/lib/infrastructure/di/tokens.js +58 -0
- package/dist/lib/infrastructure/di/tokens.js.map +1 -0
- package/dist/lib/infrastructure/index.d.ts +1 -0
- package/dist/lib/infrastructure/index.d.ts.map +1 -1
- package/dist/lib/infrastructure/index.js +2 -0
- package/dist/lib/infrastructure/index.js.map +1 -1
- package/dist/lib/infrastructure/logging/Logger.d.ts +51 -4
- package/dist/lib/infrastructure/logging/Logger.d.ts.map +1 -1
- package/dist/lib/infrastructure/logging/Logger.js +127 -2
- package/dist/lib/infrastructure/logging/Logger.js.map +1 -1
- package/dist/lib/infrastructure/mcp/McpClient.d.ts +36 -1
- package/dist/lib/infrastructure/mcp/McpClient.d.ts.map +1 -1
- package/dist/lib/infrastructure/mcp/McpClient.js +68 -2
- package/dist/lib/infrastructure/mcp/McpClient.js.map +1 -1
- package/dist/lib/infrastructure/services/LabelInferenceService.d.ts +33 -0
- package/dist/lib/infrastructure/services/LabelInferenceService.d.ts.map +1 -0
- package/dist/lib/infrastructure/services/LabelInferenceService.js +225 -0
- package/dist/lib/infrastructure/services/LabelInferenceService.js.map +1 -0
- package/dist/lib/infrastructure/services/MemoryService.d.ts +18 -1
- package/dist/lib/infrastructure/services/MemoryService.d.ts.map +1 -1
- package/dist/lib/infrastructure/services/MemoryService.js +117 -52
- package/dist/lib/infrastructure/services/MemoryService.js.map +1 -1
- package/dist/lib/infrastructure/services/SessionCaptureService.d.ts +74 -20
- package/dist/lib/infrastructure/services/SessionCaptureService.d.ts.map +1 -1
- package/dist/lib/infrastructure/services/SessionCaptureService.js +331 -22
- package/dist/lib/infrastructure/services/SessionCaptureService.js.map +1 -1
- package/dist/lib/infrastructure/services/index.d.ts +1 -0
- package/dist/lib/infrastructure/services/index.d.ts.map +1 -1
- package/dist/lib/infrastructure/services/index.js +4 -1
- package/dist/lib/infrastructure/services/index.js.map +1 -1
- package/dist/lib/infrastructure/utils/index.d.ts +10 -0
- package/dist/lib/infrastructure/utils/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/utils/index.js +26 -0
- package/dist/lib/infrastructure/utils/index.js.map +1 -0
- package/dist/lib/skills/github/github.d.ts +27 -0
- package/dist/lib/skills/github/github.d.ts.map +1 -0
- package/dist/lib/skills/github/github.js +408 -0
- package/dist/lib/skills/github/github.js.map +1 -0
- package/dist/lib/skills/shared/clients/GhCliClient.d.ts +17 -0
- package/dist/lib/skills/shared/clients/GhCliClient.d.ts.map +1 -0
- package/dist/lib/skills/shared/clients/GhCliClient.js +244 -0
- package/dist/lib/skills/shared/clients/GhCliClient.js.map +1 -0
- package/dist/lib/skills/shared/clients/McpClient.d.ts +12 -0
- package/dist/lib/skills/shared/clients/McpClient.d.ts.map +1 -1
- package/dist/lib/skills/shared/clients/McpClient.js +121 -76
- package/dist/lib/skills/shared/clients/McpClient.js.map +1 -1
- package/dist/lib/skills/shared/clients/index.d.ts +1 -0
- package/dist/lib/skills/shared/clients/index.d.ts.map +1 -1
- package/dist/lib/skills/shared/clients/index.js +4 -1
- package/dist/lib/skills/shared/clients/index.js.map +1 -1
- package/dist/lib/skills/shared/clients/interfaces/IGhCliClient.d.ts +56 -0
- package/dist/lib/skills/shared/clients/interfaces/IGhCliClient.d.ts.map +1 -0
- package/dist/lib/skills/shared/clients/interfaces/IGhCliClient.js +7 -0
- package/dist/lib/skills/shared/clients/interfaces/IGhCliClient.js.map +1 -0
- package/dist/lib/skills/shared/clients/interfaces/IZepClient.d.ts +7 -1
- package/dist/lib/skills/shared/clients/interfaces/IZepClient.d.ts.map +1 -1
- package/dist/lib/skills/shared/clients/interfaces/index.d.ts +1 -0
- package/dist/lib/skills/shared/clients/interfaces/index.d.ts.map +1 -1
- package/dist/lib/skills/shared/clients/interfaces/index.js +1 -0
- package/dist/lib/skills/shared/clients/interfaces/index.js.map +1 -1
- package/dist/lib/skills/shared/services/GitHubService.d.ts +169 -0
- package/dist/lib/skills/shared/services/GitHubService.d.ts.map +1 -0
- package/dist/lib/skills/shared/services/GitHubService.js +493 -0
- package/dist/lib/skills/shared/services/GitHubService.js.map +1 -0
- package/dist/lib/skills/shared/services/GitHubSyncService.d.ts +124 -0
- package/dist/lib/skills/shared/services/GitHubSyncService.d.ts.map +1 -0
- package/dist/lib/skills/shared/services/GitHubSyncService.js +412 -0
- package/dist/lib/skills/shared/services/GitHubSyncService.js.map +1 -0
- package/dist/lib/skills/shared/services/TaskCliService.d.ts +4 -2
- package/dist/lib/skills/shared/services/TaskCliService.d.ts.map +1 -1
- package/dist/lib/skills/shared/services/TaskCliService.js +90 -6
- package/dist/lib/skills/shared/services/TaskCliService.js.map +1 -1
- package/dist/lib/skills/shared/services/TaskService.d.ts.map +1 -1
- package/dist/lib/skills/shared/services/TaskService.js +199 -21
- package/dist/lib/skills/shared/services/TaskService.js.map +1 -1
- package/dist/lib/skills/shared/services/index.d.ts +2 -0
- package/dist/lib/skills/shared/services/index.d.ts.map +1 -1
- package/dist/lib/skills/shared/services/index.js +7 -1
- package/dist/lib/skills/shared/services/index.js.map +1 -1
- package/dist/lib/skills/shared/services/interfaces/ITaskService.d.ts +56 -1
- package/dist/lib/skills/shared/services/interfaces/ITaskService.d.ts.map +1 -1
- package/dist/lib/skills/shared/utils/index.d.ts +1 -0
- package/dist/lib/skills/shared/utils/index.d.ts.map +1 -1
- package/dist/lib/skills/shared/utils/index.js +9 -1
- package/dist/lib/skills/shared/utils/index.js.map +1 -1
- package/dist/lib/skills/shared/utils/issue-refs.d.ts +127 -0
- package/dist/lib/skills/shared/utils/issue-refs.d.ts.map +1 -0
- package/dist/lib/skills/shared/utils/issue-refs.js +179 -0
- package/dist/lib/skills/shared/utils/issue-refs.js.map +1 -0
- package/dist/lib/skills/tasks/tasks.d.ts +5 -2
- package/dist/lib/skills/tasks/tasks.d.ts.map +1 -1
- package/dist/lib/skills/tasks/tasks.js +8 -3
- package/dist/lib/skills/tasks/tasks.js.map +1 -1
- package/dist/opencode/lisa.js +5886 -1310
- package/dist/package.json +1 -1
- package/dist/project/.lisa/skills/github/SKILL.md +415 -0
- package/dist/project/.lisa/skills/lisa/SKILL.md +22 -0
- package/dist/project/.lisa/skills/memory/SKILL.md +3 -2
- package/package.json +6 -5
- package/dist/hooks/session-start.js +0 -5763
- package/dist/hooks/session-stop.js +0 -5348
- package/dist/hooks/user-prompt-submit.js +0 -5406
- package/dist/project/.claude/config.js +0 -40
|
@@ -1,15 +1,39 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ILisaServices, ILisaContext, IMemoryService, ISessionCaptureService, IEventEmitter, ILogger, ITaskService } from '../../domain';
|
|
2
|
+
import type { IRequestHandler } from '../mediator';
|
|
3
|
+
import { SessionStopRequest } from '../mediator/requests';
|
|
4
|
+
import type { ISessionStopResult } from '../mediator/requests';
|
|
2
5
|
/**
|
|
3
6
|
* Handler for session stop events.
|
|
4
7
|
* Captures session work and saves to memory.
|
|
8
|
+
*
|
|
9
|
+
* Implements IRequestHandler for use with the Mediator pattern.
|
|
5
10
|
*/
|
|
6
|
-
export declare class SessionStopHandler {
|
|
7
|
-
private readonly
|
|
11
|
+
export declare class SessionStopHandler implements IRequestHandler<SessionStopRequest, ISessionStopResult> {
|
|
12
|
+
private readonly context;
|
|
13
|
+
private readonly memory;
|
|
14
|
+
private readonly tasks?;
|
|
15
|
+
private readonly sessionCapture;
|
|
16
|
+
private readonly events;
|
|
17
|
+
private readonly logger?;
|
|
18
|
+
/**
|
|
19
|
+
* Create a new SessionStopHandler.
|
|
20
|
+
*
|
|
21
|
+
* @param services - Lisa services (legacy constructor for backward compatibility)
|
|
22
|
+
*/
|
|
8
23
|
constructor(services: ILisaServices);
|
|
9
24
|
/**
|
|
10
|
-
*
|
|
25
|
+
* Create a new SessionStopHandler with individual service injection.
|
|
26
|
+
*/
|
|
27
|
+
constructor(context: ILisaContext, memory: IMemoryService, sessionCapture: ISessionCaptureService, events: IEventEmitter, logger?: ILogger, tasks?: ITaskService);
|
|
28
|
+
/**
|
|
29
|
+
* Handle a session stop request.
|
|
11
30
|
* Captures work from the session and saves to memory.
|
|
12
31
|
*/
|
|
13
|
-
handle(
|
|
32
|
+
handle(request: SessionStopRequest): Promise<ISessionStopResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Generate suggestions based on current tasks and state.
|
|
35
|
+
* Suggests actions like syncing unlinked tasks to GitHub.
|
|
36
|
+
*/
|
|
37
|
+
private generateSuggestions;
|
|
14
38
|
}
|
|
15
39
|
//# sourceMappingURL=SessionStopHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionStopHandler.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/handlers/SessionStopHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"SessionStopHandler.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/handlers/SessionStopHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,OAAO,EACP,YAAY,EACb,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAA0B,MAAM,sBAAsB,CAAC;AAEvF;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,eAAe,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAElC;;;;OAIG;gBACS,QAAQ,EAAE,aAAa;IAEnC;;OAEG;gBAED,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,sBAAsB,EACtC,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,YAAY;IA6BtB;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuCtE;;;OAGG;YACW,mBAAmB;CA2ClC"}
|
|
@@ -5,30 +5,102 @@ const domain_1 = require("../../domain");
|
|
|
5
5
|
/**
|
|
6
6
|
* Handler for session stop events.
|
|
7
7
|
* Captures session work and saves to memory.
|
|
8
|
+
*
|
|
9
|
+
* Implements IRequestHandler for use with the Mediator pattern.
|
|
8
10
|
*/
|
|
9
11
|
class SessionStopHandler {
|
|
10
|
-
constructor(
|
|
11
|
-
|
|
12
|
+
constructor(contextOrServices, memory, sessionCapture, events, logger, tasks) {
|
|
13
|
+
if ('context' in contextOrServices && 'memory' in contextOrServices) {
|
|
14
|
+
const services = contextOrServices;
|
|
15
|
+
this.context = services.context;
|
|
16
|
+
this.memory = services.memory;
|
|
17
|
+
this.tasks = services.tasks;
|
|
18
|
+
this.sessionCapture = services.sessionCapture;
|
|
19
|
+
this.events = services.events;
|
|
20
|
+
this.logger = services.logger;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.context = contextOrServices;
|
|
24
|
+
this.memory = memory;
|
|
25
|
+
this.sessionCapture = sessionCapture;
|
|
26
|
+
this.events = events;
|
|
27
|
+
this.logger = logger;
|
|
28
|
+
this.tasks = tasks;
|
|
29
|
+
}
|
|
12
30
|
}
|
|
13
31
|
/**
|
|
14
|
-
* Handle a session stop
|
|
32
|
+
* Handle a session stop request.
|
|
15
33
|
* Captures work from the session and saves to memory.
|
|
16
34
|
*/
|
|
17
|
-
async handle(
|
|
18
|
-
const { context, memory, sessionCapture, events } = this.services;
|
|
35
|
+
async handle(request) {
|
|
19
36
|
// Delegate fact capture to dedicated service
|
|
20
|
-
const captured = await sessionCapture.captureSessionWork(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
37
|
+
const captured = await this.sessionCapture.captureSessionWork(request.sessionId, request.transcriptPath);
|
|
38
|
+
// Generate suggestions based on current state
|
|
39
|
+
const suggestions = await this.generateSuggestions();
|
|
40
|
+
if (captured.facts.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
message: 'No significant work to capture.',
|
|
43
|
+
factsCaptured: 0,
|
|
44
|
+
skipped: true,
|
|
45
|
+
skipReason: 'No facts captured from session',
|
|
46
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
47
|
+
};
|
|
24
48
|
}
|
|
49
|
+
// Save captured facts to memory
|
|
50
|
+
await this.memory.saveMemory(this.context.groupId, captured.facts);
|
|
25
51
|
// Emit internal event for any listeners
|
|
26
|
-
await events.emit({
|
|
52
|
+
await this.events.emit({
|
|
27
53
|
type: 'memory:save',
|
|
28
54
|
facts: captured.facts,
|
|
29
|
-
groupId: context.groupId,
|
|
55
|
+
groupId: this.context.groupId,
|
|
30
56
|
timestamp: (0, domain_1.toISOTimestamp)(),
|
|
31
57
|
});
|
|
58
|
+
return {
|
|
59
|
+
message: `Captured ${captured.facts.length} fact(s) from session.`,
|
|
60
|
+
factsCaptured: captured.facts.length,
|
|
61
|
+
skipped: false,
|
|
62
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate suggestions based on current tasks and state.
|
|
67
|
+
* Suggests actions like syncing unlinked tasks to GitHub.
|
|
68
|
+
*/
|
|
69
|
+
async generateSuggestions() {
|
|
70
|
+
const suggestions = [];
|
|
71
|
+
if (!this.tasks) {
|
|
72
|
+
return suggestions;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
// Get current tasks
|
|
76
|
+
const tasks = await this.tasks.getTasksSimple([this.context.groupId]);
|
|
77
|
+
// Count incomplete tasks without external links
|
|
78
|
+
const unlinkedIncompleteTasks = tasks.filter((t) => t.status !== 'done' && t.status !== 'closed' && !t.externalLink);
|
|
79
|
+
if (unlinkedIncompleteTasks.length > 0) {
|
|
80
|
+
suggestions.push({
|
|
81
|
+
action: 'sync-github-export',
|
|
82
|
+
message: `${unlinkedIncompleteTasks.length} incomplete task(s) could be tracked as GitHub issues`,
|
|
83
|
+
command: 'lisa github sync --export',
|
|
84
|
+
count: unlinkedIncompleteTasks.length,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// Count tasks with external links that might need sync
|
|
88
|
+
const linkedTasks = tasks.filter((t) => t.externalLink?.source === 'github');
|
|
89
|
+
if (linkedTasks.length > 0) {
|
|
90
|
+
// Suggest sync to keep status in sync
|
|
91
|
+
suggestions.push({
|
|
92
|
+
action: 'sync-github-bidirectional',
|
|
93
|
+
message: `${linkedTasks.length} task(s) linked to GitHub - sync to update status`,
|
|
94
|
+
command: 'lisa github sync',
|
|
95
|
+
count: linkedTasks.length,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
// Don't fail session stop if suggestions fail
|
|
101
|
+
this.logger?.debug?.('Failed to generate suggestions', { error });
|
|
102
|
+
}
|
|
103
|
+
return suggestions;
|
|
32
104
|
}
|
|
33
105
|
}
|
|
34
106
|
exports.SessionStopHandler = SessionStopHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionStopHandler.js","sourceRoot":"","sources":["../../../../src/lib/application/handlers/SessionStopHandler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"SessionStopHandler.js","sourceRoot":"","sources":["../../../../src/lib/application/handlers/SessionStopHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/interfaces/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/interfaces/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mediator Pattern Interfaces.
|
|
3
|
+
*
|
|
4
|
+
* The Mediator pattern provides a single entry point for all requests.
|
|
5
|
+
* Each request type maps to exactly one handler.
|
|
6
|
+
*
|
|
7
|
+
* This is different from events (fire-and-forget, multiple subscribers).
|
|
8
|
+
* Requests are "do something and return a result" (single handler, response required).
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Marker interface for requests.
|
|
12
|
+
* The generic parameter TResponse indicates what the handler returns.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* class GetUserRequest implements IRequest<User> {
|
|
16
|
+
* constructor(public readonly userId: string) {}
|
|
17
|
+
* }
|
|
18
|
+
*/
|
|
19
|
+
export interface IRequest<TResponse = void> {
|
|
20
|
+
/**
|
|
21
|
+
* Phantom type to carry the response type.
|
|
22
|
+
* Not used at runtime, only for type inference.
|
|
23
|
+
*/
|
|
24
|
+
readonly __responseType?: TResponse;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Handler for a specific request type.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* class GetUserHandler implements IRequestHandler<GetUserRequest, User> {
|
|
31
|
+
* async handle(request: GetUserRequest): Promise<User> {
|
|
32
|
+
* return this.userRepository.findById(request.userId);
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
*/
|
|
36
|
+
export interface IRequestHandler<TRequest extends IRequest<TResponse>, TResponse> {
|
|
37
|
+
/**
|
|
38
|
+
* Handle the request and return a response.
|
|
39
|
+
*/
|
|
40
|
+
handle(request: TRequest): Promise<TResponse>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Request type constructor.
|
|
44
|
+
* Used for registering handlers by request class.
|
|
45
|
+
*/
|
|
46
|
+
export interface IRequestType<TRequest extends IRequest<TResponse>, TResponse = unknown> {
|
|
47
|
+
new (...args: any[]): TRequest;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Mediator interface.
|
|
51
|
+
* Routes requests to their registered handlers.
|
|
52
|
+
*/
|
|
53
|
+
export interface IMediator {
|
|
54
|
+
/**
|
|
55
|
+
* Send a request to its handler and return the response.
|
|
56
|
+
*
|
|
57
|
+
* @param request - The request to handle
|
|
58
|
+
* @returns The handler's response
|
|
59
|
+
* @throws Error if no handler is registered for the request type
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* const user = await mediator.send(new GetUserRequest('123'));
|
|
63
|
+
*/
|
|
64
|
+
send<TResponse>(request: IRequest<TResponse>): Promise<TResponse>;
|
|
65
|
+
/**
|
|
66
|
+
* Register a handler for a request type.
|
|
67
|
+
*
|
|
68
|
+
* @param requestType - The request class constructor
|
|
69
|
+
* @param handler - The handler instance
|
|
70
|
+
*/
|
|
71
|
+
register<TRequest extends IRequest<TResponse>, TResponse>(requestType: IRequestType<TRequest, TResponse>, handler: IRequestHandler<TRequest, TResponse>): void;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=IMediator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IMediator.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/mediator/IMediator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAQ,CAAC,SAAS,GAAG,IAAI;IACxC;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;CACrC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS;IAC9E;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,SAAS,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO;IAErF,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;;;;OASG;IACH,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAElE;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,SAAS,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EACtD,WAAW,EAAE,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC9C,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,GAC5C,IAAI,CAAC;CACT"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Mediator Pattern Interfaces.
|
|
4
|
+
*
|
|
5
|
+
* The Mediator pattern provides a single entry point for all requests.
|
|
6
|
+
* Each request type maps to exactly one handler.
|
|
7
|
+
*
|
|
8
|
+
* This is different from events (fire-and-forget, multiple subscribers).
|
|
9
|
+
* Requests are "do something and return a result" (single handler, response required).
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
//# sourceMappingURL=IMediator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IMediator.js","sourceRoot":"","sources":["../../../../src/lib/application/mediator/IMediator.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mediator Implementation.
|
|
3
|
+
*
|
|
4
|
+
* Routes requests to their registered handlers.
|
|
5
|
+
*/
|
|
6
|
+
import type { IMediator, IRequest, IRequestHandler, IRequestType } from './IMediator';
|
|
7
|
+
/**
|
|
8
|
+
* Mediator implementation.
|
|
9
|
+
*/
|
|
10
|
+
export declare class Mediator implements IMediator {
|
|
11
|
+
private readonly handlers;
|
|
12
|
+
/**
|
|
13
|
+
* Send a request to its handler.
|
|
14
|
+
*/
|
|
15
|
+
send<TResponse>(request: IRequest<TResponse>): Promise<TResponse>;
|
|
16
|
+
/**
|
|
17
|
+
* Register a handler for a request type.
|
|
18
|
+
*/
|
|
19
|
+
register<TRequest extends IRequest<TResponse>, TResponse>(requestType: IRequestType<TRequest, TResponse>, handler: IRequestHandler<TRequest, TResponse>): void;
|
|
20
|
+
/**
|
|
21
|
+
* Check if a handler is registered for a request type.
|
|
22
|
+
*/
|
|
23
|
+
isRegistered<TRequest extends IRequest<TResponse>, TResponse>(requestType: IRequestType<TRequest, TResponse>): boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a new Mediator instance.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createMediator(): IMediator;
|
|
29
|
+
//# sourceMappingURL=Mediator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mediator.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/mediator/Mediator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEtF;;GAEG;AACH,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;IAEJ;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAYvE;;OAEG;IACH,QAAQ,CAAC,QAAQ,SAAS,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EACtD,WAAW,EAAE,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC9C,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,GAC5C,IAAI;IAYP;;OAEG;IACH,YAAY,CAAC,QAAQ,SAAS,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAC1D,WAAW,EAAE,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,GAC7C,OAAO;CAGX;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,SAAS,CAE1C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Mediator Implementation.
|
|
4
|
+
*
|
|
5
|
+
* Routes requests to their registered handlers.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.Mediator = void 0;
|
|
9
|
+
exports.createMediator = createMediator;
|
|
10
|
+
/**
|
|
11
|
+
* Mediator implementation.
|
|
12
|
+
*/
|
|
13
|
+
class Mediator {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.handlers = new Map();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Send a request to its handler.
|
|
19
|
+
*/
|
|
20
|
+
async send(request) {
|
|
21
|
+
const requestType = request.constructor;
|
|
22
|
+
const handler = this.handlers.get(requestType);
|
|
23
|
+
if (!handler) {
|
|
24
|
+
const name = requestType.name || 'UnknownRequest';
|
|
25
|
+
throw new Error(`No handler registered for request type: ${name}`);
|
|
26
|
+
}
|
|
27
|
+
return handler.handle(request);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Register a handler for a request type.
|
|
31
|
+
*/
|
|
32
|
+
register(requestType, handler) {
|
|
33
|
+
if (this.handlers.has(requestType)) {
|
|
34
|
+
const name = requestType.name || 'UnknownRequest';
|
|
35
|
+
throw new Error(`Handler already registered for request type: ${name}`);
|
|
36
|
+
}
|
|
37
|
+
this.handlers.set(requestType, handler);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if a handler is registered for a request type.
|
|
41
|
+
*/
|
|
42
|
+
isRegistered(requestType) {
|
|
43
|
+
return this.handlers.has(requestType);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.Mediator = Mediator;
|
|
47
|
+
/**
|
|
48
|
+
* Create a new Mediator instance.
|
|
49
|
+
*/
|
|
50
|
+
function createMediator() {
|
|
51
|
+
return new Mediator();
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=Mediator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mediator.js","sourceRoot":"","sources":["../../../../src/lib/application/mediator/Mediator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA2DH,wCAEC;AAzDD;;GAEG;AACH,MAAa,QAAQ;IAArB;QACmB,aAAQ,GAAG,IAAI,GAAG,EAGhC,CAAC;IA2CN,CAAC;IAzCC;;OAEG;IACH,KAAK,CAAC,IAAI,CAAY,OAA4B;QAChD,MAAM,WAAW,GAAG,OAAO,CAAC,WAA2D,CAAC;QACxF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAgE,CAAC;QAE9G,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,gBAAgB,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,QAAQ,CACN,WAA8C,EAC9C,OAA6C;QAE7C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAuD,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,gBAAgB,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,WAAuD,EACvD,OAAsD,CACvD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CACV,WAA8C;QAE9C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAuD,CAAC,CAAC;IACpF,CAAC;CACF;AA/CD,4BA+CC;AAED;;GAEG;AACH,SAAgB,cAAc;IAC5B,OAAO,IAAI,QAAQ,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mediator Pattern Implementation.
|
|
3
|
+
*
|
|
4
|
+
* Provides a single entry point for all request/response operations.
|
|
5
|
+
*/
|
|
6
|
+
export type { IRequest, IRequestHandler, IRequestType, IMediator } from './IMediator';
|
|
7
|
+
export { Mediator, createMediator } from './Mediator';
|
|
8
|
+
export { SessionStartRequest, SessionStopRequest, PromptSubmitRequest, } from './requests';
|
|
9
|
+
export type { ISessionStopResult, IPromptSubmitResult } from './requests';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/application/mediator/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGtF,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Mediator Pattern Implementation.
|
|
4
|
+
*
|
|
5
|
+
* Provides a single entry point for all request/response operations.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.PromptSubmitRequest = exports.SessionStopRequest = exports.SessionStartRequest = exports.createMediator = exports.Mediator = void 0;
|
|
9
|
+
// Implementation
|
|
10
|
+
var Mediator_1 = require("./Mediator");
|
|
11
|
+
Object.defineProperty(exports, "Mediator", { enumerable: true, get: function () { return Mediator_1.Mediator; } });
|
|
12
|
+
Object.defineProperty(exports, "createMediator", { enumerable: true, get: function () { return Mediator_1.createMediator; } });
|
|
13
|
+
// Request types
|
|
14
|
+
var requests_1 = require("./requests");
|
|
15
|
+
Object.defineProperty(exports, "SessionStartRequest", { enumerable: true, get: function () { return requests_1.SessionStartRequest; } });
|
|
16
|
+
Object.defineProperty(exports, "SessionStopRequest", { enumerable: true, get: function () { return requests_1.SessionStopRequest; } });
|
|
17
|
+
Object.defineProperty(exports, "PromptSubmitRequest", { enumerable: true, get: function () { return requests_1.PromptSubmitRequest; } });
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/application/mediator/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAKH,iBAAiB;AACjB,uCAAsD;AAA7C,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AAEjC,gBAAgB;AAChB,uCAIoB;AAHlB,+GAAA,mBAAmB,OAAA;AACnB,8GAAA,kBAAkB,OAAA;AAClB,+GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Submit Request.
|
|
3
|
+
*
|
|
4
|
+
* Request to process a user-submitted prompt.
|
|
5
|
+
*/
|
|
6
|
+
import type { IRequest } from '../IMediator';
|
|
7
|
+
import type { PermissionMode, ISOTimestamp, IRecursionResult } from '../../../domain';
|
|
8
|
+
/**
|
|
9
|
+
* Result from handling a prompt submit request.
|
|
10
|
+
*/
|
|
11
|
+
export interface IPromptSubmitResult {
|
|
12
|
+
/** The processed prompt content (may be enhanced) */
|
|
13
|
+
readonly content: string;
|
|
14
|
+
/** Whether the prompt should be blocked */
|
|
15
|
+
readonly blocked: boolean;
|
|
16
|
+
/** Reason for blocking, if applicable */
|
|
17
|
+
readonly blockReason?: string;
|
|
18
|
+
/** Whether plan mode recursion was detected */
|
|
19
|
+
readonly planModeRecursion: boolean;
|
|
20
|
+
/** Additional context to inject */
|
|
21
|
+
readonly additionalContext?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Recursion result if in plan mode.
|
|
24
|
+
* @deprecated Use planModeRecursion and additionalContext instead
|
|
25
|
+
*/
|
|
26
|
+
readonly recursion?: IRecursionResult;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Request to process a user-submitted prompt.
|
|
30
|
+
*/
|
|
31
|
+
export declare class PromptSubmitRequest implements IRequest<IPromptSubmitResult> {
|
|
32
|
+
/** The prompt content */
|
|
33
|
+
readonly content: string;
|
|
34
|
+
/** When the prompt was submitted */
|
|
35
|
+
readonly timestamp: ISOTimestamp;
|
|
36
|
+
/** Optional session identifier */
|
|
37
|
+
readonly sessionId?: string | undefined;
|
|
38
|
+
/** Current permission mode */
|
|
39
|
+
readonly permissionMode?: PermissionMode | undefined;
|
|
40
|
+
readonly __responseType?: IPromptSubmitResult;
|
|
41
|
+
constructor(
|
|
42
|
+
/** The prompt content */
|
|
43
|
+
content: string,
|
|
44
|
+
/** When the prompt was submitted */
|
|
45
|
+
timestamp: ISOTimestamp,
|
|
46
|
+
/** Optional session identifier */
|
|
47
|
+
sessionId?: string | undefined,
|
|
48
|
+
/** Current permission mode */
|
|
49
|
+
permissionMode?: PermissionMode | undefined);
|
|
50
|
+
/**
|
|
51
|
+
* Create from a prompt submit event.
|
|
52
|
+
*/
|
|
53
|
+
static fromEvent(event: {
|
|
54
|
+
content: string;
|
|
55
|
+
timestamp: ISOTimestamp;
|
|
56
|
+
sessionId?: string;
|
|
57
|
+
permissionMode?: PermissionMode;
|
|
58
|
+
}): PromptSubmitRequest;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=PromptSubmitRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptSubmitRequest.d.ts","sourceRoot":"","sources":["../../../../../src/lib/application/mediator/requests/PromptSubmitRequest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,+CAA+C;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAEpC,mCAAmC;IACnC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,QAAQ,CAAC,mBAAmB,CAAC;IAIrE,yBAAyB;aACT,OAAO,EAAE,MAAM;IAC/B,oCAAoC;aACpB,SAAS,EAAE,YAAY;IACvC,kCAAkC;aAClB,SAAS,CAAC,EAAE,MAAM;IAClC,8BAA8B;aACd,cAAc,CAAC,EAAE,cAAc;IAVjD,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;;IAG5C,yBAAyB;IACT,OAAO,EAAE,MAAM;IAC/B,oCAAoC;IACpB,SAAS,EAAE,YAAY;IACvC,kCAAkC;IAClB,SAAS,CAAC,EAAE,MAAM,YAAA;IAClC,8BAA8B;IACd,cAAc,CAAC,EAAE,cAAc,YAAA;IAGjD;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,YAAY,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,cAAc,CAAC;KACjC,GAAG,mBAAmB;CAQxB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Prompt Submit Request.
|
|
4
|
+
*
|
|
5
|
+
* Request to process a user-submitted prompt.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.PromptSubmitRequest = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Request to process a user-submitted prompt.
|
|
11
|
+
*/
|
|
12
|
+
class PromptSubmitRequest {
|
|
13
|
+
constructor(
|
|
14
|
+
/** The prompt content */
|
|
15
|
+
content,
|
|
16
|
+
/** When the prompt was submitted */
|
|
17
|
+
timestamp,
|
|
18
|
+
/** Optional session identifier */
|
|
19
|
+
sessionId,
|
|
20
|
+
/** Current permission mode */
|
|
21
|
+
permissionMode) {
|
|
22
|
+
this.content = content;
|
|
23
|
+
this.timestamp = timestamp;
|
|
24
|
+
this.sessionId = sessionId;
|
|
25
|
+
this.permissionMode = permissionMode;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create from a prompt submit event.
|
|
29
|
+
*/
|
|
30
|
+
static fromEvent(event) {
|
|
31
|
+
return new PromptSubmitRequest(event.content, event.timestamp, event.sessionId, event.permissionMode);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.PromptSubmitRequest = PromptSubmitRequest;
|
|
35
|
+
//# sourceMappingURL=PromptSubmitRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptSubmitRequest.js","sourceRoot":"","sources":["../../../../../src/lib/application/mediator/requests/PromptSubmitRequest.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA+BH;;GAEG;AACH,MAAa,mBAAmB;IAG9B;IACE,yBAAyB;IACT,OAAe;IAC/B,oCAAoC;IACpB,SAAuB;IACvC,kCAAkC;IAClB,SAAkB;IAClC,8BAA8B;IACd,cAA+B;QAN/B,YAAO,GAAP,OAAO,CAAQ;QAEf,cAAS,GAAT,SAAS,CAAc;QAEvB,cAAS,GAAT,SAAS,CAAS;QAElB,mBAAc,GAAd,cAAc,CAAiB;IAC9C,CAAC;IAEJ;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAKhB;QACC,OAAO,IAAI,mBAAmB,CAC5B,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,CACrB,CAAC;IACJ,CAAC;CACF;AA9BD,kDA8BC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Start Request.
|
|
3
|
+
*
|
|
4
|
+
* Request to load memory context at the start of a session.
|
|
5
|
+
*/
|
|
6
|
+
import type { IRequest } from '../IMediator';
|
|
7
|
+
import type { ISessionStartResult } from '../../interfaces';
|
|
8
|
+
import type { SessionTrigger, ISOTimestamp } from '../../../domain';
|
|
9
|
+
/**
|
|
10
|
+
* Request to start a session and load memory context.
|
|
11
|
+
*/
|
|
12
|
+
export declare class SessionStartRequest implements IRequest<ISessionStartResult> {
|
|
13
|
+
/** What triggered the session start */
|
|
14
|
+
readonly trigger: SessionTrigger;
|
|
15
|
+
/** When the session started */
|
|
16
|
+
readonly timestamp: ISOTimestamp;
|
|
17
|
+
/** Optional session identifier */
|
|
18
|
+
readonly sessionId?: string | undefined;
|
|
19
|
+
readonly __responseType?: ISessionStartResult;
|
|
20
|
+
constructor(
|
|
21
|
+
/** What triggered the session start */
|
|
22
|
+
trigger: SessionTrigger,
|
|
23
|
+
/** When the session started */
|
|
24
|
+
timestamp: ISOTimestamp,
|
|
25
|
+
/** Optional session identifier */
|
|
26
|
+
sessionId?: string | undefined);
|
|
27
|
+
/**
|
|
28
|
+
* Create from a session start event.
|
|
29
|
+
*/
|
|
30
|
+
static fromEvent(event: {
|
|
31
|
+
trigger: SessionTrigger;
|
|
32
|
+
timestamp: ISOTimestamp;
|
|
33
|
+
sessionId?: string;
|
|
34
|
+
}): SessionStartRequest;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=SessionStartRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionStartRequest.d.ts","sourceRoot":"","sources":["../../../../../src/lib/application/mediator/requests/SessionStartRequest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;GAEG;AACH,qBAAa,mBAAoB,YAAW,QAAQ,CAAC,mBAAmB,CAAC;IAIrE,uCAAuC;aACvB,OAAO,EAAE,cAAc;IACvC,+BAA+B;aACf,SAAS,EAAE,YAAY;IACvC,kCAAkC;aAClB,SAAS,CAAC,EAAE,MAAM;IARpC,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;;IAG5C,uCAAuC;IACvB,OAAO,EAAE,cAAc;IACvC,+BAA+B;IACf,SAAS,EAAE,YAAY;IACvC,kCAAkC;IAClB,SAAS,CAAC,EAAE,MAAM,YAAA;IAGpC;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE,cAAc,CAAC;QACxB,SAAS,EAAE,YAAY,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,mBAAmB;CAGxB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Session Start Request.
|
|
4
|
+
*
|
|
5
|
+
* Request to load memory context at the start of a session.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SessionStartRequest = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Request to start a session and load memory context.
|
|
11
|
+
*/
|
|
12
|
+
class SessionStartRequest {
|
|
13
|
+
constructor(
|
|
14
|
+
/** What triggered the session start */
|
|
15
|
+
trigger,
|
|
16
|
+
/** When the session started */
|
|
17
|
+
timestamp,
|
|
18
|
+
/** Optional session identifier */
|
|
19
|
+
sessionId) {
|
|
20
|
+
this.trigger = trigger;
|
|
21
|
+
this.timestamp = timestamp;
|
|
22
|
+
this.sessionId = sessionId;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create from a session start event.
|
|
26
|
+
*/
|
|
27
|
+
static fromEvent(event) {
|
|
28
|
+
return new SessionStartRequest(event.trigger, event.timestamp, event.sessionId);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.SessionStartRequest = SessionStartRequest;
|
|
32
|
+
//# sourceMappingURL=SessionStartRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionStartRequest.js","sourceRoot":"","sources":["../../../../../src/lib/application/mediator/requests/SessionStartRequest.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAMH;;GAEG;AACH,MAAa,mBAAmB;IAG9B;IACE,uCAAuC;IACvB,OAAuB;IACvC,+BAA+B;IACf,SAAuB;IACvC,kCAAkC;IAClB,SAAkB;QAJlB,YAAO,GAAP,OAAO,CAAgB;QAEvB,cAAS,GAAT,SAAS,CAAc;QAEvB,cAAS,GAAT,SAAS,CAAS;IACjC,CAAC;IAEJ;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAIhB;QACC,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAClF,CAAC;CACF;AAtBD,kDAsBC"}
|