You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 4c80c8d
Browse filesBrowse the repository at this point in the historyBrowse files
reference: the release the site documents and the board's counts, generated
The site named no release but the one its install pages had hard-coded, three weeks old, and the
landing page said nothing of how much of Spin is built. `task reference` now writes
src/data/reference.json: the newest spin release the documented commit reaches, the spin and
spin-terraform-aws commits the reference was generated from, and the feature board's counts.
The landing page and its Markdown twin show the counts and the release in one sentence.
Every release a hand-written page names is pinned to that release: `task reference` rewrites it,
and `task reference:check` fails on any other. The reference is regenerated against spin
6b07d27d0 and spin-terraform-aws 3c0100d (`spin open` gets its page).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: src/content/docs/reference/api/adminservice.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -260,6 +260,7 @@ No fields: `{}`.
260
260
|`images`| list of [PlatformImage](/reference/api/types/#platformimage)| Empty until the object store is configured: there is nowhere to publish to. |
261
261
|`baseImages`| list of [BaseImage](/reference/api/types/#baseimage)| Every base image published, one per machine release, newest first. |
262
262
|`supervisorReleases`| list of [ExtensionRelease](/reference/api/types/#extensionrelease)| Every release of the supervisor, newest first. |
263
+
|`agentReleases`| list of [ExtensionRelease](/reference/api/types/#extensionrelease)| Every release of the agent CLIs (Claude Code and Codex, one extension), newest first. |
-[ShareService](/reference/api/shareservice/): ShareService manages snapshot sharing Snapshots can be shared with specific users or made public Users can create new workspaces from shared snapshots
30
30
-[SignatureService](/reference/api/signatureservice/): SignatureService is what only people sign of themselves: who a user's keys are and who a team's members are. A host holds every workspace's access to these (internal/roster), so a control plane that is taken can say neither which keys are somebody's nor who is in a team. A workspace's access is signed through WorkspaceService.SetOwnerWord. The control plane proposes each document from what it holds - a key registered, a member added - and keeps what was signed; it signs nothing. A client shows a person what they are signing and signs it with a key of theirs: `spin sign`, with the keys ssh-agent holds, or the terminal's page, with a passkey.
31
31
-[SSHKeyService](/reference/api/sshkeyservice/): SSHKeyService is the user's own keys, as a registry: the ones a client offers when the owner signs a workspace's word (OwnerWord), and the anchor a create may name. A key here logs in to nothing on its own - only a key the owner's word for a workspace lists does, there.
Copy file name to clipboardExpand all lines: src/content/docs/reference/api/teamservice.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -422,7 +422,7 @@ A team's secrets: what a brokered network rule has the host's egress proxy add t
422
422
|`name`| string | Lower-case letters, digits and dashes, starting with a letter; what a rule names it by. |
423
423
|`value`| string | At most 8 KiB of visible ASCII. Replaces what the name held. |
424
424
|`hosts`| list of string | The exact names the secret may be sent to, 1 to 16: a brokered rule that injects it and names any other host is refused it. |
425
-
|`ref`| string | In place of value: the ARN of a Secrets Manager secret the team keeps it in, read as the team (InstallationSettings.team_secrets_role) now and whenever a host asks for it. |
425
+
|`ref`| string | In place of value: the ARN of a Secrets Manager secret or a Parameter Store parameter the team keeps it in, read as the team (InstallationSettings.team_secrets_role) now and whenever a host asks for it. |
Copy file name to clipboardExpand all lines: src/content/docs/reference/api/types.md
+32-1Lines changed: 32 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -86,6 +86,22 @@ BaseImage is the base image of one machine release, as published.
86
86
|`day`|`Timestamp`| The day's first instant, UTC. |
87
87
|`services`| list of [ServiceCost](/reference/api/types/#servicecost)| Costliest first. |
88
88
89
+
## BrokeredRequest
90
+
91
+
BrokeredRequest is one request the egress proxy read from the workspace's machine to a brokered name. No header and no body: what the proxy set is the team's secret, and what the machine sent is its own.
92
+
93
+
| Field | Type | What it is |
94
+
|---|---|---|
95
+
|`name`| string ||
96
+
|`method`| string ||
97
+
|`path`| string | As the machine sent it, without the query. |
98
+
|`status`| integer (int32) | What the real host answered; what the proxy answered for a refusal. |
99
+
|`bytesSent`| string (int64) ||
100
+
|`bytesReceived`| string (int64) ||
101
+
|`at`|`Timestamp`||
102
+
|`refused`| string | Empty for a request passed on. Otherwise why the proxy refused it: credentials (a secret or token the team does not hold), host (a request for another name), upgrade, method (TRACE or TRACK), scope (a method or path the injecting rule does not allow), authority (the cloud principal refused to sign it). |
103
+
|`principal`| string | Who asked: "user" or "agent", by the listener the proxy read it on. |
104
+
89
105
## BurstMode
90
106
91
107
BurstMode is how a workspace of a preset may grow past what it starts with.
@@ -371,6 +387,18 @@ Image is one name a workspace can be created from: a publication in this install
371
387
|`name`| string | What a person choosing a disk is shown: its name ("base image") and what it is ready for. An empty name is a publication made before one was asked for; show the ref. |
372
388
|`description`| string ||
373
389
390
+
## InjectionStatus
391
+
392
+
InjectionStatus is one header the egress proxy sets on the workspace's requests to a brokered name, and whether the workspace's team holds what it is set from.
393
+
394
+
| Field | Type | What it is |
395
+
|---|---|---|
396
+
|`policy`| string | The policy, by name, and the names its rule brokers. |
397
+
|`names`| list of string ||
398
+
|`header`| string ||
399
+
|`from`| string | What the header is set from: a team secret by name, "<forge> app", or "identity for <audience>". |
400
+
|`held`| boolean | Whether the team holds it: the secret is set, the forge app is set, an identity is always held. False is a request refused with credentials. |
401
+
374
402
## InstallationSettings
375
403
376
404
InstallationSettings contains global settings for the Spin installation
@@ -394,7 +422,8 @@ InstallationSettings contains global settings for the Spin installation
394
422
|`workspaceIdleSuspendMinutes`| integer (int32) | How many minutes a running workspace may go unused - nobody working over its ssh, editor or forwarded ports, and its cores all but still - before it is suspended with its processes, which its next start resumes. 0 suspends none; 60 is what an installation that says nothing keeps, and a week is the most. |
395
423
|`workspaceMaxRunningMinutes`| integer (int32) | How many minutes a workspace may run at a stretch, used or not, before it is suspended the same way: a process that keeps its cores busy is use to the rule above, and this is what ends it. Counted from its machine's start, which a resume is too. 0 caps none; 720 is what an installation that says nothing keeps, and a week is the most. |
396
424
|`workspaceLeaseMaxMinutes`| integer (int32) | How many minutes a process may keep its workspace awake at a stretch (a lease: `spin-supervisor keep -- <cmd>`, a .spin.yaml task with keep_awake). While a lease is held and within this of its start, nobody is asked, nothing idle is suspended, and the running cap waits for the lease's end. 0 honours no lease; 480 is what an installation that says nothing keeps, and a week is the most. |
397
-
|`teamSecretsRole`| string | The IAM role a team's secret kept in Secrets Manager is read under, in a session tagged spin-team-id with the team: its policy lets that session read only what carries the same tag. Empty, no secret is kept as a reference. |
425
+
|`teamSecretsRole`| string | The IAM role a team's secret kept in Secrets Manager or Parameter Store is read under, in a session tagged spin-team-id with the team: its policy lets that session read only what carries the same tag. Empty, no secret is kept as a reference. |
426
+
|`agentsFetch`| boolean | Whether the control plane fetches the agent CLIs - Claude Code and Codex - from their publishers on its own: the newest release of each, looked for daily. False, it fetches none, and a workspace is given the pair the control plane's image carries or one an administrator published. |
398
427
399
428
## Job
400
429
@@ -515,6 +544,7 @@ NetworkRule is one thing a network policy allows: these destinations on these po
515
544
|`inject`| list of [HeaderInjection](/reference/api/types/#headerinjection)| Headers the proxy sets on a brokered rule's requests, each from a secret of the workspace's team (or the nearest team above it with one by that name). Brokered rules only. |
516
545
|`cloud`|[CloudAccess](/reference/api/types/#cloudaccess)| The principal the proxy authorizes a brokered rule's requests as, on its cloud: the host takes its credentials as the workspace, with a token of its identity. Brokered rules naming that cloud's endpoints only, and not with inject. |
517
546
|`verifySni`| boolean | The host's egress proxy reads the TLS server name of each connection to these names and passes on, untouched, only one this rule names: an address shared with other names opens only these to a client that says which it wants. A connection with no name, or one hiding it (ECH), goes nowhere. Names only, on TCP, never with broker; it does not stop a client that lies. |
547
+
|`principal`| string | Whose connections a brokered rule stands in for: "agent" (the workspace's agent, whose packets its guest marks), "user" (everything else the workspace sends), or "any" (empty: both). Two rules for one name, one per principal, each with its own injections and methods, say what the person may do and what the agent may. Brokered rules only: an agent reaches nothing outside the proxy, so a rule that is not brokered is the person's already. |
518
548
519
549
## ObservedDestination
520
550
@@ -736,6 +766,7 @@ The repository a workspace opened, as its guest clones it: the project's URL, th
736
766
|`fromCommit`| string | from_commit is the commit the disk's checkout already is, for a disk cloned from a prebuild: the guest holds the tree to it (git fsck, no tracked file changed) before it fetches. |
737
767
|`prebuildId`| string | The prebuild the disk is a clone of, and the SHA-256 of the claim its host signed of it (PrebuildClaim): what the owner approves when the open was from one. |
738
768
|`prebuildClaimDigest`| string ||
769
+
|`pullRef`| string | pull_ref is a pull request's ref as its forge serves it (refs/pull/<n>/head, GitLab's refs/merge-requests/<n>/head), fetched once ref is cloned and checked out as pr-<n> or mr-<n>; empty for a workspace that opens at ref itself. |
0 commit comments