{"_id":"@alexma03/utcp-cli","_rev":"3-249c39e73879c54d1983f37cfb6b4340","name":"@alexma03/utcp-cli","dist-tags":{"latest":"1.1.2"},"versions":{"1.1.0":{"name":"@alexma03/utcp-cli","version":"1.1.0","keywords":["utcp","universal-tool-calling-protocol","tools","api","typescript","tool calling","cli","agent","ai","llm"],"author":{"name":"Alexma03"},"license":"MPL-2.0","_id":"@alexma03/utcp-cli@1.1.0","maintainers":[{"name":"alexma03","email":"alex03marcos@gmail.com"}],"homepage":"https://github.com/Alexma03/alexma03-utcp#readme","bugs":{"url":"https://github.com/Alexma03/alexma03-utcp/issues"},"dist":{"shasum":"967f9eb562fe748885d9b58009d3cb4ad669e09b","tarball":"https://registry.npmjs.org/@alexma03/utcp-cli/-/utcp-cli-1.1.0.tgz","fileCount":8,"integrity":"sha512-iiqT/jGGQQUpL603EwK/NHyHPA32go+Y7/7jC+jObx86Z3UCHo5EkmRkZ1qVlsCJ5FLXr8WI3al/B5hqhj5xEw==","signatures":[{"sig":"MEUCIQCNNOqPWpP6qiKybcdkR8cqDFCK/gxiGG2VXJUg8bZmJgIgPX0szRAsUfoXkwfWFMKkxJacy7h180g1CVLb+4182dk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":862820},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"97f8055784030184a8917378a6de581d7ae7f22d","scripts":{"build":"tsup"},"_npmUser":{"name":"alexma03","email":"alex03marcos@gmail.com"},"repository":{"url":"git+https://github.com/Alexma03/alexma03-utcp.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.9.0","description":"CLI utilities for UTCP","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@alexma03/utcp-sdk":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","@types/bun":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/utcp-cli_1.1.0_1773650877424_0.5603730595610579","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alexma03/utcp-cli","version":"1.1.1","keywords":["utcp","universal-tool-calling-protocol","tools","api","typescript","tool calling","cli","agent","ai","llm"],"author":{"name":"Alexma03"},"license":"MPL-2.0","_id":"@alexma03/utcp-cli@1.1.1","maintainers":[{"name":"alexma03","email":"alex03marcos@gmail.com"}],"homepage":"https://github.com/Alexma03/alexma03-utcp#readme","bugs":{"url":"https://github.com/Alexma03/alexma03-utcp/issues"},"dist":{"shasum":"db6192003a29699fbba49bc145479444b2d92597","tarball":"https://registry.npmjs.org/@alexma03/utcp-cli/-/utcp-cli-1.1.1.tgz","fileCount":8,"integrity":"sha512-QFMilRzEPdkC4JlybjXH0X3LI1wsmkQjY2mDwicfGeYvsQwRUi+nGsLnOW0sDZkSqVBE/3xxozSt5ofzGwx/tw==","signatures":[{"sig":"MEYCIQCahBJ+t89T7oV/UsaCjle+2Pf2lITD1AM9C4LmQqdPxgIhAI9WNPVBXFswij8va8wHnSMyYR9eAKEJluia5xJarktx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":862815},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e836da75819768e8584255bfb61e7bdee947b035","scripts":{"build":"tsup"},"_npmUser":{"name":"alexma03","email":"alex03marcos@gmail.com"},"repository":{"url":"git+https://github.com/Alexma03/alexma03-utcp.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.9.0","description":"CLI utilities for UTCP","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@alexma03/utcp-sdk":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"latest","@types/bun":"latest","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/utcp-cli_1.1.1_1773652329278_0.19630313406948163","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@alexma03/utcp-cli","version":"1.1.2","description":"CLI utilities for UTCP","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","type":"module","license":"MPL-2.0","author":{"name":"Alexma03"},"repository":{"type":"git","url":"git+https://github.com/Alexma03/alexma03-utcp.git","directory":"packages/cli"},"homepage":"https://github.com/Alexma03/alexma03-utcp#readme","bugs":{"url":"https://github.com/Alexma03/alexma03-utcp/issues"},"keywords":["utcp","universal-tool-calling-protocol","tools","api","typescript","tool calling","cli","agent","ai","llm"],"publishConfig":{"access":"public"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs","default":"./dist/index.js"}},"dependencies":{"@alexma03/utcp-sdk":"^1.1.1"},"devDependencies":{"@types/jest":"29.5.12","@types/node":"20.0.0","jest":"29.7.0","ts-jest":"29.1.2","typescript":"^5.0.0"},"scripts":{"build":"tsup","test":"jest"},"_id":"@alexma03/utcp-cli@1.1.2","_integrity":"sha512-3+EnmHfKMLL7B4aiYaMRm7x6rCfhp3BF5pc/tgSEBRgdJy/k341czFAaYmHD9OjEnVtDf6mYGwztO8Sea4CdVg==","_resolved":"/private/var/folders/mw/dp007xzd5sz9vkhkjfz0fdh40000gn/T/ebd76c165e4124eaa8fc90de821fd483/alexma03-utcp-cli-1.1.2.tgz","_from":"file:alexma03-utcp-cli-1.1.2.tgz","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-3+EnmHfKMLL7B4aiYaMRm7x6rCfhp3BF5pc/tgSEBRgdJy/k341czFAaYmHD9OjEnVtDf6mYGwztO8Sea4CdVg==","shasum":"8497b483590d249d46906901b1121b3c1b81ff31","tarball":"https://registry.npmjs.org/@alexma03/utcp-cli/-/utcp-cli-1.1.2.tgz","fileCount":8,"unpackedSize":865883,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFMJpkz6Kw39Mc+I9ybG/V5euSRhEPkTouShIw4PMMRrAiASTm88FLjfgzFACnU2UsYSGbKJ/2UkShfJBKp2/OVVMg=="}]},"_npmUser":{"name":"alexma03","email":"alex03marcos@gmail.com"},"directories":{},"maintainers":[{"name":"alexma03","email":"alex03marcos@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/utcp-cli_1.1.2_1773735233950_0.04742209199843361"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-16T08:47:57.308Z","modified":"2026-03-17T08:13:54.258Z","1.1.0":"2026-03-16T08:47:57.580Z","1.1.1":"2026-03-16T09:12:09.472Z","1.1.2":"2026-03-17T08:13:54.163Z"},"bugs":{"url":"https://github.com/Alexma03/alexma03-utcp/issues"},"author":{"name":"Alexma03"},"license":"MPL-2.0","homepage":"https://github.com/Alexma03/alexma03-utcp#readme","keywords":["utcp","universal-tool-calling-protocol","tools","api","typescript","tool calling","cli","agent","ai","llm"],"repository":{"type":"git","url":"git+https://github.com/Alexma03/alexma03-utcp.git","directory":"packages/cli"},"description":"CLI utilities for UTCP","maintainers":[{"name":"alexma03","email":"alex03marcos@gmail.com"}],"readme":"# @alexma03/utcp-cli: Command Line Interface Communication Protocol for UTCP\n\nThe `@alexma03/utcp-cli` package enables the `UtcpClient` to interact with command-line tools and programs as UTCP tool providers. This plugin provides a cross-platform way to execute shell commands, scripts, and CLI utilities with full support for multi-step workflows, environment variables, and output chaining.\n\n## Features\n\n*   **Automatic Plugin Registration**: Registers automatically when imported—no manual setup required.\n*   **Cross-Platform Support**: Automatically generates platform-specific scripts:\n    *   **Windows**: PowerShell scripts with proper error handling\n    *   **Unix/Linux/macOS**: Bash scripts with shell compatibility\n*   **Multi-Command Workflows**: Execute multiple commands in sequence within a single subprocess, maintaining state between commands.\n*   **Output Chaining**: Reference previous command outputs using variables (`$CMD_0_OUTPUT`, `$CMD_1_OUTPUT`, etc.).\n*   **Argument Placeholders**: Use `UTCP_ARG_argname_UTCP_END` placeholders for dynamic argument substitution.\n*   **Environment Variables**: Configure custom environment variables with UTCP variable substitution support.\n*   **Working Directory**: Specify custom working directories for command execution.\n*   **Tool Discovery**: Automatically discover tools by executing a discovery command that outputs a UTCP manual.\n*   **Smart Output Handling**: Control which command outputs are included in the final result.\n*   **JSON Output Parsing**: Automatically parses JSON responses when detected.\n\n## Installation\n\n```bash\nbun add @alexma03/utcp-cli @alexma03/utcp-sdk\n\n# Or using npm\nnpm install @alexma03/utcp-cli @alexma03/utcp-sdk\n```\n\nNote: `@alexma03/utcp-sdk` is a peer dependency.\n\n## Usage\n\nThe CLI plugin registers automatically when you import it—no manual registration needed. Simply import from `@alexma03/utcp-cli` to enable CLI support.\n\n```typescript\n// From your application's entry point\n\nimport { UtcpClient } from '@alexma03/utcp-sdk';\nimport { CliCallTemplateSerializer } from '@alexma03/utcp-cli';\n\nasync function main() {\n  // Define a CLI CallTemplate for single command execution\n  const serializer = new CliCallTemplateSerializer();\n  const gitStatusTemplate = serializer.validateDict({\n    name: 'git_status_tool',\n    call_template_type: 'cli',\n    commands: [\n      {\n        command: 'git status --porcelain',\n        append_to_final_output: true\n      }\n    ],\n    working_dir: '/path/to/your/repo'\n  });\n\n  const client = await UtcpClient.create(process.cwd(), {\n    manual_call_templates: [gitStatusTemplate]\n  });\n\n  console.log('CLI Plugin active. Executing tools...');\n\n  // Call the CLI tool\n  try {\n    const result = await client.callTool('git_status_tool', {});\n    console.log('Git status result:', result);\n  } catch (error) {\n    console.error('Error calling CLI tool:', error);\n  }\n\n  await client.close();\n}\n\nmain().catch(console.error);\n```\n\n## Advanced Configuration\n\n### Multi-Command Workflows\n\nExecute multiple commands in sequence within a single subprocess. State (like directory changes) is maintained between commands:\n\n```typescript\nconst serializer = new CliCallTemplateSerializer();\nconst multiStepTemplate = serializer.validateDict({\n  name: 'multi_step_workflow',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'cd UTCP_ARG_target_dir_UTCP_END',\n      append_to_final_output: false  // Don't include this output in final result\n    },\n    {\n      command: 'git pull origin main',\n      append_to_final_output: false  // Don't include this output\n    },\n    {\n      command: 'npm install',\n      append_to_final_output: false  // Don't include this output\n    },\n    {\n      command: 'npm test',\n      append_to_final_output: true   // Include this output in final result\n    }\n  ]\n});\n\n// Call with arguments\nconst result = await client.callTool('multi_step_workflow', {\n  target_dir: '/path/to/project'\n});\n```\n\n### Output Chaining\n\nReference the output of previous commands using variables:\n\n```typescript\nconst serializer = new CliCallTemplateSerializer();\nconst outputChainingTemplate = serializer.validateDict({\n  name: 'chained_commands',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'git rev-parse --short HEAD',\n      append_to_final_output: false\n    },\n    {\n      command: 'echo \"Building version: $CMD_0_OUTPUT\"',\n      append_to_final_output: false\n    },\n    {\n      command: 'docker build -t myapp:$CMD_0_OUTPUT .',\n      append_to_final_output: true\n    }\n  ]\n});\n```\n\n**Platform-Specific Variable Reference:**\n- **PowerShell** (Windows): `$CMD_0_OUTPUT`, `$CMD_1_OUTPUT`, etc.\n- **Bash** (Unix/Linux/macOS): `$CMD_0_OUTPUT`, `$CMD_1_OUTPUT`, etc.\n\n### Argument Placeholders\n\nUse `UTCP_ARG_argname_UTCP_END` placeholders for dynamic argument substitution:\n\n```typescript\nconst serializer = new CliCallTemplateSerializer();\nconst templateWithArgs = serializer.validateDict({\n  name: 'deploy_service',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'kubectl set image deployment/UTCP_ARG_service_name_UTCP_END ' +\n               'UTCP_ARG_service_name_UTCP_END=UTCP_ARG_image_tag_UTCP_END',\n      append_to_final_output: true\n    },\n    {\n      command: 'kubectl rollout status deployment/UTCP_ARG_service_name_UTCP_END',\n      append_to_final_output: true\n    }\n  ]\n});\n\n// Call with arguments - placeholders will be replaced\nconst result = await client.callTool('deploy_service', {\n  service_name: 'api-server',\n  image_tag: 'myapp:v1.2.3'\n});\n```\n\n### Environment Variables\n\nConfigure custom environment variables with UTCP variable substitution:\n\n```typescript\nconst serializer = new CliCallTemplateSerializer();\nconst envVarTemplate = serializer.validateDict({\n  name: 'python_script',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'python analysis.py --input UTCP_ARG_input_file_UTCP_END'\n    }\n  ],\n  env_vars: {\n    PYTHONPATH: '/custom/python/path',\n    API_KEY: '${MY_API_KEY}',        // Uses UTCP variable substitution\n    LOG_LEVEL: 'debug',\n    DATABASE_URL: '${DATABASE_URL}'\n  },\n  working_dir: '/path/to/scripts'\n});\n\nconst client = await UtcpClient.create(process.cwd(), {\n  manual_call_templates: [envVarTemplate],\n  variables: {\n    python__script_MY_API_KEY: 'secret-key-123',        // Namespaced variable\n    python__script_DATABASE_URL: 'postgresql://localhost/mydb'  // Namespaced variable\n  }\n});\n```\n\n### Tool Discovery\n\nCreate a CLI provider that discovers its tools dynamically:\n\n```typescript\n// Your CLI script should output a UTCP manual when called with a discovery flag\nconst serializer = new CliCallTemplateSerializer();\nconst discoveryTemplate = serializer.validateDict({\n  name: 'my_cli_tools',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'node my-cli-tool.js --utcp-discover',\n      append_to_final_output: true\n    }\n  ]\n});\n\nconst client = await UtcpClient.create(process.cwd(), {\n  manual_call_templates: [discoveryTemplate]\n});\n\n// Tools are automatically discovered and registered\nconst tools = await client.searchTools('my_cli_tools');\nconsole.log('Discovered tools:', tools.map(t => t.name));\n```\n\n**Example CLI Tool with Discovery:**\n\n```typescript\n// my-cli-tool.ts\nif (process.argv.includes('--utcp-discover')) {\n  const manual = {\n    utcp_version: \"1.0.0\",\n    manual_version: \"1.0.0\",\n    tools: [\n      {\n        name: \"echo_cli\",\n        description: \"Echoes a message via CLI.\",\n        inputs: {\n          type: \"object\",\n          properties: { message: { type: \"string\" } },\n          required: [\"message\"]\n        },\n        outputs: { type: \"string\" },\n        tags: [\"cli\", \"echo\"],\n        tool_call_template: {\n          name: \"my_cli_tools\",\n          call_template_type: \"cli\"\n        }\n      }\n    ]\n  };\n  console.log(JSON.stringify(manual));\n  process.exit(0);\n}\n\n// Handle other commands...\n```\n\n### Cross-Platform Commands\n\n**Important:** Use platform-appropriate syntax for your commands:\n\n**Windows (PowerShell):**\n```typescript\n{\n  commands: [\n    { command: 'Get-ChildItem -Path UTCP_ARG_path_UTCP_END' },\n    { command: 'Set-Location -Path UTCP_ARG_new_dir_UTCP_END' }\n  ]\n}\n```\n\n**Unix/Linux/macOS (Bash):**\n```typescript\n{\n  commands: [\n    { command: 'ls -la UTCP_ARG_path_UTCP_END' },\n    { command: 'cd UTCP_ARG_new_dir_UTCP_END' }\n  ]\n}\n```\n\nThe CLI plugin automatically detects the platform and executes commands using the appropriate shell.\n\n## Output Control\n\nControl which command outputs appear in the final result using `append_to_final_output`:\n\n```typescript\n{\n  commands: [\n    {\n      command: 'git pull',\n      append_to_final_output: false  // Don't include in result\n    },\n    {\n      command: 'npm test',\n      append_to_final_output: true   // Include in result\n    },\n    {\n      command: 'npm run build',\n      append_to_final_output: true   // Include in result\n    }\n  ]\n}\n```\n\n**Default Behavior:**\n- If `append_to_final_output` is not specified, only the **last command's output** is included in the final result.\n- Set explicitly to `true` or `false` to override this behavior for any command.\n\n## JSON Output Handling\n\nThe CLI plugin automatically detects and parses JSON output:\n\n```typescript\nconst serializer = new CliCallTemplateSerializer();\nconst jsonOutputTemplate = serializer.validateDict({\n  name: 'json_cli_tool',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'echo \\'{\"status\": \"success\", \"count\": 42}\\''\n    }\n  ]\n});\n\nconst result = await client.callTool('json_cli_tool', {});\n// result = { status: \"success\", count: 42 }  // Automatically parsed as JSON\n```\n\nIf output doesn't start with `{` or `[`, it's returned as plain text.\n\n## Command Execution Details\n\n### Single Subprocess Execution\n\nAll commands in a template are executed in a **single subprocess**, which means:\n- State is preserved between commands (e.g., directory changes with `cd`)\n- Environment variables persist across commands\n- Variables set in one command can be used in later commands\n\n### Script Generation\n\nThe plugin generates platform-specific scripts:\n\n**Windows (PowerShell):**\n```powershell\n$ErrorActionPreference = \"Stop\"\n# Variables to store command outputs\n$CMD_0_OUTPUT = git status 2>&1 | Out-String\n$CMD_1_OUTPUT = echo \"Status: $CMD_0_OUTPUT\" 2>&1 | Out-String\nWrite-Output $CMD_1_OUTPUT\n```\n\n**Unix (Bash):**\n```bash\n#!/bin/bash\n# Variables to store command outputs\nCMD_0_OUTPUT=$(git status 2>&1)\nCMD_1_OUTPUT=$(echo \"Status: $CMD_0_OUTPUT\" 2>&1)\necho \"${CMD_1_OUTPUT}\"\n```\n\n### Timeout Configuration\n\nDefault timeouts:\n- **Tool Discovery**: 30 seconds\n- **Tool Execution**: 120 seconds\n\nThese provide ample time for multi-command workflows.\n\n## API Reference\n\n### CliCallTemplate\n\n```typescript\ninterface CliCallTemplate {\n  name?: string;\n  call_template_type: 'cli';\n  commands: CommandStep[];\n  env_vars?: Record<string, string> | null;\n  working_dir?: string | null;\n  auth?: undefined;  // Not applicable for CLI\n}\n```\n\n### CommandStep\n\n```typescript\ninterface CommandStep {\n  command: string;                     // Command to execute with optional placeholders\n  append_to_final_output?: boolean;    // Include in final result (default: true for last command only)\n}\n```\n\n### Placeholder Syntax\n\n- **Argument Placeholder**: `UTCP_ARG_argname_UTCP_END`\n  - Replaced with the value from `tool_args`\n  - Example: `UTCP_ARG_filename_UTCP_END` → `'myfile.txt'`\n\n- **Output Reference**: `$CMD_N_OUTPUT` (where N is the command index starting from 0)\n  - References the output of previous commands\n  - Example: `$CMD_0_OUTPUT` → output from first command\n\n## Security Considerations\n\n**⚠️ Important Security Notes:**\n\n1. **Trusted Commands Only**: Commands are executed in a subprocess. Only use CLI templates from trusted sources.\n2. **Avoid Unsanitized Input**: Do not pass unsanitized user input directly into command strings.\n3. **Command Injection**: Be cautious when using output references (`$CMD_N_OUTPUT`) to avoid command injection vulnerabilities.\n4. **Validate Arguments**: Use proper input validation in your tool definitions.\n5. **Environment Variables**: Be careful with sensitive data in environment variables.\n\n## Best Practices\n\n1. **Use Placeholders**: Always use `UTCP_ARG_*_UTCP_END` placeholders instead of string concatenation.\n2. **Explicit Output Control**: Explicitly set `append_to_final_output` for clarity in multi-command workflows.\n3. **Error Handling**: Wrap tool calls in try-catch blocks for robust error handling.\n4. **Working Directory**: Specify `working_dir` when commands depend on specific file locations.\n5. **Platform-Specific Syntax**: Use appropriate command syntax for your target platform(s).\n6. **Tool Discovery**: Implement discovery commands that output valid UTCP manuals for dynamic tool registration.\n7. **Timeouts**: Be mindful of execution time for long-running commands.\n\n## Examples\n\n### Basic File Operations\n\n```typescript\nconst serializer = new CliCallTemplateSerializer();\nconst fileOpsTemplate = serializer.validateDict({\n  name: 'file_operations',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'cat UTCP_ARG_filename_UTCP_END'\n    }\n  ]\n});\n\nconst content = await client.callTool('file_operations', {\n  filename: '/path/to/file.txt'\n});\n```\n\n### Build and Test Pipeline\n\n```typescript\nconst serializer = new CliCallTemplateSerializer();\nconst buildPipeline = serializer.validateDict({\n  name: 'build_and_test',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'npm run lint',\n      append_to_final_output: false\n    },\n    {\n      command: 'npm test',\n      append_to_final_output: true\n    },\n    {\n      command: 'npm run build',\n      append_to_final_output: true\n    }\n  ],\n  env_vars: {\n    NODE_ENV: 'production',\n    CI: 'true'\n  }\n});\n```\n\n### Git Workflow\n\n```typescript\nconst serializer = new CliCallTemplateSerializer();\nconst gitWorkflow = serializer.validateDict({\n  name: 'git_commit_push',\n  call_template_type: 'cli',\n  commands: [\n    {\n      command: 'git add .',\n      append_to_final_output: false\n    },\n    {\n      command: 'git commit -m \"UTCP_ARG_message_UTCP_END\"',\n      append_to_final_output: false\n    },\n    {\n      command: 'git push origin UTCP_ARG_branch_UTCP_END',\n      append_to_final_output: true\n    }\n  ]\n});\n\nconst result = await client.callTool('git_commit_push', {\n  message: 'feat: add new feature',\n  branch: 'main'\n});\n```\n\n## Limitations\n\n- **No Streaming Support**: The CLI protocol does not support streaming. All output is returned when the command completes.\n- **Platform-Specific**: Commands must be written for the target platform (Windows/Unix).\n- **No Interactive Commands**: Interactive CLI tools (that require user input) are not supported.\n- **Fixed Timeouts**: Timeout durations are currently fixed (though generous).\n\n## License\n\nThis package is part of the UTCP project. See the main repository for license information.\n","readmeFilename":"README.md"}