@lambdacurry/arbor 0.21.5 → 0.21.6

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.
Files changed (2) hide show
  1. package/dist/arbor.js +25 -23
  2. package/package.json +1 -1
package/dist/arbor.js CHANGED
@@ -17795,6 +17795,8 @@ var MCP_OUTPUT_SCHEMAS = {
17795
17795
  type: exports_external.string(),
17796
17796
  status: exports_external.string(),
17797
17797
  private: exports_external.literal(true),
17798
+ sharedThreadId: id,
17799
+ sharedContributionId: id,
17798
17800
  replayed: exports_external.boolean(),
17799
17801
  association: jsonObject.nullable(),
17800
17802
  message: exports_external.string()
@@ -18830,7 +18832,7 @@ var CONTRIBUTION_ADD_LINK_RELS = [
18830
18832
  "tracked-as",
18831
18833
  "delivered-by"
18832
18834
  ];
18833
- var ARBOR_FEEDBACK_GUIDANCE = `ARBOR-SPECIFIC FEEDBACK — Privately capture ONE bounded report through \`contribute_arbor_feedback\` when Arbor itself caused meaningful friction: confusing semantics; surprising Arbor UI/MCP/CLI behavior; a missing Arbor capability; repeated Arbor retries; an Arbor-specific workaround; or misleading state, recovery guidance, or ergonomics. Usually do NOT report an ordinary repository bug, a routine GitHub/Cloudflare/provider failure Arbor did not cause or obscure, your own mistake, or generic implementation difficulty. One incident = one report: use one stable idempotencyKey to retry that same logical submission rather than reporting every participating call. Never include raw prompts/transcripts, shell output, command contents, secrets, provider payloads, or arbitrary error dumps. The raw body remains private; \`feedback_status\` reads only a receipt you own, while \`feedback_tree\` → \`feedback_recall\` → \`feedback_thread_get\` browses deliberately shared, sanitized knowledge.`;
18835
+ var ARBOR_FEEDBACK_GUIDANCE = `ARBOR-SPECIFIC FEEDBACK — File ONE bounded report through \`contribute_arbor_feedback\` when Arbor itself caused meaningful friction: confusing semantics; surprising Arbor UI/MCP/CLI behavior; a missing Arbor capability; repeated Arbor retries; an Arbor-specific workaround; or misleading state, recovery guidance, or ergonomics. Usually do NOT report an ordinary repository bug, a routine GitHub/Cloudflare/provider failure Arbor did not cause or obscure, your own mistake, or generic implementation difficulty. One incident = one report: use one stable idempotencyKey to retry that same logical submission rather than reporting every participating call. Never include raw prompts/transcripts, shell output, command contents, secrets, provider payloads, or arbitrary error dumps. The report lands as its own visible shared Feedback Thread as submitted; the fbk receipt and reviewer-only metadata remain private. \`feedback_status\` reads only a receipt you own, while \`feedback_tree\` → \`feedback_recall\` → \`feedback_thread_get\` browses the shared forum.`;
18834
18836
  var ORIENTATION = `Arbor is your team's deliberation room and shared memory — people and agents settle typed work here, and Arbor remembers what's decided. To work well:
18835
18837
 
18836
18838
  ${ARBOR_FEEDBACK_GUIDANCE}
@@ -18857,10 +18859,10 @@ ${ARBOR_FEEDBACK_GUIDANCE}
18857
18859
  3. ONE RUN PER TASK. 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. If a response is lost, recover the durable operation/process identity from computer_run_receipt and read it before retrying. Once every operation is settled, computer_run_suspend publishes the exact workspace and releases the provider during an external wait; the next Run-aware operation restores that checkpoint under the same runId automatically. Suspension refuses active processes or unsettled outcomes and never replays unknown work, so reconcile process and Git/publication evidence first. An isolated local commit or Preview is not Git publication; push coherent work and prove it with computer_repo_work_status before computer_run_finish destroys the final placement. discard=true is the explicit choice to destroy proven non-durable work.
18858
18860
  4. CHECKPOINT COMPLETE PARENT UNITS. computer_checkpoint advances immutable parent lineage after an intermediate complete unit; computer_stop performs the final checkpoint before teardown. An isolated Run Preview is durable review output, not adoption or a checkpoint. The internal provider-handle publication operations are not agent tools.
18859
18861
  5. GIT AND GITHUB ARE ORDINARY COMMANDS AFTER AUTHORIZATION. Clone, fetch, pull, push, and gh run through computer_exec using a connected human's just-in-time ambient GitHub identity. Credentials never enter argv, workspace files, Git config, checkpoints, Events, logs, or receipts. A restored Computer deliberately keeps the checkout age of its snapshot, so fetch/pull before trusting remote state.
18860
- 6. VERIFY, PREVIEW, AND EXPORT. computer_verify captures a public URL directly without opening a project runtime. computer_publish_preview preserves immutable static output from either the parent or an active isolated write Run. computer_export moves bounded files into durable Thread Attachments; place returned Markdown exactly where the media belongs and cite the matching attachment ids.
18862
+ 6. VERIFY, PREVIEW, AND EXPORT. computer_verify captures a public URL directly without opening a project runtime. computer_publish_preview preserves immutable static output from either the parent or an active isolated write Run. computer_export moves bounded files into durable Thread Attachments; for a computer:// file Artifact asleep face, export the exact locator path .tldr and a same-Thread PNG, then use artifact set_snapshot. computer_export itself does not call set_snapshot; place returned Markdown exactly where the media belongs and cite the matching attachment ids.
18861
18863
  7. PACKAGE, DEPLOY, ACTIVATE, AND OPERATE APPS HERE. computer_publish_app_bundle creates the immutable executable bundle from verified parent bytes. For short-lived public Artifact experiments use preview_app_create/get/retire; for published Space Apps use app_create, app_config_apply, app_deploy, app_deployment_get, app_activate, app_get, app_fetch/app_request, app_rollback, app_set_access, app_reset_state/app_restore_state, and app_archive as one workflow-closed release surface. First-class Organization/Profile Secrets remain on Arbor's collaboration MCP because they are broader identity-owned resources; App configuration here references existing Secret ids and never accepts or returns secret material.
18862
18864
  8. FINISH WHAT YOU START. Stop the parent after its final complete unit, finish every Run, and preserve evidence before teardown. When reporting collaboration conclusions through Arbor, pass the producing computerSessionId and attachmentIds to contribute or respond.
18863
- 9. CLOSE OUT ARBOR DOGFOOD. When developing Arbor through Arbor, ask: “Did Arbor itself create meaningful friction or require an Arbor-specific workaround?” If yes, apply the classifier above and privately capture one bounded report before closing the development loop; keep unrelated product friction out of the implementation Thread. If no, close normally without manufacturing feedback.`;
18865
+ 9. CLOSE OUT ARBOR DOGFOOD. When developing Arbor through Arbor, ask: “Did Arbor itself create meaningful friction or require an Arbor-specific workaround?” If yes, apply the classifier above and file one bounded report before closing the development loop; keep unrelated product friction out of the implementation Thread. If no, close normally without manufacturing feedback.`;
18864
18866
  var PROSE_LISTS = exports_external.registry();
18865
18867
  function proseList(description) {
18866
18868
  const schema = exports_external.array(exports_external.string()).describe(description);
@@ -18974,7 +18976,7 @@ var ACTION_DEFINITIONS = [
18974
18976
  {
18975
18977
  name: "feedback_tree",
18976
18978
  title: "Browse the shared Arbor Feedback forum",
18977
- description: "READ ONLY: Browse the global curated Arbor Feedback forum by Topic and optional Thread roster; the global scope is implied and no Space id is required. This returns deliberately shared, sanitized knowledge only and never private submissions or reporter metadata.",
18979
+ description: "READ ONLY: Browse the global Arbor Feedback forum by Topic and optional Thread roster; the global scope is implied and no Space id is required. New reports appear as their own shared Threads as submitted; private receipt metadata and reviewer diagnostics are never returned.",
18978
18980
  inputSchema: {
18979
18981
  depth: exports_external.enum(["topics", "threads"]).optional().describe("topics (default) or threads to include each Topic's shared Thread roster"),
18980
18982
  includeArchived: exports_external.boolean().optional().describe("include archived Topics/Threads for historical moderation or lookup (default false)")
@@ -18986,7 +18988,7 @@ var ACTION_DEFINITIONS = [
18986
18988
  {
18987
18989
  name: "feedback_recall",
18988
18990
  title: "Find known Arbor feedback",
18989
- description: "READ ONLY: Search the global shared Arbor Feedback forum for sanitized issues, workarounds, and decisions; scope to a Topic after feedback_tree when useful. Private feedback bodies, identities, diagnostics, and private record ids are never searched or returned.",
18991
+ description: "READ ONLY: Search the global shared Arbor Feedback forum for reports, workarounds, and decisions; scope to a Topic after feedback_tree when useful. New report bodies are searchable as submitted; private receipt ids, reporter metadata, and reviewer diagnostics are never returned.",
18990
18992
  inputSchema: {
18991
18993
  query: exports_external.string().min(1).describe("the Arbor friction, issue, workaround, or idea to find"),
18992
18994
  topicId: exports_external.string().optional().describe("optional shared Feedback Topic id from feedback_tree"),
@@ -18999,7 +19001,7 @@ var ACTION_DEFINITIONS = [
18999
19001
  {
19000
19002
  name: "feedback_thread_get",
19001
19003
  title: "Read a shared Arbor Feedback thread",
19002
- description: "READ ONLY: Read one curated shared Arbor Feedback Thread, following a merge redirect to its canonical destination while preserving shared provenance. This cannot traverse to private reports, reporter/customer metadata, diagnostics, or private associations.",
19004
+ description: "READ ONLY: Read one shared Arbor Feedback Thread, following a merge redirect to its canonical destination while preserving shared provenance. A newly filed report appears here as submitted; private receipt ids, reporter organization metadata, diagnostics, and private associations are not projected.",
19003
19005
  inputSchema: {
19004
19006
  threadId: exports_external.string().describe("the shared Feedback Thread id, thr_…")
19005
19007
  },
@@ -19009,16 +19011,16 @@ var ACTION_DEFINITIONS = [
19009
19011
  },
19010
19012
  {
19011
19013
  name: "contribute_arbor_feedback",
19012
- title: "Privately contribute feedback about Arbor",
19013
- description: "Privately capture one bounded report when Arbor itself caused meaningful product or ergonomics friction; do not use this for ordinary repository bugs, routine un-obscured provider failures, agent mistakes, or generic implementation difficulty. The body is never posted into the current Thread or shared forum; one incident should produce one report, with a stable idempotencyKey used only to retry that same submission.",
19014
+ title: "Contribute feedback about Arbor",
19015
+ description: "File one bounded report when Arbor itself caused meaningful product or ergonomics friction; do not use this for ordinary repository bugs, routine un-obscured provider failures, agent mistakes, or generic implementation difficulty. The body lands as the first contribution in its own visible shared Feedback Thread; one incident should produce one report, with a stable idempotencyKey used only to retry that same submission.",
19014
19016
  inputSchema: {
19015
19017
  type: exports_external.enum(ARBOR_FEEDBACK_TYPES).optional().describe("the contribution move (default comment); decision is reserved for shared forum curation"),
19016
- body: exports_external.string().min(1).describe("the private feedback body"),
19017
- summary: exports_external.string().max(500).optional().describe("optional private gist, at most 500 characters"),
19018
+ body: exports_external.string().min(1).describe("the feedback body, shared as submitted in its own Thread"),
19019
+ summary: exports_external.string().max(500).optional().describe("optional gist, at most 500 characters; also seeds the shared Thread title"),
19018
19020
  confidence: exports_external.number().int().min(0).max(100).optional().describe("optional 0–100 confidence"),
19019
- idempotencyKey: exports_external.string().min(1).max(200).optional().describe("stable key for this ONE private submission; safe retries return the same receipt"),
19020
- threadId: exports_external.string().optional().describe("optional shared Feedback Thread this private evidence relates to; not a write destination"),
19021
- topicId: exports_external.string().optional().describe("optional shared Feedback Topic this private evidence relates to; not a write destination"),
19021
+ idempotencyKey: exports_external.string().min(1).max(200).optional().describe("stable key for this ONE report; safe retries return the same receipt and shared Thread"),
19022
+ threadId: exports_external.string().optional().describe("optional related shared Feedback Thread; its Topic becomes the new report Thread's Topic"),
19023
+ topicId: exports_external.string().optional().describe("optional destination shared Feedback Topic for the new report Thread"),
19022
19024
  computerSessionId: exports_external.string().optional().describe("optional Arbor Computer session you own; only its id is attached, never shell output or files")
19023
19025
  },
19024
19026
  surfaces: ["mcp", "cli"],
@@ -19027,7 +19029,7 @@ var ACTION_DEFINITIONS = [
19027
19029
  },
19028
19030
  {
19029
19031
  name: "feedback_status",
19030
- title: "Check your private Arbor feedback receipt",
19032
+ title: "Check your Arbor feedback receipt",
19031
19033
  description: "READ ONLY: Check the useful lifecycle of one private Arbor feedback receipt you own. Missing and not-owned receipts look identical, and this returns no raw body, identities, moderator diagnostics, or shared association targets.",
19032
19034
  inputSchema: {
19033
19035
  feedbackId: exports_external.string().describe("your private Arbor feedback receipt id, fbk_…")
@@ -19039,7 +19041,7 @@ var ACTION_DEFINITIONS = [
19039
19041
  {
19040
19042
  name: "admin_feedback_capability",
19041
19043
  title: "Manage Arbor Feedback capabilities",
19042
- description: "Privileged: list or set explicit shared-moderation and private-review grants. These capabilities are deliberately separate; granting moderation does not grant access to raw private feedback.",
19044
+ description: "Privileged: list or set explicit shared-moderation and receipt-review grants. These capabilities are deliberately separate; granting moderation does not grant access to reporter/reviewer receipt metadata.",
19043
19045
  inputSchema: {
19044
19046
  verb: exports_external.enum(["list", "set"]).describe("list grants, or set one profile capability"),
19045
19047
  profileId: exports_external.string().optional().describe("set: the profile receiving or losing the grant"),
@@ -19053,7 +19055,7 @@ var ACTION_DEFINITIONS = [
19053
19055
  {
19054
19056
  name: "admin_feedback_evidence",
19055
19057
  title: "Review private Arbor feedback evidence",
19056
- description: "Privileged private-review surface: list/get private reports, associate or disassociate them with shared Topics/Threads, and mark review state. This never changes a raw body's visibility and does not grant shared-forum moderation.",
19058
+ description: "Privileged receipt-review surface: list/get fbk receipt metadata, associate or disassociate receipts with shared Topics/Threads, and mark review state. Report bodies are already filed in their own shared Threads; this surface additionally exposes reporter/reviewer metadata and does not grant shared-forum moderation.",
19057
19059
  inputSchema: {
19058
19060
  verb: exports_external.enum(["list", "get", "associate", "disassociate", "status"]).describe("the private-evidence review action"),
19059
19061
  feedbackId: exports_external.string().optional().describe("get/associate/disassociate/status: private feedback id"),
@@ -19090,7 +19092,7 @@ var ACTION_DEFINITIONS = [
19090
19092
  {
19091
19093
  name: "admin_feedback_thread",
19092
19094
  title: "Maintain and merge shared Feedback Threads",
19093
- description: "Privileged shared-forum moderation: create/update/move/transition/archive/restore Threads or merge a duplicate into a canonical destination with redirect and provenance. Merge safely repoints private associations but never copies raw evidence into shared content.",
19095
+ description: "Privileged shared-forum moderation: create/update/move/transition/archive/restore Threads or merge a duplicate into a canonical destination with redirect and provenance. Merge safely repoints receipt associations without duplicating report bodies.",
19094
19096
  inputSchema: {
19095
19097
  action: exports_external.enum(["create", "update", "move", "transition", "archive", "restore", "merge"]).describe("the Thread lifecycle or merge action"),
19096
19098
  threadId: exports_external.string().optional().describe("update/move/transition/archive/restore: Thread id"),
@@ -19621,7 +19623,7 @@ var ACTION_DEFINITIONS = [
19621
19623
  {
19622
19624
  name: "computer_export",
19623
19625
  title: "Export a Thread file",
19624
- description: "Export one bounded file from the parent Computer or a Run into a durable Thread Attachment when the file itself is evidence. Returns attachment ids and ready-to-place attachments[].markdown; put that Markdown exactly where the media belongs and bind the matching ids, while idempotencyKey controls safe retry identity.",
19626
+ description: "Export one bounded file from the parent Computer or a Run as a durable Thread Attachment, with ready-to-place attachments[].markdown to put exactly where the media belongs and bind by attachment id. For a Layer 1 snapshot, export the exact computer:// .tldr locator path (stamping computerPath) and a same-Thread PNG, then use artifact set_snapshot; this command never mints.",
19625
19627
  inputSchema: {
19626
19628
  computerSessionId: exports_external.string().optional().describe("the computerSessionId returned by computer_open, cms_…; required unless runId is supplied"),
19627
19629
  runId: exports_external.string().optional().describe("route this export according to this Run execution placement, run_…"),
@@ -19825,7 +19827,7 @@ var ACTION_DEFINITIONS = [
19825
19827
  {
19826
19828
  name: "set_artifact_snapshot",
19827
19829
  title: "Set an Artifact's stored file snapshot",
19828
- description: "Pin exact exported source bytes plus a same-Thread PNG preview as a Computer-backed file Artifact's asleep/share face. This does not change its computer:// locator or create runtime.",
19830
+ description: "After computer_export of the exact computer:// .tldr locator path and a same-Thread PNG, use this command (the artifact verb=set_snapshot move) to pin those exported bytes as the Computer-backed file Artifact's asleep/share face. This does not change its locator or create runtime.",
19829
19831
  inputSchema: {
19830
19832
  artifactId: exports_external.string().describe("the Computer-backed file Artifact, art_…"),
19831
19833
  sourceAttachmentId: exports_external.string().describe("exported .tldr Attachment, att_…"),
@@ -20662,7 +20664,7 @@ var ACTION_DEFINITIONS = [
20662
20664
  {
20663
20665
  name: "artifact",
20664
20666
  title: "Create or edit an Artifact",
20665
- description: "Create or edit a durable versioned Artifact, bind its executable Thread Live Preview, set a Computer-file asleep/share snapshot, or promote a Thread attachment; read artifact_get before changing it, while lifecycle/removal stay in artifact_transition and artifact_delete. Live-surface binding changes Artifact identity metadata, not source/version content.",
20667
+ description: "Create or edit a durable versioned Artifact, bind its executable Thread Live Preview, set a Computer-file asleep/share snapshot, or promote a Thread attachment; for a computer:// .tldr snapshot mint: computer_export the exact locator path and same-Thread PNG, then use set_snapshot. Board save and TLP do not mint snapshots. set_snapshot does not wake Computer or change the locator; read artifact_get before changing it, while lifecycle/removal stay in artifact_transition and artifact_delete.",
20666
20668
  inputSchema: {
20667
20669
  verb: exports_external.enum(["create", "edit", "set_live_preview", "set_snapshot", "promote_attachment"]).describe("which artifact move"),
20668
20670
  title: exports_external.string().optional().describe("create: the artifact's title"),
@@ -20680,8 +20682,8 @@ var ACTION_DEFINITIONS = [
20680
20682
  baseVersion: exports_external.number().optional().describe("edit: the version you READ (from get/create) — stale base is rejected with the current source"),
20681
20683
  patches: exports_external.array(exports_external.object({ old: exports_external.string(), new: exports_external.string() })).optional().describe("edit: exact-match hunks applied in order, atomically; each old must match exactly once"),
20682
20684
  note: exports_external.string().optional().describe("edit: one-line summary of what changed"),
20683
- sourceAttachmentId: exports_external.string().optional().describe("set_snapshot: exported .tldr Attachment, att_…"),
20684
- previewAttachmentId: exports_external.string().optional().describe("set_snapshot: exported PNG Attachment, att_…"),
20685
+ sourceAttachmentId: exports_external.string().optional().describe("set_snapshot: computer_export of the exact computer:// locator path; MIME application/vnd.tldraw+json, computerPath stamped and matching defaultCwd + locator"),
20686
+ previewAttachmentId: exports_external.string().optional().describe("set_snapshot: same-Thread computer_export image/png Attachment, used as the asleep face preview"),
20685
20687
  attachmentId: exports_external.string().optional().describe("promote_attachment: the upload, att_…")
20686
20688
  },
20687
20689
  surfaces: ["mcp"],
@@ -20697,7 +20699,7 @@ var ACTION_DEFINITIONS = [
20697
20699
  {
20698
20700
  name: "artifact_get",
20699
20701
  title: "Read an Artifact",
20700
- description: "Read an Artifact's current source, version, immutable history, AppBundle references, and current executable Live Preview surface, or pass version for an older content snapshot. It cannot edit content, bind a surface, change lifecycle, promote an attachment, or delete an Artifact.",
20702
+ description: "Read an Artifact's current source, version, immutable history, AppBundle references, and current executable Live Preview surface, or pass version for an older content snapshot. Computer-file Artifacts return snapshot state from set_snapshot (null until set_snapshot, meaning the asleep face is not checkable); this read cannot edit content, bind a surface, change lifecycle, promote an attachment, or delete an Artifact.",
20701
20703
  inputSchema: {
20702
20704
  artifactId: exports_external.string().describe("the Artifact, art_…"),
20703
20705
  version: exports_external.number().optional().describe("read this old snapshot instead of the current")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambdacurry/arbor",
3
- "version": "0.21.5",
3
+ "version": "0.21.6",
4
4
  "description": "The Arbor CLI — a shared workspace for people and agents. The human + headless-agent write path over Arbor's guarded operation surface.",
5
5
  "keywords": [
6
6
  "agents",