@sunilp-org/jam-cli 0.1.0 → 0.1.1
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 +304 -52
- package/dist/commands/ask.d.ts +4 -0
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +202 -10
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/commit.d.ts +12 -0
- package/dist/commands/commit.d.ts.map +1 -0
- package/dist/commands/commit.js +135 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/context.d.ts +12 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +52 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/review.d.ts +25 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +117 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/run.d.ts +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +199 -197
- package/dist/commands/run.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +3 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/index.js +63 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/base.d.ts +26 -0
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/factory.d.ts.map +1 -1
- package/dist/providers/factory.js +17 -1
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/groq.d.ts +16 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +23 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/ollama.d.ts +6 -1
- package/dist/providers/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +77 -4
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts +18 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +229 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/tools/all-tools.d.ts +18 -0
- package/dist/tools/all-tools.d.ts.map +1 -0
- package/dist/tools/all-tools.js +95 -0
- package/dist/tools/all-tools.js.map +1 -0
- package/dist/tools/apply_patch.js +1 -1
- package/dist/tools/apply_patch.js.map +1 -1
- package/dist/tools/context-tools.d.ts +14 -0
- package/dist/tools/context-tools.d.ts.map +1 -0
- package/dist/tools/context-tools.js +63 -0
- package/dist/tools/context-tools.js.map +1 -0
- package/dist/tools/git_diff.js +1 -1
- package/dist/tools/git_diff.js.map +1 -1
- package/dist/tools/git_status.js +1 -1
- package/dist/tools/git_status.js.map +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +2 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run_command.d.ts +8 -3
- package/dist/tools/run_command.d.ts.map +1 -1
- package/dist/tools/run_command.js +90 -3
- package/dist/tools/run_command.js.map +1 -1
- package/dist/ui/chat.d.ts.map +1 -1
- package/dist/ui/chat.js +173 -1
- package/dist/ui/chat.js.map +1 -1
- package/dist/ui/logo.d.ts.map +1 -1
- package/dist/ui/logo.js +5 -1
- package/dist/ui/logo.js.map +1 -1
- package/dist/utils/agent.d.ts +130 -0
- package/dist/utils/agent.d.ts.map +1 -0
- package/dist/utils/agent.js +449 -0
- package/dist/utils/agent.js.map +1 -0
- package/dist/utils/cache.d.ts +30 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +62 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/context.d.ts +38 -0
- package/dist/utils/context.d.ts.map +1 -0
- package/dist/utils/context.js +383 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/critic.d.ts +31 -0
- package/dist/utils/critic.d.ts.map +1 -0
- package/dist/utils/critic.js +126 -0
- package/dist/utils/critic.js.map +1 -0
- package/dist/utils/index-builder.d.ts +53 -0
- package/dist/utils/index-builder.d.ts.map +1 -0
- package/dist/utils/index-builder.js +241 -0
- package/dist/utils/index-builder.js.map +1 -0
- package/dist/utils/memory.d.ts +104 -0
- package/dist/utils/memory.d.ts.map +1 -0
- package/dist/utils/memory.js +215 -0
- package/dist/utils/memory.js.map +1 -0
- package/dist/utils/past-sessions.d.ts +31 -0
- package/dist/utils/past-sessions.d.ts.map +1 -0
- package/dist/utils/past-sessions.js +126 -0
- package/dist/utils/past-sessions.js.map +1 -0
- package/dist/utils/tokens.d.ts +53 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +138 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +4 -2
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
+
import { JamError } from '../utils/errors.js';
|
|
3
|
+
// Patterns that are never allowed regardless of policy
|
|
4
|
+
const DANGEROUS_PATTERNS = [
|
|
5
|
+
/\brm\s+-[a-zA-Z]*r[a-zA-Z]*f\b/, // rm -rf, rm -fr, etc.
|
|
6
|
+
/\brm\s+-[a-zA-Z]*f[a-zA-Z]*r\b/,
|
|
7
|
+
/\bsudo\b/,
|
|
8
|
+
/\bsu\s+-/,
|
|
9
|
+
/\bmkfs\b/,
|
|
10
|
+
/\bdd\s+.*of=\/dev\//,
|
|
11
|
+
/>\s*\/dev\/(s|h|v)d[a-z]/, // overwriting block devices
|
|
12
|
+
/\bchmod\s+777\s+\//,
|
|
13
|
+
/\bshutdown\b/,
|
|
14
|
+
/\breboot\b/,
|
|
15
|
+
];
|
|
2
16
|
/**
|
|
3
|
-
* Spawns a child process and returns stdout as
|
|
4
|
-
* Rejects with an Error
|
|
17
|
+
* Spawns a child process and returns { stdout, stderr } as strings.
|
|
18
|
+
* Rejects with an Error if the process exits with a non-zero code or times out.
|
|
5
19
|
*/
|
|
6
20
|
export function runCommand(command, args, cwd, timeoutMs = 30_000) {
|
|
7
21
|
return new Promise((resolve, reject) => {
|
|
@@ -21,7 +35,7 @@ export function runCommand(command, args, cwd, timeoutMs = 30_000) {
|
|
|
21
35
|
child.on('close', (code) => {
|
|
22
36
|
clearTimeout(timer);
|
|
23
37
|
if (code === 0) {
|
|
24
|
-
resolve(stdout);
|
|
38
|
+
resolve({ stdout, stderr });
|
|
25
39
|
}
|
|
26
40
|
else {
|
|
27
41
|
const detail = stderr.trim() || stdout.trim();
|
|
@@ -34,4 +48,77 @@ export function runCommand(command, args, cwd, timeoutMs = 30_000) {
|
|
|
34
48
|
});
|
|
35
49
|
});
|
|
36
50
|
}
|
|
51
|
+
/** Check a full command string against dangerous patterns. */
|
|
52
|
+
function isDangerous(fullCommand) {
|
|
53
|
+
return DANGEROUS_PATTERNS.some((pattern) => pattern.test(fullCommand));
|
|
54
|
+
}
|
|
55
|
+
export const runCommandTool = {
|
|
56
|
+
name: 'run_command',
|
|
57
|
+
description: 'Execute a shell command and return its stdout and stderr. ' +
|
|
58
|
+
'Use for running tests, builds, linters, or other safe commands. ' +
|
|
59
|
+
'Dangerous commands (rm -rf, sudo, etc.) are blocked. ' +
|
|
60
|
+
'Note: arguments are split on whitespace; quoted arguments with spaces are not supported.',
|
|
61
|
+
readonly: false,
|
|
62
|
+
parameters: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
command: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'The executable or shell command to run (e.g. "npm", "git", "python").',
|
|
68
|
+
},
|
|
69
|
+
args: {
|
|
70
|
+
type: 'string',
|
|
71
|
+
description: 'Space-separated arguments to pass to the command (e.g. "test --run").',
|
|
72
|
+
optional: true,
|
|
73
|
+
},
|
|
74
|
+
timeout: {
|
|
75
|
+
type: 'number',
|
|
76
|
+
description: 'Timeout in seconds. Default is 30.',
|
|
77
|
+
optional: true,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
required: ['command'],
|
|
81
|
+
},
|
|
82
|
+
async execute(args, ctx) {
|
|
83
|
+
const command = args['command'];
|
|
84
|
+
if (typeof command !== 'string' || command.trim() === '') {
|
|
85
|
+
throw new JamError('Argument "command" must be a non-empty string.', 'INPUT_MISSING');
|
|
86
|
+
}
|
|
87
|
+
const rawArgs = args['args'];
|
|
88
|
+
const cmdArgs = typeof rawArgs === 'string' && rawArgs.trim() !== ''
|
|
89
|
+
? rawArgs.trim().split(/\s+/)
|
|
90
|
+
: [];
|
|
91
|
+
const timeoutArg = args['timeout'];
|
|
92
|
+
const timeoutMs = typeof timeoutArg === 'number' && timeoutArg > 0 ? timeoutArg * 1000 : 30_000;
|
|
93
|
+
const fullCommand = [command, ...cmdArgs].join(' ');
|
|
94
|
+
if (isDangerous(fullCommand)) {
|
|
95
|
+
throw new JamError(`Command rejected: "${fullCommand}" matches a dangerous pattern and cannot be executed.`, 'TOOL_DENIED');
|
|
96
|
+
}
|
|
97
|
+
let result;
|
|
98
|
+
try {
|
|
99
|
+
result = await runCommand(command.trim(), cmdArgs, ctx.workspaceRoot, timeoutMs);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
if (err instanceof Error) {
|
|
103
|
+
return {
|
|
104
|
+
output: err.message,
|
|
105
|
+
error: err.message,
|
|
106
|
+
metadata: { command: fullCommand, exitCode: 1 },
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
throw new JamError(`run_command failed: ${String(err)}`, 'TOOL_EXEC_ERROR', { cause: err });
|
|
110
|
+
}
|
|
111
|
+
const output = [
|
|
112
|
+
result.stdout.trim() ? result.stdout : '',
|
|
113
|
+
result.stderr.trim() ? `[stderr]\n${result.stderr}` : '',
|
|
114
|
+
]
|
|
115
|
+
.filter(Boolean)
|
|
116
|
+
.join('\n')
|
|
117
|
+
.trim();
|
|
118
|
+
return {
|
|
119
|
+
output: output || '(no output)',
|
|
120
|
+
metadata: { command: fullCommand },
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
};
|
|
37
124
|
//# sourceMappingURL=run_command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run_command.js","sourceRoot":"","sources":["../../src/tools/run_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run_command.js","sourceRoot":"","sources":["../../src/tools/run_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,uDAAuD;AACvD,MAAM,kBAAkB,GAAa;IACnC,gCAAgC,EAAI,uBAAuB;IAC3D,gCAAgC;IAChC,UAAU;IACV,UAAU;IACV,UAAU;IACV,qBAAqB;IACrB,0BAA0B,EAAY,4BAA4B;IAClE,oBAAoB;IACpB,cAAc;IACd,YAAY;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,IAAc,EACd,GAAW,EACX,SAAS,GAAG,MAAM;IAElB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAE/E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,SAAS,OAAO,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,CACJ,IAAI,KAAK,CACP,YAAY,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAChG,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8DAA8D;AAC9D,SAAS,WAAW,CAAC,WAAmB;IACtC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,4DAA4D;QAC5D,kEAAkE;QAClE,uDAAuD;QACvD,0FAA0F;IAC5F,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;aACrF;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;gBACpF,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;gBACjD,QAAQ,EAAE,IAAI;aACf;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IAED,KAAK,CAAC,OAAO,CAAC,IAA6B,EAAE,GAAgB;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzD,MAAM,IAAI,QAAQ,CAAC,gDAAgD,EAAE,eAAe,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,OAAO,GACX,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;YAClD,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,SAAS,GACb,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAEhF,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,QAAQ,CAChB,sBAAsB,WAAW,uDAAuD,EACxF,aAAa,CACd,CAAC;QACJ,CAAC;QAED,IAAI,MAA0C,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBACzB,OAAO;oBACL,MAAM,EAAE,GAAG,CAAC,OAAO;oBACnB,KAAK,EAAE,GAAG,CAAC,OAAO;oBAClB,QAAQ,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE;iBAChD,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,uBAAuB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,MAAM,GAAG;YACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACzC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;SACzD;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,EAAE,CAAC;QAEV,OAAO;YACL,MAAM,EAAE,MAAM,IAAI,aAAa;YAC/B,QAAQ,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;SACnC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/dist/ui/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/ui/chat.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/ui/chat.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAqBrD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,EAAE,CAAC;CAC5B;AAgdD,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAWnE"}
|
package/dist/ui/chat.js
CHANGED
|
@@ -3,6 +3,15 @@ import { useState, useEffect, useCallback, useRef } from 'react';
|
|
|
3
3
|
import { render, Box, Text, useApp, useInput, Static } from 'ink';
|
|
4
4
|
import TextInput from 'ink-text-input';
|
|
5
5
|
import { appendMessage } from '../storage/history.js';
|
|
6
|
+
import { READ_ONLY_TOOL_SCHEMAS, executeReadOnlyTool } from '../tools/context-tools.js';
|
|
7
|
+
import { getWorkspaceRoot } from '../utils/workspace.js';
|
|
8
|
+
import { ToolCallTracker, ANSI, ansi, loadProjectContext, buildSystemPrompt, enrichUserPrompt, generateSearchPlan, buildSynthesisReminder, } from '../utils/agent.js';
|
|
9
|
+
import { WorkingMemory } from '../utils/memory.js';
|
|
10
|
+
import { ToolResultCache } from '../utils/cache.js';
|
|
11
|
+
import { criticEvaluate, buildCriticCorrection } from '../utils/critic.js';
|
|
12
|
+
import { searchPastSessions, formatPastExchanges } from '../utils/past-sessions.js';
|
|
13
|
+
import { getOrBuildIndex, searchSymbols, formatSymbolResults } from '../utils/index-builder.js';
|
|
14
|
+
import { updateContextWithUsage } from '../utils/context.js';
|
|
6
15
|
function formatRole(role) {
|
|
7
16
|
switch (role) {
|
|
8
17
|
case 'user':
|
|
@@ -95,6 +104,169 @@ function ChatApp({ provider, config, sessionId, initialMessages, }) {
|
|
|
95
104
|
const profile = config.profiles[config.defaultProfile];
|
|
96
105
|
const abortController = new AbortController();
|
|
97
106
|
abortRef.current = abortController;
|
|
107
|
+
// ── Build system prompt (used for BOTH tool gathering AND streaming) ──
|
|
108
|
+
let agentSystemPrompt;
|
|
109
|
+
// ── Agentic tool-gathering phase ─────────────────────────────────────
|
|
110
|
+
// Run read-only tool rounds to gather context before giving final answer.
|
|
111
|
+
if (provider.chatWithTools && !abortController.signal.aborted) {
|
|
112
|
+
try {
|
|
113
|
+
const workspaceRoot = await getWorkspaceRoot();
|
|
114
|
+
const { jamContext, workspaceCtx } = await loadProjectContext(workspaceRoot);
|
|
115
|
+
let toolMessages = [...conversationRef.current];
|
|
116
|
+
const tracker = new ToolCallTracker();
|
|
117
|
+
const memory = new WorkingMemory(provider, profile?.model, undefined);
|
|
118
|
+
const cache = new ToolResultCache();
|
|
119
|
+
agentSystemPrompt =
|
|
120
|
+
profile?.systemPrompt ??
|
|
121
|
+
buildSystemPrompt(jamContext, workspaceCtx);
|
|
122
|
+
memory['systemPrompt'] = agentSystemPrompt;
|
|
123
|
+
// ── Symbol index + past sessions for richer planning ──────────
|
|
124
|
+
let symbolHint = '';
|
|
125
|
+
try {
|
|
126
|
+
const index = await getOrBuildIndex(workspaceRoot);
|
|
127
|
+
const symbols = searchSymbols(index, trimmed, 10);
|
|
128
|
+
symbolHint = formatSymbolResults(symbols);
|
|
129
|
+
}
|
|
130
|
+
catch { /* non-fatal */ }
|
|
131
|
+
let pastContext = '';
|
|
132
|
+
try {
|
|
133
|
+
const pastExchanges = await searchPastSessions(trimmed, workspaceRoot, 2);
|
|
134
|
+
pastContext = formatPastExchanges(pastExchanges);
|
|
135
|
+
}
|
|
136
|
+
catch { /* non-fatal */ }
|
|
137
|
+
// ── Planning phase: reason about what to search for ──────────
|
|
138
|
+
setStreamingText(ansi(ANSI.dimBlue, '🔍 Planning search strategy…'));
|
|
139
|
+
const projectCtxForPlan = [jamContext ?? workspaceCtx, symbolHint, pastContext].filter(Boolean).join('\n\n');
|
|
140
|
+
// Get the user's original question (last user message, before enrichment)
|
|
141
|
+
const originalQuestion = trimmed;
|
|
142
|
+
const searchPlan = await generateSearchPlan(provider, originalQuestion, projectCtxForPlan, { model: profile?.model, temperature: profile?.temperature, maxTokens: profile?.maxTokens });
|
|
143
|
+
// Enrich the last user message with the search plan
|
|
144
|
+
const lastMsg = toolMessages[toolMessages.length - 1];
|
|
145
|
+
if (lastMsg && lastMsg.role === 'user') {
|
|
146
|
+
toolMessages[toolMessages.length - 1] = {
|
|
147
|
+
...lastMsg,
|
|
148
|
+
content: enrichUserPrompt(lastMsg.content, searchPlan),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
let synthesisInjected = false;
|
|
152
|
+
const MAX_TOOL_ROUNDS = 15;
|
|
153
|
+
for (let round = 0; round < MAX_TOOL_ROUNDS; round++) {
|
|
154
|
+
if (abortController.signal.aborted)
|
|
155
|
+
break;
|
|
156
|
+
// Context window management: compact if approaching limit
|
|
157
|
+
if (memory.shouldCompact(toolMessages)) {
|
|
158
|
+
setStreamingText(ansi(ANSI.dimGray, '· Compacting context…'));
|
|
159
|
+
toolMessages = await memory.compact(toolMessages);
|
|
160
|
+
}
|
|
161
|
+
const response = await provider.chatWithTools(toolMessages, READ_ONLY_TOOL_SCHEMAS, {
|
|
162
|
+
model: profile?.model,
|
|
163
|
+
temperature: profile?.temperature,
|
|
164
|
+
maxTokens: profile?.maxTokens,
|
|
165
|
+
systemPrompt: agentSystemPrompt,
|
|
166
|
+
});
|
|
167
|
+
if (!response.toolCalls?.length) {
|
|
168
|
+
const finalText = response.content ?? '';
|
|
169
|
+
// Synthesis grounding with critic evaluation
|
|
170
|
+
if (tracker.totalCalls > 0 && !synthesisInjected && round < MAX_TOOL_ROUNDS - 2) {
|
|
171
|
+
synthesisInjected = true;
|
|
172
|
+
// Critic evaluation of current answer
|
|
173
|
+
if (finalText.trim().length > 0) {
|
|
174
|
+
setStreamingText(ansi(ANSI.dimGray, '· Evaluating answer quality…'));
|
|
175
|
+
const verdict = await criticEvaluate(provider, originalQuestion, finalText, { model: profile?.model });
|
|
176
|
+
if (verdict.pass) {
|
|
177
|
+
conversationRef.current = toolMessages;
|
|
178
|
+
// Auto-update JAM.md
|
|
179
|
+
const log = memory.getAccessLog();
|
|
180
|
+
updateContextWithUsage(workspaceRoot, log.readFiles, log.searchQueries).catch(() => { });
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
// Critic rejected — use its feedback
|
|
184
|
+
setStreamingText(ansi(ANSI.dimGray, `· Critic: ${verdict.reason}`));
|
|
185
|
+
toolMessages.push({ role: 'assistant', content: finalText });
|
|
186
|
+
toolMessages.push({ role: 'user', content: buildCriticCorrection(verdict, originalQuestion) });
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
setStreamingText(ansi(ANSI.dimGray, '· Grounding answer to your question…'));
|
|
190
|
+
toolMessages.push({ role: 'assistant', content: finalText });
|
|
191
|
+
toolMessages.push({ role: 'user', content: buildSynthesisReminder(originalQuestion) });
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
// Final critic check
|
|
195
|
+
if (tracker.totalCalls > 0 && finalText.trim().length > 30 && round < MAX_TOOL_ROUNDS - 2) {
|
|
196
|
+
const verdict = await criticEvaluate(provider, originalQuestion, finalText, { model: profile?.model });
|
|
197
|
+
if (!verdict.pass) {
|
|
198
|
+
setStreamingText(ansi(ANSI.dimGray, `· Critic: ${verdict.reason}`));
|
|
199
|
+
toolMessages.push({ role: 'assistant', content: finalText });
|
|
200
|
+
toolMessages.push({ role: 'user', content: buildCriticCorrection(verdict, originalQuestion) });
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Model has enough context — let streaming use the enriched history
|
|
205
|
+
conversationRef.current = toolMessages;
|
|
206
|
+
const log = memory.getAccessLog();
|
|
207
|
+
updateContextWithUsage(workspaceRoot, log.readFiles, log.searchQueries).catch(() => { });
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
toolMessages.push({ role: 'assistant', content: response.content ?? '' });
|
|
211
|
+
for (const tc of response.toolCalls) {
|
|
212
|
+
if (abortController.signal.aborted)
|
|
213
|
+
break;
|
|
214
|
+
// Duplicate detection
|
|
215
|
+
if (tracker.isDuplicate(tc.name, tc.arguments)) {
|
|
216
|
+
setStreamingText(ansi(ANSI.dimGray, `✕ skipped duplicate: ${tc.name}`));
|
|
217
|
+
toolMessages.push({
|
|
218
|
+
role: 'user',
|
|
219
|
+
content: `[Tool result: ${tc.name}]\nYou already made this exact call. Try a DIFFERENT query or tool.`,
|
|
220
|
+
});
|
|
221
|
+
tracker.record(tc.name, tc.arguments, true);
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
// Check cache
|
|
225
|
+
const cached = cache.get(tc.name, tc.arguments);
|
|
226
|
+
if (cached !== null) {
|
|
227
|
+
setStreamingText(ansi(ANSI.dimCyan, `▸ ${tc.name} (cached)`));
|
|
228
|
+
const capped = memory.processToolResult(tc.name, tc.arguments, cached);
|
|
229
|
+
toolMessages.push({ role: 'user', content: `[Tool result: ${tc.name}]\n${capped}` });
|
|
230
|
+
tracker.record(tc.name, tc.arguments, false);
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
setStreamingText(ansi(ANSI.dimCyan, `▸ ${tc.name}(${Object.entries(tc.arguments).map(([k, v]) => `${k}=${JSON.stringify(v)}`).join(', ')})`));
|
|
234
|
+
let toolOutput;
|
|
235
|
+
let wasError = false;
|
|
236
|
+
try {
|
|
237
|
+
toolOutput = await executeReadOnlyTool(tc.name, tc.arguments, workspaceRoot);
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
toolOutput = `Tool error: ${err instanceof Error ? err.message : String(err)}`;
|
|
241
|
+
wasError = true;
|
|
242
|
+
}
|
|
243
|
+
if (!wasError)
|
|
244
|
+
cache.set(tc.name, tc.arguments, toolOutput);
|
|
245
|
+
const cappedOutput = memory.processToolResult(tc.name, tc.arguments, toolOutput);
|
|
246
|
+
tracker.record(tc.name, tc.arguments, wasError);
|
|
247
|
+
toolMessages.push({ role: 'user', content: `[Tool result: ${tc.name}]\n${cappedOutput}` });
|
|
248
|
+
}
|
|
249
|
+
// Scratchpad checkpoint
|
|
250
|
+
if (memory.shouldScratchpad(round)) {
|
|
251
|
+
setStreamingText(ansi(ANSI.dimGray, '· Working memory checkpoint…'));
|
|
252
|
+
toolMessages.push(memory.scratchpadPrompt());
|
|
253
|
+
}
|
|
254
|
+
// Inject correction hints if stuck
|
|
255
|
+
const hint = tracker.getCorrectionHint();
|
|
256
|
+
if (hint) {
|
|
257
|
+
setStreamingText(ansi(ANSI.dimGray, '· Adjusting search strategy…'));
|
|
258
|
+
toolMessages.push({ role: 'user', content: hint });
|
|
259
|
+
}
|
|
260
|
+
conversationRef.current = toolMessages;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Tool loop error is non-fatal; proceed with streaming
|
|
265
|
+
}
|
|
266
|
+
setStreamingText('');
|
|
267
|
+
}
|
|
268
|
+
// Use the same system prompt for streaming as the tool-gathering phase
|
|
269
|
+
const effectiveSystemPrompt = agentSystemPrompt ?? profile?.systemPrompt;
|
|
98
270
|
let fullResponse = '';
|
|
99
271
|
let interrupted = false;
|
|
100
272
|
try {
|
|
@@ -103,7 +275,7 @@ function ChatApp({ provider, config, sessionId, initialMessages, }) {
|
|
|
103
275
|
model: profile?.model,
|
|
104
276
|
temperature: profile?.temperature,
|
|
105
277
|
maxTokens: profile?.maxTokens,
|
|
106
|
-
systemPrompt:
|
|
278
|
+
systemPrompt: effectiveSystemPrompt,
|
|
107
279
|
});
|
|
108
280
|
for await (const chunk of stream) {
|
|
109
281
|
if (abortController.signal.aborted) {
|
package/dist/ui/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/ui/chat.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/ui/chat.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/logo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../../src/ui/logo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../../src/ui/logo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuFH,iEAAiE;AACjE,eAAO,MAAM,UAAU,QAAe,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,UAAQ,GAAG,IAAI,CAG/C"}
|
package/dist/ui/logo.js
CHANGED
|
@@ -46,8 +46,12 @@ function buildPlain() {
|
|
|
46
46
|
].join('\n');
|
|
47
47
|
}
|
|
48
48
|
// ── Build coloured box (synchronous ANSI, no chalk needed) ──────────────────
|
|
49
|
+
// Strip ANSI escape codes to get the visible (printable) length of a string.
|
|
50
|
+
const visibleLength = (s) =>
|
|
51
|
+
// eslint-disable-next-line no-control-regex
|
|
52
|
+
s.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
49
53
|
function buildColored() {
|
|
50
|
-
const pad = (s) => s + ' '.repeat(innerWidth - 2 - s
|
|
54
|
+
const pad = (s) => s + ' '.repeat(Math.max(0, innerWidth - 2 - visibleLength(s)));
|
|
51
55
|
const blank = ansi(A.dim, `│${' '.repeat(innerWidth)}│`);
|
|
52
56
|
const boxLine = (middle) => ansi(A.dim, '│ ') + middle + ansi(A.dim, ' │');
|
|
53
57
|
const letterLines = LETTERS.map(l => boxLine(pad(ansi(A.bold + A.gold, l))));
|
package/dist/ui/logo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/ui/logo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gFAAgF;AAEhF,MAAM,OAAO,GAAG;IACd,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;CAChC,CAAC;AAEF,MAAM,OAAO,GAAG,0BAA0B,CAAC;AAC3C,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,sCAAsC;AAErD,+EAA+E;AAE/E,MAAM,CAAC,GAAG;IACR,KAAK,EAAI,SAAS;IAClB,GAAG,EAAM,SAAS;IAClB,IAAI,EAAK,SAAS;IAClB,IAAI,EAAK,sBAAsB,EAAI,UAAU;IAC7C,KAAK,EAAI,wBAAwB,EAAE,OAAO;CAClC,CAAC;AAEX,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY;IACtC,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,iFAAiF;AAEjF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7E,MAAM,UAAU,GAAK,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5C,MAAM,EAAE,GAAa,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5C,MAAM,MAAM,GAAS,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEjF,gFAAgF;AAEhF,SAAS,UAAU;IACjB,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;IAChE,MAAM,KAAK,GAAI,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;IAE7C,OAAO;QACL,IAAI,EAAE,GAAG;QACT,KAAK;QACL,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QACtB,KAAK;QACL,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;QAC7B,KAAK;QACL,IAAI,EAAE,GAAG;KACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,+EAA+E;AAE/E,SAAS,YAAY;IACnB,MAAM,GAAG,GAAK,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/ui/logo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared agentic-loop intelligence for `jam ask`, `jam chat`, and `jam run`.
|
|
3
|
+
*
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - Search planner (separate LLM reasoning step before tool use)
|
|
6
|
+
* - ReAct-style system prompt builder (with JAM.md / workspace context)
|
|
7
|
+
* - Query/prompt enrichment with plan-driven search guidance
|
|
8
|
+
* - Tool-call loop detection, duplicate skipping, and correction hints
|
|
9
|
+
* - Answer self-validation (JSON detection, too-short, empty, off-topic)
|
|
10
|
+
* - Synthesis grounding (reminds model of original question before answering)
|
|
11
|
+
*
|
|
12
|
+
* Individual commands wire these into their own UI layer (stdout streaming,
|
|
13
|
+
* Ink TUI, or plain stderr).
|
|
14
|
+
*/
|
|
15
|
+
import type { ProviderAdapter } from '../providers/base.js';
|
|
16
|
+
export declare const ANSI: {
|
|
17
|
+
readonly reset: "\u001B[0m";
|
|
18
|
+
readonly dim: "\u001B[2m";
|
|
19
|
+
readonly bold: "\u001B[1m";
|
|
20
|
+
readonly italic: "\u001B[3m";
|
|
21
|
+
readonly cyan: "\u001B[36m";
|
|
22
|
+
readonly yellow: "\u001B[33m";
|
|
23
|
+
readonly green: "\u001B[32m";
|
|
24
|
+
readonly magenta: "\u001B[35m";
|
|
25
|
+
readonly gray: "\u001B[90m";
|
|
26
|
+
readonly white: "\u001B[37m";
|
|
27
|
+
readonly blue: "\u001B[34m";
|
|
28
|
+
readonly red: "\u001B[31m";
|
|
29
|
+
readonly dimBlue: "\u001B[2m\u001B[34m";
|
|
30
|
+
readonly dimCyan: "\u001B[2m\u001B[36m";
|
|
31
|
+
readonly dimGreen: "\u001B[2m\u001B[32m";
|
|
32
|
+
readonly dimYellow: "\u001B[2m\u001B[33m";
|
|
33
|
+
readonly dimMagenta: "\u001B[2m\u001B[35m";
|
|
34
|
+
readonly dimGray: "\u001B[2m\u001B[90m";
|
|
35
|
+
};
|
|
36
|
+
export declare function ansi(code: string, text: string): string;
|
|
37
|
+
/** Build a concise workspace overview for the system prompt. */
|
|
38
|
+
export declare function buildWorkspaceContext(workspaceRoot: string): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Load JAM.md if present, otherwise fall back to auto-detected workspace context.
|
|
41
|
+
*/
|
|
42
|
+
export declare function loadProjectContext(workspaceRoot: string): Promise<{
|
|
43
|
+
jamContext: string | null;
|
|
44
|
+
workspaceCtx: string;
|
|
45
|
+
}>;
|
|
46
|
+
export interface SystemPromptOptions {
|
|
47
|
+
/** 'readonly' for ask/chat, 'readwrite' for run */
|
|
48
|
+
mode: 'readonly' | 'readwrite';
|
|
49
|
+
/** Workspace root path (for run command context) */
|
|
50
|
+
workspaceRoot?: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Build a ReAct-style system prompt with project context.
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildSystemPrompt(jamContext: string | null, workspaceCtx: string, options?: SystemPromptOptions): string;
|
|
56
|
+
/**
|
|
57
|
+
* Generate a search plan by asking the model to reason about what to search for.
|
|
58
|
+
* This is a separate LLM call (no tools) that produces a focused plan
|
|
59
|
+
* for the agentic tool loop.
|
|
60
|
+
*
|
|
61
|
+
* Returns the plan text, or null if planning fails.
|
|
62
|
+
*/
|
|
63
|
+
export declare function generateSearchPlan(provider: ProviderAdapter, question: string, projectContext: string, options: {
|
|
64
|
+
model?: string;
|
|
65
|
+
temperature?: number;
|
|
66
|
+
maxTokens?: number;
|
|
67
|
+
}): Promise<string | null>;
|
|
68
|
+
/**
|
|
69
|
+
* Enrich the user's prompt with search strategy guidance.
|
|
70
|
+
* If a search plan is provided, integrates it for focused searching.
|
|
71
|
+
* Otherwise falls back to generic search guidance.
|
|
72
|
+
*/
|
|
73
|
+
export declare function enrichUserPrompt(prompt: string, searchPlan?: string | null): string;
|
|
74
|
+
/**
|
|
75
|
+
* Build a synthesis reminder that grounds the model back to the original question.
|
|
76
|
+
* Injected as a user message when the model is about to give its final answer
|
|
77
|
+
* (i.e., returns no tool calls after gathering context).
|
|
78
|
+
*/
|
|
79
|
+
export declare function buildSynthesisReminder(originalQuestion: string): string;
|
|
80
|
+
export declare class ToolCallTracker {
|
|
81
|
+
private history;
|
|
82
|
+
private errorCount;
|
|
83
|
+
record(name: string, args: Record<string, unknown>, wasError: boolean): void;
|
|
84
|
+
/** Detect if a call was already made (exact duplicate). */
|
|
85
|
+
isDuplicate(name: string, args: Record<string, unknown>): boolean;
|
|
86
|
+
/** Build a correction hint if the model is stuck. */
|
|
87
|
+
getCorrectionHint(): string | null;
|
|
88
|
+
get totalCalls(): number;
|
|
89
|
+
/** Reset for a new turn (useful in multi-turn chat). */
|
|
90
|
+
reset(): void;
|
|
91
|
+
}
|
|
92
|
+
export interface ValidationResult {
|
|
93
|
+
valid: boolean;
|
|
94
|
+
reason?: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if the model's final answer looks acceptable.
|
|
98
|
+
* Returns { valid: false, reason } if it looks like garbage.
|
|
99
|
+
*
|
|
100
|
+
* @param text The model's answer text
|
|
101
|
+
* @param hadToolCalls Whether the model used tools (stricter validation if so)
|
|
102
|
+
* @param originalQuestion Optional: the user's original question for relevance checking
|
|
103
|
+
*/
|
|
104
|
+
export declare function validateAnswer(text: string, hadToolCalls: boolean, originalQuestion?: string): ValidationResult;
|
|
105
|
+
/**
|
|
106
|
+
* Build a correction message to inject when the answer is invalid.
|
|
107
|
+
*/
|
|
108
|
+
export declare function buildCorrectionMessage(reason: string): string;
|
|
109
|
+
/**
|
|
110
|
+
* Format the search plan text as a visually distinct block.
|
|
111
|
+
* Uses dim blue with a left-border character (│) to set it apart from tool output.
|
|
112
|
+
*/
|
|
113
|
+
export declare function formatPlanBlock(planText: string, noColor: boolean): string;
|
|
114
|
+
/** Format an internal status message (compaction, critic, scratchpad, etc). Very dim. */
|
|
115
|
+
export declare function formatInternalStatus(message: string, noColor: boolean): string;
|
|
116
|
+
/** Format a tool call for display — dim cyan to stay visually secondary. */
|
|
117
|
+
export declare function formatToolCall(name: string, args: Record<string, unknown>, noColor: boolean): string;
|
|
118
|
+
/** Format a tool result summary for display — very dim, background-level. */
|
|
119
|
+
export declare function formatToolResult(output: string, noColor: boolean): string;
|
|
120
|
+
/** Print a section separator — bold accent to clearly demarcate phases. */
|
|
121
|
+
export declare function formatSeparator(label: string, noColor: boolean): string;
|
|
122
|
+
/** Format a duplicate skip message — dim red. */
|
|
123
|
+
export declare function formatDuplicateSkip(name: string, noColor: boolean): string;
|
|
124
|
+
/** Format a retry/validation message — dim yellow, secondary prominence. */
|
|
125
|
+
export declare function formatRetry(message: string, noColor: boolean): string;
|
|
126
|
+
/** Format a correction hint injection message. */
|
|
127
|
+
export declare function formatHintInjection(noColor: boolean): string;
|
|
128
|
+
/** Format usage stats — small dim footer. */
|
|
129
|
+
export declare function formatUsage(promptTokens: number, completionTokens: number, totalTokens: number, noColor: boolean): string;
|
|
130
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/utils/agent.ts"],"names":[],"mappings":"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"}
|