indusagi-coding-agent 0.1.23 → 0.1.25
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/CHANGELOG.md +101 -0
- package/README.md +2 -0
- package/dist/cli/args.d.ts +117 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +221 -52
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +58 -2
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +130 -12
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +70 -2
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +240 -15
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/list-models.d.ts +63 -3
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +202 -27
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/login-handler.d.ts +82 -8
- package/dist/cli/login-handler.d.ts.map +1 -1
- package/dist/cli/login-handler.js +410 -77
- package/dist/cli/login-handler.js.map +1 -1
- package/dist/cli/session-picker.d.ts +74 -2
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +236 -12
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/core/agent-session.d.ts +214 -9
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +214 -9
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts +302 -12
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +302 -12
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/diagnostics.d.ts +191 -0
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js +142 -0
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/discover-packages.d.ts +6 -0
- package/dist/core/discover-packages.d.ts.map +1 -0
- package/dist/core/discover-packages.js +62 -0
- package/dist/core/discover-packages.js.map +1 -0
- package/dist/core/event-bus.d.ts +146 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +93 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts +4 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js +4 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts +128 -0
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +128 -0
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +4 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +4 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/keybindings.d.ts +142 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +142 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +98 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +98 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +99 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +99 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +2 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +127 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +125 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagents.js.map +1 -1
- package/dist/core/tools/bash.d.ts +391 -11
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +269 -2
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/bg-process.d.ts +49 -0
- package/dist/core/tools/bg-process.d.ts.map +1 -0
- package/dist/core/tools/bg-process.js +69 -0
- package/dist/core/tools/bg-process.js.map +1 -0
- package/dist/core/tools/edit.d.ts +284 -6
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +238 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +169 -5
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +136 -0
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +285 -5
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +247 -0
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +45 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +15 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +6 -0
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +6 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +308 -7
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +231 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/registry.d.ts +17 -0
- package/dist/core/tools/registry.d.ts.map +1 -0
- package/dist/core/tools/registry.js +108 -0
- package/dist/core/tools/registry.js.map +1 -0
- package/dist/core/tools/webfetch.d.ts +118 -3
- package/dist/core/tools/webfetch.d.ts.map +1 -1
- package/dist/core/tools/webfetch.js +118 -3
- package/dist/core/tools/webfetch.js.map +1 -1
- package/dist/core/tools/websearch.d.ts +130 -3
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js +130 -3
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/core/tools/write.d.ts +251 -5
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +210 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +12 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +164 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +164 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +297 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +297 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +251 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +186 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +186 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1567 -13
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1567 -13
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +422 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +422 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +538 -5
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +538 -5
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +921 -8
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +921 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +802 -9
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +802 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +356 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +356 -3
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/shared.d.ts +386 -0
- package/dist/modes/shared.d.ts.map +1 -0
- package/dist/modes/shared.js +543 -0
- package/dist/modes/shared.js.map +1 -0
- package/dist/utils/array.d.ts +389 -0
- package/dist/utils/array.d.ts.map +1 -0
- package/dist/utils/array.js +585 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/color-formatter.d.ts +318 -0
- package/dist/utils/color-formatter.d.ts.map +1 -0
- package/dist/utils/color-formatter.js +442 -0
- package/dist/utils/color-formatter.js.map +1 -0
- package/dist/utils/data-transformer.d.ts +326 -0
- package/dist/utils/data-transformer.d.ts.map +1 -0
- package/dist/utils/data-transformer.js +512 -0
- package/dist/utils/data-transformer.js.map +1 -0
- package/dist/utils/date-formatter.d.ts +281 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +503 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/error-handler.d.ts +541 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +726 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/file-operations.d.ts +297 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +505 -0
- package/dist/utils/file-operations.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +268 -6
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +500 -21
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/json-formatter.d.ts +259 -0
- package/dist/utils/json-formatter.d.ts.map +1 -0
- package/dist/utils/json-formatter.js +517 -0
- package/dist/utils/json-formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +176 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +346 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown-formatter.d.ts +211 -0
- package/dist/utils/markdown-formatter.d.ts.map +1 -0
- package/dist/utils/markdown-formatter.js +482 -0
- package/dist/utils/markdown-formatter.js.map +1 -0
- package/dist/utils/path-validator.d.ts +603 -0
- package/dist/utils/path-validator.d.ts.map +1 -0
- package/dist/utils/path-validator.js +870 -0
- package/dist/utils/path-validator.js.map +1 -0
- package/dist/utils/string-formatter.d.ts +609 -0
- package/dist/utils/string-formatter.d.ts.map +1 -0
- package/dist/utils/string-formatter.js +806 -0
- package/dist/utils/string-formatter.js.map +1 -0
- package/dist/utils/type-guards.d.ts +629 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +662 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/docs/COMPLETE-GUIDE.md +300 -0
- package/docs/COMPREHENSIVE-CLI-SUMMARY.md +900 -0
- package/docs/MODES-ARCHITECTURE.md +565 -0
- package/docs/PRINT-MODE-GUIDE.md +456 -0
- package/docs/RPC-GUIDE.md +705 -0
- package/docs/UTILS-IMPLEMENTATION-SUMMARY.md +647 -0
- package/docs/UTILS-MODULE-OVERVIEW.md +1480 -0
- package/docs/UTILS-QA-CHECKLIST.md +1061 -0
- package/docs/UTILS-USAGE-GUIDE.md +1419 -0
- package/package.json +7 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,106 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.25] - Web Search & Fetch Tools
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- **websearch** - Real-time web search via Exa AI API
|
|
7
|
+
- Search types: auto, fast, deep
|
|
8
|
+
- Configurable result count (1-10)
|
|
9
|
+
- LLM-optimized output
|
|
10
|
+
|
|
11
|
+
- **webfetch** - URL content retrieval and transformation
|
|
12
|
+
- Multiple formats: text, markdown, HTML
|
|
13
|
+
- Image support with base64 encoding
|
|
14
|
+
- Timeout and size limits (5MB max)
|
|
15
|
+
|
|
16
|
+
- **Web tools now default** - Automatically available in all agent sessions
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- `codingTools`: 7 → 9 tools (added websearch, webfetch)
|
|
20
|
+
- `allTools`: 10 → 12 tools (added websearch, webfetch)
|
|
21
|
+
- `defaultActiveToolNames` updated in SDK for automatic activation
|
|
22
|
+
- Updated package.json description
|
|
23
|
+
|
|
24
|
+
### Files Modified
|
|
25
|
+
- `src/core/tools/index.ts` - Added exports and updated tool arrays
|
|
26
|
+
- `src/core/tools/registry.ts` - Registered web tools as core
|
|
27
|
+
- `src/core/sdk.ts` - Added web tools to defaultActiveToolNames (CRITICAL)
|
|
28
|
+
- `package.json` - Version bump + description update
|
|
29
|
+
|
|
30
|
+
### Security
|
|
31
|
+
- ✅ URL validation (http/https only)
|
|
32
|
+
- ✅ Response size limiting (5MB)
|
|
33
|
+
- ✅ Timeout enforcement (max 120s)
|
|
34
|
+
- ✅ API key required for websearch
|
|
35
|
+
- ✅ No breaking changes, fully backward compatible
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## [0.1.24] - CLI Module Rebranding
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
- **CLI Module Documentation**: Comprehensive documentation added to all CLI files
|
|
43
|
+
- File headers with purpose documentation and vendor attribution
|
|
44
|
+
- Section comments for logical code blocks
|
|
45
|
+
- JSDoc for all public interfaces and types
|
|
46
|
+
- Inline comments for complex decision points
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
- **CLI Argument Parser (args.ts)**:
|
|
50
|
+
- Added constants for default values (VALID_THINKING_LEVELS, DEFAULT_TOOLS, AVAILABLE_TOOLS)
|
|
51
|
+
- Created type guards (isValidThinkingLevel, isValidMode, isValidToolName)
|
|
52
|
+
- Added validation functions (validateToolNames, validateThinkingLevel)
|
|
53
|
+
- Organized imports with clear separation
|
|
54
|
+
- Enhanced Args interface with comprehensive JSDoc
|
|
55
|
+
|
|
56
|
+
- **Configuration Selector (config-selector.ts)**:
|
|
57
|
+
- Added ConfigSelectorOptions interface with full documentation
|
|
58
|
+
- Documented TUI setup and cleanup workflow
|
|
59
|
+
- Enhanced callback documentation (onResolve, onExit, onRequestRender)
|
|
60
|
+
|
|
61
|
+
- **File Processor (file-processor.ts)**:
|
|
62
|
+
- Added file validation (isSupportedTextFile, isSupportedImageMimeType)
|
|
63
|
+
- Added file size limits (MAX_TEXT_FILE_SIZE: 10MB, MAX_IMAGE_FILE_SIZE: 20MB)
|
|
64
|
+
- Created FileProcessError custom error class with helpful suggestions
|
|
65
|
+
- Added validateFileSize function with limit checking
|
|
66
|
+
|
|
67
|
+
- **Login Handler (login-handler.ts)**:
|
|
68
|
+
- Added SECURITY CONSIDERATIONS section documenting credential storage safety
|
|
69
|
+
- Created LoginError and CredentialValidationError custom error classes
|
|
70
|
+
- Added validation functions (validateApiKey, validateAccountName, isValidProvider)
|
|
71
|
+
- Enhanced multi-account support documentation
|
|
72
|
+
- Improved error messages for auth failures
|
|
73
|
+
|
|
74
|
+
- **Model List (list-models.ts)**:
|
|
75
|
+
- Added ModelFilterOptions interface for flexible model filtering
|
|
76
|
+
- Added ModelRow interface for formatted table output
|
|
77
|
+
- Added utility functions (filterModels, sortModels, calculateColumnWidths)
|
|
78
|
+
- Enhanced model display with proper column widths
|
|
79
|
+
- Added model capability indicators (thinking, images)
|
|
80
|
+
|
|
81
|
+
- **Session Picker (session-picker.ts)**:
|
|
82
|
+
- Created SessionPickerError custom error class
|
|
83
|
+
- Added session utility functions (calculateSessionStats, formatAge, formatSize)
|
|
84
|
+
- Added session metadata display capabilities
|
|
85
|
+
- Enhanced session sorting and filtering options
|
|
86
|
+
|
|
87
|
+
### Fixed
|
|
88
|
+
- **Error Handling**: Consistent error message format across all CLI files
|
|
89
|
+
- **Type Safety**: Type guards for runtime type checking and validation
|
|
90
|
+
- **Security**: API key format validation prevents placeholder values
|
|
91
|
+
- **File Access**: Improved error messages with actionable suggestions
|
|
92
|
+
|
|
93
|
+
### Tests
|
|
94
|
+
- **CLI Argument Tests**: 40+ test cases for argument parsing
|
|
95
|
+
- **File Processor Tests**: 20+ test cases for file processing
|
|
96
|
+
- **Login Handler Tests**: 25+ test cases for authentication flow
|
|
97
|
+
|
|
98
|
+
### Documentation
|
|
99
|
+
- **CLI-REFACTORING-SUMMARY.md**: Complete summary of all changes
|
|
100
|
+
- 6 files updated with ~2000 lines of documentation
|
|
101
|
+
- 85+ test cases covering all major functionality
|
|
102
|
+
- All high and medium priority tasks complete
|
|
103
|
+
|
|
3
104
|
## [0.1.23]
|
|
4
105
|
|
|
5
106
|
### Changed
|
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
A terminal-first coding agent with a small core and strong extensibility. Use it interactively, in scripts (print/JSON), over RPC, or as an SDK in your own apps.
|
|
4
4
|
|
|
5
|
+
> **Inspired by Pi**: *"Code with clarity, collaborate with purpose, and build with intelligence. Every line you write is a conversation between you and your assistant."*
|
|
6
|
+
|
|
5
7
|
- CLI commands: `indusagi` and `indus`
|
|
6
8
|
- Node.js >= 20
|
|
7
9
|
- Extensible via extensions, skills, prompt templates, and themes
|
package/dist/cli/args.d.ts
CHANGED
|
@@ -1,9 +1,71 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLI argument
|
|
2
|
+
* CLI Argument Parser - Command-line argument handling and validation
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Parse command-line arguments into structured format
|
|
6
|
+
* - Validate argument combinations
|
|
7
|
+
* - Provide helpful error messages for invalid args
|
|
8
|
+
* - Generate help documentation
|
|
9
|
+
* - Support extension flags registration
|
|
10
|
+
*
|
|
11
|
+
* Based on argument parsing patterns from indusagi CLI
|
|
12
|
+
* Original: https://github.com/varunisrani/indusagi-ts/vendor/indusagi-agent
|
|
13
|
+
*
|
|
14
|
+
* Adapted to:
|
|
15
|
+
* - Improve error messages
|
|
16
|
+
* - Add comprehensive documentation
|
|
17
|
+
* - Enhance validation
|
|
18
|
+
* - Improve UX with better prompts
|
|
3
19
|
*/
|
|
4
20
|
import type { ThinkingLevel } from "indusagi/agent";
|
|
5
21
|
import { type ToolName } from "../core/tools/index.js";
|
|
22
|
+
/**
|
|
23
|
+
* Output mode for CLI responses
|
|
24
|
+
*
|
|
25
|
+
* @type {Mode}
|
|
26
|
+
* @property {"text"} - Standard interactive text output
|
|
27
|
+
* @property {"json"} - JSON formatted output for automation
|
|
28
|
+
* @property {"rpc"} - RPC format for external tool integration
|
|
29
|
+
*/
|
|
6
30
|
export type Mode = "text" | "json" | "rpc";
|
|
31
|
+
/**
|
|
32
|
+
* Parsed command-line arguments
|
|
33
|
+
*
|
|
34
|
+
* @interface Args
|
|
35
|
+
* @property {string} [provider] - Provider name (e.g., google, openai, anthropic)
|
|
36
|
+
* @property {string} [account] - Account name for multi-account providers
|
|
37
|
+
* @property {string} [model] - Model ID override
|
|
38
|
+
* @property {string} [apiKey] - API key (defaults to env vars)
|
|
39
|
+
* @property {string} [systemPrompt] - System prompt override
|
|
40
|
+
* @property {string} [appendSystemPrompt] - Append text or file contents to system prompt
|
|
41
|
+
* @property {ThinkingLevel} [thinking] - Extended thinking level
|
|
42
|
+
* @property {boolean} [continue] - Continue previous session flag
|
|
43
|
+
* @property {boolean} [resume] - Select a session to resume
|
|
44
|
+
* @property {boolean} [help] - Show help message
|
|
45
|
+
* @property {boolean} [version] - Show version number
|
|
46
|
+
* @property {Mode} [mode] - Output mode (text, json, rpc)
|
|
47
|
+
* @property {boolean} [noSession] - Don't save session (ephemeral)
|
|
48
|
+
* @property {string} [session] - Use specific session file
|
|
49
|
+
* @property {string} [sessionDir] - Directory for session storage
|
|
50
|
+
* @property {string[]} [models] - Model patterns for Ctrl+P cycling
|
|
51
|
+
* @property {ToolName[]} [tools] - Tools to enable
|
|
52
|
+
* @property {boolean} [noTools] - Disable all tools
|
|
53
|
+
* @property {string[]} [extensions] - Extension file paths to load
|
|
54
|
+
* @property {string[]} [hooks] - Hook file paths to load
|
|
55
|
+
* @property {boolean} [noExtensions] - Disable extension discovery
|
|
56
|
+
* @property {boolean} [noHooks] - Disable hook discovery
|
|
57
|
+
* @property {boolean} [noSkills] - Disable skills discovery
|
|
58
|
+
* @property {string[]} [skills] - Skill file paths to load
|
|
59
|
+
* @property {string[]} [promptTemplates] - Prompt template paths to load
|
|
60
|
+
* @property {boolean} [noPromptTemplates] - Disable prompt template discovery
|
|
61
|
+
* @property {string[]} [themes] - Theme file paths to load
|
|
62
|
+
* @property {boolean} [noThemes] - Disable theme discovery
|
|
63
|
+
* @property {string | true} [listModels] - List available models with optional search
|
|
64
|
+
* @property {boolean} [verbose] - Force verbose startup
|
|
65
|
+
* @property {string[]} messages - Non-flag positional arguments (user messages)
|
|
66
|
+
* @property {string[]} fileArgs - File arguments (from @file syntax)
|
|
67
|
+
* @property {Map<string, boolean | string>} unknownFlags - Extension registered flags
|
|
68
|
+
*/
|
|
7
69
|
export interface Args {
|
|
8
70
|
provider?: string;
|
|
9
71
|
account?: string;
|
|
@@ -42,9 +104,63 @@ export interface Args {
|
|
|
42
104
|
/** Unknown flags (potentially extension flags) - map of flag name to value */
|
|
43
105
|
unknownFlags: Map<string, boolean | string>;
|
|
44
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Type guard to check if a string is a valid ThinkingLevel
|
|
109
|
+
*
|
|
110
|
+
* @param level - The string to check
|
|
111
|
+
* @returns True if the string is a valid ThinkingLevel
|
|
112
|
+
*/
|
|
45
113
|
export declare function isValidThinkingLevel(level: string): level is ThinkingLevel;
|
|
114
|
+
/**
|
|
115
|
+
* Type guard to check if a string is a valid Mode
|
|
116
|
+
*
|
|
117
|
+
* @param mode - The string to check
|
|
118
|
+
* @returns True if the string is a valid Mode
|
|
119
|
+
*/
|
|
120
|
+
export declare function isValidMode(mode: string): mode is Mode;
|
|
121
|
+
/**
|
|
122
|
+
* Type guard to check if a tool name is valid
|
|
123
|
+
*
|
|
124
|
+
* @param toolName - The tool name to check
|
|
125
|
+
* @returns True if the tool name is in the available tools list
|
|
126
|
+
*/
|
|
127
|
+
export declare function isValidToolName(toolName: string): toolName is ToolName;
|
|
128
|
+
/**
|
|
129
|
+
* Parse command-line arguments into structured Args object
|
|
130
|
+
*
|
|
131
|
+
* This function processes raw command-line arguments and converts them into
|
|
132
|
+
* a structured Args object. It handles:
|
|
133
|
+
* - Short and long flag formats (--flag, -f)
|
|
134
|
+
* - Flag values that follow (--flag value)
|
|
135
|
+
* - Boolean flags (--no-flag)
|
|
136
|
+
* - File arguments prefixed with @
|
|
137
|
+
* - Extension-registered flags (if extensionFlags provided)
|
|
138
|
+
* - Positional arguments (messages)
|
|
139
|
+
*
|
|
140
|
+
* @param args - Array of command-line argument strings (typically process.argv.slice(2))
|
|
141
|
+
* @param extensionFlags - Optional map of extension-registered flags with their types
|
|
142
|
+
* @returns Parsed Args object
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* const args = parseArgs(["--model", "gpt-4", "--verbose", "hello", "@file.txt"]);
|
|
147
|
+
* // Returns: { model: "gpt-4", verbose: true, messages: ["hello"], fileArgs: ["file.txt"] }
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
46
150
|
export declare function parseArgs(args: string[], extensionFlags?: Map<string, {
|
|
47
151
|
type: "boolean" | "string";
|
|
48
152
|
}>): Args;
|
|
153
|
+
/**
|
|
154
|
+
* Print comprehensive help documentation to stdout
|
|
155
|
+
*
|
|
156
|
+
* Displays:
|
|
157
|
+
* - Application name and brief description
|
|
158
|
+
* - Usage syntax
|
|
159
|
+
* - Available commands
|
|
160
|
+
* - All options with descriptions
|
|
161
|
+
* - Environment variables
|
|
162
|
+
* - Available tools
|
|
163
|
+
* - Example usage
|
|
164
|
+
*/
|
|
49
165
|
export declare function printHelp(): void;
|
|
50
166
|
//# sourceMappingURL=args.d.ts.map
|
package/dist/cli/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;CAC5C;AA8BD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,IAAI,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAEtE;AAgDD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAC,GAAG,IAAI,CA4L5G;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,IAAI,IAAI,CA8IhC"}
|
package/dist/cli/args.js
CHANGED
|
@@ -1,13 +1,133 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLI argument
|
|
2
|
+
* CLI Argument Parser - Command-line argument handling and validation
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Parse command-line arguments into structured format
|
|
6
|
+
* - Validate argument combinations
|
|
7
|
+
* - Provide helpful error messages for invalid args
|
|
8
|
+
* - Generate help documentation
|
|
9
|
+
* - Support extension flags registration
|
|
10
|
+
*
|
|
11
|
+
* Based on argument parsing patterns from indusagi CLI
|
|
12
|
+
* Original: https://github.com/varunisrani/indusagi-ts/vendor/indusagi-agent
|
|
13
|
+
*
|
|
14
|
+
* Adapted to:
|
|
15
|
+
* - Improve error messages
|
|
16
|
+
* - Add comprehensive documentation
|
|
17
|
+
* - Enhance validation
|
|
18
|
+
* - Improve UX with better prompts
|
|
3
19
|
*/
|
|
4
20
|
import chalk from "chalk";
|
|
5
21
|
import { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR } from "../config.js";
|
|
6
|
-
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// CONSTANTS
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/** Valid thinking levels for the --thinking flag */
|
|
7
26
|
const VALID_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
|
|
27
|
+
/** Default tools enabled when no --tools or --no-tools is specified */
|
|
28
|
+
const DEFAULT_TOOLS = ["read", "bash", "edit", "write", "task", "todoread", "todowrite"];
|
|
29
|
+
/** All available tool names for validation */
|
|
30
|
+
const AVAILABLE_TOOLS = [
|
|
31
|
+
"read",
|
|
32
|
+
"bash",
|
|
33
|
+
"edit",
|
|
34
|
+
"write",
|
|
35
|
+
"task",
|
|
36
|
+
"grep",
|
|
37
|
+
"find",
|
|
38
|
+
"ls",
|
|
39
|
+
"todoread",
|
|
40
|
+
"todowrite",
|
|
41
|
+
];
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// TYPE GUARDS
|
|
44
|
+
// ============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Type guard to check if a string is a valid ThinkingLevel
|
|
47
|
+
*
|
|
48
|
+
* @param level - The string to check
|
|
49
|
+
* @returns True if the string is a valid ThinkingLevel
|
|
50
|
+
*/
|
|
8
51
|
export function isValidThinkingLevel(level) {
|
|
9
52
|
return VALID_THINKING_LEVELS.includes(level);
|
|
10
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Type guard to check if a string is a valid Mode
|
|
56
|
+
*
|
|
57
|
+
* @param mode - The string to check
|
|
58
|
+
* @returns True if the string is a valid Mode
|
|
59
|
+
*/
|
|
60
|
+
export function isValidMode(mode) {
|
|
61
|
+
return mode === "text" || mode === "json" || mode === "rpc";
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Type guard to check if a tool name is valid
|
|
65
|
+
*
|
|
66
|
+
* @param toolName - The tool name to check
|
|
67
|
+
* @returns True if the tool name is in the available tools list
|
|
68
|
+
*/
|
|
69
|
+
export function isValidToolName(toolName) {
|
|
70
|
+
return AVAILABLE_TOOLS.includes(toolName);
|
|
71
|
+
}
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// VALIDATION FUNCTIONS
|
|
74
|
+
// ============================================================================
|
|
75
|
+
/**
|
|
76
|
+
* Validate tool names and filter out invalid ones
|
|
77
|
+
*
|
|
78
|
+
* @param toolNames - Array of tool names to validate
|
|
79
|
+
* @returns Array of valid tool names
|
|
80
|
+
*/
|
|
81
|
+
function validateToolNames(toolNames) {
|
|
82
|
+
const validTools = [];
|
|
83
|
+
for (const name of toolNames) {
|
|
84
|
+
if (isValidToolName(name)) {
|
|
85
|
+
validTools.push(name);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.error(chalk.yellow(`Warning: Unknown tool "${name}". Valid tools: ${AVAILABLE_TOOLS.join(", ")}`));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return validTools;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Validate thinking level and provide warning if invalid
|
|
95
|
+
*
|
|
96
|
+
* @param level - The thinking level to validate
|
|
97
|
+
* @returns The validated thinking level or undefined if invalid
|
|
98
|
+
*/
|
|
99
|
+
function validateThinkingLevel(level) {
|
|
100
|
+
if (isValidThinkingLevel(level)) {
|
|
101
|
+
return level;
|
|
102
|
+
}
|
|
103
|
+
console.error(chalk.yellow(`Warning: Invalid thinking level "${level}". Valid values: ${VALID_THINKING_LEVELS.join(", ")}`));
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
// ============================================================================
|
|
107
|
+
// ARGUMENT PARSING
|
|
108
|
+
// ============================================================================
|
|
109
|
+
/**
|
|
110
|
+
* Parse command-line arguments into structured Args object
|
|
111
|
+
*
|
|
112
|
+
* This function processes raw command-line arguments and converts them into
|
|
113
|
+
* a structured Args object. It handles:
|
|
114
|
+
* - Short and long flag formats (--flag, -f)
|
|
115
|
+
* - Flag values that follow (--flag value)
|
|
116
|
+
* - Boolean flags (--no-flag)
|
|
117
|
+
* - File arguments prefixed with @
|
|
118
|
+
* - Extension-registered flags (if extensionFlags provided)
|
|
119
|
+
* - Positional arguments (messages)
|
|
120
|
+
*
|
|
121
|
+
* @param args - Array of command-line argument strings (typically process.argv.slice(2))
|
|
122
|
+
* @param extensionFlags - Optional map of extension-registered flags with their types
|
|
123
|
+
* @returns Parsed Args object
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const args = parseArgs(["--model", "gpt-4", "--verbose", "hello", "@file.txt"]);
|
|
128
|
+
* // Returns: { model: "gpt-4", verbose: true, messages: ["hello"], fileArgs: ["file.txt"] }
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
11
131
|
export function parseArgs(args, extensionFlags) {
|
|
12
132
|
const result = {
|
|
13
133
|
messages: [],
|
|
@@ -16,85 +136,113 @@ export function parseArgs(args, extensionFlags) {
|
|
|
16
136
|
};
|
|
17
137
|
for (let i = 0; i < args.length; i++) {
|
|
18
138
|
const arg = args[i];
|
|
139
|
+
// ============================================================================
|
|
140
|
+
// HELP AND VERSION FLAGS
|
|
141
|
+
// ============================================================================
|
|
19
142
|
if (arg === "--help" || arg === "-h") {
|
|
20
143
|
result.help = true;
|
|
21
144
|
}
|
|
22
145
|
else if (arg === "--version" || arg === "-v") {
|
|
23
146
|
result.version = true;
|
|
24
147
|
}
|
|
148
|
+
// ============================================================================
|
|
149
|
+
// MODE FLAGS
|
|
150
|
+
// ============================================================================
|
|
25
151
|
else if (arg === "--mode" && i + 1 < args.length) {
|
|
26
152
|
const mode = args[++i];
|
|
27
|
-
if (mode
|
|
153
|
+
if (isValidMode(mode)) {
|
|
28
154
|
result.mode = mode;
|
|
29
155
|
}
|
|
30
156
|
}
|
|
157
|
+
// ============================================================================
|
|
158
|
+
// SESSION FLAGS
|
|
159
|
+
// ============================================================================
|
|
31
160
|
else if (arg === "--continue" || arg === "-c") {
|
|
32
161
|
result.continue = true;
|
|
33
162
|
}
|
|
34
163
|
else if (arg === "--resume" || arg === "-r") {
|
|
35
164
|
result.resume = true;
|
|
36
165
|
}
|
|
166
|
+
else if (arg === "--no-session") {
|
|
167
|
+
result.noSession = true;
|
|
168
|
+
}
|
|
169
|
+
else if (arg === "--session" && i + 1 < args.length) {
|
|
170
|
+
result.session = args[++i];
|
|
171
|
+
}
|
|
172
|
+
else if (arg === "--session-dir" && i + 1 < args.length) {
|
|
173
|
+
result.sessionDir = args[++i];
|
|
174
|
+
}
|
|
175
|
+
// ============================================================================
|
|
176
|
+
// PROVIDER AND AUTH FLAGS
|
|
177
|
+
// ============================================================================
|
|
37
178
|
else if (arg === "--provider" && i + 1 < args.length) {
|
|
38
179
|
result.provider = args[++i];
|
|
39
180
|
}
|
|
40
181
|
else if (arg === "--account" && i + 1 < args.length) {
|
|
41
182
|
result.account = args[++i];
|
|
42
183
|
}
|
|
184
|
+
else if (arg === "--api-key" && i + 1 < args.length) {
|
|
185
|
+
result.apiKey = args[++i];
|
|
186
|
+
}
|
|
187
|
+
// ============================================================================
|
|
188
|
+
// MODEL FLAGS
|
|
189
|
+
// ============================================================================
|
|
43
190
|
else if (arg === "--model" && i + 1 < args.length) {
|
|
44
191
|
result.model = args[++i];
|
|
45
192
|
}
|
|
46
|
-
else if (arg === "--
|
|
47
|
-
result.
|
|
193
|
+
else if (arg === "--models" && i + 1 < args.length) {
|
|
194
|
+
result.models = args[++i].split(",").map((s) => s.trim());
|
|
48
195
|
}
|
|
196
|
+
else if (arg === "--list-models") {
|
|
197
|
+
// Check if next arg is a search pattern (not a flag or file arg)
|
|
198
|
+
if (i + 1 < args.length && !args[i + 1].startsWith("-") && !args[i + 1].startsWith("@")) {
|
|
199
|
+
result.listModels = args[++i];
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
result.listModels = true;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// SYSTEM PROMPT FLAGS
|
|
207
|
+
// ============================================================================
|
|
49
208
|
else if (arg === "--system-prompt" && i + 1 < args.length) {
|
|
50
209
|
result.systemPrompt = args[++i];
|
|
51
210
|
}
|
|
52
211
|
else if (arg === "--append-system-prompt" && i + 1 < args.length) {
|
|
53
212
|
result.appendSystemPrompt = args[++i];
|
|
54
213
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
else if (arg === "--session" && i + 1 < args.length) {
|
|
59
|
-
result.session = args[++i];
|
|
60
|
-
}
|
|
61
|
-
else if (arg === "--session-dir" && i + 1 < args.length) {
|
|
62
|
-
result.sessionDir = args[++i];
|
|
63
|
-
}
|
|
64
|
-
else if (arg === "--models" && i + 1 < args.length) {
|
|
65
|
-
result.models = args[++i].split(",").map((s) => s.trim());
|
|
66
|
-
}
|
|
214
|
+
// ============================================================================
|
|
215
|
+
// TOOL FLAGS
|
|
216
|
+
// ============================================================================
|
|
67
217
|
else if (arg === "--no-tools") {
|
|
68
218
|
result.noTools = true;
|
|
69
219
|
}
|
|
70
220
|
else if (arg === "--tools" && i + 1 < args.length) {
|
|
71
221
|
const toolNames = args[++i].split(",").map((s) => s.trim());
|
|
72
|
-
|
|
73
|
-
for (const name of toolNames) {
|
|
74
|
-
if (name in allTools) {
|
|
75
|
-
validTools.push(name);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
console.error(chalk.yellow(`Warning: Unknown tool "${name}". Valid tools: ${Object.keys(allTools).join(", ")}`));
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
result.tools = validTools;
|
|
222
|
+
result.tools = validateToolNames(toolNames);
|
|
82
223
|
}
|
|
224
|
+
// ============================================================================
|
|
225
|
+
// THINKING FLAG
|
|
226
|
+
// ============================================================================
|
|
83
227
|
else if (arg === "--thinking" && i + 1 < args.length) {
|
|
84
228
|
const level = args[++i];
|
|
85
|
-
|
|
86
|
-
result.thinking = level;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
console.error(chalk.yellow(`Warning: Invalid thinking level "${level}". Valid values: ${VALID_THINKING_LEVELS.join(", ")}`));
|
|
90
|
-
}
|
|
229
|
+
result.thinking = validateThinkingLevel(level);
|
|
91
230
|
}
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// OUTPUT FLAGS
|
|
233
|
+
// ============================================================================
|
|
92
234
|
else if (arg === "--print" || arg === "-p") {
|
|
93
235
|
result.print = true;
|
|
94
236
|
}
|
|
95
237
|
else if (arg === "--export" && i + 1 < args.length) {
|
|
96
238
|
result.export = args[++i];
|
|
97
239
|
}
|
|
240
|
+
else if (arg === "--verbose") {
|
|
241
|
+
result.verbose = true;
|
|
242
|
+
}
|
|
243
|
+
// ============================================================================
|
|
244
|
+
// EXTENSION FLAGS
|
|
245
|
+
// ============================================================================
|
|
98
246
|
else if ((arg === "--extension" || arg === "-e") && i + 1 < args.length) {
|
|
99
247
|
result.extensions = result.extensions ?? [];
|
|
100
248
|
result.extensions.push(args[++i]);
|
|
@@ -109,42 +257,45 @@ export function parseArgs(args, extensionFlags) {
|
|
|
109
257
|
else if (arg === "--no-hooks") {
|
|
110
258
|
result.noHooks = true;
|
|
111
259
|
}
|
|
260
|
+
// ============================================================================
|
|
261
|
+
// SKILL FLAGS
|
|
262
|
+
// ============================================================================
|
|
112
263
|
else if (arg === "--skill" && i + 1 < args.length) {
|
|
113
264
|
result.skills = result.skills ?? [];
|
|
114
265
|
result.skills.push(args[++i]);
|
|
115
266
|
}
|
|
267
|
+
else if (arg === "--no-skills") {
|
|
268
|
+
result.noSkills = true;
|
|
269
|
+
}
|
|
270
|
+
// ============================================================================
|
|
271
|
+
// PROMPT TEMPLATE FLAGS
|
|
272
|
+
// ============================================================================
|
|
116
273
|
else if (arg === "--prompt-template" && i + 1 < args.length) {
|
|
117
274
|
result.promptTemplates = result.promptTemplates ?? [];
|
|
118
275
|
result.promptTemplates.push(args[++i]);
|
|
119
276
|
}
|
|
277
|
+
else if (arg === "--no-prompt-templates") {
|
|
278
|
+
result.noPromptTemplates = true;
|
|
279
|
+
}
|
|
280
|
+
// ============================================================================
|
|
281
|
+
// THEME FLAGS
|
|
282
|
+
// ============================================================================
|
|
120
283
|
else if (arg === "--theme" && i + 1 < args.length) {
|
|
121
284
|
result.themes = result.themes ?? [];
|
|
122
285
|
result.themes.push(args[++i]);
|
|
123
286
|
}
|
|
124
|
-
else if (arg === "--no-skills") {
|
|
125
|
-
result.noSkills = true;
|
|
126
|
-
}
|
|
127
|
-
else if (arg === "--no-prompt-templates") {
|
|
128
|
-
result.noPromptTemplates = true;
|
|
129
|
-
}
|
|
130
287
|
else if (arg === "--no-themes") {
|
|
131
288
|
result.noThemes = true;
|
|
132
289
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
result.listModels = args[++i];
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
result.listModels = true;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else if (arg === "--verbose") {
|
|
143
|
-
result.verbose = true;
|
|
144
|
-
}
|
|
290
|
+
// ============================================================================
|
|
291
|
+
// FILE ARGUMENTS
|
|
292
|
+
// ============================================================================
|
|
145
293
|
else if (arg.startsWith("@")) {
|
|
146
294
|
result.fileArgs.push(arg.slice(1)); // Remove @ prefix
|
|
147
295
|
}
|
|
296
|
+
// ============================================================================
|
|
297
|
+
// EXTENSION FLAGS (VENDOR CODE)
|
|
298
|
+
// ============================================================================
|
|
148
299
|
else if (arg.startsWith("--") && extensionFlags) {
|
|
149
300
|
// Check if it's an extension-registered flag
|
|
150
301
|
const flagName = arg.slice(2);
|
|
@@ -159,12 +310,30 @@ export function parseArgs(args, extensionFlags) {
|
|
|
159
310
|
}
|
|
160
311
|
// Unknown flags without extensionFlags are silently ignored (first pass)
|
|
161
312
|
}
|
|
313
|
+
// ============================================================================
|
|
314
|
+
// POSITIONAL ARGUMENTS (MESSAGES)
|
|
315
|
+
// ============================================================================
|
|
162
316
|
else if (!arg.startsWith("-")) {
|
|
163
317
|
result.messages.push(arg);
|
|
164
318
|
}
|
|
165
319
|
}
|
|
166
320
|
return result;
|
|
167
321
|
}
|
|
322
|
+
// ============================================================================
|
|
323
|
+
// HELP DOCUMENTATION
|
|
324
|
+
// ============================================================================
|
|
325
|
+
/**
|
|
326
|
+
* Print comprehensive help documentation to stdout
|
|
327
|
+
*
|
|
328
|
+
* Displays:
|
|
329
|
+
* - Application name and brief description
|
|
330
|
+
* - Usage syntax
|
|
331
|
+
* - Available commands
|
|
332
|
+
* - All options with descriptions
|
|
333
|
+
* - Environment variables
|
|
334
|
+
* - Available tools
|
|
335
|
+
* - Example usage
|
|
336
|
+
*/
|
|
168
337
|
export function printHelp() {
|
|
169
338
|
console.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools
|
|
170
339
|
|
|
@@ -186,7 +355,7 @@ ${chalk.bold("Options:")}
|
|
|
186
355
|
--model <id> Model ID (default: gemini-2.5-flash)
|
|
187
356
|
--api-key <key> API key (defaults to env vars)
|
|
188
357
|
--system-prompt <text> System prompt (default: coding assistant prompt)
|
|
189
|
-
--append-system-prompt <text> Append text or file contents to
|
|
358
|
+
--append-system-prompt <text> Append text or file contents to system prompt
|
|
190
359
|
--mode <mode> Output mode: text (default), json, or rpc
|
|
191
360
|
--print, -p Non-interactive mode: process prompt and exit
|
|
192
361
|
--continue, -c Continue previous session
|