@sunilp-org/jam-cli 0.1.2 → 0.3.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 +9 -0
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +83 -12
- 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/run.d.ts +2 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +237 -15
- package/dist/commands/run.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +4 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +4 -4
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.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.map +1 -1
- package/dist/providers/embedded.js +152 -65
- package/dist/providers/embedded.js.map +1 -1
- package/dist/utils/agent.d.ts +80 -1
- package/dist/utils/agent.d.ts.map +1 -1
- package/dist/utils/agent.js +368 -4
- package/dist/utils/agent.js.map +1 -1
- package/dist/utils/logger.js +1 -0
- package/dist/utils/logger.js.map +1 -1
- package/package.json +3 -3
|
@@ -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"}
|
|
@@ -1 +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;
|
|
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"}
|
|
@@ -1,36 +1,44 @@
|
|
|
1
1
|
import { JamError } from '../utils/errors.js';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { existsSync, mkdirSync } from 'node:fs';
|
|
4
|
+
import { existsSync, mkdirSync, createWriteStream, unlinkSync } from 'node:fs';
|
|
5
|
+
import { pipeline } from 'node:stream/promises';
|
|
6
|
+
import { Readable } from 'node:stream';
|
|
5
7
|
// ── Defaults ─────────────────────────────────────────────────────────────────
|
|
6
8
|
/**
|
|
7
9
|
* Directory where embedded GGUF models are cached.
|
|
8
10
|
* ~/.jam/models/
|
|
9
11
|
*/
|
|
10
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
|
+
}
|
|
11
24
|
/**
|
|
12
25
|
* Default model to download when no model is specified.
|
|
13
|
-
* SmolLM2-360M is extremely lightweight (~
|
|
26
|
+
* SmolLM2-360M is extremely lightweight (~360 MB quantized) and runs
|
|
14
27
|
* comfortably on machines without a GPU.
|
|
15
28
|
*/
|
|
16
|
-
const
|
|
17
|
-
const DEFAULT_MODEL_FILENAME = 'smollm2-360m-instruct-q4_k_m.gguf';
|
|
18
|
-
const DEFAULT_MODEL_LABEL = 'SmolLM2-360M-Instruct-Q4_K_M';
|
|
29
|
+
const DEFAULT_MODEL_FILENAME = 'smollm2-1.7b-instruct-q4_k_m.gguf';
|
|
19
30
|
/**
|
|
20
31
|
* A curated list of known models users can request by short alias.
|
|
21
|
-
* Maps alias → {
|
|
32
|
+
* Maps alias → { url, file }.
|
|
33
|
+
* Files are hosted as release assets on github.com/sunilp/homebrew-tap.
|
|
22
34
|
*/
|
|
23
35
|
const MODEL_ALIASES = {
|
|
24
|
-
'smollm2-135m': {
|
|
25
|
-
repo: 'HuggingFaceTB/SmolLM2-135M-Instruct-GGUF',
|
|
26
|
-
file: 'smollm2-135m-instruct-q4_k_m.gguf',
|
|
27
|
-
},
|
|
28
36
|
'smollm2-360m': {
|
|
29
|
-
|
|
30
|
-
file: 'smollm2-360m-instruct-
|
|
37
|
+
url: githubModelUrl('smollm2-360m-instruct-q8_0.gguf'),
|
|
38
|
+
file: 'smollm2-360m-instruct-q8_0.gguf',
|
|
31
39
|
},
|
|
32
40
|
'smollm2-1.7b': {
|
|
33
|
-
|
|
41
|
+
url: githubModelUrl('smollm2-1.7b-instruct-q4_k_m.gguf'),
|
|
34
42
|
file: 'smollm2-1.7b-instruct-q4_k_m.gguf',
|
|
35
43
|
},
|
|
36
44
|
};
|
|
@@ -41,39 +49,91 @@ function ensureModelsDir() {
|
|
|
41
49
|
}
|
|
42
50
|
}
|
|
43
51
|
/**
|
|
44
|
-
*
|
|
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
|
+
*
|
|
45
95
|
* Supports:
|
|
46
|
-
* - Known aliases
|
|
47
|
-
* - HF repo paths
|
|
48
|
-
* -
|
|
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/
|
|
49
100
|
*/
|
|
50
101
|
function resolveModel(model) {
|
|
51
102
|
if (!model) {
|
|
52
|
-
return {
|
|
103
|
+
return { url: githubModelUrl(DEFAULT_MODEL_FILENAME), file: DEFAULT_MODEL_FILENAME };
|
|
53
104
|
}
|
|
54
105
|
const lower = model.toLowerCase();
|
|
55
106
|
if (MODEL_ALIASES[lower]) {
|
|
56
107
|
return MODEL_ALIASES[lower];
|
|
57
108
|
}
|
|
58
|
-
//
|
|
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
|
|
59
115
|
const parts = model.split('/');
|
|
60
116
|
if (parts.length >= 3 && model.endsWith('.gguf')) {
|
|
61
117
|
const file = parts.pop();
|
|
62
118
|
const repo = parts.join('/');
|
|
63
|
-
return { repo
|
|
119
|
+
return { url: `https://huggingface.co/${repo}/resolve/main/${file}`, file };
|
|
64
120
|
}
|
|
65
121
|
// Already a local path or just a filename
|
|
66
122
|
if (model.endsWith('.gguf')) {
|
|
67
123
|
return { localPath: model.startsWith('/') ? model : join(MODELS_DIR, model) };
|
|
68
124
|
}
|
|
69
|
-
// Default:
|
|
70
|
-
return {
|
|
125
|
+
// Default: fall back to default model hosted on GitHub
|
|
126
|
+
return { url: githubModelUrl(DEFAULT_MODEL_FILENAME), file: DEFAULT_MODEL_FILENAME };
|
|
71
127
|
}
|
|
72
|
-
// ── Adapter ──────────────────────────────────────────────────────────────────
|
|
73
128
|
export class EmbeddedAdapter {
|
|
74
129
|
info = {
|
|
75
130
|
name: 'embedded (experimental)',
|
|
76
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,
|
|
77
137
|
};
|
|
78
138
|
modelSpec;
|
|
79
139
|
// Lazy-loaded resources
|
|
@@ -119,23 +179,19 @@ export class EmbeddedAdapter {
|
|
|
119
179
|
}
|
|
120
180
|
else {
|
|
121
181
|
process.stderr.write(`\n Downloading embedded model: ${resolved.file}\n` +
|
|
122
|
-
` From:
|
|
182
|
+
` From: ${resolved.url}\n` +
|
|
123
183
|
` Destination: ${cached}\n` +
|
|
124
184
|
` This is a one-time download...\n\n`);
|
|
125
185
|
try {
|
|
126
|
-
await
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
onProgress: (progress) => {
|
|
131
|
-
const pct = Math.round((progress.downloaded / progress.total) * 100);
|
|
132
|
-
process.stderr.write(`\r Progress: ${pct}%`);
|
|
133
|
-
},
|
|
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)`);
|
|
134
190
|
});
|
|
135
191
|
process.stderr.write('\n Download complete!\n\n');
|
|
136
192
|
}
|
|
137
193
|
catch (err) {
|
|
138
|
-
throw new JamError(`Failed to download model "${resolved.file}" from
|
|
194
|
+
throw new JamError(`Failed to download model "${resolved.file}" from ${resolved.url}.\n` +
|
|
139
195
|
`Check your internet connection and try again.`, 'PROVIDER_UNAVAILABLE', { retryable: true, cause: err });
|
|
140
196
|
}
|
|
141
197
|
modelPath = cached;
|
|
@@ -183,47 +239,72 @@ export class EmbeddedAdapter {
|
|
|
183
239
|
// node-llama-cpp v3 API
|
|
184
240
|
const nlc = await import('node-llama-cpp');
|
|
185
241
|
const context = await model.createContext();
|
|
186
|
-
|
|
187
|
-
//
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
+
}
|
|
195
270
|
}
|
|
196
|
-
|
|
197
|
-
|
|
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 ...]';
|
|
198
284
|
}
|
|
199
|
-
else
|
|
200
|
-
|
|
285
|
+
else {
|
|
286
|
+
const truncMsg = `\n\n[... truncated to fit ${contextWindow}-token context window ...]`;
|
|
287
|
+
promptText = promptText.slice(0, inputBudgetChars - truncMsg.length) + truncMsg;
|
|
201
288
|
}
|
|
289
|
+
process.stderr.write(`\n ⚠️ Input truncated to ~${inputBudgetTokens} tokens to fit context window.\n`);
|
|
202
290
|
}
|
|
203
|
-
// Get the last user message as the prompt (chat session manages history)
|
|
204
|
-
const lastUserMsg = [...request.messages].reverse().find((m) => m.role === 'user');
|
|
205
|
-
const prompt = lastUserMsg?.content ?? promptParts.join('\n');
|
|
206
|
-
let totalTokens = 0;
|
|
207
291
|
let completionText = '';
|
|
208
292
|
try {
|
|
209
|
-
|
|
210
|
-
maxTokens:
|
|
293
|
+
completionText = await session.prompt(promptText, {
|
|
294
|
+
maxTokens: maxOutputTokens,
|
|
211
295
|
temperature: request.temperature ?? 0.7,
|
|
212
|
-
onTextChunk: undefined, // we'll use the non-streaming path and chunk it
|
|
213
296
|
});
|
|
214
|
-
|
|
215
|
-
totalTokens = completionText.split(/\s+/).length; // rough estimate
|
|
297
|
+
const totalTokens = completionText.split(/\s+/).length; // rough estimate
|
|
216
298
|
// Emit the complete response as chunks for streaming compatibility
|
|
217
|
-
const chunkSize = 4;
|
|
299
|
+
const chunkSize = 4;
|
|
218
300
|
for (let i = 0; i < completionText.length; i += chunkSize) {
|
|
219
|
-
|
|
220
|
-
yield { delta, done: false };
|
|
301
|
+
yield { delta: completionText.slice(i, i + chunkSize), done: false };
|
|
221
302
|
}
|
|
222
303
|
yield {
|
|
223
304
|
delta: '',
|
|
224
305
|
done: true,
|
|
225
306
|
usage: {
|
|
226
|
-
promptTokens: 0,
|
|
307
|
+
promptTokens: 0,
|
|
227
308
|
completionTokens: totalTokens,
|
|
228
309
|
totalTokens,
|
|
229
310
|
},
|
|
@@ -237,16 +318,16 @@ export class EmbeddedAdapter {
|
|
|
237
318
|
const { model } = await this.boot();
|
|
238
319
|
const nlc = await import('node-llama-cpp');
|
|
239
320
|
const context = await model.createContext();
|
|
240
|
-
|
|
241
|
-
//
|
|
242
|
-
//
|
|
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.
|
|
243
324
|
const toolDescriptions = tools.map((t) => {
|
|
244
325
|
const params = Object.entries(t.parameters.properties)
|
|
245
326
|
.map(([name, schema]) => ` - ${name} (${schema.type}): ${schema.description ?? ''}`)
|
|
246
327
|
.join('\n');
|
|
247
328
|
return `Tool: ${t.name}\nDescription: ${t.description}\nParameters:\n${params}`;
|
|
248
329
|
}).join('\n\n');
|
|
249
|
-
const
|
|
330
|
+
const systemPrompt = [
|
|
250
331
|
options.systemPrompt ?? '',
|
|
251
332
|
tools.length > 0
|
|
252
333
|
? `You have access to the following tools. To call a tool, respond with EXACTLY this JSON format on its own line:\n` +
|
|
@@ -254,9 +335,15 @@ export class EmbeddedAdapter {
|
|
|
254
335
|
`Available tools:\n${toolDescriptions}`
|
|
255
336
|
: '',
|
|
256
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.
|
|
257
345
|
const lastUserMsg = [...messages].reverse().find((m) => m.role === 'user');
|
|
258
|
-
const prompt =
|
|
259
|
-
(lastUserMsg?.content ?? '');
|
|
346
|
+
const prompt = lastUserMsg?.content ?? '';
|
|
260
347
|
let response;
|
|
261
348
|
try {
|
|
262
349
|
response = await session.prompt(prompt, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded.js","sourceRoot":"","sources":["../../src/providers/embedded.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embedded.js","sourceRoot":"","sources":["../../src/providers/embedded.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/agent.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* Individual commands wire these into their own UI layer (stdout streaming,
|
|
13
13
|
* Ink TUI, or plain stderr).
|
|
14
14
|
*/
|
|
15
|
-
import type { ProviderAdapter } from '../providers/base.js';
|
|
15
|
+
import type { ProviderAdapter, Message } from '../providers/base.js';
|
|
16
16
|
export declare const ANSI: {
|
|
17
17
|
readonly reset: "\u001B[0m";
|
|
18
18
|
readonly dim: "\u001B[2m";
|
|
@@ -65,6 +65,83 @@ export declare function generateSearchPlan(provider: ProviderAdapter, question:
|
|
|
65
65
|
temperature?: number;
|
|
66
66
|
maxTokens?: number;
|
|
67
67
|
}): Promise<string | null>;
|
|
68
|
+
/** One step in a structured execution plan. */
|
|
69
|
+
export interface PlanStep {
|
|
70
|
+
/** Sequential step number starting at 1. */
|
|
71
|
+
id: number;
|
|
72
|
+
/** Human-readable description, e.g. "Search for createProvider in factory.ts". */
|
|
73
|
+
action: string;
|
|
74
|
+
/** Tool to use: 'search_text' | 'read_file' | 'list_dir'. */
|
|
75
|
+
tool: string;
|
|
76
|
+
/** Exact arguments to pass to the tool. */
|
|
77
|
+
args: Record<string, unknown>;
|
|
78
|
+
/** What constitutes success, e.g. "Found function signature in src/providers/factory.ts". */
|
|
79
|
+
successCriteria: string;
|
|
80
|
+
}
|
|
81
|
+
/** A structured execution plan produced by the planner LLM call. */
|
|
82
|
+
export interface ExecutionPlan {
|
|
83
|
+
/** One-sentence restatement of what the user wants. */
|
|
84
|
+
intent: string;
|
|
85
|
+
/** Ordered steps to execute. */
|
|
86
|
+
steps: PlanStep[];
|
|
87
|
+
/** Planner's minimum number of steps before the executor should attempt an answer. */
|
|
88
|
+
minStepsBeforeAnswer: number;
|
|
89
|
+
/** Files likely to be relevant (hints for the executor). */
|
|
90
|
+
expectedFiles: string[];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Generate a structured, typed execution plan.
|
|
94
|
+
* Falls back to null on parse failure — callers should fall back to generateSearchPlan.
|
|
95
|
+
*/
|
|
96
|
+
export declare function generateExecutionPlan(provider: ProviderAdapter, question: string, projectContext: string, options: {
|
|
97
|
+
model?: string;
|
|
98
|
+
temperature?: number;
|
|
99
|
+
maxTokens?: number;
|
|
100
|
+
mode?: 'readonly' | 'readwrite';
|
|
101
|
+
}): Promise<ExecutionPlan | null>;
|
|
102
|
+
/**
|
|
103
|
+
* Parse a JSON execution plan from the model's response.
|
|
104
|
+
* Handles markdown code-block wrappers and leading/trailing prose.
|
|
105
|
+
*/
|
|
106
|
+
export declare function parseExecutionPlan(text: string): ExecutionPlan | null;
|
|
107
|
+
/**
|
|
108
|
+
* Format an ExecutionPlan as a visual block for stderr display.
|
|
109
|
+
*/
|
|
110
|
+
export declare function formatExecutionPlanBlock(plan: ExecutionPlan, noColor: boolean): string;
|
|
111
|
+
/**
|
|
112
|
+
* Enrich the user's prompt with a structured execution plan.
|
|
113
|
+
* Gives the model explicit, ordered steps with exact tool args so it does not meander.
|
|
114
|
+
*/
|
|
115
|
+
export declare function enrichUserPromptWithPlan(prompt: string, plan: ExecutionPlan): string;
|
|
116
|
+
/** Result from the step verifier mid-process check. */
|
|
117
|
+
export interface VerifierResult {
|
|
118
|
+
/** Whether the agent has enough context to answer, needs more, or is stuck. */
|
|
119
|
+
status: 'need-more' | 'ready-to-answer' | 'stuck';
|
|
120
|
+
/** Next step ID to focus on (1-based). 0 when ready-to-answer. */
|
|
121
|
+
nextStepId: number;
|
|
122
|
+
/** Brief explanation. */
|
|
123
|
+
reason: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Mid-process verifier: checks every N rounds whether the agent has enough
|
|
127
|
+
* context to answer or is stuck. Enables early termination and targeted recovery.
|
|
128
|
+
*/
|
|
129
|
+
export declare class StepVerifier {
|
|
130
|
+
/**
|
|
131
|
+
* Run a cheap verifier LLM call against the current tool results.
|
|
132
|
+
* Non-fatal — returns 'need-more' on any failure.
|
|
133
|
+
*/
|
|
134
|
+
verify(provider: ProviderAdapter, question: string, plan: ExecutionPlan | null, toolResultsSummary: string, options: {
|
|
135
|
+
model?: string;
|
|
136
|
+
}): Promise<VerifierResult>;
|
|
137
|
+
/** Parse the verifier's structured response. Exported for testing. */
|
|
138
|
+
parseVerifierResponse(text: string): VerifierResult | null;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Extract a summary of the most recent tool results from the message history.
|
|
142
|
+
* Fed to the StepVerifier so it can assess progress without the full context.
|
|
143
|
+
*/
|
|
144
|
+
export declare function buildToolResultsSummary(messages: Message[]): string;
|
|
68
145
|
/**
|
|
69
146
|
* Enrich the user's prompt with search strategy guidance.
|
|
70
147
|
* If a search plan is provided, integrates it for focused searching.
|
|
@@ -86,6 +163,8 @@ export declare class ToolCallTracker {
|
|
|
86
163
|
/** Build a correction hint if the model is stuck. */
|
|
87
164
|
getCorrectionHint(): string | null;
|
|
88
165
|
get totalCalls(): number;
|
|
166
|
+
/** Check if a specific tool was ever called in this session. */
|
|
167
|
+
wasToolCalled(name: string): boolean;
|
|
89
168
|
/** Reset for a new turn (useful in multi-turn chat). */
|
|
90
169
|
reset(): void;
|
|
91
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":"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"}
|