goatchain-cli 0.0.2-beta.8 → 0.0.2
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 +15 -4
- package/dist/args-B4NUWmzz.js +2 -0
- package/dist/index.js +41 -41
- package/dist/{openai-COAwgJce.js → openai-BOGzt3st.js} +1 -1
- package/dist/repl-lWj9AUT_.js +76 -0
- package/dist/src-Bcu1Lib4.js +1 -0
- package/dist/src-BkCVu6Lk.js +287 -0
- package/dist/theme-4Sto2Osm.js +1 -0
- package/dist/theme-DvHvtqNs.js +1 -0
- package/dist/ui-B9ajujL6.js +1 -0
- package/dist/ui-D4n45LUU.js +2 -0
- package/package.json +3 -1
- package/dist/repl-DW3WSeYc.js +0 -70
- package/dist/src-C_rf5X6g.js +0 -258
- package/dist/src-DjihPInC.js +0 -1
- package/dist/ui-DM2shvqf.js +0 -3
- /package/dist/{openai-Ch2x0kpd.js → openai-Ba5c3VJv.js} +0 -0
package/README.md
CHANGED
|
@@ -93,7 +93,10 @@ export OPENAI_API_KEY=sk-...
|
|
|
93
93
|
export SERPER_API_KEY=your-serper-key
|
|
94
94
|
|
|
95
95
|
# Optional: Default model
|
|
96
|
-
export
|
|
96
|
+
export GOATCHAIN_MODEL=gpt-4o
|
|
97
|
+
|
|
98
|
+
# Optional: OpenAI-compatible base URL (e.g. DeepSeek / GLM)
|
|
99
|
+
export GOATCHAIN_OPENAI_BASE_URL=...
|
|
97
100
|
|
|
98
101
|
# Optional: Enable plan mode by default
|
|
99
102
|
export GOATCHAIN_PLAN_MODE=1
|
|
@@ -152,6 +155,14 @@ Create `.goatchain/config.json` in your project:
|
|
|
152
155
|
| `/api-key <key>` | Set API key |
|
|
153
156
|
| `/web-search-key <key>` | Set web search API key |
|
|
154
157
|
|
|
158
|
+
### OpenAI-Compatible Providers (DeepSeek / GLM)
|
|
159
|
+
|
|
160
|
+
GoatChain CLI uses an OpenAI-compatible client. To use other providers, set `/base-url` (or `GOATCHAIN_OPENAI_BASE_URL`) and provide the matching API key via `/api-key` (or `OPENAI_API_KEY`).
|
|
161
|
+
|
|
162
|
+
Examples of model ids you can select via `/model`:
|
|
163
|
+
- DeepSeek: `deepseek-chat`, `deepseek-reasoner`, `deepseek-v3.1`
|
|
164
|
+
- GLM: `glm-4-plus`, `glm-4-air`, `glm-4-flash`, `glm-4v-plus`
|
|
165
|
+
|
|
155
166
|
## 🔧 Built-in Tools
|
|
156
167
|
|
|
157
168
|
### File Operations
|
|
@@ -268,11 +279,11 @@ goatchain
|
|
|
268
279
|
```bash
|
|
269
280
|
# Development environment
|
|
270
281
|
export GOATCHAIN_PLAN_MODE=1
|
|
271
|
-
export
|
|
282
|
+
export GOATCHAIN_MODEL=gpt-4o
|
|
272
283
|
|
|
273
284
|
# Production-like environment (more conservative)
|
|
274
285
|
export GOATCHAIN_PLAN_MODE=0
|
|
275
|
-
export
|
|
286
|
+
export GOATCHAIN_MODEL=gpt-3.5-turbo
|
|
276
287
|
```
|
|
277
288
|
|
|
278
289
|
## 🛠️ Development
|
|
@@ -354,4 +365,4 @@ MIT © [Simon He](https://github.com/Simon-He95)
|
|
|
354
365
|
|
|
355
366
|
---
|
|
356
367
|
|
|
357
|
-
**Need help?** Type `/help` in the CLI or open an issue on GitHub.
|
|
368
|
+
**Need help?** Type `/help` in the CLI or open an issue on GitHub.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Command as e,InvalidArgumentError as t}from"commander";function n(e){let t=String(e??``).trim().toLowerCase().replace(/[-\s]+/g,`_`);return t===`read`||t===`readonly`||t===`read_only`?`read_only`:t===`agent`||t===`default`?`agent`:t===`full`||t===`full_access`||t===`agent_full`||t===`agent_full_access`?`full_access`:`read_only`}function r(e){return e===`read_only`?`Read Only`:e===`agent`?`Agent (current)`:`Agent (full access)`}function i(e){return{strategy:`high_risk`,autoApprove:e.envAutoApprove===`1`||e.envAutoApprove===!0||e.mode!==`read_only`}}function a(e){return{allowOutsideWorkspace:e===`full_access`,allowNetwork:e===`full_access`||e===`read_only`}}function o(){return[``,`Interactive slash commands:`,` /help Show help`,` /clear Clear pending attachments`,` /approvals Select approval mode (interactive)`,` /model [id] Show/set model id`,` /workspace Switch workspace root (interactive)`,` /files Attach file(s) (interactive)`,` /images Attach image(s) (interactive)`,` /settings Base URL / API key / tokens`,` /config [--json] Print full config (secrets redacted)`,` /output Output & UX options`,` /agent Switch to agent mode (normal operation)`,` /plan Switch to plan mode (read-only planning with TodoWrite)`,` /diag Show last turn stop reason + tool calls`,` /diagnostics Alias for /diag`,` /edit Compose a message in $EDITOR`,` /multiline Start multiline input (.send/.cancel)`,` /set <k> <v> Set request param (maxTokens/temperature/topP/...)`,` /unset <k> Clear request param`,` /params Show current request params`,` /base-url <url> Set base URL (recreates client if needed)`,` /api-key <key> Set API key for this process (not printed)`,` /web-search-key <key> Set Serper API key for WebSearch tool (not printed)`,` /tools List enabled tools`,` /mcp [subcmd] MCP servers (connect/disconnect/tools)`,` /sessions List/pick/delete sessions`,` /use <sessionId> Switch session (restore history)`,` /rm <sessionId...> Delete session(s)`,` /save Save current session/config`,` /status Show current session/model info`,` /new Start a new conversation (clears history)`,` /compact Manually compress context (generate summary)`,` /exit Exit`,``,`Mentions:`,` @<query> Search workspace files/dirs (Enter inserts @path)`,``,`Keybindings:`,` (Type @ or / to show suggestions; filters as you type)`,` Tab Fill the selected suggestion`,` ↑/↓ Select a suggestion`,` Enter Run /command, or insert @workspace path selection`,` PgUp/PgDn/Home/End Scroll fullscreen log`,` Ctrl+K Open command palette`,` Ctrl+O Manage attachments`,` Ctrl+G Clear attachments`,``,`UI:`,` GOATCHAIN_UI=inline Disable fullscreen UI`,` GOATCHAIN_UI=legacy Disable interactive UI`,` GOATCHAIN_UI=full Force fullscreen UI`,` GOATCHAIN_THEME=dark Dark terminal theme (default)`,` GOATCHAIN_THEME=light Light terminal theme`,` GOATCHAIN_ANIMATE=0 Disable splash animation`,``,`Approvals:`,` GOATCHAIN_APPROVAL_MODE=read_only|agent|full_access`,` (You can also change this in-app via /approvals)`,``,`Image attachments:`,` (Also configurable via .goatchain/config.json -> ui.attachImages.*)`,` GOATCHAIN_ATTACH_IMAGES_NOTE_TEMPLATE=<text> Template supports {{items}}/{{count}}/{{json}}`,` GOATCHAIN_ATTACH_IMAGES_NOTE_POSITION=start|before_images|after_images|before_text|after_text|end`,` GOATCHAIN_ATTACH_IMAGES_IMAGES_POSITION=start|before_text|after_text|end`,` GOATCHAIN_ATTACH_IMAGES_DATA_URL_MODE=none|prefix|full`,` GOATCHAIN_ATTACH_IMAGES_MAX_DATA_URL_CHARS=8000`,``].join(`
|
|
2
|
+
`)}function s(e){return n=>{let r=Number(n);if(!Number.isFinite(r))throw new t(`Invalid ${e}: ${n}`);return r}}function c(e){return n=>{let r=Number.parseInt(n,10);if(!Number.isFinite(r))throw new t(`Invalid ${e}: ${n}`);return r}}function l(t){return new e().name(`goatchain`).description(`A tiny interactive chat CLI built on agent-loop`).argument(`[prompt...]`,`one-shot prompt (omit to start interactive mode)`).option(`-k, --api-key <key>`,`OpenAI API key (or set OPENAI_API_KEY)`).option(`-m, --model <id>`,`Default model id (OpenAI)`).option(`--system <prompt>`,`System prompt`).option(`--base-url <url>`,`Override OpenAI base URL (proxy)`).option(`--serper-api-key <key>`,`Serper API key (enables WebSearch tool)`).option(`--web-search-api-key <key>`,`Alias for --serper-api-key`).option(`--serper-api-endpoint <url>`,`Serper API endpoint (WebSearch tool)`).option(`--web-search-api-endpoint <url>`,`Alias for --serper-api-endpoint`).option(`--serper-num-results <n>`,`Serper number of results (WebSearch tool)`,c(`serper-num-results`)).option(`--web-search-num-results <n>`,`Alias for --serper-num-results`,c(`web-search-num-results`)).option(`--max-tokens <n>`,`Max completion tokens`,c(`max-tokens`)).option(`--temperature <n>`,`Temperature (0-2)`,s(`temperature`)).option(`--top-p <n>`,`Top-p (0-1)`,s(`top-p`)).option(`--presence-penalty <n>`,`Presence penalty (-2..2)`,s(`presence-penalty`)).option(`--frequency-penalty <n>`,`Frequency penalty (-2..2)`,s(`frequency-penalty`)).option(`--seed <n>`,`Random seed`,c(`seed`)).option(`--timeout-ms <n>`,`Request timeout in ms`,c(`timeout-ms`)).option(`--session <id>`,`Use a saved session id (optional)`).version(t,`-v, --version`,`Show version`).helpOption(`-h, --help`,`Show help`).showHelpAfterError().showSuggestionAfterError().addHelpText(`after`,o())}function u(e,t){let n=l(t);n.parse(e,{from:`user`});let r=n.opts(),i=Array.isArray(n.args)?n.args.join(` `).trim():``,a=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0,o=e=>typeof e==`number`&&Number.isFinite(e)?Math.trunc(e):void 0;return{apiKey:typeof r.apiKey==`string`&&r.apiKey.trim()?r.apiKey:void 0,modelId:typeof r.model==`string`&&r.model.trim()?r.model:void 0,system:typeof r.system==`string`&&r.system.trim()?r.system:void 0,baseUrl:typeof r.baseUrl==`string`&&r.baseUrl.trim()?r.baseUrl:void 0,webSearchApiKey:typeof r.webSearchApiKey==`string`&&r.webSearchApiKey.trim()?r.webSearchApiKey:typeof r.serperApiKey==`string`&&r.serperApiKey.trim()?r.serperApiKey:void 0,webSearchApiEndpoint:typeof r.webSearchApiEndpoint==`string`&&r.webSearchApiEndpoint.trim()?r.webSearchApiEndpoint:typeof r.serperApiEndpoint==`string`&&r.serperApiEndpoint.trim()?r.serperApiEndpoint:void 0,webSearchNumResults:typeof r.webSearchNumResults==`number`&&Number.isFinite(r.webSearchNumResults)?Math.trunc(r.webSearchNumResults):o(r.serperNumResults),maxTokens:o(r.maxTokens),temperature:a(r.temperature),topP:a(r.topP),presencePenalty:a(r.presencePenalty),frequencyPenalty:a(r.frequencyPenalty),seed:o(r.seed),timeoutMs:o(r.timeoutMs),sessionId:typeof r.session==`string`&&r.session.trim()?r.session:void 0,prompt:i}}export{a,r as i,o as n,i as o,u as r,n as s,l as t};
|