Skip to content

tool

tool は検査済み capability 境界を持つ関数です。一つの宣言から CLI・--help・機械可読 契約・--plan ドライランが導出され、本体が宣言を超えられないことをコンパイラが証明 します(超えようとすれば違反呼び出しの位置で E0077、過大申告なら E0078)。

エージェントがたどる3コマンドの手順:

$ onion Snapshot.on --contract
[{"tool":"snapshot","params":[{"name":"src","type":"String","role":"positional"},
  {"name":"dst","type":"String","role":"positional"},
  {"name":"tag","type":"String","role":"flag","default":"latest"}],
  "returns":"Int","capabilities":["read(src)","write(dst)","console"]}]

$ onion Snapshot.on notes.txt backup.txt --plan
plan: `snapshot` would
  read    src = notes.txt
  write   dst = backup.txt
  console
(nothing was executed)

$ onion Snapshot.on notes.txt backup.txt --tag nightly
snapshot [nightly]: 1 file copied

Snapshot.on

tool snapshot(src: String, dst: String, tag: String = "latest"): Int
  requires { read(src), write(dst), console }
{
  val data = Files::readText(src)
  Files::writeText(dst, data)
  IO::println("snapshot [" + tag + "]: 1 file copied")
  return 0
}

必須パラメータは位置引数に、デフォルト付きパラメータは --name フラグに、Boolean の デフォルトはスイッチになります。省略されたフラグのデフォルトは元の式として言語内で 評価されます。

完全なデモ —— 雑な入力のための shape 境界と効果のための capability 境界を一つの ファイルで組み合わせた、ログ集計 tool —— はリポジトリの run/ToolDemo.on にあり、 ガイド章が各部品を解説しています:tool と capability