From 02a5a605b045fea0c092fe94e549d2d191ab3089 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 21 Sep 2026 12:18:34 +0000 Subject: [PATCH] docs(site): npm 0.6.3 copy and DSH flat credentials beat Bump Current npm and changelog links to 0.6.3 on the static site. Replace the 0.6.2 DSH version-quote note with flat KEY map preflight copy on harness cards and llms.txt. Extend landingAgentReadiness tests. Co-authored-by: Paul Zgordan --- site/about/index.html | 2 +- site/about/index.md | 2 +- site/docs/index.html | 2 +- site/docs/index.md | 2 +- site/harnesses/index.html | 2 +- site/harnesses/index.md | 2 +- site/index.md | 2 +- site/llms.txt | 4 ++-- src/site/landingAgentReadiness.test.ts | 21 ++++++++++++++++----- 9 files changed, 25 insertions(+), 14 deletions(-) diff --git a/site/about/index.html b/site/about/index.html index ba83be3..36c5453 100644 --- a/site/about/index.html +++ b/site/about/index.html @@ -44,7 +44,7 @@

About Agent Looper

  • Product site
  • Source
  • npm
  • -
  • Changelog — 0.6.2
  • +
  • Changelog — 0.6.3
  • Author
  • diff --git a/site/about/index.md b/site/about/index.md index 8adc032..739ed07 100644 --- a/site/about/index.md +++ b/site/about/index.md @@ -9,5 +9,5 @@ Agent Looper is made by Paul Zgordan (dancingteeth), who also writes at The Vacu - Product: https://looper.dancingteeth.net/ - Source: https://github.com/dancingteeth/agent-looper - npm: https://www.npmjs.com/package/@dancingteeth/agent-looper -- Changelog (0.6.2): https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md +- Changelog (0.6.3): https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md - Author: https://dancingteeth.net/ diff --git a/site/docs/index.html b/site/docs/index.html index 6ccd1d2..5527889 100644 --- a/site/docs/index.html +++ b/site/docs/index.html @@ -50,7 +50,7 @@

    Agent Looper developer resources

  • Claude runtime — Claude Code CLI
  • Embed API — contract for embedding Agent Looper
  • Security — reporting vulnerabilities
  • -
  • Changelog — 0.6.2
  • +
  • Changelog — 0.6.3
  • Agent Looper llms.txt
  • Agent Looper homepage (markdown)
  • diff --git a/site/docs/index.md b/site/docs/index.md index 97a5028..ec4efed 100644 --- a/site/docs/index.md +++ b/site/docs/index.md @@ -14,7 +14,7 @@ Agent Looper is the npm package `@dancingteeth/agent-looper` and the CLI `agent- - Claude runtime (Claude Code CLI): https://github.com/dancingteeth/agent-looper/blob/main/docs/claude-runtime.md - Embed API (contract for embedding Agent Looper): https://github.com/dancingteeth/agent-looper/blob/main/docs/embed-api.md - Security (reporting vulnerabilities): https://github.com/dancingteeth/agent-looper/blob/main/SECURITY.md -- Changelog (0.6.2): https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md +- Changelog (0.6.3): https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md - Agent Looper llms.txt: https://looper.dancingteeth.net/llms.txt - Agent Looper homepage (markdown): https://looper.dancingteeth.net/index.md diff --git a/site/harnesses/index.html b/site/harnesses/index.html index 8fea7d5..6276d7f 100644 --- a/site/harnesses/index.html +++ b/site/harnesses/index.html @@ -133,7 +133,7 @@

    DSH

    Judge deepseek-v4-pro

    pnpm exec agent-loop run .cursor/loops/my-task --runtime dsh --review-gate

    -

    Default worker stays deepseek-official/deepseek-v4-flash; opt in to deepseek-official/deepseek-flash (DeepSeek-V41-Flash, image-capable) per loop in setup. Ensure dsh is on PATH. In ~/.dsh/.credentials.yaml, use version: "1" (quoted) — a bare YAML integer breaks headless boot; the harness prints a one-line fix. DSH companion plugin guard blocks accidental foreground grinds. See docs/dsh-plugin.md and plugins/dsh-agent-looper/.

    +

    Default worker stays deepseek-official/deepseek-v4-flash; opt in to deepseek-official/deepseek-flash (DeepSeek-V41-Flash, image-capable) per loop in setup. Ensure dsh is on PATH. ~/.dsh/.credentials.yaml must be a flat KEY: "string" map — a wrapped store (version / refs / records) or YAML integer fails agent-check dsh and agent-loop run before spawning the worker. Quoting version alone is not enough; the harness does not rewrite that file. DSH companion plugin guard blocks accidental foreground grinds. See docs/dsh-plugin.md and plugins/dsh-agent-looper/.

    diff --git a/site/harnesses/index.md b/site/harnesses/index.md index ad718ba..631fb64 100644 --- a/site/harnesses/index.md +++ b/site/harnesses/index.md @@ -41,7 +41,7 @@ DeepSeek Harness CLI — worker is `dsh --profile headless`; `dsh-agent-looper` - Worker: `deepseek-official/deepseek-v4-flash` (escalates to `deepseek-official/deepseek-v4-pro`) — default; opt in per loop to `deepseek-official/deepseek-flash` (DeepSeek-V41-Flash, image-capable) - Judge: `deepseek-official/deepseek-v4-pro` (when `reviewRuntime: dsh`) - Run: `pnpm exec agent-loop run .cursor/loops/my-task --runtime dsh --review-gate` -- In `~/.dsh/.credentials.yaml`, use `version: "1"` (quoted) — a bare YAML integer breaks headless boot; the harness prints a one-line fix. +- `~/.dsh/.credentials.yaml` must be a flat `KEY: "string"` map — a wrapped store (`version` / `refs` / `records`) or YAML integer fails `agent-check dsh` and `agent-loop run` before spawning the worker. Quoting `version` alone is not enough; the harness does not rewrite that file. - DSH companion plugin guard blocks accidental foreground grinds ### Cline (`--runtime cline-pass` · `cline`) diff --git a/site/index.md b/site/index.md index a116226..4370dbc 100644 --- a/site/index.md +++ b/site/index.md @@ -131,7 +131,7 @@ This tool is free. We keep building it when the community actually uses it and t - [llms.txt](https://looper.dancingteeth.net/llms.txt) - [Harnesses](https://looper.dancingteeth.net/harnesses/) - [Developer resources](https://looper.dancingteeth.net/docs/) -- [Changelog (0.6.2)](https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md) +- [Changelog (0.6.3)](https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md) - [Embed API](https://github.com/dancingteeth/agent-looper/blob/main/docs/embed-api.md) - [Security](https://github.com/dancingteeth/agent-looper/blob/main/SECURITY.md) - [GitHub](https://github.com/dancingteeth/agent-looper) diff --git a/site/llms.txt b/site/llms.txt index d4d1918..424ab80 100644 --- a/site/llms.txt +++ b/site/llms.txt @@ -6,7 +6,7 @@ When to use Agent Looper: a human wants a feature finished without babysitting C When not to use Agent Looper: there is no deterministic check (pure taste with no script or vision gate); you need a team-ops factory, shared org cloud, or multi-repo orchestration; you want the model to grade itself as “done.” -How an agent should call it: install `@dancingteeth/agent-looper`, ask the human what they want, then implement the feature with Agent Looper (set up the loop, write GOAL.md and verify.sh, run until green). Or from the terminal: `pnpm exec agent-loop-setup` (one-screen setup wizard — recap plus current question) then `pnpm exec agent-loop-prompt --out .cursor/loops/` — the scaffold judge stops as soon as frozen GOAL.md and verify.sh pass freeze (10-minute wall, not a long grind) — then `pnpm exec agent-loop run .cursor/loops/ --runtime `. On `runtime: cursor`, repo defaults that pin OpenCode Go `escalateModel` are not applied; Composer plus another judge uses `reviewRuntime` / `reviewModel`, not `escalateModel`. DSH headless: in `~/.dsh/.credentials.yaml`, quote `version` as `version: "1"` (a bare YAML integer breaks boot). Optional `--review-gate` re-opens the loop only on blocking review findings. If verify fails because the environment is broken, the loop waits instead of burning another worker. After each visit the harness restores frozen specs and removes any frozen basename a worker planted (e.g. `setup.sh`) so it cannot persist. OpenCode Go and Cline Pass model lists and list prices come from models.dev; unknown well-formed slugs warn at start and read `$0` until priced — budget caps still reject unpriced worker or escalate models. CLI binaries: `agent-loop`, `agent-loop-prompt`. Current npm: **0.6.2** (supported line **0.6.x**). +How an agent should call it: install `@dancingteeth/agent-looper`, ask the human what they want, then implement the feature with Agent Looper (set up the loop, write GOAL.md and verify.sh, run until green). Or from the terminal: `pnpm exec agent-loop-setup` (one-screen setup wizard — recap plus current question) then `pnpm exec agent-loop-prompt --out .cursor/loops/` — the scaffold judge stops as soon as frozen GOAL.md and verify.sh pass freeze (10-minute wall, not a long grind) — then `pnpm exec agent-loop run .cursor/loops/ --runtime `. On `runtime: cursor`, repo defaults that pin OpenCode Go `escalateModel` are not applied; Composer plus another judge uses `reviewRuntime` / `reviewModel`, not `escalateModel`. DSH headless: `~/.dsh/.credentials.yaml` must be a flat `KEY: "string"` map — a wrapped store (`version` / `refs` / `records`) or YAML integer fails `agent-check dsh` and `agent-loop run` before spawning the worker; quoting `version` alone is not enough (the harness does not rewrite that file). Optional `--review-gate` re-opens the loop only on blocking review findings. If verify fails because the environment is broken, the loop waits instead of burning another worker. After each visit the harness restores frozen specs and removes any frozen basename a worker planted (e.g. `setup.sh`) so it cannot persist. OpenCode Go and Cline Pass model lists and list prices come from models.dev; unknown well-formed slugs warn at start and read `$0` until priced — budget caps still reject unpriced worker or escalate models. CLI binaries: `agent-loop`, `agent-loop-prompt`. Current npm: **0.6.3** (supported line **0.6.x**). ## Developer resources @@ -23,7 +23,7 @@ How an agent should call it: install `@dancingteeth/agent-looper`, ask the human - [Claude runtime](https://github.com/dancingteeth/agent-looper/blob/main/docs/claude-runtime.md): Claude Code CLI (`--safe-mode`) - [Embed API](https://github.com/dancingteeth/agent-looper/blob/main/docs/embed-api.md): contract for embedding Agent Looper - [Security](https://github.com/dancingteeth/agent-looper/blob/main/SECURITY.md): reporting vulnerabilities -- [Changelog](https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md): 0.6.2 +- [Changelog](https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md): 0.6.3 - [Harnesses — Agent Looper worker runtimes](https://looper.dancingteeth.net/harnesses/index.md) ## Optional diff --git a/src/site/landingAgentReadiness.test.ts b/src/site/landingAgentReadiness.test.ts index c264578..a2adb53 100644 --- a/src/site/landingAgentReadiness.test.ts +++ b/src/site/landingAgentReadiness.test.ts @@ -652,7 +652,7 @@ describe('landing agent readiness', () => { } }) - it('names 0.6.2 setup wizard, env-wait, harness setup, frozen restore, plant block, models.dev soft-gate, Cursor escalate, scaffold wall, DSH credentials version, and DSH 4.1 Flash opt-in', () => { + it('names 0.6.3 setup wizard, env-wait, harness setup, frozen restore, plant block, models.dev soft-gate, Cursor escalate, scaffold wall, DSH flat credentials, and DSH 4.1 Flash opt-in', () => { const html = readSite('index.html') const md = readSite('index.md') const llms = readSite('llms.txt') @@ -690,7 +690,9 @@ describe('landing agent readiness', () => { const flashLabel = '4.1 Flash' const cursorEscalateBeat = 'are not applied' const scaffoldWallBeat = '10-minute wall' - const dshVersionBeat = 'version: "1"' + const dshFlatBeat = 'must be a flat' + const dshPreflightBeat = 'agent-check dsh' + const dshQuoteNotEnoughBeat = 'alone is not enough' const presetsQuestion = faq?.mainEntity?.find( (q) => q.name === 'How do Agent Looper worker and judge presets work?', @@ -708,15 +710,19 @@ describe('landing agent readiness', () => { expect(surface).not.toMatch(/\bInk\b/i) expect(surface).not.toMatch(/Current npm.*0\.6\.0/i) expect(surface).not.toMatch(/Current npm.*0\.6\.1/i) + expect(surface).not.toMatch(/Current npm.*0\.6\.2/i) expect(surface).toContain(cursorEscalateBeat) expect(surface).toContain(scaffoldWallBeat) } - expect(llms).toContain('Current npm: **0.6.2**') + expect(llms).toContain('Current npm: **0.6.3**') expect(llms).toContain('0.6.x') expect(llms).not.toContain('0.5.0') + expect(llms).not.toContain('Current npm: **0.6.2**') expect(llms).not.toContain('Current npm: **0.6.1**') expect(llms).not.toContain('Current npm: **0.6.0**') + expect(llms).toContain(dshPreflightBeat) + expect(llms).toContain(dshQuoteNotEnoughBeat) expect(llms).toContain(setupWizardBeat) expect(llms).toContain(plantBeat) expect(llms).toContain(modelsDevBeat) @@ -743,13 +749,18 @@ describe('landing agent readiness', () => { harnessHtml.match( /
    [\s\S]*?<\/article>/, )?.[0] ?? '' - expect(dshCard).toContain(dshVersionBeat) + expect(dshCard).toContain(dshFlatBeat) + expect(dshCard).toContain(dshPreflightBeat) + expect(dshCard).not.toContain('version: "1"') expect(dshCard).toContain(flashOptIn) expect(dshCard).toContain(flashLabel) expect(dshCard).toContain('deepseek-v4-flash') expect(harnessMd).toContain(flashOptIn) expect(harnessMd).toContain('deepseek-v4-flash') - expect(harnessMd).toContain(dshVersionBeat) + expect(harnessMd).toContain(dshFlatBeat) + expect(harnessMd).toContain(dshPreflightBeat) + expect(harnessMd).toContain(dshQuoteNotEnoughBeat) + expect(harnessMd).not.toContain('version: "1"') }) it('every HTML page loads analytics.js', () => {