@sunilp-org/jam-cli 0.1.1 → 0.2.0
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 +139 -14
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +7 -1
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/commit.d.ts +14 -1
- package/dist/commands/commit.d.ts.map +1 -1
- package/dist/commands/commit.js +85 -6
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +2 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +36 -3
- package/dist/config/loader.js.map +1 -1
- package/dist/providers/base.d.ts +11 -0
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/embedded.d.ts +20 -0
- package/dist/providers/embedded.d.ts.map +1 -0
- package/dist/providers/embedded.js +389 -0
- package/dist/providers/embedded.js.map +1 -0
- package/dist/providers/factory.d.ts.map +1 -1
- package/dist/providers/factory.js +9 -1
- package/dist/providers/factory.js.map +1 -1
- package/dist/utils/logger.js +1 -0
- package/dist/utils/logger.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -58,7 +58,8 @@ Most AI coding tools are built around a single vendor's model, require a browser
|
|
|
58
58
|
| 📂 | **Repo-aware** | Explain files, search code, review diffs with full workspace context |
|
|
59
59
|
| 🩹 | **Patch workflow** | Generate unified diffs, validate, preview, and apply with confirmation |
|
|
60
60
|
| 🤖 | **Tool-calling agent** | `jam run` gives the model access to local tools (read, search, diff, apply) |
|
|
61
|
-
| 🔌 | **Pluggable providers** | Ollama, OpenAI, Groq built-in; adapter pattern for adding any LLM |
|
|
61
|
+
| 🔌 | **Pluggable providers** | Ollama, OpenAI, Groq, **Embedded** built-in; adapter pattern for adding any LLM |
|
|
62
|
+
| 📦 | **Embedded inference** | **[Experimental]** Run without Ollama — tiny GGUF model runs directly in-process via `node-llama-cpp` |
|
|
62
63
|
| ⚙️ | **Layered config** | Global → repo → CLI flags; multiple named profiles |
|
|
63
64
|
| 🔐 | **Secure secrets** | OS keychain via keytar, env var fallback |
|
|
64
65
|
| 🐚 | **Shell completions** | Bash and Zsh |
|
|
@@ -97,17 +98,35 @@ Most AI coding tools are built around a single vendor's model, require a browser
|
|
|
97
98
|
|
|
98
99
|
## Quick Start
|
|
99
100
|
|
|
101
|
+
### Provider Support
|
|
102
|
+
|
|
103
|
+
| Provider | Status | Notes |
|
|
104
|
+
|----------|--------|-------|
|
|
105
|
+
| **Ollama** | ✅ Default | Local inference via `ollama serve` |
|
|
106
|
+
| **OpenAI** | ✅ Supported | Requires `OPENAI_API_KEY` |
|
|
107
|
+
| **Groq** | ✅ Supported | Requires `GROQ_API_KEY` |
|
|
108
|
+
| **Embedded** | ⚗️ Experimental | In-process via `node-llama-cpp`, no server needed |
|
|
109
|
+
|
|
100
110
|
### Prerequisites
|
|
101
111
|
|
|
102
112
|
- **Node.js 20+**
|
|
103
|
-
- **
|
|
104
|
-
-
|
|
113
|
+
- **One of the following model backends:**
|
|
114
|
+
- **[Ollama](https://ollama.ai)** running locally (`ollama serve`) + a pulled model (`ollama pull llama3.2`)
|
|
115
|
+
- **Embedded mode** — no server needed! Uses `node-llama-cpp` to run a tiny GGUF model in-process.
|
|
116
|
+
Install with: `npm install node-llama-cpp` (auto-downloads a ~250 MB model on first run)
|
|
105
117
|
|
|
106
118
|
### Install
|
|
107
119
|
|
|
108
120
|
```bash
|
|
109
|
-
#
|
|
110
|
-
|
|
121
|
+
# Try instantly — no install required
|
|
122
|
+
npx @sunilp-org/jam-cli doctor
|
|
123
|
+
|
|
124
|
+
# Global install from npm
|
|
125
|
+
npm install -g @sunilp-org/jam-cli
|
|
126
|
+
|
|
127
|
+
# Homebrew (macOS / Linux)
|
|
128
|
+
brew tap sunilp/tap
|
|
129
|
+
brew install jam-cli
|
|
111
130
|
|
|
112
131
|
# Or run from source
|
|
113
132
|
git clone https://github.com/sunilp/jam-cli.git
|
|
@@ -415,12 +434,16 @@ Checks:
|
|
|
415
434
|
Jam merges config in priority order (highest wins):
|
|
416
435
|
|
|
417
436
|
```
|
|
418
|
-
1. CLI flags
|
|
419
|
-
2. .jam/config.json or .jamrc
|
|
420
|
-
3. ~/.
|
|
421
|
-
4.
|
|
437
|
+
1. CLI flags (--provider, --model, etc.)
|
|
438
|
+
2. .jam/config.json or .jamrc (repo-level)
|
|
439
|
+
3. ~/.jam/config.json (user home-dir dotfile — preferred)
|
|
440
|
+
4. ~/.config/jam/config.json (XDG user config — fallback)
|
|
441
|
+
5. Built-in defaults
|
|
422
442
|
```
|
|
423
443
|
|
|
444
|
+
> **Recommended:** Use `~/.jam/config.json` for your personal settings (provider, API keys, default model).
|
|
445
|
+
> Use `.jam/config.json` at the repo root for project-specific overrides (tool policy, redact patterns).
|
|
446
|
+
|
|
424
447
|
### Config Schema
|
|
425
448
|
|
|
426
449
|
```json
|
|
@@ -439,6 +462,10 @@ Jam merges config in priority order (highest wins):
|
|
|
439
462
|
"provider": "ollama",
|
|
440
463
|
"model": "qwen2.5-coder:1.5b",
|
|
441
464
|
"baseUrl": "http://localhost:11434"
|
|
465
|
+
},
|
|
466
|
+
"embedded": {
|
|
467
|
+
"provider": "embedded",
|
|
468
|
+
"model": "smollm2-360m"
|
|
442
469
|
}
|
|
443
470
|
},
|
|
444
471
|
"toolPolicy": "ask_every_time",
|
|
@@ -465,7 +492,7 @@ Jam merges config in priority order (highest wins):
|
|
|
465
492
|
|
|
466
493
|
| Field | Type | Description |
|
|
467
494
|
|-------|------|-------------|
|
|
468
|
-
| `provider` | string | Provider name (`ollama`, `openai`, `groq`) |
|
|
495
|
+
| `provider` | string | Provider name (`ollama`, `openai`, `groq`, `embedded`) |
|
|
469
496
|
| `model` | string | Model ID (e.g. `llama3.2`, `codellama`) |
|
|
470
497
|
| `baseUrl` | string | Provider API base URL |
|
|
471
498
|
| `apiKey` | string | API key (prefer keychain or env vars) |
|
|
@@ -476,11 +503,43 @@ Jam merges config in priority order (highest wins):
|
|
|
476
503
|
### Initialize Config
|
|
477
504
|
|
|
478
505
|
```bash
|
|
479
|
-
#
|
|
506
|
+
# User-level — creates ~/.jam/config.json (recommended)
|
|
507
|
+
jam config init --global
|
|
508
|
+
|
|
509
|
+
# Repo-level — creates .jam/config.json (committed to version control)
|
|
480
510
|
jam config init
|
|
511
|
+
```
|
|
481
512
|
|
|
482
|
-
|
|
483
|
-
|
|
513
|
+
The global config at `~/.jam/config.json` is the best place to set your default provider, model, API keys, and personal preferences. Edit it directly:
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
# Example: switch default provider to embedded
|
|
517
|
+
vim ~/.jam/config.json
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
```json
|
|
521
|
+
{
|
|
522
|
+
"defaultProfile": "default",
|
|
523
|
+
"profiles": {
|
|
524
|
+
"default": {
|
|
525
|
+
"provider": "ollama",
|
|
526
|
+
"model": "llama3.2",
|
|
527
|
+
"baseUrl": "http://localhost:11434"
|
|
528
|
+
},
|
|
529
|
+
"openai": {
|
|
530
|
+
"provider": "openai",
|
|
531
|
+
"model": "gpt-4o-mini",
|
|
532
|
+
"apiKey": "sk-..."
|
|
533
|
+
},
|
|
534
|
+
"offline": {
|
|
535
|
+
"provider": "embedded",
|
|
536
|
+
"model": "smollm2-360m"
|
|
537
|
+
}
|
|
538
|
+
},
|
|
539
|
+
"toolPolicy": "ask_every_time",
|
|
540
|
+
"historyEnabled": true,
|
|
541
|
+
"logLevel": "warn"
|
|
542
|
+
}
|
|
484
543
|
```
|
|
485
544
|
|
|
486
545
|
### Using Profiles
|
|
@@ -506,6 +565,72 @@ echo '{"defaultProfile": "fast"}' > .jamrc
|
|
|
506
565
|
|
|
507
566
|
---
|
|
508
567
|
|
|
568
|
+
## Embedded Provider — Experimental ⚗️
|
|
569
|
+
|
|
570
|
+
> **⚠️ EXPERIMENTAL** — The embedded provider is functional but quality is limited by small model sizes. For production workloads, use Ollama or OpenAI.
|
|
571
|
+
|
|
572
|
+
The `embedded` provider runs a tiny GGUF model **directly in-process** via [`node-llama-cpp`](https://github.com/withcatai/node-llama-cpp). No Ollama installation, no server process, no network calls. **Models are only downloaded when you explicitly set `provider: "embedded"`** — it never downloads anything unless you opt in.
|
|
573
|
+
|
|
574
|
+
### Setup
|
|
575
|
+
|
|
576
|
+
```bash
|
|
577
|
+
# Install the native dependency (optional — only needed for embedded mode)
|
|
578
|
+
npm install node-llama-cpp
|
|
579
|
+
|
|
580
|
+
# Switch to embedded provider
|
|
581
|
+
jam ask "Hello" --provider embedded
|
|
582
|
+
|
|
583
|
+
# Or set it permanently in your config
|
|
584
|
+
jam config init --global # then edit ~/.jam/config.json
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
### How It Works
|
|
588
|
+
|
|
589
|
+
1. On first use, Jam auto-downloads a small model (~250 MB) to `~/.jam/models/`
|
|
590
|
+
2. The model loads in-process using llama.cpp bindings — no external server
|
|
591
|
+
3. Streaming, tool-calling, and all standard commands work as usual
|
|
592
|
+
|
|
593
|
+
### Available Models
|
|
594
|
+
|
|
595
|
+
| Alias | Size (Q4_K_M) | Notes |
|
|
596
|
+
|-------|---------------|-------|
|
|
597
|
+
| `smollm2-135m` | ~100 MB | Ultra-light, very fast, basic quality |
|
|
598
|
+
| `smollm2-360m` | ~250 MB | **Default** — good quality-to-size ratio |
|
|
599
|
+
| `smollm2-1.7b` | ~1 GB | Best quality for embedded, needs more RAM |
|
|
600
|
+
|
|
601
|
+
```bash
|
|
602
|
+
# Use a specific embedded model alias
|
|
603
|
+
jam ask "Explain git rebase" --provider embedded --model smollm2-1.7b
|
|
604
|
+
|
|
605
|
+
# Or point to any local GGUF file
|
|
606
|
+
jam ask "Hello" --provider embedded --model /path/to/custom-model.gguf
|
|
607
|
+
|
|
608
|
+
# Profile-based setup
|
|
609
|
+
# In ~/.jam/config.json:
|
|
610
|
+
# {
|
|
611
|
+
# "profiles": {
|
|
612
|
+
# "offline": {
|
|
613
|
+
# "provider": "embedded",
|
|
614
|
+
# "model": "smollm2-1.7b"
|
|
615
|
+
# }
|
|
616
|
+
# }
|
|
617
|
+
# }
|
|
618
|
+
jam ask "Hello" --profile offline
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
### When to Use Embedded vs Ollama
|
|
622
|
+
|
|
623
|
+
| Scenario | Recommendation |
|
|
624
|
+
|----------|---------------|
|
|
625
|
+
| No Ollama / can't install system software | **Embedded** |
|
|
626
|
+
| CI/CD pipeline, Docker container, SSH box | **Embedded** |
|
|
627
|
+
| Air-gapped / offline machine | **Embedded** (after initial model download) |
|
|
628
|
+
| Want best quality & larger models (7B+) | **Ollama** |
|
|
629
|
+
| GPU acceleration needed | **Ollama** |
|
|
630
|
+
| Already have Ollama running | **Ollama** |
|
|
631
|
+
|
|
632
|
+
---
|
|
633
|
+
|
|
509
634
|
## Development
|
|
510
635
|
|
|
511
636
|
```bash
|
|
@@ -524,7 +649,7 @@ npm run test:coverage # coverage report
|
|
|
524
649
|
src/
|
|
525
650
|
├── index.ts # CLI entry point — command registration (Commander)
|
|
526
651
|
├── commands/ # One file per command (ask, chat, run, review, commit, …)
|
|
527
|
-
├── providers/ # LLM adapter layer — ProviderAdapter interface + Ollama impl
|
|
652
|
+
├── providers/ # LLM adapter layer — ProviderAdapter interface + Ollama, Embedded impl
|
|
528
653
|
├── tools/ # Model-callable tools + registry + permission enforcement
|
|
529
654
|
├── config/ # Zod schema, cosmiconfig loader, built-in defaults
|
|
530
655
|
├── storage/ # Chat session persistence (JSON files)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;yFACqF;IACrF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0CD,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;yFACqF;IACrF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0CD,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+QjG"}
|
package/dist/commands/ask.js
CHANGED
|
@@ -85,6 +85,7 @@ export async function runAsk(inlinePrompt, options) {
|
|
|
85
85
|
const adapter = await createProvider(profile);
|
|
86
86
|
// ── Agentic context-gathering phase ───────────────────────────────────────
|
|
87
87
|
const useTools = options.tools !== false &&
|
|
88
|
+
adapter.info.supportsTools !== false &&
|
|
88
89
|
typeof adapter.chatWithTools === 'function';
|
|
89
90
|
// Build workspace context for better model reasoning
|
|
90
91
|
const workspaceRoot = useTools ? await getWorkspaceRoot() : '';
|
|
@@ -93,7 +94,12 @@ export async function runAsk(inlinePrompt, options) {
|
|
|
93
94
|
: { jamContext: null, workspaceCtx: '' };
|
|
94
95
|
const systemPrompt = options.system ??
|
|
95
96
|
profile.systemPrompt ??
|
|
96
|
-
(useTools
|
|
97
|
+
(useTools
|
|
98
|
+
? buildSystemPrompt(jamContext, workspaceCtx)
|
|
99
|
+
: adapter.info.supportsTools === false
|
|
100
|
+
// Embedded / small model: lean prompt — just answer the question.
|
|
101
|
+
? 'You are a helpful, knowledgeable AI assistant. Answer the user\'s question directly, concisely, and accurately. Format your response in clean Markdown when helpful.'
|
|
102
|
+
: undefined);
|
|
97
103
|
if (useTools && adapter.chatWithTools) {
|
|
98
104
|
const noColor = options.noColor ?? false;
|
|
99
105
|
const tracker = new ToolCallTracker();
|
package/dist/commands/ask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAe7D,iFAAiF;AAEjF,KAAK,UAAU,mBAAmB;IAChC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF,wEAAwE;AACxE,KAAK,UAAU,iBAAiB,CAC9B,IAAY,EACZ,KAA0F,EAC1F,OAAmB,EACnB,OAA2B,EAC3B,OAAgB,EAChB,SAAgC;IAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,KAAK,CAAC;QAChB,SAAS,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,YAAgC,EAAE,OAAmB;IAChF,IAAI,CAAC;QACH,kEAAkE;QAClE,IAAI,MAAc,CAAC;QAEnB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,QAAQ,CAChB,qBAAqB,OAAO,CAAC,IAAI,EAAE,EACnC,sBAAsB,EACtB,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,MAAM,GAAG,YAAY,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,MAAM,mBAAmB,EAAE,CAAC;YACjD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,QAAQ,CAChB,qFAAqF,EACrF,eAAe,CAChB,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,YAAY,CAAC;QACxB,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACpC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,uDAAuD;QACvD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpG,iCAAiC;QACjC,MAAM,YAAY,GAAiB;YACjC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEzC,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAE9C,6EAA6E;QAC7E,MAAM,QAAQ,GACZ,OAAO,CAAC,KAAK,KAAK,KAAK;YACvB,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,KAAK;YACpC,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,CAAC;QAE9C,qDAAqD;QACrD,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,QAAQ;YAC3C,CAAC,CAAC,MAAM,kBAAkB,CAAC,aAAa,CAAC;YACzC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAE3C,MAAM,YAAY,GAChB,OAAO,CAAC,MAAM;YACd,OAAO,CAAC,YAAY;YACpB,CAAC,QAAQ;gBACP,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC;gBAC7C,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,KAAK;oBACpC,kEAAkE;oBAClE,CAAC,CAAC,sKAAsK;oBACxK,CAAC,CAAC,SAAS,CAAC,CAAC;QAEnB,IAAI,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;YAEpC,uEAAuE;YACvE,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjD,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;YAE3B,uEAAuE;YACvE,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;gBACzE,WAAW,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;YAE3B,uEAAuE;YACvE,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAChD,MAAM,iBAAiB,GAAG,CAAC,UAAU,IAAI,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7G,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBAC9E,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;YAEH,IAAI,UAAU,EAAE,CAAC;gBACf,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,oBAAoB,CAAC,kDAAkD,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YACtG,CAAC;YAED,gDAAgD;YAChD,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC5D,IAAI,QAAQ,GAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YAEtE,MAAM,eAAe,GAAG,EAAE,CAAC;YAC3B,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAE9B,SAAS,CAAC,eAAe,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;YAE1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,eAAe,EAAE,KAAK,EAAE,EAAE,CAAC;gBACrD,qEAAqE;gBACrE,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnC,SAAS,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBACvE,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,sBAAsB,EAAE;oBAC7E,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,YAAY;iBACb,CAAC,CAAC;gBAEH,2CAA2C;gBAC3C,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;oBAEzC,oEAAoE;oBACpE,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,KAAK,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;wBAChF,iBAAiB,GAAG,IAAI,CAAC;wBAEzB,iEAAiE;wBACjE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAChC,SAAS,CAAC,oBAAoB,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;4BAC9E,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;4BAC3F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gCACjB,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gCAC9C,MAAM,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gCACzF,yCAAyC;gCACzC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;gCAClC,sBAAsB,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gCACxF,OAAO;4BACT,CAAC;4BACD,8CAA8C;4BAC9C,SAAS,CAAC,oBAAoB,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;4BAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;4BACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;4BACjF,SAAS;wBACX,CAAC;wBAED,4CAA4C;wBAC5C,SAAS,CAAC,oBAAoB,CAAC,oCAAoC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;wBACtF,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;wBACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACzE,SAAS;oBACX,CAAC;oBAED,mEAAmE;oBACnE,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;wBAC1F,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;wBAC3F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;4BAClB,SAAS,CAAC,oBAAoB,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;4BAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;4BACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;4BACjF,SAAS;wBACX,CAAC;oBACH,CAAC;oBAED,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC9C,MAAM,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;oBACzF,yCAAyC;oBACzC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;oBAClC,sBAAsB,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBACxF,OAAO;gBACT,CAAC;gBAED,yEAAyE;gBACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;gBAEtE,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACpC,iDAAiD;oBACjD,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC/C,SAAS,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;wBACxD,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,iBAAiB,EAAE,CAAC,IAAI,+GAA+G;yBACjJ,CAAC,CAAC;wBACH,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;wBAC5C,SAAS;oBACX,CAAC;oBAED,oBAAoB;oBACpB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;oBAChD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;wBACpB,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,CAAC;wBAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;wBACvE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,IAAI,MAAM,MAAM,EAAE,EAAE,CAAC,CAAC;wBACjF,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;wBAC7C,SAAS;oBACX,CAAC;oBAED,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBAEjE,IAAI,UAAkB,CAAC;oBACvB,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACrB,IAAI,CAAC;wBACH,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;oBAC/E,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,UAAU,GAAG,eAAe,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;wBAChE,QAAQ,GAAG,IAAI,CAAC;oBAClB,CAAC;oBAED,mBAAmB;oBACnB,IAAI,CAAC,QAAQ;wBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBAE5D,gDAAgD;oBAChD,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBAEjF,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1D,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAEhD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,IAAI,MAAM,YAAY,EAAE,EAAE,CAAC,CAAC;gBACzF,CAAC;gBAED,sEAAsE;gBACtE,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnC,SAAS,CAAC,oBAAoB,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9E,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBAED,yEAAyE;gBACzE,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBACzC,IAAI,IAAI,EAAE,CAAC;oBACT,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,SAAS,CAAC,eAAe,CAAC,4CAA4C,EAAE,OAAO,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,6EAA6E;QAC7E,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YACtD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY;SACb,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;YAClE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YACpD,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;YAClE,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -6,7 +6,20 @@ export interface CommitOptions extends CliOverrides {
|
|
|
6
6
|
}
|
|
7
7
|
export declare function getStagedDiff(cwd: string): Promise<string>;
|
|
8
8
|
export declare function getLastCommitDiff(cwd: string): Promise<string>;
|
|
9
|
-
|
|
9
|
+
export declare function getStagedDiffStat(cwd: string): Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Build a commit prompt that fits within the provider's context window.
|
|
12
|
+
*
|
|
13
|
+
* For full-context providers: send the complete diff as-is.
|
|
14
|
+
* For small-context providers (e.g. embedded): send only the --stat summary
|
|
15
|
+
* (files changed + line counts) without any raw diff syntax, which prevents
|
|
16
|
+
* the model from echoing diff content instead of generating a commit message.
|
|
17
|
+
* If even the stat is too large, truncate it at a line boundary.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildCommitPrompt(diff: string, stat: string, contextWindow: number, systemPromptLen: number, outputBudget: number): string;
|
|
20
|
+
/** Strip surrounding whitespace and any accidental markdown fences from the model output.
|
|
21
|
+
* Also strips common small-model preamble like "Based on the diff, the commit message is:".
|
|
22
|
+
*/
|
|
10
23
|
export declare function cleanCommitMessage(raw: string): string;
|
|
11
24
|
export declare function runCommit(options: CommitOptions): Promise<void>;
|
|
12
25
|
//# sourceMappingURL=commit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA2BD,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAchE;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcpE;AAkBD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUpE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,GACnB,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBtD;AAID,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FrE"}
|
package/dist/commands/commit.js
CHANGED
|
@@ -8,7 +8,7 @@ import { printError, printSuccess } from '../ui/renderer.js';
|
|
|
8
8
|
import { JamError } from '../utils/errors.js';
|
|
9
9
|
import { getWorkspaceRoot } from '../utils/workspace.js';
|
|
10
10
|
const execFileAsync = promisify(execFile);
|
|
11
|
-
// ── Conventional-commit system
|
|
11
|
+
// ── Conventional-commit system prompts ──────────────────────────────────────
|
|
12
12
|
const SYSTEM_PROMPT = `You are an expert software engineer. Given a git diff, generate a concise \
|
|
13
13
|
commit message following the Conventional Commits specification.
|
|
14
14
|
|
|
@@ -19,6 +19,15 @@ Rules:
|
|
|
19
19
|
- Short description: imperative mood, lowercase, no period, ≤72 chars total for the first line
|
|
20
20
|
- If changes are complex, add a blank line followed by a brief body (max 3 lines)
|
|
21
21
|
- Output ONLY the commit message text, nothing else — no markdown, no explanation`;
|
|
22
|
+
/**
|
|
23
|
+
* Compact system prompt for small/embedded models that struggle with
|
|
24
|
+
* long instructions. No example — examples cause small models to echo them.
|
|
25
|
+
*/
|
|
26
|
+
const SYSTEM_PROMPT_SMALL = `Generate a conventional commit message for the code changes described.
|
|
27
|
+
Output ONLY the commit message, nothing else — no explanation, no prefix, no markdown.
|
|
28
|
+
Format: type(scope): short description
|
|
29
|
+
Types: feat, fix, docs, style, refactor, perf, test, chore
|
|
30
|
+
Rules: imperative mood, lowercase, no period, under 72 characters.`;
|
|
22
31
|
// ── Git helpers ───────────────────────────────────────────────────────────────
|
|
23
32
|
export async function getStagedDiff(cwd) {
|
|
24
33
|
try {
|
|
@@ -56,10 +65,73 @@ async function runGitCommit(message, amend, cwd) {
|
|
|
56
65
|
}
|
|
57
66
|
}
|
|
58
67
|
// ── Pure helpers (exported for testing) ──────────────────────────────────────
|
|
59
|
-
|
|
68
|
+
export async function getStagedDiffStat(cwd) {
|
|
69
|
+
try {
|
|
70
|
+
const { stdout } = await execFileAsync('git', ['diff', '--staged', '--stat'], {
|
|
71
|
+
cwd,
|
|
72
|
+
maxBuffer: 256 * 1024,
|
|
73
|
+
});
|
|
74
|
+
return stdout.trim();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return '';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Build a commit prompt that fits within the provider's context window.
|
|
82
|
+
*
|
|
83
|
+
* For full-context providers: send the complete diff as-is.
|
|
84
|
+
* For small-context providers (e.g. embedded): send only the --stat summary
|
|
85
|
+
* (files changed + line counts) without any raw diff syntax, which prevents
|
|
86
|
+
* the model from echoing diff content instead of generating a commit message.
|
|
87
|
+
* If even the stat is too large, truncate it at a line boundary.
|
|
88
|
+
*/
|
|
89
|
+
export function buildCommitPrompt(diff, stat, contextWindow, systemPromptLen, outputBudget) {
|
|
90
|
+
const safetyMargin = Math.ceil(contextWindow * 0.1);
|
|
91
|
+
const inputBudgetChars = Math.max(400, (contextWindow - outputBudget - Math.ceil(systemPromptLen / 4) - safetyMargin) * 4);
|
|
92
|
+
const header = 'Generate a conventional commit message for the following changes:\n\n';
|
|
93
|
+
const fullDiffPrompt = header + '```diff\n' + diff + '\n```';
|
|
94
|
+
// Full diff fits — use it as-is
|
|
95
|
+
if (fullDiffPrompt.length <= inputBudgetChars) {
|
|
96
|
+
return fullDiffPrompt;
|
|
97
|
+
}
|
|
98
|
+
// Diff too large: describe the changes in plain English from the stat.
|
|
99
|
+
// No code fences, no diff syntax — avoids the model echoing raw diff lines.
|
|
100
|
+
const statlessHeader = 'Write a conventional commit message for a code change that modified the following files:\n\n';
|
|
101
|
+
const statLines = stat.split('\n').filter((l) => l.trim() && !l.includes('changed,'));
|
|
102
|
+
const fileList = statLines
|
|
103
|
+
.map((l) => {
|
|
104
|
+
const m = l.match(/^\s*(\S+)\s*\|\s*(\d+)\s*([+-]+)/);
|
|
105
|
+
return m ? `${m[1]} (${m[2]} lines changed)` : l.trim();
|
|
106
|
+
})
|
|
107
|
+
.filter(Boolean)
|
|
108
|
+
.join(', ');
|
|
109
|
+
const summaryLine = fileList
|
|
110
|
+
? `These files were modified: ${fileList}.`
|
|
111
|
+
: stat;
|
|
112
|
+
const budgetForBody = inputBudgetChars - statlessHeader.length;
|
|
113
|
+
const body = summaryLine.length <= budgetForBody
|
|
114
|
+
? summaryLine
|
|
115
|
+
: summaryLine.slice(0, budgetForBody - 3) + '...';
|
|
116
|
+
return statlessHeader + body;
|
|
117
|
+
}
|
|
118
|
+
/** Strip surrounding whitespace and any accidental markdown fences from the model output.
|
|
119
|
+
* Also strips common small-model preamble like "Based on the diff, the commit message is:".
|
|
120
|
+
*/
|
|
60
121
|
export function cleanCommitMessage(raw) {
|
|
61
122
|
// Remove optional triple-backtick wrappers the model might produce
|
|
62
|
-
|
|
123
|
+
let stripped = raw.replace(/^```[^\n]*\n?/m, '').replace(/\n?```\s*$/m, '');
|
|
124
|
+
// Strip common small-model preamble — lines ending in ":" that precede the actual message
|
|
125
|
+
stripped = stripped.replace(/^[^\n]{0,120}(?:commit message|message|type|format|output|follows?|below|is)[:\s]*\n+/im, '');
|
|
126
|
+
// If the result still doesn't look like a conventional commit (type: desc),
|
|
127
|
+
// try to extract it by finding the first line that matches
|
|
128
|
+
const lines = stripped.trim().split('\n');
|
|
129
|
+
const conventionalLine = lines.find((l) => /^(feat|fix|docs|style|refactor|perf|test|chore|ci|build)(\([^)]+\))?:\s+\S/.test(l.trim()));
|
|
130
|
+
if (conventionalLine) {
|
|
131
|
+
// Return from that line onward (may include body)
|
|
132
|
+
const idx = lines.indexOf(conventionalLine);
|
|
133
|
+
return lines.slice(idx).join('\n').trim();
|
|
134
|
+
}
|
|
63
135
|
return stripped.trim();
|
|
64
136
|
}
|
|
65
137
|
// ── Main command ──────────────────────────────────────────────────────────────
|
|
@@ -89,15 +161,22 @@ export async function runCommit(options) {
|
|
|
89
161
|
const config = await loadConfig(process.cwd(), options);
|
|
90
162
|
const profile = getActiveProfile(config);
|
|
91
163
|
const adapter = await createProvider(profile);
|
|
92
|
-
|
|
93
|
-
|
|
164
|
+
// Build a context-aware diff prompt — falls back to stat-only summary
|
|
165
|
+
// if the diff would overflow the provider's context window.
|
|
166
|
+
const contextWindow = adapter.info?.contextWindow;
|
|
167
|
+
const isSmallModel = Boolean(contextWindow);
|
|
168
|
+
const stat = isSmallModel ? await getStagedDiffStat(workspaceRoot) : '';
|
|
169
|
+
const activeSystemPrompt = isSmallModel ? SYSTEM_PROMPT_SMALL : SYSTEM_PROMPT;
|
|
170
|
+
const prompt = contextWindow
|
|
171
|
+
? buildCommitPrompt(diff, stat, contextWindow, activeSystemPrompt.length, 256)
|
|
172
|
+
: `Generate a conventional commit message for the following git diff:\n\n\`\`\`diff\n${diff}\n\`\`\``;
|
|
94
173
|
process.stderr.write('Generating commit message...\n');
|
|
95
174
|
const { text } = await collectStream(withRetry(() => adapter.streamCompletion({
|
|
96
175
|
messages: [{ role: 'user', content: prompt }],
|
|
97
176
|
model: profile.model,
|
|
98
177
|
temperature: profile.temperature ?? 0.2,
|
|
99
178
|
maxTokens: 256,
|
|
100
|
-
systemPrompt: SYSTEM_PROMPT,
|
|
179
|
+
systemPrompt: isSmallModel ? activeSystemPrompt : SYSTEM_PROMPT,
|
|
101
180
|
})));
|
|
102
181
|
const message = cleanCommitMessage(text);
|
|
103
182
|
if (!message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAQ1C
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,wBAAsB,aAAa,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7E;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,wBAAsB,aAAa,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7E;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCrF"}
|
package/dist/commands/config.js
CHANGED
|
@@ -29,7 +29,8 @@ export async function runConfigInit(options = {}) {
|
|
|
29
29
|
let configDir;
|
|
30
30
|
let configPath;
|
|
31
31
|
if (options.global) {
|
|
32
|
-
|
|
32
|
+
// Use ~/.jam/config.json as the preferred user-level location
|
|
33
|
+
configDir = join(homedir(), '.jam');
|
|
33
34
|
configPath = join(configDir, 'config.json');
|
|
34
35
|
}
|
|
35
36
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAwB,EAAE;IAC5D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG;YACb,MAAM;YACN,aAAa,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,cAAc;gBAC3B,GAAG,OAAO;aACX;SACF,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,IAAI,CAAC;QACH,IAAI,SAAiB,CAAC;QACtB,IAAI,UAAkB,CAAC;QAEvB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAgHpE,wBAAsB,UAAU,CAC9B,GAAG,GAAE,MAAsB,EAC3B,YAAY,GAAE,YAAiB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAsCpB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAS3D"}
|
package/dist/config/loader.js
CHANGED
|
@@ -50,7 +50,32 @@ async function loadFile(searchFrom) {
|
|
|
50
50
|
}
|
|
51
51
|
return parsed.data;
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Load config from ~/.jam/config.json (user home-directory dotfile).
|
|
55
|
+
* This is the preferred user-level config location.
|
|
56
|
+
*/
|
|
57
|
+
async function loadDotJamConfig() {
|
|
58
|
+
const dotJamDir = join(homedir(), '.jam');
|
|
59
|
+
if (!existsSync(dotJamDir))
|
|
60
|
+
return {};
|
|
61
|
+
const explorer = cosmiconfig(MODULE_NAME, {
|
|
62
|
+
searchPlaces: ['config.json', 'config.yaml', 'config.yml'],
|
|
63
|
+
stopDir: dotJamDir,
|
|
64
|
+
});
|
|
65
|
+
const result = await explorer.search(dotJamDir);
|
|
66
|
+
if (!result)
|
|
67
|
+
return {};
|
|
68
|
+
const parsed = JamConfigSchema.partial().safeParse(result.config);
|
|
69
|
+
if (!parsed.success) {
|
|
70
|
+
throw new JamError(`Invalid config at ${result.filepath}: ${parsed.error.message}`, 'CONFIG_INVALID');
|
|
71
|
+
}
|
|
72
|
+
return parsed.data;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Load config from ~/.config/jam/config.json (XDG-style user config).
|
|
76
|
+
* Lower priority than ~/.jam/config.json.
|
|
77
|
+
*/
|
|
78
|
+
async function loadXdgUserConfig() {
|
|
54
79
|
const userConfigDir = join(homedir(), '.config', MODULE_NAME);
|
|
55
80
|
if (!existsSync(userConfigDir))
|
|
56
81
|
return {};
|
|
@@ -68,9 +93,17 @@ async function loadUserConfig() {
|
|
|
68
93
|
return parsed.data;
|
|
69
94
|
}
|
|
70
95
|
export async function loadConfig(cwd = process.cwd(), cliOverrides = {}) {
|
|
71
|
-
|
|
96
|
+
// Merge order (lowest → highest priority):
|
|
97
|
+
// 1. Built-in defaults
|
|
98
|
+
// 2. ~/.config/jam/config.json (XDG user config)
|
|
99
|
+
// 3. ~/.jam/config.json (home-dir dotfile — preferred)
|
|
100
|
+
// 4. .jam/config.json / .jamrc (repo-level)
|
|
101
|
+
// 5. CLI flags
|
|
102
|
+
const xdgConfig = await loadXdgUserConfig();
|
|
103
|
+
const dotJamConfig = await loadDotJamConfig();
|
|
72
104
|
const repoConfig = await loadFile(cwd);
|
|
73
|
-
let config = mergeConfigs(CONFIG_DEFAULTS,
|
|
105
|
+
let config = mergeConfigs(CONFIG_DEFAULTS, xdgConfig);
|
|
106
|
+
config = mergeConfigs(config, dotJamConfig);
|
|
74
107
|
config = mergeConfigs(config, repoConfig);
|
|
75
108
|
// Apply CLI overrides to the active profile
|
|
76
109
|
const profileName = cliOverrides.profile ?? config.defaultProfile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,WAAW,GAAG,KAAK,CAAC;AAE1B,SAAS,iBAAiB,CACxB,IAA6B,EAC7B,QAAiC;IAEjC,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,GAAG,EAAE,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAe,EAAE,QAA4B;IACjE,OAAO;QACL,GAAG,IAAI;QACP,GAAG,QAAQ;QACX,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QACnE,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa;QAC3D,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;KAC/D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,UAAkB;IACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE;QACxC,YAAY,EAAE;YACZ,IAAI,WAAW,IAAI;YACnB,IAAI,WAAW,SAAS;YACxB,IAAI,WAAW,SAAS;YACxB,IAAI,WAAW,QAAQ;YACvB,IAAI,WAAW,cAAc;YAC7B,GAAG,WAAW,YAAY;YAC1B,GAAG,WAAW,aAAa;SAC5B;QACD,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAChB,qBAAqB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAC/D,gBAAgB,CACjB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/base.d.ts
CHANGED
|
@@ -46,6 +46,17 @@ export interface CompletionRequest {
|
|
|
46
46
|
export interface ProviderInfo {
|
|
47
47
|
name: string;
|
|
48
48
|
supportsStreaming: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Whether this provider can reliably perform tool/function calling.
|
|
51
|
+
* Defaults to true when absent. Set to false for small/embedded models
|
|
52
|
+
* that cannot follow JSON tool-call instructions.
|
|
53
|
+
*/
|
|
54
|
+
supportsTools?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Maximum context window in tokens. Used to guard against input overflow
|
|
57
|
+
* on small/embedded models. Undefined means no enforced limit.
|
|
58
|
+
*/
|
|
59
|
+
contextWindow?: number;
|
|
49
60
|
}
|
|
50
61
|
export interface ProviderAdapter {
|
|
51
62
|
info: ProviderInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACzE,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,sEAAsE;IACtE,aAAa,CAAC,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,cAAc,CAAC,GACxF,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ProviderAdapter, ProviderInfo, CompletionRequest, StreamChunk, Message, ToolDefinition, ChatWithToolsResponse } from './base.js';
|
|
2
|
+
export declare class EmbeddedAdapter implements ProviderAdapter {
|
|
3
|
+
readonly info: ProviderInfo;
|
|
4
|
+
private readonly modelSpec;
|
|
5
|
+
private _llama;
|
|
6
|
+
private _model;
|
|
7
|
+
constructor(options?: {
|
|
8
|
+
model?: string;
|
|
9
|
+
});
|
|
10
|
+
/**
|
|
11
|
+
* Lazily load node-llama-cpp, download the model if needed, and warm up.
|
|
12
|
+
* All heavy work happens here so the constructor stays synchronous.
|
|
13
|
+
*/
|
|
14
|
+
private boot;
|
|
15
|
+
validateCredentials(): Promise<void>;
|
|
16
|
+
listModels(): Promise<string[]>;
|
|
17
|
+
streamCompletion(request: CompletionRequest): AsyncIterable<StreamChunk>;
|
|
18
|
+
chatWithTools(messages: Message[], tools: ToolDefinition[], options?: Pick<CompletionRequest, 'model' | 'temperature' | 'maxTokens' | 'systemPrompt'>): Promise<ChatWithToolsResponse>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=embedded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedded.d.ts","sourceRoot":"","sources":["../../src/providers/embedded.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,cAAc,EAEd,qBAAqB,EACtB,MAAM,WAAW,CAAC;AA4KnB,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAQzB;IAEF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAE/C,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,MAAM,CAA2B;gBAE7B,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO;IAM5C;;;OAGG;YACW,IAAI;IA0FZ,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAuB9B,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,WAAW,CAAC;IA4FzE,aAAa,CACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,cAAc,CAAM,GAC5F,OAAO,CAAC,qBAAqB,CAAC;CA8ElC"}
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { JamError } from '../utils/errors.js';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { existsSync, mkdirSync, createWriteStream, unlinkSync } from 'node:fs';
|
|
5
|
+
import { pipeline } from 'node:stream/promises';
|
|
6
|
+
import { Readable } from 'node:stream';
|
|
7
|
+
// ── Defaults ─────────────────────────────────────────────────────────────────
|
|
8
|
+
/**
|
|
9
|
+
* Directory where embedded GGUF models are cached.
|
|
10
|
+
* ~/.jam/models/
|
|
11
|
+
*/
|
|
12
|
+
const MODELS_DIR = join(homedir(), '.jam', 'models');
|
|
13
|
+
/**
|
|
14
|
+
* GitHub repository that hosts GGUF model files as release assets.
|
|
15
|
+
* Models are uploaded as assets under the tag MODELS_RELEASE_TAG.
|
|
16
|
+
*/
|
|
17
|
+
const GITHUB_MODELS_OWNER = 'sunilp';
|
|
18
|
+
const GITHUB_MODELS_REPO = 'homebrew-tap';
|
|
19
|
+
const GITHUB_MODELS_TAG = 'v1.0.0';
|
|
20
|
+
/** Construct a GitHub Releases download URL for a model file. */
|
|
21
|
+
function githubModelUrl(file) {
|
|
22
|
+
return `https://github.com/${GITHUB_MODELS_OWNER}/${GITHUB_MODELS_REPO}/releases/download/${GITHUB_MODELS_TAG}/${file}`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Default model to download when no model is specified.
|
|
26
|
+
* SmolLM2-360M is extremely lightweight (~360 MB quantized) and runs
|
|
27
|
+
* comfortably on machines without a GPU.
|
|
28
|
+
*/
|
|
29
|
+
const DEFAULT_MODEL_FILENAME = 'smollm2-1.7b-instruct-q4_k_m.gguf';
|
|
30
|
+
/**
|
|
31
|
+
* A curated list of known models users can request by short alias.
|
|
32
|
+
* Maps alias → { url, file }.
|
|
33
|
+
* Files are hosted as release assets on github.com/sunilp/homebrew-tap.
|
|
34
|
+
*/
|
|
35
|
+
const MODEL_ALIASES = {
|
|
36
|
+
'smollm2-360m': {
|
|
37
|
+
url: githubModelUrl('smollm2-360m-instruct-q8_0.gguf'),
|
|
38
|
+
file: 'smollm2-360m-instruct-q8_0.gguf',
|
|
39
|
+
},
|
|
40
|
+
'smollm2-1.7b': {
|
|
41
|
+
url: githubModelUrl('smollm2-1.7b-instruct-q4_k_m.gguf'),
|
|
42
|
+
file: 'smollm2-1.7b-instruct-q4_k_m.gguf',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
46
|
+
function ensureModelsDir() {
|
|
47
|
+
if (!existsSync(MODELS_DIR)) {
|
|
48
|
+
mkdirSync(MODELS_DIR, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Download a file from `url` to `destPath`, following redirects and reporting
|
|
53
|
+
* progress. Uses Node's built-in `fetch` (Node 18+) so no extra dependencies
|
|
54
|
+
* are needed. Cleans up the partial file on failure.
|
|
55
|
+
*/
|
|
56
|
+
async function downloadFile(url, destPath, onProgress) {
|
|
57
|
+
const res = await fetch(url, { redirect: 'follow' });
|
|
58
|
+
if (!res.ok || !res.body) {
|
|
59
|
+
throw new Error(`HTTP ${res.status} ${res.statusText} — ${url}`);
|
|
60
|
+
}
|
|
61
|
+
const total = Number(res.headers.get('content-length') ?? '0');
|
|
62
|
+
let downloaded = 0;
|
|
63
|
+
const writer = createWriteStream(destPath);
|
|
64
|
+
try {
|
|
65
|
+
const reader = res.body.getReader();
|
|
66
|
+
const nodeReadable = new Readable({
|
|
67
|
+
async read() {
|
|
68
|
+
const { done, value } = await reader.read();
|
|
69
|
+
if (done || value === undefined) {
|
|
70
|
+
this.push(null);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
downloaded += value.byteLength;
|
|
74
|
+
if (onProgress)
|
|
75
|
+
onProgress(downloaded, total);
|
|
76
|
+
this.push(Buffer.from(value));
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
await pipeline(nodeReadable, writer);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
// Remove partial file so a retry starts fresh
|
|
84
|
+
try {
|
|
85
|
+
unlinkSync(destPath);
|
|
86
|
+
}
|
|
87
|
+
catch { /* ignore */ }
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve a model specifier to { url, file } for a remote download, or
|
|
93
|
+
* { localPath } for a file already on disk.
|
|
94
|
+
*
|
|
95
|
+
* Supports:
|
|
96
|
+
* - Known aliases → "smollm2-360m"
|
|
97
|
+
* - HF repo paths → "HuggingFaceTB/SmolLM2-360M-Instruct-GGUF/smollm2-360m-instruct-q8_0.gguf"
|
|
98
|
+
* - Full HTTPS URLs → "https://example.com/path/to/model.gguf"
|
|
99
|
+
* - Plain filenames → treated as already-downloaded under ~/.jam/models/
|
|
100
|
+
*/
|
|
101
|
+
function resolveModel(model) {
|
|
102
|
+
if (!model) {
|
|
103
|
+
return { url: githubModelUrl(DEFAULT_MODEL_FILENAME), file: DEFAULT_MODEL_FILENAME };
|
|
104
|
+
}
|
|
105
|
+
const lower = model.toLowerCase();
|
|
106
|
+
if (MODEL_ALIASES[lower]) {
|
|
107
|
+
return MODEL_ALIASES[lower];
|
|
108
|
+
}
|
|
109
|
+
// Full HTTPS URL supplied directly
|
|
110
|
+
if (model.startsWith('https://') && model.endsWith('.gguf')) {
|
|
111
|
+
const file = model.split('/').pop();
|
|
112
|
+
return { url: model, file };
|
|
113
|
+
}
|
|
114
|
+
// HF-style "org/repo/filename.gguf" — construct the HuggingFace URL
|
|
115
|
+
const parts = model.split('/');
|
|
116
|
+
if (parts.length >= 3 && model.endsWith('.gguf')) {
|
|
117
|
+
const file = parts.pop();
|
|
118
|
+
const repo = parts.join('/');
|
|
119
|
+
return { url: `https://huggingface.co/${repo}/resolve/main/${file}`, file };
|
|
120
|
+
}
|
|
121
|
+
// Already a local path or just a filename
|
|
122
|
+
if (model.endsWith('.gguf')) {
|
|
123
|
+
return { localPath: model.startsWith('/') ? model : join(MODELS_DIR, model) };
|
|
124
|
+
}
|
|
125
|
+
// Default: fall back to default model hosted on GitHub
|
|
126
|
+
return { url: githubModelUrl(DEFAULT_MODEL_FILENAME), file: DEFAULT_MODEL_FILENAME };
|
|
127
|
+
}
|
|
128
|
+
export class EmbeddedAdapter {
|
|
129
|
+
info = {
|
|
130
|
+
name: 'embedded (experimental)',
|
|
131
|
+
supportsStreaming: true,
|
|
132
|
+
// 1.7B is too small to reliably emit valid JSON tool-call payloads for
|
|
133
|
+
// the ReAct scaffold. Direct Q&A and commit generation work well instead.
|
|
134
|
+
supportsTools: false,
|
|
135
|
+
// SmolLM2-1.7B context window. Used to guard input truncation.
|
|
136
|
+
contextWindow: 8192,
|
|
137
|
+
};
|
|
138
|
+
modelSpec;
|
|
139
|
+
// Lazy-loaded resources
|
|
140
|
+
_llama = null;
|
|
141
|
+
_model = null;
|
|
142
|
+
constructor(options = {}) {
|
|
143
|
+
this.modelSpec = options.model;
|
|
144
|
+
}
|
|
145
|
+
// ── Bootstrap ────────────────────────────────────────────────────────────
|
|
146
|
+
/**
|
|
147
|
+
* Lazily load node-llama-cpp, download the model if needed, and warm up.
|
|
148
|
+
* All heavy work happens here so the constructor stays synchronous.
|
|
149
|
+
*/
|
|
150
|
+
async boot() {
|
|
151
|
+
if (this._llama && this._model) {
|
|
152
|
+
return { llama: this._llama, model: this._model };
|
|
153
|
+
}
|
|
154
|
+
let nlc;
|
|
155
|
+
try {
|
|
156
|
+
nlc = await import('node-llama-cpp');
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
throw new JamError('The "embedded" provider requires the `node-llama-cpp` package.\n' +
|
|
160
|
+
'Install it with: npm install node-llama-cpp\n' +
|
|
161
|
+
'Then run `jam doctor` to verify.', 'PROVIDER_UNAVAILABLE', { retryable: false });
|
|
162
|
+
}
|
|
163
|
+
ensureModelsDir();
|
|
164
|
+
process.stderr.write('\n ⚠️ Embedded provider is EXPERIMENTAL. Quality is limited by small model size.\n' +
|
|
165
|
+
' For production workloads, consider using Ollama or OpenAI.\n\n');
|
|
166
|
+
const resolved = resolveModel(this.modelSpec);
|
|
167
|
+
let modelPath;
|
|
168
|
+
if ('localPath' in resolved) {
|
|
169
|
+
modelPath = resolved.localPath;
|
|
170
|
+
if (!existsSync(modelPath)) {
|
|
171
|
+
throw new JamError(`Model file not found: ${modelPath}`, 'PROVIDER_MODEL_NOT_FOUND', { retryable: false });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
// Check if already downloaded
|
|
176
|
+
const cached = join(MODELS_DIR, resolved.file);
|
|
177
|
+
if (existsSync(cached)) {
|
|
178
|
+
modelPath = cached;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
process.stderr.write(`\n Downloading embedded model: ${resolved.file}\n` +
|
|
182
|
+
` From: ${resolved.url}\n` +
|
|
183
|
+
` Destination: ${cached}\n` +
|
|
184
|
+
` This is a one-time download...\n\n`);
|
|
185
|
+
try {
|
|
186
|
+
await downloadFile(resolved.url, cached, (downloaded, total) => {
|
|
187
|
+
const pct = total > 0 ? Math.round((downloaded / total) * 100) : 0;
|
|
188
|
+
const mb = (downloaded / 1_048_576).toFixed(1);
|
|
189
|
+
process.stderr.write(`\r Progress: ${pct}% (${mb} MB)`);
|
|
190
|
+
});
|
|
191
|
+
process.stderr.write('\n Download complete!\n\n');
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
throw new JamError(`Failed to download model "${resolved.file}" from ${resolved.url}.\n` +
|
|
195
|
+
`Check your internet connection and try again.`, 'PROVIDER_UNAVAILABLE', { retryable: true, cause: err });
|
|
196
|
+
}
|
|
197
|
+
modelPath = cached;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
const llama = await nlc.getLlama();
|
|
202
|
+
const model = await llama.loadModel({ modelPath });
|
|
203
|
+
this._llama = llama;
|
|
204
|
+
this._model = model;
|
|
205
|
+
return { llama, model };
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
throw new JamError(`Failed to load model from ${modelPath}. The file may be corrupted.\n` +
|
|
209
|
+
`Try deleting it and re-running so it re-downloads.`, 'PROVIDER_UNAVAILABLE', { retryable: true, cause: err });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// ── ProviderAdapter interface ────────────────────────────────────────────
|
|
213
|
+
async validateCredentials() {
|
|
214
|
+
await this.boot();
|
|
215
|
+
}
|
|
216
|
+
async listModels() {
|
|
217
|
+
// List known aliases + any .gguf files already cached
|
|
218
|
+
const aliases = Object.keys(MODEL_ALIASES);
|
|
219
|
+
const cached = [];
|
|
220
|
+
try {
|
|
221
|
+
const { readdirSync } = await import('node:fs');
|
|
222
|
+
const files = readdirSync(MODELS_DIR);
|
|
223
|
+
for (const f of files) {
|
|
224
|
+
if (f.endsWith('.gguf')) {
|
|
225
|
+
cached.push(f);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Models dir may not exist yet — that's fine
|
|
231
|
+
}
|
|
232
|
+
return [
|
|
233
|
+
...aliases.map((a) => `${a} (alias)`),
|
|
234
|
+
...cached.map((f) => `${f} (cached)`),
|
|
235
|
+
];
|
|
236
|
+
}
|
|
237
|
+
async *streamCompletion(request) {
|
|
238
|
+
const { model } = await this.boot();
|
|
239
|
+
// node-llama-cpp v3 API
|
|
240
|
+
const nlc = await import('node-llama-cpp');
|
|
241
|
+
const context = await model.createContext();
|
|
242
|
+
// System prompt goes into the session constructor — NOT into the user message.
|
|
243
|
+
// Passing it as a user-message prefix causes the model to echo it back verbatim.
|
|
244
|
+
const session = new nlc.LlamaChatSession({
|
|
245
|
+
contextSequence: context.getSequence(),
|
|
246
|
+
systemPrompt: request.systemPrompt,
|
|
247
|
+
});
|
|
248
|
+
// Guard against context window overflow.
|
|
249
|
+
// Rough estimate: 1 token ≈ 4 characters. Reserve (maxTokens ?? 512) tokens
|
|
250
|
+
// for the completion and a 10% safety margin.
|
|
251
|
+
const maxOutputTokens = request.maxTokens ?? 512;
|
|
252
|
+
const contextWindow = this.info.contextWindow ?? 2048;
|
|
253
|
+
const systemTokens = Math.ceil((request.systemPrompt?.length ?? 0) / 4);
|
|
254
|
+
const inputBudgetTokens = contextWindow - maxOutputTokens - systemTokens - Math.ceil(contextWindow * 0.1);
|
|
255
|
+
const inputBudgetChars = Math.max(200, inputBudgetTokens * 4);
|
|
256
|
+
// For multi-turn history replay prior (user → assistant) pairs so the
|
|
257
|
+
// session has conversation context, then send the final user message.
|
|
258
|
+
const nonSystemMsgs = request.messages.filter((m) => m.role !== 'system');
|
|
259
|
+
const lastUserIdx = nonSystemMsgs.map((m) => m.role).lastIndexOf('user');
|
|
260
|
+
const priorMsgs = nonSystemMsgs.slice(0, lastUserIdx);
|
|
261
|
+
const lastUserMsg = nonSystemMsgs[lastUserIdx];
|
|
262
|
+
// Replay prior conversation turns into the session (pairs: user then assistant).
|
|
263
|
+
for (let i = 0; i < priorMsgs.length; i++) {
|
|
264
|
+
const msg = priorMsgs[i];
|
|
265
|
+
if (msg.role === 'user') {
|
|
266
|
+
const next = priorMsgs[i + 1];
|
|
267
|
+
if (next?.role === 'assistant') {
|
|
268
|
+
await session.prompt(msg.content, { maxTokens: 1 });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Truncate the final user message if it would overflow the input budget.
|
|
273
|
+
// For git diffs, cut at a "diff --git" hunk boundary so the model always
|
|
274
|
+
// receives complete, coherent hunks rather than a mid-line slice.
|
|
275
|
+
let promptText = lastUserMsg?.content ?? '';
|
|
276
|
+
if (promptText.length > inputBudgetChars) {
|
|
277
|
+
const isDiff = promptText.includes('diff --git');
|
|
278
|
+
if (isDiff) {
|
|
279
|
+
// Find the last complete hunk boundary that fits
|
|
280
|
+
const cutoff = promptText.lastIndexOf('\ndiff --git', inputBudgetChars);
|
|
281
|
+
const boundary = cutoff > 0 ? cutoff : inputBudgetChars;
|
|
282
|
+
promptText = promptText.slice(0, boundary) +
|
|
283
|
+
'\n\n[... diff truncated — remaining files omitted to fit context window ...]';
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
const truncMsg = `\n\n[... truncated to fit ${contextWindow}-token context window ...]`;
|
|
287
|
+
promptText = promptText.slice(0, inputBudgetChars - truncMsg.length) + truncMsg;
|
|
288
|
+
}
|
|
289
|
+
process.stderr.write(`\n ⚠️ Input truncated to ~${inputBudgetTokens} tokens to fit context window.\n`);
|
|
290
|
+
}
|
|
291
|
+
let completionText = '';
|
|
292
|
+
try {
|
|
293
|
+
completionText = await session.prompt(promptText, {
|
|
294
|
+
maxTokens: maxOutputTokens,
|
|
295
|
+
temperature: request.temperature ?? 0.7,
|
|
296
|
+
});
|
|
297
|
+
const totalTokens = completionText.split(/\s+/).length; // rough estimate
|
|
298
|
+
// Emit the complete response as chunks for streaming compatibility
|
|
299
|
+
const chunkSize = 4;
|
|
300
|
+
for (let i = 0; i < completionText.length; i += chunkSize) {
|
|
301
|
+
yield { delta: completionText.slice(i, i + chunkSize), done: false };
|
|
302
|
+
}
|
|
303
|
+
yield {
|
|
304
|
+
delta: '',
|
|
305
|
+
done: true,
|
|
306
|
+
usage: {
|
|
307
|
+
promptTokens: 0,
|
|
308
|
+
completionTokens: totalTokens,
|
|
309
|
+
totalTokens,
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
finally {
|
|
314
|
+
context.dispose();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
async chatWithTools(messages, tools, options = {}) {
|
|
318
|
+
const { model } = await this.boot();
|
|
319
|
+
const nlc = await import('node-llama-cpp');
|
|
320
|
+
const context = await model.createContext();
|
|
321
|
+
// Build tool descriptions for the system prompt.
|
|
322
|
+
// Small models can't do native function-calling; we describe tools in the
|
|
323
|
+
// system prompt and parse JSON out of the response.
|
|
324
|
+
const toolDescriptions = tools.map((t) => {
|
|
325
|
+
const params = Object.entries(t.parameters.properties)
|
|
326
|
+
.map(([name, schema]) => ` - ${name} (${schema.type}): ${schema.description ?? ''}`)
|
|
327
|
+
.join('\n');
|
|
328
|
+
return `Tool: ${t.name}\nDescription: ${t.description}\nParameters:\n${params}`;
|
|
329
|
+
}).join('\n\n');
|
|
330
|
+
const systemPrompt = [
|
|
331
|
+
options.systemPrompt ?? '',
|
|
332
|
+
tools.length > 0
|
|
333
|
+
? `You have access to the following tools. To call a tool, respond with EXACTLY this JSON format on its own line:\n` +
|
|
334
|
+
`{"tool_call": {"name": "<tool_name>", "arguments": {<args>}}}\n\n` +
|
|
335
|
+
`Available tools:\n${toolDescriptions}`
|
|
336
|
+
: '',
|
|
337
|
+
].filter(Boolean).join('\n\n');
|
|
338
|
+
// System prompt goes into the session constructor — NEVER prepend it to the
|
|
339
|
+
// user message or the model will echo it back verbatim as its "answer".
|
|
340
|
+
const session = new nlc.LlamaChatSession({
|
|
341
|
+
contextSequence: context.getSequence(),
|
|
342
|
+
systemPrompt: systemPrompt || undefined,
|
|
343
|
+
});
|
|
344
|
+
// Send only the last user message as the prompt.
|
|
345
|
+
const lastUserMsg = [...messages].reverse().find((m) => m.role === 'user');
|
|
346
|
+
const prompt = lastUserMsg?.content ?? '';
|
|
347
|
+
let response;
|
|
348
|
+
try {
|
|
349
|
+
response = await session.prompt(prompt, {
|
|
350
|
+
maxTokens: options.maxTokens ?? 2048,
|
|
351
|
+
temperature: options.temperature ?? 0.3,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
finally {
|
|
355
|
+
context.dispose();
|
|
356
|
+
}
|
|
357
|
+
// Parse tool calls from the response
|
|
358
|
+
const toolCalls = [];
|
|
359
|
+
const lines = response.split('\n');
|
|
360
|
+
const textParts = [];
|
|
361
|
+
for (const line of lines) {
|
|
362
|
+
const trimmed = line.trim();
|
|
363
|
+
if (trimmed.startsWith('{"tool_call"')) {
|
|
364
|
+
try {
|
|
365
|
+
const parsed = JSON.parse(trimmed);
|
|
366
|
+
toolCalls.push({
|
|
367
|
+
name: parsed.tool_call.name,
|
|
368
|
+
arguments: parsed.tool_call.arguments,
|
|
369
|
+
});
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
// Not valid JSON — treat as text
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
textParts.push(line);
|
|
377
|
+
}
|
|
378
|
+
return {
|
|
379
|
+
content: textParts.join('\n').trim() || null,
|
|
380
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
381
|
+
usage: {
|
|
382
|
+
promptTokens: 0,
|
|
383
|
+
completionTokens: 0,
|
|
384
|
+
totalTokens: 0,
|
|
385
|
+
},
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=embedded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedded.js","sourceRoot":"","sources":["../../src/providers/embedded.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AACrC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAC1C,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEnC,iEAAiE;AACjE,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,sBAAsB,mBAAmB,IAAI,kBAAkB,sBAAsB,iBAAiB,IAAI,IAAI,EAAE,CAAC;AAC1H,CAAC;AAED;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,mCAAmC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,aAAa,GAAkD;IACnE,cAAc,EAAE;QACd,GAAG,EAAE,cAAc,CAAC,iCAAiC,CAAC;QACtD,IAAI,EAAE,iCAAiC;KACxC;IACD,cAAc,EAAE;QACd,GAAG,EAAE,cAAc,CAAC,mCAAmC,CAAC;QACxD,IAAI,EAAE,mCAAmC;KAC1C;CACF,CAAC;AAEF,gFAAgF;AAEhF,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,YAAY,CACzB,GAAW,EACX,QAAgB,EAChB,UAAwD;IAExD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,MAAM,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/D,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,QAAQ,CAAC;YAChC,KAAK,CAAC,IAAI;gBACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAsD,CAAC;gBAChG,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;oBAC/B,IAAI,UAAU;wBAAE,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,8CAA8C;QAC9C,IAAI,CAAC;YAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,mCAAmC;IACnC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;QACrC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,oEAAoE;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,0BAA0B,IAAI,iBAAiB,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IAC9E,CAAC;IAED,0CAA0C;IAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IAChF,CAAC;IAED,uDAAuD;IACvD,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;AACvF,CAAC;AA8BD,MAAM,OAAO,eAAe;IACjB,IAAI,GAAiB;QAC5B,IAAI,EAAE,yBAAyB;QAC/B,iBAAiB,EAAE,IAAI;QACvB,uEAAuE;QACvE,0EAA0E;QAC1E,aAAa,EAAE,KAAK;QACpB,+DAA+D;QAC/D,aAAa,EAAE,IAAI;KACpB,CAAC;IAEe,SAAS,CAAqB;IAC/C,wBAAwB;IAChB,MAAM,GAAyB,IAAI,CAAC;IACpC,MAAM,GAAsB,IAAI,CAAC;IAEzC,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACK,KAAK,CAAC,IAAI;QAChB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACpD,CAAC;QAED,IAAI,GAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAkC,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,QAAQ,CAChB,kEAAkE;gBAChE,gDAAgD;gBAChD,kCAAkC,EACpC,sBAAsB,EACtB,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;QACJ,CAAC;QAED,eAAe,EAAE,CAAC;QAElB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sFAAsF;YACtF,kEAAkE,CACnE,CAAC;QAEF,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,SAAiB,CAAC;QAEtB,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;YAC5B,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,QAAQ,CAChB,yBAAyB,SAAS,EAAE,EACpC,0BAA0B,EAC1B,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,SAAS,GAAG,MAAM,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,QAAQ,CAAC,IAAI,IAAI;oBAClD,WAAW,QAAQ,CAAC,GAAG,IAAI;oBAC3B,kBAAkB,MAAM,IAAI;oBAC5B,sCAAsC,CACzC,CAAC;gBACF,IAAI,CAAC;oBACH,MAAM,YAAY,CAChB,QAAQ,CAAC,GAAG,EACZ,MAAM,EACN,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;wBACpB,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnE,MAAM,EAAE,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC3D,CAAC,CACF,CAAC;oBACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBACrD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,IAAI,QAAQ,CAChB,6BAA6B,QAAQ,CAAC,IAAI,UAAU,QAAQ,CAAC,GAAG,KAAK;wBACnE,+CAA+C,EACjD,sBAAsB,EACtB,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAChC,CAAC;gBACJ,CAAC;gBACD,SAAS,GAAG,MAAM,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAChB,6BAA6B,SAAS,gCAAgC;gBACpE,oDAAoD,EACtD,sBAAsB,EACtB,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAChC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4EAA4E;IAE5E,KAAK,CAAC,mBAAmB;QACvB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,sDAAsD;QACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QAED,OAAO;YACL,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;YACrC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;SACtC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,gBAAgB,CAAC,OAA0B;QAChD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAEpC,wBAAwB;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAkC,CAAC;QAC5E,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAE5C,+EAA+E;QAC/E,iFAAiF;QACjF,MAAM,OAAO,GAA6B,IAAI,GAAG,CAAC,gBAAgB,CAAC;YACjE,eAAe,EAAE,OAAO,CAAC,WAAW,EAAE;YACtC,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;QAEH,yCAAyC;QACzC,4EAA4E;QAC5E,8CAA8C;QAC9C,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,iBAAiB,GAAG,aAAa,GAAG,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;QAC1G,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAE9D,sEAAsE;QACtE,sEAAsE;QACtE,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAE/C,iFAAiF;QACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC/B,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,yEAAyE;QACzE,kEAAkE;QAClE,IAAI,UAAU,GAAG,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,iDAAiD;gBACjD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;gBACxE,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBACxD,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;oBACxC,8EAA8E,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,6BAA6B,aAAa,4BAA4B,CAAC;gBACxF,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;YAClF,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+BAA+B,iBAAiB,kCAAkC,CACnF,CAAC;QACJ,CAAC;QAED,IAAI,cAAc,GAAG,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE;gBAChD,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;aACxC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAiB;YAEzE,mEAAmE;YACnE,MAAM,SAAS,GAAG,CAAC,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1D,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACvE,CAAC;YAED,MAAM;gBACJ,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE;oBACL,YAAY,EAAE,CAAC;oBACf,gBAAgB,EAAE,WAAW;oBAC7B,WAAW;iBACZ;aACF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,QAAmB,EACnB,KAAuB,EACvB,UAA2F,EAAE;QAE7F,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAkC,CAAC;QAE5E,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAE5C,iDAAiD;QACjD,0EAA0E;QAC1E,oDAAoD;QACpD,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;iBACnD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;iBACpF,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,SAAS,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,WAAW,kBAAkB,MAAM,EAAE,CAAC;QAClF,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG;YACnB,OAAO,CAAC,YAAY,IAAI,EAAE;YAC1B,KAAK,CAAC,MAAM,GAAG,CAAC;gBACd,CAAC,CAAC,kHAAkH;oBAClH,mEAAmE;oBACnE,qBAAqB,gBAAgB,EAAE;gBACzC,CAAC,CAAC,EAAE;SACP,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/B,4EAA4E;QAC5E,wEAAwE;QACxE,MAAM,OAAO,GAA6B,IAAI,GAAG,CAAC,gBAAgB,CAAC;YACjE,eAAe,EAAE,OAAO,CAAC,WAAW,EAAE;YACtC,YAAY,EAAE,YAAY,IAAI,SAAS;SACxC,CAAC,CAAC;QAEH,iDAAiD;QACjD,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC;QAE1C,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;gBACtC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;gBACpC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;aACxC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;QAED,qCAAqC;QACrC,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwE,CAAC;oBAC1G,SAAS,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI;wBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS;qBACtC,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;gBACnC,CAAC;YACH,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,OAAO;YACL,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI;YAC5C,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACvD,KAAK,EAAE;gBACL,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC;aACf;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CA4C/E"}
|
|
@@ -24,6 +24,14 @@ export async function createProvider(profile) {
|
|
|
24
24
|
apiKey: profile.apiKey,
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
if (provider === 'embedded') {
|
|
28
|
+
process.stderr.write('\n \x1b[33m[EXPERIMENTAL]\x1b[0m Using embedded provider — model runs in-process via node-llama-cpp.\n' +
|
|
29
|
+
' Model will be downloaded on first use only when provider is set to "embedded".\n\n');
|
|
30
|
+
const { EmbeddedAdapter } = await import('./embedded.js');
|
|
31
|
+
return new EmbeddedAdapter({
|
|
32
|
+
model: profile.model,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
throw new JamError(`Unknown provider: "${provider}". Supported providers: ollama, openai, groq, embedded`, 'CONFIG_INVALID');
|
|
28
36
|
}
|
|
29
37
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,IAAI,aAAa,CAAC;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,IAAI,aAAa,CAAC;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,IAAI,WAAW,CAAC;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,QAAQ,CAChB,sBAAsB,QAAQ,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,IAAI,aAAa,CAAC;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,IAAI,aAAa,CAAC;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,IAAI,WAAW,CAAC;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yGAAyG;YACzG,sFAAsF,CACvF,CAAC;QACF,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1D,OAAO,IAAI,eAAe,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,QAAQ,CAChB,sBAAsB,QAAQ,wDAAwD,EACtF,gBAAgB,CACjB,CAAC;AACJ,CAAC"}
|
package/dist/utils/logger.js
CHANGED
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAA6B;IAC3C,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,OAAO,MAAM;IACT,KAAK,CAAW;IAChB,QAAQ,CAAW;IAE3B,YAAY,QAAkB,MAAM,EAAE,iBAA2B,EAAE;QACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,OAAe;QAC5B,IAAI,MAAM,GAAG,OAAO,CAAC;QACrB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,KAAe,EAAE,MAAc,EAAE,OAAe,EAAE,GAAG,IAAe;QAChF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAA6B;IAC3C,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,OAAO,MAAM;IACT,KAAK,CAAW;IAChB,QAAQ,CAAW;IAE3B,YAAY,QAAkB,MAAM,EAAE,iBAA2B,EAAE;QACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,OAAe;QAC5B,IAAI,MAAM,GAAG,OAAO,CAAC;QACrB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,KAAe,EAAE,MAAc,EAAE,OAAe,EAAE,GAAG,IAAe;QAChF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAEnC,oBAAoB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sunilp-org/jam-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Jam — developer-first AI assistant CLI for the terminal. Ask questions, explain code, review diffs, generate patches, and run agentic tasks powered by Ollama.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"assistant",
|
|
24
24
|
"terminal",
|
|
25
25
|
"ollama",
|
|
26
|
+
"embedded",
|
|
26
27
|
"llm",
|
|
27
28
|
"developer-tools",
|
|
28
29
|
"code-review",
|
|
@@ -54,7 +55,8 @@
|
|
|
54
55
|
"clean": "rm -rf dist"
|
|
55
56
|
},
|
|
56
57
|
"optionalDependencies": {
|
|
57
|
-
"keytar": "^7.9.0"
|
|
58
|
+
"keytar": "^7.9.0",
|
|
59
|
+
"node-llama-cpp": "^3.0.0"
|
|
58
60
|
},
|
|
59
61
|
"dependencies": {
|
|
60
62
|
"chalk": "^5.3.0",
|