@kaitranntt/ccs 4.4.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -7
- package/VERSION +1 -1
- package/config/base-agy.settings.json +10 -0
- package/config/base-codex.settings.json +10 -0
- package/config/base-gemini.settings.json +10 -0
- package/dist/auth/auth-commands.d.ts +52 -0
- package/dist/auth/auth-commands.d.ts.map +1 -0
- package/dist/auth/auth-commands.js +479 -0
- package/dist/auth/auth-commands.js.map +1 -0
- package/dist/auth/profile-detector.d.ts +68 -0
- package/dist/auth/profile-detector.d.ts.map +1 -0
- package/dist/auth/profile-detector.js +209 -0
- package/dist/auth/profile-detector.js.map +1 -0
- package/dist/auth/profile-registry.d.ts +60 -0
- package/dist/auth/profile-registry.d.ts.map +1 -0
- package/dist/auth/profile-registry.js +188 -0
- package/dist/auth/profile-registry.js.map +1 -0
- package/dist/ccs.d.ts +10 -0
- package/dist/ccs.d.ts.map +1 -0
- package/dist/ccs.js +320 -0
- package/dist/ccs.js.map +1 -0
- package/dist/cliproxy/auth-handler.d.ts +95 -0
- package/dist/cliproxy/auth-handler.d.ts.map +1 -0
- package/dist/cliproxy/auth-handler.js +443 -0
- package/dist/cliproxy/auth-handler.js.map +1 -0
- package/dist/cliproxy/base-config-loader.d.ts +42 -0
- package/dist/cliproxy/base-config-loader.d.ts.map +1 -0
- package/dist/cliproxy/base-config-loader.js +123 -0
- package/dist/cliproxy/base-config-loader.js.map +1 -0
- package/dist/cliproxy/binary-manager.d.ts +104 -0
- package/dist/cliproxy/binary-manager.d.ts.map +1 -0
- package/dist/cliproxy/binary-manager.js +567 -0
- package/dist/cliproxy/binary-manager.js.map +1 -0
- package/dist/cliproxy/cliproxy-executor.d.ts +33 -0
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -0
- package/dist/cliproxy/cliproxy-executor.js +297 -0
- package/dist/cliproxy/cliproxy-executor.js.map +1 -0
- package/dist/cliproxy/config-generator.d.ts +89 -0
- package/dist/cliproxy/config-generator.d.ts.map +1 -0
- package/dist/cliproxy/config-generator.js +263 -0
- package/dist/cliproxy/config-generator.js.map +1 -0
- package/dist/cliproxy/index.d.ts +13 -0
- package/dist/cliproxy/index.d.ts.map +1 -0
- package/dist/cliproxy/index.js +62 -0
- package/dist/cliproxy/index.js.map +1 -0
- package/dist/cliproxy/platform-detector.d.ts +48 -0
- package/dist/cliproxy/platform-detector.d.ts.map +1 -0
- package/dist/cliproxy/platform-detector.js +118 -0
- package/dist/cliproxy/platform-detector.js.map +1 -0
- package/dist/cliproxy/types.d.ts +169 -0
- package/dist/cliproxy/types.d.ts.map +1 -0
- package/dist/cliproxy/types.js +7 -0
- package/dist/cliproxy/types.js.map +1 -0
- package/dist/commands/doctor-command.d.ts +10 -0
- package/dist/commands/doctor-command.d.ts.map +1 -0
- package/dist/commands/doctor-command.js +44 -0
- package/dist/commands/doctor-command.js.map +1 -0
- package/dist/commands/help-command.d.ts +5 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +104 -0
- package/dist/commands/help-command.js.map +1 -0
- package/dist/commands/install-command.d.ts +14 -0
- package/dist/commands/install-command.d.ts.map +1 -0
- package/dist/commands/install-command.js +39 -0
- package/dist/commands/install-command.js.map +1 -0
- package/dist/commands/shell-completion-command.d.ts +10 -0
- package/dist/commands/shell-completion-command.d.ts.map +1 -0
- package/dist/commands/shell-completion-command.js +85 -0
- package/dist/commands/shell-completion-command.js.map +1 -0
- package/dist/commands/sync-command.d.ts +10 -0
- package/dist/commands/sync-command.d.ts.map +1 -0
- package/dist/commands/sync-command.js +59 -0
- package/dist/commands/sync-command.js.map +1 -0
- package/dist/commands/update-command.d.ts +12 -0
- package/dist/commands/update-command.d.ts.map +1 -0
- package/dist/commands/update-command.js +295 -0
- package/dist/commands/update-command.js.map +1 -0
- package/dist/commands/version-command.d.ts +10 -0
- package/dist/commands/version-command.d.ts.map +1 -0
- package/dist/commands/version-command.js +100 -0
- package/dist/commands/version-command.js.map +1 -0
- package/dist/delegation/delegation-handler.d.ts +60 -0
- package/dist/delegation/delegation-handler.d.ts.map +1 -0
- package/dist/delegation/delegation-handler.js +174 -0
- package/dist/delegation/delegation-handler.js.map +1 -0
- package/dist/delegation/headless-executor.d.ts +114 -0
- package/dist/delegation/headless-executor.d.ts.map +1 -0
- package/dist/delegation/headless-executor.js +562 -0
- package/dist/delegation/headless-executor.js.map +1 -0
- package/dist/delegation/result-formatter.d.ts +108 -0
- package/dist/delegation/result-formatter.d.ts.map +1 -0
- package/dist/delegation/result-formatter.js +391 -0
- package/dist/delegation/result-formatter.js.map +1 -0
- package/dist/delegation/session-manager.d.ts +58 -0
- package/dist/delegation/session-manager.d.ts.map +1 -0
- package/dist/delegation/session-manager.js +153 -0
- package/dist/delegation/session-manager.js.map +1 -0
- package/dist/delegation/settings-parser.d.ts +31 -0
- package/dist/delegation/settings-parser.d.ts.map +1 -0
- package/dist/delegation/settings-parser.js +107 -0
- package/dist/delegation/settings-parser.js.map +1 -0
- package/dist/glmt/delta-accumulator.d.ts +210 -0
- package/dist/glmt/delta-accumulator.d.ts.map +1 -0
- package/dist/glmt/delta-accumulator.js +351 -0
- package/dist/glmt/delta-accumulator.js.map +1 -0
- package/dist/glmt/glmt-proxy.d.ts +72 -0
- package/dist/glmt/glmt-proxy.d.ts.map +1 -0
- package/dist/glmt/glmt-proxy.js +427 -0
- package/dist/glmt/glmt-proxy.js.map +1 -0
- package/dist/glmt/glmt-transformer.d.ts +265 -0
- package/dist/glmt/glmt-transformer.d.ts.map +1 -0
- package/dist/glmt/glmt-transformer.js +832 -0
- package/dist/glmt/glmt-transformer.js.map +1 -0
- package/dist/glmt/locale-enforcer.d.ts +38 -0
- package/dist/glmt/locale-enforcer.d.ts.map +1 -0
- package/dist/glmt/locale-enforcer.js +69 -0
- package/dist/glmt/locale-enforcer.js.map +1 -0
- package/dist/glmt/reasoning-enforcer.d.ts +52 -0
- package/dist/glmt/reasoning-enforcer.d.ts.map +1 -0
- package/dist/glmt/reasoning-enforcer.js +151 -0
- package/dist/glmt/reasoning-enforcer.js.map +1 -0
- package/dist/glmt/sse-parser.d.ts +47 -0
- package/dist/glmt/sse-parser.d.ts.map +1 -0
- package/dist/glmt/sse-parser.js +93 -0
- package/dist/glmt/sse-parser.js.map +1 -0
- package/dist/management/doctor.d.ts +104 -0
- package/dist/management/doctor.d.ts.map +1 -0
- package/dist/management/doctor.js +673 -0
- package/dist/management/doctor.js.map +1 -0
- package/dist/management/instance-manager.d.ts +57 -0
- package/dist/management/instance-manager.d.ts.map +1 -0
- package/dist/management/instance-manager.js +195 -0
- package/dist/management/instance-manager.js.map +1 -0
- package/dist/management/recovery-manager.d.ts +39 -0
- package/dist/management/recovery-manager.d.ts.map +1 -0
- package/dist/management/recovery-manager.js +141 -0
- package/dist/management/recovery-manager.js.map +1 -0
- package/dist/management/shared-manager.d.ts +47 -0
- package/dist/management/shared-manager.d.ts.map +1 -0
- package/dist/management/shared-manager.js +388 -0
- package/dist/management/shared-manager.js.map +1 -0
- package/dist/types/cli.d.ts +50 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +16 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +51 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +26 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/delegation.d.ts +61 -0
- package/dist/types/delegation.d.ts.map +1 -0
- package/dist/types/delegation.js +6 -0
- package/dist/types/delegation.js.map +1 -0
- package/dist/types/glmt.d.ts +95 -0
- package/dist/types/glmt.d.ts.map +1 -0
- package/dist/types/glmt.js +7 -0
- package/dist/types/glmt.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utils.d.ts +36 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +22 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/utils/claude-detector.d.ts +14 -0
- package/dist/utils/claude-detector.d.ts.map +1 -0
- package/dist/utils/claude-detector.js +112 -0
- package/dist/utils/claude-detector.js.map +1 -0
- package/dist/utils/claude-dir-installer.d.ts +46 -0
- package/dist/utils/claude-dir-installer.d.ts.map +1 -0
- package/dist/utils/claude-dir-installer.js +289 -0
- package/dist/utils/claude-dir-installer.js.map +1 -0
- package/dist/utils/claude-symlink-manager.d.ts +61 -0
- package/dist/utils/claude-symlink-manager.d.ts.map +1 -0
- package/dist/utils/claude-symlink-manager.js +291 -0
- package/dist/utils/claude-symlink-manager.js.map +1 -0
- package/dist/utils/config-manager.d.ts +32 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +143 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/delegation-validator.d.ts +39 -0
- package/dist/utils/delegation-validator.d.ts.map +1 -0
- package/dist/utils/delegation-validator.js +161 -0
- package/dist/utils/delegation-validator.js.map +1 -0
- package/dist/utils/error-codes.d.ts +36 -0
- package/dist/utils/error-codes.d.ts.map +1 -0
- package/dist/utils/error-codes.js +63 -0
- package/dist/utils/error-codes.js.map +1 -0
- package/dist/utils/error-manager.d.ts +59 -0
- package/dist/utils/error-manager.d.ts.map +1 -0
- package/dist/utils/error-manager.js +228 -0
- package/dist/utils/error-manager.js.map +1 -0
- package/dist/utils/helpers.d.ts +27 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +150 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/package-manager-detector.d.ts +14 -0
- package/dist/utils/package-manager-detector.d.ts.map +1 -0
- package/dist/utils/package-manager-detector.js +162 -0
- package/dist/utils/package-manager-detector.js.map +1 -0
- package/dist/utils/progress-indicator.d.ts +52 -0
- package/dist/utils/progress-indicator.d.ts.map +1 -0
- package/dist/utils/progress-indicator.js +102 -0
- package/dist/utils/progress-indicator.js.map +1 -0
- package/dist/utils/prompt.d.ts +29 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +116 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/shell-completion.d.ts +52 -0
- package/dist/utils/shell-completion.d.ts.map +1 -0
- package/dist/utils/shell-completion.js +231 -0
- package/dist/utils/shell-completion.js.map +1 -0
- package/dist/utils/shell-executor.d.ts +15 -0
- package/dist/utils/shell-executor.d.ts.map +1 -0
- package/dist/utils/shell-executor.js +57 -0
- package/dist/utils/shell-executor.js.map +1 -0
- package/dist/utils/update-checker.d.ts +48 -0
- package/dist/utils/update-checker.d.ts.map +1 -0
- package/dist/utils/update-checker.js +241 -0
- package/dist/utils/update-checker.js.map +1 -0
- package/lib/ccs +21 -1907
- package/lib/ccs.ps1 +26 -1800
- package/lib/error-codes.ps1 +2 -1
- package/lib/prompt.ps1 +2 -2
- package/package.json +31 -11
- package/scripts/add-shebang.js +39 -0
- package/scripts/bump-version.sh +25 -37
- package/scripts/dev-install.sh +32 -11
- package/scripts/postinstall.js +29 -29
- package/bin/auth/auth-commands.js +0 -499
- package/bin/auth/profile-detector.js +0 -204
- package/bin/auth/profile-registry.js +0 -225
- package/bin/ccs.js +0 -1034
- package/bin/delegation/README.md +0 -191
- package/bin/delegation/delegation-handler.js +0 -212
- package/bin/delegation/headless-executor.js +0 -618
- package/bin/delegation/result-formatter.js +0 -485
- package/bin/delegation/session-manager.js +0 -157
- package/bin/delegation/settings-parser.js +0 -109
- package/bin/glmt/delta-accumulator.js +0 -276
- package/bin/glmt/glmt-proxy.js +0 -495
- package/bin/glmt/glmt-transformer.js +0 -999
- package/bin/glmt/locale-enforcer.js +0 -72
- package/bin/glmt/reasoning-enforcer.js +0 -173
- package/bin/glmt/sse-parser.js +0 -96
- package/bin/management/doctor.js +0 -721
- package/bin/management/instance-manager.js +0 -202
- package/bin/management/recovery-manager.js +0 -135
- package/bin/management/shared-manager.js +0 -402
- package/bin/utils/claude-detector.js +0 -73
- package/bin/utils/claude-dir-installer.js +0 -283
- package/bin/utils/claude-symlink-manager.js +0 -289
- package/bin/utils/config-manager.js +0 -103
- package/bin/utils/delegation-validator.js +0 -154
- package/bin/utils/error-codes.js +0 -59
- package/bin/utils/error-manager.js +0 -165
- package/bin/utils/helpers.js +0 -136
- package/bin/utils/progress-indicator.js +0 -111
- package/bin/utils/prompt.js +0 -134
- package/bin/utils/shell-completion.js +0 -256
- package/bin/utils/update-checker.js +0 -243
package/bin/delegation/README.md
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
# CCS Delegation Module
|
|
2
|
-
|
|
3
|
-
Enhanced Claude Code delegation system for multi-model task delegation.
|
|
4
|
-
|
|
5
|
-
## Files
|
|
6
|
-
|
|
7
|
-
### Core Components
|
|
8
|
-
- **headless-executor.js** (405 lines) - Main executor, spawns `claude -p` with enhanced features
|
|
9
|
-
- **session-manager.js** (156 lines) - Session persistence and cost tracking
|
|
10
|
-
- **settings-parser.js** (88 lines) - Parse tool restrictions from settings
|
|
11
|
-
- **result-formatter.js** (326 lines) - Terminal output formatting
|
|
12
|
-
|
|
13
|
-
**Total**: 975 lines (down from 1,755 lines - 44% reduction)
|
|
14
|
-
|
|
15
|
-
## Features
|
|
16
|
-
|
|
17
|
-
### Enhanced Headless Execution
|
|
18
|
-
- Stream-JSON output parsing (`--output-format stream-json`)
|
|
19
|
-
- Real-time tool use visibility in TTY
|
|
20
|
-
- Permission mode acceptEdits (`--permission-mode acceptEdits`)
|
|
21
|
-
- Tool restrictions from `.claude/settings.local.json`
|
|
22
|
-
- Multi-turn session management (`--resume <session-id>`)
|
|
23
|
-
- Time-based limits (10 min default timeout with graceful termination)
|
|
24
|
-
- Cost tracking and aggregation
|
|
25
|
-
|
|
26
|
-
### Session Management
|
|
27
|
-
- Persistence: `~/.ccs/delegation-sessions.json`
|
|
28
|
-
- Resume via `/ccs:continue` (auto-detects profile)
|
|
29
|
-
- Auto-cleanup expired sessions (>30 days)
|
|
30
|
-
- Cost aggregation across turns
|
|
31
|
-
|
|
32
|
-
### Settings
|
|
33
|
-
- Profile location: `~/.ccs/{profile}.settings.json`
|
|
34
|
-
- Examples: `glm.settings.json`, `kimi.settings.json`, `glmt.settings.json`
|
|
35
|
-
- Tool restrictions from `.claude/settings.local.json`
|
|
36
|
-
|
|
37
|
-
## Usage
|
|
38
|
-
|
|
39
|
-
### Basic Delegation
|
|
40
|
-
```javascript
|
|
41
|
-
const { HeadlessExecutor } = require('./headless-executor');
|
|
42
|
-
|
|
43
|
-
const result = await HeadlessExecutor.execute('glm', 'Refactor auth.js', {
|
|
44
|
-
cwd: '/path/to/project',
|
|
45
|
-
outputFormat: 'stream-json',
|
|
46
|
-
permissionMode: 'acceptEdits',
|
|
47
|
-
timeout: 600000 // 10 minutes
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
console.log(result.sessionId); // For multi-turn
|
|
51
|
-
console.log(result.totalCost); // Cost in USD
|
|
52
|
-
console.log(result.content); // Result text
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Multi-Turn Sessions
|
|
56
|
-
```javascript
|
|
57
|
-
// Start session
|
|
58
|
-
const result1 = await HeadlessExecutor.execute('glm', 'Implement feature');
|
|
59
|
-
const sessionId = result1.sessionId;
|
|
60
|
-
|
|
61
|
-
// Continue session
|
|
62
|
-
const result2 = await HeadlessExecutor.execute('glm', 'Add tests', {
|
|
63
|
-
resumeSession: true
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// Or with specific session ID
|
|
67
|
-
const result3 = await HeadlessExecutor.execute('glm', 'Run tests', {
|
|
68
|
-
sessionId: sessionId
|
|
69
|
-
});
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### Tool Restrictions
|
|
73
|
-
Create `.claude/settings.local.json`:
|
|
74
|
-
```json
|
|
75
|
-
{
|
|
76
|
-
"permissions": {
|
|
77
|
-
"allow": ["Bash(git:*)", "Read", "Edit"],
|
|
78
|
-
"deny": ["Bash(rm:*)", "Bash(sudo:*)"]
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Automatically applied as CLI flags:
|
|
84
|
-
```bash
|
|
85
|
-
--allowedTools "Bash(git:*)" "Read" "Edit" \
|
|
86
|
-
--disallowedTools "Bash(rm:*)" "Bash(sudo:*)"
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
## Slash Commands
|
|
90
|
-
|
|
91
|
-
The delegation system is invoked via simple slash commands in `.claude/commands/ccs/`:
|
|
92
|
-
|
|
93
|
-
### Basic Commands
|
|
94
|
-
- `/ccs "task"` - Delegate task (auto-selects best profile)
|
|
95
|
-
- `/ccs --glm "task"` - Force GLM-4.6 delegation
|
|
96
|
-
- `/ccs --kimi "task"` - Force Kimi delegation (long-context)
|
|
97
|
-
|
|
98
|
-
### Session Continuation
|
|
99
|
-
- `/ccs:continue "follow-up"` - Resume last delegation session (auto-detect profile)
|
|
100
|
-
- `/ccs:continue --glm "follow-up"` - Resume with specific profile switch
|
|
101
|
-
|
|
102
|
-
Each command directly invokes:
|
|
103
|
-
```bash
|
|
104
|
-
claude -p "$ARGUMENTS" \
|
|
105
|
-
--settings ~/.ccs/{profile}.settings.json \
|
|
106
|
-
--output-format stream-json \
|
|
107
|
-
--permission-mode acceptEdits
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## Debug Mode
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
export CCS_DEBUG=1
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Enables verbose logging:
|
|
117
|
-
- Permission mode selection
|
|
118
|
-
- Session resumption details
|
|
119
|
-
- Tool restrictions parsing
|
|
120
|
-
- CLI args construction
|
|
121
|
-
- Session persistence events
|
|
122
|
-
|
|
123
|
-
## Testing
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
# Run all delegation tests
|
|
127
|
-
node tests/unit/delegation/json-output.test.js
|
|
128
|
-
node tests/unit/delegation/permission-mode.test.js
|
|
129
|
-
node tests/unit/delegation/session-manager.test.js
|
|
130
|
-
node tests/unit/delegation/settings-parser.test.js
|
|
131
|
-
node tests/unit/delegation/max-turns.test.js
|
|
132
|
-
node tests/unit/delegation/result-formatter.test.js
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
**Test Coverage:**
|
|
136
|
-
- JSON output parsing (6 tests)
|
|
137
|
-
- Permission modes (11 tests)
|
|
138
|
-
- Session management (7 tests)
|
|
139
|
-
- Settings parser (6 tests)
|
|
140
|
-
- Auto max-turns (14 tests)
|
|
141
|
-
- Result formatting (14 tests)
|
|
142
|
-
- **Total: 58 tests**
|
|
143
|
-
|
|
144
|
-
## Architecture
|
|
145
|
-
|
|
146
|
-
```
|
|
147
|
-
User → SlashCommand (/ccs)
|
|
148
|
-
→ ccs-delegation skill (auto-selects profile)
|
|
149
|
-
→ Directly invokes: claude -p
|
|
150
|
-
→ HeadlessExecutor (monitors execution)
|
|
151
|
-
→ SessionManager (load last session)
|
|
152
|
-
→ SettingsParser (tool restrictions)
|
|
153
|
-
→ Parse JSON response
|
|
154
|
-
→ SessionManager (store/update)
|
|
155
|
-
→ ResultFormatter.format()
|
|
156
|
-
→ Display to user
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
**Key Simplification**: Slash commands invoke `claude -p` directly. No intermediate delegation engine or rule system - just direct headless execution with enhanced features.
|
|
160
|
-
|
|
161
|
-
## File Permissions
|
|
162
|
-
|
|
163
|
-
All files should be `644` (rw-r--r--):
|
|
164
|
-
```bash
|
|
165
|
-
chmod 644 bin/delegation/*.js
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## Dependencies
|
|
169
|
-
|
|
170
|
-
- Node.js 14+
|
|
171
|
-
- Claude CLI installed and in PATH
|
|
172
|
-
- Profile settings configured in `~/.ccs/{profile}.settings.json`
|
|
173
|
-
|
|
174
|
-
## Migration from Legacy System
|
|
175
|
-
|
|
176
|
-
**Removed components** (as of 2025-11-15):
|
|
177
|
-
- ~~delegation-engine.js~~ - Rule-based decision engine (unused)
|
|
178
|
-
- ~~cwd-resolver.js~~ - Working directory resolution (unused)
|
|
179
|
-
- ~~rules-schema.js~~ - Schema validation (unused)
|
|
180
|
-
- ~~delegation-rules.json~~ - Configuration file (not created)
|
|
181
|
-
|
|
182
|
-
**Why removed**: Current slash commands directly invoke `claude -p` without intermediate orchestration. The delegation engine, CWD resolver, and rules schema were designed for a more complex system that was never fully integrated.
|
|
183
|
-
|
|
184
|
-
**Result**: 44% code reduction (1,755 → 975 lines) with same functionality.
|
|
185
|
-
|
|
186
|
-
## References
|
|
187
|
-
|
|
188
|
-
- Official docs: https://code.claude.com/docs/en/headless.md
|
|
189
|
-
- Skill: `.claude/skills/ccs-delegation/`
|
|
190
|
-
- Commands: `.claude/commands/ccs/`
|
|
191
|
-
- Tests: `tests/unit/delegation/`
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
const { HeadlessExecutor } = require('./headless-executor');
|
|
5
|
-
const { SessionManager } = require('./session-manager');
|
|
6
|
-
const { ResultFormatter } = require('./result-formatter');
|
|
7
|
-
const { DelegationValidator } = require('../utils/delegation-validator');
|
|
8
|
-
const { SettingsParser } = require('./settings-parser');
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Delegation command handler
|
|
12
|
-
* Routes -p flag commands to HeadlessExecutor with enhanced features
|
|
13
|
-
*/
|
|
14
|
-
class DelegationHandler {
|
|
15
|
-
/**
|
|
16
|
-
* Route delegation command
|
|
17
|
-
* @param {Array<string>} args - Full args array from ccs.js
|
|
18
|
-
*/
|
|
19
|
-
async route(args) {
|
|
20
|
-
try {
|
|
21
|
-
// 1. Parse args into { profile, prompt, options }
|
|
22
|
-
const parsed = this._parseArgs(args);
|
|
23
|
-
|
|
24
|
-
// 2. Detect special profiles (glm:continue, kimi:continue)
|
|
25
|
-
if (parsed.profile.includes(':continue')) {
|
|
26
|
-
return await this._handleContinue(parsed);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// 3. Validate profile
|
|
30
|
-
this._validateProfile(parsed.profile);
|
|
31
|
-
|
|
32
|
-
// 4. Execute via HeadlessExecutor
|
|
33
|
-
const result = await HeadlessExecutor.execute(
|
|
34
|
-
parsed.profile,
|
|
35
|
-
parsed.prompt,
|
|
36
|
-
parsed.options
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
// 5. Format and display results
|
|
40
|
-
const formatted = ResultFormatter.format(result);
|
|
41
|
-
console.log(formatted);
|
|
42
|
-
|
|
43
|
-
// 6. Exit with proper code
|
|
44
|
-
process.exit(result.exitCode || 0);
|
|
45
|
-
} catch (error) {
|
|
46
|
-
console.error(`[X] Delegation error: ${error.message}`);
|
|
47
|
-
if (process.env.CCS_DEBUG) {
|
|
48
|
-
console.error(error.stack);
|
|
49
|
-
}
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Handle continue command (resume last session)
|
|
56
|
-
* @param {Object} parsed - Parsed args
|
|
57
|
-
*/
|
|
58
|
-
async _handleContinue(parsed) {
|
|
59
|
-
const baseProfile = parsed.profile.replace(':continue', '');
|
|
60
|
-
|
|
61
|
-
// Get last session from SessionManager
|
|
62
|
-
const sessionMgr = new SessionManager();
|
|
63
|
-
const lastSession = sessionMgr.getLastSession(baseProfile);
|
|
64
|
-
|
|
65
|
-
if (!lastSession) {
|
|
66
|
-
console.error(`[X] No previous session found for ${baseProfile}`);
|
|
67
|
-
console.error(` Start a new session first with: ccs ${baseProfile} -p "task"`);
|
|
68
|
-
process.exit(1);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Execute with resume flag
|
|
72
|
-
const result = await HeadlessExecutor.execute(
|
|
73
|
-
baseProfile,
|
|
74
|
-
parsed.prompt,
|
|
75
|
-
{
|
|
76
|
-
...parsed.options,
|
|
77
|
-
resumeSession: true,
|
|
78
|
-
sessionId: lastSession.sessionId
|
|
79
|
-
}
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
const formatted = ResultFormatter.format(result);
|
|
83
|
-
console.log(formatted);
|
|
84
|
-
|
|
85
|
-
process.exit(result.exitCode || 0);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Parse args into structured format
|
|
90
|
-
* @param {Array<string>} args - Raw args
|
|
91
|
-
* @returns {Object} { profile, prompt, options }
|
|
92
|
-
*/
|
|
93
|
-
_parseArgs(args) {
|
|
94
|
-
// Extract profile (first non-flag arg or 'default')
|
|
95
|
-
const profile = this._extractProfile(args);
|
|
96
|
-
|
|
97
|
-
// Extract prompt from -p or --prompt
|
|
98
|
-
const prompt = this._extractPrompt(args);
|
|
99
|
-
|
|
100
|
-
// Extract options (--timeout, --permission-mode, etc.)
|
|
101
|
-
const options = this._extractOptions(args);
|
|
102
|
-
|
|
103
|
-
return { profile, prompt, options };
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Extract profile from args (first non-flag arg)
|
|
108
|
-
* @param {Array<string>} args - Args array
|
|
109
|
-
* @returns {string} Profile name
|
|
110
|
-
*/
|
|
111
|
-
_extractProfile(args) {
|
|
112
|
-
// Find first arg that doesn't start with '-' and isn't -p value
|
|
113
|
-
let skipNext = false;
|
|
114
|
-
for (let i = 0; i < args.length; i++) {
|
|
115
|
-
if (skipNext) {
|
|
116
|
-
skipNext = false;
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (args[i] === '-p' || args[i] === '--prompt') {
|
|
121
|
-
skipNext = true;
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
if (!args[i].startsWith('-')) {
|
|
126
|
-
return args[i];
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// No profile specified, return null (will error in validation)
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Extract prompt from -p flag
|
|
136
|
-
* @param {Array<string>} args - Args array
|
|
137
|
-
* @returns {string} Prompt text
|
|
138
|
-
*/
|
|
139
|
-
_extractPrompt(args) {
|
|
140
|
-
const pIndex = args.indexOf('-p');
|
|
141
|
-
const promptIndex = args.indexOf('--prompt');
|
|
142
|
-
|
|
143
|
-
const index = pIndex !== -1 ? pIndex : promptIndex;
|
|
144
|
-
|
|
145
|
-
if (index === -1 || index === args.length - 1) {
|
|
146
|
-
console.error('[X] Missing prompt after -p flag');
|
|
147
|
-
console.error(' Usage: ccs glm -p "task description"');
|
|
148
|
-
process.exit(1);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return args[index + 1];
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Extract options from remaining args
|
|
156
|
-
* @param {Array<string>} args - Args array
|
|
157
|
-
* @returns {Object} Options for HeadlessExecutor
|
|
158
|
-
*/
|
|
159
|
-
_extractOptions(args) {
|
|
160
|
-
const cwd = process.cwd();
|
|
161
|
-
|
|
162
|
-
// Read default permission mode from .claude/settings.local.json
|
|
163
|
-
// Falls back to 'acceptEdits' if file doesn't exist
|
|
164
|
-
const defaultPermissionMode = SettingsParser.parseDefaultPermissionMode(cwd);
|
|
165
|
-
|
|
166
|
-
const options = {
|
|
167
|
-
cwd,
|
|
168
|
-
outputFormat: 'stream-json',
|
|
169
|
-
permissionMode: defaultPermissionMode
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
// Parse permission-mode (CLI flag overrides settings file)
|
|
173
|
-
const permModeIndex = args.indexOf('--permission-mode');
|
|
174
|
-
if (permModeIndex !== -1 && permModeIndex < args.length - 1) {
|
|
175
|
-
options.permissionMode = args[permModeIndex + 1];
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// Parse timeout
|
|
179
|
-
const timeoutIndex = args.indexOf('--timeout');
|
|
180
|
-
if (timeoutIndex !== -1 && timeoutIndex < args.length - 1) {
|
|
181
|
-
options.timeout = parseInt(args[timeoutIndex + 1], 10);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return options;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Validate profile exists and is configured
|
|
189
|
-
* @param {string} profile - Profile name
|
|
190
|
-
*/
|
|
191
|
-
_validateProfile(profile) {
|
|
192
|
-
if (!profile) {
|
|
193
|
-
console.error('[X] No profile specified');
|
|
194
|
-
console.error(' Usage: ccs <profile> -p "task"');
|
|
195
|
-
console.error(' Examples: ccs glm -p "task", ccs kimi -p "task"');
|
|
196
|
-
process.exit(1);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Use DelegationValidator to check profile
|
|
200
|
-
const validation = DelegationValidator.validate(profile);
|
|
201
|
-
if (!validation.valid) {
|
|
202
|
-
console.error(`[X] Profile '${profile}' is not configured for delegation`);
|
|
203
|
-
console.error(` ${validation.error}`);
|
|
204
|
-
console.error('');
|
|
205
|
-
console.error(' Run: ccs doctor');
|
|
206
|
-
console.error(' Or configure: ~/.ccs/${profile}.settings.json');
|
|
207
|
-
process.exit(1);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
module.exports = DelegationHandler;
|