Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
b0991fe
feat(sdk): multimodal ingress — prefillMultimodal, multimodal delta b…
lloyal-research Aug 29, 2026
07a7462
chore: ignore provisioned model weights at the repo root
lloyal-research Aug 29, 2026
abfa683
feat(media)!: content addressing gets its own package
lloyal-research Aug 31, 2026
bc79e24
fix(rig): let an ability's icon reach the surface that renders it
lloyal-research Sep 1, 2026
ad36992
alpha channel: cut 0
lloyal-research Sep 1, 2026
31ea09c
docs(media): the README leads with the outcome, not the argument
lloyal-research Sep 1, 2026
3f8d480
review: fourteen findings, each source-verified before it was fixed
lloyal-research Sep 1, 2026
203bc6c
refactor(agents): replay's two halves get two names
lloyal-research Sep 1, 2026
13dfeaf
fix(sdk): streamed text is assembled at UTF-8 boundaries, not token e…
lloyal-research Sep 1, 2026
f760bb2
feat(agents): the self-healing ladder — the rc classifies the settle …
lloyal-research Sep 1, 2026
542644c
feat(agents): heal — a poisoned agent is warm-respawned from its record
lloyal-research Sep 1, 2026
73f0768
fix(agents): heal replays up to the last COMPLETED transaction
lloyal-research Sep 1, 2026
1ca577b
alpha: cut 1
lloyal-research Sep 1, 2026
6ba9065
alpha: media rides its pending 0.2.0 base
lloyal-research Sep 1, 2026
05eec11
feat(dev-tools,agents,rig,sdk): trace mirror at the writer boundary +…
lloyal-research Sep 2, 2026
14cc4f8
feat(sdk,agents): the trunk release observer — the other half of the …
lloyal-research Sep 2, 2026
d62f84a
feat(dev-tools): the session panel shows the RESIDENT conversation only
lloyal-research Sep 2, 2026
154616a
feat(sdk): the mock becomes the published testing surface — dist/test…
lloyal-research Sep 3, 2026
fd49cbf
fix(sdk,agents): defer only what is intact — DecodeError{rc, partial}
lloyal-research Sep 3, 2026
0641716
fix(sdk,agents,media,rig): every review finding behind a test that wa…
lloyal-research Sep 3, 2026
8620480
fix(sdk,media,scripts): review round on 0641716 — each finding tested…
lloyal-research Sep 3, 2026
7cda0ad
fix(agents): let an in-flight decode settle before the pool prunes
lloyal-research Sep 4, 2026
573461b
fix(agents,media,rig): every decode site waits to settle; ingress, qu…
lloyal-research Sep 4, 2026
d2d99e8
fix(media,rig): the content store verifies every read; the verify opt…
lloyal-research Sep 4, 2026
b40f195
fix(scripts,abilities): the cut leaves range peers alone; the abiliti…
lloyal-research Sep 4, 2026
e3182fe
alpha: cut 2 — the set is stamped alpha.2; sdk moves to 4.0.0
lloyal-research Sep 4, 2026
d1d1704
alpha: the workspace resolves as one set — devDependencies follow the…
lloyal-research Sep 4, 2026
57bb8fb
alpha: cut 3 — the set at alpha.3 beside a binding whose peers admit …
lloyal-research Sep 4, 2026
2338315
alpha: cut 3 — the set at alpha.3 beside a binding whose peers admit it
lloyal-research Sep 4, 2026
355c67a
agents: the pool becomes a scheduler
lloyal-research Sep 5, 2026
706a566
agents: recovery vocabulary — no "plan", no "report" in the runtime
lloyal-research Sep 5, 2026
d2e62d6
agents: review round one on the scheduler
lloyal-research Sep 5, 2026
368c494
agents: review round two — a heal is a spawn wearing a lineage
lloyal-research Sep 5, 2026
61c3666
agents: review round three — queued work belongs to an agent still aw…
lloyal-research Sep 5, 2026
aee8121
agents: review round four — one drop per agent per schedule; a heal i…
lloyal-research Sep 5, 2026
58d275b
agents: review round five — every drop decides its recovery; a heal i…
lloyal-research Sep 5, 2026
f32baa2
agents, rig: keep Effection's contract — a halt mid-decode stays a halt
lloyal-research Sep 5, 2026
503c775
agents: review round six — the stall-break counts actionable progress
lloyal-research Sep 5, 2026
ad174d9
agents: review round seven — reclamation completes, reports end at th…
lloyal-research Sep 6, 2026
8ab9278
agents: review round eight — one budget for the capped paths, contrac…
lloyal-research Sep 6, 2026
18a69dd
agents, sdk: review round nine — the reserve is shared by agents that…
lloyal-research Sep 6, 2026
0b223ca
sdk: the mock's refund formula is stated once
lloyal-research Sep 6, 2026
1be7db0
agents: ship the loop doc — one authoritative page on the tick, the S…
lloyal-research Sep 6, 2026
8cb48f3
agents: the README routes — the CLI is the front door, the loop doc i…
lloyal-research Sep 6, 2026
e55321c
Merge pull request #119 from lloyal-ai/feat/scheduler
lloyal-research Sep 6, 2026
6641275
review: the canonical test command builds again, a put makes a digest…
lloyal-research Sep 6, 2026
988d7ae
feat(media,rig,agents,abilities)!: documents — PDF ingress, a documen…
lloyal-research Sep 7, 2026
5d7e97b
fix(media,rig,abilities): review round on 988d7ae — each finding behi…
lloyal-research Sep 7, 2026
c76f638
Merge pull request #120 from lloyal-ai/feat/documents
lloyal-research Sep 7, 2026
4c673f5
alpha: cut 4 — the documents set
lloyal-research Sep 7, 2026
87d10f6
ci(release): a runner input, an alpha gate, and one credential path
lloyal-research Sep 7, 2026
74afda0
ci(release): provenance where npm accepts it, and say which runner ran
lloyal-research Sep 7, 2026
0aa554c
feat(rig): the content route table becomes a part — resolveContent
lloyal-research Sep 8, 2026
04dc60e
refactor(rig): decodeURISegment — both halves of the old name meant s…
lloyal-research Sep 8, 2026
cec3dd1
docs(rig): the ingress is a route each adapter serves, not one deskto…
lloyal-research Sep 8, 2026
c8f78d8
fix(rig): a HEAD answer carries no body, whatever the outcome
lloyal-research Sep 9, 2026
0318a4c
Merge pull request #123 from lloyal-ai/feat/desktop-content-plane
lloyal-research Sep 9, 2026
3091311
build(cut-alpha): name the set per cut, and refuse an incoherent one
lloyal-research Sep 9, 2026
1008375
alpha: cut 5 — the desktop content plane; rig + dev-tools
lloyal-research Sep 9, 2026
59294d0
refactor(agents,rig,abilities)!: what an agent received lives on the …
lloyal-research Sep 10, 2026
a313773
fix(abilities): bump web 2.0.3 + documents 0.1.1 — publish catalog is…
lloyal-research Sep 10, 2026
351ec50
fix(agents): address #124 review — I43 must reason over the lineage, …
lloyal-research Sep 10, 2026
e09de2a
fix(agents): a heal must carry the receipt ledger, not inherit an amb…
lloyal-research Sep 10, 2026
1b768f6
refactor(agents): scope CallingAgent to its call instead of overridin…
lloyal-research Sep 10, 2026
236b7de
refactor(agents): one definition of "landed" — landedEntries; name co…
lloyal-research Sep 10, 2026
97deadb
refactor(agents,rig): independent-review tidy-ups — dead catch, doc r…
lloyal-research Sep 10, 2026
1b0b41b
fix(agents): dedup guards normalize whitespace the way the tools do
lloyal-research Sep 10, 2026
0e09f11
refactor(agents,abilities): one word for one fact — attended; honest …
lloyal-research Sep 12, 2026
5848d90
Merge pull request #124 from lloyal-ai/feat/received-lives-on-agent
lloyal-research Sep 12, 2026
47594d6
feat(agents,abilities): the tool-lifecycle contract — Tool.hooks, the…
lloyal-research Sep 12, 2026
00a4ad2
fix(agents): afterAdmit sees what the agent was shown; gate overrides…
lloyal-research Sep 12, 2026
b0657ef
fix(agents): non-object arguments never reach a gate; a fail decision…
lloyal-research Sep 12, 2026
3f3ce57
fix(agents): the authorization audit event follows who decided; wind-…
lloyal-research Sep 12, 2026
f703d36
Merge pull request #125 from lloyal-ai/feat/tool-lifecycle-hooks
lloyal-research Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
31 changes: 30 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,36 @@ jobs:
node-version: 24

- run: npm install
- run: npx tsc -b packages/sdk packages/agents packages/rig packages/channel-verify
- run: npm run typecheck

# The format claim is that a store directory is a VALID OCI Image Layout, not
# an approximation of one — which is what keeps distribution a later,
# replaceable adapter. Only a tool with none of our code in it can check that,
# so this drives `oras` against a layout the real ingress wrote, and our
# reader against a layout `oras` wrote.
oci-conformance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 24

- name: Install oras
run: |
VERSION=1.3.0
curl -fsSL -o oras.tar.gz \
"https://github.com/oras-project/oras/releases/download/v${VERSION}/oras_${VERSION}_linux_amd64.tar.gz"
# A pinned version is not a verified artifact: check the archive
# against the release's published digest before anything runs.
echo "6cdc692f929100feb08aa8de584d02f7bcc30ec7d88bc2adc2054d782db57c64 oras.tar.gz" | sha256sum -c -
tar -xzf oras.tar.gz oras
sudo mv oras /usr/local/bin/
Comment thread
lloyal-research marked this conversation as resolved.
oras version

- run: npm install
- run: npm run verify:oci

gpu-tests:
name: GPU Integration Tests
Expand Down
67 changes: 60 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ on:
description: 'Skip npm publish (for testing)'
type: boolean
default: true
runner:
description: 'Runner label. self-hosted when hosted minutes are unavailable.'
type: string
default: 'ubuntu-latest'

jobs:
build:
runs-on: ubuntu-latest
# `inputs` is null on the tag-push trigger, so the fallback is what keeps a
# release tag on hosted runners. An empty label queues forever, silently.
runs-on: ${{ inputs.runner || 'ubuntu-latest' }}
permissions:
contents: read
id-token: write
Expand All @@ -30,6 +36,10 @@ jobs:

- name: Verify dist outputs
run: |
test -f packages/media/dist/index.js
test -f packages/media/dist/index.d.ts
test -f packages/media/dist/node.js
test -f packages/media/dist/node.d.ts
test -f packages/sdk/dist/index.js
test -f packages/sdk/dist/index.d.ts
test -f packages/agents/dist/index.js
Expand Down Expand Up @@ -63,7 +73,21 @@ jobs:
test -f packages/channel-verify/dist/esm/package.json

- name: Typecheck
run: npx tsc -b packages/sdk packages/agents packages/rig packages/channel-verify packages/binding packages/relay packages/host
run: npx tsc -b packages/media packages/sdk packages/agents packages/rig packages/channel-verify packages/binding packages/relay packages/host

# Publishing authenticates through trusted publishing, and the OIDC token
# is minted by the Actions service for the job — including on a
# self-hosted runner. This runs unconditionally so a skip_publish
# rehearsal proves the plumbing before a real cut depends on it. The
# request URL only, never the token.
- name: OIDC available?
run: |
echo "runner environment: ${RUNNER_ENVIRONMENT:-<unset>}"
if [ -n "${ACTIONS_ID_TOKEN_REQUEST_URL:-}" ]; then
echo "OIDC token endpoint present - trusted publishing can authenticate."
else
echo "::warning::No OIDC token in this job, so trusted publishing cannot authenticate."
fi

- name: Publish packages
if: success() && (github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && !inputs.skip_publish))
Expand All @@ -73,15 +97,44 @@ jobs:
# rig pointing at a version that does not exist on the registry —
# breaking fresh installs until someone repaired the partial release.
# It has no dependencies of its own, so it is safe at the head.
for pkg in packages/channel-verify packages/sdk packages/agents packages/rig packages/binding packages/relay packages/host packages/dev-tools; do
# media sits right after channel-verify: sdk, agents and rig all
# depend on it, so it must exist on the registry before they do.
for pkg in packages/channel-verify packages/media packages/sdk packages/agents packages/rig packages/binding packages/relay packages/host packages/dev-tools; do
Comment thread
lloyal-research marked this conversation as resolved.
name=$(node -p "require('./$pkg/package.json').name")
version=$(node -p "require('./$pkg/package.json').version")
# The dist-tag follows each package's OWN version: an -alpha.N
# version publishes under the alpha channel and can never move
# `latest`. Committed on an arc branch, this is what makes
# `npx lloyal-ai@alpha` possible without touching production.
case "$version" in
*-alpha*) tag=alpha ;;
*-beta*) tag=beta ;;
*-rc*) tag=rc ;;
*) tag=latest ;;
esac
if npm view "$name@$version" version >/dev/null 2>&1; then
echo "⏭ $name@$version already published, skipping"
else
echo "Publishing $name@$version..."
npm publish --workspace "$pkg" --access public --provenance
# A manual dispatch may only ever ship a prerelease. The tag falls
# through to `latest` for any version without a suffix, so one
# hand-edited manifest would otherwise move production. Releases
# go out through a v* tag, which is not affected by this.
if [ "$tag" = "latest" ] && [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "::error::$name@$version would publish to latest. A manual dispatch may only ship a prerelease; production goes through a v* tag."
exit 1
fi
# npm verifies the sigstore bundle's runner claim and refuses
# anything but a hosted one: "Only github-hosted runners are
# supported when publishing with provenance" (422). Measured, on
# run 34142877384. Ask the environment rather than take a flag,
# so a hosted run keeps attestation with nothing to remember and
# a local one drops only what it cannot have.
echo "Publishing $name@$version (tag: $tag)..."
if [ "${RUNNER_ENVIRONMENT:-}" = "github-hosted" ]; then
npm publish --workspace "$pkg" --access public --provenance --tag "$tag"
else
echo "::warning::$name@$version published WITHOUT provenance (runner is ${RUNNER_ENVIRONMENT:-unknown})"
npm publish --workspace "$pkg" --access public --tag "$tag"
fi
fi
done
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ dist/
docs/_internal
tmp/
docs/
!packages/agents/docs/
trace-*.jsonl
harness.json

Expand All @@ -19,3 +20,8 @@ packages/harness-cli/templates/*/dist-web/
packages/harness-cli/templates/*/traces/
packages/harness-cli/templates/*/*.log
packages/harness-cli/templates/*/models/**/*.gguf

# Provisioned model weights (too large for git). rig's resolveModel fetches
# into <projectRoot>/models/<role>/<id>.gguf — at the repo root when tests
# or examples run here. Mirrors lloyal.node's rule.
models/
9 changes: 2 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,10 +211,10 @@ The honest comparison is full stack against full stack. Each row of the right co
```typescript
// Agent runtime
import {
initAgents, useAgent, agent, agentPool, useAgentPool, diverge,
initAgents, useAgent, agent, agentPool, useAgentPool,
parallel, chain, fanout, dag, reduce, withSpine,
Tool, Source, DefaultAgentPolicy,
Ctx, Store, Events, AppRegistryCtx, AppConfigStoreCtx, GrantStoreCtx, RerankerCtx,
Ctx, Store, Events, AbilityRegistryCtx, AbilityConfigStoreCtx, GrantStoreCtx, RerankerCtx,
} from "@lloyal-labs/lloyal-agents";

// Ability protocol + framework tools
Expand Down Expand Up @@ -242,11 +242,6 @@ packages/
corpus/ @lloyal-labs/corpus-ability — first-party local-corpus research Ability
wikipedia/ @lloyal-labs/wikipedia-ability — first-party Wikipedia demo Ability
channel-verify/ @lloyal-labs/channel-verify — canonical-JSON + Ed25519 channel verification (Apache 2.0, zero-dep)

examples/
compare/ DAG primer (Ability-protocol-shaped): parallel research → compare → synthesize
react-agent/ Pre-Ability-protocol `useAgent` baseline (mechanism demo, not a 3.0 reference)
reflection/ Pre-Ability-protocol `diverge` primer (research → draft → critique → revise)
```

`reasoning.run` is the production-grade reference harness — `npx reasoning.run` and read its source. The native binding [`@lloyal-labs/lloyal.node`](https://github.com/lloyal-ai/lloyal.node) lives in a separate repo and is pulled in as a dependency.
Expand Down
131 changes: 0 additions & 131 deletions examples/compare/README.md

This file was deleted.

55 changes: 0 additions & 55 deletions examples/compare/__compare-smoke.ts

This file was deleted.

Loading
Loading