localagentbrowser 1.41__tar.gz
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.
- localagentbrowser-1.41/CHANGELOG.md +336 -0
- localagentbrowser-1.41/LICENSE +21 -0
- localagentbrowser-1.41/MANIFEST.in +3 -0
- localagentbrowser-1.41/PKG-INFO +358 -0
- localagentbrowser-1.41/README.md +326 -0
- localagentbrowser-1.41/agent_browser.py +1107 -0
- localagentbrowser-1.41/localagentbrowser.egg-info/PKG-INFO +358 -0
- localagentbrowser-1.41/localagentbrowser.egg-info/SOURCES.txt +20 -0
- localagentbrowser-1.41/localagentbrowser.egg-info/dependency_links.txt +1 -0
- localagentbrowser-1.41/localagentbrowser.egg-info/entry_points.txt +2 -0
- localagentbrowser-1.41/localagentbrowser.egg-info/requires.txt +6 -0
- localagentbrowser-1.41/localagentbrowser.egg-info/top_level.txt +1 -0
- localagentbrowser-1.41/pyproject.toml +61 -0
- localagentbrowser-1.41/setup.cfg +4 -0
- localagentbrowser-1.41/tests/conftest.py +8 -0
- localagentbrowser-1.41/tests/fakes.py +119 -0
- localagentbrowser-1.41/tests/test_decisions.py +188 -0
- localagentbrowser-1.41/tests/test_duplicates.py +71 -0
- localagentbrowser-1.41/tests/test_journal.py +53 -0
- localagentbrowser-1.41/tests/test_main_loop.py +121 -0
- localagentbrowser-1.41/tests/test_model_turns.py +151 -0
- localagentbrowser-1.41/tests/test_page_text.py +74 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Every version of `agent_browser.py`, newest first. Each version is also a tagged commit (`v1.11` … `v1.28`).
|
|
4
|
+
Timings are from live runs on the development machine (Intel i5-9500, 6 cores, no GPU, Qwen2.5-7B-Instruct
|
|
5
|
+
Q4_K_M in LM Studio), where reading the prompt takes about 90% of every model call.
|
|
6
|
+
|
|
7
|
+
## [1.41] - 2026-10-15
|
|
8
|
+
### Added
|
|
9
|
+
- Published on PyPI: `pip install localagentbrowser`, then `python -m playwright install chromium` and run
|
|
10
|
+
`localagentbrowser`. A GitHub Actions workflow builds and publishes the package whenever a release is
|
|
11
|
+
published, using PyPI trusted publishing (no API token is stored).
|
|
12
|
+
- The source package includes the tests and this changelog.
|
|
13
|
+
### Changed
|
|
14
|
+
- The README's quick start installs from PyPI, and its links and image use full URLs so they also work on
|
|
15
|
+
the PyPI project page.
|
|
16
|
+
|
|
17
|
+
## [1.40] - 2026-10-15
|
|
18
|
+
### Changed
|
|
19
|
+
- Repeating a search that was already done is refused as before; from the second attempt the refusal says the
|
|
20
|
+
search did not find what was needed and to either search with clearly different words or FINISH and say in
|
|
21
|
+
the final result that it could not be found. On the strict Playwright objective the model had resubmitted
|
|
22
|
+
"Playwright Test Agents parameter schemas" three times in one turn.
|
|
23
|
+
|
|
24
|
+
Verification run on the same objective: four searches, all with different wording (so the new message was
|
|
25
|
+
not needed), five findings from the official docs source on GitHub and BrowserStack, including the generator
|
|
26
|
+
agent's definition file. It still had not finished after 54 minutes of model time: with an objective that
|
|
27
|
+
forbids finishing until everything is "fully validated", it keeps looking for parameter schemas these docs do
|
|
28
|
+
not contain. It also read a long guide part by part without recording the parts on the three agents, despite
|
|
29
|
+
the outline; recording while reading remains the main weakness.
|
|
30
|
+
|
|
31
|
+
## [1.39] - 2026-10-15
|
|
32
|
+
### Changed
|
|
33
|
+
- The page outline marks parts already read with "(read)", and re-reading a part needs one confirmation (repeating
|
|
34
|
+
the READ_MORE goes through). After a fresh prompt the model no longer saw its earlier reading and went back to
|
|
35
|
+
re-read parts of a setup guide it had read half an hour before, starting with a duplicate discovery.
|
|
36
|
+
|
|
37
|
+
Regression run on the original Playwright objective (1.38): the most detailed Playwright findings so far, seven
|
|
38
|
+
in all, including the per-client `init-agents` setup, the seed test file and how to prompt the agents after
|
|
39
|
+
setup; it attempted FINISH at about 40 minutes and was sent to the guide's unread parts. Stopped after 60
|
|
40
|
+
minutes when it started re-reading.
|
|
41
|
+
|
|
42
|
+
## [1.38] - 2026-10-15
|
|
43
|
+
### Fixed
|
|
44
|
+
- Asked for three Photoshop alternatives and their strengths, the final result listed four and added a
|
|
45
|
+
"My view" paragraph nobody asked for: both rules were late in one long instruction. The final-result step
|
|
46
|
+
now gives its rules as a short numbered list, including "if the objective asks for a specific number of
|
|
47
|
+
items, give exactly that many" and "do not add a 'My view' paragraph unless the objective explicitly asks
|
|
48
|
+
for your view, opinion or recommendation".
|
|
49
|
+
|
|
50
|
+
Replays on real findings: the list task gave exactly three items (GIMP, Krita, Darktable), cited, with no
|
|
51
|
+
opinion; the cats task, which does ask for an opinion, still ended with one, citing all six traditions. The
|
|
52
|
+
live run itself found all three items and chose FINISH right after the third (9 turns, 24 minutes of model
|
|
53
|
+
time).
|
|
54
|
+
|
|
55
|
+
## [1.37] - 2026-10-15
|
|
56
|
+
On a how-to (a sourdough starter with quantities for each day) the agent finished after 3 of 6 parts of a
|
|
57
|
+
recipe, and the final result invented the first water amount ("45 grams (about 1/4 cup)"; 45 g was the
|
|
58
|
+
daily feeding), added a step not in any finding, and added an unrequested "My view" with an unsupported
|
|
59
|
+
health claim.
|
|
60
|
+
### Added
|
|
61
|
+
- `research_report.md` flags every number in the final result that appears in none of the discoveries
|
|
62
|
+
("Numbers not found in the recorded discoveries: 1/4 ... check them before relying on this result").
|
|
63
|
+
- The finish check mentions unread parts of the current page; for a long page it points to the outline
|
|
64
|
+
instead of a bare count.
|
|
65
|
+
### Changed
|
|
66
|
+
- The final result step no longer sees the agent's own FINISH draft (which already contained the invented
|
|
67
|
+
amount), must not fill gaps with its own knowledge or guesses (no amounts, steps or advice the discoveries
|
|
68
|
+
do not contain), says when a requested detail was not found, and adds "My view" only when asked for one.
|
|
69
|
+
|
|
70
|
+
Replaying the final-result step on that run's findings: no invented amount, no "My view", and the number
|
|
71
|
+
check found nothing to flag (it flags "1/4" on the old result), though it left out the flour amounts it did
|
|
72
|
+
have. A live rerun showed both new checks working: the agent went looking for the missing details instead of
|
|
73
|
+
finishing, but read a long second source part by part, including parts about baking bread rather than the
|
|
74
|
+
starter; the long-page wording above addresses that.
|
|
75
|
+
|
|
76
|
+
## [1.36] - 2026-10-15
|
|
77
|
+
### Fixed
|
|
78
|
+
- On a comparison the model's own finish check read "Available Libraries: Not covered. Written at FINISH." and
|
|
79
|
+
it finished anyway: it had used "written at FINISH" (meant for its own opinion or recommendation) to skip a
|
|
80
|
+
part it had not found. The check now says only parts asking for the agent's own answer, opinion,
|
|
81
|
+
recommendation or summary are written at FINISH, never information it was asked to find.
|
|
82
|
+
- A FINISH whose own reasoning lists a part as "not covered" is sent back once to work on that part (for
|
|
83
|
+
example with a targeted SEARCH), at most twice per run, so a part that cannot be found does not block
|
|
84
|
+
finishing for good.
|
|
85
|
+
|
|
86
|
+
Rerun (a different source this time): a cited comparison of performance, ease of learning and Python's
|
|
87
|
+
libraries with a clear recommendation, in 16 turns and 33 minutes of model time. Rust's libraries were not
|
|
88
|
+
covered, and the model summarised its finish check ("all discoveries cover these aspects") instead of
|
|
89
|
+
listing each part, so the new check had nothing to act on.
|
|
90
|
+
|
|
91
|
+
## [1.35] - 2026-10-15
|
|
92
|
+
### Fixed
|
|
93
|
+
- Asked a one-answer question, the agent recorded the full answer on turn 3, said in its reasoning that "the
|
|
94
|
+
objective has been met", then kept reading the 33-part article for "interesting" details. The note after
|
|
95
|
+
every accepted DISCOVER now asks whether the discoveries cover every part of the objective and, if so, to
|
|
96
|
+
FINISH now; the system prompt also says to gather only what the objective asks for.
|
|
97
|
+
|
|
98
|
+
Rerun: FINISH on turn 4 with the correct, cited answer (Kilimanjaro, 5,895 m / 19,341 ft), in 12 minutes of
|
|
99
|
+
model time.
|
|
100
|
+
|
|
101
|
+
## [1.34] - 2026-10-14
|
|
102
|
+
### Changed
|
|
103
|
+
- Fresh prompts show each discovery shortened to 250 characters; the log and report keep the full text, and
|
|
104
|
+
duplicates are still checked against it. The growing discoveries list had become a quarter of every fresh
|
|
105
|
+
prompt.
|
|
106
|
+
- The conversation budget is 75% of the context length (was 67%), so fresh prompts are needed less often.
|
|
107
|
+
- The finish, progress and objective checks say that a part not found after looking in several places may
|
|
108
|
+
not be available: finish anyway and say in the final result what could not be found.
|
|
109
|
+
- The leave check is skipped for a page the agent has recorded something from on any visit, not just the
|
|
110
|
+
current one.
|
|
111
|
+
### Fixed
|
|
112
|
+
- `research_report.md` is now updated every turn. It was only written when the run ended normally, so a
|
|
113
|
+
killed process (or a crash) left no report.
|
|
114
|
+
|
|
115
|
+
Regression run on the original Playwright objective, compared with 1.33: fresh prompts averaged 162 s
|
|
116
|
+
instead of 234 s and took 16% of the model time instead of 28%. The run was stopped after 50 minutes with
|
|
117
|
+
6 findings: with an objective forbidding FINISH until everything is "fully validated", the agent kept
|
|
118
|
+
looking for parameter schemas the documentation does not contain.
|
|
119
|
+
|
|
120
|
+
## [1.33] - 2026-10-14
|
|
121
|
+
### Added
|
|
122
|
+
- Page outline: a page of 5 or more parts is first shown with a list of the headings in each part, and
|
|
123
|
+
`READ_MORE <number>` jumps straight to a part. On a 34-part guide the agent had been reading part after
|
|
124
|
+
part in order (part 4 of 33 with nothing new); with the outline it jumped straight to "Install the correct
|
|
125
|
+
loop definitions" (part 4) and recorded the four `--loop` values.
|
|
126
|
+
### Changed
|
|
127
|
+
- The leave check no longer counts the unread parts of a long page (which pushed the model to read them all
|
|
128
|
+
in order); it points to the outline instead.
|
|
129
|
+
|
|
130
|
+
Regression run on the original Playwright objective: the outline, error-page handling, leave check and
|
|
131
|
+
progress check all worked live, and the agent recorded 8 relevant findings, but it had not finished after
|
|
132
|
+
72 minutes. Fresh-prompt rebuilds took 28% of the model time, and the part-by-part check kept it looking for
|
|
133
|
+
"parameter schemas" the documentation does not contain. The next version addresses both.
|
|
134
|
+
|
|
135
|
+
## [1.32] - 2026-10-14
|
|
136
|
+
### Added
|
|
137
|
+
- The final result is written in a separate model call after FINISH, given only the objective, every
|
|
138
|
+
discovery (numbered, with its source) and the agent's draft. It must use only the discoveries, cite them
|
|
139
|
+
by number, and put the agent's own view (when the objective asks for one) in a paragraph starting
|
|
140
|
+
"My view:". The report shows this result; the agent's own FINISH text is kept in the log as `draft`.
|
|
141
|
+
In a live run the agent's reasoning noted that the requested opinion was missing, then finished with a
|
|
142
|
+
list of findings anyway; replaying this step on that run's findings produced a cited result with a clear
|
|
143
|
+
opinion in about 150 s. Citation numbers from a 7B model are not always right, so the README says to check.
|
|
144
|
+
- Pages answering with an HTTP error (404, 403 and so on) are recorded as failed navigations with the status,
|
|
145
|
+
and leaving them needs no confirmation. In a live run a guessed URL returned 404 and the agent was asked to
|
|
146
|
+
record something from the error page.
|
|
147
|
+
### Notes
|
|
148
|
+
- An earlier version of this step continued the browsing conversation to reuse LM Studio's cache. It then
|
|
149
|
+
used page text the agent had read but not recorded, and cited discoveries that did not say it (including
|
|
150
|
+
a claim contradicting the cited discovery). It now always uses a fresh prompt; this was about as fast.
|
|
151
|
+
|
|
152
|
+
## [1.31] - 2026-10-14
|
|
153
|
+
### Fixed
|
|
154
|
+
- The model recorded its own opinion as a discovery, attributed to a web page. The part-by-part check now
|
|
155
|
+
says parts asking for the agent's own answer, opinion or summary are "written at FINISH", never as a
|
|
156
|
+
DISCOVER, and the system prompt limits DISCOVER to information found on the page.
|
|
157
|
+
- With several pages in one conversation the model lost track of which page was current (it asked for
|
|
158
|
+
"part 3 of 4" of a 3-part page it had moved to). Every result note and refusal now states the current URL
|
|
159
|
+
and part.
|
|
160
|
+
|
|
161
|
+
Rerun on the cats objective: no opinion was recorded as a discovery and no page confusion occurred, but this
|
|
162
|
+
run's search led to a generic blog, and the agent stayed with that single source and finished with a list of
|
|
163
|
+
findings instead of an opinion. Results vary strongly with the first page found.
|
|
164
|
+
|
|
165
|
+
## [1.30] - 2026-10-14
|
|
166
|
+
### Changed
|
|
167
|
+
- The part-by-part check asks the model to write each part of the objective followed by the discovery that
|
|
168
|
+
covers it (or "not covered"), so claiming full coverage needs evidence for each part.
|
|
169
|
+
- The finish check and the scheduled objective check state how many pages the discoveries come from, and
|
|
170
|
+
point it out when everything comes from a single page. This is information, not a rule: some objectives
|
|
171
|
+
need one source, others many.
|
|
172
|
+
|
|
173
|
+
On the cats objective the agent now named six traditions (Egypt, Norse, Celtic, Islam, Eastern European
|
|
174
|
+
folklore, Japan) from two sources and stated its own opinion, in 18 turns (37 minutes of model time) instead
|
|
175
|
+
of finishing after one blog. It recorded that opinion as a discovery, though, which the next version fixes.
|
|
176
|
+
|
|
177
|
+
## [1.29] - 2026-10-14
|
|
178
|
+
Testing a very different objective (research how spiritual traditions view cats, then form an opinion)
|
|
179
|
+
showed the agent finishing after 9 turns with three findings from a single blog, naming no traditions, and
|
|
180
|
+
giving a summary instead of the opinion asked for. Its own reasoning said it should review the objective,
|
|
181
|
+
then it finished anyway.
|
|
182
|
+
### Added
|
|
183
|
+
- Check before finishing: the first FINISH of a turn gets a cheap retry asking the model to split the
|
|
184
|
+
objective into its parts and check each against its discoveries, and to finish only with the result the
|
|
185
|
+
objective asks for (an answer, opinion, summary or deliverable), not just a list of findings. Repeating
|
|
186
|
+
FINISH then goes through.
|
|
187
|
+
- `research_report.md`: a readable report with the final result and every discovery with its source,
|
|
188
|
+
written however the run ends (FINISH, the turn limit, Ctrl+C or a lost connection).
|
|
189
|
+
### Changed
|
|
190
|
+
- The progress and objective checks use the same part-by-part wording instead of asking whether the
|
|
191
|
+
discoveries "satisfy" the objective, which a small model answers yes to too easily.
|
|
192
|
+
- The system prompt's FINISH rule asks for every part to be covered and the final result in the parameter.
|
|
193
|
+
|
|
194
|
+
Rerunning the same objective: the check fired and the model named both parts of the objective, and its final
|
|
195
|
+
result now states a position instead of only summarising. It still judged one blog as covering "traditions
|
|
196
|
+
around the world", so coverage judgement needs more work.
|
|
197
|
+
|
|
198
|
+
## [1.28] - 2026-10-13
|
|
199
|
+
Preparing for publication.
|
|
200
|
+
### Added
|
|
201
|
+
- Settings through environment variables: `LMSTUDIO_BASE_URL`, `LMSTUDIO_MODEL`, `LMSTUDIO_API_KEY` and
|
|
202
|
+
`LMSTUDIO_CONTEXT_LENGTH`. The conversation token budget now follows the configured context length.
|
|
203
|
+
- Installable package (`pyproject.toml`) with a `localagentbrowser` command.
|
|
204
|
+
- Ctrl+C stops the agent with a short message instead of a traceback.
|
|
205
|
+
- Module docstring describing the agent, how to run it and its settings.
|
|
206
|
+
- Test suite (`tests/`, 67 pytest tests, about a second, no browser or model needed), a live test runner
|
|
207
|
+
(`tools/live_test.py`), ruff linting, and CI on Linux and Windows with Python 3.10–3.13.
|
|
208
|
+
- Contributing guide, code of conduct, security policy, issue and pull request templates, and Dependabot.
|
|
209
|
+
### Fixed
|
|
210
|
+
- The error raised after repeated invalid JSON now keeps the original parsing error as its cause.
|
|
211
|
+
### Removed
|
|
212
|
+
- The script that hid `navigator.webdriver` from websites. Hiding automation is not something this project
|
|
213
|
+
should do, and DuckDuckGo's HTML search does not need it.
|
|
214
|
+
|
|
215
|
+
## [1.27] - 2026-10-13
|
|
216
|
+
**First version to complete the test objective on its own:** FINISH on turn 13 (about 36 minutes) with
|
|
217
|
+
setup commands, the role of each agent and the project file layout recorded.
|
|
218
|
+
### Added
|
|
219
|
+
- Confirm-before-leaving check: the first attempt to SEARCH or NAVIGATE away from a content page the agent
|
|
220
|
+
has recorded nothing from gets a cheap retry asking it to DISCOVER first (mentioning any unread parts).
|
|
221
|
+
Repeating the same action then goes through, so leaving without a discovery costs one short retry.
|
|
222
|
+
Search result pages are exempt.
|
|
223
|
+
|
|
224
|
+
## [1.26] - 2026-10-13
|
|
225
|
+
### Changed
|
|
226
|
+
- Progress and objective checks now tell the model to record what is on the current page first. Repeated
|
|
227
|
+
every turn, the old wording pushed the model to navigate away without reading what was in front of it.
|
|
228
|
+
- The progress check fires every 4 turns without a discovery instead of every turn once triggered.
|
|
229
|
+
- The journal sent to the model is one line per entry instead of indented JSON: about 40% smaller, which
|
|
230
|
+
makes every full prompt cheaper.
|
|
231
|
+
|
|
232
|
+
## [1.25] - 2026-10-13
|
|
233
|
+
### Added
|
|
234
|
+
- Scheduled objective check every 8 turns, even while discoveries continue, because discoveries on loosely
|
|
235
|
+
related topics kept resetting the progress check and the agent drifted off the objective.
|
|
236
|
+
|
|
237
|
+
## [1.24] - 2026-10-13
|
|
238
|
+
### Added
|
|
239
|
+
- Progress check: after 4 turns without a new discovery the model is asked to compare its discoveries with
|
|
240
|
+
the objective and either FINISH or say what is missing and go find it. Without it the agent never finished.
|
|
241
|
+
|
|
242
|
+
## [1.23] - 2026-10-13
|
|
243
|
+
### Changed
|
|
244
|
+
- Going back to a previously visited page is allowed. Only the page the agent is already on is refused, and
|
|
245
|
+
each URL is capped at 3 visits to stop back-and-forth loops. The old "never revisit" rule kept the agent
|
|
246
|
+
from returning to its best source.
|
|
247
|
+
### Fixed
|
|
248
|
+
- The FINISH entry, with the agent's final summary, was never written to `research_log.txt`: the loop exited
|
|
249
|
+
before the per-turn save. (Present since the first version.)
|
|
250
|
+
|
|
251
|
+
## [1.22] - 2026-10-13
|
|
252
|
+
### Changed
|
|
253
|
+
- Duplicate discoveries are recognised by consecutive word pairs, so line breaks, commas, punctuation and the
|
|
254
|
+
order of lines no longer make old information look new. A discovery that adds even one new line is kept.
|
|
255
|
+
- While a conversation continues, a new page lists only links not shown yet. Before, every page on a site
|
|
256
|
+
listed the same 15 menu links and the agent never saw links in the page content.
|
|
257
|
+
|
|
258
|
+
## [1.21] - 2026-10-13
|
|
259
|
+
### Changed
|
|
260
|
+
- The conversation also continues across page changes: the new page or search results are appended
|
|
261
|
+
instead of rebuilding the prompt. A fresh prompt is built only near the token budget (or after 12 turns).
|
|
262
|
+
### Fixed
|
|
263
|
+
- `READ_MORE` parameters such as `"2 of 2"` or `"part 3"` now go to that part instead of simply the next one.
|
|
264
|
+
|
|
265
|
+
## [1.20] - 2026-10-13
|
|
266
|
+
### Added
|
|
267
|
+
- Same-page turns continue the previous conversation, appending only what changed (a result note or the
|
|
268
|
+
next page part). DISCOVER and READ_MORE turns dropped from 150–220 s to 35–120 s.
|
|
269
|
+
### Changed
|
|
270
|
+
- The first cheap-retry correction lists the alternative actions; without them the model resubmitted the
|
|
271
|
+
same refused action.
|
|
272
|
+
- Pause between turns reduced from 3 s to 1 s.
|
|
273
|
+
|
|
274
|
+
## [1.19] - 2026-10-13
|
|
275
|
+
### Added
|
|
276
|
+
- Cheap retries: a reply that would be refused (or is invalid JSON) is answered with a short correction in
|
|
277
|
+
the same conversation, so LM Studio reuses the processed prompt. A retry costs about 25–45 s instead of a
|
|
278
|
+
whole wasted turn (150–200 s). Up to 2 per turn.
|
|
279
|
+
- One place (`check_decision`) for every rule that can refuse a decision before acting.
|
|
280
|
+
### Fixed
|
|
281
|
+
- Duplicate check treats curly and straight quotes alike.
|
|
282
|
+
|
|
283
|
+
## [1.18] - 2026-10-13
|
|
284
|
+
### Fixed
|
|
285
|
+
- The model kept sending DISCOVER with an empty parameter. Replaying the prompt showed it treated DISCOVER as
|
|
286
|
+
a command that would extract for it; one sentence in the system prompt ("you must write the information
|
|
287
|
+
itself into the parameter") fixed it in every replay.
|
|
288
|
+
|
|
289
|
+
## [1.17] - 2026-10-13
|
|
290
|
+
### Added
|
|
291
|
+
- Near-duplicate discoveries (same lines in a different order or grouping) are refused.
|
|
292
|
+
- After two refused actions in a row the warning lists the actions still available.
|
|
293
|
+
- Empty DISCOVER parameters are refused.
|
|
294
|
+
|
|
295
|
+
## [1.16] - 2026-10-13
|
|
296
|
+
### Changed
|
|
297
|
+
- Prompt reordered so consecutive turns share a longer identical beginning that LM Studio can reuse: no
|
|
298
|
+
counters in headers, journal trimmed in batches of 6, sections ordered from least to most often changed.
|
|
299
|
+
About 25% faster per turn.
|
|
300
|
+
|
|
301
|
+
## [1.15] - 2026-10-12
|
|
302
|
+
### Added
|
|
303
|
+
- Pages are read in parts of about 2,500 characters with a new `READ_MORE` action, instead of being cut off
|
|
304
|
+
at 4,500 characters.
|
|
305
|
+
- Navigation menus, footers and cookie/consent banners are hidden before reading a page.
|
|
306
|
+
- Parts end at paragraph boundaries; code blocks and tables are never split.
|
|
307
|
+
- DuckDuckGo error pages are retried once, and a failed search is not counted as tried.
|
|
308
|
+
|
|
309
|
+
## [1.14] - 2026-10-12
|
|
310
|
+
### Added
|
|
311
|
+
- Repeated searches and page visits are blocked in code, with an "already tried" list in the prompt.
|
|
312
|
+
- Stronger instruction to DISCOVER relevant information before leaving a page.
|
|
313
|
+
### Changed
|
|
314
|
+
- Smaller prompts: 8 search results, 200-character snippets, shorter journal thoughts.
|
|
315
|
+
|
|
316
|
+
## [1.13] - 2026-10-12
|
|
317
|
+
### Changed
|
|
318
|
+
- Search moved from Google to DuckDuckGo's HTML endpoint; results are parsed into a numbered list of titles,
|
|
319
|
+
real URLs and snippets.
|
|
320
|
+
- Pages are read as their main text plus a list of links, so NAVIGATE uses real URLs.
|
|
321
|
+
- The journal sent to the model is capped; invalid JSON is retried; the reply is constrained to a JSON schema.
|
|
322
|
+
- Page loads wait for the DOM instead of a fixed 10-second sleep plus network idle.
|
|
323
|
+
### Fixed
|
|
324
|
+
- The duplicate-URL check ignored the query string, so every search after the first was blocked as a
|
|
325
|
+
duplicate (34 of 35 turns in the last run of v1.12).
|
|
326
|
+
|
|
327
|
+
## [1.12] - 2026-10-12
|
|
328
|
+
### Added
|
|
329
|
+
- Loop warning: a parameter the model has already used triggers a "pivot your query" warning on the next turn.
|
|
330
|
+
### Fixed
|
|
331
|
+
- List-type parameters from the model are handled; query values extracted from Google URLs are unwrapped.
|
|
332
|
+
|
|
333
|
+
## [1.11] - 2026-10-12
|
|
334
|
+
### Added
|
|
335
|
+
- First version: a local model in LM Studio chooses SEARCH, NAVIGATE, DISCOVER or FINISH as JSON; Playwright
|
|
336
|
+
drives Chromium; a journal of actions and findings is saved to `research_log.txt`.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SnowFX
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|