{
  "$schema": "../schemas/tool-detail.schema.json",
  "formatVersion": "roslyn-workbench-tool-reference/v1",
  "productVersion": "0.1.0-beta.294",
  "sourceTag": "0.1.0-beta.294",
  "commit": "4c70250e5e02c4109ceff810651918d34513225b",
  "name": "transaction-start",
  "title": "Transaction Start",
  "area": "Server",
  "category": "Transactions",
  "operationKind": "Mutation",
  "summary": "Starts a new staged transaction. Check workspace-status first and do not mutate a workspace that is or may be in use elsewhere unless mutation ownership has been coordinated.",
  "availability": "Built in and published by default.",
  "documentationUrl": "https://lantean-code.github.io/roslyn-workbench-mcp/0.1.0-beta.294/reference/tools/transaction-start.html",
  "tool": {
    "name": "transaction-start",
    "title": "Transaction Start",
    "description": "Starts a new staged transaction. Check workspace-status first and do not mutate a workspace that is or may be in use elsewhere unless mutation ownership has been coordinated.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "workspace": {
          "description": "Provide workspaceId, alias, path, or any combination.",
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "workspaceId": {
              "type": "string",
              "format": "uuid"
            },
            "alias": {
              "type": "string"
            },
            "path": {
              "description": "Absolute workspace path.",
              "type": "string"
            }
          }
        }
      }
    },
    "outputSchema": {
      "type": "object",
      "oneOf": [
        {
          "type": "object",
          "required": [
            "ok",
            "data"
          ],
          "properties": {
            "ok": {
              "const": true,
              "description": "Whether the tool invocation succeeded."
            },
            "data": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "transaction": {
                  "description": "The active transaction info.",
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "revision": {
                      "description": "Current staged transaction revision.",
                      "type": "integer"
                    },
                    "revisionCount": {
                      "description": "Number of revisions retained in transaction history.",
                      "type": "integer"
                    },
                    "maxRevisions": {
                      "description": "Maximum number of revisions the transaction can retain.",
                      "type": "integer"
                    },
                    "remainingRevisions": {
                      "description": "Number of additional revisions that can be staged.",
                      "type": "integer"
                    },
                    "canMutate": {
                      "description": "Whether mutation tools may stage another change.",
                      "type": "boolean"
                    },
                    "canUndo": {
                      "description": "Whether transaction history can move to the preceding revision.",
                      "type": "boolean"
                    },
                    "canRedo": {
                      "description": "Whether transaction history can move to the following revision.",
                      "type": "boolean"
                    },
                    "canCommit": {
                      "description": "Whether the staged transaction can be committed to disk.",
                      "type": "boolean"
                    },
                    "canRollback": {
                      "description": "Whether the complete staged transaction can be discarded.",
                      "type": "boolean"
                    }
                  }
                }
              },
              "description": "Tool-specific result payload."
            },
            "snapshot": {
              "type": "object",
              "properties": {
                "workspaceId": {
                  "type": "string",
                  "format": "uuid"
                },
                "workspaceEpoch": {
                  "type": "integer"
                },
                "snapshotId": {
                  "type": "string",
                  "format": "uuid"
                },
                "transactionRevision": {
                  "type": [
                    "integer",
                    "null"
                  ]
                }
              },
              "required": [
                "workspaceId",
                "workspaceEpoch",
                "snapshotId",
                "transactionRevision"
              ],
              "description": "Exact immutable workspace snapshot associated with the result, when available."
            }
          }
        },
        {
          "type": "object",
          "required": [
            "ok",
            "error"
          ],
          "properties": {
            "ok": {
              "const": false,
              "description": "Whether the tool invocation succeeded."
            },
            "error": {
              "type": "object",
              "properties": {
                "code": {
                  "description": "Stable machine-readable error code.",
                  "type": "string"
                },
                "message": {
                  "description": "Human-readable explanation of the failure.",
                  "type": "string"
                },
                "correlationId": {
                  "description": "Correlation identifier for matching the failure to server-side diagnostics, when available.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "code",
                "message"
              ],
              "description": "Structured error details when the invocation failed."
            },
            "continuation": {
              "oneOf": [
                {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "tool",
                    "instruction"
                  ],
                  "properties": {
                    "kind": {
                      "const": "CallTool",
                      "description": "Action required before the original request can continue."
                    },
                    "instruction": {
                      "type": "string",
                      "description": "Agent-facing instruction explaining how to continue.",
                      "minLength": 1
                    },
                    "tool": {
                      "type": "string",
                      "description": "Tool to call before continuing the original request.",
                      "minLength": 1
                    }
                  }
                },
                {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "tools",
                    "instruction"
                  ],
                  "properties": {
                    "kind": {
                      "const": "ChooseTool",
                      "description": "Action required before the original request can continue."
                    },
                    "instruction": {
                      "type": "string",
                      "description": "Agent-facing instruction explaining how to continue.",
                      "minLength": 1
                    },
                    "tools": {
                      "type": "array",
                      "description": "Allowed tool choices from which the agent must select one.",
                      "minItems": 1,
                      "uniqueItems": true,
                      "items": {
                        "type": "string",
                        "description": "Name of a tool the agent may choose.",
                        "minLength": 1
                      }
                    }
                  }
                },
                {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "instruction"
                  ],
                  "properties": {
                    "kind": {
                      "const": "RetryRequest",
                      "description": "Action required before the original request can continue."
                    },
                    "instruction": {
                      "type": "string",
                      "description": "Agent-facing instruction explaining how to continue.",
                      "minLength": 1
                    }
                  }
                },
                {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "instruction"
                  ],
                  "properties": {
                    "kind": {
                      "const": "ReviseRequest",
                      "description": "Action required before the original request can continue."
                    },
                    "instruction": {
                      "type": "string",
                      "description": "Agent-facing instruction explaining how to continue.",
                      "minLength": 1
                    }
                  }
                },
                {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "instruction"
                  ],
                  "properties": {
                    "kind": {
                      "const": "ResolveExternally",
                      "description": "Action required before the original request can continue."
                    },
                    "instruction": {
                      "type": "string",
                      "description": "Agent-facing instruction explaining how to continue.",
                      "minLength": 1
                    }
                  }
                }
              ],
              "description": "Action the agent should take before retrying or continuing."
            }
          }
        }
      ]
    },
    "annotations": {
      "title": "Transaction Start",
      "destructiveHint": false,
      "idempotentHint": false,
      "openWorldHint": false,
      "readOnlyHint": false
    }
  },
  "examples": [
    {
      "workflowId": "transaction-change",
      "workflowTitle": "Stage, review and commit one change",
      "step": 1,
      "id": "start-transaction",
      "title": "Start a transaction",
      "purpose": "Create an isolated staging area before invoking a mutation or Code Action.",
      "expectedOutcome": "The sample workspace owns a new transaction at its initial revision.",
      "representativeResponse": null,
      "request": {
        "workspace": {
          "alias": "sample"
        }
      }
    },
    {
      "workflowId": "code-action-change",
      "workflowTitle": "Discover and stage a Code Action",
      "step": 1,
      "id": "start-code-action-transaction",
      "title": "Start a transaction for the Code Action",
      "purpose": "Create the transaction that will receive the selected Code Action changes.",
      "expectedOutcome": "The sample workspace owns a new transaction at its initial revision.",
      "representativeResponse": null,
      "request": {
        "workspace": {
          "alias": "sample"
        }
      }
    }
  ]
}
