@gaunt-sloth/core 2.0.0-alpha.26 → 2.0.0-alpha.27
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/dist/config/schema.js +64 -15
- package/dist/config/schema.js.map +1 -1
- package/dist/config/types.d.ts +17 -8
- package/dist/config/types.js.map +1 -1
- package/dist/constants.d.ts +7 -4
- package/dist/constants.js +7 -4
- package/dist/constants.js.map +1 -1
- package/dist/core/GthAgentRunner.d.ts +10 -4
- package/dist/core/GthAgentRunner.js +24 -7
- package/dist/core/GthAgentRunner.js.map +1 -1
- package/dist/core/GthLangChainAgent.js +16 -11
- package/dist/core/GthLangChainAgent.js.map +1 -1
- package/dist/core/launchBanner.js +36 -17
- package/dist/core/launchBanner.js.map +1 -1
- package/dist/core/shell/abstention.d.ts +88 -0
- package/dist/core/shell/abstention.js +184 -0
- package/dist/core/shell/abstention.js.map +1 -0
- package/dist/core/shell/openWorld.d.ts +137 -12
- package/dist/core/shell/openWorld.js +677 -12
- package/dist/core/shell/openWorld.js.map +1 -1
- package/dist/core/shell/rater.d.ts +68 -38
- package/dist/core/shell/rater.js +105 -61
- package/dist/core/shell/rater.js.map +1 -1
- package/dist/core/shell/rejection.d.ts +7 -4
- package/dist/core/shell/rejection.js +3 -3
- package/dist/core/shell/rejection.js.map +1 -1
- package/dist/core/toolDisplay.d.ts +12 -3
- package/dist/core/toolDisplay.js +27 -7
- package/dist/core/toolDisplay.js.map +1 -1
- package/dist/utils/displayWidth.d.ts +30 -0
- package/dist/utils/displayWidth.js +140 -0
- package/dist/utils/displayWidth.js.map +1 -0
- package/dist/utils/systemPromptNotes.d.ts +28 -8
- package/dist/utils/systemPromptNotes.js +47 -49
- package/dist/utils/systemPromptNotes.js.map +1 -1
- package/dist/utils/untrustedText.d.ts +66 -0
- package/dist/utils/untrustedText.js +80 -0
- package/dist/utils/untrustedText.js.map +1 -0
- package/package.json +2 -1
- package/schema/gsloth-config.schema.json +3 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** The three moves §7 requires
|
|
1
|
+
/** The three moves §7 requires a JUDGED rejection to name. */
|
|
2
2
|
export const REJECTION_MOVES = 'You may call the same command with a justification, call a different command, or ask the user ' +
|
|
3
3
|
'if there is no way around it.';
|
|
4
4
|
/**
|
|
@@ -10,9 +10,9 @@ export function buildGrantedAlternativeClause(toolName) {
|
|
|
10
10
|
return `\`${toolName}\` does this and is already approved at this level, so it will not interrupt the user.`;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Build the
|
|
13
|
+
* Build the rejection message handed back to the model as the refused call's tool result.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
15
|
+
* §7 shape, each part omitted when it does not apply:
|
|
16
16
|
* 1. who refused what;
|
|
17
17
|
* 2. the rater's explanation, when a rating exists;
|
|
18
18
|
* 3. the three moves — always;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rejection.js","sourceRoot":"","sources":["../../../src/core/shell/rejection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rejection.js","sourceRoot":"","sources":["../../../src/core/shell/rejection.ts"],"names":[],"mappings":"AAuCA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAC1B,gGAAgG;IAChG,+BAA+B,CAAC;AAElC;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAAgB;IAC5D,OAAO,KAAK,QAAQ,wFAAwF,CAAC;AAC/G,CAAC;AAiBD;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgC;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IACtF,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,OAAO;QACxB,CAAC,CAAC,2BAA2B,MAAM,GAAG;QACtC,CAAC,CAAC,qBAAqB,MAAM,GAAG,CAAC;IAErC,MAAM,KAAK,GAAa,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACzD,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
/** The single canonical output-preview cap (lines). No other preview length exists anywhere. */
|
|
2
2
|
export declare const TOOL_OUTPUT_PREVIEW_LINES = 10;
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Per-line cap for preview lines, in terminal COLUMNS (a one-line minified bundle must not flood a
|
|
5
|
+
* row). The `CHARS` in the name is historical; every cap here is a column budget, because a
|
|
6
|
+
* character count is not a width — see `#src/utils/displayWidth.js`.
|
|
7
|
+
*/
|
|
4
8
|
export declare const TOOL_PREVIEW_LINE_MAX_CHARS = 200;
|
|
5
|
-
/** Per-value
|
|
9
|
+
/** Per-value cap inside a params summary, in terminal COLUMNS. */
|
|
6
10
|
export declare const TOOL_PARAM_VALUE_MAX_CHARS = 48;
|
|
7
|
-
/** Whole params-summary
|
|
11
|
+
/** Whole params-summary cap (everything inside the parentheses), in terminal COLUMNS. */
|
|
8
12
|
export declare const TOOL_SUMMARY_MAX_CHARS = 120;
|
|
9
13
|
/** The overflow/truncation marker used everywhere in this module. */
|
|
10
14
|
export declare const ELLIPSIS = "\u2026";
|
|
15
|
+
/**
|
|
16
|
+
* Columns {@link ELLIPSIS} itself occupies, which every truncator has to reserve out of its budget
|
|
17
|
+
* before slicing. Derived rather than written as `1` so it stays true of whatever marker is used.
|
|
18
|
+
*/
|
|
19
|
+
export declare const ELLIPSIS_WIDTH: number;
|
|
11
20
|
/**
|
|
12
21
|
* Style tag for one rendered line. The two surfaces map these to their own colour systems
|
|
13
22
|
* (Ink `<Text>` props / raw ANSI): `dim` = greyed preview text, `added`/`removed` = diff
|
package/dist/core/toolDisplay.js
CHANGED
|
@@ -27,18 +27,28 @@
|
|
|
27
27
|
* (added = `added` style/green, removed = `removed` style/red); monochrome keeps the `+`/`-`
|
|
28
28
|
* prefixes so the diff still reads without colour (DL-7 graceful degradation).
|
|
29
29
|
*/
|
|
30
|
+
import { displayWidth, sliceToWidth } from '#src/utils/displayWidth.js';
|
|
30
31
|
import { collectSecretValues, redactText } from '#src/utils/redactSecrets.js';
|
|
31
32
|
import { env } from '#src/utils/systemUtils.js';
|
|
32
33
|
/** The single canonical output-preview cap (lines). No other preview length exists anywhere. */
|
|
33
34
|
export const TOOL_OUTPUT_PREVIEW_LINES = 10;
|
|
34
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Per-line cap for preview lines, in terminal COLUMNS (a one-line minified bundle must not flood a
|
|
37
|
+
* row). The `CHARS` in the name is historical; every cap here is a column budget, because a
|
|
38
|
+
* character count is not a width — see `#src/utils/displayWidth.js`.
|
|
39
|
+
*/
|
|
35
40
|
export const TOOL_PREVIEW_LINE_MAX_CHARS = 200;
|
|
36
|
-
/** Per-value
|
|
41
|
+
/** Per-value cap inside a params summary, in terminal COLUMNS. */
|
|
37
42
|
export const TOOL_PARAM_VALUE_MAX_CHARS = 48;
|
|
38
|
-
/** Whole params-summary
|
|
43
|
+
/** Whole params-summary cap (everything inside the parentheses), in terminal COLUMNS. */
|
|
39
44
|
export const TOOL_SUMMARY_MAX_CHARS = 120;
|
|
40
45
|
/** The overflow/truncation marker used everywhere in this module. */
|
|
41
46
|
export const ELLIPSIS = '…';
|
|
47
|
+
/**
|
|
48
|
+
* Columns {@link ELLIPSIS} itself occupies, which every truncator has to reserve out of its budget
|
|
49
|
+
* before slicing. Derived rather than written as `1` so it stays true of whatever marker is used.
|
|
50
|
+
*/
|
|
51
|
+
export const ELLIPSIS_WIDTH = displayWidth(ELLIPSIS);
|
|
42
52
|
const FALLBACK_GLYPH = '⚙';
|
|
43
53
|
const FILE_GLYPH = '📁';
|
|
44
54
|
const SHELL_GLYPH = '🔧';
|
|
@@ -109,12 +119,22 @@ export function resetToolDisplaySecretsCacheForTests() {
|
|
|
109
119
|
function inline(value) {
|
|
110
120
|
return value.replace(/\s+/g, ' ').trim();
|
|
111
121
|
}
|
|
112
|
-
/**
|
|
122
|
+
/**
|
|
123
|
+
* Truncate to `max` terminal COLUMNS with the {@link ELLIPSIS} marker, reserving the marker's own
|
|
124
|
+
* width out of the budget. Slicing goes through the shared width primitive: a code-point count
|
|
125
|
+
* would read a CJK or emoji value as shorter than it renders and hand it back whole, over-running
|
|
126
|
+
* the row it is drawn on.
|
|
127
|
+
*
|
|
128
|
+
* Whether the value fits is put to the SLICE rather than to the ruler, because the slice stops at
|
|
129
|
+
* the budget: a value that over-runs is recognised from its first `max` columns, where measuring
|
|
130
|
+
* it reads all of it — and the values arriving here are whole tool-output lines, which
|
|
131
|
+
* {@link TOOL_PREVIEW_LINE_MAX_CHARS} exists precisely because they can be a megabyte long.
|
|
132
|
+
*/
|
|
113
133
|
function truncate(value, max) {
|
|
114
|
-
const
|
|
115
|
-
if (
|
|
134
|
+
const fitted = sliceToWidth(value, max);
|
|
135
|
+
if (fitted === value)
|
|
116
136
|
return value;
|
|
117
|
-
return
|
|
137
|
+
return sliceToWidth(value, max - ELLIPSIS_WIDTH) + ELLIPSIS;
|
|
118
138
|
}
|
|
119
139
|
/**
|
|
120
140
|
* Render one arg value for the summary: strings inline+truncated, the rest JSON-ish.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolDisplay.js","sourceRoot":"","sources":["../../src/core/toolDisplay.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolDisplay.js","sourceRoot":"","sources":["../../src/core/toolDisplay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal columns `text` occupies. Zero-width clusters (combining marks, default-ignorables)
|
|
3
|
+
* count 0, wide clusters (CJK, emoji, fullwidth forms) count 2, everything else 1. ANSI escape
|
|
4
|
+
* sequences are not counted, so a pre-coloured string measures as what the user sees — but the
|
|
5
|
+
* slices below do not share that awareness, so do not read this as a licence to feed them one.
|
|
6
|
+
*/
|
|
7
|
+
export declare function displayWidth(text: string): number;
|
|
8
|
+
/**
|
|
9
|
+
* The longest LEADING run of whole clusters whose total width is at most `maxWidth` — i.e. keep
|
|
10
|
+
* the head, lose the tail. Total (never throws): a non-positive `maxWidth` yields `''`.
|
|
11
|
+
*
|
|
12
|
+
* A cluster is kept only if it fits ENTIRELY, so the result can come back one column short of
|
|
13
|
+
* `maxWidth` when the next cluster is two columns wide. That is the point: half a wide glyph
|
|
14
|
+
* cannot be drawn, and spending the column anyway is how text over-runs its budget.
|
|
15
|
+
*
|
|
16
|
+
* The clusters are produced one at a time and the walk stops at the budget, so the cost is the
|
|
17
|
+
* length of the RESULT rather than the length of the input — the input here is a whole tool-output
|
|
18
|
+
* line, which is unbounded.
|
|
19
|
+
*/
|
|
20
|
+
export declare function sliceToWidth(text: string, maxWidth: number): string;
|
|
21
|
+
/**
|
|
22
|
+
* The longest TRAILING run of whole clusters whose total width is at most `maxWidth` — i.e. keep
|
|
23
|
+
* the tail, lose the head. The mirror of {@link sliceToWidth}, for values whose end is the
|
|
24
|
+
* informative part (a path's leaf directory).
|
|
25
|
+
*
|
|
26
|
+
* This one materialises the clusters: it walks backwards, and cluster boundaries are only
|
|
27
|
+
* derivable from the front. Its callers pass a path or a model id, so the input is a line rather
|
|
28
|
+
* than a file.
|
|
29
|
+
*/
|
|
30
|
+
export declare function sliceEndToWidth(text: string, maxWidth: number): string;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module displayWidth
|
|
3
|
+
* The one place this repo answers "how many terminal COLUMNS does this string occupy, and where
|
|
4
|
+
* may I cut it". Everything that fits text to a terminal — the launch banner's field budgets, the
|
|
5
|
+
* tool-display caps — measures and slices through here.
|
|
6
|
+
*
|
|
7
|
+
* ## Why a code-point count is not a width
|
|
8
|
+
*
|
|
9
|
+
* `[...text].length` counts code points, which is right for UTF-16 safety and wrong for layout: a
|
|
10
|
+
* CJK ideograph or an emoji is ONE code point occupying TWO columns. Text measured that way reads
|
|
11
|
+
* as shorter than it renders, escapes whatever budget it was given, and wraps — and a wrapped
|
|
12
|
+
* continuation line starts back at column 0, which is precisely the failure the budgets exist to
|
|
13
|
+
* prevent. So the rule is: a value destined for a fixed column budget is measured with
|
|
14
|
+
* {@link displayWidth} and cut with {@link sliceToWidth} / {@link sliceEndToWidth}, never with
|
|
15
|
+
* `.length`, a spread, or `String.prototype.slice`.
|
|
16
|
+
*
|
|
17
|
+
* ## Why grapheme clusters are the cutting unit
|
|
18
|
+
*
|
|
19
|
+
* Slicing by code point is safe against halving a surrogate pair but not against halving a
|
|
20
|
+
* CLUSTER: a flag, a skin-toned or ZWJ-joined emoji, or a base letter plus its combining mark are
|
|
21
|
+
* several code points that a terminal draws as one glyph, and cutting between them produces
|
|
22
|
+
* mojibake or an orphaned mark. `Intl.Segmenter` gives the same cluster boundaries the width
|
|
23
|
+
* rules below are defined over, so the two agree by construction and a sliced string's width is
|
|
24
|
+
* exactly the sum of the widths of the clusters kept.
|
|
25
|
+
*
|
|
26
|
+
* ## What the slices expect: PLAIN text
|
|
27
|
+
*
|
|
28
|
+
* {@link displayWidth} is ANSI-aware and the slices are NOT, and that asymmetry is a contract
|
|
29
|
+
* rather than an oversight. An escape sequence is not one cluster — the terminal swallows it
|
|
30
|
+
* whole, but `ESC`, `[`, `3`, `5`, `m` segment as five, four of them printable — so the two
|
|
31
|
+
* disagree on an escape-bearing string and a slice can both under-fill its budget and cut inside
|
|
32
|
+
* a sequence. Feed the slices the text a user will read, and colour it afterwards; that is what
|
|
33
|
+
* every caller here does, since both render surfaces map a style tag to their own escapes at the
|
|
34
|
+
* very end. Making the slices ANSI-aware would change what a coloured preview line renders as,
|
|
35
|
+
* which is a decision for whoever needs it and not a silent detail of this module.
|
|
36
|
+
*
|
|
37
|
+
* That asymmetry is also why a slice decides "does the whole string fit?" two different ways. For
|
|
38
|
+
* plain text the cluster walk decides it: the widths of the clusters sum to the width of the
|
|
39
|
+
* string, so walking until the budget is blown answers the question and answers it WITHOUT
|
|
40
|
+
* touching the rest of the input — which is what keeps a megabyte-long preview line from being
|
|
41
|
+
* measured end to end before it is cut at column 200. Only escape-bearing text is measured whole
|
|
42
|
+
* first, because there the two rulers disagree and a coloured string that MEASURES as fitting must
|
|
43
|
+
* be handed back whole rather than cut short by the bytes of its own escapes.
|
|
44
|
+
*
|
|
45
|
+
* ## Why ambiguous-width characters stay NARROW
|
|
46
|
+
*
|
|
47
|
+
* `string-width` defaults to treating East-Asian "Ambiguous" characters as one column, and that
|
|
48
|
+
* default is load-bearing here rather than incidental: the sloth face is block elements, the
|
|
49
|
+
* wordmark is box-drawing, and `…` is U+2026 — all Ambiguous. Counting them as two columns would
|
|
50
|
+
* measure the 16-column face at 32 and shatter the layout it anchors. Do not pass
|
|
51
|
+
* `ambiguousIsNarrow: false`; the specs pin the face at 16 and the wordmark at 19 so a change of
|
|
52
|
+
* that policy fails loudly instead of quietly doubling the art.
|
|
53
|
+
*/
|
|
54
|
+
import stringWidth from 'string-width';
|
|
55
|
+
/**
|
|
56
|
+
* Grapheme-cluster boundaries, i.e. what a terminal draws as one glyph. Built once: constructing
|
|
57
|
+
* an `Intl.Segmenter` is expensive relative to the short strings this module handles.
|
|
58
|
+
*/
|
|
59
|
+
const GRAPHEME_SEGMENTER = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
60
|
+
/**
|
|
61
|
+
* Terminal columns `text` occupies. Zero-width clusters (combining marks, default-ignorables)
|
|
62
|
+
* count 0, wide clusters (CJK, emoji, fullwidth forms) count 2, everything else 1. ANSI escape
|
|
63
|
+
* sequences are not counted, so a pre-coloured string measures as what the user sees — but the
|
|
64
|
+
* slices below do not share that awareness, so do not read this as a licence to feed them one.
|
|
65
|
+
*/
|
|
66
|
+
export function displayWidth(text) {
|
|
67
|
+
return stringWidth(text);
|
|
68
|
+
}
|
|
69
|
+
/** The clusters of `text`, in order — the only unit either slice is allowed to cut between. */
|
|
70
|
+
function clusters(text) {
|
|
71
|
+
const out = [];
|
|
72
|
+
for (const { segment } of GRAPHEME_SEGMENTER.segment(text))
|
|
73
|
+
out.push(segment);
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Whether the whole-string measurement is the only ruler that can answer "does this fit" for
|
|
78
|
+
* `text` — true exactly when it carries an escape introducer (`ESC`, or the one-byte `CSI`), the
|
|
79
|
+
* two characters `string-width` itself strips on. On anything else the cluster widths sum to the
|
|
80
|
+
* whole-string width, so the walk decides the same question incrementally and a pre-measurement
|
|
81
|
+
* would be a second full pass over the input for nothing.
|
|
82
|
+
*/
|
|
83
|
+
function needsWholeStringMeasure(text) {
|
|
84
|
+
return text.includes('\u001B') || text.includes('\u009B');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The longest LEADING run of whole clusters whose total width is at most `maxWidth` — i.e. keep
|
|
88
|
+
* the head, lose the tail. Total (never throws): a non-positive `maxWidth` yields `''`.
|
|
89
|
+
*
|
|
90
|
+
* A cluster is kept only if it fits ENTIRELY, so the result can come back one column short of
|
|
91
|
+
* `maxWidth` when the next cluster is two columns wide. That is the point: half a wide glyph
|
|
92
|
+
* cannot be drawn, and spending the column anyway is how text over-runs its budget.
|
|
93
|
+
*
|
|
94
|
+
* The clusters are produced one at a time and the walk stops at the budget, so the cost is the
|
|
95
|
+
* length of the RESULT rather than the length of the input — the input here is a whole tool-output
|
|
96
|
+
* line, which is unbounded.
|
|
97
|
+
*/
|
|
98
|
+
export function sliceToWidth(text, maxWidth) {
|
|
99
|
+
if (maxWidth <= 0)
|
|
100
|
+
return '';
|
|
101
|
+
if (needsWholeStringMeasure(text) && displayWidth(text) <= maxWidth)
|
|
102
|
+
return text;
|
|
103
|
+
let width = 0;
|
|
104
|
+
let kept = '';
|
|
105
|
+
for (const { segment } of GRAPHEME_SEGMENTER.segment(text)) {
|
|
106
|
+
const clusterWidth = displayWidth(segment);
|
|
107
|
+
if (width + clusterWidth > maxWidth)
|
|
108
|
+
break;
|
|
109
|
+
width += clusterWidth;
|
|
110
|
+
kept += segment;
|
|
111
|
+
}
|
|
112
|
+
return kept;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The longest TRAILING run of whole clusters whose total width is at most `maxWidth` — i.e. keep
|
|
116
|
+
* the tail, lose the head. The mirror of {@link sliceToWidth}, for values whose end is the
|
|
117
|
+
* informative part (a path's leaf directory).
|
|
118
|
+
*
|
|
119
|
+
* This one materialises the clusters: it walks backwards, and cluster boundaries are only
|
|
120
|
+
* derivable from the front. Its callers pass a path or a model id, so the input is a line rather
|
|
121
|
+
* than a file.
|
|
122
|
+
*/
|
|
123
|
+
export function sliceEndToWidth(text, maxWidth) {
|
|
124
|
+
if (maxWidth <= 0)
|
|
125
|
+
return '';
|
|
126
|
+
if (needsWholeStringMeasure(text) && displayWidth(text) <= maxWidth)
|
|
127
|
+
return text;
|
|
128
|
+
const all = clusters(text);
|
|
129
|
+
let width = 0;
|
|
130
|
+
let kept = '';
|
|
131
|
+
for (let index = all.length - 1; index >= 0; index--) {
|
|
132
|
+
const clusterWidth = displayWidth(all[index]);
|
|
133
|
+
if (width + clusterWidth > maxWidth)
|
|
134
|
+
break;
|
|
135
|
+
width += clusterWidth;
|
|
136
|
+
kept = all[index] + kept;
|
|
137
|
+
}
|
|
138
|
+
return kept;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=displayWidth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displayWidth.js","sourceRoot":"","sources":["../../src/utils/displayWidth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC;;;GAGG;AACH,MAAM,kBAAkB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAEtF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,+FAA+F;AAC/F,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9E,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAgB;IACzD,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7B,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,KAAK,GAAG,YAAY,GAAG,QAAQ;YAAE,MAAM;QAC3C,KAAK,IAAI,YAAY,CAAC;QACtB,IAAI,IAAI,OAAO,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAC5D,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7B,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjF,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,YAAY,GAAG,QAAQ;YAAE,MAAM;QAC3C,KAAK,IAAI,YAAY,CAAC;QACtB,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -61,26 +61,46 @@ export interface CommitCoAuthor {
|
|
|
61
61
|
email?: string;
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* GS2-35: append the commit
|
|
64
|
+
* GS2-35/EXT-83: append the commit-writing rules to the composed code-mode system prompt.
|
|
65
65
|
*
|
|
66
66
|
* Gaunt Sloth has **no dedicated git-commit tool** — the agent commits by calling
|
|
67
|
-
* `run_shell_command` with `git commit`, composing the message (including any trailer) itself.
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* the
|
|
67
|
+
* `run_shell_command` with `git commit`, composing the message (including any trailer) itself. That
|
|
68
|
+
* leaves two things it must be told, and both live here because both are about committing:
|
|
69
|
+
*
|
|
70
|
+
* 1. **WHO the co-author is.** Left unguided, models emit their own model name from trained habit,
|
|
71
|
+
* which is factually wrong: the commit was produced by *Gaunt Sloth*, not by the model. The note
|
|
72
|
+
* states the exact trailer to emit. EXT-83 — rather than enumerate model names not to write (a
|
|
73
|
+
* denylist is stale the day a new vendor ships, and an enumeration beside a catch-all teaches the
|
|
74
|
+
* model that the list is the rule), the correct name is SUPPLIED: the resolved
|
|
75
|
+
* {@link ResolvedModelIdentity} decorates the DEFAULT name as `Gaunt Sloth (provider:model)`, so
|
|
76
|
+
* the real model is named while the authorship stays Gaunt Sloth's.
|
|
77
|
+
* 2. **HOW the message reaches git.** A commit message passed inline in a double-quoted shell
|
|
78
|
+
* argument is EXPANDED BY THE SHELL before git runs, so a message that quotes code the way
|
|
79
|
+
* ordinary technical prose does is executed as a command. The note states that mechanism rather
|
|
80
|
+
* than merely forbidding the construct — naming a construct without its mechanism has been
|
|
81
|
+
* measured not to work. A file path carries no shell metacharacters, so the file form removes the
|
|
82
|
+
* failure mode instead of asking the model to avoid it.
|
|
83
|
+
*
|
|
84
|
+
* The note's prose carries **no backtick and no other markup** — including no angle-bracket
|
|
85
|
+
* placeholder: it is the one piece of guidance whose subject is how to write a commit message, so
|
|
86
|
+
* quoting its own examples in backticks would demonstrate the exact style rule 2 exists to stop, and
|
|
87
|
+
* an angle-bracket placeholder copied literally is itself a shell input redirect. The `<email>` of
|
|
88
|
+
* the trailer line is the exception the RFC form requires, and is scoped out of the scan.
|
|
72
89
|
*
|
|
73
90
|
* The identity is config-driven (`commit.coAuthor` in {@link import('#src/config/types.js').GthConfig}).
|
|
74
91
|
* Each field falls back INDEPENDENTLY to the Gaunt Sloth account
|
|
75
92
|
* ({@link DEFAULT_COMMIT_CO_AUTHOR_NAME} / {@link DEFAULT_COMMIT_CO_AUTHOR_EMAIL}) — so a partial
|
|
76
93
|
* override (name only, or a config that bypassed the loader) still yields a complete trailer, and a
|
|
77
|
-
* fully-absent config yields the default account. Blank/whitespace values are treated as unset.
|
|
94
|
+
* fully-absent config yields the default account. Blank/whitespace values are treated as unset. An
|
|
95
|
+
* EXPLICITLY CONFIGURED name is emitted verbatim, with no identity spliced in — the user asked for
|
|
96
|
+
* that string; the identity decorates only the default. An unresolvable identity (`undefined`) falls
|
|
97
|
+
* back to the plain default name, never to a placeholder.
|
|
78
98
|
*
|
|
79
99
|
* Backend-agnostic: composed through the shared code path so BOTH the lean `GthLangChainAgent` and
|
|
80
100
|
* the deep `GthDeepAgent` inject it (the git-commit capability rides on `run_shell_command`, which
|
|
81
101
|
* both backends expose in code mode). Returns the note alone when there is no base prompt.
|
|
82
102
|
*/
|
|
83
|
-
export declare function appendCommitCoAuthorNote(systemPrompt: string | undefined, coAuthor?: CommitCoAuthor): string;
|
|
103
|
+
export declare function appendCommitCoAuthorNote(systemPrompt: string | undefined, coAuthor?: CommitCoAuthor, modelIdentity?: ResolvedModelIdentity): string;
|
|
84
104
|
/**
|
|
85
105
|
* GS2-34/GS2-53 — the resolved active-model identity, as a STRUCTURED value.
|
|
86
106
|
*
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* `GthDeepAgent`.
|
|
16
16
|
*/
|
|
17
17
|
import { DEFAULT_COMMIT_CO_AUTHOR_EMAIL, DEFAULT_COMMIT_CO_AUTHOR_NAME } from '#src/constants.js';
|
|
18
|
+
import { capUntrustedText, defangUntrustedDelimiters, MCP_FENCE_BEGIN, MCP_FENCE_END, } from '#src/utils/untrustedText.js';
|
|
18
19
|
/**
|
|
19
20
|
* EXT-26: the platform-agnostic tail shared by both {@link appendOsShellNote} branches.
|
|
20
21
|
*
|
|
@@ -84,34 +85,64 @@ export function appendCwdNote(systemPrompt, cwd) {
|
|
|
84
85
|
return systemPrompt ? `${systemPrompt}\n\n${cwdNote}` : cwdNote;
|
|
85
86
|
}
|
|
86
87
|
/**
|
|
87
|
-
* GS2-35: append the commit
|
|
88
|
+
* GS2-35/EXT-83: append the commit-writing rules to the composed code-mode system prompt.
|
|
88
89
|
*
|
|
89
90
|
* Gaunt Sloth has **no dedicated git-commit tool** — the agent commits by calling
|
|
90
|
-
* `run_shell_command` with `git commit`, composing the message (including any trailer) itself.
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* the
|
|
91
|
+
* `run_shell_command` with `git commit`, composing the message (including any trailer) itself. That
|
|
92
|
+
* leaves two things it must be told, and both live here because both are about committing:
|
|
93
|
+
*
|
|
94
|
+
* 1. **WHO the co-author is.** Left unguided, models emit their own model name from trained habit,
|
|
95
|
+
* which is factually wrong: the commit was produced by *Gaunt Sloth*, not by the model. The note
|
|
96
|
+
* states the exact trailer to emit. EXT-83 — rather than enumerate model names not to write (a
|
|
97
|
+
* denylist is stale the day a new vendor ships, and an enumeration beside a catch-all teaches the
|
|
98
|
+
* model that the list is the rule), the correct name is SUPPLIED: the resolved
|
|
99
|
+
* {@link ResolvedModelIdentity} decorates the DEFAULT name as `Gaunt Sloth (provider:model)`, so
|
|
100
|
+
* the real model is named while the authorship stays Gaunt Sloth's.
|
|
101
|
+
* 2. **HOW the message reaches git.** A commit message passed inline in a double-quoted shell
|
|
102
|
+
* argument is EXPANDED BY THE SHELL before git runs, so a message that quotes code the way
|
|
103
|
+
* ordinary technical prose does is executed as a command. The note states that mechanism rather
|
|
104
|
+
* than merely forbidding the construct — naming a construct without its mechanism has been
|
|
105
|
+
* measured not to work. A file path carries no shell metacharacters, so the file form removes the
|
|
106
|
+
* failure mode instead of asking the model to avoid it.
|
|
107
|
+
*
|
|
108
|
+
* The note's prose carries **no backtick and no other markup** — including no angle-bracket
|
|
109
|
+
* placeholder: it is the one piece of guidance whose subject is how to write a commit message, so
|
|
110
|
+
* quoting its own examples in backticks would demonstrate the exact style rule 2 exists to stop, and
|
|
111
|
+
* an angle-bracket placeholder copied literally is itself a shell input redirect. The `<email>` of
|
|
112
|
+
* the trailer line is the exception the RFC form requires, and is scoped out of the scan.
|
|
95
113
|
*
|
|
96
114
|
* The identity is config-driven (`commit.coAuthor` in {@link import('#src/config/types.js').GthConfig}).
|
|
97
115
|
* Each field falls back INDEPENDENTLY to the Gaunt Sloth account
|
|
98
116
|
* ({@link DEFAULT_COMMIT_CO_AUTHOR_NAME} / {@link DEFAULT_COMMIT_CO_AUTHOR_EMAIL}) — so a partial
|
|
99
117
|
* override (name only, or a config that bypassed the loader) still yields a complete trailer, and a
|
|
100
|
-
* fully-absent config yields the default account. Blank/whitespace values are treated as unset.
|
|
118
|
+
* fully-absent config yields the default account. Blank/whitespace values are treated as unset. An
|
|
119
|
+
* EXPLICITLY CONFIGURED name is emitted verbatim, with no identity spliced in — the user asked for
|
|
120
|
+
* that string; the identity decorates only the default. An unresolvable identity (`undefined`) falls
|
|
121
|
+
* back to the plain default name, never to a placeholder.
|
|
101
122
|
*
|
|
102
123
|
* Backend-agnostic: composed through the shared code path so BOTH the lean `GthLangChainAgent` and
|
|
103
124
|
* the deep `GthDeepAgent` inject it (the git-commit capability rides on `run_shell_command`, which
|
|
104
125
|
* both backends expose in code mode). Returns the note alone when there is no base prompt.
|
|
105
126
|
*/
|
|
106
|
-
export function appendCommitCoAuthorNote(systemPrompt, coAuthor) {
|
|
107
|
-
|
|
127
|
+
export function appendCommitCoAuthorNote(systemPrompt, coAuthor, modelIdentity) {
|
|
128
|
+
// EXT-83 — ONE place composes the name, so the parenthesised shape stays a one-line change. The
|
|
129
|
+
// identity decorates ONLY the default name: a configured name is the user's own string and is
|
|
130
|
+
// emitted verbatim, and an unresolved identity yields the bare default (never a placeholder).
|
|
131
|
+
const configuredName = coAuthor?.name?.trim();
|
|
132
|
+
const identity = modelIdentity?.identity?.trim();
|
|
133
|
+
const name = configuredName ||
|
|
134
|
+
(identity ? `${DEFAULT_COMMIT_CO_AUTHOR_NAME} (${identity})` : DEFAULT_COMMIT_CO_AUTHOR_NAME);
|
|
108
135
|
const email = coAuthor?.email?.trim() || DEFAULT_COMMIT_CO_AUTHOR_EMAIL;
|
|
109
136
|
const note = 'When you create a git commit, add EXACTLY this co-author trailer line (on its own line, at ' +
|
|
110
137
|
`the end of the commit message):\nCo-Authored-By: ${name} <${email}>\n` +
|
|
111
|
-
'
|
|
112
|
-
'
|
|
113
|
-
'
|
|
114
|
-
'
|
|
138
|
+
'Emit at most this one Co-Authored-By trailer.\n' +
|
|
139
|
+
'Write the commit message in plain English: say what changed and why, and keep code, shell ' +
|
|
140
|
+
'commands, backticks and markup out of it.\n' +
|
|
141
|
+
'Never pass a commit message inline with the -m option: inside double quotes a POSIX shell ' +
|
|
142
|
+
'expands backtick and dollar-parenthesis constructs before git ever runs, so a message that ' +
|
|
143
|
+
'quotes code is executed as a command. Write the message to a file with the write_file tool ' +
|
|
144
|
+
'(never with shell echo or a heredoc, which put the same text back into a shell argument), ' +
|
|
145
|
+
'then commit it with git commit -F followed by that file path.';
|
|
115
146
|
return systemPrompt ? `${systemPrompt}\n\n${note}` : note;
|
|
116
147
|
}
|
|
117
148
|
/**
|
|
@@ -208,46 +239,13 @@ export function appendModelContextNote(systemPrompt, modelIdentity) {
|
|
|
208
239
|
export const MCP_INSTRUCTIONS_MAX_CHARS_PER_SERVER = 4000;
|
|
209
240
|
/** EXT-32: truncation marker appended when a server's instructions exceed the per-server cap. */
|
|
210
241
|
export const MCP_INSTRUCTIONS_TRUNCATION_MARKER = '… [truncated]';
|
|
211
|
-
/** EXT-32: the ONLY real structural delimiters in the composed block (emitted by this helper). */
|
|
212
|
-
const MCP_FENCE_BEGIN = '[BEGIN MCP SERVER-PROVIDED CONTEXT]';
|
|
213
|
-
const MCP_FENCE_END = '[END MCP SERVER-PROVIDED CONTEXT]';
|
|
214
|
-
/**
|
|
215
|
-
* EXT-32 (security): neutralize the block's structural delimiters inside UNTRUSTED server text.
|
|
216
|
-
*
|
|
217
|
-
* `getInstructions()` is fully server-controlled, so a malicious/compromised MCP server can emit
|
|
218
|
-
* text that forges the fence tokens or a per-server label — closing the fence early so its lines
|
|
219
|
-
* land OUTSIDE the visual boundary, or impersonating another server. Before fencing, we defang any
|
|
220
|
-
* occurrence in the server text of:
|
|
221
|
-
* - the fence tokens `[BEGIN|END MCP SERVER-PROVIDED CONTEXT]` (bracket run collapsed so they can
|
|
222
|
-
* no longer be read as the real delimiter), and
|
|
223
|
-
* - a per-server label line `--- Server: …` (the leading `---` run broken so it can't masquerade
|
|
224
|
-
* as one of our labels).
|
|
225
|
-
* After this, the ONLY real delimiters in the composed block are the ones this helper emits. The
|
|
226
|
-
* server NAME in our own label comes from trusted config keys, so it is not sanitized — only the
|
|
227
|
-
* server-supplied CONTENT is. Whitespace-tolerant matching (`\s+`, optional bracket padding, `-{3,}`)
|
|
228
|
-
* so trivial spacing variants can't slip a delimiter through.
|
|
229
|
-
*/
|
|
230
|
-
function defangMcpDelimiters(text) {
|
|
231
|
-
return text
|
|
232
|
-
.replace(/\[\s*(BEGIN|END)\s+MCP\s+SERVER-PROVIDED\s+CONTEXT\s*\]/gi, (_m, kw) => `(server text: ${kw.toUpperCase()} MCP SERVER-PROVIDED CONTEXT)`)
|
|
233
|
-
.replace(/-{3,}(\s*Server\s*:)/gi, '- - -$1');
|
|
234
|
-
}
|
|
235
242
|
/**
|
|
236
243
|
* EXT-32: cap server text at {@link MCP_INSTRUCTIONS_MAX_CHARS_PER_SERVER}, SURROGATE-SAFE.
|
|
237
244
|
*
|
|
238
|
-
*
|
|
239
|
-
* half-code-unit. If the cut would land between a high and low surrogate, back off one code unit so
|
|
240
|
-
* the pair is kept whole (dropped entirely rather than split). Appends the truncation marker only
|
|
241
|
-
* when text is actually clipped.
|
|
245
|
+
* Thin binding of the shared {@link capUntrustedText} to this block's own cap and marker.
|
|
242
246
|
*/
|
|
243
247
|
function capMcpText(text) {
|
|
244
|
-
|
|
245
|
-
return text;
|
|
246
|
-
let end = MCP_INSTRUCTIONS_MAX_CHARS_PER_SERVER;
|
|
247
|
-
const code = text.charCodeAt(end - 1);
|
|
248
|
-
if (code >= 0xd800 && code <= 0xdbff)
|
|
249
|
-
end -= 1; // don't split a surrogate pair
|
|
250
|
-
return `${text.slice(0, end).trimEnd()}\n${MCP_INSTRUCTIONS_TRUNCATION_MARKER}`;
|
|
248
|
+
return capUntrustedText(text, MCP_INSTRUCTIONS_MAX_CHARS_PER_SERVER, MCP_INSTRUCTIONS_TRUNCATION_MARKER);
|
|
251
249
|
}
|
|
252
250
|
/**
|
|
253
251
|
* EXT-32: append connected MCP servers' discovery `instructions` to the composed system prompt.
|
|
@@ -277,7 +275,7 @@ export function appendMcpServerInstructionsNote(systemPrompt, instructions) {
|
|
|
277
275
|
// SECURITY: defang the untrusted server text's structural delimiters BEFORE fencing, then cap
|
|
278
276
|
// (surrogate-safe). Order matters — defang first so a forged fence/label can't survive into the
|
|
279
277
|
// composed block; cap after so the final per-server size stays bounded.
|
|
280
|
-
const safe = capMcpText(
|
|
278
|
+
const safe = capMcpText(defangUntrustedDelimiters(text));
|
|
281
279
|
blocks.push(`--- Server: "${entry.server}" ---\n${safe}`);
|
|
282
280
|
}
|
|
283
281
|
if (blocks.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"systemPromptNotes.js","sourceRoot":"","sources":["../../src/utils/systemPromptNotes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"systemPromptNotes.js","sourceRoot":"","sources":["../../src/utils/systemPromptNotes.ts"],"names":[],"mappings":"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"}
|