@nexus-ai-nexoralabs/cli 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +16 -16
- package/LICENSE +21 -21
- package/README.md +135 -106
- package/dist/api/index.d.ts +4 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +9 -3
- package/dist/api/index.js.map +1 -1
- package/dist/chat/chatService.d.ts.map +1 -1
- package/dist/chat/chatService.js +22 -3
- package/dist/chat/chatService.js.map +1 -1
- package/dist/chat/conversationService.d.ts +7 -1
- package/dist/chat/conversationService.d.ts.map +1 -1
- package/dist/chat/conversationService.js +48 -15
- package/dist/chat/conversationService.js.map +1 -1
- package/dist/cli/agentRunner.d.ts.map +1 -1
- package/dist/cli/agentRunner.js +88 -8
- package/dist/cli/agentRunner.js.map +1 -1
- package/dist/cli/chatRunner.d.ts +65 -0
- package/dist/cli/chatRunner.d.ts.map +1 -0
- package/dist/cli/chatRunner.js +289 -0
- package/dist/cli/chatRunner.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/inputEngine.d.ts +10 -0
- package/dist/cli/inputEngine.d.ts.map +1 -1
- package/dist/cli/inputEngine.js +28 -1
- package/dist/cli/inputEngine.js.map +1 -1
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +89 -25
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/uiFormatters.d.ts +11 -1
- package/dist/cli/uiFormatters.d.ts.map +1 -1
- package/dist/cli/uiFormatters.js +253 -15
- package/dist/cli/uiFormatters.js.map +1 -1
- package/dist/intelligence/modelGateway.d.ts +1 -0
- package/dist/intelligence/modelGateway.d.ts.map +1 -1
- package/dist/intelligence/modelGateway.js +63 -6
- package/dist/intelligence/modelGateway.js.map +1 -1
- package/dist/intelligence/modelRegistry.d.ts +2 -2
- package/dist/intelligence/modelRegistry.d.ts.map +1 -1
- package/dist/intelligence/modelRegistry.js +72 -31
- package/dist/intelligence/modelRegistry.js.map +1 -1
- package/dist/intelligence/modelRouter.d.ts.map +1 -1
- package/dist/intelligence/modelRouter.js +62 -16
- package/dist/intelligence/modelRouter.js.map +1 -1
- package/dist/intelligence/providers/embeddedInferenceProvider.d.ts.map +1 -1
- package/dist/intelligence/providers/embeddedInferenceProvider.js +2224 -6
- package/dist/intelligence/providers/embeddedInferenceProvider.js.map +1 -1
- package/dist/intelligence/runtime/runtimeManager.d.ts +5 -0
- package/dist/intelligence/runtime/runtimeManager.d.ts.map +1 -1
- package/dist/intelligence/runtime/runtimeManager.js +64 -4
- package/dist/intelligence/runtime/runtimeManager.js.map +1 -1
- package/dist/orchestration/agentExecutionService.d.ts.map +1 -1
- package/dist/orchestration/agentExecutionService.js +22 -0
- package/dist/orchestration/agentExecutionService.js.map +1 -1
- package/dist/orchestration/agentTaskService.d.ts +24 -10
- package/dist/orchestration/agentTaskService.d.ts.map +1 -1
- package/dist/orchestration/agentTaskService.js +76 -13
- package/dist/orchestration/agentTaskService.js.map +1 -1
- package/dist/orchestration/codingAgentService.d.ts.map +1 -1
- package/dist/orchestration/codingAgentService.js +2 -0
- package/dist/orchestration/codingAgentService.js.map +1 -1
- package/dist/orchestration/goalCompletionVerifier.d.ts +9 -0
- package/dist/orchestration/goalCompletionVerifier.d.ts.map +1 -1
- package/dist/orchestration/goalCompletionVerifier.js +131 -9
- package/dist/orchestration/goalCompletionVerifier.js.map +1 -1
- package/dist/orchestration/index.d.ts +16 -2
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +20 -4
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/placeholderDetector.d.ts +74 -0
- package/dist/orchestration/placeholderDetector.d.ts.map +1 -0
- package/dist/orchestration/placeholderDetector.js +741 -0
- package/dist/orchestration/placeholderDetector.js.map +1 -0
- package/dist/orchestration/planner.d.ts.map +1 -1
- package/dist/orchestration/planner.js +94 -55
- package/dist/orchestration/planner.js.map +1 -1
- package/dist/orchestration/projectOrchestrator.d.ts +63 -0
- package/dist/orchestration/projectOrchestrator.d.ts.map +1 -0
- package/dist/orchestration/projectOrchestrator.js +555 -0
- package/dist/orchestration/projectOrchestrator.js.map +1 -0
- package/dist/orchestration/taskDecompositionService.d.ts +36 -0
- package/dist/orchestration/taskDecompositionService.d.ts.map +1 -0
- package/dist/orchestration/taskDecompositionService.js +367 -0
- package/dist/orchestration/taskDecompositionService.js.map +1 -0
- package/dist/orchestration/taskDecompositionTypes.d.ts +62 -0
- package/dist/orchestration/taskDecompositionTypes.d.ts.map +1 -0
- package/dist/orchestration/taskDecompositionTypes.js +5 -0
- package/dist/orchestration/taskDecompositionTypes.js.map +1 -0
- package/dist/preview/previewServer.d.ts.map +1 -1
- package/dist/preview/previewServer.js +28 -7
- package/dist/preview/previewServer.js.map +1 -1
- package/dist/preview/previewService.d.ts +32 -3
- package/dist/preview/previewService.d.ts.map +1 -1
- package/dist/preview/previewService.js +370 -108
- package/dist/preview/previewService.js.map +1 -1
- package/dist/preview/previewTypes.d.ts +1 -1
- package/dist/preview/previewTypes.d.ts.map +1 -1
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/migration.d.ts.map +1 -1
- package/dist/storage/migration.js +79 -0
- package/dist/storage/migration.js.map +1 -1
- package/dist/storage/repositories/agentTaskRepository.d.ts +13 -0
- package/dist/storage/repositories/agentTaskRepository.d.ts.map +1 -1
- package/dist/storage/repositories/agentTaskRepository.js +87 -25
- package/dist/storage/repositories/agentTaskRepository.js.map +1 -1
- package/dist/storage/repositories/conversationRepository.d.ts +5 -1
- package/dist/storage/repositories/conversationRepository.d.ts.map +1 -1
- package/dist/storage/repositories/conversationRepository.js +69 -0
- package/dist/storage/repositories/conversationRepository.js.map +1 -1
- package/dist/storage/repositories/messageRepository.d.ts +3 -0
- package/dist/storage/repositories/messageRepository.d.ts.map +1 -1
- package/dist/storage/repositories/messageRepository.js +29 -0
- package/dist/storage/repositories/messageRepository.js.map +1 -1
- package/dist/storage/repositories/taskArtifactRepository.d.ts +19 -0
- package/dist/storage/repositories/taskArtifactRepository.d.ts.map +1 -0
- package/dist/storage/repositories/taskArtifactRepository.js +82 -0
- package/dist/storage/repositories/taskArtifactRepository.js.map +1 -0
- package/dist/storage/repositories/types.d.ts +32 -0
- package/dist/storage/repositories/types.d.ts.map +1 -1
- package/dist/tools/adapters/filesystemAdapter.d.ts.map +1 -1
- package/dist/tools/adapters/filesystemAdapter.js +8 -1
- package/dist/tools/adapters/filesystemAdapter.js.map +1 -1
- package/dist/ui/public/app.js +777 -777
- package/dist/ui/public/index.html +117 -117
- package/dist/ui/public/styles.css +413 -413
- package/package.json +64 -63
package/.env.example
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
# NEXUS AI Application Environment Configuration
|
|
2
|
-
|
|
3
|
-
# Server / API Port
|
|
4
|
-
PORT=3000
|
|
5
|
-
|
|
6
|
-
# Environment Mode (development | production | test)
|
|
7
|
-
NODE_ENV=development
|
|
8
|
-
|
|
9
|
-
# Local Ollama Service URL
|
|
10
|
-
OLLAMA_HOST=http://127.0.0.1:11434
|
|
11
|
-
|
|
12
|
-
# Data & Persistence Directory
|
|
13
|
-
DATABASE_PATH=./data/nexus.sqlite
|
|
14
|
-
|
|
15
|
-
# Logging Level (debug | info | warn | error)
|
|
16
|
-
LOG_LEVEL=info
|
|
1
|
+
# NEXUS AI Application Environment Configuration
|
|
2
|
+
|
|
3
|
+
# Server / API Port
|
|
4
|
+
PORT=3000
|
|
5
|
+
|
|
6
|
+
# Environment Mode (development | production | test)
|
|
7
|
+
NODE_ENV=development
|
|
8
|
+
|
|
9
|
+
# Local Ollama Service URL
|
|
10
|
+
OLLAMA_HOST=http://127.0.0.1:11434
|
|
11
|
+
|
|
12
|
+
# Data & Persistence Directory
|
|
13
|
+
DATABASE_PATH=./data/nexus.sqlite
|
|
14
|
+
|
|
15
|
+
# Logging Level (debug | info | warn | error)
|
|
16
|
+
LOG_LEVEL=info
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 NEXUS AI Team
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NEXUS AI Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,106 +1,135 @@
|
|
|
1
|
-
# NEXUS AI — Local-First AI Workstation CLI
|
|
2
|
-
|
|
3
|
-
NEXUS AI is a local-first, cross-platform AI workstation CLI that orchestrates local language models (via Ollama), retrieves private knowledge (RAG), manages project context, executes permission-controlled tools, and performs full coding-agent workflows — entirely on your own machine.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
### Requirements
|
|
8
|
-
|
|
9
|
-
- **Node.js** `>=20.0.0` — [nodejs.org](https://nodejs.org)
|
|
10
|
-
- **Ollama** — [ollama.com/download](https://ollama.com/download)
|
|
11
|
-
- At least one local model (e.g. `qwen2.5:3b`)
|
|
12
|
-
|
|
13
|
-
### Install NEXUS AI CLI
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npm install -g @nexus-ai-nexoralabs/cli
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
### Install a local model (if you haven't already)
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
ollama pull qwen2.5:3b
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### Launch NEXUS
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
nexus
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
That's it. NEXUS will initialize your workspace and configuration automatically on first run.
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## First-Run Experience
|
|
36
|
-
|
|
37
|
-
When you run `nexus` for the first time, NEXUS will:
|
|
38
|
-
|
|
39
|
-
1. Create your personal workspace at `~/NEXUS-Workspace` (Windows: `%USERPROFILE%\NEXUS-Workspace`)
|
|
40
|
-
2. Initialize the local database at `%APPDATA%\NEXUS AI\data\nexus.sqlite` (Windows) or `~/.nexus-ai/data/nexus.sqlite`
|
|
41
|
-
3. Detect available Ollama models
|
|
42
|
-
4. Display the interactive dashboard
|
|
43
|
-
|
|
44
|
-
If Ollama is not installed or not running, NEXUS will display a clear, actionable setup guide instead of crashing.
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## CLI Commands
|
|
49
|
-
|
|
50
|
-
Once inside NEXUS:
|
|
51
|
-
|
|
52
|
-
| Command
|
|
53
|
-
|
|
54
|
-
| `/help`
|
|
55
|
-
| `/models`
|
|
56
|
-
| `/model <id>`
|
|
57
|
-
| `/tasks`
|
|
58
|
-
| `/preview`
|
|
59
|
-
| `/preview stop` | Stop the preview server
|
|
60
|
-
| `/clear`
|
|
61
|
-
| `/exit`
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## Subsystem Architecture
|
|
66
|
-
|
|
67
|
-
- `src/config/` — Environment configuration & production path resolution
|
|
68
|
-
- `src/storage/` — SQLite persistence & workspace abstraction
|
|
69
|
-
- `src/intelligence/` — Local Ollama gateway & model registry
|
|
70
|
-
- `src/knowledge/` — RAG document indexing & retrieval
|
|
71
|
-
- `src/tools/` — Controlled filesystem, search & terminal adapters
|
|
72
|
-
- `src/orchestration/` — Agent planning, execution & verification
|
|
73
|
-
- `src/preview/` — Local web project preview server
|
|
74
|
-
- `src/api/` — Application API contracts & health checks
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Developer Setup
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
# 1. Clone and install
|
|
82
|
-
npm install
|
|
83
|
-
|
|
84
|
-
# 2. Copy environment template
|
|
85
|
-
cp .env.example .env
|
|
86
|
-
|
|
87
|
-
# 3. Type check
|
|
88
|
-
npm run typecheck
|
|
89
|
-
|
|
90
|
-
# 4. Lint
|
|
91
|
-
npm run lint
|
|
92
|
-
|
|
93
|
-
# 5. Run tests
|
|
94
|
-
npm test
|
|
95
|
-
|
|
96
|
-
# 6. Build
|
|
97
|
-
npm run build
|
|
98
|
-
|
|
99
|
-
# 7. Run CLI in development mode
|
|
100
|
-
npm run agent
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
##
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
1
|
+
# NEXUS AI — Local-First AI Workstation CLI
|
|
2
|
+
|
|
3
|
+
NEXUS AI is a local-first, cross-platform AI workstation CLI that orchestrates local language models (via Ollama), retrieves private knowledge (RAG), manages project context, executes permission-controlled tools, and performs full coding-agent workflows — entirely on your own machine.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### Requirements
|
|
8
|
+
|
|
9
|
+
- **Node.js** `>=20.0.0` — [nodejs.org](https://nodejs.org)
|
|
10
|
+
- **Ollama** — [ollama.com/download](https://ollama.com/download)
|
|
11
|
+
- At least one local model (e.g. `qwen2.5:3b`)
|
|
12
|
+
|
|
13
|
+
### Install NEXUS AI CLI
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g @nexus-ai-nexoralabs/cli
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Install a local model (if you haven't already)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
ollama pull qwen2.5:3b
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Launch NEXUS
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
nexus
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
That's it. NEXUS will initialize your workspace and configuration automatically on first run.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## First-Run Experience
|
|
36
|
+
|
|
37
|
+
When you run `nexus` for the first time, NEXUS will:
|
|
38
|
+
|
|
39
|
+
1. Create your personal workspace at `~/NEXUS-Workspace` (Windows: `%USERPROFILE%\NEXUS-Workspace`)
|
|
40
|
+
2. Initialize the local database at `%APPDATA%\NEXUS AI\data\nexus.sqlite` (Windows) or `~/.nexus-ai/data/nexus.sqlite`
|
|
41
|
+
3. Detect available Ollama models
|
|
42
|
+
4. Display the interactive dashboard
|
|
43
|
+
|
|
44
|
+
If Ollama is not installed or not running, NEXUS will display a clear, actionable setup guide instead of crashing.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## CLI Commands
|
|
49
|
+
|
|
50
|
+
Once inside NEXUS:
|
|
51
|
+
|
|
52
|
+
| Command | Description |
|
|
53
|
+
| --------------- | ---------------------------------------- |
|
|
54
|
+
| `/help` | Show all available commands |
|
|
55
|
+
| `/models` | List available local AI models |
|
|
56
|
+
| `/model <id>` | Switch to a specific model |
|
|
57
|
+
| `/tasks` | Show recent tasks |
|
|
58
|
+
| `/preview` | Preview the latest completed web project |
|
|
59
|
+
| `/preview stop` | Stop the preview server |
|
|
60
|
+
| `/clear` | Clear the screen |
|
|
61
|
+
| `/exit` | Exit NEXUS |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Subsystem Architecture
|
|
66
|
+
|
|
67
|
+
- `src/config/` — Environment configuration & production path resolution
|
|
68
|
+
- `src/storage/` — SQLite persistence & workspace abstraction
|
|
69
|
+
- `src/intelligence/` — Local Ollama gateway & model registry
|
|
70
|
+
- `src/knowledge/` — RAG document indexing & retrieval
|
|
71
|
+
- `src/tools/` — Controlled filesystem, search & terminal adapters
|
|
72
|
+
- `src/orchestration/` — Agent planning, execution & verification
|
|
73
|
+
- `src/preview/` — Local web project preview server
|
|
74
|
+
- `src/api/` — Application API contracts & health checks
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Developer Setup
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# 1. Clone and install
|
|
82
|
+
npm install
|
|
83
|
+
|
|
84
|
+
# 2. Copy environment template
|
|
85
|
+
cp .env.example .env
|
|
86
|
+
|
|
87
|
+
# 3. Type check
|
|
88
|
+
npm run typecheck
|
|
89
|
+
|
|
90
|
+
# 4. Lint
|
|
91
|
+
npm run lint
|
|
92
|
+
|
|
93
|
+
# 5. Run tests
|
|
94
|
+
npm test
|
|
95
|
+
|
|
96
|
+
# 6. Build
|
|
97
|
+
npm run build
|
|
98
|
+
|
|
99
|
+
# 7. Run CLI in development mode
|
|
100
|
+
npm run agent
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Testing & Acceptance Verification
|
|
104
|
+
|
|
105
|
+
NEXUS uses a multi-tier verification strategy:
|
|
106
|
+
|
|
107
|
+
### A. Unit & Fast Integration Tests
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npm test
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Runs unit tests for isolated subsystems (routing, parsing, approval gate, tool execution, storage, config).
|
|
114
|
+
|
|
115
|
+
### B. In-Process Integration Acceptance
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
npx tsx scripts/verify_decomposition_acceptance.ts
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Tests end-to-end task decomposition, multi-unit dependency resolution, and preview gating in-process via `ApplicationApi`.
|
|
122
|
+
|
|
123
|
+
### C. Real Installed CLI Black-Box End-to-End Acceptance
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npm run test:e2e:cli
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Spawns the actual installed `nexus` executable as a separate OS process, submitting prompts through interactive stdin, verifying dynamic CLI stdout, task plan cards, real child unit execution, `/tasks`, `/preview`, live HTTP preview responses, substance checks, and process restart/resume.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## License
|
|
134
|
+
|
|
135
|
+
MIT
|
package/dist/api/index.d.ts
CHANGED
|
@@ -43,6 +43,10 @@ export declare class ApplicationApi {
|
|
|
43
43
|
approvals?: HumanApprovalService;
|
|
44
44
|
/** Coding agent service (P6-D) — exposed from Orchestrator. */
|
|
45
45
|
codingAgent?: CodingAgentService;
|
|
46
|
+
/** Task decomposition service — analyzes goals for multi-task orchestration. */
|
|
47
|
+
decomposition?: import('../orchestration/taskDecompositionService.js').TaskDecompositionService;
|
|
48
|
+
/** Project task orchestrator — coordinates queue execution and verification. */
|
|
49
|
+
projectOrchestrator?: import('../orchestration/projectOrchestrator.js').ProjectTaskOrchestrator;
|
|
46
50
|
/** Tool registry and permission authorization gateway. */
|
|
47
51
|
tools: ToolGateway;
|
|
48
52
|
/** Workspace service — exposes validateWorkspace for safe consumer use. */
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAkB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEzJ,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,qBAAa,cAAc;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
|
package/dist/api/index.js
CHANGED
|
@@ -29,6 +29,10 @@ export class ApplicationApi {
|
|
|
29
29
|
approvals;
|
|
30
30
|
/** Coding agent service (P6-D) — exposed from Orchestrator. */
|
|
31
31
|
codingAgent;
|
|
32
|
+
/** Task decomposition service — analyzes goals for multi-task orchestration. */
|
|
33
|
+
decomposition;
|
|
34
|
+
/** Project task orchestrator — coordinates queue execution and verification. */
|
|
35
|
+
projectOrchestrator;
|
|
32
36
|
/** Tool registry and permission authorization gateway. */
|
|
33
37
|
tools;
|
|
34
38
|
/** Workspace service — exposes validateWorkspace for safe consumer use. */
|
|
@@ -65,12 +69,14 @@ export class ApplicationApi {
|
|
|
65
69
|
this.conversations = new ConversationService(this.storage.conversations, this.config.logLevel);
|
|
66
70
|
this.messages = new MessageService(this.storage.messages, this.config.logLevel);
|
|
67
71
|
this.chat = new ChatService(this.conversations, this.messages, this.intelligence.gateway, this.knowledge.rag, this.config.logLevel);
|
|
68
|
-
await this.orchestrator.initialize(this.storage.agentTasks, this.tools, this.intelligence.gateway, this.storage.approvals);
|
|
72
|
+
await this.orchestrator.initialize(this.storage.agentTasks, this.tools, this.intelligence.gateway, this.storage.approvals, this.storage.artifacts, this.config.workspaceRoot);
|
|
69
73
|
this.tasks = this.orchestrator.tasks;
|
|
70
74
|
this.execution = this.orchestrator.execution;
|
|
71
75
|
this.planner = this.orchestrator.planner;
|
|
72
76
|
this.approvals = this.orchestrator.approvals;
|
|
73
77
|
this.codingAgent = this.orchestrator.codingAgent;
|
|
78
|
+
this.decomposition = this.orchestrator.decomposition;
|
|
79
|
+
this.projectOrchestrator = this.orchestrator.projectOrchestrator;
|
|
74
80
|
await this.tools.initialize(this.tasks, this.config.workspaceRoot);
|
|
75
81
|
// Startup Crash Recovery: recover interrupted active tasks left in transient execution states
|
|
76
82
|
const transientStates = ['executing', 'observing', 'verifying'];
|
|
@@ -85,8 +91,8 @@ export class ApplicationApi {
|
|
|
85
91
|
}
|
|
86
92
|
// Wire up FirstRunService using the settings repository
|
|
87
93
|
this.firstRun = new FirstRunService(this.storage.settings, this.config.logLevel);
|
|
88
|
-
// Initialize Local Web Project Preview Service (P7-H)
|
|
89
|
-
this.preview = new PreviewService(this.storage.agentTasks, this.config.workspaceRoot, this.config.logLevel);
|
|
94
|
+
// Initialize Local Web Project Preview Service (P7-H) with TaskArtifactRepository
|
|
95
|
+
this.preview = new PreviewService(this.storage.agentTasks, this.config.workspaceRoot, this.config.logLevel, this.storage.artifacts);
|
|
90
96
|
return this.getHealthReport();
|
|
91
97
|
}
|
|
92
98
|
getHealthReport() {
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAiBvE,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAiBvE,MAAM,OAAO,cAAc;IAmCL;IAlCZ,OAAO,CAAiB;IACzB,YAAY,CAAsB;IAClC,SAAS,CAAkB;IAC3B,QAAQ,CAAkB;IAC1B,aAAa,CAAuB;IACpC,QAAQ,CAAkB;IAC1B,IAAI,CAAe;IAC1B,gEAAgE;IACzD,KAAK,CAAoB;IAChC,gEAAgE;IACzD,SAAS,CAAyB;IACzC,iEAAiE;IAC1D,OAAO,CAAwB;IACtC,iEAAiE;IAC1D,SAAS,CAAwB;IACxC,+DAA+D;IACxD,WAAW,CAAsB;IACxC,gFAAgF;IACzE,aAAa,CAAmF;IACvG,gFAAgF;IACzE,mBAAmB,CAA6E;IACvG,0DAA0D;IACnD,KAAK,CAAc;IAC1B,2EAA2E;IACpE,SAAS,CAAmB;IACnC,sEAAsE;IAC/D,QAAQ,CAAmB;IAClC,gDAAgD;IACzC,OAAO,CAAkB;IAExB,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,MAAM,GAAG,KAAK,CAAC;IACf,eAAe,CAA6B;IAEpD,YAAoB,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/G,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,OAAe;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,iFAAiF;QACjF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAErF,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAExD,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChF,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/F,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEpI,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAChC,IAAI,CAAC,OAAO,CAAC,UAAU,EACvB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,YAAY,CAAC,OAAO,EACzB,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,IAAI,CAAC,MAAM,CAAC,aAAa,CAC1B,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;QACjE,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAEnE,8FAA8F;QAC9F,MAAM,eAAe,GAAgE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC7H,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;oBACxB,aAAa,EAAE,yBAAyB;oBACxC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEjF,kFAAkF;QAClF,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEpI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAED,eAAe;QACb,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;SAC9B,CAAC;QAEF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;QACpE,MAAM,aAAa,GAAkC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1G,OAAO;YACL,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE;gBACN,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACpC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gBAClC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aACvC;YACD,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACjD,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACnD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAEzE,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;QAC/E,MAAM,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE3D,2CAA2C;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAE1E,IAAI,qBAAqB,GAAG,SAAS,CAAC;QACtC,IAAI,sBAAsB,GAAG,SAAS,CAAC;QAEvC,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACzF,qBAAqB,GAAG,KAAK,CAAC,SAAS,CAAC;QAC1C,CAAC;QACD,IAAI,eAAe,IAAI,eAAe,KAAK,cAAc,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAC1F,sBAAsB,GAAG,KAAK,CAAC,SAAS,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,iBAAiB,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,mBAAmB,CAAC;QAC3H,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,KAAK,OAAO,CAAC;QACtD,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAEpD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YACjD,QAAQ,EAAE,IAAI;YACd,IAAI;YACJ,WAAW;YACX,YAAY;YACZ,cAAc;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,QAAQ,EAAE,IAAI;YACd,aAAa;YACb,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,aAAa;YACb,iBAAiB;YACjB,cAAc;YACd,qBAAqB;YACrB,eAAe;YACf,sBAAsB;YACtB,iBAAiB;YACjB,kBAAkB;YAClB,eAAe;YACf,aAAa;SACd,CAAC,CAAC;QAEH,qDAAqD;QACrD,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,mBAAmB;QAOjB,MAAM,KAAK,GAMN,EAAE,CAAC;QAER,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,YAAY,CAAC,CAAC,EAAE,EAAE;gBACtB,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,kBAAkB,CAAC,CAAC,KAAK,GAAG;gBACnC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,KAAK,EAAE;gBAC9C,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,iBAAiB,CAAC,CAAC,EAAE,EAAE;oBAC3B,IAAI,EAAE,kBAAkB;oBACxB,KAAK,EAAE,oBAAoB,CAAC,CAAC,KAAK,GAAG;oBACrC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,EAAE;oBAC1B,SAAS,EAAE,CAAC,CAAC,WAAW;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;QAC/D,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,YAAY,CAAC,CAAC,UAAU,EAAE;gBAC9B,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,sBAAsB,CAAC,CAAC,MAAM,EAAE;gBACvC,MAAM,EAAE,eAAe,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,MAAM,EAAE;gBACtE,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatService.d.ts","sourceRoot":"","sources":["../../src/chat/chatService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,qBAAa,WAAW;IAMpB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,SAAS,CAAC;IARpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,eAAe,CAAyB;gBAGtC,mBAAmB,EAAE,mBAAmB,EACxC,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,SAAS,YAAA,EAC7B,QAAQ,GAAE,QAAiB;IAKvB,WAAW,CACf,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,EAC1C,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,cAAc,CAAC;QAAC,SAAS,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"chatService.d.ts","sourceRoot":"","sources":["../../src/chat/chatService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,qBAAa,WAAW;IAMpB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,SAAS,CAAC;IARpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,eAAe,CAAyB;gBAGtC,mBAAmB,EAAE,mBAAmB,EACxC,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,SAAS,YAAA,EAC7B,QAAQ,GAAE,QAAiB;IAKvB,WAAW,CACf,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,EAC1C,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,cAAc,CAAC;QAAC,SAAS,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC;CA4L7H"}
|
package/dist/chat/chatService.js
CHANGED
|
@@ -19,8 +19,21 @@ export class ChatService {
|
|
|
19
19
|
}
|
|
20
20
|
async sendMessage(options, onEvent, externalSignal) {
|
|
21
21
|
const { conversationId, userPrompt } = options;
|
|
22
|
-
// 1. Conversation validation
|
|
22
|
+
// 1. Conversation validation & auto-title update if new
|
|
23
23
|
const conversation = this.conversationService.getConversation(conversationId);
|
|
24
|
+
const existingMessages = this.messageService.getMessages(conversation.id);
|
|
25
|
+
if (existingMessages.length === 0 ||
|
|
26
|
+
conversation.title === 'New Chat' ||
|
|
27
|
+
conversation.title === 'new-chat' ||
|
|
28
|
+
conversation.title === '') {
|
|
29
|
+
const generatedTitle = this.conversationService.generateTitle(userPrompt);
|
|
30
|
+
try {
|
|
31
|
+
this.conversationService.updateConversation(conversation.id, { title: generatedTitle });
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
this.logger.warn(`Failed to auto-update conversation title: ${String(err)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
24
37
|
// 2. Persist user message
|
|
25
38
|
const userMessage = this.messageService.addMessage({
|
|
26
39
|
conversationId: conversation.id,
|
|
@@ -71,16 +84,22 @@ export class ChatService {
|
|
|
71
84
|
});
|
|
72
85
|
}
|
|
73
86
|
try {
|
|
74
|
-
this.logger.info(`Starting
|
|
87
|
+
this.logger.info(`[ChatService] Starting chat for conversation '${conversation.id}'`);
|
|
88
|
+
let loggedStreamStart = false;
|
|
75
89
|
const gatewayResponse = await this.modelGateway.generateStream({
|
|
76
90
|
prompt: formatted.prompt,
|
|
77
91
|
system: formatted.system,
|
|
78
92
|
modelId: options.modelId,
|
|
93
|
+
taskCapability: options.modelId ? undefined : 'chat',
|
|
79
94
|
temperature: options.temperature,
|
|
80
|
-
timeoutMs: options.timeoutMs ||
|
|
95
|
+
timeoutMs: options.timeoutMs || 120000,
|
|
81
96
|
allowFallback: true,
|
|
82
97
|
}, (chunk) => {
|
|
83
98
|
if (chunk.delta) {
|
|
99
|
+
if (!loggedStreamStart) {
|
|
100
|
+
loggedStreamStart = true;
|
|
101
|
+
this.logger.info(`[ChatService] Streaming response to CLI`);
|
|
102
|
+
}
|
|
84
103
|
accumulatedText += chunk.delta;
|
|
85
104
|
if (onEvent) {
|
|
86
105
|
onEvent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../src/chat/chatService.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAuB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAA+B,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAY,MAAM,qBAAqB,CAAC;AA4BvD,MAAM,OAAO,WAAW;IAMZ;IACA;IACA;IACA;IARF,MAAM,CAAS;IACf,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IACtC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAEhD,YACU,mBAAwC,EACxC,cAA8B,EAC9B,YAA0B,EAC1B,SAAqB,EAC7B,WAAqB,MAAM;QAJnB,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,cAAS,GAAT,SAAS,CAAY;QAG7B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAA2B,EAC3B,OAA0C,EAC1C,cAA4B;QAE5B,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAE/C,
|
|
1
|
+
{"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../src/chat/chatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ConversationRepository } from '../storage/repositories/conversationRepository.js';
|
|
2
|
-
import type { Conversation } from '../storage/repositories/types.js';
|
|
2
|
+
import type { Conversation, ConversationSummary } from '../storage/repositories/types.js';
|
|
3
3
|
import { LogLevel } from '../common/logger.js';
|
|
4
4
|
export interface CreateConversationDto {
|
|
5
5
|
id?: string;
|
|
@@ -19,7 +19,13 @@ export declare class ConversationService {
|
|
|
19
19
|
createConversation(dto?: CreateConversationDto): Conversation;
|
|
20
20
|
getConversation(id: string): Conversation;
|
|
21
21
|
listConversations(projectId?: string | null): Conversation[];
|
|
22
|
+
listAllConversations(limit?: number, offset?: number): ConversationSummary[];
|
|
23
|
+
searchConversations(query: string, limit?: number): ConversationSummary[];
|
|
22
24
|
updateConversation(id: string, updates: UpdateConversationDto): Conversation;
|
|
23
25
|
deleteConversation(id: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Deterministically generates a clean, concise conversation title from the first user prompt.
|
|
28
|
+
*/
|
|
29
|
+
generateTitle(prompt: string): string;
|
|
24
30
|
}
|
|
25
31
|
//# sourceMappingURL=conversationService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversationService.d.ts","sourceRoot":"","sources":["../../src/chat/conversationService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"conversationService.d.ts","sourceRoot":"","sources":["../../src/chat/conversationService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,gBAAgB;IAH1B,OAAO,CAAC,MAAM,CAAS;gBAGb,gBAAgB,EAAE,sBAAsB,EAChD,QAAQ,GAAE,QAAiB;IAK7B,kBAAkB,CAAC,GAAG,GAAE,qBAA0B,GAAG,YAAY;IAcjE,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY;IAQzC,iBAAiB,CAAC,SAAS,GAAE,MAAM,GAAG,IAAW,GAAG,YAAY,EAAE;IAIlE,oBAAoB,CAAC,KAAK,SAAM,EAAE,MAAM,SAAI,GAAG,mBAAmB,EAAE;IAIpE,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,mBAAmB,EAAE;IAOrE,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,YAAY;IAU5E,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAKvC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAmCtC"}
|
|
@@ -28,22 +28,21 @@ export class ConversationService {
|
|
|
28
28
|
listConversations(projectId = null) {
|
|
29
29
|
return this.conversationRepo.listByProject(projectId);
|
|
30
30
|
}
|
|
31
|
+
listAllConversations(limit = 100, offset = 0) {
|
|
32
|
+
return this.conversationRepo.listAll(limit, offset);
|
|
33
|
+
}
|
|
34
|
+
searchConversations(query, limit = 50) {
|
|
35
|
+
if (!query || !query.trim()) {
|
|
36
|
+
return this.listAllConversations(limit);
|
|
37
|
+
}
|
|
38
|
+
return this.conversationRepo.search(query, limit);
|
|
39
|
+
}
|
|
31
40
|
updateConversation(id, updates) {
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.conversationRepo.deleteById(id);
|
|
38
|
-
const updated = this.conversationRepo.create({
|
|
39
|
-
id,
|
|
40
|
-
projectId: existing.projectId,
|
|
41
|
-
title: updatedTitle,
|
|
42
|
-
mode: updatedMode,
|
|
43
|
-
createdAt: existing.createdAt,
|
|
44
|
-
updatedAt: new Date().toISOString(),
|
|
45
|
-
archivedAt: updatedArchived,
|
|
46
|
-
});
|
|
41
|
+
this.getConversation(id); // Ensure existence
|
|
42
|
+
const updated = this.conversationRepo.update(id, updates);
|
|
43
|
+
if (!updated) {
|
|
44
|
+
throw new Error(`Failed to update conversation '${id}'`);
|
|
45
|
+
}
|
|
47
46
|
this.logger.info(`Updated conversation '${id}' metadata`);
|
|
48
47
|
return updated;
|
|
49
48
|
}
|
|
@@ -51,5 +50,39 @@ export class ConversationService {
|
|
|
51
50
|
this.logger.info(`Deleting conversation '${id}'`);
|
|
52
51
|
return this.conversationRepo.deleteById(id);
|
|
53
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Deterministically generates a clean, concise conversation title from the first user prompt.
|
|
55
|
+
*/
|
|
56
|
+
generateTitle(prompt) {
|
|
57
|
+
if (!prompt || !prompt.trim()) {
|
|
58
|
+
return 'New Chat';
|
|
59
|
+
}
|
|
60
|
+
let cleaned = prompt
|
|
61
|
+
.trim()
|
|
62
|
+
.replace(/^[/#][a-zA-Z0-9_-]+\s*/, '') // Strip slash command prefixes
|
|
63
|
+
.replace(/^(hello|hi|hey|dear)\s+(nexus|ai|assistant)[,.!]?\s*/i, '') // Strip greeting
|
|
64
|
+
.replace(/^(can you|please|could you)\s+(explain|describe|show|clarify)\s+/i, '$2 ')
|
|
65
|
+
.replace(/^(can you|please|could you)\s+/i, '')
|
|
66
|
+
.replace(/[\r\n]+/g, ' ')
|
|
67
|
+
.replace(/[?.,!;:]+$/, '')
|
|
68
|
+
.trim();
|
|
69
|
+
if (!cleaned) {
|
|
70
|
+
cleaned = prompt.trim().slice(0, 40);
|
|
71
|
+
}
|
|
72
|
+
// Capitalize first character
|
|
73
|
+
cleaned = cleaned.charAt(0).toUpperCase() + cleaned.slice(1);
|
|
74
|
+
// Limit to 50 chars at word boundary if possible
|
|
75
|
+
if (cleaned.length > 50) {
|
|
76
|
+
const truncated = cleaned.slice(0, 47);
|
|
77
|
+
const lastSpace = truncated.lastIndexOf(' ');
|
|
78
|
+
if (lastSpace > 20) {
|
|
79
|
+
cleaned = truncated.slice(0, lastSpace) + '...';
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
cleaned = truncated + '...';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return cleaned || 'New Chat';
|
|
86
|
+
}
|
|
54
87
|
}
|
|
55
88
|
//# sourceMappingURL=conversationService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversationService.js","sourceRoot":"","sources":["../../src/chat/conversationService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAY,MAAM,qBAAqB,CAAC;AAevD,MAAM,OAAO,mBAAmB;IAIpB;IAHF,MAAM,CAAS;IAEvB,YACU,gBAAwC,EAChD,WAAqB,MAAM;QADnB,qBAAgB,GAAhB,gBAAgB,CAAwB;QAGhD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,kBAAkB,CAAC,MAA6B,EAAE;QAChD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACxF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,cAAc,KAAK,IAAI,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAClC,EAAE;YACF,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;YAChC,KAAK;YACL,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,EAAU;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,YAA2B,IAAI;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"conversationService.js","sourceRoot":"","sources":["../../src/chat/conversationService.ts"],"names":[],"mappings":"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"}
|