@hasna/loops 0.4.2 → 0.4.4

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/CHANGELOG.md CHANGED
@@ -5,6 +5,82 @@ documented in this file. Version entries are generated from the
5
5
  conventional-commit git history; one commit maps to one released patch version
6
6
  unless noted.
7
7
 
8
+ ## 0.4.4 (2026-07-03)
9
+
10
+ Self-hosted runtime MVP release for operator-owned OpenLoops control planes.
11
+
12
+ ### Added
13
+
14
+ - Postgres storage contract with checksum-ledgered migrations for loops, runs,
15
+ workflows, goals, runner machines, runner leases, and audit events.
16
+ - Storage-backed `loops-api` `/v1` foundation for loop CRUD, run reads, runner
17
+ registration, claim, heartbeat, finalize, and bounded evidence upload.
18
+ - `loops-runner` foundation with self-hosted status checks and one-shot
19
+ claim/execute/finalize support for non-workflow loop targets.
20
+ - Operator-safe migration bundle helpers and CLI/SDK previews:
21
+ `loops export`, `loops import`, `loops self-hosted migrate --dry-run`,
22
+ `loops self-hosted push --dry-run`, `loops self-hosted pull --dry-run`, and
23
+ preview-first `loops self-hosted runner-register`.
24
+ - Documentation for self-hosted API/runner boundaries, local cache/spool
25
+ semantics, id-preserving import blockers, rollback evidence, and
26
+ cross-machine rollout evidence.
27
+
28
+ ### Safety
29
+
30
+ - Remote self-hosted push/pull/migrate remain preview-only until the control
31
+ plane exposes table-preserving import/sync coverage for every supported
32
+ durable table, or a reviewed restricted rollout proves unsupported rows are
33
+ absent.
34
+ - Non-local API and runner paths fail closed without bearer tokens, run output
35
+ remains redacted by default, and migration/import planning blocks live
36
+ destination state, tampered bundles, and redacted environment imports unless
37
+ explicitly allowed.
38
+ - The npm `prepublishOnly` gate now runs build, typecheck, full tests, and the
39
+ private-boundary scan before publishing.
40
+
41
+ ## 0.4.3 (2026-07-03)
42
+
43
+ Registry-visible self-hosted API and runner protocol patch. The local Git tag
44
+ set currently has no `v0.4.3` tag, so this entry backfills the release evidence
45
+ from the branch history and npm registry.
46
+
47
+ ### Added
48
+
49
+ - Storage-backed `loops-api` routes for loop CRUD and run listing using the
50
+ public storage contract, with storage-backed routes failing closed when no
51
+ storage adapter is injected.
52
+ - Runner registration, claim, heartbeat, finalize, and bounded evidence upload
53
+ protocol endpoints for self-hosted control planes.
54
+ - `loops-runner run-once` execution path for claimed non-workflow loop runs,
55
+ including claim-token fencing and heartbeat coverage while a run executes.
56
+
57
+ ### Safety
58
+
59
+ - Non-local API serving requires a bearer token.
60
+ - Runner claims skip workflow loops until remote workflow execution is fully
61
+ supported.
62
+ - Run listing redacts stdout/stderr unless explicitly requested.
63
+
64
+ ## 0.4.2 (2026-07-03)
65
+
66
+ Registry-visible self-hosted storage contract patch. The local Git tag set
67
+ currently has no `v0.4.2` tag, so this entry backfills the release evidence
68
+ from the branch history and npm registry.
69
+
70
+ ### Added
71
+
72
+ - Async storage contract for local and self-hosted runtime adapters.
73
+ - SQLite storage wrapper over the existing local `Store`.
74
+ - Postgres storage migration contract with checksum ledger, core loop/run
75
+ tables, workflow/goal tables, runner machine/lease tables, and audit events.
76
+ - Public package exports for storage contract, SQLite adapter, Postgres adapter,
77
+ and Postgres schema helpers.
78
+
79
+ ### Safety
80
+
81
+ - `loops-runner` self-hosted status fails closed when a remote runner is
82
+ configured without the required API URL and token.
83
+
8
84
  ## 0.4.1 (2026-07-03)
9
85
 
10
86
  Contract-foundation release for the Mailery-style local/self-hosted/cloud
package/README.md CHANGED
@@ -22,7 +22,7 @@ It supports deterministic command loops, JSON-defined workflows, and guarded CLI
22
22
  OpenLoops has three deployment modes:
23
23
 
24
24
  - `local`: SQLite in `LOOPS_DATA_DIR` is authoritative and `loops-daemon` executes scheduled work.
25
- - `self_hosted`: a user-operated `loops-api` control plane contract. This release exposes status, storage-backed `/v1` loop CRUD and run listing, runner claim/heartbeat/finalize protocol endpoints, and a one-shot `loops-runner run-once` execution path for embedded control-plane hosts; full fleet rollout and migration tooling are follow-up work.
25
+ - `self_hosted`: a user-operated `loops-api` control plane contract. This release exposes status, storage-backed `/v1` loop CRUD and run listing, runner claim/heartbeat/finalize protocol endpoints, a one-shot `loops-runner run-once` execution path for embedded control-plane hosts, id-preserving local export/import, and preview-only self-hosted migration/sync commands; full fleet rollout and remote apply are follow-up work.
26
26
  - `cloud`: a hosted control-plane contract. This release exposes client/runner status only; hosted tenant auth and infrastructure live outside this package.
27
27
 
28
28
  `local` is the default and requires no network, token, Postgres, or hosted
@@ -44,6 +44,11 @@ Useful status commands:
44
44
  loops mode
45
45
  loops --json mode
46
46
  loops self-hosted status
47
+ loops self-hosted migrate --dry-run
48
+ loops self-hosted runner-register --runner-id <id> --machine-id <machine> --apply
49
+ loops export --file ./loops-export.json --dry-run
50
+ loops export --file ./loops-export.json
51
+ loops import ./loops-export.json
47
52
  loops cloud status
48
53
  loops-api status
49
54
  loops-runner status
package/dist/api/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // package.json
4
4
  var package_default = {
5
5
  name: "@hasna/loops",
6
- version: "0.4.2",
6
+ version: "0.4.4",
7
7
  description: "Persistent local loop and workflow runner for deterministic commands and headless AI coding agents",
8
8
  type: "module",
9
9
  main: "dist/index.js",
@@ -77,7 +77,7 @@ var package_default = {
77
77
  prepare: "test -d dist || bun run build",
78
78
  "dev:cli": "bun run src/cli/index.ts",
79
79
  "dev:daemon": "bun run src/daemon/index.ts",
80
- prepublishOnly: "bun run build && bun run test:boundary"
80
+ prepublishOnly: "bun run build && bun run typecheck && bun test && bun run test:boundary"
81
81
  },
82
82
  keywords: [
83
83
  "loops",