@midhunxavier/code-flow 0.0.0-stage → 0.1.0-preview.1
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/LICENSE +21 -0
- package/README.md +122 -2
- package/bin/codeflow.mjs +8 -0
- package/bin/launcher.mjs +127 -0
- package/dist/remote-host.json +1 -0
- package/licenses/inter.txt +92 -0
- package/licenses/preact.txt +21 -0
- package/licenses/signals-core.txt +21 -0
- package/licenses/signals.txt +21 -0
- package/licenses/typescript-notices.txt +193 -0
- package/licenses/typescript.txt +55 -0
- package/licenses/uqr.txt +22 -0
- package/licenses/xterm-fit.txt +19 -0
- package/licenses/xterm.txt +21 -0
- package/package.json +34 -4
- package/public/assets/browser-7XI52A6V.js +8 -0
- package/public/assets/changes-EYFPASEI.js +1 -0
- package/public/assets/chunk-7H3ZLTKA.js +2 -0
- package/public/assets/chunk-L7TUCIYF.js +1 -0
- package/public/assets/chunk-LLMQG23J.js +163 -0
- package/public/assets/main-KIRM2OEK.js +1 -0
- package/public/assets/settings-QJZVW22Y.js +9 -0
- package/public/assets/styles-615EBB20.css +32 -0
- package/public/assets/terminal-A2FI2NAX.js +62 -0
- package/public/assets.json +1 -0
- package/public/bundle-meta.json +1 -0
- package/public/docs/.nojekyll +0 -0
- package/public/docs/accessibility.html +19 -0
- package/public/docs/acp-agents.html +117 -0
- package/public/docs/agent-containers.html +79 -0
- package/public/docs/api.html +1130 -0
- package/public/docs/app.js +342 -0
- package/public/docs/application-improvements.html +275 -0
- package/public/docs/architecture-explorer.html +19 -0
- package/public/docs/architecture.html +149 -0
- package/public/docs/auto-team.html +142 -0
- package/public/docs/automations.html +109 -0
- package/public/docs/checkpoint-review.html +37 -0
- package/public/docs/code-hosts.html +35 -0
- package/public/docs/code-intelligence.html +35 -0
- package/public/docs/configuration.html +346 -0
- package/public/docs/context-inspection.html +23 -0
- package/public/docs/coordinated-changes.html +28 -0
- package/public/docs/deferred-runs.html +25 -0
- package/public/docs/dependency-discovery.html +19 -0
- package/public/docs/documentation.html +84 -0
- package/public/docs/dynamic-teams-evaluation.html +174 -0
- package/public/docs/dynamic-teams-implementation-plan.html +882 -0
- package/public/docs/dynamic-teams-implementation-review-1.html +141 -0
- package/public/docs/dynamic-teams-plan-review-0.html +204 -0
- package/public/docs/extensions.html +42 -0
- package/public/docs/external-sources.html +96 -0
- package/public/docs/filesystem-policy.html +26 -0
- package/public/docs/filtered-tasks.html +44 -0
- package/public/docs/font-license.txt +92 -0
- package/public/docs/getting-started.html +118 -0
- package/public/docs/github-review-threads.html +26 -0
- package/public/docs/github.html +157 -0
- package/public/docs/help.html +69 -0
- package/public/docs/index.html +77 -0
- package/public/docs/installation.html +74 -0
- package/public/docs/launch-profiles.html +48 -0
- package/public/docs/maintenance.html +60 -0
- package/public/docs/memory-claims.html +31 -0
- package/public/docs/memory-storage.html +58 -0
- package/public/docs/notifications.html +39 -0
- package/public/docs/patterns.html +195 -0
- package/public/docs/performance-results.html +210 -0
- package/public/docs/performance.html +166 -0
- package/public/docs/project-conventions.html +22 -0
- package/public/docs/project-first-navigation-plan.html +587 -0
- package/public/docs/project-teams-implementation-plan.html +772 -0
- package/public/docs/project-teams.html +99 -0
- package/public/docs/provider-compatibility.html +20 -0
- package/public/docs/releasing.html +61 -0
- package/public/docs/remote-workers.html +64 -0
- package/public/docs/review-inbox.html +26 -0
- package/public/docs/run-storage.html +23 -0
- package/public/docs/runs.html +141 -0
- package/public/docs/search.json +1 -0
- package/public/docs/security.html +133 -0
- package/public/docs/shared-projects.html +31 -0
- package/public/docs/ssh-projects.html +60 -0
- package/public/docs/style.css +768 -0
- package/public/docs/task-reruns.html +30 -0
- package/public/docs/team-collaboration.html +379 -0
- package/public/docs/verification.html +22 -0
- package/public/docs/vscode.html +53 -0
- package/public/docs/worker-permission-verification.html +122 -0
- package/public/index.html +17 -0
- package/scripts/check-node.mjs +7 -0
- package/scripts/codeflow.mjs +55 -0
- package/scripts/pty.py +273 -0
- package/src/acp-connections.js +110 -0
- package/src/adapters/acp-presets.js +37 -0
- package/src/adapters/acp-types.js +0 -0
- package/src/adapters/acp.js +328 -0
- package/src/adapters/agy-auth.js +67 -0
- package/src/adapters/agy-isolation.js +223 -0
- package/src/adapters/agy.js +297 -0
- package/src/adapters/claude.js +220 -0
- package/src/adapters/codex-app-server.js +518 -0
- package/src/adapters/codex.js +299 -0
- package/src/adapters/errors.js +57 -0
- package/src/adapters/index.js +91 -0
- package/src/adapters/managed-permissions.js +37 -0
- package/src/adapters/model-discovery.js +100 -0
- package/src/adapters/process.js +418 -0
- package/src/adapters/team-tools.js +102 -0
- package/src/adapters/types.js +0 -0
- package/src/agent-container.js +155 -0
- package/src/approvals.js +121 -0
- package/src/architecture.js +456 -0
- package/src/assets.js +44 -0
- package/src/automation.js +901 -0
- package/src/certificate-renewal.js +75 -0
- package/src/chat-handoff.js +55 -0
- package/src/checkpoint-review.js +72 -0
- package/src/checks.js +303 -0
- package/src/code-host-git.js +102 -0
- package/src/code-hosts-api.js +99 -0
- package/src/code-hosts.js +482 -0
- package/src/code-intelligence-worker.mjs +452 -0
- package/src/code-intelligence.js +141 -0
- package/src/collab/api.js +365 -0
- package/src/collab/checkpoints.js +198 -0
- package/src/collab/connections.js +139 -0
- package/src/collab/host-execution.js +347 -0
- package/src/collab/hub-client.js +210 -0
- package/src/collab/link-api.js +229 -0
- package/src/collab/link.js +595 -0
- package/src/collab/model.js +496 -0
- package/src/collab/runner.js +1014 -0
- package/src/collab/store.js +1452 -0
- package/src/collab/terminals.js +361 -0
- package/src/collaboration-reviews.js +116 -0
- package/src/config.js +48 -0
- package/src/context-budget.js +14 -0
- package/src/context-inspection.js +204 -0
- package/src/context.js +154 -0
- package/src/conventions.js +283 -0
- package/src/coordinated-api.js +247 -0
- package/src/deferred-launch.js +82 -0
- package/src/deferred-runs.js +515 -0
- package/src/dependency-health.js +35 -0
- package/src/diff.js +43 -0
- package/src/docs-help.js +316 -0
- package/src/doctor.js +232 -0
- package/src/engine.js +4366 -0
- package/src/env.js +44 -0
- package/src/experience.js +50 -0
- package/src/extensions.js +144 -0
- package/src/filesystem-access.js +107 -0
- package/src/filesystem-policy.js +238 -0
- package/src/filtered-task-limits.js +93 -0
- package/src/filtered-tasks-api.js +53 -0
- package/src/filtered-tasks.js +576 -0
- package/src/fs.js +57 -0
- package/src/git.js +626 -0
- package/src/github-review-threads.js +181 -0
- package/src/github.js +538 -0
- package/src/http.js +69 -0
- package/src/improve-settings.js +38 -0
- package/src/improve.js +187 -0
- package/src/integrations.js +373 -0
- package/src/integrity.js +259 -0
- package/src/journey-api.js +77 -0
- package/src/journey-replay.js +65 -0
- package/src/journey-store.js +97 -0
- package/src/journeys.js +60 -0
- package/src/json.js +81 -0
- package/src/launch-profiles.js +292 -0
- package/src/learnings.js +80 -0
- package/src/log.js +39 -0
- package/src/maintenance.js +335 -0
- package/src/memory-analysis.js +182 -0
- package/src/memory-claims.js +153 -0
- package/src/memory-sqlite.js +236 -0
- package/src/memory.js +552 -0
- package/src/merge-validation.js +58 -0
- package/src/model-catalog.js +238 -0
- package/src/model-research.js +91 -0
- package/src/notes.js +176 -0
- package/src/notifications.js +413 -0
- package/src/patterns/auto-team-model.js +212 -0
- package/src/patterns/auto-team.js +659 -0
- package/src/patterns/council.js +199 -0
- package/src/patterns/debate.js +188 -0
- package/src/patterns/findings.js +141 -0
- package/src/patterns/index.js +19 -0
- package/src/patterns/loop.js +158 -0
- package/src/patterns/pipeline.js +125 -0
- package/src/patterns/prompts.js +181 -0
- package/src/patterns/race.js +147 -0
- package/src/patterns/schemas.js +40 -0
- package/src/patterns/solo.js +49 -0
- package/src/patterns/supervisor.js +235 -0
- package/src/patterns/task-draft.js +29 -0
- package/src/patterns/tdd.js +231 -0
- package/src/patterns/team-strategies.js +67 -0
- package/src/performance.js +43 -0
- package/src/persistence-status.js +35 -0
- package/src/phone-sessions.js +96 -0
- package/src/preview-overlay.js +383 -0
- package/src/preview.js +219 -0
- package/src/privacy.js +23 -0
- package/src/project-report.js +22 -0
- package/src/project-team-model.js +178 -0
- package/src/project-team-policy.js +42 -0
- package/src/project-team-store.js +213 -0
- package/src/project-teams-api.js +36 -0
- package/src/project-teams.js +551 -0
- package/src/projects.js +286 -0
- package/src/provider-eligibility.js +9 -0
- package/src/readiness.js +98 -0
- package/src/remote-tls.js +66 -0
- package/src/remote-workers/bundles.js +198 -0
- package/src/remote-workers/client.js +332 -0
- package/src/remote-workers/durability.js +37 -0
- package/src/remote-workers/protocol.js +68 -0
- package/src/remote-workers/stdio.js +138 -0
- package/src/remote-workers/worker.js +304 -0
- package/src/remote.js +204 -0
- package/src/repo-config.js +201 -0
- package/src/repo-coordination.js +732 -0
- package/src/repo-tree.js +106 -0
- package/src/retention-policy.js +466 -0
- package/src/review-inbox.js +38 -0
- package/src/routing.js +49 -0
- package/src/run-analysis.js +111 -0
- package/src/run-cold-store.js +231 -0
- package/src/run-environment.js +15 -0
- package/src/run-history.js +91 -0
- package/src/run-log.js +160 -0
- package/src/run-permissions.js +110 -0
- package/src/run-projection.js +75 -0
- package/src/run-recovery.js +53 -0
- package/src/run-status.js +54 -0
- package/src/serve.js +138 -0
- package/src/server.js +2738 -0
- package/src/shared-access.js +103 -0
- package/src/shared-accounts.js +301 -0
- package/src/shared-api.js +239 -0
- package/src/shell.js +346 -0
- package/src/ship.js +344 -0
- package/src/slots.js +74 -0
- package/src/snapshot.js +388 -0
- package/src/source-context.js +17 -0
- package/src/sse-writer.js +70 -0
- package/src/ssh-projects/bootstrap.mjs +95 -0
- package/src/ssh-projects/config.js +45 -0
- package/src/ssh-projects/gateway.js +143 -0
- package/src/ssh-projects/manager.js +320 -0
- package/src/ssh-projects/team-autostart.mjs +93 -0
- package/src/ssh-projects/team-remove.mjs +69 -0
- package/src/ssh-projects/team-status.mjs +39 -0
- package/src/ssh-projects/transport.js +116 -0
- package/src/stats.js +139 -0
- package/src/store.js +544 -0
- package/src/stream.js +91 -0
- package/src/sweeps.js +241 -0
- package/src/tailscale.js +101 -0
- package/src/task-draft.js +23 -0
- package/src/team-evaluation.js +242 -0
- package/src/team-mailbox.js +160 -0
- package/src/team-memory.js +84 -0
- package/src/team-rerun-graph.js +15 -0
- package/src/team-reruns.js +130 -0
- package/src/team-scheduler.js +121 -0
- package/src/team-template-store.js +98 -0
- package/src/team-templates.js +117 -0
- package/src/team-tool-client.mjs +79 -0
- package/src/team-tools.js +176 -0
- package/src/teams.js +0 -0
- package/src/templates.js +62 -0
- package/src/transcript.js +134 -0
- package/src/verification-integrity.js +27 -0
- package/src/verification.js +183 -0
- package/src/watch.js +195 -0
- package/src/work-queue.js +47 -0
- package/src/workflow-control.js +83 -0
- package/src/workspace-api.js +207 -0
- package/src/workspace-changes.js +61 -0
- package/src/workspace.js +146 -0
|
@@ -0,0 +1,1130 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content="Local API and command-line client — code-flow guides and reference"><title>Local API and command-line client · code-flow</title><link rel="icon" href="data:image/png;base64,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"><link rel="stylesheet" href="style.css"><script src="app.js" defer></script></head>
|
|
3
|
+
<body data-page="api"><a class="skip-link" href="#content">Skip to content</a>
|
|
4
|
+
<header class="topbar"><a class="brand" href="index.html"><img src="data:image/png;base64,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" width="30" height="30" alt=""><strong>Code Flow</strong><span>Docs</span></a><button class="search-trigger" id="open-search">Search documentation <kbd>⌘ K</kbd></button><div class="top-actions"><a href="https://github.com/midhunxavier/code-flow">GitHub ↗</a><button id="theme" aria-label="Change color theme">Theme</button><button id="open-help" class="primary" hidden aria-expanded="false" aria-controls="help-panel">Ask code-flow</button><button id="menu" aria-label="Toggle documentation navigation" aria-expanded="false" aria-controls="sidebar">☰</button></div></header>
|
|
5
|
+
<div class="layout"><nav class="sidebar" id="sidebar" aria-label="Documentation"><section><h2>Get started</h2><a href="index.html" >Overview</a><a href="installation.html" >Install Code Flow preview</a><a href="getting-started.html" >Getting started</a><a href="patterns.html" >Team patterns</a><a href="acp-agents.html" >ACP coding agents</a><a href="help.html" >Ask code-flow</a></section><section><h2>Work with agents</h2><a href="runs.html" >Runs and workspace</a><a href="auto-team.html" >Auto team</a><a href="project-teams.html" >Project missions (preview)</a><a href="review-inbox.html" >Review inbox</a><a href="verification.html" >Verification and review</a><a href="github.html" >GitHub, review and shipping</a><a href="github-review-threads.html" >GitHub review threads</a><a href="task-reruns.html" >Selective task reruns</a><a href="deferred-runs.html" >Deferred runs</a></section><section><h2>Your workspace</h2><a href="configuration.html" >Configuration</a><a href="context-inspection.html" >Context and budgets</a><a href="project-conventions.html" >Versioned project conventions</a><a href="checkpoint-review.html" >Checkpoints and reversions</a><a href="launch-profiles.html" >Service launch profiles</a><a href="code-intelligence.html" >Code intelligence</a><a href="architecture-explorer.html" >Architecture explorer</a><a href="memory-storage.html" >Project memory</a><a href="memory-claims.html" >Semantic claim review</a><a href="coordinated-changes.html" >Coordinated changes</a></section><section><h2>Connect and collaborate</h2><a href="team-collaboration.html" >Team collaboration</a><a href="shared-projects.html" >Shared project accounts</a><a href="ssh-projects.html" >SSH projects</a><a href="remote-workers.html" >Remote agent workers</a><a href="code-hosts.html" >GitLab and Bitbucket code workflows</a><a href="external-sources.html" >Read-only external sources</a><a href="automations.html" >Automations and away mode</a><a href="notifications.html" >Outbound notifications</a></section><section><h2>Operate safely</h2><a href="security.html" >Security, subscriptions and caveats</a><a href="filesystem-policy.html" >Project filesystem policy</a><a href="agent-containers.html" >Agent containers</a><a href="filtered-tasks.html" >Filtered Docker tasks</a><a href="dependency-discovery.html" >Dependency discovery</a><a href="maintenance.html" >Backup and maintenance</a></section><section><h2>Build and extend</h2><a href="architecture.html" >Architecture and development</a><a href="api.html" aria-current="page">Local API and command-line client</a><a href="extensions.html" >Provider and workflow extensions</a><a href="provider-compatibility.html" >Provider compatibility</a><a href="accessibility.html" >Accessibility acceptance</a><a href="performance.html" >Performance</a><a href="run-storage.html" >Run storage</a><a href="documentation.html" >Documentation and GitHub Pages</a><a href="releasing.html" >Preparing a preview release</a><a href="vscode.html" >Code Flow for VS Code</a></section><section><h2>Engineering records</h2><a href="application-improvements.html" >Application improvement program</a><a href="project-first-navigation-plan.html" >Project navigation review and implementation plan</a><a href="dynamic-teams-evaluation.html" >Dynamic teams: implementation evidence and rollout decision</a><a href="dynamic-teams-implementation-plan.html" >Dynamic teams, workflows, messaging, and memory</a><a href="dynamic-teams-implementation-review-1.html" >Review 1: the dynamic teams implementation</a><a href="worker-permission-verification.html" >Live worker permission verification</a><a href="dynamic-teams-plan-review-0.html" >Review 0: Dynamic teams implementation plan</a><a href="project-teams-implementation-plan.html" >Standing project teams implementation plan</a><a href="performance-results.html" >Measured performance: 19 October 2026</a></section><a class="app-link" id="back-app" hidden href="/">← Back to app</a></nav>
|
|
6
|
+
<main id="content" tabindex="-1"><div class="breadcrumb">Documentation <span>/</span> Build and extend</div><article><h1 id="local-api-and-command-line-client">Local API and command-line client</h1>
|
|
7
|
+
<p>Use the owner token with the local API or the bundled command-line client. Keep credentials out of repository files and shell history, and inspect an operation’s request and response contract before scripting mutations.</p>
|
|
8
|
+
<h2 id="use-the-authenticated-client">Use the authenticated client</h2>
|
|
9
|
+
<p>Use <code>npm run client -- --help</code> for the HTTP client. It requires the explicit
|
|
10
|
+
<code>CODEFLOW_TOKEN</code> printed/configured by the server and accepts <code>CODEFLOW_URL</code> for
|
|
11
|
+
another configured origin. It never reads agent login files. JSON files and
|
|
12
|
+
shell arguments are treated as data, not executed. Output files are created
|
|
13
|
+
privately and never overwritten.</p>
|
|
14
|
+
<p><code>/api/v1/*</code> exposes the same authenticated operations as <code>/api/*</code>.
|
|
15
|
+
<code>GET /api/v1/capabilities</code> lists the new stable operation families. Existing
|
|
16
|
+
unversioned clients remain compatible. Authentication, Host, Origin and phone
|
|
17
|
+
session checks apply identically to both prefixes.</p>
|
|
18
|
+
<p>Paths below are relative to <code>/api</code> (or <code>/api/v1</code>). Requests with bodies use JSON.
|
|
19
|
+
Successful mutations use the status shown where relevant; validation errors use
|
|
20
|
+
<code>400</code>, missing resources <code>404</code>, and explicit concurrency conflicts <code>409</code>.
|
|
21
|
+
Errors contain an <code>error</code> string. No client-side mutation retry is automatic.</p>
|
|
22
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
23
|
+
<thead>
|
|
24
|
+
<tr>
|
|
25
|
+
<th>Operation</th>
|
|
26
|
+
<th>Request</th>
|
|
27
|
+
<th>Behavior</th>
|
|
28
|
+
</tr>
|
|
29
|
+
</thead>
|
|
30
|
+
<tbody><tr>
|
|
31
|
+
<td><code>POST /projects/:id/repositories</code></td>
|
|
32
|
+
<td><code>repo</code> absolute Git path</td>
|
|
33
|
+
<td>Owner-only explicit membership addition; canonicalizes the root and returns the updated project. Existing membership is idempotent; the 50-repository limit applies.</td>
|
|
34
|
+
</tr>
|
|
35
|
+
<tr>
|
|
36
|
+
<td><code>POST /runs</code></td>
|
|
37
|
+
<td>Existing run fields; optional <code>projectSelection: "explicit"</code> with <code>project</code></td>
|
|
38
|
+
<td>Explicit selection requires an existing project and current canonical repository membership. Rejected membership never silently creates or extends a project. Callers omitting the marker retain legacy placement behavior.</td>
|
|
39
|
+
</tr>
|
|
40
|
+
<tr>
|
|
41
|
+
<td><code>POST /improve-prompt</code></td>
|
|
42
|
+
<td><code>repo</code>, <code>text</code>, optional <code>mode=quick|repo</code>, <code>agent</code>, <code>context</code>, <code>source</code>, <code>execution=local</code></td>
|
|
43
|
+
<td>Owner-only local prompt rewrite in a disposable private Git directory; returns <code>{prompt, summary, agent}</code> after cleanup.</td>
|
|
44
|
+
</tr>
|
|
45
|
+
<tr>
|
|
46
|
+
<td><code>POST /readiness</code></td>
|
|
47
|
+
<td><code>repo</code>, optional <code>baseRef</code>, <code>setup</code>, <code>check</code>, <code>execute</code>, <code>pattern</code>, <code>roles</code>, <code>providers</code></td>
|
|
48
|
+
<td>Inspection by default; <code>execute: true</code> runs commands in a temporary worktree at a pinned commit. Provider scope is described below.</td>
|
|
49
|
+
</tr>
|
|
50
|
+
<tr>
|
|
51
|
+
<td><code>GET /verification/profile</code></td>
|
|
52
|
+
<td><code>repo</code>, <code>preset</code> query</td>
|
|
53
|
+
<td>Detect lightweight, standard or thorough checks.</td>
|
|
54
|
+
</tr>
|
|
55
|
+
<tr>
|
|
56
|
+
<td><code>POST /verification</code></td>
|
|
57
|
+
<td><code>repo</code>, <code>profile</code> or <code>preset</code>, optional <code>baseRef</code>, <code>baseline</code>, <code>setup</code>, <code>repeats</code></td>
|
|
58
|
+
<td>Execute bounded required gates on isolated checkouts and return structured evidence plus Markdown.</td>
|
|
59
|
+
</tr>
|
|
60
|
+
<tr>
|
|
61
|
+
<td><code>GET /workspace/file</code></td>
|
|
62
|
+
<td><code>repo</code>, <code>path</code> query</td>
|
|
63
|
+
<td>Load a bounded regular text file and its hash.</td>
|
|
64
|
+
</tr>
|
|
65
|
+
<tr>
|
|
66
|
+
<td><code>POST /workspace/file</code></td>
|
|
67
|
+
<td><code>repo</code>, <code>path</code>, <code>text</code>, <code>expectedHash</code></td>
|
|
68
|
+
<td>Save only the loaded version; conflicts return 409. Active run worktrees and symlinks are refused.</td>
|
|
69
|
+
</tr>
|
|
70
|
+
<tr>
|
|
71
|
+
<td><code>POST /workspace/merge-file</code></td>
|
|
72
|
+
<td><code>repo</code>, <code>path</code>, <code>base</code>, <code>draft</code></td>
|
|
73
|
+
<td>Compute a three-way merge against the current file without writing. Returns <code>current</code>, merged <code>text</code>, <code>conflicts</code>, and <code>clean</code>; conflict markers need manual resolution before saving.</td>
|
|
74
|
+
</tr>
|
|
75
|
+
<tr>
|
|
76
|
+
<td><code>GET /workspace/search</code></td>
|
|
77
|
+
<td><code>repo</code>, <code>q</code>, <code>mode=text|symbols</code> query</td>
|
|
78
|
+
<td>Bounded text or declaration search with source line numbers.</td>
|
|
79
|
+
</tr>
|
|
80
|
+
<tr>
|
|
81
|
+
<td><code>GET /workspace/dependencies</code></td>
|
|
82
|
+
<td><code>repo</code> query</td>
|
|
83
|
+
<td>Bounded static architecture graph across JavaScript/TypeScript, Python, Go, Rust and Java; packages, cycles and unresolved/computed edges are explicit.</td>
|
|
84
|
+
</tr>
|
|
85
|
+
<tr>
|
|
86
|
+
<td><code>POST /workspace/context</code></td>
|
|
87
|
+
<td><code>repo</code>, <code>paths</code></td>
|
|
88
|
+
<td>Preview explicit file context, approximate token size and sensitive-file omissions.</td>
|
|
89
|
+
</tr>
|
|
90
|
+
<tr>
|
|
91
|
+
<td><code>GET /workspace/checkpoints</code></td>
|
|
92
|
+
<td><code>repo</code>, optional <code>ref</code> query</td>
|
|
93
|
+
<td>List exact commit checkpoints.</td>
|
|
94
|
+
</tr>
|
|
95
|
+
<tr>
|
|
96
|
+
<td><code>POST /workspace/apply-checkpoint</code></td>
|
|
97
|
+
<td><code>repo</code>, <code>runId</code>, <code>source</code>, <code>paths</code>, <code>expectedHead</code></td>
|
|
98
|
+
<td>Apply selected files to an idle, clean run worktree without committing.</td>
|
|
99
|
+
</tr>
|
|
100
|
+
<tr>
|
|
101
|
+
<td><code>POST /workspace/checkpoint-hunks</code></td>
|
|
102
|
+
<td><code>repo</code>, <code>runId</code>, <code>source</code>, <code>path</code></td>
|
|
103
|
+
<td>Preview server-generated hunks for one existing regular text file in an idle run worktree. Returns pinned <code>head</code>, <code>source</code>, <code>path</code>, and bounded <code>hunks</code> with IDs.</td>
|
|
104
|
+
</tr>
|
|
105
|
+
<tr>
|
|
106
|
+
<td><code>POST /workspace/apply-hunks</code></td>
|
|
107
|
+
<td><code>repo</code>, <code>runId</code>, <code>source</code>, <code>path</code>, <code>expectedHead</code>, <code>hunks</code></td>
|
|
108
|
+
<td>Apply 1–200 distinct preview IDs to a clean, unchanged run checkout. Arbitrary client patches are never accepted; files stay unstaged.</td>
|
|
109
|
+
</tr>
|
|
110
|
+
<tr>
|
|
111
|
+
<td><code>POST /runs/:id/pause</code></td>
|
|
112
|
+
<td><code>paused</code></td>
|
|
113
|
+
<td>Hold new dispatch at operation boundaries; active work finishes.</td>
|
|
114
|
+
</tr>
|
|
115
|
+
<tr>
|
|
116
|
+
<td><code>POST /runs/:id/priority</code></td>
|
|
117
|
+
<td><code>priority</code> from -10 to 10</td>
|
|
118
|
+
<td>Update dispatch priority, including waiting work. Equal priorities favor less-busy projects.</td>
|
|
119
|
+
</tr>
|
|
120
|
+
<tr>
|
|
121
|
+
<td><code>POST /runs/:id/provider-chat</code></td>
|
|
122
|
+
<td><code>agent</code>, optional <code>settings: {model, effort}</code>, <code>message</code></td>
|
|
123
|
+
<td>Start a single-agent child with another provider, a portable conversation transcript, saved context files and a new worktree from the source result commit. Requires an idle source and clean worktree; retains project, computer and permission restrictions. Provider sessions and side-chat transcripts are excluded.</td>
|
|
124
|
+
</tr>
|
|
125
|
+
<tr>
|
|
126
|
+
<td><code>POST /runs/:id/fork</code></td>
|
|
127
|
+
<td>exact <code>commit</code>, optional <code>task</code></td>
|
|
128
|
+
<td>Begin a child run from an owned checkpoint, retaining source trust restrictions.</td>
|
|
129
|
+
</tr>
|
|
130
|
+
<tr>
|
|
131
|
+
<td><code>POST /runs/:id/revise-goal</code></td>
|
|
132
|
+
<td><code>message</code>, optional <code>budget</code></td>
|
|
133
|
+
<td>Create a new Auto-team run with a user-authored goal revision and prior work references; returns 201 with its <code>id</code>.</td>
|
|
134
|
+
</tr>
|
|
135
|
+
<tr>
|
|
136
|
+
<td><code>POST /runs/:id/rerun-tasks</code></td>
|
|
137
|
+
<td><code>expectedHead</code>, <code>taskIds</code>, optional selected-task <code>instructions</code>, explicit <code>budget</code></td>
|
|
138
|
+
<td>Execute accepted selected tasks and every dependency descendant in a child at the pinned integration commit. Retained work is labeled baseline input; final checks/review are independent. Returns 201 <code>{id}</code>.</td>
|
|
139
|
+
</tr>
|
|
140
|
+
<tr>
|
|
141
|
+
<td><code>POST /runs/:id/team-plan</code></td>
|
|
142
|
+
<td><code>revision</code>, <code>tasks</code>, <code>contracts</code>, <code>rationale</code></td>
|
|
143
|
+
<td>Edit a pending Auto-team plan before dispatch. Keeps member identities and requirements fixed; validates owners, dependencies, paths and acceptance mappings. Returns <code>team</code>; stale revisions return 409.</td>
|
|
144
|
+
</tr>
|
|
145
|
+
<tr>
|
|
146
|
+
<td><code>GET /runs/:id/review-coverage</code></td>
|
|
147
|
+
<td><code>branch</code> query</td>
|
|
148
|
+
<td>Return current commit, changed files, reviewed files, percentage, heuristic risk, stale-review indicator and human rework history. Only run-owned branches are allowed.</td>
|
|
149
|
+
</tr>
|
|
150
|
+
<tr>
|
|
151
|
+
<td><code>POST /runs/:id/review-coverage</code></td>
|
|
152
|
+
<td><code>branch</code>, <code>expectedHead</code>, <code>path</code>, <code>reviewed</code></td>
|
|
153
|
+
<td>Record or remove review of a changed file at that exact commit. Branch movement invalidates prior coverage; stale requests are rejected.</td>
|
|
154
|
+
</tr>
|
|
155
|
+
<tr>
|
|
156
|
+
<td><code>POST /runs/:id/human-rework</code></td>
|
|
157
|
+
<td><code>branch</code>, <code>expectedHead</code>, <code>minutes</code>, optional <code>note</code></td>
|
|
158
|
+
<td>Append a user-entered correction-time record (1–1,440 minutes, note ≤2,000 characters, at most 100 records/run). Returns 201 with updated coverage.</td>
|
|
159
|
+
</tr>
|
|
160
|
+
<tr>
|
|
161
|
+
<td><code>POST /runs/:id/validate-merge</code></td>
|
|
162
|
+
<td><code>branch</code>, <code>into</code>, optional <code>allowUntrusted</code></td>
|
|
163
|
+
<td>Verify the combined result with the current target in a disposable checkout. Returns pinned <code>source</code>, <code>target</code>, merge <code>tree</code>, <code>report</code> or <code>conflicts</code>. Requires a configured check/profile.</td>
|
|
164
|
+
</tr>
|
|
165
|
+
<tr>
|
|
166
|
+
<td><code>POST /runs/:id/merge</code></td>
|
|
167
|
+
<td><code>branch</code>, <code>into</code>, optional <code>archiveAfter</code>, <code>requireValidation</code></td>
|
|
168
|
+
<td>Merge an owned result into the selected local branch. <code>requireValidation: true</code> requires passing verification for unchanged source/target and the exact merged tree.</td>
|
|
169
|
+
</tr>
|
|
170
|
+
<tr>
|
|
171
|
+
<td><code>POST /runs/:id/archive</code></td>
|
|
172
|
+
<td><code>archived</code>, optional <code>cleanup</code>, <code>deleteBranches</code></td>
|
|
173
|
+
<td>Archive or unarchive a finished run. Use <code>cleanup: false</code> to hide it while keeping worktrees and branches.</td>
|
|
174
|
+
</tr>
|
|
175
|
+
<tr>
|
|
176
|
+
<td><code>DELETE /runs/:id</code></td>
|
|
177
|
+
<td>—</td>
|
|
178
|
+
<td>Permanently remove a finished run's conversation/history and private run memory. Active runs and standing project team runs are rejected; archive managed runs to retain recovery and approval evidence. Git branches, worktrees and repository files remain. Run-list streams publish a summary with <code>deleted: true</code>; clients remove that ID.</td>
|
|
179
|
+
</tr>
|
|
180
|
+
<tr>
|
|
181
|
+
<td><code>GET /runs/:id/export</code></td>
|
|
182
|
+
<td>optional <code>transcript=1</code> query</td>
|
|
183
|
+
<td>Export sanitized run metadata, checks, and requested transcript.</td>
|
|
184
|
+
</tr>
|
|
185
|
+
<tr>
|
|
186
|
+
<td><code>GET /approvals</code></td>
|
|
187
|
+
<td>optional <code>run</code> query</td>
|
|
188
|
+
<td>Inspect bounded per-action permission requests.</td>
|
|
189
|
+
</tr>
|
|
190
|
+
<tr>
|
|
191
|
+
<td><code>POST /approvals/:id</code></td>
|
|
192
|
+
<td><code>decision=approve|decline</code></td>
|
|
193
|
+
<td>Answer one still-active request once; expired or cancelled requests return 409.</td>
|
|
194
|
+
</tr>
|
|
195
|
+
<tr>
|
|
196
|
+
<td><code>GET /notes/history</code></td>
|
|
197
|
+
<td><code>key</code> query</td>
|
|
198
|
+
<td>Read bounded saved note revisions.</td>
|
|
199
|
+
</tr>
|
|
200
|
+
<tr>
|
|
201
|
+
<td><code>GET /notes/search</code></td>
|
|
202
|
+
<td><code>q</code> query</td>
|
|
203
|
+
<td>Search current saved notes.</td>
|
|
204
|
+
</tr>
|
|
205
|
+
<tr>
|
|
206
|
+
<td><code>POST /notes/restore</code></td>
|
|
207
|
+
<td><code>key</code>, <code>revision</code>, <code>expectedRevision</code></td>
|
|
208
|
+
<td>Restore a prior note as a new revision.</td>
|
|
209
|
+
</tr>
|
|
210
|
+
<tr>
|
|
211
|
+
<td><code>POST /remote/tls</code></td>
|
|
212
|
+
<td><code>{mode: "tailscale"}</code> or <code>{mode: "import", hostname, cert, key}</code> with PEM strings</td>
|
|
213
|
+
<td>Local owner only. Validate and save HTTPS configuration, rotate pairing, disable full control and reload the network listener without restarting runs. Tailscale mode uses the connected computer's DNS name. Environment-managed TLS cannot be replaced here. Returns remote status and public certificate metadata, never PEM material.</td>
|
|
214
|
+
</tr>
|
|
215
|
+
<tr>
|
|
216
|
+
<td><code>GET /remote/devices</code></td>
|
|
217
|
+
<td>none</td>
|
|
218
|
+
<td>List paired device metadata, never session credentials.</td>
|
|
219
|
+
</tr>
|
|
220
|
+
<tr>
|
|
221
|
+
<td><code>DELETE /remote/devices/:id</code></td>
|
|
222
|
+
<td>none</td>
|
|
223
|
+
<td>Revoke one device immediately.</td>
|
|
224
|
+
</tr>
|
|
225
|
+
<tr>
|
|
226
|
+
<td><code>GET /diagnostics</code></td>
|
|
227
|
+
<td>optional <code>repo</code> query</td>
|
|
228
|
+
<td>Export versions, queue/write health and sanitized recent logs.</td>
|
|
229
|
+
</tr>
|
|
230
|
+
</tbody></table>
|
|
231
|
+
</div><p>Readiness accepts <code>roles</code> as an object of provider IDs (strings or arrays). Concrete assignments must be installed, compatible and not signed out; unused providers are skipped. <code>providers</code> alone is an explicit required-provider list. With <code>roles</code>, it limits the eligible pool for <code>auto</code> assignments; without that limit, Auto considers registered providers. An Auto-team's <code>roles.pool</code> contains alternatives and needs at least one usable member (also within <code>providers</code>, if supplied), while its coordinator is required. An explicit empty scope fails readiness. Unknown authentication remains a warning. Omitting both <code>roles</code> and <code>providers</code> preserves the original checks of all installed providers.</p>
|
|
232
|
+
<p>Scope IDs must be 1–128 letters, digits, underscores, colons, slashes, periods or hyphens, beginning with a letter or digit. Provider values must be registered IDs or <code>"auto"</code>; lists allow at most 128 entries and <code>roles</code> allows at most 64 keys. Malformed scope returns HTTP 400. The composer sends its current workflow and assignments and discards displayed or in-flight reports when that selection changes.</p>
|
|
233
|
+
<p>Prompt improvement accepts up to 20,000 input/output characters and a 1,000-character
|
|
234
|
+
summary. Context is limited to 50 names of 300 characters; optional source metadata
|
|
235
|
+
contains <code>kind=issue|pr|alert</code>, integer <code>number</code> and a title of at most 200 characters.
|
|
236
|
+
Quick mode supplies only the text and metadata; repository mode exports a pinned
|
|
237
|
+
committed-HEAD snapshot with a fresh Git namespace. Source Git configuration, hooks,
|
|
238
|
+
remotes, history, ignored/untracked content and executable provider configuration
|
|
239
|
+
are not copied. Both use safe provider permissions and an in-process repository
|
|
240
|
+
mutation lease; cleanup removes only the private directory after failure or
|
|
241
|
+
cancellation, never resetting the source checkout or its index. See
|
|
242
|
+
<a href="getting-started.html#your-first-run">snapshot bounds</a>. Snapshot preparation has a
|
|
243
|
+
60-second deadline. Inherited Git routing/configuration overrides are refused so
|
|
244
|
+
the provider cannot accidentally target another checkout through its environment.
|
|
245
|
+
Improve also requires absolute, nonempty PATH entries and currently supports
|
|
246
|
+
macOS/Linux; Windows is refused until executable discovery is pinned and tested.
|
|
247
|
+
Explicit SSH/container profiles return
|
|
248
|
+
400, shared accounts return 403, repository/policy conflicts return 409, the three-turn
|
|
249
|
+
global concurrency limit returns 429, and provider/snapshot failures return 502.
|
|
250
|
+
Closing the request cancels the turn; clients must not automatically retry it.</p>
|
|
251
|
+
<p>Verification profiles contain <code>name</code>, up to 12 <code>checks</code>, optional <code>setup</code>, and
|
|
252
|
+
up to 48 <code>requirements</code>. Each check has a unique <code>id</code>, <code>kind</code>, <code>command</code>, optional
|
|
253
|
+
<code>title</code>, <code>required</code> (default true), and <code>timeoutMs</code> (default five minutes, maximum
|
|
254
|
+
30 minutes). Kinds are <code>build</code>, <code>typecheck</code>, <code>lint</code>, <code>unit</code>, <code>integration</code>,
|
|
255
|
+
<code>browser</code>, <code>mutation</code>, <code>visual</code>, <code>accessibility</code>, and <code>custom</code>. A requirement is
|
|
256
|
+
<code>{id, description, checks: [checkId, ...]}</code>; an empty mapping remains uncovered.
|
|
257
|
+
A failed mapped gate or uncovered criterion prevents <code>verified</code> status. Repeats
|
|
258
|
+
are limited to 1–3; a mixed passing/failing result remains flaky. Baseline
|
|
259
|
+
failures are evidence, not permission to ignore a required gate.</p>
|
|
260
|
+
<p>Standalone verification pins the requested commit, excludes uncommitted changes,
|
|
261
|
+
and runs setup and gates on temporary worktrees. A setup or gate that changes
|
|
262
|
+
tracked files, the staged tree, or HEAD is rejected with 409 before subsequent
|
|
263
|
+
gates execute. Ignored and untracked generated output is permitted. Setup failure
|
|
264
|
+
returns 422. Run-attached profile verification similarly produces a blocked
|
|
265
|
+
report on candidate drift. Requirement coverage records the checks selected by
|
|
266
|
+
the user; it does not prove those checks semantically exercise the criterion.
|
|
267
|
+
Human file coverage is a separate, user-authored commit-bound record.
|
|
268
|
+
See <a href="task-reruns.html">selective task reruns</a> for budget, replay, retained-evidence
|
|
269
|
+
and unchanged-result semantics. Client-authored <code>teamRerun</code> seeds are never
|
|
270
|
+
accepted by run creation.</p>
|
|
271
|
+
<h2 id="paginated-history-and-event-feeds">Paginated history and event feeds</h2>
|
|
272
|
+
<p><code>GET /runs</code> keeps the legacy full-list response when no <code>limit</code> query is supplied.
|
|
273
|
+
With <code>limit=1..100</code>, it returns <code>{runs, total, nextCursor?, nextBefore?}</code>. Pass the
|
|
274
|
+
opaque <code>nextCursor</code> as <code>cursor</code> on the next request; cursors preserve ties for
|
|
275
|
+
runs created in the same millisecond. Optional <code>q</code> filters all indexed run
|
|
276
|
+
metadata and <code>project</code> selects a project (including legacy repository-based membership).
|
|
277
|
+
<code>status=all|attention|running|passed|failing|flagged</code>, <code>pattern</code>, <code>agent</code>, and
|
|
278
|
+
<code>repo</code> filter the complete authorized index before totals and pagination. Passed
|
|
279
|
+
requires completed execution and passing verification; blocked or unverified
|
|
280
|
+
results are excluded. <code>section=waiting|running|results</code> selects a non-archived
|
|
281
|
+
project-page section. The legacy <code>before</code> timestamp is
|
|
282
|
+
supported but can omit timestamp ties; prefer <code>cursor</code>. Keep filters consistent
|
|
283
|
+
between pages. Invalid cursors, status/section values and page sizes return 400.</p>
|
|
284
|
+
<p><code>GET /projects/:id/summary</code> returns <code>{live, archived, pending, week, sections}</code>.
|
|
285
|
+
<code>week</code> contains <code>{runs, passed, costUsd}</code> for the last seven days, including
|
|
286
|
+
archived history. <code>sections</code> contains cursor pages for <code>waiting</code>, <code>running</code> and
|
|
287
|
+
<code>results</code>, with complete totals. Fetch additional section pages through <code>/runs</code>.
|
|
288
|
+
These totals never depend on which sidebar pages a browser has loaded.</p>
|
|
289
|
+
<p>The shared <code>/stream</code> connection accepts the <code>approvals</code> topic. It sends a
|
|
290
|
+
<code>{type: "snapshot", records: [...]}</code> frame initially and whenever pending tool
|
|
291
|
+
approvals change. Reconnects receive a fresh snapshot; approval decisions still
|
|
292
|
+
use the single-action POST endpoint. Older hosts without this topic use the
|
|
293
|
+
client's visibility-aware polling fallback.</p>
|
|
294
|
+
<p><code>GET /events?limit=1..100</code> is the bounded SSE run feed. Its initial <code>hello</code>
|
|
295
|
+
contains the recent page, every running run and at most 100 older attention
|
|
296
|
+
items, <code>total</code>, <code>nextCursor</code>, <code>attentionTotal</code>, <code>attentionTruncated</code>, and an
|
|
297
|
+
optional <code>attentionNextCursor</code>. Older attention remains accessible through
|
|
298
|
+
history; the rail displays the truncation. Without <code>limit</code>, the legacy full
|
|
299
|
+
initial list remains available. Policy changes invalidate the feed generation.
|
|
300
|
+
Reconnect using <code>Last-Event-ID</code>; a valid retained cursor resumes snapshots, while
|
|
301
|
+
a stale cursor triggers a fresh <code>hello</code>. <code>GET /runs/:id/events</code> streams that run's
|
|
302
|
+
retained events with a run-bound replay cursor. These are live feeds, not durable
|
|
303
|
+
client acknowledgment queues.</p>
|
|
304
|
+
<h2 id="read-only-external-sources">Read-only external sources</h2>
|
|
305
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
306
|
+
<thead>
|
|
307
|
+
<tr>
|
|
308
|
+
<th>Operation</th>
|
|
309
|
+
<th>Request</th>
|
|
310
|
+
<th>Behavior</th>
|
|
311
|
+
</tr>
|
|
312
|
+
</thead>
|
|
313
|
+
<tbody><tr>
|
|
314
|
+
<td><code>GET /integrations</code></td>
|
|
315
|
+
<td>none</td>
|
|
316
|
+
<td>List explicitly server-configured provider metadata and availability without credential names or values.</td>
|
|
317
|
+
</tr>
|
|
318
|
+
<tr>
|
|
319
|
+
<td><code>GET /integrations/:id/items</code></td>
|
|
320
|
+
<td><code>kind=issue|pr</code>, optional <code>cursor</code> query</td>
|
|
321
|
+
<td>Return <code>{items, nextCursor?, truncated}</code> from a bounded provider listing. Supported kinds depend on the provider.</td>
|
|
322
|
+
</tr>
|
|
323
|
+
<tr>
|
|
324
|
+
<td><code>POST /integrations/:id/import</code></td>
|
|
325
|
+
<td><code>kind</code>, <code>key</code></td>
|
|
326
|
+
<td>Read one item and return 201 with a server-issued source snapshot ID and untrusted marker.</td>
|
|
327
|
+
</tr>
|
|
328
|
+
</tbody></table>
|
|
329
|
+
</div><p>Run creation accepts <code>externalSourceId</code> from the import response, or
|
|
330
|
+
<code>externalSourceRef: {integration, kind, key}</code> for a server-side import. It rejects
|
|
331
|
+
client-authored <code>externalSource</code> snapshots, invalid/expired IDs, and simultaneous
|
|
332
|
+
ID/ref inputs. Snapshots expire after 30 minutes and the server retains at most
|
|
333
|
+
200. Imported context forces Safe permissions, removes secret-file copying, and
|
|
334
|
+
requires network-disabled checks in a container or explicit host authorization.
|
|
335
|
+
Forks and continuations inherit the trust boundary. Source text is task context;
|
|
336
|
+
PR imports do not fetch or check out remote code. See <a href="external-sources.html">external source setup and
|
|
337
|
+
provider limits</a>.</p>
|
|
338
|
+
<h2 id="outbound-notifications">Outbound notifications</h2>
|
|
339
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
340
|
+
<thead>
|
|
341
|
+
<tr>
|
|
342
|
+
<th>Operation</th>
|
|
343
|
+
<th>Request</th>
|
|
344
|
+
<th>Behavior</th>
|
|
345
|
+
</tr>
|
|
346
|
+
</thead>
|
|
347
|
+
<tbody><tr>
|
|
348
|
+
<td><code>GET /notifications</code></td>
|
|
349
|
+
<td>none</td>
|
|
350
|
+
<td>List configured destination name/protocol/hostname, availability, opt-in settings, drop count and last failure. No URL paths, tokens, credential references or payloads.</td>
|
|
351
|
+
</tr>
|
|
352
|
+
<tr>
|
|
353
|
+
<td><code>POST /notifications/:id</code></td>
|
|
354
|
+
<td><code>enabled</code>, <code>events</code>, <code>projects</code></td>
|
|
355
|
+
<td>Save explicit target opt-in. Events are <code>done</code>, <code>failure</code>, <code>needs-attention</code>; scope is <code>"all"</code> or project IDs (<code>"unassigned"</code> covers no project). Enabling requires an event and nonempty scope.</td>
|
|
356
|
+
</tr>
|
|
357
|
+
<tr>
|
|
358
|
+
<td><code>GET /notifications/deliveries</code></td>
|
|
359
|
+
<td>none</td>
|
|
360
|
+
<td>List at most 200 delivery metadata records, newest first, without saved message payloads.</td>
|
|
361
|
+
</tr>
|
|
362
|
+
<tr>
|
|
363
|
+
<td><code>POST /notifications/:id/test</code></td>
|
|
364
|
+
<td>empty body</td>
|
|
365
|
+
<td>Explicitly queue a test, including for a disabled destination. Returns 202; delivery proceeds in the background.</td>
|
|
366
|
+
</tr>
|
|
367
|
+
<tr>
|
|
368
|
+
<td><code>POST /notifications/deliveries/:id/retry</code></td>
|
|
369
|
+
<td>empty body</td>
|
|
370
|
+
<td>Explicitly requeue a failed delivery, preserving lifetime attempts and manual-retry count. Returns 202.</td>
|
|
371
|
+
</tr>
|
|
372
|
+
</tbody></table>
|
|
373
|
+
</div><p>Destinations are configured only through server environment JSON/file with
|
|
374
|
+
environment-variable references for HTTPS URLs and credentials. New destinations
|
|
375
|
+
are disabled. Delivery uses no redirects, a ten-second timeout and at most three
|
|
376
|
+
automatic attempts per batch. Changing the URL requires renewed opt-in. Unknown
|
|
377
|
+
outcomes after restart require manual retry; recipients should deduplicate the
|
|
378
|
+
persistent <code>Idempotency-Key</code>. Notification storage/configuration failure returns
|
|
379
|
+
503 and leaves delivery off. See <a href="notifications.html">configuration, disclosure, and delivery
|
|
380
|
+
limitations</a>.</p>
|
|
381
|
+
<h2 id="project-memory-analysis-and-revision-commands">Project memory analysis and revision commands</h2>
|
|
382
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
383
|
+
<thead>
|
|
384
|
+
<tr>
|
|
385
|
+
<th>Operation</th>
|
|
386
|
+
<th>Request</th>
|
|
387
|
+
<th>Behavior</th>
|
|
388
|
+
</tr>
|
|
389
|
+
</thead>
|
|
390
|
+
<tbody><tr>
|
|
391
|
+
<td><code>GET /projects/:id/memory</code></td>
|
|
392
|
+
<td>optional <code>repo</code> query</td>
|
|
393
|
+
<td>List authorized project entries. A supplied repository must belong to the project.</td>
|
|
394
|
+
</tr>
|
|
395
|
+
<tr>
|
|
396
|
+
<td><code>POST /projects/:id/memory/commands</code></td>
|
|
397
|
+
<td><code>op=create|approve|update|delete|feedback</code> plus operation fields</td>
|
|
398
|
+
<td>Run user-authorized revision commands. All existing-entry mutations require exact <code>id</code> and <code>expectedRevision</code>; conflicts return 409. Client authority/origins are not forwarded.</td>
|
|
399
|
+
</tr>
|
|
400
|
+
<tr>
|
|
401
|
+
<td><code>GET /projects/:id/memory/analysis</code></td>
|
|
402
|
+
<td><code>repo</code> query (optional for a single-repo project)</td>
|
|
403
|
+
<td>Return bounded provenance, freshness, duplicates/semantic claims, deletion impact and curated onboarding with exact source revisions and truncation indicators.</td>
|
|
404
|
+
</tr>
|
|
405
|
+
<tr>
|
|
406
|
+
<td><code>POST /projects/:id/memory/analysis/publish</code></td>
|
|
407
|
+
<td><code>repo</code>, <code>expectedSources</code> from <code>analysis.onboarding.sourceRefs</code></td>
|
|
408
|
+
<td>Recompute and publish eligible user-authored onboarding guidance with pinned provenance. Changed sources return 409; no eligible sources returns 400.</td>
|
|
409
|
+
</tr>
|
|
410
|
+
</tbody></table>
|
|
411
|
+
</div><p>Create accepts <code>repo</code>, <code>title</code>, <code>body</code>, optional <code>paths</code>, <code>tags</code>, and
|
|
412
|
+
<code>applicability</code>. Update accepts editable fields and optional <code>accept: true</code>; an
|
|
413
|
+
ordinary edit never accepts a proposal automatically. Feedback accepts <code>rating</code>,
|
|
414
|
+
optional <code>note</code> and <code>runId</code>; a run reference must have selected that exact entry
|
|
415
|
+
revision. Analysis is heuristic and bounded: lexical similarity does not infer
|
|
416
|
+
contradictions on its own. Deterministic semantic claims compare supported
|
|
417
|
+
policies and structured boolean/text/numeric intervals only across overlapping
|
|
418
|
+
applicability; unsupported prose is counted. Git freshness checks do not
|
|
419
|
+
establish semantic correctness. See <a href="memory-claims.html">supported claims</a>.
|
|
420
|
+
Publication excludes imported/private/untrusted material and prior onboarding
|
|
421
|
+
summaries. Memory APIs remain owner-only; shared project roles use the separate
|
|
422
|
+
closed review surface described below.</p>
|
|
423
|
+
<h2 id="multi-service-launch-profiles">Multi-service launch profiles</h2>
|
|
424
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
425
|
+
<thead>
|
|
426
|
+
<tr>
|
|
427
|
+
<th>Operation</th>
|
|
428
|
+
<th>Request</th>
|
|
429
|
+
<th>Behavior</th>
|
|
430
|
+
</tr>
|
|
431
|
+
</thead>
|
|
432
|
+
<tbody><tr>
|
|
433
|
+
<td><code>GET /runs/:id/launch-profiles</code></td>
|
|
434
|
+
<td><code>worktree</code> query</td>
|
|
435
|
+
<td>Read <code>.codeflow/launch.json</code> from the owned worktree and return <code>{profiles, found, error?, session}</code> with sanitized configuration and session logs.</td>
|
|
436
|
+
</tr>
|
|
437
|
+
<tr>
|
|
438
|
+
<td><code>POST /runs/:id/launch-profiles</code></td>
|
|
439
|
+
<td><code>worktree</code>, <code>profile</code>, optional <code>allowUntrusted</code></td>
|
|
440
|
+
<td>Start a configured dependency-ordered group; returns 201 with session and assigned local URLs/ports. Locked-down host execution requires explicit authorization.</td>
|
|
441
|
+
</tr>
|
|
442
|
+
<tr>
|
|
443
|
+
<td><code>DELETE /runs/:id/launch-profiles</code></td>
|
|
444
|
+
<td><code>worktree</code> query</td>
|
|
445
|
+
<td>Stop the owned launch session and return <code>{stopped}</code>.</td>
|
|
446
|
+
</tr>
|
|
447
|
+
</tbody></table>
|
|
448
|
+
</div><p>Profiles configure at most six services and bounded commands, relative working
|
|
449
|
+
directories, dependencies, environment values and optional local HTTP health
|
|
450
|
+
checks. The server assigns ports and peer URL variables. This starts local
|
|
451
|
+
processes; it is not remote deployment or hosting. See <a href="launch-profiles.html">launch profile
|
|
452
|
+
configuration and lifecycle</a>.</p>
|
|
453
|
+
<h2 id="automation-inspection-and-replay">Automation inspection and replay</h2>
|
|
454
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
455
|
+
<thead>
|
|
456
|
+
<tr>
|
|
457
|
+
<th>Operation</th>
|
|
458
|
+
<th>Request</th>
|
|
459
|
+
<th>Behavior</th>
|
|
460
|
+
</tr>
|
|
461
|
+
</thead>
|
|
462
|
+
<tbody><tr>
|
|
463
|
+
<td><code>GET /automations</code></td>
|
|
464
|
+
<td>none</td>
|
|
465
|
+
<td>List configured local schedules and webhook triggers.</td>
|
|
466
|
+
</tr>
|
|
467
|
+
<tr>
|
|
468
|
+
<td><code>POST /automations</code></td>
|
|
469
|
+
<td><code>name</code>, <code>run</code>, <code>schedule</code> and/or <code>webhook</code>, optional <code>enabled</code>, <code>isolate</code>, <code>image</code></td>
|
|
470
|
+
<td>Validate saved run settings and create a trigger (201).</td>
|
|
471
|
+
</tr>
|
|
472
|
+
<tr>
|
|
473
|
+
<td><code>POST /automations/:id</code></td>
|
|
474
|
+
<td>changed fields; optional <code>rotateToken</code></td>
|
|
475
|
+
<td>Update validated settings or rotate the webhook credential.</td>
|
|
476
|
+
</tr>
|
|
477
|
+
<tr>
|
|
478
|
+
<td><code>POST /automations/schedule-preview</code></td>
|
|
479
|
+
<td><code>schedule</code>, optional <code>after</code>, <code>count</code></td>
|
|
480
|
+
<td>Return <code>{times}</code> (at most ten UTC millisecond timestamps) without scheduling work.</td>
|
|
481
|
+
</tr>
|
|
482
|
+
<tr>
|
|
483
|
+
<td><code>POST /automations/:id/preview</code></td>
|
|
484
|
+
<td>optional webhook event input</td>
|
|
485
|
+
<td>Dry-run saved settings, selected sweep items, permissions and limits without starting runs or consuming the event.</td>
|
|
486
|
+
</tr>
|
|
487
|
+
<tr>
|
|
488
|
+
<td><code>GET /automations/:id/events</code></td>
|
|
489
|
+
<td>none</td>
|
|
490
|
+
<td>Inspect bounded persistent event records including queued, started, failed and dropped deliveries.</td>
|
|
491
|
+
</tr>
|
|
492
|
+
<tr>
|
|
493
|
+
<td><code>POST /automations/:id/events/:eventId/retry</code></td>
|
|
494
|
+
<td>empty body</td>
|
|
495
|
+
<td>Replay an eligible saved event through the same validation, deduplication and queue limits.</td>
|
|
496
|
+
</tr>
|
|
497
|
+
<tr>
|
|
498
|
+
<td><code>POST /automations/:id/run</code></td>
|
|
499
|
+
<td>empty body</td>
|
|
500
|
+
<td>Explicitly fire now; returns 201 with run IDs, or 409 if skipped.</td>
|
|
501
|
+
</tr>
|
|
502
|
+
<tr>
|
|
503
|
+
<td><code>DELETE /automations/:id</code></td>
|
|
504
|
+
<td>none</td>
|
|
505
|
+
<td>Remove the trigger.</td>
|
|
506
|
+
</tr>
|
|
507
|
+
</tbody></table>
|
|
508
|
+
</div><p>Daily schedules use <code>{at: "HH:MM", timezone?: "IANA/Zone", days?: [0..6]}</code>;
|
|
509
|
+
Sunday is zero and an explicit empty weekday list is invalid. Omitted timezone
|
|
510
|
+
uses server local time. Interval schedules use <code>{every: minutes}</code>. During a
|
|
511
|
+
repeated local clock time, a daily schedule fires once on its first occurrence;
|
|
512
|
+
a missing local time shifts forward by the clock gap. Webhook event history
|
|
513
|
+
keeps at most 100 records and the pending queue at most ten. Replay preserves the
|
|
514
|
+
saved event content, while rechecking current configuration and limits. It never
|
|
515
|
+
merges results automatically.</p>
|
|
516
|
+
<p>Run creation accepts <code>loop.verification</code>, <code>loop.maxTokens</code>, <code>loop.maxCostUsd</code>,
|
|
517
|
+
<code>loop.agentContainer</code>, and explicit <code>approvals.tools</code>. Token/cost limits count
|
|
518
|
+
only provider-reported usage and are checked between operations. API-equivalent
|
|
519
|
+
cost is not a subscription charge. Automated and locked-down runs never wait for
|
|
520
|
+
native tool permissions. See <a href="agent-containers.html">agent containers</a>,
|
|
521
|
+
<a href="external-sources.html">external sources</a>, and <a href="maintenance.html">maintenance</a>.</p>
|
|
522
|
+
<p>The client has no automatic retry for mutations. A dropped response is not proof
|
|
523
|
+
that an operation did not execute; inspect the run before repeating a creation.</p>
|
|
524
|
+
<h2 id="shared-identities-and-project-review">Shared identities and project review</h2>
|
|
525
|
+
<p><code>GET /auth/self</code>, <code>POST /auth/login {username,password}</code> and <code>POST /auth/logout</code>
|
|
526
|
+
bootstrap the local viewer/reviewer dashboard. Login sets a distinct session
|
|
527
|
+
cookie; tokens and password/session hashes are never returned. Shared sessions
|
|
528
|
+
require actual TLS or a direct loopback connection without forwarding headers.
|
|
529
|
+
Owner account administration uses <code>GET/POST /accounts</code>, <code>PUT /accounts/:id</code>, and
|
|
530
|
+
<code>POST /accounts/:id/revoke-sessions</code>, with the current account-state <code>revision</code>.</p>
|
|
531
|
+
<p>Shared routing is a closed allowlist. Project/run lists, result detail, safe
|
|
532
|
+
events, diffs, coverage and exports are scoped before counts and cursors.
|
|
533
|
+
Reviewers may record file coverage and <code>POST /runs/:id/collaboration {branch,expectedHead,text}</code>; both recheck current project membership and owned
|
|
534
|
+
result HEAD. <code>GET</code> returns the separate human discussion. These comments never
|
|
535
|
+
resume an agent. All execution, administrative and private-context operations
|
|
536
|
+
remain owner-only. See <a href="shared-projects.html">roles, projections and session limits</a>.</p>
|
|
537
|
+
<h2 id="team-collaboration">Team collaboration</h2>
|
|
538
|
+
<p>A team board served by one code-flow instance (the team server) and the linked
|
|
539
|
+
runners on teammates' computers share the routes below. Browser sessions (the
|
|
540
|
+
owner and shared accounts) and per-machine runner credentials
|
|
541
|
+
(<code>Authorization: Bearer tr-…</code>) use the same paths; the table says who may call.
|
|
542
|
+
A runner credential reaches only <code>/team/*</code> and the enrolment route; every other
|
|
543
|
+
API route answers 403 "This credential only reaches the team API", and the pages
|
|
544
|
+
treat it as an anonymous visitor. The owner token is matched before a bearer is
|
|
545
|
+
read as a runner credential. Runner mutations send
|
|
546
|
+
<code>content-type: application/json</code> (the bundle upload <code>application/octet-stream</code>)
|
|
547
|
+
and need no Origin header; browser mutations keep the same-origin JSON
|
|
548
|
+
requirement of shared accounts. Board tasks are visible only in projects where
|
|
549
|
+
the caller holds a role; people appear as an account id and display name, never
|
|
550
|
+
with paths, transcripts, tokens or hashes. <code>/v1/team/*</code> and <code>/v1/team-link/*</code>
|
|
551
|
+
aliases work, and <code>GET /v1/capabilities</code> lists the family as
|
|
552
|
+
<code>team-collaboration</code>.</p>
|
|
553
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
554
|
+
<thead>
|
|
555
|
+
<tr>
|
|
556
|
+
<th>Operation</th>
|
|
557
|
+
<th>Request</th>
|
|
558
|
+
<th>Behavior</th>
|
|
559
|
+
</tr>
|
|
560
|
+
</thead>
|
|
561
|
+
<tbody><tr>
|
|
562
|
+
<td><code>POST /team/runners/connect</code></td>
|
|
563
|
+
<td><code>username</code>, <code>password</code>, <code>name</code></td>
|
|
564
|
+
<td>Anonymous enrolment over HTTPS or loopback: verifies the credentials like sign-in without creating a session, requires a contributor role in some project, and returns 201 with the runner, its credential (shown once), the user and the server's name.</td>
|
|
565
|
+
</tr>
|
|
566
|
+
<tr>
|
|
567
|
+
<td><code>GET /team/me</code></td>
|
|
568
|
+
<td>none</td>
|
|
569
|
+
<td>The caller's identity, project roles and own runners.</td>
|
|
570
|
+
</tr>
|
|
571
|
+
<tr>
|
|
572
|
+
<td><code>GET /team/board</code></td>
|
|
573
|
+
<td>optional <code>project</code> query</td>
|
|
574
|
+
<td>The board: the projects where the caller holds a role with their members and repository keys, task cards with the current attempt, latest checkpoint and hand-over, and the unread inbox count (viewer).</td>
|
|
575
|
+
</tr>
|
|
576
|
+
<tr>
|
|
577
|
+
<td><code>GET /team/tasks/:id</code></td>
|
|
578
|
+
<td>none</td>
|
|
579
|
+
<td>The full task (viewer in its project).</td>
|
|
580
|
+
</tr>
|
|
581
|
+
<tr>
|
|
582
|
+
<td><code>POST /team/tasks</code></td>
|
|
583
|
+
<td><code>projectId</code>, <code>repository</code>, <code>title</code>, <code>goal</code>, <code>acceptance</code>, optional <code>baseRef</code>, <code>owner</code>, <code>reviewer</code>, <code>collaborators</code>, <code>dependsOn</code>, <code>labels</code>, <code>status</code></td>
|
|
584
|
+
<td>Create a task (contributor); 201.</td>
|
|
585
|
+
</tr>
|
|
586
|
+
<tr>
|
|
587
|
+
<td><code>PUT /team/tasks/:id</code></td>
|
|
588
|
+
<td><code>revision</code> plus the changed fields</td>
|
|
589
|
+
<td>Partial save under the status and ownership rules; <code>null</code> clears an optional field.</td>
|
|
590
|
+
</tr>
|
|
591
|
+
<tr>
|
|
592
|
+
<td><code>DELETE /team/tasks/:id</code></td>
|
|
593
|
+
<td><code>revision</code></td>
|
|
594
|
+
<td>Delete a task (maintainer); <code>{deleted: true}</code>.</td>
|
|
595
|
+
</tr>
|
|
596
|
+
<tr>
|
|
597
|
+
<td><code>POST /team/tasks/:id/comments</code></td>
|
|
598
|
+
<td><code>text</code></td>
|
|
599
|
+
<td>Comment, with <code>@username</code> mentions (reviewer).</td>
|
|
600
|
+
</tr>
|
|
601
|
+
<tr>
|
|
602
|
+
<td><code>POST /team/tasks/:id/decisions</code></td>
|
|
603
|
+
<td><code>text</code></td>
|
|
604
|
+
<td>Record a decision (contributor).</td>
|
|
605
|
+
</tr>
|
|
606
|
+
<tr>
|
|
607
|
+
<td><code>POST /team/tasks/:id/review-request</code></td>
|
|
608
|
+
<td><code>reviewer</code>, <code>revision</code></td>
|
|
609
|
+
<td>Ask a teammate to review (contributor).</td>
|
|
610
|
+
</tr>
|
|
611
|
+
<tr>
|
|
612
|
+
<td><code>POST /team/tasks/:id/reviews</code></td>
|
|
613
|
+
<td><code>checkpointId</code>, <code>verdict=approve|request-changes</code>, <code>text</code>, <code>revision</code></td>
|
|
614
|
+
<td>Record a review against a checkpoint (reviewer).</td>
|
|
615
|
+
</tr>
|
|
616
|
+
<tr>
|
|
617
|
+
<td><code>POST /team/tasks/:id/instructions</code></td>
|
|
618
|
+
<td><code>text</code></td>
|
|
619
|
+
<td>Propose a <strong>Send to agent</strong> instruction (contributor); the task owner's own are approved at once.</td>
|
|
620
|
+
</tr>
|
|
621
|
+
<tr>
|
|
622
|
+
<td><code>POST /team/tasks/:id/instructions/:iid</code></td>
|
|
623
|
+
<td><code>action=approve|decline|delivered</code>, optional <code>attemptId</code></td>
|
|
624
|
+
<td>Approve or decline (the task owner or a maintainer); <code>delivered</code> is recorded by the attempt's runner.</td>
|
|
625
|
+
</tr>
|
|
626
|
+
<tr>
|
|
627
|
+
<td><code>POST /team/tasks/:id/attempts</code></td>
|
|
628
|
+
<td><code>attemptId</code>, <code>runnerId</code>, <code>runnerName</code>, <code>baseCommit</code>, optional <code>fromCheckpointId</code>, <code>revision</code></td>
|
|
629
|
+
<td>Claim an attempt (the task owner through their runner, or the server's owner in-process as runner <code>local</code>); idempotent on <code>attemptId</code>; 201. Refused (409) while another attempt is claimed, running or unknown, while a hand-over is offered, and on a Done task.</td>
|
|
630
|
+
</tr>
|
|
631
|
+
<tr>
|
|
632
|
+
<td><code>POST /team/attempts/:aid/progress</code></td>
|
|
633
|
+
<td><code>seq</code>, optional <code>runId</code>, the progress fields</td>
|
|
634
|
+
<td>Publish a numbered progress snapshot (the attempt's runner); a late number is ignored. A report that would revive a paused, stopped or unknown attempt is refused (409) while another attempt of the task is claimed, running or unknown or a hand-over is offered, on a Done task (409 "Move the task out of Done before resuming the attempt"), and for a machine whose user no longer owns the task (403 "The task now belongs to <code><name></code>; they continue it from its latest checkpoint, or a project maintainer reassigns it").</td>
|
|
635
|
+
</tr>
|
|
636
|
+
<tr>
|
|
637
|
+
<td><code>POST /team/attempts/:aid/heartbeat</code></td>
|
|
638
|
+
<td>empty body</td>
|
|
639
|
+
<td>Keep the attempt live; returns the approved, undelivered instructions.</td>
|
|
640
|
+
</tr>
|
|
641
|
+
<tr>
|
|
642
|
+
<td><code>POST /team/attempts/:aid/finish</code></td>
|
|
643
|
+
<td><code>state</code>, optional <code>head</code>, <code>summary</code>, <code>reason</code></td>
|
|
644
|
+
<td>End the attempt as finished, failed, stopped, paused or unknown.</td>
|
|
645
|
+
</tr>
|
|
646
|
+
<tr>
|
|
647
|
+
<td><code>POST /team/attempts/:aid/recover</code></td>
|
|
648
|
+
<td><code>revision</code>, <code>reason</code>, <code>confirmedStopped=true</code></td>
|
|
649
|
+
<td>Recover an unknown attempt after confirming its original execution stopped (task owner or project maintainer). Supersedes it, records the decision and releases the task; stale revisions or a reconnected runner return 409.</td>
|
|
650
|
+
</tr>
|
|
651
|
+
<tr>
|
|
652
|
+
<td><code>POST /team/attempts/:aid/checkpoints</code></td>
|
|
653
|
+
<td>optional <code>id</code>, <code>commit</code>, <code>baseCommit</code>, <code>branch</code>, <code>size</code>, <code>sha256</code>, <code>note</code>, <code>requirements</code>, <code>decisions</code>, optional <code>testResults</code>, <code>remaining</code>, <code>changedFiles</code></td>
|
|
654
|
+
<td>Register a checkpoint manifest with <code>bundle: "pending"</code> (the attempt's runner); 201. <code>id</code> (32 lowercase hexadecimal characters) becomes the checkpoint's id and ref <code>refs/codeflow/team/<id></code>; an id already on the board is refused (409), a malformed one 400, and without one the server generates the id.</td>
|
|
655
|
+
</tr>
|
|
656
|
+
<tr>
|
|
657
|
+
<td><code>PUT /team/checkpoints/:cid/bundle</code></td>
|
|
658
|
+
<td><code>application/octet-stream</code> body, <code>x-codeflow-sha256</code> header</td>
|
|
659
|
+
<td>Stream the bundle to disk (the checkpoint's runner); size and digest are verified before the checkpoint becomes available. A refusal (415, 400 on a size or digest mismatch, 409 when already uploaded or deleted, 507 when storage is full, 503 when the file could not be stored) is answered at once and the declared body is then drained, so a retry reads the answer; a body without a content-length (411) or declared over 64 MiB (413) is cut off once the answer is written.</td>
|
|
660
|
+
</tr>
|
|
661
|
+
<tr>
|
|
662
|
+
<td><code>GET /team/checkpoints/:cid</code></td>
|
|
663
|
+
<td>none</td>
|
|
664
|
+
<td>The checkpoint manifest (viewer).</td>
|
|
665
|
+
</tr>
|
|
666
|
+
<tr>
|
|
667
|
+
<td><code>GET /team/checkpoints/:cid/bundle</code></td>
|
|
668
|
+
<td>none</td>
|
|
669
|
+
<td>Download the bundle with <code>content-length</code> and <code>x-codeflow-sha256</code> (contributor).</td>
|
|
670
|
+
</tr>
|
|
671
|
+
<tr>
|
|
672
|
+
<td><code>DELETE /team/checkpoints/:cid</code></td>
|
|
673
|
+
<td>none</td>
|
|
674
|
+
<td>Delete a checkpoint and its bundle (maintainer); <code>{deleted: true}</code>.</td>
|
|
675
|
+
</tr>
|
|
676
|
+
<tr>
|
|
677
|
+
<td><code>POST /team/tasks/:id/handoff</code></td>
|
|
678
|
+
<td><code>to</code>, <code>checkpointId</code>, <code>note</code>, <code>revision</code></td>
|
|
679
|
+
<td>Offer a hand-over from an available checkpoint of the task (the task owner or a maintainer); refused while an attempt runs.</td>
|
|
680
|
+
</tr>
|
|
681
|
+
<tr>
|
|
682
|
+
<td><code>POST /team/tasks/:id/handoff/:hid</code></td>
|
|
683
|
+
<td><code>action=accept|decline|cancel</code>, <code>revision</code></td>
|
|
684
|
+
<td>Accept or decline (the recipient); cancel (the sender or a maintainer).</td>
|
|
685
|
+
</tr>
|
|
686
|
+
<tr>
|
|
687
|
+
<td><code>GET /team/inbox</code></td>
|
|
688
|
+
<td>optional <code>after</code> query</td>
|
|
689
|
+
<td>The caller's inbox items and unread count.</td>
|
|
690
|
+
</tr>
|
|
691
|
+
<tr>
|
|
692
|
+
<td><code>POST /team/inbox/read</code></td>
|
|
693
|
+
<td><code>ids</code>, or <code>all: true</code></td>
|
|
694
|
+
<td>Mark the caller's items read; returns <code>{unread}</code>.</td>
|
|
695
|
+
</tr>
|
|
696
|
+
<tr>
|
|
697
|
+
<td><code>GET /team/runners</code></td>
|
|
698
|
+
<td>none</td>
|
|
699
|
+
<td>The caller's runners; only the hub owner sees all.</td>
|
|
700
|
+
</tr>
|
|
701
|
+
<tr>
|
|
702
|
+
<td><code>DELETE /team/runners/:id</code></td>
|
|
703
|
+
<td>none</td>
|
|
704
|
+
<td>Revoke a runner (its user or the hub owner); <code>{revoked: true}</code>.</td>
|
|
705
|
+
</tr>
|
|
706
|
+
<tr>
|
|
707
|
+
<td><code>PUT /team/projects/:id/repositories</code></td>
|
|
708
|
+
<td><code>repositories</code>, <code>revision</code></td>
|
|
709
|
+
<td>Define the project's repository keys (maintainer).</td>
|
|
710
|
+
</tr>
|
|
711
|
+
<tr>
|
|
712
|
+
<td><code>PUT /team/profile</code></td>
|
|
713
|
+
<td><code>displayName</code></td>
|
|
714
|
+
<td>The owner's display name on the board (owner).</td>
|
|
715
|
+
</tr>
|
|
716
|
+
<tr>
|
|
717
|
+
<td><code>GET /team/events</code></td>
|
|
718
|
+
<td>optional <code>after=<epoch:seq></code> query</td>
|
|
719
|
+
<td>Server-sent events for the caller: <code>hello</code> with the epoch and sequence, then <code>change</code> events for the board and tasks in the caller's projects and <code>inbox</code> unread counts; a cursor the server no longer holds gets <code>resync</code>. Closed when the account changes or the runner is revoked, and when 2 MiB of frames wait on the socket.</td>
|
|
720
|
+
</tr>
|
|
721
|
+
</tbody></table>
|
|
722
|
+
</div><p>Mutations return the updated task and carry the task <code>revision</code>; a stale one
|
|
723
|
+
fails with 409 "Task changed; reload before saving". A missing role answers 403
|
|
724
|
+
naming the role, an unknown or invisible id 404 "Task not found", an unknown
|
|
725
|
+
team route 404 "Unknown team operation" (never falling through to owner routes)
|
|
726
|
+
and unavailable team storage 503. Task saves and repository keys accept 64 KiB
|
|
727
|
+
bodies, progress reports 192 KiB, checkpoint manifests 1.25 MiB, bundles 64 MiB,
|
|
728
|
+
enrolment 8 KiB and other routes 16 KiB; a board file at its 16 MiB limit refuses
|
|
729
|
+
every change with 413. Progress reports and heartbeats do not change the task
|
|
730
|
+
revision.</p>
|
|
731
|
+
<p>On a linked computer the owner's <code>/team/*</code> requests are forwarded to the team
|
|
732
|
+
server with the runner credential, and the owner-only local routes below drive
|
|
733
|
+
execution; on the team server itself the same routes work in-process and
|
|
734
|
+
<code>linked</code> is false.</p>
|
|
735
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
736
|
+
<thead>
|
|
737
|
+
<tr>
|
|
738
|
+
<th>Operation</th>
|
|
739
|
+
<th>Request</th>
|
|
740
|
+
<th>Behavior</th>
|
|
741
|
+
</tr>
|
|
742
|
+
</thead>
|
|
743
|
+
<tbody><tr>
|
|
744
|
+
<td><code>GET /team-link</code></td>
|
|
745
|
+
<td>none</td>
|
|
746
|
+
<td>The link: <code>linked</code>, the server address, user, server name, machine name, mappings and defaults, the connection state, the runner as the server reports it, the last sync and the last error.</td>
|
|
747
|
+
</tr>
|
|
748
|
+
<tr>
|
|
749
|
+
<td><code>POST /team-link/connect</code></td>
|
|
750
|
+
<td><code>url</code>, <code>username</code>, <code>password</code>, optional <code>name</code></td>
|
|
751
|
+
<td>Enrol this computer: <code>https://</code> only (plain <code>http://</code> for loopback), never following a redirect and only with a trusted certificate (502 otherwise), refused (409) while already connected or while the local board has tasks; saves the link and starts the change stream and reconciliation; 201.</td>
|
|
752
|
+
</tr>
|
|
753
|
+
<tr>
|
|
754
|
+
<td><code>DELETE /team-link</code></td>
|
|
755
|
+
<td>none</td>
|
|
756
|
+
<td>Revoke the runner on the server (best effort) and forget it here; mappings, defaults and local attempt records stay.</td>
|
|
757
|
+
</tr>
|
|
758
|
+
<tr>
|
|
759
|
+
<td><code>PUT /team-link/mappings</code></td>
|
|
760
|
+
<td><code>projectId</code>, <code>repository</code>, <code>path</code></td>
|
|
761
|
+
<td>Map a repository key to an absolute folder that is a Git repository.</td>
|
|
762
|
+
</tr>
|
|
763
|
+
<tr>
|
|
764
|
+
<td><code>POST /team-link/tasks/:id/start</code></td>
|
|
765
|
+
<td>optional <code>repo</code>, <code>pattern</code>, <code>roles</code>, optional <code>agentSettings</code>, <code>roleSettings</code>, <code>trust</code>, <code>loop</code> (<code>check</code>, <code>setup</code>, <code>maxMinutes</code>, <code>maxSteps</code>), <code>fromCheckpointId</code></td>
|
|
766
|
+
<td>Claim an attempt and start the run here; returns <code>{attemptId, runId}</code>; 201. Refused (400) before anything is claimed when the repository cannot carry checkpoints (a submodule, a checkout filter such as Git LFS, or a tree over 20,000 files, 256 MiB or 100 attribute files).</td>
|
|
767
|
+
</tr>
|
|
768
|
+
<tr>
|
|
769
|
+
<td><code>POST /team-link/tasks/:id/stop</code></td>
|
|
770
|
+
<td>empty body</td>
|
|
771
|
+
<td>Cancel the current attempt's run (resumable) and record it as paused.</td>
|
|
772
|
+
</tr>
|
|
773
|
+
<tr>
|
|
774
|
+
<td><code>POST /team-link/tasks/:id/resume</code></td>
|
|
775
|
+
<td>empty body</td>
|
|
776
|
+
<td>Resume this computer's paused, stopped or unknown attempt of the task under the same attempt id; refused (409) when the attempt was superseded or has ended, the task changed hands or is Done, another attempt is busy or a hand-over is offered.</td>
|
|
777
|
+
</tr>
|
|
778
|
+
<tr>
|
|
779
|
+
<td><code>POST /team-link/tasks/:id/handover</code></td>
|
|
780
|
+
<td><code>to</code>, <code>note</code>, optional <code>includeUncommitted</code></td>
|
|
781
|
+
<td>Create or reuse the checkpoint (a retry uploads the kept bundle), then offer the hand-over.</td>
|
|
782
|
+
</tr>
|
|
783
|
+
<tr>
|
|
784
|
+
<td><code>POST /team-link/tasks/:id/accept</code></td>
|
|
785
|
+
<td><code>handoffId</code>, optional <code>repo</code></td>
|
|
786
|
+
<td>Download and import the checkpoint, then accept the offer.</td>
|
|
787
|
+
</tr>
|
|
788
|
+
<tr>
|
|
789
|
+
<td><code>POST /team-link/checkpoints/:id/fetch</code></td>
|
|
790
|
+
<td><code>repo</code></td>
|
|
791
|
+
<td>Import a checkpoint and point <code>team/<task id>/<first 8 characters of the checkpoint id></code> at it; returns <code>{commit, branch, taskId, created}</code>.</td>
|
|
792
|
+
</tr>
|
|
793
|
+
<tr>
|
|
794
|
+
<td><code>GET /team-link/attempts</code></td>
|
|
795
|
+
<td>none</td>
|
|
796
|
+
<td>This computer's attempt records: which run belongs to which attempt, and what has been published.</td>
|
|
797
|
+
</tr>
|
|
798
|
+
<tr>
|
|
799
|
+
<td><code>POST /team-link/reconcile</code></td>
|
|
800
|
+
<td>empty body</td>
|
|
801
|
+
<td>Run the recovery pass now: settle claims whose answer was lost and retry unacknowledged finishes; returns <code>{attached, finished, removed, unknown, retried}</code>.</td>
|
|
802
|
+
</tr>
|
|
803
|
+
</tbody></table>
|
|
804
|
+
</div><p>Nothing here replays automatically: a restart, the recovery pass that runs every
|
|
805
|
+
minute and <code>POST /team-link/reconcile</code> reconcile local attempt records with the
|
|
806
|
+
team server and never start a run again. See <a href="team-collaboration.html">team
|
|
807
|
+
collaboration</a> for roles, hand-overs, checkpoints and
|
|
808
|
+
limits.</p>
|
|
809
|
+
<h2 id="explicit-workers-coordination-and-extensions">Explicit workers, coordination and extensions</h2>
|
|
810
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
811
|
+
<thead>
|
|
812
|
+
<tr>
|
|
813
|
+
<th>Operation</th>
|
|
814
|
+
<th>Request</th>
|
|
815
|
+
<th>Behavior</th>
|
|
816
|
+
</tr>
|
|
817
|
+
</thead>
|
|
818
|
+
<tbody><tr>
|
|
819
|
+
<td><code>GET /remote-workers</code></td>
|
|
820
|
+
<td>none</td>
|
|
821
|
+
<td>List explicitly configured SSH targets without private capabilities.</td>
|
|
822
|
+
</tr>
|
|
823
|
+
<tr>
|
|
824
|
+
<td><code>POST /remote-workers/:id/probe</code></td>
|
|
825
|
+
<td><code>repoMapping</code></td>
|
|
826
|
+
<td>Probe the provisioned worker and its own provider inventory.</td>
|
|
827
|
+
</tr>
|
|
828
|
+
<tr>
|
|
829
|
+
<td><code>POST /runs/:id/remote-steps/:step/receipt</code></td>
|
|
830
|
+
<td>empty body</td>
|
|
831
|
+
<td>Inspect an accepted execution receipt; never replay the turn.</td>
|
|
832
|
+
</tr>
|
|
833
|
+
<tr>
|
|
834
|
+
<td><code>POST /runs/:id/remote-steps/:step/cancel</code></td>
|
|
835
|
+
<td>empty body</td>
|
|
836
|
+
<td>Explicitly request cancellation and inspect its receipt.</td>
|
|
837
|
+
</tr>
|
|
838
|
+
<tr>
|
|
839
|
+
<td><code>GET /coordinated-changes</code></td>
|
|
840
|
+
<td>none</td>
|
|
841
|
+
<td>List durable multi-repository jobs and their current claims.</td>
|
|
842
|
+
</tr>
|
|
843
|
+
<tr>
|
|
844
|
+
<td><code>POST /coordinated-changes</code></td>
|
|
845
|
+
<td><code>project</code>, <code>name</code>, <code>nodes</code>, optional <code>operationId</code></td>
|
|
846
|
+
<td>Create 2–10 explicitly configured repository tasks with a verified dependency DAG.</td>
|
|
847
|
+
</tr>
|
|
848
|
+
<tr>
|
|
849
|
+
<td><code>POST /coordinated-changes/:id/cancel</code></td>
|
|
850
|
+
<td><code>expectedRevision</code></td>
|
|
851
|
+
<td>Cancel further dispatch; preserve accepted execution receipts.</td>
|
|
852
|
+
</tr>
|
|
853
|
+
<tr>
|
|
854
|
+
<td><code>POST /coordinated-changes/:id/shipping-preview</code></td>
|
|
855
|
+
<td><code>expectedRevision</code>, <code>targets</code></td>
|
|
856
|
+
<td>Validate the current source/target/tree matrix without merging.</td>
|
|
857
|
+
</tr>
|
|
858
|
+
<tr>
|
|
859
|
+
<td><code>POST /coordinated-changes/:id/nodes/:node/retry</code></td>
|
|
860
|
+
<td><code>expectedRevision</code>, optional <code>acknowledgeUnknown</code></td>
|
|
861
|
+
<td>Explicitly retry after inspecting an uncertain claim.</td>
|
|
862
|
+
</tr>
|
|
863
|
+
<tr>
|
|
864
|
+
<td><code>POST /coordinated-changes/:id/nodes/:node/attach</code></td>
|
|
865
|
+
<td><code>expectedRevision</code>, <code>runId</code></td>
|
|
866
|
+
<td>Attach only an exact matching durable launch receipt.</td>
|
|
867
|
+
</tr>
|
|
868
|
+
<tr>
|
|
869
|
+
<td><code>POST /coordinated-changes/:id/nodes/:node/ship</code></td>
|
|
870
|
+
<td><code>expectedRevision</code>, <code>previewId</code></td>
|
|
871
|
+
<td>Merge one unchanged verified local candidate; no automatic remote push.</td>
|
|
872
|
+
</tr>
|
|
873
|
+
<tr>
|
|
874
|
+
<td><code>POST /coordinated-changes/:id/nodes/:node/recover-shipping</code></td>
|
|
875
|
+
<td><code>expectedRevision</code>, <code>commit</code></td>
|
|
876
|
+
<td>Confirm the exact reviewed parents/tree after an uncertain local merge.</td>
|
|
877
|
+
</tr>
|
|
878
|
+
<tr>
|
|
879
|
+
<td><code>GET /extensions</code></td>
|
|
880
|
+
<td>none</td>
|
|
881
|
+
<td>Inspect host API version and explicitly configured trusted provider/workflow bundles.</td>
|
|
882
|
+
</tr>
|
|
883
|
+
</tbody></table>
|
|
884
|
+
</div><p>Runs select SSH using <code>loop.remoteWorker: {workerId,repoMapping}</code>. Worker
|
|
885
|
+
credentials stay on the provisioned worker; accepted turns are never retried
|
|
886
|
+
automatically after a disconnected transport. See <a href="remote-workers.html">worker setup and receipt
|
|
887
|
+
recovery</a>. Coordination ships each repository separately;
|
|
888
|
+
there is no atomic transaction across repositories. See <a href="coordinated-changes.html">coordinated
|
|
889
|
+
changes</a>. Extension installation is server configuration,
|
|
890
|
+
not an HTTP operation; immutable version/hash pins are rechecked before
|
|
891
|
+
execution. See <a href="extensions.html">trusted extension contracts</a>.</p>
|
|
892
|
+
<h2 id="code-host-review-and-publication">Code-host review and publication</h2>
|
|
893
|
+
<p>Owner-only <code>GET /code-hosts</code> lists configured GitLab/Bitbucket code adapters and
|
|
894
|
+
safe operation receipts. <code>POST /code-hosts/preview {integration,key,repo,project?}</code>
|
|
895
|
+
creates a short-lived server snapshot. <code>POST /code-hosts/:id/fetch</code> imports exact
|
|
896
|
+
source/target Git objects without executing them; <code>/:id/run</code> accepts the prepared
|
|
897
|
+
agent container and required verification configuration. <code>/:id/review</code> performs
|
|
898
|
+
an explicit supported comment, reply, thread resolution or GitLab approval.</p>
|
|
899
|
+
<p>Push and merge each have distinct <code>/:id/push-preview</code> or <code>/:id/merge-preview</code>
|
|
900
|
+
operations taking <code>runId</code> and an owned <code>branch</code>; their actions require the
|
|
901
|
+
returned <code>planId</code>. <code>POST /code-hosts/create-preview</code> takes <code>integration</code>, <code>runId</code>,
|
|
902
|
+
<code>branch</code>, <code>targetBranch</code>, <code>title</code>, and <code>body</code>; <code>/:id/create</code> explicitly creates
|
|
903
|
+
the expected-absent source branch and native PR. An unknown receipt can only be
|
|
904
|
+
acknowledged explicitly at <code>/code-hosts/history/:id/acknowledge</code> with
|
|
905
|
+
<code>{acknowledge:true}</code>. No startup replay occurs.</p>
|
|
906
|
+
<p>Git updates use exact expected-ref leases. Merge is a pinned Git merge and may
|
|
907
|
+
leave provider PR closure pending; native merge queues and atomic provider-policy
|
|
908
|
+
snapshots are not claimed. Unsupported/unknown protected-branch policies fail
|
|
909
|
+
closed. See <a href="code-hosts.html">provider-specific operations and limits</a>.</p>
|
|
910
|
+
<p>GitHub threads use <code>GET /runs/:id/pr-threads?branch=<owned-branch></code> and <code>POST</code> with
|
|
911
|
+
<code>{action:"load",snapshotId,threadId}</code> or
|
|
912
|
+
<code>{action:"resolve",snapshotId,threadId,expectedHead,expectedRevision,resolved}</code>.
|
|
913
|
+
Resolution rechecks fresh remote state and reports postflight uncertainty.
|
|
914
|
+
See <a href="github-review-threads.html">thread pagination, permissions and mutation races</a>.</p>
|
|
915
|
+
<h2 id="filesystem-policies">Filesystem policies</h2>
|
|
916
|
+
<p>Owner-only <code>GET /projects/:id/filesystem-policy</code> returns the committed policy.
|
|
917
|
+
<code>PUT</code> accepts <code>{revision,read:{allow,deny},write:{allow,deny}}</code> with literal
|
|
918
|
+
repository-relative paths. Policies intersect across matching projects and
|
|
919
|
+
pinned run snapshots. App file/tree/search/write/diff access rechecks current
|
|
920
|
+
rules; raw history and other unfilterable evidence are withheld. Custom
|
|
921
|
+
restrictions pause ordinary application-managed execution globally, including
|
|
922
|
+
background preparation. See <a href="filesystem-policy.html">activation, execution boundaries and HTTP error
|
|
923
|
+
semantics</a>.</p>
|
|
924
|
+
<p>Restricted execution uses a separate owner-only manual task surface:</p>
|
|
925
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
926
|
+
<thead>
|
|
927
|
+
<tr>
|
|
928
|
+
<th>Operation</th>
|
|
929
|
+
<th>Request</th>
|
|
930
|
+
<th>Behavior</th>
|
|
931
|
+
</tr>
|
|
932
|
+
</thead>
|
|
933
|
+
<tbody><tr>
|
|
934
|
+
<td><code>GET /filtered-tasks</code></td>
|
|
935
|
+
<td>optional <code>project</code> query</td>
|
|
936
|
+
<td>Return bounded lifecycle/receipt metadata; historical source/output content is not listed.</td>
|
|
937
|
+
</tr>
|
|
938
|
+
<tr>
|
|
939
|
+
<td><code>POST /filtered-tasks</code></td>
|
|
940
|
+
<td><code>project</code>, <code>repo</code>, <code>task</code>, <code>agent</code>, <code>image</code>, optional <code>network</code>, <code>maxMinutes</code></td>
|
|
941
|
+
<td>Prepare a filtered committed snapshot and return 202 after a durable claim; only built-in providers and an explicit local immutable image are supported.</td>
|
|
942
|
+
</tr>
|
|
943
|
+
<tr>
|
|
944
|
+
<td><code>GET /filtered-tasks/:id</code></td>
|
|
945
|
+
<td>none</td>
|
|
946
|
+
<td>Read task/output under unchanged current canonical policy and project membership.</td>
|
|
947
|
+
</tr>
|
|
948
|
+
<tr>
|
|
949
|
+
<td><code>POST /filtered-tasks/:id/preview-import</code></td>
|
|
950
|
+
<td>empty body</td>
|
|
951
|
+
<td>Validate source/result/policy and preview bounded allowed file changes.</td>
|
|
952
|
+
</tr>
|
|
953
|
+
<tr>
|
|
954
|
+
<td><code>POST /filtered-tasks/:id/import</code></td>
|
|
955
|
+
<td><code>revision</code>, <code>expectedHead</code>, <code>resultHash</code></td>
|
|
956
|
+
<td>Create a new review branch with an atomic exact-source ref transaction; leave checkout and index unchanged.</td>
|
|
957
|
+
</tr>
|
|
958
|
+
<tr>
|
|
959
|
+
<td><code>POST /filtered-tasks/:id/cancel</code></td>
|
|
960
|
+
<td><code>revision</code></td>
|
|
961
|
+
<td>Cancel preparation/execution and confirm the owned daemon container is absent.</td>
|
|
962
|
+
</tr>
|
|
963
|
+
<tr>
|
|
964
|
+
<td><code>POST /filtered-tasks/:id/receipt</code></td>
|
|
965
|
+
<td><code>revision</code></td>
|
|
966
|
+
<td>Explicitly inspect an interrupted branch-import receipt; never replay a provider turn.</td>
|
|
967
|
+
</tr>
|
|
968
|
+
<tr>
|
|
969
|
+
<td><code>DELETE /filtered-tasks/:id</code></td>
|
|
970
|
+
<td>JSON <code>revision</code></td>
|
|
971
|
+
<td>Remove a stopped terminal task's private export/record; preserve any imported review branch.</td>
|
|
972
|
+
</tr>
|
|
973
|
+
</tbody></table>
|
|
974
|
+
</div><p>The task container receives only permitted committed regular files and a new Git
|
|
975
|
+
object database. It mounts no original repository metadata, host login directory,
|
|
976
|
+
authentication volume or application memory. The image layer and copied files
|
|
977
|
+
denied writes are read-only. Network starts off; enabling inference access is an
|
|
978
|
+
explicit owner choice. Input/output limits are 500 files, 512 KiB per file and
|
|
979
|
+
16 MiB total; live monitoring is a polling safeguard, not a filesystem quota.
|
|
980
|
+
Restarted effectful phases become unknown and require explicit inspection or
|
|
981
|
+
cancellation. See <a href="filesystem-policy.html">runtime provisioning, recovery and limitations</a>.</p>
|
|
982
|
+
<h2 id="ssh-projects">SSH projects</h2>
|
|
983
|
+
<p>Owner-only connection management is available on the local listener. SSH host
|
|
984
|
+
backends and phone/shared sessions cannot manage additional SSH connections.</p>
|
|
985
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
986
|
+
<thead>
|
|
987
|
+
<tr>
|
|
988
|
+
<th>Endpoint</th>
|
|
989
|
+
<th>Input</th>
|
|
990
|
+
<th>Result</th>
|
|
991
|
+
</tr>
|
|
992
|
+
</thead>
|
|
993
|
+
<tbody><tr>
|
|
994
|
+
<td><code>GET /workspace-projects</code></td>
|
|
995
|
+
<td>none</td>
|
|
996
|
+
<td>Local and connected remote project IDs and names, grouped by computer; never repository paths or credentials.</td>
|
|
997
|
+
</tr>
|
|
998
|
+
<tr>
|
|
999
|
+
<td><code>GET /ssh-hosts</code></td>
|
|
1000
|
+
<td>none</td>
|
|
1001
|
+
<td>Saved host IDs, names, aliases and connection state, plus concrete aliases discovered from SSH config.</td>
|
|
1002
|
+
</tr>
|
|
1003
|
+
<tr>
|
|
1004
|
+
<td><code>POST /ssh-hosts</code></td>
|
|
1005
|
+
<td><code>sshHost</code>, optional <code>name</code></td>
|
|
1006
|
+
<td>Save an alias or <code>user@hostname</code>; port/key/jump configuration stays in OpenSSH.</td>
|
|
1007
|
+
</tr>
|
|
1008
|
+
<tr>
|
|
1009
|
+
<td><code>POST /ssh-hosts/:id/connect</code></td>
|
|
1010
|
+
<td>none</td>
|
|
1011
|
+
<td>Install or reuse the remote backend and return a stable, same-origin <code>/computer/:id/</code> workspace path.</td>
|
|
1012
|
+
</tr>
|
|
1013
|
+
<tr>
|
|
1014
|
+
<td><code>POST /ssh-hosts/:id/disconnect</code></td>
|
|
1015
|
+
<td>none</td>
|
|
1016
|
+
<td>Close SSH channels and preview forwards, leaving remote work running.</td>
|
|
1017
|
+
</tr>
|
|
1018
|
+
<tr>
|
|
1019
|
+
<td><code>POST /ssh-hosts/:id/stop</code></td>
|
|
1020
|
+
<td>none</td>
|
|
1021
|
+
<td>Stop an idle remote backend, then disconnect. Refuses active execution, terminals and development services.</td>
|
|
1022
|
+
</tr>
|
|
1023
|
+
<tr>
|
|
1024
|
+
<td><code>DELETE /ssh-hosts/:id</code></td>
|
|
1025
|
+
<td>none</td>
|
|
1026
|
+
<td>Disconnect and remove the saved definition; remote data remains.</td>
|
|
1027
|
+
</tr>
|
|
1028
|
+
<tr>
|
|
1029
|
+
<td><code>GET /ssh-context</code></td>
|
|
1030
|
+
<td>none</td>
|
|
1031
|
+
<td>Local workspace context. At <code>/computer/:id/api/ssh-context</code>, returns the saved computer ID, name and connection state.</td>
|
|
1032
|
+
</tr>
|
|
1033
|
+
</tbody></table>
|
|
1034
|
+
</div><p>The returned workspace uses the same local app origin and owner session. Its
|
|
1035
|
+
<code>/computer/:id/api/</code> endpoints and event streams address the remote backend, so project paths, Git,
|
|
1036
|
+
files, checks, agent tools and terminals all refer to that server. Mutations are
|
|
1037
|
+
never replayed automatically. See <a href="ssh-projects.html">SSH projects</a> for setup,
|
|
1038
|
+
reconnection, remote previews, supported hosts and authentication boundaries.</p>
|
|
1039
|
+
<p>Managed Tailscale certificates renew automatically while Tailscale remote access is enabled. <code>GET /remote</code> includes <code>tls.renewal</code> with <code>automatic</code>, <code>running</code>, <code>nextAttempt</code>, optional <code>lastSuccess</code> and a safe <code>error</code>. Renewal preserves paired sessions and control settings. Imported/environment certificates are excluded.</p>
|
|
1040
|
+
<p>For multi-agent roles in Race, Debate, Review council, Supervisor and Loop workflows, a role setting can include additional models from the same provider: <code>roleSettings.reviewers.claude = { model: "first", variants: [{ model: "second", effort: "low" }] }</code>. Each entry runs separately with its own settings and session. Pipeline and other single-agent roles still use one model. Auto team pools also accept variants in <code>roleSettings.pool</code>: these are allowed model/effort choices for workers and reviewers. The coordinator selects among them within the member limit; it does not launch every selected model. Coordinator settings stay fixed. Additional models use the same validation as primary models (maximum 128 additional models per provider).</p>
|
|
1041
|
+
<h3 id="result-experiences-and-browser-scenarios">Result experiences and browser scenarios</h3>
|
|
1042
|
+
<p>These operations are owner-only and use the existing origin, authentication,
|
|
1043
|
+
filesystem-policy and host boundaries. New run requests can include <code>intent</code>
|
|
1044
|
+
(<code>bug</code>, <code>feature</code>, <code>review</code>, <code>explore</code>) and an existing same-repository <code>journeyId</code>.
|
|
1045
|
+
Comparison variants can include separate <code>task</code> instructions while sharing the
|
|
1046
|
+
base run configuration. Comparison launches can partially succeed; inspect the
|
|
1047
|
+
returned/visible group before retrying an interrupted request.</p>
|
|
1048
|
+
<div class="table-scroll" tabindex="0"><table>
|
|
1049
|
+
<thead>
|
|
1050
|
+
<tr>
|
|
1051
|
+
<th>Operation</th>
|
|
1052
|
+
<th>Request</th>
|
|
1053
|
+
<th>Behavior</th>
|
|
1054
|
+
</tr>
|
|
1055
|
+
</thead>
|
|
1056
|
+
<tbody><tr>
|
|
1057
|
+
<td><code>GET /experience</code></td>
|
|
1058
|
+
<td>optional <code>repo</code>, <code>project</code>, <code>intent</code> query</td>
|
|
1059
|
+
<td>Outcome metrics and repository/workflow sample counts, Wilson intervals and supporting run IDs.</td>
|
|
1060
|
+
</tr>
|
|
1061
|
+
<tr>
|
|
1062
|
+
<td><code>POST /runs/:id/outcome</code></td>
|
|
1063
|
+
<td><code>branch</code>, <code>expectedHead</code>, <code>decision=accepted|needs-work</code></td>
|
|
1064
|
+
<td>Record feedback on an idle, exact result commit; stale heads return 409. Does not publish or approve managed shipping.</td>
|
|
1065
|
+
</tr>
|
|
1066
|
+
<tr>
|
|
1067
|
+
<td><code>POST /runs/:id/task-priority</code></td>
|
|
1068
|
+
<td><code>taskId</code>, <code>revision</code>, <code>priority</code> (-10 to 10)</td>
|
|
1069
|
+
<td>Prioritize undispatched tasks on the current Auto-team plan without relaxing scheduling constraints.</td>
|
|
1070
|
+
</tr>
|
|
1071
|
+
<tr>
|
|
1072
|
+
<td><code>GET /runs/:id/worktrees/:name/serve/ready</code></td>
|
|
1073
|
+
<td>none</td>
|
|
1074
|
+
<td>Report process state and whether its local app port accepts a connection.</td>
|
|
1075
|
+
</tr>
|
|
1076
|
+
<tr>
|
|
1077
|
+
<td><code>GET /journeys</code></td>
|
|
1078
|
+
<td>absolute <code>repo</code> query</td>
|
|
1079
|
+
<td>List saved immutable browser scenarios in this repository.</td>
|
|
1080
|
+
</tr>
|
|
1081
|
+
<tr>
|
|
1082
|
+
<td><code>POST /journeys</code></td>
|
|
1083
|
+
<td><code>repo</code>, <code>title</code>, local <code>url</code>, <code>width</code>, <code>actions</code>, <code>expected: {selector, text}</code></td>
|
|
1084
|
+
<td>Validate and save a scenario; returns 201 with its ID and data. Actions use <code>kind=click|fill|select|press</code>, <code>selector</code>, and optional <code>value</code>.</td>
|
|
1085
|
+
</tr>
|
|
1086
|
+
<tr>
|
|
1087
|
+
<td><code>GET /journeys/:id</code></td>
|
|
1088
|
+
<td>none</td>
|
|
1089
|
+
<td>Return scenario, generated Playwright spec, and up to four replay receipts.</td>
|
|
1090
|
+
</tr>
|
|
1091
|
+
<tr>
|
|
1092
|
+
<td><code>POST /journeys/:id/replay</code></td>
|
|
1093
|
+
<td>optional local <code>url</code>, <code>runId</code>, <code>branch</code></td>
|
|
1094
|
+
<td>Replay in fresh Chrome, save screenshots and assertion status, return 201. Run-associated replays require that result's registered running app. Preserves the scenario's path/query/hash on the selected origin.</td>
|
|
1095
|
+
</tr>
|
|
1096
|
+
<tr>
|
|
1097
|
+
<td><code>DELETE /journeys/:id</code></td>
|
|
1098
|
+
<td>none</td>
|
|
1099
|
+
<td>Delete the scenario and retained screenshots. Existing runs keep their original attached test context.</td>
|
|
1100
|
+
</tr>
|
|
1101
|
+
</tbody></table>
|
|
1102
|
+
</div><p>A replay receipt's <code>passed</code> status means only that the expected visible text
|
|
1103
|
+
appeared after the recorded interactions. It is separate from Git verification;
|
|
1104
|
+
see <a href="application-improvements.html#result-first-product-experiences">result experiences</a>.</p>
|
|
1105
|
+
<h2 id="documentation-and-help">Documentation and help</h2>
|
|
1106
|
+
<p><code>GET /docs/</code> serves the bundled documentation without requiring a session; it contains only repository documentation. Page URLs use <code>/docs/<guide>.html</code>. Static files do not expose project state.</p>
|
|
1107
|
+
<p><code>GET /api/docs-help</code> lists installed built-in CLI providers for the authenticated owner. <code>POST /api/docs-help</code> invokes the selected CLI with documentation excerpts:</p>
|
|
1108
|
+
<pre><code class="language-json">{
|
|
1109
|
+
"agent": "claude",
|
|
1110
|
+
"question": "How do I choose a workflow?",
|
|
1111
|
+
"page": "patterns",
|
|
1112
|
+
"settings": {"model": "sonnet"},
|
|
1113
|
+
"history": []
|
|
1114
|
+
}
|
|
1115
|
+
</code></pre>
|
|
1116
|
+
<p>The response contains <code>answer</code> (plain text) and <code>sources</code> (guide IDs and titles). <code>page</code> is an optional guide ID; it is never a filesystem path. <code>history</code> accepts at most three <code>{question,answer}</code> pairs. The JSON body is limited to 64 KiB, questions to 4,000 characters and answers to 12,000. Settings accept a model and effort for the selected provider.</p>
|
|
1117
|
+
<p>The endpoint is owner-only on the main listener, subject to the existing origin checks and filesystem execution policy. It does not support ACP, extension providers, repository paths or remote/container execution. Closing the request aborts the turn. Two help requests can run at once; extra requests return 429. See <a href="help.html">Ask code-flow</a> for execution and privacy boundaries.</p>
|
|
1118
|
+
<hr>
|
|
1119
|
+
<p><a href="index.html">Documentation library</a> · <a href="getting-started.html">Getting started</a> · <a href="help.html">Ask code-flow</a></p>
|
|
1120
|
+
<h2 id="auto-model-catalog">Auto model catalog</h2>
|
|
1121
|
+
<p><code>GET /api/model-catalog</code> returns provider discovery catalogs, managed-provider eligibility, <code>allowResearch</code> and offline status. It uses the cached catalog and performs bounded CLI discovery when missing or stale. <code>POST /api/model-catalog</code> explicitly refreshes; its closed body accepts optional booleans <code>allowResearch</code> and <code>offline</code>. Research is disabled by default. <code>CODEFLOW_MODEL_NETWORK=offline</code> prevents new discovery/research while retaining cached evidence.</p>
|
|
1122
|
+
<p>Each catalog identifies its provider/environment/revision and separates reported model/effort availability, documented facts and run observations. It contains no authentication credentials. The existing <code>/api/models</code> endpoint retains its legacy behavior. Remote/container discovery happens in the selected execution environment, independently of this local preview. New Auto steps persist <code>modelAssignment</code> (provider, exact ID, effort, rationale, catalog revision/source and environment). Advanced worker <code>roleSettings.pool</code> pins are checked again at dispatch and on recovery; global coordinator defaults do not pin workers.</p>
|
|
1123
|
+
<h3 id="antigravity-execution-authority">Antigravity execution authority</h3>
|
|
1124
|
+
<p>New run requests accept <code>antigravityExecution: "isolated" | "native"</code>. Omission defaults to isolation, or inherits the parent's recorded choice for continuations. <code>"native"</code> explicitly opts into unrestricted host execution using the existing login and configuration; it leaves Claude/Codex permissions unchanged. An isolated parent cannot be upgraded by a child. Native mode rejects mandatory permission requirements, Safe/narrowed trust, tool approvals, remote/container and unattended/locked-down runs. It is not a template setting and is persisted in the run policy and step receipt.</p>
|
|
1125
|
+
<p><code>GET /api/model-catalog?antigravityExecution=native</code> and the POST refresh body's <code>antigravityExecution</code> choose native catalog discovery for previews; they do not grant execution authority. Default previews use isolated discovery. Both modes have distinct cache identities. Native execution records advisory read-only requests, unrestricted terminal access, provider-configured browser/MCP/hooks/native agents, and native child usage outside Code Flow's budget.</p>
|
|
1126
|
+
</article><footer><a href="https://github.com/midhunxavier/code-flow/blob/main/docs/api.md">Edit this page on GitHub ↗</a><span>code-flow · 0.1.0-preview.1 · <a href="font-license.txt">Font license</a></span></footer><nav class="pagination" aria-label="Adjacent guides"><a href="architecture.html"><small>← Previous</small>Architecture and development</a><a href="extensions.html"><small>Next →</small>Provider and workflow extensions</a></nav></main>
|
|
1127
|
+
<aside class="on-page" aria-label="On this page"><strong>On this page</strong><a class="depth-2" href="#use-the-authenticated-client">Use the authenticated client</a><a class="depth-2" href="#paginated-history-and-event-feeds">Paginated history and event feeds</a><a class="depth-2" href="#read-only-external-sources">Read-only external sources</a><a class="depth-2" href="#outbound-notifications">Outbound notifications</a><a class="depth-2" href="#project-memory-analysis-and-revision-commands">Project memory analysis and revision commands</a><a class="depth-2" href="#multi-service-launch-profiles">Multi-service launch profiles</a><a class="depth-2" href="#automation-inspection-and-replay">Automation inspection and replay</a><a class="depth-2" href="#shared-identities-and-project-review">Shared identities and project review</a><a class="depth-2" href="#team-collaboration">Team collaboration</a><a class="depth-2" href="#explicit-workers-coordination-and-extensions">Explicit workers, coordination and extensions</a><a class="depth-2" href="#code-host-review-and-publication">Code-host review and publication</a><a class="depth-2" href="#filesystem-policies">Filesystem policies</a><a class="depth-2" href="#ssh-projects">SSH projects</a><a class="depth-3" href="#result-experiences-and-browser-scenarios">Result experiences and browser scenarios</a><a class="depth-2" href="#documentation-and-help">Documentation and help</a><a class="depth-2" href="#auto-model-catalog">Auto model catalog</a><a class="depth-3" href="#antigravity-execution-authority">Antigravity execution authority</a></aside>
|
|
1128
|
+
<aside id="help-panel" hidden aria-labelledby="help-title"><div class="chat-heading"><div><span class="eyebrow">Your AI companion</span><h2 id="help-title">Ask code-flow</h2></div><button id="close-help" aria-label="Close AI companion">✕</button></div><div class="chat-toolbar"><span>Grounded in your docs</span><button id="new-chat">New chat</button></div><div id="help-messages" role="log" aria-label="Help conversation" aria-live="polite"><div id="chat-welcome"><span class="chat-mark" aria-hidden="true">✦</span><h3>What would you like to do?</h3><p>Let’s find your next step. Ask about setup, workflows or something that’s unclear.</p><div class="suggestions"><button type="button" data-question="How do I start my first run?">Start my first run ↗</button><button type="button" data-question="What should I do when a check fails?">Understand a failed check ↗</button></div></div></div><p id="help-status" role="status">Checking your installed CLIs…</p><button id="retry-help" hidden>Retry connection</button><form id="help-form" hidden><label class="sr-only" for="question">Your question</label><textarea id="question" rows="3" maxlength="4000" placeholder="Ask a question…" required></textarea><div class="composer-controls"><label class="sr-only" for="help-agent">Use your CLI</label><select id="help-agent"></select><button type="button" id="stop-help" hidden>Stop</button><button class="primary" id="send-help" aria-label="Send message">Send ↗</button></div><small>Uses your CLI login and quota. Shift + Enter for a new line.</small></form><a id="help-guide" href="help.html">About your local companion →</a></aside></div>
|
|
1129
|
+
<dialog id="search-dialog" aria-labelledby="search-title"><div class="dialog-title"><h2 id="search-title">Search documentation</h2><button data-close="search-dialog" aria-label="Close search">✕</button></div><label class="sr-only" for="search">Search all guides</label><input id="search" type="search" placeholder="Search workflows, settings, troubleshooting…" autocomplete="off"><div id="search-results" aria-live="polite"></div></dialog>
|
|
1130
|
+
</body></html>
|