@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.
- package/LICENSE +6 -6
- package/dist/config/loader.d.ts +13 -0
- package/dist/config/loader.js +55 -11
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +10 -0
- package/dist/config/schema.js +46 -24
- package/dist/config/schema.js.map +1 -1
- package/dist/config/shell-policy.d.ts +144 -3
- package/dist/config/shell-policy.js +117 -10
- package/dist/config/shell-policy.js.map +1 -1
- package/dist/config/tool-descriptions.d.ts +5 -5
- package/dist/config/tool-descriptions.js +3 -3
- package/dist/config/types.d.ts +19 -0
- package/dist/config/types.js.map +1 -1
- package/dist/constants.d.ts +10 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/GthAbstractAgent.d.ts +32 -1
- package/dist/core/GthAbstractAgent.js +222 -7
- package/dist/core/GthAbstractAgent.js.map +1 -1
- package/dist/core/GthAgentRunner.d.ts +323 -27
- package/dist/core/GthAgentRunner.js +1092 -112
- package/dist/core/GthAgentRunner.js.map +1 -1
- package/dist/core/GthLangChainAgent.js +1 -1
- package/dist/core/GthLangChainAgent.js.map +1 -1
- package/dist/core/approvals/approvalRequest.d.ts +247 -0
- package/dist/core/approvals/approvalRequest.js +315 -0
- package/dist/core/approvals/approvalRequest.js.map +1 -0
- package/dist/core/approvals/grants.d.ts +165 -9
- package/dist/core/approvals/grants.js +702 -57
- package/dist/core/approvals/grants.js.map +1 -1
- package/dist/core/plainToolIndication.d.ts +11 -1
- package/dist/core/plainToolIndication.js +25 -10
- package/dist/core/plainToolIndication.js.map +1 -1
- package/dist/core/reasoningBlocks.d.ts +4 -6
- package/dist/core/reasoningBlocks.js +4 -6
- package/dist/core/reasoningBlocks.js.map +1 -1
- package/dist/core/shell/ShellCommandFailedError.d.ts +4 -4
- package/dist/core/shell/ShellCommandFailedError.js +4 -4
- package/dist/core/shell/abstention.d.ts +1 -1
- package/dist/core/shell/abstention.js +65 -11
- package/dist/core/shell/abstention.js.map +1 -1
- package/dist/core/shell/alignment.d.ts +491 -0
- package/dist/core/shell/alignment.js +687 -0
- package/dist/core/shell/alignment.js.map +1 -0
- package/dist/core/shell/approvalCapture.d.ts +53 -41
- package/dist/core/shell/approvalCapture.js +0 -42
- package/dist/core/shell/approvalCapture.js.map +1 -1
- package/dist/core/shell/approvalStop.d.ts +121 -3
- package/dist/core/shell/approvalStop.js +153 -90
- package/dist/core/shell/approvalStop.js.map +1 -1
- package/dist/core/shell/hardline.d.ts +26 -4
- package/dist/core/shell/hardline.js +321 -16
- package/dist/core/shell/hardline.js.map +1 -1
- package/dist/core/shell/negotiation.d.ts +352 -63
- package/dist/core/shell/negotiation.js +295 -123
- package/dist/core/shell/negotiation.js.map +1 -1
- package/dist/core/shell/openWorld.d.ts +136 -0
- package/dist/core/shell/openWorld.js +573 -35
- package/dist/core/shell/openWorld.js.map +1 -1
- package/dist/core/shell/provenance.d.ts +91 -0
- package/dist/core/shell/provenance.js +136 -0
- package/dist/core/shell/provenance.js.map +1 -0
- package/dist/core/shell/rater.d.ts +394 -163
- package/dist/core/shell/rater.js +536 -238
- package/dist/core/shell/rater.js.map +1 -1
- package/dist/core/shell/raterHealth.d.ts +101 -0
- package/dist/core/shell/raterHealth.js +121 -0
- package/dist/core/shell/raterHealth.js.map +1 -0
- package/dist/core/shell/raterModel.d.ts +17 -8
- package/dist/core/shell/raterModel.js +11 -8
- package/dist/core/shell/raterModel.js.map +1 -1
- package/dist/core/shell/rejection.d.ts +20 -5
- package/dist/core/shell/rejection.js +18 -4
- package/dist/core/shell/rejection.js.map +1 -1
- package/dist/core/toolDisplay.d.ts +91 -2
- package/dist/core/toolDisplay.js +168 -19
- package/dist/core/toolDisplay.js.map +1 -1
- package/dist/core/types.d.ts +140 -22
- package/dist/core/types.js.map +1 -1
- package/dist/providers/configurationPassthrough.d.ts +36 -6
- package/dist/providers/configurationPassthrough.js +40 -28
- package/dist/providers/configurationPassthrough.js.map +1 -1
- package/dist/providers/geminiSchemaSanitizer.d.ts +2 -2
- package/dist/providers/geminiSchemaSanitizer.js +2 -2
- package/dist/providers/geminiThinking.d.ts +10 -5
- package/dist/providers/geminiThinking.js +10 -5
- package/dist/providers/geminiThinking.js.map +1 -1
- package/dist/providers/openrouter.js +36 -6
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/vertexai.js +21 -0
- package/dist/providers/vertexai.js.map +1 -1
- package/dist/runtime/askStructured.d.ts +22 -0
- package/dist/runtime/askStructured.js +53 -0
- package/dist/runtime/askStructured.js.map +1 -1
- package/dist/utils/aiignoreUtils.d.ts +6 -0
- package/dist/utils/aiignoreUtils.js +69 -1
- package/dist/utils/aiignoreUtils.js.map +1 -1
- package/dist/utils/binaryOutputUtils.js +103 -21
- package/dist/utils/binaryOutputUtils.js.map +1 -1
- package/dist/utils/displayWidth.d.ts +10 -5
- package/dist/utils/displayWidth.js +148 -54
- package/dist/utils/displayWidth.js.map +1 -1
- package/dist/utils/fileUtils.d.ts +7 -1
- package/dist/utils/fileUtils.js +17 -3
- package/dist/utils/fileUtils.js.map +1 -1
- package/dist/utils/globalConfigUtils.d.ts +5 -2
- package/dist/utils/globalConfigUtils.js +14 -3
- package/dist/utils/globalConfigUtils.js.map +1 -1
- package/dist/utils/llmUtils.d.ts +1 -1
- package/dist/utils/llmUtils.js +1 -1
- package/dist/utils/systemPromptNotes.d.ts +3 -3
- package/dist/utils/systemPromptNotes.js +3 -3
- package/dist/utils/vertexaiUtils.js +160 -3
- package/dist/utils/vertexaiUtils.js.map +1 -1
- package/package.json +6 -5
- package/schema/gsloth-config.schema.json +34 -0
|
@@ -65,6 +65,28 @@ export type StructuredFailureKind = 'timeout' | 'unparseable' | 'call-failed';
|
|
|
65
65
|
* carries it, so a different value here reports a genuine timeout as `call-failed`.
|
|
66
66
|
*/
|
|
67
67
|
export declare function classifyStructuredFailure(error: string, timeoutMs: number): StructuredFailureKind;
|
|
68
|
+
/**
|
|
69
|
+
* Say WHICH of {@link askStructured}'s three failures happened, in one sentence a reader can act on.
|
|
70
|
+
*
|
|
71
|
+
* The two a reader has to tell apart first are a provider that never answered and a provider that
|
|
72
|
+
* refused the request: they want opposite responses — re-run the one, investigate the other — and
|
|
73
|
+
* from the outside they arrive as the same red. Naming the class is what stops a real rejection
|
|
74
|
+
* being shrugged off as flakiness, which is how a guard stops guarding with nobody deciding to
|
|
75
|
+
* remove it.
|
|
76
|
+
*
|
|
77
|
+
* There is no `default` arm and no fallback sentence, deliberately. The module-internal
|
|
78
|
+
* `STRUCTURED_FAILURE_SENTENCES` map, declared above, is typed by the union, so an unhandled kind
|
|
79
|
+
* cannot reach here — the compiler rejects the map instead. A defensive arm would only catch a case
|
|
80
|
+
* the build already refuses, at the price of hiding the compile error that is the real signal.
|
|
81
|
+
* It is named here rather than linked because it is not exported, and a `{@link}` to an
|
|
82
|
+
* undocumented symbol renders as dead text in the API reference.
|
|
83
|
+
*
|
|
84
|
+
* @param error The `error` from a `{ ok: false }` {@link AskStructuredResult}.
|
|
85
|
+
* @param timeoutMs The budget passed to that same {@link askStructured} call — as for
|
|
86
|
+
* {@link classifyStructuredFailure}, a different value here reports a genuine timeout as
|
|
87
|
+
* `call-failed`.
|
|
88
|
+
*/
|
|
89
|
+
export declare function describeStructuredFailure(error: string, timeoutMs: number): string;
|
|
68
90
|
/** Inputs to {@link askStructured}. The caller supplies the model (via config), the two message
|
|
69
91
|
* texts, and an optional timeout — the Zod schema is a separate positional argument so `<T>` can
|
|
70
92
|
* be inferred from it. */
|
|
@@ -64,6 +64,59 @@ export function classifyStructuredFailure(error, timeoutMs) {
|
|
|
64
64
|
return 'unparseable';
|
|
65
65
|
return 'call-failed';
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* The sentence each {@link StructuredFailureKind} is reported as — the wording a reader of a red run
|
|
69
|
+
* actually sees, and the half of {@link describeStructuredFailure} that can be wrong without any
|
|
70
|
+
* mechanism being wrong.
|
|
71
|
+
*
|
|
72
|
+
* It lives here, beside the classifier it is keyed on, for two reasons that are really one. The
|
|
73
|
+
* `Record` is annotated with the union, so the compiler checks the map is **total at its definition
|
|
74
|
+
* site**: adding a kind to {@link StructuredFailureKind} without giving it a sentence is a build
|
|
75
|
+
* error rather than a message that reads `undefined` at the moment someone needs it. And a sentence
|
|
76
|
+
* that sits beside the classifier is reachable by the unit suite, so each one is pinned to the class
|
|
77
|
+
* it names — a map the tests cannot see can have its bodies exchanged, and the failure that results
|
|
78
|
+
* is a stall announcing itself as a rejection, which is the exact confusion these sentences exist to
|
|
79
|
+
* end.
|
|
80
|
+
*
|
|
81
|
+
* Each entry receives the raw `error` and the budget the call was made with, so the sentence can
|
|
82
|
+
* quote both rather than describe them.
|
|
83
|
+
*/
|
|
84
|
+
const STRUCTURED_FAILURE_SENTENCES = {
|
|
85
|
+
timeout: (error, timeoutMs) => `STALLED: the provider returned no response within the ${timeoutMs}ms call budget. ` +
|
|
86
|
+
'Nothing was rejected and nothing was parsed, so this is NOT the schema guard firing — it ' +
|
|
87
|
+
'is the provider failing to answer. ' +
|
|
88
|
+
`askStructured said: ${error}`,
|
|
89
|
+
unparseable: (error) => "REJECTED BY OUR OWN SCHEMA: the provider answered, and the answer failed this case's " +
|
|
90
|
+
'schema. This IS the guard firing — the null-vs-absent half. ' +
|
|
91
|
+
`askStructured said: ${error}`,
|
|
92
|
+
'call-failed': (error) => 'REJECTED BEFORE ANY ANSWER: the call failed outright. A 400 naming `required` IS the ' +
|
|
93
|
+
'guard firing — the strict-schema half; anything else is auth, transport or configuration. ' +
|
|
94
|
+
`askStructured said: ${error}`,
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Say WHICH of {@link askStructured}'s three failures happened, in one sentence a reader can act on.
|
|
98
|
+
*
|
|
99
|
+
* The two a reader has to tell apart first are a provider that never answered and a provider that
|
|
100
|
+
* refused the request: they want opposite responses — re-run the one, investigate the other — and
|
|
101
|
+
* from the outside they arrive as the same red. Naming the class is what stops a real rejection
|
|
102
|
+
* being shrugged off as flakiness, which is how a guard stops guarding with nobody deciding to
|
|
103
|
+
* remove it.
|
|
104
|
+
*
|
|
105
|
+
* There is no `default` arm and no fallback sentence, deliberately. The module-internal
|
|
106
|
+
* `STRUCTURED_FAILURE_SENTENCES` map, declared above, is typed by the union, so an unhandled kind
|
|
107
|
+
* cannot reach here — the compiler rejects the map instead. A defensive arm would only catch a case
|
|
108
|
+
* the build already refuses, at the price of hiding the compile error that is the real signal.
|
|
109
|
+
* It is named here rather than linked because it is not exported, and a `{@link}` to an
|
|
110
|
+
* undocumented symbol renders as dead text in the API reference.
|
|
111
|
+
*
|
|
112
|
+
* @param error The `error` from a `{ ok: false }` {@link AskStructuredResult}.
|
|
113
|
+
* @param timeoutMs The budget passed to that same {@link askStructured} call — as for
|
|
114
|
+
* {@link classifyStructuredFailure}, a different value here reports a genuine timeout as
|
|
115
|
+
* `call-failed`.
|
|
116
|
+
*/
|
|
117
|
+
export function describeStructuredFailure(error, timeoutMs) {
|
|
118
|
+
return STRUCTURED_FAILURE_SENTENCES[classifyStructuredFailure(error, timeoutMs)](error, timeoutMs);
|
|
119
|
+
}
|
|
67
120
|
/**
|
|
68
121
|
* Ask the configured model for a single schema-validated object — a non-agentic structured-output
|
|
69
122
|
* call that mirrors their mechanism (see the module doc) and never throws.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"askStructured.js","sourceRoot":"","sources":["../../src/runtime/askStructured.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC;AAExD;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CAAC,SAAiB;IAC3D,OAAO,mCAAmC,SAAS,wCAAwC,CAAC;AAC9F,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,oCAAoC,CAAC;AAYtF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa,EAAE,SAAiB;IACxE,IAAI,KAAK,KAAK,2BAA2B,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACvE,IAAI,KAAK,KAAK,iCAAiC;QAAE,OAAO,aAAa,CAAC;IACtE,OAAO,aAAa,CAAC;AACvB,CAAC;AAmBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAoB,EACpB,IAA0B;IAE1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,iCAAiC,CAAC;IAEtE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;IACzB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,oBAAoB,KAAK,UAAU,EAAE,CAAC;QAC/D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,KAAgD,CAAC;IACrD,IAAI,CAAC;QACH,8FAA8F;QAC9F,+FAA+F;QAC/F,wFAAwF;QACxF,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7F,MAAM,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,EAAE;YAC7D,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"askStructured.js","sourceRoot":"","sources":["../../src/runtime/askStructured.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
export declare function loadAiignorePatterns(rootDir: string): string[];
|
|
12
12
|
/**
|
|
13
13
|
* Check if a file path should be ignored based on aiignore patterns
|
|
14
|
+
*
|
|
15
|
+
* Matching follows `.gitignore` rules — a bare pattern applies at every depth, a pattern with a
|
|
16
|
+
* separator is anchored to `rootDir`, and either kind hides the subtree beneath whatever it
|
|
17
|
+
* matches. The module-private `expandPattern` above implements that mapping and documents the two
|
|
18
|
+
* deliberate departures from `.gitignore`.
|
|
19
|
+
*
|
|
14
20
|
* @param filePath - The file path to check
|
|
15
21
|
* @param rootDir - The root directory for relative pattern matching
|
|
16
22
|
* @param customPatterns - Optional custom patterns to use instead of loading from file
|
|
@@ -32,8 +32,72 @@ export function loadAiignorePatterns(rootDir) {
|
|
|
32
32
|
return [];
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Expand one `.aiignore` line into the glob patterns that implement it.
|
|
37
|
+
*
|
|
38
|
+
* `.aiignore` is documented as using `.gitignore` rules, and that is the contract this function
|
|
39
|
+
* keeps. `path.matchesGlob` on its own does not: its `*` never crosses `/`, so a bare pattern is
|
|
40
|
+
* silently root-only, and a trailing slash matches nothing at all. Both failures are silent and
|
|
41
|
+
* both point the wrong way for a privacy boundary — the user writes a line, sees no error, and
|
|
42
|
+
* believes a file is hidden from the agent when it is not.
|
|
43
|
+
*
|
|
44
|
+
* The three rules, each mapping to one arm below:
|
|
45
|
+
*
|
|
46
|
+
* - **A pattern with no separator applies at every depth.** `*.log` hides `app.log` and
|
|
47
|
+
* `sub/app.log` alike, so it gains a globstar prefix. That prefixed form also matches at the
|
|
48
|
+
* root, so the one arm covers both depths.
|
|
49
|
+
* - **A pattern containing a separator is anchored to the root.** `build/out` hides
|
|
50
|
+
* `build/out`, never `src/build/out`. A leading `/` is an explicit spelling of the same thing and
|
|
51
|
+
* is stripped, since relative paths never carry one.
|
|
52
|
+
* - **Whatever a pattern hides, it hides the subtree beneath it.** This is the `/**` arm, and it is
|
|
53
|
+
* what makes a single line hide a directory's name *and* its contents. Without it the name is
|
|
54
|
+
* withheld from a listing while every file below it stays readable — the shape of the leak this
|
|
55
|
+
* boundary exists to prevent.
|
|
56
|
+
*
|
|
57
|
+
* DELIBERATE DEVIATION: a trailing slash is treated as an ordinary pattern rather than as
|
|
58
|
+
* "directories only", so `dist/` also hides a plain *file* named `dist`. Honouring the
|
|
59
|
+
* directory-only half needs the entry's type, which a path string does not carry and which the
|
|
60
|
+
* callers do not supply. Erring toward hiding costs a rare false positive the user can see and
|
|
61
|
+
* rename around; erring the other way silently exposes what someone asked to be hidden.
|
|
62
|
+
*
|
|
63
|
+
* NOT SUPPORTED: re-inclusion (`!pattern`). A leading `!` is matched literally, so such a line
|
|
64
|
+
* hides a file whose name really does start with `!` and un-hides nothing. That is the safe
|
|
65
|
+
* direction, and it is stated in the user documentation rather than left to be discovered.
|
|
66
|
+
*
|
|
67
|
+
* @param pattern - One non-empty, non-comment line from `.aiignore` or `aiignore.patterns`
|
|
68
|
+
* @returns Glob patterns to test the relative path against; empty when the line carries no pattern
|
|
69
|
+
*/
|
|
70
|
+
function expandPattern(pattern) {
|
|
71
|
+
// A trailing slash is gitignore's directory marker; strip it (see DELIBERATE DEVIATION above).
|
|
72
|
+
let body = pattern.replace(/\/+$/, '');
|
|
73
|
+
// A leading slash anchors to the root. Relative paths never carry one, so it must come off or
|
|
74
|
+
// the pattern matches nothing.
|
|
75
|
+
let anchored = false;
|
|
76
|
+
if (body.startsWith('/')) {
|
|
77
|
+
body = body.replace(/^\/+/, '');
|
|
78
|
+
anchored = true;
|
|
79
|
+
}
|
|
80
|
+
// A line that was nothing but slashes carries no pattern. Returning no arms is what keeps it
|
|
81
|
+
// from collapsing into `**`, which would hide the entire tree.
|
|
82
|
+
if (body.length === 0) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
// An interior separator anchors the pattern; its absence lets it apply at any depth.
|
|
86
|
+
if (body.includes('/')) {
|
|
87
|
+
anchored = true;
|
|
88
|
+
}
|
|
89
|
+
const base = anchored ? body : `**/${body}`;
|
|
90
|
+
// The entry itself, then everything beneath it.
|
|
91
|
+
return [base, `${base}/**`];
|
|
92
|
+
}
|
|
35
93
|
/**
|
|
36
94
|
* Check if a file path should be ignored based on aiignore patterns
|
|
95
|
+
*
|
|
96
|
+
* Matching follows `.gitignore` rules — a bare pattern applies at every depth, a pattern with a
|
|
97
|
+
* separator is anchored to `rootDir`, and either kind hides the subtree beneath whatever it
|
|
98
|
+
* matches. The module-private `expandPattern` above implements that mapping and documents the two
|
|
99
|
+
* deliberate departures from `.gitignore`.
|
|
100
|
+
*
|
|
37
101
|
* @param filePath - The file path to check
|
|
38
102
|
* @param rootDir - The root directory for relative pattern matching
|
|
39
103
|
* @param customPatterns - Optional custom patterns to use instead of loading from file
|
|
@@ -54,7 +118,11 @@ export function shouldIgnoreFile(filePath, rootDir, customPatterns = undefined,
|
|
|
54
118
|
// Check if any pattern matches
|
|
55
119
|
for (const pattern of patterns) {
|
|
56
120
|
try {
|
|
57
|
-
|
|
121
|
+
// Globs are built with `/` separators regardless of platform: win32's matchesGlob resolves a
|
|
122
|
+
// backslash-separated path against them, so the relative path is passed through untouched
|
|
123
|
+
// rather than rewritten (a rewrite would split a POSIX filename that legitimately contains a
|
|
124
|
+
// backslash into two segments).
|
|
125
|
+
if (expandPattern(pattern).some((glob) => path.matchesGlob(relativePath, glob))) {
|
|
58
126
|
debugLog(`File ignored by pattern '${pattern}': ${relativePath}`);
|
|
59
127
|
return true;
|
|
60
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiignoreUtils.js","sourceRoot":"","sources":["../../src/utils/aiignoreUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAEvD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,MAAM,aAAa,kBAAkB,YAAY,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO;aACrB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9D,QAAQ,CAAC,UAAU,QAAQ,CAAC,MAAM,kBAAkB,aAAa,EAAE,CAAC,CAAC;QACrE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CACN,iBAAiB,aAAa,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5F,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"aiignoreUtils.js","sourceRoot":"","sources":["../../src/utils/aiignoreUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,37 +51,119 @@ function getBinaryOutputFilePath(command, extension) {
|
|
|
51
51
|
}
|
|
52
52
|
return `${suffixBase}_${Date.now()}.${normalizedExtension}`;
|
|
53
53
|
}
|
|
54
|
+
function parseDataUrl(url) {
|
|
55
|
+
if (typeof url !== 'string' || !url.startsWith('data:')) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const commaPos = url.indexOf(',');
|
|
59
|
+
if (commaPos === -1) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const meta = url.slice(5, commaPos);
|
|
63
|
+
const data = url.slice(commaPos + 1);
|
|
64
|
+
if (!data) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const parts = meta.split(';');
|
|
68
|
+
const mimeType = parts[0]?.trim() || 'application/octet-stream';
|
|
69
|
+
return { mimeType, data };
|
|
70
|
+
}
|
|
71
|
+
function tryExtractBinaryFromBlock(block) {
|
|
72
|
+
if (block === null || block === undefined) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
if (typeof block === 'string') {
|
|
76
|
+
return parseDataUrl(block);
|
|
77
|
+
}
|
|
78
|
+
if (typeof block !== 'object') {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const obj = block;
|
|
82
|
+
// Check inlineData / inline_data (nested or flat)
|
|
83
|
+
const inlineObj = (obj.inlineData ?? obj.inline_data);
|
|
84
|
+
if (inlineObj && typeof inlineObj === 'object') {
|
|
85
|
+
const mimeType = (inlineObj.mimeType ?? inlineObj.mime_type ?? inlineObj.media_type);
|
|
86
|
+
const data = inlineObj.data;
|
|
87
|
+
if (typeof mimeType === 'string' && typeof data === 'string') {
|
|
88
|
+
return { mimeType, data };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Check image_url / imageUrl
|
|
92
|
+
const imageUrl = obj.image_url ?? obj.imageUrl;
|
|
93
|
+
if (imageUrl) {
|
|
94
|
+
if (typeof imageUrl === 'string') {
|
|
95
|
+
const parsed = parseDataUrl(imageUrl);
|
|
96
|
+
if (parsed)
|
|
97
|
+
return parsed;
|
|
98
|
+
}
|
|
99
|
+
else if (typeof imageUrl === 'object' && imageUrl !== null) {
|
|
100
|
+
const url = imageUrl.url;
|
|
101
|
+
if (typeof url === 'string') {
|
|
102
|
+
const parsed = parseDataUrl(url);
|
|
103
|
+
if (parsed)
|
|
104
|
+
return parsed;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Check source property (Anthropic / LangChain image source)
|
|
109
|
+
const source = obj.source;
|
|
110
|
+
if (source && typeof source === 'object') {
|
|
111
|
+
const mimeType = (source.media_type ?? source.mime_type ?? source.mimeType);
|
|
112
|
+
const data = source.data;
|
|
113
|
+
if (typeof data === 'string') {
|
|
114
|
+
if (typeof mimeType === 'string') {
|
|
115
|
+
return { mimeType, data };
|
|
116
|
+
}
|
|
117
|
+
const parsed = parseDataUrl(data);
|
|
118
|
+
if (parsed)
|
|
119
|
+
return parsed;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Check flat properties (mimeType / mime_type / media_type and data)
|
|
123
|
+
const mimeType = (obj.mimeType ?? obj.mime_type ?? obj.media_type);
|
|
124
|
+
const data = obj.data;
|
|
125
|
+
if (typeof mimeType === 'string' && typeof data === 'string') {
|
|
126
|
+
return { mimeType, data };
|
|
127
|
+
}
|
|
128
|
+
// Check flat url property
|
|
129
|
+
if (typeof obj.url === 'string') {
|
|
130
|
+
const parsed = parseDataUrl(obj.url);
|
|
131
|
+
if (parsed)
|
|
132
|
+
return parsed;
|
|
133
|
+
}
|
|
134
|
+
// Check flat data property if it's a data URL
|
|
135
|
+
if (typeof data === 'string') {
|
|
136
|
+
const parsed = parseDataUrl(data);
|
|
137
|
+
if (parsed)
|
|
138
|
+
return parsed;
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
54
142
|
export function extractInlineBinaryBlocks(content) {
|
|
55
|
-
if (
|
|
143
|
+
if (content === null || content === undefined) {
|
|
56
144
|
return [];
|
|
57
145
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
typeof block.inlineData.mimeType === 'string' &&
|
|
69
|
-
typeof block.inlineData.data === 'string') {
|
|
70
|
-
return [
|
|
71
|
-
{
|
|
72
|
-
index,
|
|
73
|
-
mimeType: block.inlineData.mimeType,
|
|
74
|
-
data: block.inlineData.data,
|
|
75
|
-
},
|
|
76
|
-
];
|
|
146
|
+
const items = Array.isArray(content) ? content : [content];
|
|
147
|
+
const results = [];
|
|
148
|
+
items.forEach((block, index) => {
|
|
149
|
+
const extracted = tryExtractBinaryFromBlock(block);
|
|
150
|
+
if (extracted) {
|
|
151
|
+
results.push({
|
|
152
|
+
index,
|
|
153
|
+
mimeType: extracted.mimeType,
|
|
154
|
+
data: extracted.data,
|
|
155
|
+
});
|
|
77
156
|
}
|
|
78
|
-
return [];
|
|
79
157
|
});
|
|
158
|
+
return results;
|
|
80
159
|
}
|
|
81
160
|
export function renderAssistantContent(content, binaryPlaceholders = new Map()) {
|
|
82
161
|
if (content === undefined || content === null) {
|
|
83
162
|
return '';
|
|
84
163
|
}
|
|
164
|
+
if (binaryPlaceholders.has(0) && (typeof content === 'string' || !Array.isArray(content))) {
|
|
165
|
+
return binaryPlaceholders.get(0);
|
|
166
|
+
}
|
|
85
167
|
if (typeof content === 'string') {
|
|
86
168
|
return content;
|
|
87
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binaryOutputUtils.js","sourceRoot":"","sources":["../../src/utils/binaryOutputUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQjG,MAAM,oBAAoB,GAA2B;IACnD,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,MAAM;IACpB,eAAe,EAAE,KAAK;IACtB,YAAY,EAAE,MAAM;IACpB,iBAAiB,EAAE,KAAK;IACxB,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAChE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA+B,EAAE,SAAiB;IACjF,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACzE,MAAM,mBAAmB,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC;IAClE,MAAM,QAAQ,GAAG,OAAO,WAAW,IAAI,UAAU,IAAI,mBAAmB,EAAE,CAAC;IAC3E,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEhD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3E,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,GAAG,UAAU,IAAI,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACnE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,mBAAmB,EAAE,CAAC;AAC9D,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"binaryOutputUtils.js","sourceRoot":"","sources":["../../src/utils/binaryOutputUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Terminal columns `text` occupies. Zero-width clusters (combining marks, default-ignorables)
|
|
3
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 —
|
|
5
|
-
* slices below
|
|
4
|
+
* sequences are not counted, so a pre-coloured string measures as what the user sees — and the
|
|
5
|
+
* slices below share that awareness, so a coloured string may be handed to either of them.
|
|
6
6
|
*/
|
|
7
7
|
export declare function displayWidth(text: string): number;
|
|
8
8
|
/**
|
|
@@ -46,8 +46,13 @@ export declare function sliceToMaxWidth(text: string, maxWidth: number): string;
|
|
|
46
46
|
* the tail, lose the head. The mirror of {@link sliceToWidth}, for values whose end is the
|
|
47
47
|
* informative part (a path's leaf directory).
|
|
48
48
|
*
|
|
49
|
-
* This one materialises the
|
|
50
|
-
* derivable from the front. Its callers pass a path or a model id, so the input is a line
|
|
51
|
-
* than a file.
|
|
49
|
+
* This one materialises the pieces: it walks backwards, and both cluster and sequence boundaries
|
|
50
|
+
* are only derivable from the front. Its callers pass a path or a model id, so the input is a line
|
|
51
|
+
* rather than a file.
|
|
52
|
+
*
|
|
53
|
+
* Keeping the END means the escapes that OPENED a style sit in the discarded head and go with it,
|
|
54
|
+
* so a tail comes back in the terminal's default styling. Only the sequences inside the kept span
|
|
55
|
+
* are carried, which leaves the tail ending in whatever state the whole string ended in — the cut
|
|
56
|
+
* introduces no bleed of its own.
|
|
52
57
|
*/
|
|
53
58
|
export declare function sliceEndToWidth(text: string, maxWidth: number): string;
|