@lambdacurry/arbor 0.24.8 → 0.24.10
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/dist/arbor.js +14 -15
- package/package.json +1 -1
package/dist/arbor.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// package.json
|
|
3
3
|
var package_default = {
|
|
4
4
|
name: "@lambdacurry/arbor",
|
|
5
|
-
version: "0.24.
|
|
5
|
+
version: "0.24.10",
|
|
6
6
|
description: "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
|
|
7
7
|
keywords: [
|
|
8
8
|
"agents",
|
|
@@ -9260,7 +9260,6 @@ var OPERATION_LOSS_REASONS = new Set([
|
|
|
9260
9260
|
|
|
9261
9261
|
// ../core/src/ops/computer-run-retention.ts
|
|
9262
9262
|
var COMPUTER_RUN_RETENTION_WARNING_MS = 24 * 60 * 60 * 1000;
|
|
9263
|
-
var COMPUTER_RUN_SUSPENDED_EXPIRY_MS = 24 * 60 * 60 * 1000;
|
|
9264
9263
|
|
|
9265
9264
|
// ../core/src/ops/computer-run.ts
|
|
9266
9265
|
var COMPUTER_RUN_START_CHECKPOINT_RESERVATION_STALE_MS = 12 * 60 * 1000;
|
|
@@ -9675,8 +9674,8 @@ function buildOutputSchemas() {
|
|
|
9675
9674
|
})
|
|
9676
9675
|
});
|
|
9677
9676
|
const computerRunFinishAssessment = looseObject({
|
|
9678
|
-
state: _enum(["safe", "blocked", "unknown"]),
|
|
9679
|
-
requiresDiscard: boolean2(),
|
|
9677
|
+
state: _enum(["safe", "blocked", "unknown"]).describe("advisory Git state; never blocks finish: blocked = non-durable or unprovable local work, unknown = unverified or not inspected (ordinary finish runs no Git command)"),
|
|
9678
|
+
requiresDiscard: boolean2().describe("legacy marker: true only for an explicit discard or a pre-ARB-574 record; Git state never requires discard"),
|
|
9680
9679
|
repositories: array(looseObject({
|
|
9681
9680
|
repository: string2().nullable(),
|
|
9682
9681
|
path: string2(),
|
|
@@ -12255,7 +12254,7 @@ var ORIENTATION_SECTIONS = [
|
|
|
12255
12254
|
},
|
|
12256
12255
|
{
|
|
12257
12256
|
brief: null,
|
|
12258
|
-
full: `Run \`arbor help\` (or read the MCP tool list) for exact commands and flags. Start Runs with a short intention; suspend if you need the workspace again, finish with an accomplishments summary when done with it.
|
|
12257
|
+
full: `Run \`arbor help\` (or read the MCP tool list) for exact commands and flags. Start Runs with a short intention; suspend if you need the workspace again, finish with an accomplishments summary when done with it. Finish does not require Git publication; process and output safety guards still apply.`
|
|
12259
12258
|
}
|
|
12260
12259
|
];
|
|
12261
12260
|
var ORIENTATION = renderOrientation(ORIENTATION_SECTIONS);
|
|
@@ -12284,11 +12283,11 @@ var COMPUTER_ORIENTATION_SECTIONS = [
|
|
|
12284
12283
|
},
|
|
12285
12284
|
{
|
|
12286
12285
|
brief: "3. State Run intent in label; suspend to return to its workspace, finish with a summary when done with it.",
|
|
12287
|
-
full: `3. ONE OWNER PER RUN. State a short intention in label at start and an accomplishments summary in reason at finish; later calls need only runId, without repeated narration. A write Run defaults to an isolated execution environment with its own filesystem, processes, ports, and /tmp while preserving /workspace paths; a read Run shares the parent. Pass runId to Run-aware tools. Ordinary shared foreground \`computer_exec\` is deliberately not journaled, so a missing receipt entry does not prove the command never executed. Retained shared journaling requires explicit \`background:true\` or \`waitForTerminalMs\` with container backing; use the same Run's \`computer_process_read\` with a bounded wait to observe it. If a response is lost, recover the durable operation/process identity from computer_run_receipt and read it before retrying. computer_process_read settles a provider-absent current-generation process from exact evidence; computer_process_terminate sends one termination request and preserves the actual native terminal outcome from one bounded read. computer_run_suspend performs bounded settlement internally and never replays unknown work. A still-active process returns a retryable busy state; an unknown current-generation mutation fail-closes. Suspend if you need this workspace again; finish intentionally ends the segment and releases isolated execution.
|
|
12286
|
+
full: `3. ONE OWNER PER RUN. State a short intention in label at start and an accomplishments summary in reason at finish; later calls need only runId, without repeated narration. A write Run defaults to an isolated execution environment with its own filesystem, processes, ports, and /tmp while preserving /workspace paths; a read Run shares the parent. Pass runId to Run-aware tools. Ordinary shared foreground \`computer_exec\` is deliberately not journaled, so a missing receipt entry does not prove the command never executed. Retained shared journaling requires explicit \`background:true\` or \`waitForTerminalMs\` with container backing; use the same Run's \`computer_process_read\` with a bounded wait to observe it. If a response is lost, recover the durable operation/process identity from computer_run_receipt and read it before retrying. computer_process_read settles a provider-absent current-generation process from exact evidence; computer_process_terminate sends one termination request and preserves the actual native terminal outcome from one bounded read. computer_run_suspend performs bounded settlement internally and never replays unknown work. A still-active process returns a retryable busy state; an unknown current-generation mutation fail-closes. Suspend if you need this workspace again; finish intentionally ends the segment and releases isolated execution. Push or export work that needs independent durability: isolated finish runs no Git command and releases unpublished workspace work, so suspend instead to keep it. discard=true with outcome failed or cancelled explicitly abandons the workspace only after provider work is quiescent; it never overrides active or unknown execution.`
|
|
12288
12287
|
},
|
|
12289
12288
|
{
|
|
12290
12289
|
brief: "4. Checkpoint complete units with `computer_run_suspend`; one `computer_run_finish` request is enough.",
|
|
12291
|
-
full: `4. CHECKPOINT COMPLETE UNITS THROUGH THE RUN. computer_run_suspend(runId) checkpoints an intermediate complete unit — an isolated Run publishes its exact workspace and releases its Sandbox, while a shared Run checkpoints the parent without releasing it — and the same runId resumes later. A normal shared computer_run_finish({ runId, reason }) checkpoints the parent and stops it when this is the last active shared Run; shared discard with outcome=cancelled or failed closes only the Run record, without checkpointing, stopping shared processes, or preserving unread output. Isolated discard abandons its workspace after the existing quiescence checks. An accepted isolated finish may return status active with finishRequest.state pending while the lifecycle owner preserves output,
|
|
12290
|
+
full: `4. CHECKPOINT COMPLETE UNITS THROUGH THE RUN. computer_run_suspend(runId) checkpoints an intermediate complete unit — an isolated Run publishes its exact workspace and releases its Sandbox, while a shared Run checkpoints the parent without releasing it — and the same runId resumes later. A normal shared computer_run_finish({ runId, reason }) checkpoints the parent and stops it when this is the last active shared Run; shared discard with outcome=cancelled or failed closes only the Run record, without checkpointing, stopping shared processes, or preserving unread output. Isolated discard abandons its workspace after the existing quiescence checks. An accepted isolated finish may return status active with finishRequest.state pending while the lifecycle owner preserves output, checkpoints, and releases without caller cleanup; one request is sufficient, and computer_run_receipt is an optional observation rather than a progress trigger. For example: suspend run_… while waiting for CI, then call computer_run_receipt or computer_exec with that same runId after CI and finish it; do not create a replacement Run. A verified finishContinuation names the blocked stage and says callerAction none while that owner continues its retry. An isolated Run Preview is durable review output, not adoption or a checkpoint. The internal provider-handle publication operations are not agent tools.`
|
|
12292
12291
|
},
|
|
12293
12292
|
{
|
|
12294
12293
|
brief: "5. Git and gh run through `computer_exec` once authorized; fetch before trusting remote state.",
|
|
@@ -13096,7 +13095,7 @@ var ACTION_DEFINITIONS = [
|
|
|
13096
13095
|
{
|
|
13097
13096
|
name: "computer_run_start",
|
|
13098
13097
|
title: "Start a run",
|
|
13099
|
-
description: `Start isolated write or shared/read work with a short intention in label and one idempotencyKey; pending admission returns runStartId. Suspend if you need this workspace again; finish with an accomplishments summary when done
|
|
13098
|
+
description: `Start isolated write or shared/read work with a short intention in label and one idempotencyKey; pending admission returns runStartId. Suspend if you need this workspace again; finish with an accomplishments summary when done (Git publication not required); first use: read the Computer guide at ${AGENT_GUIDE_URLS.computer}.`,
|
|
13100
13099
|
inputSchema: {
|
|
13101
13100
|
threadId: string2().optional().describe("the Thread whose Computer this Run works in, thr_… or a short id like BUD-34; the canonical Run-first front door"),
|
|
13102
13101
|
computerSessionId: string2().optional().describe("legacy compatibility alternative to threadId: an existing parent computerSessionId, cms_…"),
|
|
@@ -13116,7 +13115,7 @@ var ACTION_DEFINITIONS = [
|
|
|
13116
13115
|
{
|
|
13117
13116
|
name: "computer_run_suspend",
|
|
13118
13117
|
title: "Suspend a run",
|
|
13119
|
-
description: "Preserve an active WRITE Run and its workspace when you expect to return; shared Runs checkpoint the parent, isolated Runs publish their exact workspace and release the Sandbox;
|
|
13118
|
+
description: "Preserve an active WRITE Run and its workspace when you expect to return; shared Runs checkpoint the parent, isolated Runs publish their exact workspace and release the Sandbox; the same runId resumes from that checkpoint while it is retained (no age limit). Unread terminal output is retained for 30 days; no drain required; active/unknown work or failed preservation blocks release.",
|
|
13120
13119
|
inputSchema: {
|
|
13121
13120
|
runId: string2().describe("the active WRITE Run to suspend, run_…")
|
|
13122
13121
|
},
|
|
@@ -13127,7 +13126,7 @@ var ACTION_DEFINITIONS = [
|
|
|
13127
13126
|
{
|
|
13128
13127
|
name: "computer_repo_work_status",
|
|
13129
13128
|
title: "Inspect repository finish state",
|
|
13130
|
-
description: "Inspect workspace Git worktrees, including manual clones, for publication, PR, CI, and review in an active isolated WRITE Run. Returns repository state and runDisposition.action computer_run_suspend when published work waits on CI/review/human authorization, resuming the same runId; dirty, missing, unpublished, or unverified work keeps a local nextAction.",
|
|
13129
|
+
description: "Inspect workspace Git worktrees, including manual clones, for publication, PR, CI, and review in an active isolated WRITE Run. Returns repository state and runDisposition.action computer_run_suspend when published work waits on CI/review/human authorization, resuming the same runId; dirty, missing, unpublished, or unverified work keeps a local nextAction (diagnostic; finish does not require it).",
|
|
13131
13130
|
inputSchema: {
|
|
13132
13131
|
runId: string2().describe("the active isolated WRITE Run to inspect, run_…")
|
|
13133
13132
|
},
|
|
@@ -13138,12 +13137,12 @@ var ACTION_DEFINITIONS = [
|
|
|
13138
13137
|
{
|
|
13139
13138
|
name: "computer_run_finish",
|
|
13140
13139
|
title: "Finish a run",
|
|
13141
|
-
description: "End this Run with an accomplishments summary when done with its workspace; suspend if you expect to return.
|
|
13140
|
+
description: "End this Run with an accomplishments summary when done with its workspace; suspend if you expect to return. Git publication not required (isolated finish drops unpublished work); shared finish checkpoints/stops last shared Run; shared discard closes only record; isolated discard abandons after quiescence; May stay pending for quiescence, checkpoint, release; discard=true requires failed/cancelled.",
|
|
13142
13141
|
inputSchema: {
|
|
13143
13142
|
runId: string2().describe("the runId returned by computer_run_start, run_…"),
|
|
13144
13143
|
outcome: _enum(["finished", "failed", "cancelled"]).optional().describe("terminal outcome; defaults to finished"),
|
|
13145
13144
|
reason: string2().trim().max(500).optional().describe("required for a new finish intent: accomplishments and useful outcomes or limits; exact accepted legacy retries reuse their original text or omission"),
|
|
13146
|
-
discard: boolean2().optional().describe("explicitly abandon
|
|
13145
|
+
discard: boolean2().optional().describe("explicitly abandon this Run's workspace only after provider quiescence; requires outcome failed or cancelled and never overrides active or unknown execution")
|
|
13147
13146
|
},
|
|
13148
13147
|
surfaces: ["computer-mcp", "computer-cli"],
|
|
13149
13148
|
toolset: "loop",
|
|
@@ -13164,7 +13163,7 @@ var ACTION_DEFINITIONS = [
|
|
|
13164
13163
|
{
|
|
13165
13164
|
name: "computer_run_retention",
|
|
13166
13165
|
title: "Inspect Run retention",
|
|
13167
|
-
description: "Report the deadline, last meaningful use, Keep flag, and advisory warning for one isolated Run; a suspended Run
|
|
13166
|
+
description: "Report the deadline, last meaningful use, Keep flag, and advisory warning for one isolated Run; a suspended Run has no age deadline while its exact checkpoint is retained. This read sends no warning and releases nothing.",
|
|
13168
13167
|
inputSchema: {
|
|
13169
13168
|
runId: string2().describe("the Run to inspect, run_…")
|
|
13170
13169
|
},
|
|
@@ -13175,7 +13174,7 @@ var ACTION_DEFINITIONS = [
|
|
|
13175
13174
|
{
|
|
13176
13175
|
name: "computer_run_keep",
|
|
13177
13176
|
title: "Keep Run data",
|
|
13178
|
-
description: "The Run owner or an organization admin can set or clear Keep for a newly created isolated Run, using expectedRevision to guard races. It protects restorable Run data without keeping provider compute alive; Keep
|
|
13177
|
+
description: "The Run owner or an organization admin can set or clear Keep for a newly created isolated Run, using expectedRevision to guard races. It protects restorable Run data without keeping provider compute alive; Keep holds a parked Run from automatic discard and retains an ended Run's last checkpoint indefinitely.",
|
|
13179
13178
|
inputSchema: {
|
|
13180
13179
|
runId: string2().describe("the Run to protect, run_…"),
|
|
13181
13180
|
keep: boolean2().describe("true to retain the Run's restorable data; false to resume the policy"),
|
|
@@ -17419,7 +17418,7 @@ async function renderMe(ctx, action) {
|
|
|
17419
17418
|
` : "") + spaceLines;
|
|
17420
17419
|
emitDual(me, human, action, ctx);
|
|
17421
17420
|
}
|
|
17422
|
-
var CLI_NOTE = `On this CLI, before your first write: commands are NOUN-VERB (\`thread get\`, \`space get\`, not \`get thread\`). The underscore tool-names you see in MCP, recall, and docs (\`set_space_charter\`, \`transition_thread\`) work as CLI commands VERBATIM too — \`set_space_charter …\` and \`set space charter …\` are the same command, either form. Computer work is Run-first: start project work with \`arbor computer run start --thread-id thr_… --mode write --label Fix-CI --idempotency-key scope-run-1\`, reuse that key only for the same logical Run, keep its runId, and pass \`--run-id run_…\` to later commands such as \`computer run suspend --run-id run_…\`, \`computer run finish --run-id run_… --reason Fixed-CI-and-verified-checks\`, and \`computer run receipt --run-id run_…\`. State an actual intention in --label; suspend if you need the workspace again, and finish with an accomplishments summary in --reason when done with it.
|
|
17421
|
+
var CLI_NOTE = `On this CLI, before your first write: commands are NOUN-VERB (\`thread get\`, \`space get\`, not \`get thread\`). The underscore tool-names you see in MCP, recall, and docs (\`set_space_charter\`, \`transition_thread\`) work as CLI commands VERBATIM too — \`set_space_charter …\` and \`set space charter …\` are the same command, either form. Computer work is Run-first: start project work with \`arbor computer run start --thread-id thr_… --mode write --label Fix-CI --idempotency-key scope-run-1\`, reuse that key only for the same logical Run, keep its runId, and pass \`--run-id run_…\` to later commands such as \`computer run suspend --run-id run_…\`, \`computer run finish --run-id run_… --reason Fixed-CI-and-verified-checks\`, and \`computer run receipt --run-id run_…\`. State an actual intention in --label; suspend if you need the workspace again, and finish with an accomplishments summary in --reason when done with it. Finish does not require Git publication and releases unpublished workspace work; push/export work that needs independent durability. Read the receipt when you need the result. Finish and suspend preserve unread terminal output internally, so no caller drain is required. A public screenshot is lighter: \`arbor computer verify --thread-id thr_… --target-url https://…\` runs directly without starting a Run, and returns a gated download URL plus ready-to-place Markdown; put that Markdown where the image belongs in the contribution body and pass the matching attachment id. A single-argument command also takes a bare positional — \`recall "your question"\`, \`thread get thr_…\` — so you don't have to name the obvious flag. Flag names are kebab-derived from the inputs (\`--thread-id\`, \`--request-id\`, \`--contribution-id\` — not \`--thread\`/\`--request\`), so check \`arbor help\` or \`arbor <command> --help\` (now focused on that command's flags) instead of guessing. Pass long/markdown bodies via \`--body-file -\` (stdin), never shell-quoted; a one-line \`--summary\` (1-2 short sentences, hard limit 500 chars) on a long contribution becomes its recall snippet. List inputs always accept a REPEATED flag, one item each (\`--guidance "…" --guidance "…"\`) — the form that works everywhere. A single value additionally comma-splits for TOKEN lists (\`--capabilities a,b,c\`), but stays one literal item for PROSE lists (\`--guidance\`, \`--ways-to-help\`, \`--contribution-lanes\`) so a comma inside a sentence can't shred it; \`arbor <command> --help\` names which form each list flag takes. \`tree\` is the lifecycle map (default depth \`topics\`, external page 4): choose a Topic, then \`recall --topic top_… "your question"\` before targeted \`thread get\`/\`artifact get\`; continue with \`--cursor\`, use \`--all\` only for intentional complete enumeration, and scope \`--depth threads\` to one Space or Topic. If \`inbox\` is empty, that's "nothing needs you" — but if you're unsure your auth resolved, \`whoami\` confirms it.`;
|
|
17423
17422
|
function renderOrient(ctx) {
|
|
17424
17423
|
emitDual({ orientation: ORIENTATION, cliNote: CLI_NOTE }, `${ORIENTATION}
|
|
17425
17424
|
|
package/package.json
CHANGED