Files
openclaw/extensions/file-transfer/openclaw.plugin.json
Josh Avant 424521a3d3 fix(file-transfer): keep remembered approvals exact (#129762)
* fix(file-transfer): bind standing approvals exactly

* fix(file-transfer): keep validator error lint-safe

* fix(file-transfer): bind directory listing target before I/O

* fix(file-transfer): keep dir list preflight type stable

* test(file-transfer): split directory listing policy coverage

* fix(file-transfer): bind final node effects

* fix(file-transfer): close migration and archive gaps

* fix(file-transfer): bind standing grants before preflight

* fix(file-transfer): bind directory listings to checked target

* fix(file-transfer): bind final effects to filesystem identity

* test(file-transfer): prove exact approval transport

* fix(file-transfer): keep reapproval prompts path-scoped

* chore(config): refresh generated baselines
2026-08-26 09:38:50 -07:00

95 lines
2.7 KiB
JSON

{
"id": "file-transfer",
"activation": {
"onStartup": true
},
"enabledByDefault": true,
"name": "File Transfer",
"description": "Fetch, list, and write files on paired nodes via dedicated node commands. Bypasses bash stdout truncation by using base64 over node.invoke for binaries up to 16 MB.",
"cliCommands": [
{
"name": "file-transfer",
"description": "Review file-transfer standing approvals",
"hasSubcommands": true
}
],
"doctorContract": {
"configRepair": true
},
"contracts": {
"tools": ["file_fetch", "dir_list", "dir_fetch", "file_write"]
},
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"policyVersion": {
"type": "integer",
"const": 2
},
"literalGrants": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["nodeId", "command", "requestedPath", "canonicalPath"],
"properties": {
"nodeId": { "type": "string", "minLength": 1 },
"command": {
"type": "string",
"enum": ["file.fetch", "dir.list", "dir.fetch", "file.write"]
},
"requestedPath": { "type": "string", "minLength": 1 },
"canonicalPath": { "type": "string", "minLength": 1 }
}
}
},
"pendingReapprovals": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["selector", "kind", "path"],
"properties": {
"selector": { "type": "string", "minLength": 1 },
"kind": { "type": "string", "enum": ["read", "write"] },
"path": { "type": "string", "minLength": 1 }
}
}
},
"nodes": {
"type": "object",
"additionalProperties": {
"type": "object",
"additionalProperties": false,
"properties": {
"ask": {
"type": "string",
"enum": ["off", "on-miss", "always"]
},
"allowReadPaths": {
"type": "array",
"items": { "type": "string" }
},
"allowWritePaths": {
"type": "array",
"items": { "type": "string" }
},
"denyPaths": {
"type": "array",
"items": { "type": "string" }
},
"maxBytes": {
"type": "number"
},
"followSymlinks": {
"type": "boolean",
"default": false
}
}
}
}
}
}
}