@gaunt-sloth/core 2.0.0-beta.1 → 2.0.0-beta.3

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.
Files changed (117) hide show
  1. package/LICENSE +6 -6
  2. package/dist/config/loader.d.ts +13 -0
  3. package/dist/config/loader.js +55 -11
  4. package/dist/config/loader.js.map +1 -1
  5. package/dist/config/schema.d.ts +10 -0
  6. package/dist/config/schema.js +46 -24
  7. package/dist/config/schema.js.map +1 -1
  8. package/dist/config/shell-policy.d.ts +144 -3
  9. package/dist/config/shell-policy.js +117 -10
  10. package/dist/config/shell-policy.js.map +1 -1
  11. package/dist/config/tool-descriptions.d.ts +5 -5
  12. package/dist/config/tool-descriptions.js +3 -3
  13. package/dist/config/types.d.ts +19 -0
  14. package/dist/config/types.js.map +1 -1
  15. package/dist/constants.d.ts +10 -0
  16. package/dist/constants.js +10 -0
  17. package/dist/constants.js.map +1 -1
  18. package/dist/core/GthAbstractAgent.d.ts +32 -1
  19. package/dist/core/GthAbstractAgent.js +222 -7
  20. package/dist/core/GthAbstractAgent.js.map +1 -1
  21. package/dist/core/GthAgentRunner.d.ts +323 -27
  22. package/dist/core/GthAgentRunner.js +1092 -112
  23. package/dist/core/GthAgentRunner.js.map +1 -1
  24. package/dist/core/GthLangChainAgent.js +1 -1
  25. package/dist/core/GthLangChainAgent.js.map +1 -1
  26. package/dist/core/approvals/approvalRequest.d.ts +247 -0
  27. package/dist/core/approvals/approvalRequest.js +315 -0
  28. package/dist/core/approvals/approvalRequest.js.map +1 -0
  29. package/dist/core/approvals/grants.d.ts +165 -9
  30. package/dist/core/approvals/grants.js +702 -57
  31. package/dist/core/approvals/grants.js.map +1 -1
  32. package/dist/core/plainToolIndication.d.ts +11 -1
  33. package/dist/core/plainToolIndication.js +25 -10
  34. package/dist/core/plainToolIndication.js.map +1 -1
  35. package/dist/core/reasoningBlocks.d.ts +4 -6
  36. package/dist/core/reasoningBlocks.js +4 -6
  37. package/dist/core/reasoningBlocks.js.map +1 -1
  38. package/dist/core/shell/ShellCommandFailedError.d.ts +4 -4
  39. package/dist/core/shell/ShellCommandFailedError.js +4 -4
  40. package/dist/core/shell/abstention.d.ts +1 -1
  41. package/dist/core/shell/abstention.js +65 -11
  42. package/dist/core/shell/abstention.js.map +1 -1
  43. package/dist/core/shell/alignment.d.ts +491 -0
  44. package/dist/core/shell/alignment.js +687 -0
  45. package/dist/core/shell/alignment.js.map +1 -0
  46. package/dist/core/shell/approvalCapture.d.ts +53 -41
  47. package/dist/core/shell/approvalCapture.js +0 -42
  48. package/dist/core/shell/approvalCapture.js.map +1 -1
  49. package/dist/core/shell/approvalStop.d.ts +121 -3
  50. package/dist/core/shell/approvalStop.js +153 -90
  51. package/dist/core/shell/approvalStop.js.map +1 -1
  52. package/dist/core/shell/hardline.d.ts +26 -4
  53. package/dist/core/shell/hardline.js +321 -16
  54. package/dist/core/shell/hardline.js.map +1 -1
  55. package/dist/core/shell/negotiation.d.ts +352 -63
  56. package/dist/core/shell/negotiation.js +295 -123
  57. package/dist/core/shell/negotiation.js.map +1 -1
  58. package/dist/core/shell/openWorld.d.ts +136 -0
  59. package/dist/core/shell/openWorld.js +573 -35
  60. package/dist/core/shell/openWorld.js.map +1 -1
  61. package/dist/core/shell/provenance.d.ts +91 -0
  62. package/dist/core/shell/provenance.js +136 -0
  63. package/dist/core/shell/provenance.js.map +1 -0
  64. package/dist/core/shell/rater.d.ts +394 -163
  65. package/dist/core/shell/rater.js +536 -238
  66. package/dist/core/shell/rater.js.map +1 -1
  67. package/dist/core/shell/raterHealth.d.ts +101 -0
  68. package/dist/core/shell/raterHealth.js +121 -0
  69. package/dist/core/shell/raterHealth.js.map +1 -0
  70. package/dist/core/shell/raterModel.d.ts +17 -8
  71. package/dist/core/shell/raterModel.js +11 -8
  72. package/dist/core/shell/raterModel.js.map +1 -1
  73. package/dist/core/shell/rejection.d.ts +20 -5
  74. package/dist/core/shell/rejection.js +18 -4
  75. package/dist/core/shell/rejection.js.map +1 -1
  76. package/dist/core/toolDisplay.d.ts +91 -2
  77. package/dist/core/toolDisplay.js +168 -19
  78. package/dist/core/toolDisplay.js.map +1 -1
  79. package/dist/core/types.d.ts +140 -22
  80. package/dist/core/types.js.map +1 -1
  81. package/dist/providers/configurationPassthrough.d.ts +36 -6
  82. package/dist/providers/configurationPassthrough.js +40 -28
  83. package/dist/providers/configurationPassthrough.js.map +1 -1
  84. package/dist/providers/geminiSchemaSanitizer.d.ts +2 -2
  85. package/dist/providers/geminiSchemaSanitizer.js +2 -2
  86. package/dist/providers/geminiThinking.d.ts +10 -5
  87. package/dist/providers/geminiThinking.js +10 -5
  88. package/dist/providers/geminiThinking.js.map +1 -1
  89. package/dist/providers/openrouter.js +36 -6
  90. package/dist/providers/openrouter.js.map +1 -1
  91. package/dist/providers/vertexai.js +21 -0
  92. package/dist/providers/vertexai.js.map +1 -1
  93. package/dist/runtime/askStructured.d.ts +22 -0
  94. package/dist/runtime/askStructured.js +53 -0
  95. package/dist/runtime/askStructured.js.map +1 -1
  96. package/dist/utils/aiignoreUtils.d.ts +6 -0
  97. package/dist/utils/aiignoreUtils.js +69 -1
  98. package/dist/utils/aiignoreUtils.js.map +1 -1
  99. package/dist/utils/binaryOutputUtils.js +103 -21
  100. package/dist/utils/binaryOutputUtils.js.map +1 -1
  101. package/dist/utils/displayWidth.d.ts +10 -5
  102. package/dist/utils/displayWidth.js +148 -54
  103. package/dist/utils/displayWidth.js.map +1 -1
  104. package/dist/utils/fileUtils.d.ts +7 -1
  105. package/dist/utils/fileUtils.js +17 -3
  106. package/dist/utils/fileUtils.js.map +1 -1
  107. package/dist/utils/globalConfigUtils.d.ts +5 -2
  108. package/dist/utils/globalConfigUtils.js +14 -3
  109. package/dist/utils/globalConfigUtils.js.map +1 -1
  110. package/dist/utils/llmUtils.d.ts +1 -1
  111. package/dist/utils/llmUtils.js +1 -1
  112. package/dist/utils/systemPromptNotes.d.ts +3 -3
  113. package/dist/utils/systemPromptNotes.js +3 -3
  114. package/dist/utils/vertexaiUtils.js +160 -3
  115. package/dist/utils/vertexaiUtils.js.map +1 -1
  116. package/package.json +6 -5
  117. package/schema/gsloth-config.schema.json +34 -0
@@ -23,24 +23,38 @@
23
23
  * rules below are defined over, so the two agree by construction and a sliced string's width is
24
24
  * exactly the sum of the widths of the clusters kept.
25
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.
26
+ * ## What the slices cut: text, with its escapes carried along
27
+ *
28
+ * The slices are ANSI-aware, and they agree with {@link displayWidth} by construction. An escape
29
+ * sequence is not one cluster — the terminal swallows it whole, but `ESC`, `[`, `3`, `5`, `m`
30
+ * segment as five, four of them printable. A walk that spent budget on those printable bytes
31
+ * would answer a different question from the ruler it is paired with, since `string-width` strips
32
+ * escapes before measuring; and at a budget narrower than the content it would cut INSIDE a
33
+ * sequence, handing the terminal a mutilated escape.
34
+ *
35
+ * So a sequence is an indivisible token costing zero columns. It is kept whole, and it is carried
36
+ * along with the text it introduces, so a truncated coloured string still renders coloured. A
37
+ * sequence whose text is entirely cut away is dropped with that text rather than left dangling at
38
+ * the end of the result, where it would style nothing and leak its colour into whatever the caller
39
+ * appends next an ellipsis, the next parameter, the status tag.
40
+ *
41
+ * **The result stays a genuine prefix (or suffix) of the input: no reset is appended.** Terminal
42
+ * state belongs to the surface that owns the line, and both render surfaces already open and close
43
+ * their own styling around each line they draw; an `ESC[0m` injected at the cut would close that
44
+ * wrapper early and un-style everything after it.
45
+ *
46
+ * Because escapes cost no budget, the clusters kept sum to the width of the string as
47
+ * {@link displayWidth} measures it, so the cluster walk decides "does the whole string fit?" on
48
+ * its own — incrementally, stopping at the budget, WITHOUT a pre-measurement of the input. That is
49
+ * what keeps a megabyte-long preview line from being measured end to end before it is cut at
50
+ * column 200, and it is why the escape-bearing case needs no separate ruler.
51
+ *
52
+ * The one input the two do not agree on is an escape sequence placed INSIDE a grapheme cluster,
53
+ * between a base character and its combining mark. The measurement strips the sequence and joins
54
+ * what is left into one cluster; the walk cannot, because the sequence has already broken the
55
+ * cluster in two. The walk then counts such a string WIDER than it renders, which spends budget
56
+ * that is not needed and can leave a slice short — never over its budget, which is the direction
57
+ * that matters.
44
58
  *
45
59
  * ## Why ambiguous-width characters stay NARROW — and the one place they must not
46
60
  *
@@ -75,8 +89,8 @@ const GRAPHEME_SEGMENTER = new Intl.Segmenter(undefined, { granularity: 'graphem
75
89
  /**
76
90
  * Terminal columns `text` occupies. Zero-width clusters (combining marks, default-ignorables)
77
91
  * count 0, wide clusters (CJK, emoji, fullwidth forms) count 2, everything else 1. ANSI escape
78
- * sequences are not counted, so a pre-coloured string measures as what the user sees — but the
79
- * slices below do not share that awareness, so do not read this as a licence to feed them one.
92
+ * sequences are not counted, so a pre-coloured string measures as what the user sees — and the
93
+ * slices below share that awareness, so a coloured string may be handed to either of them.
80
94
  */
81
95
  export function displayWidth(text) {
82
96
  return stringWidth(text);
@@ -104,22 +118,78 @@ export function firstCluster(text) {
104
118
  return segment;
105
119
  return '';
106
120
  }
107
- /** The clusters of `text`, in order — the only unit either slice is allowed to cut between. */
108
- function clusters(text) {
109
- const out = [];
110
- for (const { segment } of GRAPHEME_SEGMENTER.segment(text))
111
- out.push(segment);
112
- return out;
113
- }
114
121
  /**
115
- * Whether the whole-string measurement is the only ruler that can answer "does this fit" for
116
- * `text` true exactly when it carries an escape introducer (`ESC`, or the one-byte `CSI`), the
117
- * two characters `string-width` itself strips on. On anything else the cluster widths sum to the
118
- * whole-string width, so the walk decides the same question incrementally and a pre-measurement
119
- * would be a second full pass over the input for nothing.
122
+ * The code points a sequence can begin with: `ESC` (U+001B) and the one-byte `CSI` (U+009B) — the
123
+ * same two characters `string-width` itself tests for before it strips.
124
+ */
125
+ const ESCAPE_INTRODUCER_CODES = new Set([0x00_1b, 0x00_9b]);
126
+ /**
127
+ * One ANSI escape sequence — an OSC string, or a CSI/two-character sequence — as a source pattern.
128
+ *
129
+ * This is the grammar of `ansi-regex`, which is what `strip-ansi` matches with and therefore what
130
+ * `string-width` removes before it measures. It is reproduced here rather than imported so the walk
131
+ * can never end up on a DIFFERENT copy of that package from the one `string-width` resolves: two
132
+ * versions in one tree would let the ruler and the walk disagree about where a sequence ends, which
133
+ * is the exact defect this module's ANSI-awareness exists to prevent. The spec cross-checks this
134
+ * pattern against `strip-ansi` itself, so a divergence fails loudly rather than silently.
135
+ *
136
+ * The OSC payload stops at the first terminator character instead of scanning ahead for one, so an
137
+ * unterminated OSC introducer cannot rescan the rest of the input — which is what keeps the walk
138
+ * linear on a long line full of half-written escapes rather than quadratic.
139
+ */
140
+ const ANSI_SEQUENCE_SOURCE = [
141
+ '(?:\\u001B\\][^\\u0007\\u001B\\u009C]*(?:\\u0007|\\u001B\\u005C|\\u009C))',
142
+ '[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]',
143
+ ].join('|');
144
+ /**
145
+ * The same grammar anchored with the sticky flag, so it answers "does a sequence START here?" in
146
+ * one step at a known index rather than searching forward for the next one anywhere in the string.
147
+ *
148
+ * Module-level, because compiling it per slice would tax the common case that never uses it. Its
149
+ * `lastIndex` is written immediately before every `exec`, with nothing in between, so a second walk
150
+ * that begins while the first is suspended cannot observe a stale position.
120
151
  */
121
- function needsWholeStringMeasure(text) {
122
- return text.includes('\u001B') || text.includes('\u009B');
152
+ const ANSI_SEQUENCE_AT_INDEX = new RegExp(ANSI_SEQUENCE_SOURCE, 'y');
153
+ /**
154
+ * The pieces of `text` in order — whole escape sequences and whole grapheme clusters, the only
155
+ * units either slice is allowed to cut between.
156
+ *
157
+ * Lazy, and that is the point: the head slice stops pulling at its budget, so a megabyte-long line
158
+ * costs the length of the RESULT rather than the length of the input.
159
+ *
160
+ * An escape introducer is always its own cluster, because the segmentation rules break on both
161
+ * sides of a control character — so a sequence can only ever begin where a cluster begins, and one
162
+ * anchored match there settles how far it runs. The clusters it spans are then skipped. A cluster
163
+ * that STRADDLES the end of a sequence (a combining mark binding to the sequence's final byte)
164
+ * yields only the part beyond it, so the pieces always reassemble into the input exactly.
165
+ */
166
+ function* widthTokens(text) {
167
+ let index = 0;
168
+ for (const { segment, index: at } of GRAPHEME_SEGMENTER.segment(text)) {
169
+ const end = at + segment.length;
170
+ if (end <= index)
171
+ continue; // wholly inside a sequence already yielded
172
+ if (at < index) {
173
+ // Straddles the end of that sequence: only what lies beyond it is still unyielded.
174
+ const rest = text.slice(index, end);
175
+ index = end;
176
+ yield { text: rest, escape: false };
177
+ continue;
178
+ }
179
+ if (segment.length === 1 && ESCAPE_INTRODUCER_CODES.has(segment.charCodeAt(0))) {
180
+ ANSI_SEQUENCE_AT_INDEX.lastIndex = at;
181
+ const match = ANSI_SEQUENCE_AT_INDEX.exec(text);
182
+ if (match !== null) {
183
+ index = at + match[0].length;
184
+ yield { text: match[0], escape: true };
185
+ continue;
186
+ }
187
+ // An introducer that begins no sequence falls through as an ordinary cluster. It is a
188
+ // control character, so it measures zero and costs no budget either way.
189
+ }
190
+ index = end;
191
+ yield { text: segment, escape: false };
192
+ }
123
193
  }
124
194
  /**
125
195
  * The longest LEADING run of whole clusters whose total width is at most `maxWidth` — i.e. keep
@@ -146,50 +216,74 @@ export function sliceToMaxWidth(text, maxWidth) {
146
216
  }
147
217
  /**
148
218
  * The head-slice both public cuts are made of, given the ruler to measure with. The ruler is passed
149
- * rather than chosen here so the whole-string shortcut and the cluster walk can never end up on
150
- * different ones — measuring the shortcut narrow and the walk wide would hand back a string that
151
- * overruns the very budget the caller asked to be held to.
219
+ * rather than chosen here so a caller cannot end up measured by one and cut by the other — reading
220
+ * the budget narrow and spending it wide would hand back a string that overruns the very budget the
221
+ * caller asked to be held to.
222
+ *
223
+ * The input is measured ONCE, incrementally, by the walk itself: escapes cost nothing, so the
224
+ * clusters kept sum to what {@link displayWidth} would report for them, and "does the whole string
225
+ * fit?" is answered by reaching the end rather than by a separate pass over the input first.
226
+ *
227
+ * Escapes are held back until a cluster is actually kept, so a sequence whose text all falls
228
+ * outside the budget is dropped with it instead of trailing the result and colouring whatever the
229
+ * caller appends next.
152
230
  */
153
231
  function sliceHeadToWidth(text, maxWidth, measure) {
154
232
  if (maxWidth <= 0)
155
233
  return '';
156
- if (needsWholeStringMeasure(text) && measure(text) <= maxWidth)
157
- return text;
158
234
  let width = 0;
159
235
  let kept = '';
160
- for (const { segment } of GRAPHEME_SEGMENTER.segment(text)) {
161
- const clusterWidth = measure(segment);
236
+ let pendingEscapes = '';
237
+ for (const token of widthTokens(text)) {
238
+ if (token.escape) {
239
+ pendingEscapes += token.text;
240
+ continue;
241
+ }
242
+ const clusterWidth = measure(token.text);
162
243
  if (width + clusterWidth > maxWidth)
163
- break;
244
+ return kept;
164
245
  width += clusterWidth;
165
- kept += segment;
246
+ kept += pendingEscapes + token.text;
247
+ pendingEscapes = '';
166
248
  }
167
- return kept;
249
+ // Every token fitted, so the answer is the input itself — returned rather than reassembled, so
250
+ // a caller comparing the result with what it passed in gets the identity it is testing for.
251
+ return text;
168
252
  }
169
253
  /**
170
254
  * The longest TRAILING run of whole clusters whose total width is at most `maxWidth` — i.e. keep
171
255
  * the tail, lose the head. The mirror of {@link sliceToWidth}, for values whose end is the
172
256
  * informative part (a path's leaf directory).
173
257
  *
174
- * This one materialises the clusters: it walks backwards, and cluster boundaries are only
175
- * derivable from the front. Its callers pass a path or a model id, so the input is a line rather
176
- * than a file.
258
+ * This one materialises the pieces: it walks backwards, and both cluster and sequence boundaries
259
+ * are only derivable from the front. Its callers pass a path or a model id, so the input is a line
260
+ * rather than a file.
261
+ *
262
+ * Keeping the END means the escapes that OPENED a style sit in the discarded head and go with it,
263
+ * so a tail comes back in the terminal's default styling. Only the sequences inside the kept span
264
+ * are carried, which leaves the tail ending in whatever state the whole string ended in — the cut
265
+ * introduces no bleed of its own.
177
266
  */
178
267
  export function sliceEndToWidth(text, maxWidth) {
179
268
  if (maxWidth <= 0)
180
269
  return '';
181
- if (needsWholeStringMeasure(text) && displayWidth(text) <= maxWidth)
182
- return text;
183
- const all = clusters(text);
270
+ const all = [...widthTokens(text)];
184
271
  let width = 0;
185
272
  let kept = '';
273
+ let pendingEscapes = '';
186
274
  for (let index = all.length - 1; index >= 0; index--) {
187
- const clusterWidth = displayWidth(all[index]);
275
+ const token = all[index];
276
+ if (token.escape) {
277
+ pendingEscapes = token.text + pendingEscapes;
278
+ continue;
279
+ }
280
+ const clusterWidth = displayWidth(token.text);
188
281
  if (width + clusterWidth > maxWidth)
189
- break;
282
+ return kept;
190
283
  width += clusterWidth;
191
- kept = all[index] + kept;
284
+ kept = token.text + pendingEscapes + kept;
285
+ pendingEscapes = '';
192
286
  }
193
- return kept;
287
+ return text;
194
288
  }
195
289
  //# sourceMappingURL=displayWidth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"displayWidth.js","sourceRoot":"","sources":["../../src/utils/displayWidth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"displayWidth.js","sourceRoot":"","sources":["../../src/utils/displayWidth.ts"],"names":[],"mappings":"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"}
@@ -17,10 +17,16 @@ export declare function getGslothFilePath(filename: string): string;
17
17
  * If .gsloth dir exists returns `projectdir/.gsloth/.gsloth-settings`
18
18
  * If .gsloth dir does not exist returns `projectdir`
19
19
  *
20
+ * When `identityProfileRaw` names a profile, the path is always
21
+ * `projectdir/.gsloth/.gsloth-settings/<profile>`, creating `.gsloth` and the profile dir as
22
+ * needed — a named profile only exists under `.gsloth-settings/`, so there is no project-root
23
+ * fallback for it. A blank/whitespace-only profile name counts as "no profile".
24
+ *
20
25
  * @param filename The configuration filename
26
+ * @param identityProfileRaw Optional identity profile subdirectory name within `.gsloth-settings`
21
27
  * @returns The resolved path where the configuration file should be written
22
28
  */
23
- export declare function getGslothConfigWritePath(filename: string): string;
29
+ export declare function getGslothConfigWritePath(filename: string, identityProfileRaw?: string): string;
24
30
  /**
25
31
  * Gets the path where gsloth should look for configuration files based on .gsloth directory existence
26
32
  * @param filename The configuration filename to look for
@@ -37,14 +37,28 @@ export function getGslothFilePath(filename) {
37
37
  * If .gsloth dir exists returns `projectdir/.gsloth/.gsloth-settings`
38
38
  * If .gsloth dir does not exist returns `projectdir`
39
39
  *
40
+ * When `identityProfileRaw` names a profile, the path is always
41
+ * `projectdir/.gsloth/.gsloth-settings/<profile>`, creating `.gsloth` and the profile dir as
42
+ * needed — a named profile only exists under `.gsloth-settings/`, so there is no project-root
43
+ * fallback for it. A blank/whitespace-only profile name counts as "no profile".
44
+ *
40
45
  * @param filename The configuration filename
46
+ * @param identityProfileRaw Optional identity profile subdirectory name within `.gsloth-settings`
41
47
  * @returns The resolved path where the configuration file should be written
42
48
  */
43
- export function getGslothConfigWritePath(filename) {
49
+ export function getGslothConfigWritePath(filename, identityProfileRaw) {
44
50
  const currentDir = getProjectDir();
51
+ const identityProfile = identityProfileRaw?.trim();
52
+ const gslothDirPath = resolve(currentDir, GSLOTH_DIR);
53
+ const gslothSettingsPath = resolve(gslothDirPath, GSLOTH_SETTINGS_DIR);
54
+ if (identityProfile) {
55
+ const profileDirPath = resolve(gslothSettingsPath, identityProfile);
56
+ if (!existsSync(profileDirPath)) {
57
+ mkdirSync(profileDirPath, { recursive: true });
58
+ }
59
+ return resolve(profileDirPath, filename);
60
+ }
45
61
  if (gslothDirExists()) {
46
- const gslothDirPath = resolve(currentDir, GSLOTH_DIR);
47
- const gslothSettingsPath = resolve(gslothDirPath, GSLOTH_SETTINGS_DIR);
48
62
  // Create .gsloth-settings directory if it doesn't exist
49
63
  if (!existsSync(gslothSettingsPath)) {
50
64
  mkdirSync(gslothSettingsPath, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":"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"}
@@ -34,14 +34,17 @@ export declare function resolveGlobalConfigPath(globalDir: string, filename: str
34
34
  export declare function getGlobalGslothConfigReadPath(filename: string, identityProfileRaw?: string): string;
35
35
  /**
36
36
  * Gets the write path for a global gsloth config file (e.g. `.gsloth.config.json`)
37
- * inside the global `~/.gsloth` directory, ensuring the directory exists.
37
+ * inside the global `~/.gsloth` directory (or `~/.gsloth/.gsloth-settings/<identityProfile>/`),
38
+ * ensuring the relevant directory exists.
38
39
  *
39
40
  * Intended for first-run setup flows (CFG-2) that need to persist global settings.
40
41
  *
41
42
  * @param filename The configuration filename (e.g. `.gsloth.config.json`)
43
+ * @param identityProfileRaw Optional identity profile subdirectory name within `.gsloth-settings`.
44
+ * A blank/whitespace-only value counts as "no profile".
42
45
  * @returns The resolved path where the global configuration file should be written
43
46
  */
44
- export declare function getGlobalGslothConfigWritePath(filename: string): string;
47
+ export declare function getGlobalGslothConfigWritePath(filename: string, identityProfileRaw?: string): string;
45
48
  /**
46
49
  * Gets the global auth directory path
47
50
  * @returns The resolved path to the global auth directory
@@ -54,15 +54,26 @@ export function getGlobalGslothConfigReadPath(filename, identityProfileRaw) {
54
54
  }
55
55
  /**
56
56
  * Gets the write path for a global gsloth config file (e.g. `.gsloth.config.json`)
57
- * inside the global `~/.gsloth` directory, ensuring the directory exists.
57
+ * inside the global `~/.gsloth` directory (or `~/.gsloth/.gsloth-settings/<identityProfile>/`),
58
+ * ensuring the relevant directory exists.
58
59
  *
59
60
  * Intended for first-run setup flows (CFG-2) that need to persist global settings.
60
61
  *
61
62
  * @param filename The configuration filename (e.g. `.gsloth.config.json`)
63
+ * @param identityProfileRaw Optional identity profile subdirectory name within `.gsloth-settings`.
64
+ * A blank/whitespace-only value counts as "no profile".
62
65
  * @returns The resolved path where the global configuration file should be written
63
66
  */
64
- export function getGlobalGslothConfigWritePath(filename) {
65
- return resolve(ensureGlobalGslothDir(), filename);
67
+ export function getGlobalGslothConfigWritePath(filename, identityProfileRaw) {
68
+ const globalDir = ensureGlobalGslothDir();
69
+ const identityProfile = identityProfileRaw?.trim();
70
+ if (identityProfile) {
71
+ const profileDirPath = resolve(globalDir, GSLOTH_SETTINGS_DIR, identityProfile);
72
+ if (!existsSync(profileDirPath)) {
73
+ mkdirSync(profileDirPath, { recursive: true });
74
+ }
75
+ }
76
+ return resolveGlobalConfigPath(globalDir, filename, identityProfileRaw);
66
77
  }
67
78
  /**
68
79
  * Gets the global auth directory path
@@ -1 +1 @@
1
- {"version":3,"file":"globalConfigUtils.js","sourceRoot":"","sources":["../../src/utils/globalConfigUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IAEvC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAiB,EACjB,QAAgB,EAChB,kBAA2B;IAE3B,MAAM,eAAe,GAAG,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC,SAAS,EAAE,mBAAmB,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAC3C,QAAgB,EAChB,kBAA2B;IAE3B,OAAO,uBAAuB,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAAgB;IAC7D,OAAO,OAAO,CAAC,qBAAqB,EAAE,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,uCAAuC;IACvC,qBAAqB,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,6CAA6C;IAC7C,MAAM,YAAY,GAAG,SAAS;SAC3B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;SAC/B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,WAAW,EAAE,CAAC;IAEjB,OAAO,OAAO,CAAC,OAAO,EAAE,GAAG,YAAY,OAAO,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"globalConfigUtils.js","sourceRoot":"","sources":["../../src/utils/globalConfigUtils.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ export declare function readCodePrompt(config: PromptReadConfig): string;
32
32
  export declare function readExecPrompt(config: PromptReadConfig): string;
33
33
  /**
34
34
  * GS2-79 — the SINGLE place a command's mode prompt is chosen, for every site that composes a
35
- * system prompt via {@link buildSystemMessages}: both agent backends and the subagent profiles.
35
+ * system prompt via {@link buildSystemMessages}: the agent and the subagent profiles.
36
36
  *
37
37
  * It exists because the selection used to be an inline three-branch ternary copied to each of
38
38
  * those sites, and a command missing from one copy is silently served the CHAT prompt — the
@@ -117,7 +117,7 @@ export function readExecPrompt(config) {
117
117
  }
118
118
  /**
119
119
  * GS2-79 — the SINGLE place a command's mode prompt is chosen, for every site that composes a
120
- * system prompt via {@link buildSystemMessages}: both agent backends and the subagent profiles.
120
+ * system prompt via {@link buildSystemMessages}: the agent and the subagent profiles.
121
121
  *
122
122
  * It exists because the selection used to be an inline three-branch ternary copied to each of
123
123
  * those sites, and a command missing from one copy is silently served the CHAT prompt — the
@@ -93,9 +93,9 @@ export interface CommitCoAuthor {
93
93
  * it literally (the overwhelmingly common case, and a literal name is what makes the instruction
94
94
  * actionable); when it is not, the note names no tool, keeps both prohibitions and the file form,
95
95
  * and supplies the compliant path that remains: do not commit, and hand the message back to the
96
- * user. That branch states no availability claim of its own — the backends read the same
97
- * `filesystem` value but register filesystem tools differently, so a note asserting "you have no
98
- * file-writing tool" could be flatly false on one of them.
96
+ * user. That branch states no availability claim of its own — registering filesystem tools is the
97
+ * agent's decision, made from the same `filesystem` value, so a note asserting "you have no
98
+ * file-writing tool" could be flatly false.
99
99
  *
100
100
  * The note's prose carries **no backtick and no other markup** — including no angle-bracket
101
101
  * placeholder: it is the one piece of guidance whose subject is how to write a commit message, so
@@ -117,9 +117,9 @@ export function appendCwdNote(systemPrompt, cwd) {
117
117
  * it literally (the overwhelmingly common case, and a literal name is what makes the instruction
118
118
  * actionable); when it is not, the note names no tool, keeps both prohibitions and the file form,
119
119
  * and supplies the compliant path that remains: do not commit, and hand the message back to the
120
- * user. That branch states no availability claim of its own — the backends read the same
121
- * `filesystem` value but register filesystem tools differently, so a note asserting "you have no
122
- * file-writing tool" could be flatly false on one of them.
120
+ * user. That branch states no availability claim of its own — registering filesystem tools is the
121
+ * agent's decision, made from the same `filesystem` value, so a note asserting "you have no
122
+ * file-writing tool" could be flatly false.
123
123
  *
124
124
  * The note's prose carries **no backtick and no other markup** — including no angle-bracket
125
125
  * placeholder: it is the one piece of guidance whose subject is how to write a commit message, so