@molecule/api-ai-tools 1.7.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +324 -25
- package/dist/command-position.d.ts +42 -0
- package/dist/command-position.d.ts.map +1 -1
- package/dist/command-position.js +271 -41
- package/dist/cut-run.d.ts +98 -8
- package/dist/cut-run.d.ts.map +1 -1
- package/dist/cut-run.js +182 -29
- package/dist/suite-overlap.d.ts +5 -1
- package/dist/suite-overlap.d.ts.map +1 -1
- package/dist/suite-overlap.js +16 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +78 -13
- package/dist/trace-artifacts.d.ts.map +1 -1
- package/dist/trace-artifacts.js +45 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utilities.d.ts +121 -8
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +482 -41
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -128,6 +128,19 @@ export interface ToolBuildConfig {
|
|
|
128
128
|
* @returns True when a large HTML read should be outlined rather than returned.
|
|
129
129
|
*/
|
|
130
130
|
outlineLargeHtml?: () => boolean;
|
|
131
|
+
/**
|
|
132
|
+
* The test titles the person's request EXCLUDES by name (molecule-dev's `excludedTestTitles`),
|
|
133
|
+
* asked when a finished suite run's cause note is built. Their failures are not causes to fix:
|
|
134
|
+
* the note drops them, says so at the end, and inverts them out of the narrowed re-run it hands
|
|
135
|
+
* over — a result must never name a test beside "it does not count" (xr-molecule-flash-m101
|
|
136
|
+
* +12:00, where the executor spent a turn and an edit on the excluded test).
|
|
137
|
+
*
|
|
138
|
+
* A getter, not an array, because the request is read per turn while the tool set is built
|
|
139
|
+
* once. Unset means no test is excluded.
|
|
140
|
+
*
|
|
141
|
+
* @returns The quoted titles the request carves out.
|
|
142
|
+
*/
|
|
143
|
+
excludedTestTitles?: () => readonly string[];
|
|
131
144
|
/** Post-write hook (e.g. auto-format via Prettier/ESLint). Called after every write_file/edit_file. */
|
|
132
145
|
onAfterWrite?: (path: string) => Promise<void>;
|
|
133
146
|
/** Diff tracking callback. Called before writes with old/new content. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utilities.d.ts
CHANGED
|
@@ -132,11 +132,15 @@ export declare const PLAYWRIGHT_FAILURES_INLINE_ENV = "PLAYWRIGHT_LIST_PRINT_FAI
|
|
|
132
132
|
*
|
|
133
133
|
* - a trailing `| tail -N`, which holds everything back until the command ends.
|
|
134
134
|
* It is dropped: `wait_for_task` already returns the end of the log.
|
|
135
|
+
* - any output-only filter piped after a SUITE runner (`| grep … | tail -20`), which hides the
|
|
136
|
+
* failing test's own error and leaves the pipeline's exit status — the filter's — as the run's.
|
|
137
|
+
* Every such stage is dropped ({@link stripTrailingSuiteFilters}); `wait_for_task` already
|
|
138
|
+
* returns the end of the full log, and a run whose tally shows a failure must never report 0
|
|
139
|
+
* (xr-molecule-flash-m101 +25:54).
|
|
135
140
|
* - `playwright test` with no `--reporter`, which runs the config's reporter —
|
|
136
141
|
* often `html`, which prints nothing per test. `--reporter=list` is added
|
|
137
|
-
* when the playwright run is the command's last step
|
|
138
|
-
*
|
|
139
|
-
* shape the platform reads a background suite back in.
|
|
142
|
+
* when the playwright run is the command's last step, piped or not: it writes each result as
|
|
143
|
+
* it finishes, and it is the shape the platform reads a background suite back in.
|
|
140
144
|
*
|
|
141
145
|
* The run ends up with exactly ONE reporter that prints each failure — `list`. A run that names
|
|
142
146
|
* any other printing reporter has it REPLACED, never joined: two of them write every test result
|
|
@@ -193,6 +197,45 @@ export declare function isSuiteRunCommand(command: string): boolean;
|
|
|
193
197
|
* @returns True when the command starts a Playwright run.
|
|
194
198
|
*/
|
|
195
199
|
export declare function isPlaywrightRunCommand(command: string): boolean;
|
|
200
|
+
/** A command with the output filters after its suite runner removed. */
|
|
201
|
+
export interface SuiteFilterStrip {
|
|
202
|
+
/** The command to run. */
|
|
203
|
+
command: string;
|
|
204
|
+
/** The pipeline stages dropped, as written (`| grep … | tail -20`), or '' when none were. */
|
|
205
|
+
dropped: string;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Drop the output-only filters piped after the command's suite runner.
|
|
209
|
+
*
|
|
210
|
+
* A filter after the runner is not "the end of the log" the executor asked for: it hides the
|
|
211
|
+
* failing test's own error (it usually matches none of `✘|passed|failed`), and the pipeline's exit
|
|
212
|
+
* status becomes the FILTER's, so `… 2>&1 | grep -E "✘|passed|failed|skipped" | tail -20` came back
|
|
213
|
+
* `exitCode: 0` for a run with a failure in it (xr-molecule-flash-m101 +25:54). The tool returns
|
|
214
|
+
* the end of the full log anyway, so the filter only costs diagnosability.
|
|
215
|
+
*
|
|
216
|
+
* Only a contiguous suffix of the stages after the runner is cut, and only stages the parse proves
|
|
217
|
+
* are output-only ({@link isOutputOnlyFilter}): a `| tee` or `| xargs` keeps its place, and a
|
|
218
|
+
* caller that reports the run's exit code must then treat it as unknown
|
|
219
|
+
* ({@link suiteRunPipedAfterRunner}).
|
|
220
|
+
*
|
|
221
|
+
* @param command - The shell command.
|
|
222
|
+
* @returns The rewritten command and the stages dropped.
|
|
223
|
+
*/
|
|
224
|
+
export declare function stripTrailingSuiteFilters(command: string): SuiteFilterStrip;
|
|
225
|
+
/**
|
|
226
|
+
* Whether the command's last step runs a suite whose output still passes through a stage after
|
|
227
|
+
* the runner — one {@link stripTrailingSuiteFilters} could not prove is output-only (`| tee log`,
|
|
228
|
+
* `| xargs …`). The pipeline's exit status is that stage's, not the run's.
|
|
229
|
+
*
|
|
230
|
+
* A command whose stages cannot be placed in the text (irregular whitespace inside the run) is
|
|
231
|
+
* reported as piped too: whether a pipe follows the runner is then UNKNOWN, and an unknown exit
|
|
232
|
+
* code that gets trusted is a failing run read as a pass — the failure this rule exists to stop.
|
|
233
|
+
*
|
|
234
|
+
* @param command - The shell command, after the streaming rewrite when one was applied.
|
|
235
|
+
* @returns True when a pipe this tool must not drop still follows the suite runner, or when the
|
|
236
|
+
* command runs a suite the parse cannot place.
|
|
237
|
+
*/
|
|
238
|
+
export declare function suiteRunPipedAfterRunner(command: string): boolean;
|
|
196
239
|
/**
|
|
197
240
|
* Start a background suite run at lower CPU and IO priority, so the sandbox it
|
|
198
241
|
* shares with everything else stays responsive to what the executor does next.
|
|
@@ -709,8 +752,29 @@ export interface RepeatingFailure {
|
|
|
709
752
|
export declare function repeatingFailure(log: string): RepeatingFailure | null;
|
|
710
753
|
/** How many of a repeating cause's failures the note lists before it says "and N more". */
|
|
711
754
|
export declare const REPEATING_FAILURE_LISTED = 5;
|
|
712
|
-
/**
|
|
713
|
-
|
|
755
|
+
/**
|
|
756
|
+
* The platform's cap on one tool result's text: `MAX_TOOL_OUTPUT_CHARS` in molecule-dev's
|
|
757
|
+
* `api/src/ai/chat-handler.ts`, which cuts a longer string field's MIDDLE. A finished run's
|
|
758
|
+
* stdout is cut to it, so the cause list must not depend on reading the log back — and must
|
|
759
|
+
* itself fit inside it, or the cut lands in the list.
|
|
760
|
+
*/
|
|
761
|
+
export declare const TOOL_RESULT_CHARS = 8000;
|
|
762
|
+
/**
|
|
763
|
+
* The characters a finished run's cause list may use of {@link TOOL_RESULT_CHARS}. The recap
|
|
764
|
+
* measured by xr-molecule-flash-m102 (+12:43) was `12 failures, 8 causes`: one cause line is
|
|
765
|
+
* ~200 chars and ~80 more with its two body lines, so 8 causes is ~2.3 k against the 8 k cap —
|
|
766
|
+
* the old 5-cause cap withheld 3 causes that the same result had room for.
|
|
767
|
+
*
|
|
768
|
+
* The rest of the cap is left to the header, the narrowed re-run command and the exclusion
|
|
769
|
+
* line, which ride the same note.
|
|
770
|
+
*/
|
|
771
|
+
export declare const FAILURE_CAUSES_CHARS: number;
|
|
772
|
+
/**
|
|
773
|
+
* How many causes a finished run's summary lists at most. The character budget above is the
|
|
774
|
+
* bound that must hold (it is what keeps the note on the surviving side of the tool-result
|
|
775
|
+
* cut); this is the bound past which a list stops being read at all.
|
|
776
|
+
*/
|
|
777
|
+
export declare const FAILURE_CAUSES_LISTED = 12;
|
|
714
778
|
/** How many of one cause's tests that summary names before it says "and N more". */
|
|
715
779
|
export declare const FAILURE_CAUSE_TESTS_LISTED = 6;
|
|
716
780
|
/**
|
|
@@ -781,6 +845,27 @@ export declare function universalCause(log: string, found: RepeatingFailure): Un
|
|
|
781
845
|
* wait keeps going, and the finding rides the run's result as a note.
|
|
782
846
|
*/
|
|
783
847
|
export declare function earlyReturnCause(found: RepeatingFailure, universal: UniversalCause | null | undefined): UniversalCause | null;
|
|
848
|
+
/**
|
|
849
|
+
* The titles a request excludes that a test's heading names — the ONE matcher for "is this
|
|
850
|
+
* failure one the request does not count?".
|
|
851
|
+
*
|
|
852
|
+
* The request quotes a test's own title (`… except "should require login to post comment"`,
|
|
853
|
+
* extracted by molecule-dev's `excludedTestTitles`) while a run's heading carries more of it
|
|
854
|
+
* (`comments.spec.ts › Comments › should require login to post comment`), so containment is the
|
|
855
|
+
* comparison. Whitespace is normalised and case is ignored: a brief may wrap the title across a
|
|
856
|
+
* line (`xr-molecule-flash-m44`), and the reporter's own casing never has to match the brief's.
|
|
857
|
+
*
|
|
858
|
+
* Two readers used to answer this separately — the causes note (which therefore asked the
|
|
859
|
+
* executor to fix a test the same result said not to) and molecule-dev's exclusion notes — and
|
|
860
|
+
* xr-molecule-flash-m101 paid for the gap (+12:00: a turn and an edit spent on the excluded
|
|
861
|
+
* test).
|
|
862
|
+
*
|
|
863
|
+
* @param heading - The text to match against: a test's title, its whole `file › describe › title`
|
|
864
|
+
* path, or (for a note that only has the run's output) the run's text.
|
|
865
|
+
* @param excluded - The titles the request carves out, if the caller knows them.
|
|
866
|
+
* @returns The excluded titles this heading names, in the request's order.
|
|
867
|
+
*/
|
|
868
|
+
export declare function matchingExcludedTitles(heading: string, excluded: readonly string[]): string[];
|
|
784
869
|
/** One cause of failure in a run, and the tests it hit. */
|
|
785
870
|
export interface FailureCause {
|
|
786
871
|
/** The error line its tests all reported, or null when only the duration ties them together. */
|
|
@@ -789,6 +874,12 @@ export interface FailureCause {
|
|
|
789
874
|
seconds: number | null;
|
|
790
875
|
/** The distinct tests it hit, in the order the log named them. */
|
|
791
876
|
tests: FailedTest[];
|
|
877
|
+
/**
|
|
878
|
+
* The FIRST failure's two most useful body lines — the values that differ, or the locator from
|
|
879
|
+
* its `Call log` ({@link failureEvidence}) — so a fix round needs no re-read of the log. Empty
|
|
880
|
+
* for a duration group, whose blocks carried no bodies.
|
|
881
|
+
*/
|
|
882
|
+
evidence: string[];
|
|
792
883
|
}
|
|
793
884
|
/**
|
|
794
885
|
* Every failure a run names, grouped by the cause behind it — one group per cause, with the
|
|
@@ -805,10 +896,17 @@ export interface FailureCause {
|
|
|
805
896
|
* they took where it does not, which is why a duration group is labelled as a duration and not as a
|
|
806
897
|
* proven cause. A test the log printed twice, or failed twice, is one test.
|
|
807
898
|
*
|
|
899
|
+
* A test the request EXCLUDES by name is not a cause to fix: its failure does not count for
|
|
900
|
+
* this request ({@link matchingExcludedTitles}), so it is dropped here rather than handed to the
|
|
901
|
+
* executor as work — a result that names it beside "it does not count" is the contradiction
|
|
902
|
+
* xr-molecule-flash-m101 filed (+12:00: the model spent a turn and an edit on the excluded test,
|
|
903
|
+
* on a page that was passing).
|
|
904
|
+
*
|
|
808
905
|
* @param log - The log of a finished or running run.
|
|
906
|
+
* @param excluded - The test titles the request carves out, if the caller knows them.
|
|
809
907
|
* @returns The causes, the one with the most tests first.
|
|
810
908
|
*/
|
|
811
|
-
export declare function failuresByCause(log: string): FailureCause[];
|
|
909
|
+
export declare function failuresByCause(log: string, excluded?: readonly string[]): FailureCause[];
|
|
812
910
|
/**
|
|
813
911
|
* The one-line-per-cause summary of a finished run's failures, or null when the run named fewer
|
|
814
912
|
* than two of them.
|
|
@@ -817,10 +915,23 @@ export declare function failuresByCause(log: string): FailureCause[];
|
|
|
817
915
|
* executor reads, so one round of fixes covers all of them rather than the one cause a run
|
|
818
916
|
* stopped early happened to reach.
|
|
819
917
|
*
|
|
918
|
+
* A test the request excludes is not one of the causes — it is dropped and named once, at the
|
|
919
|
+
* end, so a result never asks to fix a test it also says to ignore. Where the caller knows how
|
|
920
|
+
* the run was started, the note also hands over the narrowed re-run of exactly those tests
|
|
921
|
+
* ({@link rerunOfRunningSuite}) instead of leaving the executor to re-run the whole suite.
|
|
922
|
+
*
|
|
820
923
|
* @param log - The finished run's output.
|
|
924
|
+
* @param excluded - The test titles the request carves out, if the caller knows them.
|
|
925
|
+
* @param run - How the run was started, when the caller knows it: the narrowed re-run is built
|
|
926
|
+
* from `command`/`cwd`, and `log` (the path the output was written to) is what the "left out"
|
|
927
|
+
* sentence greps when more causes exist than the result has room for.
|
|
821
928
|
* @returns The note, or null.
|
|
822
929
|
*/
|
|
823
|
-
export declare function failureCausesNote(log: string
|
|
930
|
+
export declare function failureCausesNote(log: string, excluded?: readonly string[], run?: {
|
|
931
|
+
command: string;
|
|
932
|
+
cwd?: string;
|
|
933
|
+
log?: string;
|
|
934
|
+
}): string | null;
|
|
824
935
|
/**
|
|
825
936
|
* The command that re-runs the tests at `locations` the way the run IN FLIGHT ran them: the same
|
|
826
937
|
* invocation, in the same directory, narrowed to those tests — or null when the running command
|
|
@@ -836,12 +947,14 @@ export declare function failureCausesNote(log: string): string | null;
|
|
|
836
947
|
* @param run - The run in flight: the command it was started with, as it was run, and the
|
|
837
948
|
* directory that command ran in.
|
|
838
949
|
* @param locations - The failing `file:line`s to re-run, as the run's log printed them.
|
|
950
|
+
* @param excluded - The test titles the request carves out: the re-run inverts them out
|
|
951
|
+
* (`--grep-invert`) so it cannot report them again.
|
|
839
952
|
* @returns The re-run command, or null when there is no suite to narrow.
|
|
840
953
|
*/
|
|
841
954
|
export declare function rerunOfRunningSuite(run: {
|
|
842
955
|
command: string;
|
|
843
956
|
cwd?: string;
|
|
844
|
-
}, locations: readonly string[]): string | null;
|
|
957
|
+
}, locations: readonly string[], excluded?: readonly string[]): string | null;
|
|
845
958
|
/**
|
|
846
959
|
* The sentence that names a cause repeating among a running suite's failures, mid-run.
|
|
847
960
|
*
|
package/dist/utilities.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAS5C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,KAAG,MAEE,CAAA;AAuGhD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAKD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAsCzD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAUpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWnE;AAuDD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,8BAA8B,0CAA0C,CAAA;AAErF
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"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"}
|