153 Commits
Author SHA1 Message Date
Mark CliandGitHub ca9f46ca91 Merge pull request #49 from only-cli/release/0.5.1
release: 0.5.1
v0.5.1
2026-09-02 10:50:53 -04:00
only-cli 73ac4e863a release: 0.5.1
Version 0.5.1 in package.json, the lockfile, the plugin manifest, the
marketplace entry, and the npx pins inside the skill. CHANGELOG covers the
fingerprint fallback (#40), the footer no longer offering planned commands
(#44), and find in every footer (#46). The README install note and llms.txt
now describe the full transport chain: Chrome, then Firefox, then native
fetch.
2026-09-02 10:49:23 -04:00
Mark CliandGitHub 10bf7b3b82 Merge pull request #48 from only-cli/test/cache-and-cli-dispatch
test: cover the day cache and cli dispatch directly
2026-09-02 10:47:30 -04:00
Mark CliandGitHub cbf2de39de Merge pull request #47 from only-cli/feat/find-in-footer
feat: offer find in every actions footer
2026-09-02 10:47:26 -04:00
only-cli 5657d60771 test: cover the day cache and cli dispatch directly
cache.js had no test importing it, and cli.js was tested only through its
auth commands. Both now have a file of their own.

tests/cache.test.js proves the policy the module's comment states: a miss
fetches, parses, and writes under host and extension; a fresh copy is served
from disk without touching the network; a copy older than a day is refetched
and replaced; a body the parser rejects is never written, and a stale good
copy survives such a refetch; a cache directory that cannot be created costs
only the refetch. The network is a local proxy that records what it sees, so
"never asked" is asserted, not assumed.

tests/cli.test.js spawns the real binary against a throwaway OC_HOME with a
page seeded straight into a session file, so read, next, find, and do on
text all have something to answer with and nothing fetches. It covers help
on no command and both help flags, the help text naming every dispatchable
command once, unknown first words, a site name reaching the shortcut
resolver before being called unknown, budget and session name validation
running before any command, the nothing-open message from every session
command, the usage lines of open, raw, read, find, and do, do on a text
number reading in place with a recording proxy proving no request left, the
four planned commands failing with one line that names themselves, sites,
and flags placed before or after the command.

Each test was checked against a deliberate break in the code it guards.
2026-09-02 10:38:28 -04:00
only-cli e1ff0f63c4 feat: offer find in every actions footer
find is the cheapest way to go deeper on a rendered page: one command lands
on the block that matters, where read needs the right number first and next
pages toward it. SKILL.md already lists it first under "going further,
cheapest first", but no footer offered it, and the footer is what an agent
actually reads, so callers were steered toward read, next, and raw instead.

The entry now appears in all three footers, after do and before read, so the
order matches the skill. On find's own output it turns the "narrow the
query" hint into an action.

Cost on the fixtures is 3 or 4 tokens per render (news 127 to 131, login 30
to 33, forum 695 to 699). Skipping one next on a long page pays for a
hundred of those.

The test checks the same three footer sites as the stub probe: find is
present and listed ahead of read. It fails on main.

Closes #46.
2026-09-02 09:38:07 -04:00
Mark CliandGitHub 4aabae8340 Merge pull request #45 from nemekath/fix/footer-advertises-unavailable-commands
Drop fill and submit from the actions footer, they always throw
2026-09-02 09:13:51 -04:00
Mark CliandGitHub 227d6928c5 Merge pull request #41 from only-cli/fix/impers-unsupported-fingerprint
fix: fall back to firefox, then plain fetch, when impers refuses a fingerprint
2026-09-02 09:12:38 -04:00
Mark CliandGitHub 7f3e626a4d Merge pull request #43 from only-cli/dependabot/github_actions/codeql-action-64c8a27a46
chore(deps): bump the codeql-action group with 3 updates
2026-09-01 18:33:05 -04:00
Mark CliandGitHub 376851c6fa Merge pull request #42 from only-cli/dependabot/npm_and_yarn/impers-0.1.1
chore(deps): bump impers from 0.1.0 to 0.1.1
2026-09-01 18:32:52 -04:00
Benjamin Z.andClaude Opus 5 21566143d1 Drop fill and submit from the actions footer, they always throw
The footer is the line an agent reads to pick its next command, so a name
in it that cannot run costs a turn and returns nothing. fill and submit are
still stubs, so every page with an input was offering two commands that
throw NotImplemented. Removing them also takes 7 tokens off the rendered
news fixture and 6 off login.

The test probes act.js for handlers that throw NotImplemented rather than
listing them by name, so the next stub to land is covered without anyone
remembering to come back here. It checks all three footers: the render, and
both of find's paths.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 00:28:51 +02:00
dependabot[bot]andGitHub dfc9e25436 chore(deps): bump the codeql-action group with 3 updates
Bumps the codeql-action group with 3 updates: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/analyze](https://github.com/github/codeql-action) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/init` from 4.37.8 to 4.37.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938)

Updates `github/codeql-action/analyze` from 4.37.8 to 4.37.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938)

Updates `github/codeql-action/upload-sarif` from 4.37.8 to 4.37.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938)

---
updated-dependencies:
- dependency-name: github/codeql-action/init
  dependency-version: 4.37.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.37.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.37.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-01 04:52:31 +00:00
dependabot[bot]andGitHub b7c57e6e0b chore(deps): bump impers from 0.1.0 to 0.1.1
Bumps [impers](https://github.com/lexiforest/impers) from 0.1.0 to 0.1.1.
- [Commits](https://github.com/lexiforest/impers/compare/v0.1.0...v0.1.1)

---
updated-dependencies:
- dependency-name: impers
  dependency-version: 0.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-01 04:49:26 +00:00
only-cli b02dce55af fix: fall back to firefox, then plain fetch, when impers refuses a fingerprint
impers resolves the chrome alias to its newest fingerprint (chrome150 as
of impers 0.1.1), but the native library it loads can be an older system
copy of libcurl-impersonate found before its own pinned download. Such a
copy refuses the fingerprint with an ImpersonateError before any request
leaves, and oc died on the spot with "Impersonating chrome150 is not
supported" (#40).

A refused identity now downgrades the same way a 403 already did: chrome
falls back to firefox, and when both are refused the plain fetch
transport still gets the page. Any other impers failure propagates
unchanged.
2026-08-31 09:11:36 -04:00
Mark CliandGitHub 65322bc5b6 Merge pull request #39 from only-cli/docs/readme-highlights
docs: lead Benchmarks with headline numbers, group auth and proxies under Features
2026-08-26 09:36:39 -04:00
only-cli ba49303527 docs: lead the Benchmarks section with headline numbers, group auth and proxies under Features 2026-08-26 09:32:03 -04:00
Mark CliandGitHub 7f1f109b8e Merge pull request #38 from only-cli/docs/sync-benchmarks
docs: sync the Benchmarks section with the benchmarks README
2026-08-25 10:53:39 -04:00
only-cli 2a5f97204e docs: sync the Benchmarks section with the benchmarks README
Add the language docs suite and the Playwright MCP row, fold the wiki
and docs results into one table, and note where the Codex runs split.
2026-08-25 10:52:12 -04:00
only-cli ccc0cf4476 docs: explain the search shapes a site definition can use, cover every DuckDuckGo search verb
CONTRIBUTING described a command as a URL template only, so a contributor
adding a docs site had no way to learn that a search verb can also name a
static index (sphinx, rdoc, nodedoc), a JSON endpoint (api), or fall back
to DuckDuckGo with a site: filter, or how to pick between them. It also
still counted six files in src/.

The rust, java, ts, and php search verbs had no test; only cpp's did. #25
asked for both verbs per language to be covered offline.
2026-08-25 09:46:23 -04:00
Mark CliandGitHub c12ecf060d Merge pull request #37 from only-cli/chore/codeql-action-v4
ci: bump github/codeql-action to v4.37.8, group its Dependabot updates
2026-08-25 07:55:28 -04:00
only-cliandClaude Fable 5 59964c5dca ci: bump github/codeql-action to v4.37.8, group its Dependabot updates
Dependabot opened separate PRs for init (#35) and analyze (#34). Each
failed because the two steps must run the same version of the action.
Bump init, analyze and upload-sarif together and add a Dependabot group
so future codeql-action bumps arrive as one PR.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-25 07:54:03 -04:00
Mark CliandGitHub 2c8b8f20c4 Merge pull request #36 from only-cli/dependabot/github_actions/actions/dependency-review-action-5.0.0
chore(deps): bump actions/dependency-review-action from 4.9.0 to 5.0.0
2026-08-25 07:53:24 -04:00
Mark CliandGitHub c3952be485 Merge pull request #33 from only-cli/dependabot/github_actions/ossf/scorecard-action-2d1146689b8cda280b9bc96326124645441f03bc
chore(deps): bump ossf/scorecard-action from 55891bbd73f2425e97637d96e306fc9d491d0b21 to 2d1146689b8cda280b9bc96326124645441f03bc
2026-08-25 07:49:10 -04:00
Mark CliandGitHub 0cf453d02c Merge pull request #32 from only-cli/dependabot/github_actions/actions/upload-artifact-7.0.1
chore(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1
2026-08-25 07:48:28 -04:00
dependabot[bot]andGitHub 8d4c4ca4eb chore(deps): bump actions/dependency-review-action from 4.9.0 to 5.0.0
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.9.0 to 5.0.0.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/2031cfc080254a8a887f58cffee85186f0e49e48...a1d282b36b6f3519aa1f3fc636f609c47dddb294)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-25 04:45:55 +00:00
dependabot[bot]andGitHub 625048a7d1 chore(deps): bump ossf/scorecard-action
Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 55891bbd73f2425e97637d96e306fc9d491d0b21 to 2d1146689b8cda280b9bc96326124645441f03bc.
- [Release notes](https://github.com/ossf/scorecard-action/releases)
- [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md)
- [Commits](https://github.com/ossf/scorecard-action/compare/55891bbd73f2425e97637d96e306fc9d491d0b21...2d1146689b8cda280b9bc96326124645441f03bc)

---
updated-dependencies:
- dependency-name: ossf/scorecard-action
  dependency-version: 2d1146689b8cda280b9bc96326124645441f03bc
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-25 04:44:13 +00:00
dependabot[bot]andGitHub a274761a7b chore(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.2 to 7.0.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/ea165f8d65b6e75b540449e92b4886f43607fa02...043fb46d1a93c77aae656e7c1c64a875d1fc6a0a)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-25 04:44:10 +00:00
only-cli cad6fb4596 docs: sync benchmark numbers to the 0.5.0 run, fix the skill's site list 2026-08-24 21:50:31 -04:00
only-cli 537ddf7d3b docs: copy edits v0.5.0 2026-08-24 21:33:14 -04:00
Mark CliandGitHub e34304a305 Merge pull request #31 from only-cli/release/0.5.0
release: 0.5.0
2026-08-24 21:32:28 -04:00
only-cli 4b6b81f8a0 release: 0.5.0 2026-08-24 21:30:31 -04:00
Mark CliandGitHub 4b3abf218b Merge pull request #26 from only-cli/feat/language-docs
Add language documentation shortcuts (#25): Python, MDN, Node.js, Ruby, Go, Rust, Java, PHP, TypeScript, C/C++, and .NET
2026-08-24 21:27:21 -04:00
only-cli 870ff2cf73 merge main: authenticated sessions via per-session cookie jars 2026-08-24 21:25:44 -04:00
Mark CliandGitHub 06a46abc39 Merge pull request #30 from RonCodes88/feat/authenticated-sessions
feat: authenticated sessions via per-session cookie jars
2026-08-24 21:07:59 -04:00
RonCodes88 e6218a5a5a test: assert the IPv6 tunnel host directly so node's SAN change stops breaking CI 2026-08-25 09:54:35 +09:00
RonCodes88 7aed46ed56 docs: recommend piping the cookie header and explain what logout removes 2026-08-25 09:38:34 +09:00
RonCodes88 218afd7f83 test: cover http downgrades, bare TLDs, control characters, and jar caps 2026-08-25 09:38:34 +09:00
RonCodes88 fd3e3f7681 feat: read the cookie header from stdin and make logout forget the saved page too 2026-08-25 09:38:34 +09:00
RonCodes88 448ac8b7d8 fix: keep seeded cookies https-only and reject unsafe domains, cookie values, and oversized jars 2026-08-25 09:38:34 +09:00
only-cli b0d99cdc14 docs: list the new language references in llms.txt and the changelog 2026-08-24 16:07:11 -04:00
only-cli 86ac90c35f skill: say the docs-search note in a third of the tokens
The skill is paid for on every load, so the note naming which search
verbs run locally now says it in one clause instead of four.
2026-08-24 16:00:49 -04:00
RonCodes88 f9fde64318 Merge upstream/main into feat/authenticated-sessions 2026-08-25 04:18:27 +09:00
RonCodes88 a21db1fc96 Merge upstream/main into feat/authenticated-sessions 2026-08-25 04:15:41 +09:00
RonCodes88 db1e5bb7ef chore: keep saved sessions and cookie files out of git 2026-08-25 04:09:51 +09:00
RonCodes88 c84496a95e docs: document authenticated sessions and the login/logout commands 2026-08-25 04:09:51 +09:00
RonCodes88 f8d813a3f3 test: cover cookie sessions, login detection, and proxy edge cases 2026-08-25 04:09:51 +09:00
RonCodes88 d761f5604d feat: add authenticated browsing with per-session cookie jars 2026-08-25 04:09:51 +09:00
only-cli c880918f3b merge main: scorecard hardening and the fetch/render bounding fixes 2026-08-24 14:00:06 -04:00
only-cli b18e9e5179 fix: cap page-written scalars at the render boundary
The title and every heading are the page's to write, and both skipped
truncate(), so one hostile scalar could print unbounded output whatever
the budget said. The compact view now cuts titles, headings, and input
names at the same cap and marker every other block gets, and read cuts
even a first block bigger than its whole budget, since 'up to N tokens'
is a promise the page must not be able to break. The distilled page
keeps the full values: --json stays the machine-stable view, bounded by
the fetch cap, and machines cut for themselves.

Fixes #28
2026-08-24 13:59:27 -04:00
only-cli 886ce58e27 fix: judge an unreadable page by evidence, not by length alone
contentFailure called every render under 25 tokens a failure, which
made exit 2 claim a terse page was JavaScript-only, gated, or
challenged when it had simply arrived terse. The verdict now needs
evidence: nothing extracted is empty whatever the page weighed, and a
short render is only a failure when the markup behind it was far too
big to have carried only that. A status endpoint or a one-line answer
now exits 0, script-only shells and consent walls still exit 2, and
raw applies the same rule before refusing. The --json empty field
follows the same policy, so callers keep a machine-stable distinction
between empty and merely short.

Fixes #29
2026-08-24 13:59:27 -04:00