# Written by `tilo-app surface`; review changes like an API change.

[[resources]]
kind = "code_editor.project"
label = "Code Editor"
version = 1
fields = [
  { path = "files", type = "Collection<Entry>", stored = "collection" },
  { path = "files.*.kind", type = "EntryKind", readonly = true },
  { path = "files.*.name", type = "String", label = true, readonly = true },
  { path = "files.*.parent", type = "Option<Id>", readonly = true },
  { path = "files.*.language", type = "String" },
  { path = "buffers", type = "BTreeMap<String, Source>" },
  { path = "terminal_panel", type = "Option<Terminal>", readonly = true, stored = "record" },
  { path = "terminal_panel.target", type = "Option<Atom>", readonly = true },
  { path = "terminal_panel.relay_session", type = "Option<Atom>", readonly = true },
  { path = "terminal_panel.pane", type = "Option<Atom>", readonly = true },
  { path = "terminal_panel.runs", type = "Collection<Run>", readonly = true, stored = "collection" },
  { path = "terminal_panel.runs.*.command", type = "Atom", label = true },
  { path = "terminal_panel.runs.*.cwd", type = "Atom" },
  { path = "terminal_panel.runs.*.environment", type = "Option<Atom>" },
  { path = "terminal_panel.runs.*.actor", type = "Atom" },
  { path = "terminal_panel.runs.*.for_person", type = "Option<Atom>" },
  { path = "terminal_panel.runs.*.started_ms", type = "i64" },
  { path = "terminal_panel.runs.*.ended_ms", type = "i64" },
  { path = "terminal_panel.runs.*.exit", type = "i32" },
  { path = "terminal_panel.runs.*.output", type = "Bytes" },
  { path = "terminal_panel.runs.*.truncated", type = "bool" },
  { path = "terminal_panel.runs.*.tool", type = "Atom" },
  { path = "terminal_panel.runs.*.items", type = "Vec<RunItem>" },
  { path = "terminal_panel.requests", type = "Outbox<RunRequest, RunAnswer>", readonly = true },
  { path = "terminal_requests", type = "Outbox<RunRequest, RunAnswer>", readonly = true },
]

[[resources.verbs]]
id = "new-file"
kind = "undoable"
params = [
  { name = "name", required = false, schema = { type = ["string", "null"] } },
  { name = "folder", required = false, schema = { type = ["string", "null"] } },
  { name = "text", required = false, schema = { type = ["string", "null"] } },
]

[[resources.verbs]]
id = "new-folder"
kind = "undoable"
params = [
  { name = "name", required = false, schema = { type = ["string", "null"] } },
  { name = "folder", required = false, schema = { type = ["string", "null"] } },
]

[[resources.verbs]]
id = "rename"
kind = "undoable"
params = [
  { name = "entry", required = true, schema = { type = "string" } },
  { name = "name", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "move-entry"
kind = "undoable"
params = [
  { name = "entry", required = true, schema = { type = "string" } },
  { name = "folder", required = false, schema = { type = ["string", "null"] } },
  { name = "before", required = false, schema = { type = ["string", "null"] } },
]

[[resources.verbs]]
id = "replace-text"
kind = "undoable"
params = [
  { name = "file", required = true, schema = { type = "string" } },
  { name = "text", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "delete"
destructive = true
kind = "undoable"
params = [
  { name = "entry", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "record-entry"
kind = "undoable"
params = [
  { name = "id", required = true, schema = { type = "string" } },
  { name = "kind", required = true, schema = { type = "string", enum = ["file", "folder"] } },
  { name = "name", required = true, schema = { type = "string" } },
  { name = "folder", required = false, schema = { type = ["string", "null"] } },
  { name = "language", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "record-text"
kind = "undoable"
params = [
  { name = "file", required = true, schema = { type = "string" } },
  { name = "text", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "record-target"
kind = "undoable"
params = [
  { name = "target", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "record-relay-session"
kind = "undoable"
params = [
  { name = "session", required = false, schema = { type = ["string", "null"] } },
]

[[resources.verbs]]
id = "claim-pane"
kind = "undoable"
params = [
  { name = "pane", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "run"
kind = "outside"
params = [
  { name = "command", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "rerun"
kind = "outside"
params = [
  { name = "run", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "rerun-test"
kind = "outside"
params = [
  { name = "run", required = true, schema = { type = "string" } },
  { name = "test", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "record-run"
kind = "undoable"
params = [
  { name = "command", required = true, schema = { type = "string" } },
  { name = "cwd", required = true, schema = { type = "string" } },
  { name = "started_ms", required = true, schema = { type = "integer" } },
  { name = "ended_ms", required = true, schema = { type = "integer" } },
  { name = "exit", required = true, schema = { type = "integer", maximum = 2147483647, minimum = -2147483648 } },
  { name = "output", required = false, schema = { type = ["string", "null"] } },
  { name = "output_len", required = true, schema = { type = "integer", minimum = 0 } },
  { name = "truncated", required = true, schema = { type = "boolean" } },
  { name = "tool", required = true, schema = { type = "string" } },
  { name = "items", required = true, schema = { type = "array", items = { type = "object", additionalProperties = false, properties = { path = { type = ["string", "null"] }, code = { type = ["string", "null"] }, column = { type = ["integer", "null"], maximum = 4294967295, minimum = 0 }, kind = { type = "string", enum = ["error", "warning", "location", "url", "test-passed", "test-failed", "test-ignored", "change"] }, line = { type = ["integer", "null"], maximum = 4294967295, minimum = 0 }, text = { type = "string" } }, required = ["kind", "text"] } } },
  { name = "request", required = false, schema = { type = ["string", "null"] } },
  { name = "run", required = true, schema = { type = "string" } },
]

