@opencode/browse 0.0.6-dev.27 → 0.0.6-dev.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cli-n0qhph13.mjs → cli-wgxfjgb3.mjs} +10 -67
- package/dist/cli.mjs +9 -9
- package/dist/{helpers-zeewknn2.mjs → helpers-3fm1nwkt.mjs} +1 -1
- package/dist/main-4t3a1fw9.mjs +4 -0
- package/dist/{main-xzc7qp1c.mjs → main-8h1nwn45.mjs} +4 -34
- package/dist/{main-a6mpfd6z.mjs → main-8ncff5jp.mjs} +2 -2
- package/dist/{main-cxrsjs2z.mjs → main-rsqahh12.mjs} +33 -468
- package/dist/{main-x96gxahz.mjs → main-scyv26xb.mjs} +2 -2
- package/dist/{main-a4yj9bpn.mjs → main-tfkqwwrb.mjs} +3 -3
- package/dist/{main-bq8az9yr.mjs → main-x8w3s3rv.mjs} +1 -1
- package/dist/{main-3g2t8jtq.mjs → main-xg3r1ze3.mjs} +2 -2
- package/dist/{mcp-za7ymfdd.mjs → mcp-7jjntfwf.mjs} +11 -78
- package/dist/{relay-xqg264d4.mjs → relay-epeqzmcr.mjs} +35 -1104
- package/dist/{runtime-update-gteb0gp8.mjs → runtime-update-3925nwpw.mjs} +4 -4
- package/dist/{setup-zka6z53q.mjs → setup-ys0qf6by.mjs} +5 -5
- package/dist/{skill-text-kyjcembk.mjs → skill-text-rc6te209.mjs} +0 -75
- package/dist/{supervisor-w6hs0gbw.mjs → supervisor-yb615ygt.mjs} +3 -3
- package/dist/{update-pj25xbh4.mjs → update-wjkqfk5f.mjs} +3 -3
- package/dist/{version-1hb8s8jj.mjs → version-rh26jqa2.mjs} +1 -1
- package/package.json +1 -1
- package/skills/browse/SKILL.md +0 -75
- package/dist/main-vp3devjb.mjs +0 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./main-
|
|
1
|
+
import"./main-4t3a1fw9.mjs";
|
|
2
2
|
import {
|
|
3
3
|
cliCommand,
|
|
4
4
|
installCommand,
|
|
@@ -17,15 +17,15 @@ import {
|
|
|
17
17
|
installVersion,
|
|
18
18
|
pruneVersions,
|
|
19
19
|
switchVersion
|
|
20
|
-
} from "./main-
|
|
20
|
+
} from "./main-8ncff5jp.mjs";
|
|
21
21
|
import"./main-3gthmkzw.mjs";
|
|
22
22
|
import {
|
|
23
23
|
Service,
|
|
24
24
|
layerFetch,
|
|
25
25
|
restartRelay,
|
|
26
26
|
startManagedRelay
|
|
27
|
-
} from "./main-
|
|
28
|
-
import"./main-
|
|
27
|
+
} from "./main-8h1nwn45.mjs";
|
|
28
|
+
import"./main-x8w3s3rv.mjs";
|
|
29
29
|
|
|
30
30
|
// src/update/runtime-update.ts
|
|
31
31
|
import { Effect } from "effect";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
opencodeBrowserVersion2
|
|
3
|
-
} from "./main-
|
|
3
|
+
} from "./main-4t3a1fw9.mjs";
|
|
4
4
|
import {
|
|
5
5
|
dataRoot,
|
|
6
6
|
oldStoreMarker,
|
|
@@ -25,10 +25,10 @@ import {
|
|
|
25
25
|
installVersion,
|
|
26
26
|
pruneVersions,
|
|
27
27
|
switchVersion
|
|
28
|
-
} from "./main-
|
|
28
|
+
} from "./main-8ncff5jp.mjs";
|
|
29
29
|
import {
|
|
30
30
|
relayAuthorization
|
|
31
|
-
} from "./main-
|
|
31
|
+
} from "./main-x8w3s3rv.mjs";
|
|
32
32
|
import {
|
|
33
33
|
parseHostname,
|
|
34
34
|
readRelayConfig,
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
legacyPairingCode,
|
|
46
46
|
removeLegacyPairingCode,
|
|
47
47
|
syncDevExtension
|
|
48
|
-
} from "./main-
|
|
48
|
+
} from "./main-xg3r1ze3.mjs";
|
|
49
49
|
import {
|
|
50
50
|
unpackedExtensionId,
|
|
51
51
|
extensionProtocolSkew,
|
|
@@ -12081,7 +12081,7 @@ async function runSetup(command, args) {
|
|
|
12081
12081
|
if (command === "set")
|
|
12082
12082
|
return set(args);
|
|
12083
12083
|
if (command === "rollback") {
|
|
12084
|
-
const { runRollback } = await import("./runtime-update-
|
|
12084
|
+
const { runRollback } = await import("./runtime-update-3925nwpw.mjs");
|
|
12085
12085
|
return runRollback(args);
|
|
12086
12086
|
}
|
|
12087
12087
|
}
|
|
@@ -581,81 +581,6 @@ secret in a session without an allowlist adds a loud warning: set one first.
|
|
|
581
581
|
Once typed, the value is in the page, so don't read it back or copy it
|
|
582
582
|
elsewhere.
|
|
583
583
|
|
|
584
|
-
### Signing in with Deadbolt
|
|
585
|
-
|
|
586
|
-
When the user connected browse to Deadbolt (\`opencode-browser deadbolt
|
|
587
|
-
connect\`), you can sign in with the logins they granted to agents, without
|
|
588
|
-
seeing any value. \`secrets_list\` shows them for the session's allowed sites:
|
|
589
|
-
title, username, \`granted\`, which \`fields\` (username, password, totp) and
|
|
590
|
-
whether \`passkeys\` are allowed, plus the site's passkey accounts (\`username\`,
|
|
591
|
-
\`displayName\`). Only the user grants, in Deadbolt: \`deadbolt agents allow
|
|
592
|
-
<site>\` (everything for that site's logins: username, password, one-time code
|
|
593
|
-
and passkeys, unless narrowed with \`--login\`, \`--fields\`, \`--no-passkeys\`,
|
|
594
|
-
\`--expires\`) or
|
|
595
|
-
\`deadbolt agents allow --all\` (every login).
|
|
596
|
-
Never try to grant, pair or unlock yourself; Deadbolt refuses AI callers.
|
|
597
|
-
|
|
598
|
-
Prefer the whole sign-in in one call (the \`signin\` tool, or in execute):
|
|
599
|
-
|
|
600
|
-
\`\`\`js
|
|
601
|
-
await page.goto("https://github.com/login")
|
|
602
|
-
const result = await secrets.signIn() // or { site: "github.com", username: "me@example.com" }
|
|
603
|
-
// { status: "signed_in" | "needs_user" | "not_granted" | "failed", step, reason }
|
|
604
|
-
\`\`\`
|
|
605
|
-
|
|
606
|
-
It fills the username, submits, waits, fills the password, types an
|
|
607
|
-
authenticator (TOTP) code when the site asks for one (single field or split
|
|
608
|
-
boxes), follows "Use password instead", and follows Sign in with Google when
|
|
609
|
-
Deadbolt grants a Google login, all inside the relay. Then:
|
|
610
|
-
|
|
611
|
-
- \`signed_in\`: carry on.
|
|
612
|
-
- \`needs_user\`: a captcha, a code sent by SMS or email, a push approval, a
|
|
613
|
-
new-device or "verify it's you" check, or Deadbolt is locked. Call
|
|
614
|
-
\`handoff("Finish signing in, then click Continue")\` so the user does it.
|
|
615
|
-
Don't retry in a loop.
|
|
616
|
-
- \`needs_choice\`: several passkeys can sign in; \`choices\` lists their
|
|
617
|
-
\`username\` / \`displayName\`. Ask the user which one if it isn't obvious, then
|
|
618
|
-
call again with \`{ username }\`.
|
|
619
|
-
- \`not_granted\`: tell the user what to allow (the reason names the site and
|
|
620
|
-
login).
|
|
621
|
-
- \`failed\`: the reason says why (no form found, wrong password, the page didn't
|
|
622
|
-
move on). Don't loop.
|
|
623
|
-
|
|
624
|
-
It doesn't handle security questions, image or canvas keypads, closed shadow
|
|
625
|
-
roots, or sign-in providers other than Google; those return \`needs_user\` or
|
|
626
|
-
\`failed\`. When it stops after a fill it empties the password and code fields
|
|
627
|
-
first. For a form it misreads, type one value at a time: a username on its
|
|
628
|
-
own, a password or code only with \`{ submit: true }\`, which types it, submits
|
|
629
|
-
the form, waits for the page to move on and empties password and code fields
|
|
630
|
-
in that frame, all in the same call:
|
|
631
|
-
|
|
632
|
-
\`\`\`js
|
|
633
|
-
await secrets.type("#login", "deadbolt:github.com/me@example.com", { field: "username" })
|
|
634
|
-
await secrets.type("#password", "deadbolt:github.com/me@example.com", { submit: true }) // field defaults to "password"
|
|
635
|
-
\`\`\`
|
|
636
|
-
|
|
637
|
-
The same origin checks as stored secrets apply (the field's frame must be on
|
|
638
|
-
the login's site and in the session allowlist; Deadbolt checks again), and
|
|
639
|
-
values never appear in what you get back. Errors start with the code:
|
|
640
|
-
\`submit_required\`, \`domain_not_allowed\`, \`not_granted\`, \`locked\`, \`forbidden\`
|
|
641
|
-
(the user must reconnect), \`rate_limited\`, \`page_hooks\`. \`page_hooks\` means
|
|
642
|
-
this session's code set up request interception or listeners
|
|
643
|
-
(\`page.route\`, \`page.on("request")\`, \`waitForRequest\`...), init scripts,
|
|
644
|
-
exposed functions or a CDP session: Deadbolt passwords and codes aren't typed
|
|
645
|
-
then. Sign in first, in a fresh session (\`session_reset\`), and set those up
|
|
646
|
-
afterwards. Never try to read or capture a value that was typed: the user
|
|
647
|
-
grants logins on the understanding that you don't. Set a session allowlist
|
|
648
|
-
before signing in.
|
|
649
|
-
|
|
650
|
-
Passkeys: in tabs you opened, a site's passkey sign-in
|
|
651
|
-
(\`navigator.credentials.get\`) is answered by Deadbolt when the grant allows
|
|
652
|
-
passkeys. \`signIn({ username })\` picks that account's passkey; to choose one
|
|
653
|
-
before your own click on a "Sign in with a passkey" button, call
|
|
654
|
-
\`await secrets.usePasskey({ site: "example.com", username: "me@example.com" })\`
|
|
655
|
-
(it applies to the tab's next passkey request, once). Deadbolt never verifies the user, so sites that require that fall back to
|
|
656
|
-
other methods. Otherwise the request fails with NotAllowedError, as if the user
|
|
657
|
-
dismissed it. WebAuthn CDP methods are blocked.
|
|
658
|
-
|
|
659
584
|
For destructive UI work, use a two-phase **read, confirm, verify** flow:
|
|
660
585
|
|
|
661
586
|
1. Read candidates and return exact stable identifiers or row text.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import"./main-
|
|
1
|
+
import"./main-4t3a1fw9.mjs";
|
|
2
2
|
import {
|
|
3
3
|
versionEntry,
|
|
4
4
|
readCurrent,
|
|
5
5
|
npmRuntime
|
|
6
|
-
} from "./main-
|
|
6
|
+
} from "./main-8ncff5jp.mjs";
|
|
7
7
|
|
|
8
8
|
// src/mcp/supervisor.ts
|
|
9
9
|
import { spawn } from "node:child_process";
|
|
@@ -14,7 +14,7 @@ async function runBinaryMcp(args) {
|
|
|
14
14
|
const runtime = npmRuntime();
|
|
15
15
|
if (!runtime) {
|
|
16
16
|
process.env[directEnvironmentVariable] = "1";
|
|
17
|
-
const { runCli } = await import("./cli-
|
|
17
|
+
const { runCli } = await import("./cli-wgxfjgb3.mjs");
|
|
18
18
|
return runCli();
|
|
19
19
|
}
|
|
20
20
|
const { layout } = runtime;
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
updateNotice2,
|
|
5
5
|
createUpdateWatcher2,
|
|
6
6
|
runUpdateCommand2
|
|
7
|
-
} from "./main-
|
|
8
|
-
import"./main-
|
|
9
|
-
import"./main-
|
|
7
|
+
} from "./main-scyv26xb.mjs";
|
|
8
|
+
import"./main-8ncff5jp.mjs";
|
|
9
|
+
import"./main-4t3a1fw9.mjs";
|
|
10
10
|
import"./main-3gthmkzw.mjs";
|
|
11
11
|
export {
|
|
12
12
|
createUpdateWatcher2 as createUpdateWatcher,
|
package/package.json
CHANGED
package/skills/browse/SKILL.md
CHANGED
|
@@ -580,81 +580,6 @@ secret in a session without an allowlist adds a loud warning: set one first.
|
|
|
580
580
|
Once typed, the value is in the page, so don't read it back or copy it
|
|
581
581
|
elsewhere.
|
|
582
582
|
|
|
583
|
-
### Signing in with Deadbolt
|
|
584
|
-
|
|
585
|
-
When the user connected browse to Deadbolt (`opencode-browser deadbolt
|
|
586
|
-
connect`), you can sign in with the logins they granted to agents, without
|
|
587
|
-
seeing any value. `secrets_list` shows them for the session's allowed sites:
|
|
588
|
-
title, username, `granted`, which `fields` (username, password, totp) and
|
|
589
|
-
whether `passkeys` are allowed, plus the site's passkey accounts (`username`,
|
|
590
|
-
`displayName`). Only the user grants, in Deadbolt: `deadbolt agents allow
|
|
591
|
-
<site>` (everything for that site's logins: username, password, one-time code
|
|
592
|
-
and passkeys, unless narrowed with `--login`, `--fields`, `--no-passkeys`,
|
|
593
|
-
`--expires`) or
|
|
594
|
-
`deadbolt agents allow --all` (every login).
|
|
595
|
-
Never try to grant, pair or unlock yourself; Deadbolt refuses AI callers.
|
|
596
|
-
|
|
597
|
-
Prefer the whole sign-in in one call (the `signin` tool, or in execute):
|
|
598
|
-
|
|
599
|
-
```js
|
|
600
|
-
await page.goto("https://github.com/login")
|
|
601
|
-
const result = await secrets.signIn() // or { site: "github.com", username: "me@example.com" }
|
|
602
|
-
// { status: "signed_in" | "needs_user" | "not_granted" | "failed", step, reason }
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
It fills the username, submits, waits, fills the password, types an
|
|
606
|
-
authenticator (TOTP) code when the site asks for one (single field or split
|
|
607
|
-
boxes), follows "Use password instead", and follows Sign in with Google when
|
|
608
|
-
Deadbolt grants a Google login, all inside the relay. Then:
|
|
609
|
-
|
|
610
|
-
- `signed_in`: carry on.
|
|
611
|
-
- `needs_user`: a captcha, a code sent by SMS or email, a push approval, a
|
|
612
|
-
new-device or "verify it's you" check, or Deadbolt is locked. Call
|
|
613
|
-
`handoff("Finish signing in, then click Continue")` so the user does it.
|
|
614
|
-
Don't retry in a loop.
|
|
615
|
-
- `needs_choice`: several passkeys can sign in; `choices` lists their
|
|
616
|
-
`username` / `displayName`. Ask the user which one if it isn't obvious, then
|
|
617
|
-
call again with `{ username }`.
|
|
618
|
-
- `not_granted`: tell the user what to allow (the reason names the site and
|
|
619
|
-
login).
|
|
620
|
-
- `failed`: the reason says why (no form found, wrong password, the page didn't
|
|
621
|
-
move on). Don't loop.
|
|
622
|
-
|
|
623
|
-
It doesn't handle security questions, image or canvas keypads, closed shadow
|
|
624
|
-
roots, or sign-in providers other than Google; those return `needs_user` or
|
|
625
|
-
`failed`. When it stops after a fill it empties the password and code fields
|
|
626
|
-
first. For a form it misreads, type one value at a time: a username on its
|
|
627
|
-
own, a password or code only with `{ submit: true }`, which types it, submits
|
|
628
|
-
the form, waits for the page to move on and empties password and code fields
|
|
629
|
-
in that frame, all in the same call:
|
|
630
|
-
|
|
631
|
-
```js
|
|
632
|
-
await secrets.type("#login", "deadbolt:github.com/me@example.com", { field: "username" })
|
|
633
|
-
await secrets.type("#password", "deadbolt:github.com/me@example.com", { submit: true }) // field defaults to "password"
|
|
634
|
-
```
|
|
635
|
-
|
|
636
|
-
The same origin checks as stored secrets apply (the field's frame must be on
|
|
637
|
-
the login's site and in the session allowlist; Deadbolt checks again), and
|
|
638
|
-
values never appear in what you get back. Errors start with the code:
|
|
639
|
-
`submit_required`, `domain_not_allowed`, `not_granted`, `locked`, `forbidden`
|
|
640
|
-
(the user must reconnect), `rate_limited`, `page_hooks`. `page_hooks` means
|
|
641
|
-
this session's code set up request interception or listeners
|
|
642
|
-
(`page.route`, `page.on("request")`, `waitForRequest`...), init scripts,
|
|
643
|
-
exposed functions or a CDP session: Deadbolt passwords and codes aren't typed
|
|
644
|
-
then. Sign in first, in a fresh session (`session_reset`), and set those up
|
|
645
|
-
afterwards. Never try to read or capture a value that was typed: the user
|
|
646
|
-
grants logins on the understanding that you don't. Set a session allowlist
|
|
647
|
-
before signing in.
|
|
648
|
-
|
|
649
|
-
Passkeys: in tabs you opened, a site's passkey sign-in
|
|
650
|
-
(`navigator.credentials.get`) is answered by Deadbolt when the grant allows
|
|
651
|
-
passkeys. `signIn({ username })` picks that account's passkey; to choose one
|
|
652
|
-
before your own click on a "Sign in with a passkey" button, call
|
|
653
|
-
`await secrets.usePasskey({ site: "example.com", username: "me@example.com" })`
|
|
654
|
-
(it applies to the tab's next passkey request, once). Deadbolt never verifies the user, so sites that require that fall back to
|
|
655
|
-
other methods. Otherwise the request fails with NotAllowedError, as if the user
|
|
656
|
-
dismissed it. WebAuthn CDP methods are blocked.
|
|
657
|
-
|
|
658
583
|
For destructive UI work, use a two-phase **read, confirm, verify** flow:
|
|
659
584
|
|
|
660
585
|
1. Read candidates and return exact stable identifiers or row text.
|
package/dist/main-vp3devjb.mjs
DELETED