foldrun 0.9.0 → 1.0.0

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/docs/security.md CHANGED
@@ -134,6 +134,20 @@ name only — for the owner and admins to read or export. Support can view an
134
134
  account only [read-only, for thirty minutes, with a reason the customer
135
135
  reads](team-and-access#support-access).
136
136
 
137
+ ## Your terminal
138
+
139
+ The CLI prints what a platform sends it — agents' replies, logs, files,
140
+ release notes, errors — and a terminal obeys escape sequences hidden in
141
+ text: it can move the cursor and overwrite a line, clear the screen, retitle
142
+ the window, write your clipboard, or show a link that goes somewhere else.
143
+ So nothing the CLI prints carries them. The only ones that get through are
144
+ the CLI's own colours, and every other control character but newline and
145
+ tab is removed, on a terminal and through a pipe alike. Content you asked for
146
+ byte for byte — `foldrun source cat`, `storage cat`, `library cat`, a
147
+ download or CSV to stdout, `api spec` — is exact when it goes into a file or
148
+ another program, and filtered like everything else when it lands on a
149
+ screen. `--json` is exact too: JSON writes control characters as escapes.
150
+
137
151
  ## What is still yours to think about
138
152
 
139
153
  - A model reading a web page reads whatever is on it. Give the agent the
package/docs/tools.md CHANGED
@@ -1408,11 +1408,36 @@ own defaults.
1408
1408
  next one: the cookies and localStorage the call ends with are written to
1409
1409
  `workspace/state/browser/<name>.json` and loaded before any later call that
1410
1410
  names it, in this run or a run next month. It is the agent's own login,
1411
- made with `actions` from credentials it can see — `state` refuses
1412
- `cookies=` and `storage=` and a session those seeded, because `state/` is a
1413
- workspace file every later step can read, and a vault secret written there
1414
- would stop being one. `mode=diff` keeps its baselines in the same place,
1415
- under `state/browser/diff/`, for the same reason: they must outlive the run.
1411
+ made with `actions` from credentials it can see — or a login a cookie secret
1412
+ seeded, when `state_key` encrypts it (below). Without a key `state` refuses
1413
+ `cookies=` and a session they seeded, and it always refuses `storage=`,
1414
+ because `state/` is a workspace file every later step can read, and a vault
1415
+ secret written there in the clear would stop being one. `mode=diff` keeps its
1416
+ baselines in the same place, under `state/browser/diff/`, for the same
1417
+ reason: they must outlive the run.
1418
+
1419
+ **A cookie secret that seeds a saved login.** Some sites — Google above all —
1420
+ rotate their sign-in cookies while they are used, so a copied `Cookie` line in
1421
+ the vault goes stale within the hour and every later run meets a sign-in
1422
+ page. Put `state:` and `state_key:` beside `cookies:` in the block:
1423
+
1424
+ ```yaml
1425
+ web:
1426
+ browse:
1427
+ cookies: YOUTUBE_COOKIES
1428
+ cookie_domain: .youtube.com
1429
+ state: youtube
1430
+ state_key: BROWSER_STATE_KEY
1431
+ secrets: [YOUTUBE_COOKIES, BROWSER_STATE_KEY]
1432
+ ```
1433
+
1434
+ The first call seeds from the secret; every call saves the session it ends
1435
+ with, encrypted, and the next loads that rather than the vault's copy. The
1436
+ state file records which secret seeded it and a keyed fingerprint of its
1437
+ value, so pasting fresh cookies into the secret seeds it again. Script in the
1438
+ page (`js`, `eval`, a `get` of storage) stays refused on such a login, as it
1439
+ is on the secret itself. `check` refuses `state` beside `cookies` without
1440
+ `state_key`.
1416
1441
 
1417
1442
  ### Where the browser runs
1418
1443
 
package/docs/versions.md CHANGED
@@ -22,8 +22,45 @@ under its own name — `v2026.09.30.2` deployed again is still `v2026.09.30.2`.
22
22
  Behind each name are the commits of the parts that make up the platform —
23
23
  `core` (the runtime), `platform` (queue, worker, storage, billing), `web` (the
24
24
  dashboard and the API), `docs` and `infra` — recorded when it was deployed.
25
- The `foldrun` CLI and `@foldrun/core` on npm are packages a person publishes,
26
- and keep ordinary semver (`0.6.0`).
25
+ The `foldrun` CLI and `@foldrun/core` on npm are packages, and follow
26
+ semantic versioning instead — see [the packages](#the-packages).
27
+
28
+ ## The packages
29
+
30
+ `foldrun` (the CLI) and `@foldrun/core` follow
31
+ [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) from 1.0.0:
32
+
33
+ | | Means | Example |
34
+ |---|---|---|
35
+ | Patch | a bug fix, nothing new — safe to update | 1.4.2 → 1.4.3 |
36
+ | Minor | a new feature; everything that worked still works | 1.4.2 → 1.5.0 |
37
+ | Major | a breaking change: something old stops working or works differently | 1.4.2 → 2.0.0 |
38
+
39
+ What the promise covers is the public API. For the CLI that is every command
40
+ and flag `foldrun --help` lists, and the Node.js version it needs. For
41
+ `@foldrun/core` it is `@foldrun/core` itself and the subpaths in its
42
+ `package.json` under `foldrun.publicApi`. Other `@foldrun/core/*` modules can
43
+ be imported, but they are internal and may change in any release.
44
+
45
+ The release decides the number, not a person's memory. It compares the
46
+ public API at the last release with the new one. Anything gone, or a
47
+ function that now needs more arguments, makes it a major. Anything new makes
48
+ it at least a minor. A change in behaviour that the API cannot show is marked
49
+ in the commit, and that makes it a major too. A major's release notes open
50
+ with **Breaking changes**, saying what stops working.
51
+
52
+ Nothing is removed without warning. A command, flag or export is first marked
53
+ deprecated, in a minor, and still works. It is taken out in a later major.
54
+ Both are in the release notes.
55
+
56
+ Pre-releases, like `1.5.0-rc.1`, are published under npm's `next` tag. So
57
+ `npm install -g foldrun` gets the last stable release, and
58
+ `npm install -g foldrun@next` gets the pre-release. A stable CLI never
59
+ suggests updating to a pre-release.
60
+
61
+ `npm install -g foldrun@^1` stays within 1.x, so nothing that works breaks
62
+ under it. Every release is listed in each package's `CHANGELOG.md` and on
63
+ GitHub Releases.
27
64
 
28
65
  ## Rollback and the database
29
66
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foldrun",
3
- "version": "0.9.0",
3
+ "version": "1.0.0",
4
4
  "description": "Agents are just folders. Write them, check them, run them — on your machine.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -11,7 +11,7 @@
11
11
  "node": ">=22"
12
12
  },
13
13
  "dependencies": {
14
- "@foldrun/core": "^0.7.0"
14
+ "@foldrun/core": "^1.0.0"
15
15
  },
16
16
  "files": [
17
17
  "bin",
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "scripts": {
23
23
  "e2e": "FOLDRUN_E2E=1 FOLDRUN_DATA=$(mktemp -d /tmp/foldrun-e2e-XXXXXX) node --test --test-timeout=300000 tests/e2e.test.ts",
24
- "test": "FOLDRUN_DATA=$(mktemp -d /tmp/foldrun-test-XXXXXX) node --test tests/cli-account.test.ts tests/model-credential.test.ts tests/cli-approvals.test.ts tests/cli-stop.test.ts tests/cli-account-settings.test.ts tests/cli-schedule.test.ts tests/cli-billing.test.ts tests/cli-storage.test.ts tests/cli-scaffold.test.ts tests/cli-secrets.test.ts tests/cli-site-login.test.ts tests/cli-check-library.test.ts tests/cli-check-timezone.test.ts tests/cli-check-frontmatter.test.ts tests/cli-agent-import.test.ts tests/cli-check-subagents.test.ts tests/cli-connect.test.ts tests/cli-accounts.test.ts tests/cli-remote.test.ts tests/cli-stream.test.ts tests/cli-doctor.test.ts tests/cli-tool-test.test.ts tests/cli-agent-run.test.ts tests/cli-check-remote.test.ts tests/cli-shares.test.ts tests/cli-triggers.test.ts tests/cli-providers.test.ts tests/cli-rerun-put.test.ts tests/cli-guide.test.ts tests/cli-runtimes.test.ts tests/cli-deploy-safety.test.ts tests/cli-operator.test.ts tests/cli-flow-patterns.test.ts tests/cli-flow-rm-step.test.ts tests/cli-flow-dup-step.test.ts tests/cli-flow-write-stale.test.ts tests/cli-agent-link-stale.test.ts tests/cli-parity.test.ts tests/cli-invoke-inputs.test.ts tests/cli-audit-keys.test.ts tests/cli-version.test.ts tests/cli-check-web-warnings.test.ts tests/cli-report-image.test.ts tests/cli-check-workspace-paths.test.ts tests/cli-parity-dashboard.test.ts tests/cli-api-standards.test.ts tests/cli-backups-onboarding.test.ts tests/cli-check-limits.test.ts tests/cli-gallery.test.ts tests/cli-status-platform.test.ts tests/cli-webhooks-notifications.test.ts tests/cli-flags.test.ts tests/cli-api-coverage.test.ts",
24
+ "test": "FOLDRUN_DATA=$(mktemp -d /tmp/foldrun-test-XXXXXX) node --test tests/cli-account.test.ts tests/model-credential.test.ts tests/cli-approvals.test.ts tests/cli-stop.test.ts tests/cli-account-settings.test.ts tests/cli-schedule.test.ts tests/cli-billing.test.ts tests/cli-storage.test.ts tests/cli-scaffold.test.ts tests/cli-secrets.test.ts tests/cli-site-login.test.ts tests/cli-check-library.test.ts tests/cli-check-timezone.test.ts tests/cli-check-frontmatter.test.ts tests/cli-agent-import.test.ts tests/cli-check-subagents.test.ts tests/cli-connect.test.ts tests/cli-accounts.test.ts tests/cli-remote.test.ts tests/cli-stream.test.ts tests/cli-doctor.test.ts tests/cli-tool-test.test.ts tests/cli-agent-run.test.ts tests/cli-check-remote.test.ts tests/cli-shares.test.ts tests/cli-triggers.test.ts tests/cli-providers.test.ts tests/cli-rerun-put.test.ts tests/cli-guide.test.ts tests/cli-runtimes.test.ts tests/cli-deploy-safety.test.ts tests/cli-operator.test.ts tests/cli-flow-patterns.test.ts tests/cli-flow-rm-step.test.ts tests/cli-flow-dup-step.test.ts tests/cli-flow-write-stale.test.ts tests/cli-agent-link-stale.test.ts tests/cli-parity.test.ts tests/cli-invoke-inputs.test.ts tests/cli-audit-keys.test.ts tests/cli-version.test.ts tests/cli-check-web-warnings.test.ts tests/cli-report-image.test.ts tests/cli-check-workspace-paths.test.ts tests/cli-parity-dashboard.test.ts tests/cli-api-standards.test.ts tests/cli-backups-onboarding.test.ts tests/cli-check-limits.test.ts tests/cli-gallery.test.ts tests/cli-status-platform.test.ts tests/cli-webhooks-notifications.test.ts tests/cli-flags.test.ts tests/cli-api-coverage.test.ts tests/cli-hooks.test.ts tests/cli-release.test.ts tests/cli-terminal.test.ts",
25
25
  "release": "node scripts/release.mjs",
26
26
  "typecheck": "tsc -p tsconfig.json",
27
27
  "docs:sync": "node scripts/sync-docs.mjs",