Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
349944d
Vendor @intx/* trees at 692c3106 with the ledger deltas re-applied
TheGreatAxios Sep 4, 2026
d934936
Add the sidecar modules the 692c3106 pin requires
TheGreatAxios Sep 4, 2026
facbd49
sidecar: align with the 692c3106 host contracts
TheGreatAxios Sep 4, 2026
d2fcd95
Update docs: repin the vendoring ledger to 692c3106
TheGreatAxios Sep 4, 2026
cd29714
sidecar: resolve inference credentials from the run's material cell
TheGreatAxios Sep 4, 2026
8d1485c
sidecar: assert malformed credential deliveries at the wire boundary
TheGreatAxios Sep 4, 2026
99e2e22
provisioners: declare sidecar capabilities
TheGreatAxios Sep 4, 2026
3955f0b
folded-runs: move the launch-source fixtures onto credentialId
TheGreatAxios Sep 4, 2026
41fdfd0
Delete sidecar-placement and the Capacity settings section (CL-7107)
TheGreatAxios Sep 4, 2026
a237fd8
Retire the vendored deltas the 692c3106 pin strands (CL-7107)
TheGreatAxios Sep 4, 2026
26ba0bd
Update docs: retire the stranded-deltas section from the ledger (CL-7…
TheGreatAxios Sep 4, 2026
07c0e5e
Add tests for the shipped backends' capability declarations
TheGreatAxios Sep 4, 2026
4ee6c69
provisioners: declare the isolation each backend actually gives
TheGreatAxios Sep 4, 2026
ee104e2
Update docs: what each sidecar backend declares it can do
TheGreatAxios Sep 4, 2026
4530ba7
sidecar tests: drop signEd25519 from the key-store deps
TheGreatAxios Sep 4, 2026
396727d
launch fixtures: name the credential instead of carrying its secret
TheGreatAxios Sep 4, 2026
3727162
provisioners: sync tsconfig references for the capability declarations
TheGreatAxios Sep 4, 2026
39e7598
Add tests for RFC Message-ID thread dispatch and header correlation
TheGreatAxios Sep 4, 2026
d9134e8
Thread turn dispatch by RFC Message-ID; correlate replies by header
TheGreatAxios Sep 4, 2026
17ce613
Update docs: correlation is mail headers, and the reply bridge is ret…
TheGreatAxios Sep 4, 2026
62ddc3c
chat: drop duplicate mail-id test stubs after rebase
TheGreatAxios Sep 5, 2026
7fd9c39
Add tests for native provisioned launch
TheGreatAxios Sep 5, 2026
b5d1320
Add native provisioned launcher in @corbits/workflows
TheGreatAxios Sep 5, 2026
0327d38
hub: wire allocation service to the 692c3106 plugin split
TheGreatAxios Sep 5, 2026
52291a1
workflows: drop the Workbench launch wrapper; Interchange launches
TheGreatAxios Sep 5, 2026
0baf18f
hub: authoring deploy uses Interchange prepareProvisionedDeployment
TheGreatAxios Sep 5, 2026
e5d72e0
Chat invite, wake, and relaunch provision via Interchange
TheGreatAxios Sep 5, 2026
2eeb7b4
Webhook triggers provision via Interchange prepareProvisionedDeployment
TheGreatAxios Sep 5, 2026
bd6a926
Morning-brief: drop the folded-runs deploy-source import
TheGreatAxios Sep 5, 2026
d62e56d
Hub: wire webhook launches onto prepareProvisionedDeployment
TheGreatAxios Sep 5, 2026
abe9e82
One-shot runner provisions via Interchange prepareProvisionedDeployment
TheGreatAxios Sep 5, 2026
7cbde75
Move definition projection helpers into @corbits/workflows
TheGreatAxios Sep 5, 2026
e60b96d
Artifacts-hub resolves run scope from workflow_run address
TheGreatAxios Sep 5, 2026
6d4780e
Run-scope lists top-level runs without a folded_run marker
TheGreatAxios Sep 5, 2026
5663b05
Delete @corbits/folded-runs
TheGreatAxios Sep 5, 2026
979de5d
Delete folded-run-one-shot and the catalog pin-gate
TheGreatAxios Sep 5, 2026
2cd25a1
Record vendored hashes; drop the folded-runs kill-date
TheGreatAxios Sep 5, 2026
194acee
Describe native Interchange agent launch in the docs
TheGreatAxios Sep 5, 2026
b71afd9
Drop leftover deploy-source recording and pin-stale hub lookups
TheGreatAxios Sep 5, 2026
1fb5159
Provision from the existing definition asset HEAD
TheGreatAxios Sep 5, 2026
56dd4a0
isolation: give the afterAll shutdown hook headroom past the harness'…
TheGreatAxios Sep 6, 2026
09b7c43
Sweep leftover folded-run references after the native launch cutover …
TheGreatAxios Sep 6, 2026
623ccc9
Seeding: deploy default workflows by catalog offering ids (CL-7461) (…
TheGreatAxios Sep 6, 2026
0d84cd5
e2e: deploy workflows by catalog offering ids (CL-7460) (#662)
TheGreatAxios Sep 6, 2026
8fd7b53
sandbox-sidecar: accept the allocation service's initial generation (…
TheGreatAxios Sep 6, 2026
e8e6f77
Web: drop the Myra title pre-check; the server's definition dedupe is…
TheGreatAxios Sep 6, 2026
0816d1d
e2e: keep the sidecar session open at pin 692c3106 (CL-7472) (#663)
TheGreatAxios Sep 6, 2026
ec5781f
e2e: seeded offerings are launchable at pin 692c3106 (CL-7473) (#664)
TheGreatAxios Sep 6, 2026
a0032b7
Merge main into the re-pin branch
TheGreatAxios Sep 6, 2026
aca9adc
Chat: workbench_launch lookups are tenant-scoped (CL-7474) (#665)
TheGreatAxios Sep 6, 2026
b99387d
Deliver first-turn mail once the provisioned sidecar is routable (CL-…
TheGreatAxios Sep 6, 2026
615df92
Native launch records the run's agent_session so mail and spans persi…
TheGreatAxios Sep 6, 2026
d4aeba1
Native launch creates the run's event collector so turns are recorded…
TheGreatAxios Sep 6, 2026
8312350
Record a run's session at provision; re-key it when Interchange ancho…
TheGreatAxios Sep 6, 2026
fbbbfa8
Merge main into the re-pin branch
TheGreatAxios Sep 6, 2026
983d1fb
Chat: first-turn delivery waits for the provisioned sidecar to become…
TheGreatAxios Sep 6, 2026
8d0333d
ensureRunSession creates the session for API-deployed runs instead of…
TheGreatAxios Sep 6, 2026
178d81f
Chat: a booting run is waited on, not relaunched (CL-7489) (#679)
TheGreatAxios Sep 6, 2026
d66f9e7
Merge branch 'main' into cl-7107-repin-and-re-vendor-audit-against-in…
TheGreatAxios Sep 6, 2026
f10b776
Chat delivers room mail through Interchange's run-trigger route (CL-7…
TheGreatAxios Sep 6, 2026
1cd7861
Hub: probes get their own provisioner so deployments never adopt a pr…
TheGreatAxios Sep 7, 2026
44c802b
process-provisioner: a generation-0 external ref is valid
TheGreatAxios Sep 7, 2026
8e8db82
chat e2e: skip the invited-agent first-turn cases until CL-7492 lands
TheGreatAxios Sep 7, 2026
a8a8e86
chat e2e: the reuse case mints the echo chat it reopens
TheGreatAxios Sep 7, 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
  •  
  •  
  •  
33 changes: 32 additions & 1 deletion ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ this repo:
- **Tenancy** — the tenant hierarchy, membership, principals, roles, and
grants (`@intx/db`, `@intx/hub-api`).
- **Credentials** — resolution and storage.
- **Agents** — launch and session orchestration (`@intx/agent`,
- **Agents** — Interchange owns launch (`prepareProvisionedDeployment`),
the run principal, and session primitives (`@intx/agent`,
`@intx/hub-agent`, `@intx/hub-sessions`).
- **Inference** — LLM calls (`@intx/inference`).
- **Workflow runtime** — definitions, runs, and the workflow host
Expand All @@ -44,6 +45,36 @@ for the authoritative list of what Interchange already provides versus
what is a genuine upstream gap workbench has had to work around
product-side.

## Agent launch

Workbench is a client of Interchange. Launching an agent is Interchange
`prepareProvisionedDeployment` onto that instance's own `kind:workflow`
asset (default ref) in the hub git store. Interchange mints the run
row, the allocation, and — on first trigger — the run principal. Chat
records the returned run id, deployment id, and mail address. It does
not pre-mint an anchor run, own an `agent_session`, or render a
per-run `sourceRef`. `@corbits/folded-runs` and
`@corbits/folded-run-one-shot` are gone. A one-shot wait-loop for Myra
drafting lives in `@corbits/agent-directory` as `runOneShotPrompt` and
still calls `prepareProvisionedDeployment`.

Launch is asynchronous. The sidecar reconciler's ready hook and the
`workflowDispatchService` queue (wired in `apps/hub`) deliver a
message sent before the instance is ready; the UI shows a starting
state until then. Presence while starting comes from allocation and
deployment status, not a run principal. Wake of a reaped or lost
instance is a fresh `prepareProvisionedDeployment` onto the same
asset; chat updates the recorded ids.

A turn is one native `sendUserMessage` per addressed agent, carrying
Message-ID, In-Reply-To, and References. Agent replies reach humans
through the hub `persistMail` wrapper into `@corbits/mailbox`. Turns
do not use a correlationId. Human attachments are read from the
mailbox frame, not Interchange `session_mail`. Inference sources ride
as catalog offering ids (`sourceOfferingIds` /
`defaultSourceOfferingId`). Catalog instantiate does not 409
credential-binding workflows.

## Tenancy model

A **bench** (the shared team scope) and a **workbench** (a single
Expand Down
5 changes: 3 additions & 2 deletions PRODUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@ column at a time:
things to join. Plus mints an empty channel. Nobody is auto-hosted.
- **Agents are principals, not templates.** Opening Sales opens Sales —
the one 1:1 tenant with that agent. The same agent can sit in its DM
and in many channels. Product reopens or invites; it does not clone
the definition or mint a sibling instance per room. Myra is the
and in many channels. Inviting an agent provisions a native
Interchange run of that definition; product reopens or invites, it
does not clone a sibling instance per room. Myra is the
first-run guide in her DM, not a special home slot and not a
parallel home route. When she creates a specialist (`create_agent`),
the default is to mint or reopen that specialist's own DM
Expand Down
55 changes: 23 additions & 32 deletions VENDORED.md

Large diffs are not rendered by default.

3 changes: 0 additions & 3 deletions apps/hub/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@
"@corbits/docker-provisioner": "workspace:*",
"@corbits/e2b-sandbox-sidecar": "workspace:*",
"@corbits/evals": "workspace:*",
"@corbits/folded-run-one-shot": "workspace:*",
"@corbits/folded-runs": "workspace:*",
"@corbits/inbox": "workspace:*",
"@corbits/inference-catalog": "workspace:*",
"@corbits/insights": "workspace:*",
Expand All @@ -43,7 +41,6 @@
"@corbits/process-provisioner": "workspace:*",
"@corbits/run-key-history": "workspace:*",
"@corbits/run-scope": "workspace:*",
"@corbits/sidecar-placement": "workspace:*",
"@corbits/skills": "workspace:*",
"@corbits/slack-tag": "workspace:*",
"@corbits/tool-registry-publish": "workspace:*",
Expand Down
8 changes: 5 additions & 3 deletions apps/hub/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,6 @@ function parsePositiveMsEnv(

const SEED_MODEL_PROVIDER = "anthropic";
const SEED_MODEL = "claude-sonnet-5";
const SEED_MODEL_BASE_URL = "https://api.anthropic.com";

// Matches boot-time seeding's own defaults (`system-seed.ts`) exactly,
// so a zero-.env-edit local checkout that seeds its admin account
Expand All @@ -282,10 +281,14 @@ const DEFAULT_PLANT_ADMIN_EMAIL = "alice@example.com";
const DEFAULT_PLANT_ADMIN_PASSWORD = "password123";
const DEFAULT_PLANT_ORG_SLUG = "workbench";

/** The root tenant's boot-time seed model: a provider/model pair
* `seedTenant` names in every deployed definition, plus the real (or
* placeholder) key `seedCatalog` plants a launchable credential with. No
* `baseURL` — a workflow deploy resolves inference from the tenant's
* catalog offerings, never a bare source tuple (CL-7461). */
export type ModelSource = {
readonly provider: string;
readonly model: string;
readonly baseURL: string;
readonly apiKey: string;
};

Expand Down Expand Up @@ -624,7 +627,6 @@ function seedModelFrom(parsed: ParsedHubEnv): ModelSource | undefined {
return {
provider: SEED_MODEL_PROVIDER,
model: SEED_MODEL,
baseURL: SEED_MODEL_BASE_URL,
apiKey,
};
}
Expand Down
2 changes: 1 addition & 1 deletion apps/hub/src/crypto-provider-cache-wiring.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,6 @@ describe("hub crypto-provider cache wiring", () => {
expect(firstCall(source, "launchWebhookTrigger")).toContain(
`cryptoProviderCache: ${assigned}`,
);
expect(firstCall(source, "runOneShotFoldedPrompt")).toContain(assigned);
expect(firstCall(source, "runOneShotPrompt")).toContain(assigned);
});
});
2 changes: 1 addition & 1 deletion apps/hub/src/hub-error-handler.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
import { Hono } from "hono";
import { configureSync, resetSync } from "@intx/log";
import { InferenceResolutionError } from "@corbits/folded-runs";
import { InferenceResolutionError } from "@corbits/chat";

import { hubErrorHandler } from "./hub-error-handler";

Expand Down
2 changes: 1 addition & 1 deletion apps/hub/src/hub-error-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { makeErrorEnvelope } from "@corbits/error-sink";
* Duck-typed rather than an `instanceof` allowlist: any error carrying a
* string `guidance` alongside its `message` is a named, consumer-facing
* failure the thrower already wrote for a human to read — see
* `@corbits/folded-runs`'s `DefinitionProjectionMissingError` and
* `@corbits/workflows`'s `DefinitionProjectionMissingError` and
* `MultiStepFoldUnsupportedError`. Its `message` is safe to return
* verbatim; anything else is a platform fault whose internals must not
* leak to a client.
Expand Down
Loading
Loading