fix: validate Cua window discovery filters and guide recovery
This commit is contained in:
1 parent
c89588a80d
commit
1c1d700e9b
12 files changed
+337
-31
No files matched your search
@@ -25,6 +25,8 @@ import (
|
||||
//go:embed tools.json
|
||||
var toolsJSON []byte
|
||||
|
||||
const adapterVersion = "0.36.0+artemis.1"
|
||||
|
||||
type obj = map[string]any
|
||||
type request struct {
|
||||
JSONRPC string `json:"jsonrpc"`
|
||||
@@ -104,7 +106,7 @@ func startPeer(exe string) (*peer, error) {
|
||||
p.lines <- append([]byte(nil), s.Bytes()...)
|
||||
}
|
||||
}()
|
||||
_, err = p.call("initialize", obj{"protocolVersion": "2024-11-05", "clientInfo": obj{"name": "artemis-cua-adapter", "version": "0.36.0"}, "capabilities": obj{}})
|
||||
_, err = p.call("initialize", obj{"protocolVersion": "2024-11-05", "clientInfo": obj{"name": "artemis-cua-adapter", "version": adapterVersion}, "capabilities": obj{}})
|
||||
if err != nil {
|
||||
p.stop()
|
||||
return nil, err
|
||||
@@ -200,7 +202,11 @@ func (a *adapter) validate(name string, args obj) error {
|
||||
return fmt.Errorf("missing argument: %s", str(key))
|
||||
}
|
||||
}
|
||||
if name != "list_windows" && (num(args["pid"]) <= 0 || num(args["window_id"]) <= 0) {
|
||||
if name == "list_windows" {
|
||||
_, err := windowQuery(args)
|
||||
return err
|
||||
}
|
||||
if num(args["pid"]) <= 0 || num(args["window_id"]) <= 0 {
|
||||
return errors.New("a concrete pid and window_id are required")
|
||||
}
|
||||
if name == "save_screenshot" && !validFilename(str(args["filename"])) {
|
||||
@@ -302,6 +308,12 @@ func (a *adapter) handle(name string, args obj) obj {
|
||||
}
|
||||
}
|
||||
r, src, err = a.observe(args)
|
||||
} else if name == "list_windows" {
|
||||
query, _ := windowQuery(args) // Already validated above.
|
||||
r, err = a.peer.tool(name, query)
|
||||
if err == nil {
|
||||
r = windowListing(r, query)
|
||||
}
|
||||
} else {
|
||||
upstream := name
|
||||
if name == "click_at" {
|
||||
@@ -412,7 +424,7 @@ func serve(a *adapter, in io.Reader, out io.Writer) {
|
||||
var rpcErr any
|
||||
switch q.Method {
|
||||
case "initialize":
|
||||
result = obj{"protocolVersion": "2024-11-05", "capabilities": obj{"tools": obj{}}, "serverInfo": obj{"name": "artemis-cua-driver", "version": "0.36.0"}}
|
||||
result = obj{"protocolVersion": "2024-11-05", "capabilities": obj{"tools": obj{}}, "serverInfo": obj{"name": "artemis-cua-driver", "version": adapterVersion}}
|
||||
case "ping":
|
||||
result = obj{}
|
||||
case "tools/list":
|
||||
|
||||
Reference in new issue
Block a user