@explyt/ai-agent 0.1.4 → 0.1.5
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/README.md +3 -3
- package/THIRD-PARTY-NOTICES.md +5 -3
- package/agent-docs/README.md +4 -0
- package/agent-docs/web-search.md +157 -0
- package/dist/cli/engine.js +167 -2
- package/dist/cli/index.js +11 -0
- package/dist/extensions/ask-user-question.js +1 -1
- package/dist/extensions/bash.js +1 -1
- package/dist/extensions/custom-provider.js +1 -1
- package/dist/extensions/hello.js +1 -1
- package/dist/extensions/identity.js +1 -1
- package/dist/extensions/mcp.js +1 -1
- package/dist/extensions/misc-hacks.js +1 -1
- package/dist/extensions/policy.js +1 -1
- package/dist/extensions/rules.js +1 -1
- package/dist/extensions/session-title.js +1 -1
- package/dist/extensions/skills.js +1 -1
- package/dist/extensions/tui.js +1 -1
- package/dist/extensions/update-notice.js +1 -1
- package/dist/extensions/web-access.js +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -17,8 +17,8 @@ explyt update # install the newer latest, then restart open sessi
|
|
|
17
17
|
For a one-off pinned run:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
npx -y "@explyt/ai-agent@0.1.
|
|
21
|
-
npx -y "@explyt/ai-agent@0.1.
|
|
20
|
+
npx -y "@explyt/ai-agent@0.1.5" # start the terminal UI
|
|
21
|
+
npx -y "@explyt/ai-agent@0.1.5" login # store a provider credential, once
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
The agent runs with exactly the extensions this build ships with and ignores any
|
|
@@ -28,4 +28,4 @@ you get.
|
|
|
28
28
|
IDE (ACP) integration is not part of this package: it is provided by the Explyt
|
|
29
29
|
managed backend, which the Neo plugin downloads and manages.
|
|
30
30
|
|
|
31
|
-
Run `npx -y @explyt/ai-agent@0.1.
|
|
31
|
+
Run `npx -y @explyt/ai-agent@0.1.5 --help` for the available options.
|
package/THIRD-PARTY-NOTICES.md
CHANGED
|
@@ -64,7 +64,7 @@ License or other written license agreements with the Company.
|
|
|
64
64
|
### 3. pi-coding-agent and its ecosystem packages
|
|
65
65
|
|
|
66
66
|
**Original Work:**
|
|
67
|
-
- Name: `@earendil-works/pi-coding-agent`, `pi-mcp-adapter`, `pi-subagents`
|
|
67
|
+
- Name: `@earendil-works/pi-coding-agent`, `pi-mcp-adapter`, `pi-subagents`, `pi-web-access`
|
|
68
68
|
- Available at: https://www.npmjs.com/package/@earendil-works/pi-coding-agent
|
|
69
69
|
- Licensed under the MIT License
|
|
70
70
|
|
|
@@ -78,7 +78,7 @@ License or other written license agreements with the Company.
|
|
|
78
78
|
at it through its own `PI_PACKAGE_DIR` override, so the engine presents itself under the
|
|
79
79
|
Explyt name. The original copyright and license notice above apply to the engine
|
|
80
80
|
unchanged.
|
|
81
|
-
- `pi-mcp-adapter` and `pi-
|
|
81
|
+
- `pi-mcp-adapter`, `pi-subagents` and `pi-web-access` are runtime dependencies. The public npm package
|
|
82
82
|
declares them with exact versions and does not contain them: npm installs the
|
|
83
83
|
unmodified registry packages beside it. The managed backend archive redistributes them
|
|
84
84
|
as bundled dependencies. Text they contribute to the model (tool descriptions and
|
|
@@ -192,7 +192,8 @@ The MIT License text below applies to this package with the copyright notice abo
|
|
|
192
192
|
|
|
193
193
|
### MIT License
|
|
194
194
|
|
|
195
|
-
Applies to: pi-acp, `@earendil-works/pi-coding-agent`, `pi-mcp-adapter`, `pi-subagents`,
|
|
195
|
+
Applies to: pi-acp, `@earendil-works/pi-coding-agent`, `pi-mcp-adapter`, `pi-subagents`, `pi-web-access`
|
|
196
|
+
(Copyright (c) 2025 Nico Bailon),
|
|
196
197
|
`@juicesharp/rpiv-ask-user-question`.
|
|
197
198
|
|
|
198
199
|
```
|
|
@@ -516,6 +517,7 @@ Consult each package for its complete license text.
|
|
|
516
517
|
- open@10.2.0: license metadata = MIT (installed by npm beside this package)
|
|
517
518
|
- pi-mcp-adapter@2.31.0: license metadata = MIT (installed by npm beside this package)
|
|
518
519
|
- pi-subagents@0.62.0: license metadata = MIT (installed by npm beside this package)
|
|
520
|
+
- pi-web-access@0.31.0: license metadata = MIT (installed by npm beside this package)
|
|
519
521
|
- recheck@4.5.0: license metadata = MIT (installed by npm beside this package)
|
|
520
522
|
- semver@7.8.5: license metadata = ISC (installed by npm beside this package)
|
|
521
523
|
- smol-toml@1.9.0: license metadata = BSD-3-Clause (installed by npm beside this package)
|
package/agent-docs/README.md
CHANGED
|
@@ -12,6 +12,7 @@ it. Read the whole file before editing anything it describes.
|
|
|
12
12
|
| `rules.md` | persistent instructions: where rule files live, their frontmatter, how to disable one |
|
|
13
13
|
| `skills.md` | Skills: where they are found, the `SKILL.md` frontmatter, how to disable one |
|
|
14
14
|
| `mcp.md` | MCP servers: the two `mcp.json` files, the entry shape, disabling a server or a tool |
|
|
15
|
+
| `web-search.md` | web search and page fetch: `web-search.json`, where requests go, keys, switching search off, failures |
|
|
15
16
|
|
|
16
17
|
## User configuration lives under `.explyt/`
|
|
17
18
|
|
|
@@ -33,6 +34,9 @@ all projects, and in the project directory for one project:
|
|
|
33
34
|
Create these files and directories when they do not exist; nothing has to be registered anywhere
|
|
34
35
|
for them to take effect.
|
|
35
36
|
|
|
37
|
+
The one exception is web access: it is configured in `web-search.json` in the agent's own directory,
|
|
38
|
+
not under `.explyt/`. `web-search.md` says where that directory is and what goes into the file.
|
|
39
|
+
|
|
36
40
|
## Updates of the agent itself
|
|
37
41
|
|
|
38
42
|
The terminal UI shows one line when a newer version is published; nothing updates on its own.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Web search and page fetch
|
|
2
|
+
|
|
3
|
+
The agent has four web tools:
|
|
4
|
+
|
|
5
|
+
| Tool | What it does |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `web_search` | searches the web and returns results with links |
|
|
8
|
+
| `fetch_content` | fetches a URL and returns it as Markdown; clones a GitHub repository |
|
|
9
|
+
| `get_search_content` | pages through a stored search or fetch result |
|
|
10
|
+
| `source_check` | searches several queries for a claim and returns quotes from sources |
|
|
11
|
+
|
|
12
|
+
## Where web access is configured
|
|
13
|
+
|
|
14
|
+
Web access is configured in **one file only**:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
<agent dir>/web-search.json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`<agent dir>` is the agent's own directory. It is `$PI_CODING_AGENT_DIR` when that variable is set.
|
|
21
|
+
Otherwise it is `$XDG_DATA_HOME/explyt-ai-agent/agent`, or `~/.local/share/explyt-ai-agent/agent`
|
|
22
|
+
when `XDG_DATA_HOME` is unset or not absolute. The layout is the same on Linux, macOS and Windows
|
|
23
|
+
(on Windows `~` is the user's home directory, for example `C:\Users\<name>\.local\share\explyt-ai-agent\agent`).
|
|
24
|
+
|
|
25
|
+
This file is the one user-editable file outside `.explyt/`. Do not put web settings into
|
|
26
|
+
`.explyt/settings.json`: nothing reads them there.
|
|
27
|
+
|
|
28
|
+
**A change takes effect in the next session** — a new IDE chat or a restarted terminal session.
|
|
29
|
+
The running session keeps the values it started with.
|
|
30
|
+
|
|
31
|
+
## What the product seeds
|
|
32
|
+
|
|
33
|
+
Every time the product starts, it adds these keys to the file when they are absent:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"provider": ["exa", "duckduckgo"],
|
|
38
|
+
"workflow": "none",
|
|
39
|
+
"autoOpenBrowser": false,
|
|
40
|
+
"fetch": { "allowedModes": ["readable", "raw"] },
|
|
41
|
+
"githubClone": { "clonePath": "<os temp dir>/explyt-github-repos" },
|
|
42
|
+
"commands": {
|
|
43
|
+
"websearch": { "enabled": false },
|
|
44
|
+
"curator": { "enabled": false },
|
|
45
|
+
"search": { "enabled": false },
|
|
46
|
+
"google-account": { "enabled": false }
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- A value already in the file is never overwritten. The one exception: a `githubClone.clonePath`
|
|
52
|
+
whose last path segment is `explyt-github-repos` is kept pointed at the current temp directory.
|
|
53
|
+
- **A seeded key the user deletes comes back on the next start.** To change a seeded value, set a
|
|
54
|
+
different value; do not delete the key.
|
|
55
|
+
- `provider` is not added when the file already has `provider`, `searchProvider` or `searchRouting`.
|
|
56
|
+
- `workflow` is ignored: every search runs without the browser-based curator and without a
|
|
57
|
+
generated summary, whatever the file says.
|
|
58
|
+
- The page-answer mode of `fetch_content` (`answer`) is not available; the tool offers `readable`
|
|
59
|
+
and `raw` only.
|
|
60
|
+
|
|
61
|
+
## Where the requests go
|
|
62
|
+
|
|
63
|
+
**Search.** By default **every search query is sent to both providers at once**, and the results of
|
|
64
|
+
whichever answered are merged:
|
|
65
|
+
|
|
66
|
+
- **Exa** — Exa's anonymous MCP endpoint (`mcp.exa.ai`). No key needed. Exa limits anonymous
|
|
67
|
+
callers per IP address, by default about 50 tool calls a day; everyone behind the same office
|
|
68
|
+
NAT shares that limit. Some networks are blocked by Exa entirely.
|
|
69
|
+
- **DuckDuckGo** — the agent reads DuckDuckGo's HTML results page (`html.duckduckgo.com`) directly,
|
|
70
|
+
without an API. No key needed; the page can change or answer with a challenge.
|
|
71
|
+
|
|
72
|
+
Search queries leave the user's machine and reach these services. Tell the user this when they ask
|
|
73
|
+
about privacy; the product shows no other notice.
|
|
74
|
+
|
|
75
|
+
**Fetch.** `fetch_content` requests the URL **directly from the user's machine** and converts the
|
|
76
|
+
page to Markdown. No third-party fetch service is used unless the user configures one.
|
|
77
|
+
|
|
78
|
+
**GitHub.** For a repository URL, `fetch_content` makes a shallow clone under
|
|
79
|
+
`<os temp dir>/explyt-github-repos` and gives you the local path. It clones with the user's `gh`
|
|
80
|
+
when `gh` is installed, otherwise with `git` over HTTPS. When the clone fails you get the
|
|
81
|
+
repository's tree and README over the GitHub API instead.
|
|
82
|
+
|
|
83
|
+
## Enabling or improving search
|
|
84
|
+
|
|
85
|
+
A key alone does **not** change the providers: `provider` is seeded as `["exa", "duckduckgo"]`, so
|
|
86
|
+
**`provider` must be changed too** in every option below. Merge the JSON into the existing file;
|
|
87
|
+
keep the other keys.
|
|
88
|
+
|
|
89
|
+
**Exa key** — unthrottled Exa (key from exa.ai):
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{ "exaApiKey": "<key>", "provider": ["exa", "duckduckgo"] }
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The pair can stay; with a key Exa is no longer limited per IP. Use `"provider": "exa"` for Exa only.
|
|
96
|
+
|
|
97
|
+
**Brave Search key** (key from api.search.brave.com):
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{ "braveApiKey": "<key>", "provider": ["brave", "duckduckgo"] }
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Tavily key** (key from tavily.com):
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{ "tavilyApiKey": "<key>", "provider": ["tavily", "duckduckgo"] }
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Self-hosted SearXNG** (the instance must have the JSON output format enabled):
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{ "searxngBaseUrl": "https://search.example.com", "provider": "searxng" }
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The environment variable `SEARXNG_BASE_URL`, when set, takes precedence over `searxngBaseUrl`.
|
|
116
|
+
|
|
117
|
+
A key may also come from the environment the agent starts with — `EXA_API_KEY`, `BRAVE_API_KEY`,
|
|
118
|
+
`TAVILY_API_KEY` — but `provider` still has to be set in the file.
|
|
119
|
+
|
|
120
|
+
## Switching search off
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{ "webSearch": { "enabled": false } }
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
This removes `web_search` and `source_check`. `fetch_content` and `get_search_content` stay.
|
|
127
|
+
|
|
128
|
+
## When search fails
|
|
129
|
+
|
|
130
|
+
When every query of a search call fails, the tool result says so and names each provider's error.
|
|
131
|
+
Tell the user that web search did not work and why, and offer the matching options below.
|
|
132
|
+
|
|
133
|
+
| What the error shows | What it means | What to do |
|
|
134
|
+
|---|---|---|
|
|
135
|
+
| network errors (`fetch failed`, `ENOTFOUND`, `ECONNREFUSED`, timeouts) from every provider | the machine is offline, or the network requires a proxy | check the connection; behind a corporate proxy set `"proxy": "http://host:port"` in the file |
|
|
136
|
+
| `Exa MCP error 403` (often an HTML "you have been blocked" page) | Exa blocks this network | use DuckDuckGo alone (`"provider": "duckduckgo"`), or add a Brave or Tavily key, or a SearXNG instance |
|
|
137
|
+
| `Exa MCP rate limit reached (429)` | the anonymous daily limit for this IP is spent | wait until tomorrow, or add `exaApiKey`, or another provider |
|
|
138
|
+
| DuckDuckGo error or no results | DuckDuckGo changed its page or answered with a challenge | retry later, or add a Brave, Tavily or Exa key, or SearXNG |
|
|
139
|
+
| an error parsing `web-search.json`, or the seeded defaults missing | the file is not valid JSON | open the file and fix it; the product does not repair it |
|
|
140
|
+
|
|
141
|
+
## Known limitation: `gh` over SSH
|
|
142
|
+
|
|
143
|
+
When `gh` is installed, repositories are cloned with `gh repo clone`, which uses the protocol set in
|
|
144
|
+
the user's `gh` configuration. If that protocol is `ssh` and the user has no working SSH key, every
|
|
145
|
+
clone fails and you get the API view without a local copy. Check with:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
gh config get git_protocol -h github.com
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Workaround — switch `gh` to HTTPS for github.com:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
gh config set git_protocol https -h github.com
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
This changes the user's `gh` configuration for all tools; ask the user before running it.
|
package/dist/cli/engine.js
CHANGED
|
@@ -11,14 +11,16 @@ import {
|
|
|
11
11
|
mkdirSync,
|
|
12
12
|
readFileSync,
|
|
13
13
|
readlinkSync,
|
|
14
|
+
realpathSync,
|
|
14
15
|
renameSync,
|
|
15
16
|
rmSync,
|
|
16
17
|
statSync,
|
|
18
|
+
chmodSync,
|
|
17
19
|
symlinkSync,
|
|
18
20
|
writeFileSync,
|
|
19
21
|
} from "node:fs";
|
|
20
22
|
import { basename, delimiter, dirname, isAbsolute, join, resolve, sep } from "node:path";
|
|
21
|
-
import { homedir, platform } from "node:os";
|
|
23
|
+
import { homedir, platform, tmpdir } from "node:os";
|
|
22
24
|
import { fileURLToPath } from "node:url";
|
|
23
25
|
import { randomBytes } from "node:crypto";
|
|
24
26
|
|
|
@@ -439,7 +441,7 @@ export function ensureAgentSettings(agentDir, {
|
|
|
439
441
|
if (missing.length === 0) return { status: "unchanged" };
|
|
440
442
|
|
|
441
443
|
const seeded = { ...current, ...Object.fromEntries(missing) };
|
|
442
|
-
const tempPath =
|
|
444
|
+
const tempPath = tempPathFor(settingsPath);
|
|
443
445
|
try {
|
|
444
446
|
mkdir(agentDir, { recursive: true });
|
|
445
447
|
} catch (error) {
|
|
@@ -450,6 +452,169 @@ export function ensureAgentSettings(agentDir, {
|
|
|
450
452
|
return { status: "seeded" };
|
|
451
453
|
}
|
|
452
454
|
|
|
455
|
+
/** File name of the bundled `pi-web-access` package's configuration, in the agent directory. */
|
|
456
|
+
const WEB_SEARCH_CONFIG_FILE = "web-search.json";
|
|
457
|
+
|
|
458
|
+
/** Last path segment of the directory GitHub repositories are cloned into (spec 015, RQ-3). */
|
|
459
|
+
const GITHUB_CLONE_DIR_NAME = "explyt-github-repos";
|
|
460
|
+
|
|
461
|
+
const isPlainObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
462
|
+
|
|
463
|
+
/** The product defaults for `web-search.json` (spec 015, RQ-14). A fresh object per call. */
|
|
464
|
+
export function webSearchSeed(cloneDir) {
|
|
465
|
+
return {
|
|
466
|
+
provider: ["exa", "duckduckgo"],
|
|
467
|
+
workflow: "none",
|
|
468
|
+
autoOpenBrowser: false,
|
|
469
|
+
fetch: { allowedModes: ["readable", "raw"] },
|
|
470
|
+
githubClone: { clonePath: cloneDir },
|
|
471
|
+
commands: {
|
|
472
|
+
websearch: { enabled: false },
|
|
473
|
+
curator: { enabled: false },
|
|
474
|
+
search: { enabled: false },
|
|
475
|
+
"google-account": { enabled: false },
|
|
476
|
+
},
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/** Adds `value` at `path` when absent; never replaces a present key or descends into a non-object parent. */
|
|
481
|
+
function addAbsent(target, path, value) {
|
|
482
|
+
let node = target;
|
|
483
|
+
for (const key of path.slice(0, -1)) {
|
|
484
|
+
if (!Object.hasOwn(node, key)) node[key] = {};
|
|
485
|
+
else if (!isPlainObject(node[key])) return false;
|
|
486
|
+
node = node[key];
|
|
487
|
+
}
|
|
488
|
+
const last = path[path.length - 1];
|
|
489
|
+
if (Object.hasOwn(node, last)) return false;
|
|
490
|
+
node[last] = value;
|
|
491
|
+
return true;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/** True for a string whose last path segment, trailing `/` or `\` removed, is GITHUB_CLONE_DIR_NAME. */
|
|
495
|
+
function isProductCloneDir(value) {
|
|
496
|
+
if (typeof value !== "string") return false;
|
|
497
|
+
const segments = value.replace(/[\\/]+$/, "").split(/[\\/]/);
|
|
498
|
+
return segments[segments.length - 1] === GITHUB_CLONE_DIR_NAME;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* The RQ-14 merge rule applied to a parsed `web-search.json` object; the input is not mutated.
|
|
503
|
+
*
|
|
504
|
+
* @returns {{ config: object, changed: boolean }}
|
|
505
|
+
*/
|
|
506
|
+
export function mergeWebSearchConfig(current, cloneDir) {
|
|
507
|
+
const config = structuredClone(current);
|
|
508
|
+
const seed = webSearchSeed(cloneDir);
|
|
509
|
+
let changed = false;
|
|
510
|
+
const add = (path, value) => { if (addAbsent(config, path, value)) changed = true; };
|
|
511
|
+
|
|
512
|
+
if (!["provider", "searchProvider", "searchRouting"].some((key) => Object.hasOwn(config, key))) {
|
|
513
|
+
add(["provider"], seed.provider);
|
|
514
|
+
}
|
|
515
|
+
add(["workflow"], seed.workflow);
|
|
516
|
+
add(["autoOpenBrowser"], seed.autoOpenBrowser);
|
|
517
|
+
const fetch = config.fetch;
|
|
518
|
+
if (!isPlainObject(fetch) || !Object.hasOwn(fetch, "defaultMode") || ["readable", "raw"].includes(fetch.defaultMode)) {
|
|
519
|
+
add(["fetch", "allowedModes"], seed.fetch.allowedModes);
|
|
520
|
+
}
|
|
521
|
+
const clone = config.githubClone;
|
|
522
|
+
if (isPlainObject(clone) && Object.hasOwn(clone, "clonePath")) {
|
|
523
|
+
if (isProductCloneDir(clone.clonePath) && clone.clonePath !== cloneDir) {
|
|
524
|
+
clone.clonePath = cloneDir;
|
|
525
|
+
changed = true;
|
|
526
|
+
}
|
|
527
|
+
} else {
|
|
528
|
+
add(["githubClone", "clonePath"], cloneDir);
|
|
529
|
+
}
|
|
530
|
+
for (const [name, entry] of Object.entries(seed.commands)) add(["commands", name, "enabled"], entry.enabled);
|
|
531
|
+
return { config, changed };
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* Seeds `<agentDir>/web-search.json` before an engine starts (spec 015, RQ-13, RQ-14).
|
|
536
|
+
* The package fixes its configuration path when it loads and caches most of the file
|
|
537
|
+
* for the process, so this must run before the engine does.
|
|
538
|
+
*
|
|
539
|
+
* Never throws. A file that is not a JSON object is left byte-identical; an unwritable
|
|
540
|
+
* directory leaves no partial file. Both answer `failed` with a detail the caller
|
|
541
|
+
* reports once as a warning before starting the engine anyway. Nothing to add → no
|
|
542
|
+
* rewrite. A change goes through temp (unique name) + rename, so two starts seeding at
|
|
543
|
+
* once each rename a complete file computed from the same input: one seeding's result.
|
|
544
|
+
*
|
|
545
|
+
* @param {string} agentDir the engine configuration directory
|
|
546
|
+
* @returns {{ status: "unchanged" | "seeded" | "failed", detail?: string }}
|
|
547
|
+
*/
|
|
548
|
+
export function ensureWebSearchConfig(agentDir, {
|
|
549
|
+
read = readFileSync,
|
|
550
|
+
write = writeFileSync,
|
|
551
|
+
rename = renameSync,
|
|
552
|
+
remove = rmSync,
|
|
553
|
+
mkdir = mkdirSync,
|
|
554
|
+
stat = statSync,
|
|
555
|
+
chmod = chmodSync,
|
|
556
|
+
realpath = realpathSync,
|
|
557
|
+
tempDir = tmpdir(),
|
|
558
|
+
} = {}) {
|
|
559
|
+
const linkPath = join(agentDir, WEB_SEARCH_CONFIG_FILE);
|
|
560
|
+
// A symlinked file is updated where it points, so the link survives the rename.
|
|
561
|
+
let configPath = linkPath;
|
|
562
|
+
try { configPath = realpath(linkPath); } catch { /* absent: written where it is looked up */ }
|
|
563
|
+
const cloneDir = join(tempDir, GITHUB_CLONE_DIR_NAME);
|
|
564
|
+
let text = null;
|
|
565
|
+
try {
|
|
566
|
+
text = read(configPath, "utf8");
|
|
567
|
+
} catch (error) {
|
|
568
|
+
if (error.code !== "ENOENT") return { status: "failed", detail: `cannot read ${configPath}: ${error.message}` };
|
|
569
|
+
}
|
|
570
|
+
let current = {};
|
|
571
|
+
if (text !== null) {
|
|
572
|
+
try {
|
|
573
|
+
current = JSON.parse(text);
|
|
574
|
+
} catch {
|
|
575
|
+
// Not error.message: JSON.parse quotes the file, which may hold an API key.
|
|
576
|
+
return { status: "failed", detail: `${linkPath} is not valid JSON, left unchanged` };
|
|
577
|
+
}
|
|
578
|
+
if (!isPlainObject(current)) return { status: "failed", detail: `${linkPath} is not a JSON object, left unchanged` };
|
|
579
|
+
}
|
|
580
|
+
const { config, changed } = mergeWebSearchConfig(current, cloneDir);
|
|
581
|
+
if (text !== null && !changed) return { status: "unchanged" };
|
|
582
|
+
try {
|
|
583
|
+
// 0700 as the engine's own auth storage creates it: the file may hold API keys.
|
|
584
|
+
mkdir(dirname(configPath), { recursive: true, mode: 0o700 });
|
|
585
|
+
} catch (error) {
|
|
586
|
+
return { status: "failed", detail: `cannot create ${dirname(configPath)}: ${error.message}` };
|
|
587
|
+
}
|
|
588
|
+
// A rename carries the temp file's mode, so an existing file's mode is kept explicitly.
|
|
589
|
+
let mode = 0o600;
|
|
590
|
+
if (text !== null) {
|
|
591
|
+
try { mode = stat(configPath).mode & 0o777; } catch { /* keep 0600 */ }
|
|
592
|
+
}
|
|
593
|
+
const tempPath = tempPathFor(configPath);
|
|
594
|
+
const written = writeAtomically(configPath, tempPath, `${JSON.stringify(config, null, 2)}\n`, {
|
|
595
|
+
write: (path, data) => { write(path, data, { mode }); chmod(path, mode); },
|
|
596
|
+
rename,
|
|
597
|
+
remove,
|
|
598
|
+
});
|
|
599
|
+
if (written !== null) return { status: "failed", detail: `cannot write ${linkPath}: ${written.message}` };
|
|
600
|
+
return { status: "seeded" };
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/**
|
|
604
|
+
* Seeds `web-search.json` and reports a failure once through `warn`; the engine starts
|
|
605
|
+
* either way (RQ-13). Every product start path calls this before its engine.
|
|
606
|
+
*/
|
|
607
|
+
export function seedWebSearchConfig(agentDir, warn, options) {
|
|
608
|
+
const result = ensureWebSearchConfig(agentDir, options);
|
|
609
|
+
if (result.status === "failed") warn(`warning: web access settings not seeded: ${result.detail}`);
|
|
610
|
+
return result;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/** A unique temp name beside `path`: two processes writing at once never share one. */
|
|
614
|
+
function tempPathFor(path) {
|
|
615
|
+
return join(dirname(path), `.${basename(path)}.${process.pid}.${randomBytes(6).toString("hex")}.tmp`);
|
|
616
|
+
}
|
|
617
|
+
|
|
453
618
|
/**
|
|
454
619
|
* Builds (or refreshes) the directory the engine is told is its own package.
|
|
455
620
|
*
|
package/dist/cli/index.js
CHANGED
|
@@ -44,6 +44,7 @@ import {
|
|
|
44
44
|
engineEntrypointFrom,
|
|
45
45
|
engineShimDir,
|
|
46
46
|
ensureAgentSettings,
|
|
47
|
+
seedWebSearchConfig,
|
|
47
48
|
ensureEngineShim,
|
|
48
49
|
findEnginePackageDir,
|
|
49
50
|
findEngineShimDir,
|
|
@@ -192,6 +193,10 @@ if (wantsLogout) {
|
|
|
192
193
|
// difference is only where keystrokes come from: `login` may be launched by another
|
|
193
194
|
// program with a piped stdin, so the controlling terminal is consulted before
|
|
194
195
|
// giving up; the TUI is only ever started by a human.
|
|
196
|
+
function warnOnStderr(message) {
|
|
197
|
+
process.stderr.write(`explyt-ai-agent: ${message}\n`);
|
|
198
|
+
}
|
|
199
|
+
|
|
195
200
|
if (wantsTui || wantsLogin) {
|
|
196
201
|
const stdinFd = interactiveStdin({ isTTY: process.stdin.isTTY, openTty: () => openSync("/dev/tty", "r") });
|
|
197
202
|
if (stdinFd === null) {
|
|
@@ -211,6 +216,8 @@ if (wantsTui || wantsLogin) {
|
|
|
211
216
|
if (settings.status === "failed") {
|
|
212
217
|
process.stderr.write(`explyt: engine settings not seeded: ${settings.detail}\n`);
|
|
213
218
|
}
|
|
219
|
+
// The web tools' configuration (spec 015, RQ-14): before the engine, which fixes its path on load.
|
|
220
|
+
seedWebSearchConfig(env[AGENT_DIR_ENV], warnOnStderr);
|
|
214
221
|
// `login` is ephemeral (NO_SESSION_FLAG); the TUI keeps its sessions. A login that
|
|
215
222
|
// asks for a stored session is refused here, before anything is spawned: the engine
|
|
216
223
|
// would accept the flag and silently do nothing with it.
|
|
@@ -277,6 +284,10 @@ if (!engine.shimDir) delete process.env[PACKAGE_DIR_ENV];
|
|
|
277
284
|
delete process.env[UPDATE_ENV];
|
|
278
285
|
Object.assign(process.env, engineEnv(process.env, undefined, { shimDir: engine.shimDir }));
|
|
279
286
|
|
|
287
|
+
// Seed the web tools' configuration before the adapter starts (spec 015, RQ-14): every
|
|
288
|
+
// engine it spawns fixes the file's path on load and reads it once.
|
|
289
|
+
seedWebSearchConfig(process.env[AGENT_DIR_ENV], warnOnStderr);
|
|
290
|
+
|
|
280
291
|
// The adapter self-starts on import: loading the module builds the ACP connection
|
|
281
292
|
// and resumes stdin. So it is imported for its side effect, never called as an API.
|
|
282
293
|
// Strip our own subcommand first — the adapter parses argv itself and would reject
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const a3=b;(function(Q,R){const a2=b,S=Q();while(!![]){try{const T=-parseInt(a2(0x105))/0x1*(-parseInt(a2(0xdf))/0x2)+-parseInt(a2(0xfa))/0x3+parseInt(a2(0xd7))/0x4*(parseInt(a2(0xf2))/0x5)+-parseInt(a2(0xbc))/0x6*(-parseInt(a2(0xed))/0x7)+-parseInt(a2(0x6c))/0x8*(parseInt(a2(0x99))/0x9)+-parseInt(a2(0xe0))/0xa*(parseInt(a2(0xfd))/0xb)+-parseInt(a2(0x76))/0xc;if(T===R)break;else S['push'](S['shift']());}catch(U){S['push'](S['shift']());}}}(a,0x46cfc));import{existsSync}from'node:fs';import{fileURLToPath,pathToFileURL}from'node:url';var c=a3(0xaf),d=a3(0xd1),e={'where':a3(0x9f),'from':a3(0x104),'to':a3(0xdd)},f={'where':a3(0x102),'from':a3(0x9b),'to':a3(0xc8)},g={'where':a3(0x103),'from':a3(0x8e),'to':a3(0xb9)},h=[{'where':a3(0xf8),'from':a3(0x74),'to':a3(0x66)},{'where':a3(0x94),'from':a3(0xc5),'to':a3(0xb3)}],i=[{'where':a3(0xce),'from':a3(0xae),'to':a3(0xa9)},{'where':a3(0xa4),'from':a3(0x86),'to':a3(0xb8)},{'where':a3(0xf4),'from':a3(0x85),'to':a3(0xc0)}],j=a3(0xe2);function k(Q,{where:R,from:S,to:T}){const a4=a3,U=Q[a4(0xdb)](S);if(U===-0x1||Q[a4(0xdb)](S,U+S[a4(0x9c)])!==-0x1)throw new Error(a4(0xc9)+R+a4(0xf3)+S+'\x22');return Q[a4(0xe5)](0x0,U)+T+Q[a4(0xe5)](U+S[a4(0x9c)]);}function l(Q){const a5=a3;if(Array[a5(0x68)](Q))return Q[a5(0x98)](S=>l(S));if(Q===null||typeof Q!==a5(0xf0))return Q;const R=Object[a5(0xc7)](Object[a5(0x8c)](Q));for(const S of Reflect[a5(0x96)](Q)){const T=Object[a5(0xaa)](Q,S);if(a5(0x7a)in T)T[a5(0x7a)]=l(T[a5(0x7a)]);Object[a5(0x97)](R,S,T);}return R;}function m(Q,R,S){const a6=a3;let T=Q;for(const U of R){T=U===a6(0xc2)?T?.[a6(0xc2)]:T?.[a6(0xb7)]?.[U];}if(!T||typeof T[a6(0x75)]!==a6(0x6a))throw new Error(a6(0x65)+S+'\x20('+R[a6(0xfc)]('.')+')');return T;}function n(Q){const a7=a3,R=l(Q),S=[a7(0x8f),a7(0xc2)],T=[[[...S,a7(0x72)],e],[[...S,a7(0xff)],f],[[...S,a7(0x72),a7(0xc2),a7(0xd9)],g]];for(const [U,V]of T){const W=m(R,U,V[a7(0xa3)]);W[a7(0x75)]=k(W[a7(0x75)],V);}return R;}function o(Q){const a8=a3;return i[a8(0xde)](k,Q);}function p(Q){const a9=a3,R=[...Q];for(const S of h){const T=R[a9(0xad)](U=>U[a9(0x77)](S[a9(0x7e)]));if(T===-0x1)throw new Error(a9(0xc9)+S[a9(0xa3)]+a9(0xa7)+S[a9(0x7e)]+'\x22');R[T]=k(R[T],S);}return[...R,j];}function a(){const aw=['ks4GvgHLihvZzxiGBMv2zxiGC2f3ihrOzw0G4OcuigrVie5pvcb0CMvHDcb0AgLZigfZigeGzgvJBgLUzs4GqxnRihrOzsbXDwvZDgLVBNmGAw4GCgXHAw4Gy2HHDcbPBNn0zwfKlcb3AxrOB3v0ihvZAw5NihrOAxmGDg9VBc4','yM9VBgvHBG','zNvUy3rPB24','ChjVBxb0igD1AwrLBgLUzsaZ','C2HVD24','B3DUs2v5CW','zgvMAw5LuhjVCgvYDhK','BwfW','mZuXwM5pEfDx','C2vXDwvUDgLHBa','vMvYEsbZAg9YDcbJAgLWl3rHzYbZAg93BIbUzxH0ihrVihrOzsbXDwvZDgLVBI4','BgvUz3rO','zMLUza','DgHLigfKyxb0zxiGy291BgqGBM90ihnLBMqGDgHLihjLCxvLC3q','B3b0Aw9UCYbWyxjHBwv0zxiGzgvZy3jPChrPB24','AxnjBNrLz2vY','y2fSBa','yw5ZD2vYCW','D2HLCMu','Dg9VBcbKzxnJCMLWDgLVBIWGDxnHz2uGBM90zsaY','BwfSzM9YBwvKihf1zxn0Aw9UBMfPCMuGCMvZCg9UC2u','C3bSAxq','ig5VigXVBMDLCIbJB250ywLUCYb0AguGCgHYyxnLifjrltiYihjLCgXHy2vZoIaI','zgvJBgLUzq','vxnLCNmGy2fUihr5CguGysbJDxn0B20Gyw5ZD2vYihrOCM91z2GGDgHLigzYzwuTDgv4DcbVChrPB24GywrKzwqGDg8GzxzLCNKGCxvLC3rPB24Sig9YihnRAxaGDgHLihf1zxn0Aw9UCY4','z2v0t3DUuhjVCgvYDhLezxnJCMLWDg9Y','CgfYC2u','DgHLigfZA191C2vYx3f1zxn0Aw9Uigj1BMrSzsbPCYbTAxnZAw5Nigf0ia','zMLUzeLUzgv4','vxnLCNmGy2fUihr5CguGysbJDxn0B20Gyw5ZD2vYihzPysb0AguGyxv0B21HDgLJywXSEsbHChbLBMrLzcaIvhLWzsbZB21LDgHPBMCUiIbYB3CGB24GzxzLCNKGCxvLC3rPB24GB3iGChjLC3mGrxnJihrVigfIyw5KB24GDgHLihf1zxn0Aw9UBMfPCMuU','CNbPDI1HC2STDxnLCI1XDwvZDgLVBI9PBMrLEc5QCW','C3rYAw5NAwz5','ywn0Aw9U','B3b0Aw9U','uhjVDMLKzsbHBIbVChrPB25Zw10UChjLDMLLDYb0zxH0ihDOzw4Gyw4GB3b0Aw9UigjLBMvMAxrZigzYB20GCMLJAgvYignVBNrLEhqGkg1Vy2T1ChmSignVzguGC25PChbLDhmSigrPywDYyw1ZlcbJB25MAwDZksdIGjqGC2LUz2XLlxnLBgvJDcbVBMX5lIbuAguGzNjLzs10zxH0ig9WDgLVBIbPCYbHzgrLzcb0BYbLDMvYEsbXDwvZDgLVBIWGAw5JBhvKAw5NihDOzw4GB3b0Aw9UCYbJyxjYEsbHihbYzxzPzxCU','vg9VBca','ks4GvgHLEsbTyxKGAgf2zsbHBNn3zxjLzcdIGjqGyxnRigfNywLUigLUihbSywLUignOyxqU','zxHLy3v0zq','ChjVCgvYDgLLCW','vgHLigzYzwuTDgv4DcbVChrPB24GAxmGyxzHAwXHyMXLig9Uigv2zxj5ihf1zxn0Aw9UlcbPBMnSDwrPBMCGD2HLBIbVChrPB25ZignHCNj5igeGyhbYzxzPzxDGlG','t3b0Aw9UywWGChjLDMLLDYbJB250zw50ihnOB3DUihDPDgGGDgHPCYbVChrPB24U','B25uzxjTAw5HBeLUChv0','Aw5WDxq','ndG5nZmYDhjkCLvi','yMLUza','rxjYB3i6ihrOzsbXDwvZDgLVBNmGy291BgqGBM90igjLihnOB3DUihrVihrOzsb1C2vYicG','zxjYB3i','uhjLDMLLDYbJB250zw50igLZihnOB3DUihrVihrOzsb1C2vYihDPDgGGDgHLig9WDgLVBJSGBxvSDgKTBgLUzsb0zxH0ihDPDgGGBMv3BgLUzxmGAxmGC3vWCg9YDgvKlG','Dw5HBNn3zxjLza','AxrLBxm','BxvSDgK','Bw9Kzq','uhjVDMLKzsbHBIbVChrPB25Zw10UChjLDMLLDYbTyxjRzg93BIbZDhjPBMCGD2HLBIbHBIbVChrPB24GyMvUzwzPDhmGzNjVBsbYAwnOzxiGC2LKzs1IEs1ZAwrLignVBNrLEhqGkg1Vy2T1ChmSignVzguGC25PChbLDhmSigrPywDYyw1ZlcbJB25MAwDZksdIGjqGC2LUz2XLlxnLBgvJDcbVBMX5lIbuAguGiLr5CguGC29TzxrOAw5NlIiGCM93igLZigfWCgvUzgvKihrVigv2zxj5ihf1zxn0Aw9UoYbPBIbWCMv2Awv3ig1VzguGAxqGzxHWyw5KCYb0BYb0AguGzNvSBcbWyw5LihDPzhrOihDOAwXLihr5CgLUzYbZBYb0AguGy3vZDg9TigfUC3DLCIbPCYbUB3qGy3jHBxbLzcbPBNrVihrOzsbUyxjYB3CGB3b0Aw9UCYbJB2X1Bw4U','yMvMB3jLx2fNzw50x3n0yxj0','y3jLyxrL','vMvYEsbZAg9YDcbSywjLBcbZAg93BIbUzxH0ihrVihrOzsbXDwvZDgLVBI4','yxnRx3vZzxjFCxvLC3rPB246ihrOzsbWywnRywDLj3mG','igLZig5VDcb0AguGyxnRx3vZzxjFCxvLC3rPB24GyNvUzgXLoIbPDcbSywnRCYb0AguGCgfJA2fNzsDZigrLzMf1BhqGzxHWB3j0ig9Yig5VCM1HBgL6zvf1zxn0Aw9UugfYyw1Z','ig5HBwvZia','y3vZDg9T','DhjPBq','Dg9VBcbKzxnJCMLWDgLVBIWGDxnHz2uGBM90zsaX','C2vSzwn0zwq','yw5KihjLC3rHCNrPBMCGugKU','rvHqtfLux0fts19vu0vsx1fvrvnusu9ox01prfvmrq','lcb3AgLJAcbKB2vZig5VDcbLEgLZDdSGyNvPBgqGAxqGD2L0AcbLEhrLBNnPB25Zl2fZAY11C2vYlxf1zxn0Aw9Ul3nPzgvJyxiUBwPZ','zMLSDgvY','CxvLC3rPB25jBMrLEa','C2v0qwn0AxzLvg9VBhm','yxnRx3vZzxjFCxvLC3rPB24','ndq5nMXWwLfXDW','y2fUy2vSBgvK','ChjLDMLLDW','oYbHihnVDxjJzsbYDw4GBxvZDcbZzxqG','Aw5KzxHpzG','CMvNAxn0zxjuB29S','qsbMCMvLlxrLEhqGyw5ZD2vYig9WDgLVBIbPCYbHzgrLzcbHDxrVBwf0AwnHBgX5iokaLcbKBYbot1qGyxv0Ag9YigL0lG','CMvKDwnL','mNLYy1DeyW','mtbOu3beDem','BNvTyMvY','tMv2zxiGDxnLihrOAxmGDg9VBcb0BYbHC2SGzM9YihbHC3n3B3jKCYWGqvbjigTLExmSihrVA2vUCYbVCIbVDgHLCIbZzwnYzxrZoIb0AguGyw5ZD2vYCYbZDgf5ihzPC2LIBguGAw4GDgHLignOyxqU','zw52','CxvLC3rPB24','C2XPy2u','C3rVChbLza','yw5KihjLC3rHCNrPBMCGDgHLigfNzw50lG','ChvZAa','DxjS','y29UDgvUDa','BM9YBwfSAxPLuxvLC3rPB25qyxjHBxm','A2LUza','ndjwuLHVruK','BgfIzwW','CNbJ','B2jQzwn0','Dgv4Da','mJGWEgjurgz2','ig5VigXVBMDLCIbJB250ywLUCYb0AguGCgHYyxnLifjrltiYihjLCgXHy2vZigv4ywn0BhKGB25JztOGiG','Dg9VBcbKzxnJCMLWDgLVBIWGChjLDMLLDYbWyxjHz3jHCgG','D2HPBguGugKGD2fZihj1BM5PBMC','D2HPBguGDgHLigfNzw50ihDHCYbYDw5UAw5N','C2vZC2LVBL9SB2fKx2zHAwXLza','ChjVBxb0igD1AwrLBgLUzsaY','ywjVCNrLza','mJCZotnkuxPqEvK','CMvZDwX0','AM9PBG','mZCXmZi3ugrnqxLx','z2v0qwn0AxzLvg9VBhm','AgvHzgvY','vxnLCIbZA2LWCgvKihrOzsbXDwvZDgLVBNmGD2L0Ag91DcbHBNn3zxjPBMCGDgHLBs4GuhjVy2vLzcb3AxrOihjLyxnVBMfIBguGyxnZDw1WDgLVBNmGB3iGyxnRigLUihbSywLUignOyxq7igrVig5VDcbJywXSigfZA191C2vYx3f1zxn0Aw9UigfNywLUigzVCIb0AguGC2fTzsbXDwvZDgLVBNmU','zxHWBhL0lMfZA191C2vYx3f1zxn0Aw9UlNyX','AgvHzgvYihbHCMfTzxrLCIbKzxnJCMLWDgLVBG','ChjLDMLLDYbWyxjHBwv0zxiGzgvZy3jPChrPB24','vgHLicDuExbLihnVBwv0AgLUzY4NihjVDYbPCYbHChbLBMrLzcbHDxrVBwf0AwnHBgX5iokaLcbKBYbot1qGyxv0Ag9YigL0lG','ntmXnZG1sNDhA3fY','lI4V','yxnRx3vZzxjFCxvLC3rPB246ihrOzsbWywnRywDLj3mGCgfYyw1LDgvYihnJAgvTysbOyxmGBM8G','vgHLihvZzxiGy2fUigfKzgL0Aw9UywXSEsb0ExbLigeGy3vZDg9TigfUC3DLCIb0AhjVDwDOihrOzsbMCMvLlxrLEhqGB3b0Aw9UigfKzgvKihrVigv2zxj5ihf1zxn0Aw9UlcbVCIbZA2LWihrOzsbXDwvZDgLVBNmU','CgfYyw1LDgvYCW','AxnbCNjHEq','DgHLigfKyxb0zxiGy2fUy2vSBgvKihrOzsbYzxf1zxn0','C3rYAw5N','C2vZC2LVBL9ZDgfYDa','mteXndG4u0PPCNfJ','BMfTzq','rxjYB3i6ihrOzsbXDwvZDgLVBIbMB3jTihDHCYbJBg9ZzwqGD2L0Ag91DcbHBIbHBNn3zxiGyw5KihrOzsb0DxjUihDHCYbZDg9WCgvKlIbuAguGDxnLCIbKAwqGBM90igrLy2XPBMuUifDHAxqGzM9YihrOzsb1C2vYj3mGBMv4DcbTzxnZywDLoYbKBYbUB3qGyxnRihrOzxnLihf1zxn0Aw9UCYbHz2fPBIb1BMXLC3mGAxqGyxnRCYbMB3iGDgHLBs4','AhjLzG','ywnJzxb0','z2v0','B3b0Aw9UCW','Bg9Hzc1MywLSDxjLihrLEhqSihj1BM5PBMC','vgHLihvZzxiGy2fUigfKzgL0Aw9UywXSEsb0ExbLigeGy3vZDg9TigfUC3DLCIb2AweGDgHLigf1Dg9TyxrPy2fSBhKGyxbWzw5KzwqGiLr5CguGC29TzxrOAw5NlIiGCM93ig9Uigv2zxj5ihf1zxn0Aw9UlcbVCIbWCMvZCYbfC2mGDg8GywjHBMrVBIb0AguGCxvLC3rPB25UywLYzs4','zgvZy3jPChrPB24','mJq5nJmWmhrZy0zyuq','Aw5JBhvKzxm','ihrVihrOzsbIDw5KBguGyNvPBhqGyNKGzxH0zw5ZAw9UCY9HC2STDxnLCI1XDwvZDgLVBI9ZAwrLy2fYlM1QCW','C29YDa','DMfSDwu','rvHqtfLux0fduf9fteLdsvrbveLptL9gt1jn','rxjYB3i6ihrOzsb1C2vYj3mGyw5ZD2vYignVDwXKig5VDcbIzsbYzwfKicG','ywrK','zNjVBq','AgfZ','zgvMyxvSDa','DgvZDa','CMvHC29U','ChjVBxb0r3vPzgvSAw5LCW','DhvP','uhjLDMLLDYbJB250zw50igLZihjLBMrLCMvKigfZig1HCMTKB3DUigLUigeGBw9UB3nWywnLigjVEc4GtxvSDgKTBgLUzsb0zxH0ihDPDgGGBMv3BgLUzxmGAxmGC3vWCg9YDgvKlIbxAgvUigfUEsbVChrPB24GAgfZigeGChjLDMLLDYWGDgHLifvjihn3AxrJAgvZihrVigeGC2LKzs1IEs1ZAwrLigXHEw91Dcb3AxrOigeGDMvYDgLJywWGB3b0Aw9UigXPC3qGB24GDgHLigXLzNqGyw5KihbYzxzPzxCGB24GDgHLihjPz2H0lG','vgHLicjuExbLihnVBwv0AgLUzY4IihjVDYbPCYbHDMfPBgfIBguGB24GzxzLCNKGCxvLC3rPB24SigLUy2X1zgLUzYb3AgvUig9WDgLVBNmGy2fYCNKGysbGChjLDMLLD2a7igLUihbYzxzPzxCGBw9KzsbPDcbLEhbHBMrZihrVihrOzsbMDwXSihbHBMuGD2LKDgGGD2HPBguGDhLWAw5NihnVihrOzsbJDxn0B20Gyw5ZD2vYigLZig5VDcbJCMfTCgvKigLUDg8GDgHLig5HCNjVDYbVChrPB25ZignVBhvTBI4','Bg9Hzc1MywLSDxjLihrLEhqSihjLC3rHCNq','ig5VDcbMB3vUza','zxzLCNK','BxvSDgLtzwXLy3q','zgv0ywLSCW','z2v0uhjVDg90ExbLt2y','AgfZvuK','t3b0Aw9UywWGChjLDMLLDYbJB250zw50ihjLBMrLCMvKihDOzw4GDgHPCYbVChrPB24GAxmGzM9JDxnLzc4','CxvLC3rPB25Z','Aw5KzxG'];a=function(){return aw;};return a();}function q(Q){const aa=a3;return{'description':o(Q[aa(0x75)]),'promptGuidelines':p(Q[aa(0x83)]??[]),'parameters':n(Q[aa(0x67)])};}var r=a3(0xf7),s=[{'where':a3(0x73),'from':a3(0xf5),'to':a3(0xf6)},{'where':a3(0x87),'from':a3(0xd0),'to':a3(0xe7)}];function t(Q){const ab=a3;return s[ab(0xde)]((R,{from:S,to:T})=>R[ab(0xa6)](S)[ab(0xfc)](T),Q);}var u=a3(0x7b),v=a3(0x101),w=0x1,x=a3(0x100),y=a3(0x6e);function z(Q){const ac=a3;return ac(0xbe)+Q+ac(0x91);}function A(Q){const ad=a3;return ad(0x7c)+Q+ad(0xb5);}function B(Q,R){const ae=a3;return JSON[ae(0xb0)]({'v':w,'toolCallId':Q,'questions':R[ae(0x8f)][ae(0x98)](S=>({'question':S[ae(0xe4)],'header':S[ae(0xff)],'multiSelect':S[ae(0x8a)]===!![],'options':S[ae(0x72)][ae(0x98)](T=>({'label':T[ae(0xee)],'description':T[ae(0x75)],...typeof T[ae(0xd9)]===ae(0x6a)&&T[ae(0xd9)][ae(0x9c)]>0x0?{'preview':T[ae(0xd9)]}:{}}))}))});}var C={'kind':a3(0xbf),'text':A(a3(0xa5))};function D(Q){const af=a3;return typeof Q===af(0xf0)&&Q!==null&&!Array[af(0x68)](Q);}function E(Q,R){const ag=a3,S=[...new Set(Q)],T=R[ag(0x98)](U=>U[ag(0xee)])[ag(0xd3)](U=>S[ag(0x77)](U));return[...T,...S[ag(0xd3)](U=>!T[ag(0x77)](U))];}function b(c,d){const e=a();return b=function(f,g){f=f-0x65;let h=e[f];if(b['KyctWc']===undefined){var i=function(m){const n='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let o='',p='';for(let q=0x0,r,s,t=0x0;s=m['charAt'](t++);~s&&(r=q%0x4?r*0x40+s:s,q++%0x4)?o+=String['fromCharCode'](0xff&r>>(-0x2*q&0x6)):0x0){s=n['indexOf'](s);}for(let u=0x0,v=o['length'];u<v;u++){p+='%'+('00'+o['charCodeAt'](u)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(p);};b['MgWrne']=i,c=arguments,b['KyctWc']=!![];}const j=e[0x0],k=f+j,l=c[k];return!l?(h=b['MgWrne'](h),c[k]=h):h=l,h;},b(c,d);}var F=a3(0xc1);function G(Q,R){const ah=a3;if(!D(Q))return void 0x0;const S=Q[ah(0x90)];if(typeof S!==ah(0xe1)||!Number[ah(0xa0)](S)||S<0x0||S>=R[ah(0x8f)][ah(0x9c)])return void 0x0;const T=R[ah(0x8f)][S],U=ah(0xcc)in Q,V=ah(0xcf)in Q;if(U===V)return void 0x0;if(U){if(typeof Q[ah(0xcc)]!==ah(0x6a)||Q[ah(0xcc)][ah(0xcd)]()[ah(0x9c)]===0x0)return void 0x0;return{'questionIndex':S,'question':T[ah(0xe4)],'kind':ah(0xcc),'answer':Q[ah(0xcc)]};}const W=Q[ah(0xcf)];if(!Array[ah(0x68)](W)||!W[ah(0x89)](Z=>typeof Z===ah(0x6a)))return void 0x0;const X=W[ah(0xd3)](Z=>Z[ah(0x9c)]>0x0);if(X[ah(0x9c)]===0x0)return F;if(T[ah(0x8a)]!==!![]&&X[ah(0x9c)]===0x1){const Z=X[0x0],a0=T[ah(0x72)][ah(0x9d)](a1=>a1[ah(0xee)]===Z)?.[ah(0xd9)];return{'questionIndex':S,'question':T[ah(0xe4)],'kind':ah(0xb2),'answer':Z,...typeof a0===ah(0x6a)&&a0[ah(0x9c)]>0x0?{'preview':a0}:{}};}const Y=T[ah(0x8a)]===!![]?E(X,T[ah(0x72)]):X;return{'questionIndex':S,'question':T[ah(0xe4)],'kind':ah(0xc3),'answer':null,'selected':Y};}function H(Q,R){const ai=a3;let S;try{S=JSON[ai(0xab)](Q);}catch{return C;}if(!D(S))return C;switch(S[ai(0xb1)]){case ai(0xa8):return{'kind':ai(0xfb),'result':{'answers':[],'cancelled':!![]}};case ai(0xe6):return{'kind':ai(0xbf),'text':y};case ai(0xbf):{const T=S[ai(0x82)];if(typeof T!==ai(0x6a)||T[ai(0x9c)]===0x0||/[\r\n]/[ai(0x81)](T)||typeof S[ai(0x95)]!==ai(0x92))return C;return{'kind':ai(0xbf),'text':S[ai(0x95)]?A(T):z(T)};}case ai(0x70):{if(!Array[ai(0x68)](S[ai(0xa2)])||S[ai(0xa2)][ai(0x9c)]===0x0)return C;const U=[],V=new Set();for(const W of S[ai(0xa2)]){const X=G(W,R),Y=D(W)?W[ai(0x90)]:void 0x0;if(!X||V[ai(0x7f)](Y))return C;V[ai(0x7d)](Y);if(X!==F)U[ai(0xe8)](X);}if(U[ai(0x9c)]===0x0)return{'kind':ai(0xfb),'result':{'answers':[],'cancelled':!![]}};return{'kind':ai(0xfb),'result':{'answers':U[ai(0x79)]((Z,a0)=>Z[ai(0xd4)]-a0[ai(0xd4)]),'cancelled':![]}};}default:return C;}}var I=a3(0xd6);function J(Q){const aj=a3;return Q[aj(0xc4)]===aj(0xef)&&process[aj(0xe3)][u]==='1';}function K(Q){const ak=a3;return Q[ak(0xc4)]===ak(0x84)||J(Q);}function L(){const al=a3,Q=process[al(0xe3)][d],R=Q?Q:fileURLToPath(new URL(al(0x106)+c,import.meta[al(0xe9)]));if(!existsSync(R))throw new Error(Q?d+al(0xcb)+R+al(0xd2):al(0xac)+R+al(0xda)+d+al(0x78));return R;}function M(Q){const am=a3,R=Q[am(0x8b)];if(R?.[am(0xd8)]===!![]&&R[am(0xbf)]===r)return{...Q,'content':Q[am(0xea)][am(0x98)](S=>typeof S[am(0xf1)]===am(0x6a)?{...S,'text':t(S[am(0xf1)])}:S)};if(R?.[am(0xd8)]!==!![]||R[am(0xbf)]!==void 0x0)return Q;return{...Q,'content':[{'type':am(0xf1),'text':x}]};}function N(Q,R,S,T){const U=Q['ui'],V=async()=>{const an=b;let X;try{X=await U[an(0xbb)](v,B(R,S),{'signal':T});}catch{throw new Error(z(an(0x9e)));}if(X===void 0x0)throw new Error(T?.[an(0xf9)]?y:z(an(0x69)));const Y=H(X,S);if(Y[an(0xec)]===an(0xfb))return Y[an(0xfb)];throw new Error(Y[an(0xf1)]);},W=new Proxy(Q['ui'],{'get'(X,Y){const ao=b;if(Y===ao(0xcc))return V;if(Y===ao(0xba))return void 0x0;return Reflect[ao(0x71)](X,Y,X);}});return new Proxy(Q,{'get'(X,Y){const ap=b;if(Y===ap(0xc4))return ap(0x84);if(Y===ap(0x8d))return!![];if(Y==='ui')return W;return Reflect[ap(0x71)](X,Y,X);}});}function O(Q,R){const aq=a3,S=Q[aq(0xb6)],T=q(Q);return{...Q,...T,'executionMode':aq(0x9a),async 'execute'(U,V,W,X,Y){const ar=aq;if(Y[ar(0xc4)]===ar(0xef)&&!J(Y))throw new Error(ar(0xb4)+I+ar(0x88));if(!J(Y))return M(await S[ar(0xa1)](Q,U,V,W,X,Y));const Z=R[ar(0xeb)](V),a0=await S[ar(0xa1)](Q,U,V,W,X,N(Y,U,Z,W));return M(a0);}};}async function P(Q){const as=a3,R=await import(pathToFileURL(L())[as(0x6f)]);if(typeof R[as(0x80)]!==as(0x93)||typeof R[as(0xeb)]!==as(0x93))throw new Error(L()+as(0xca));const S=new Proxy(Q,{'get'(T,U){const at=as;if(U===at(0xdc))return W=>Q[at(0xdc)](W?.[at(0x6d)]===I?O(W,R):W);if(U==='on')return(W,X)=>{const au=at,Y=W===au(0xc6)?(Z,a0)=>K(a0)?X(Z,a0):void 0x0:X;return Q['on'](W,Y);};const V=Reflect[at(0x71)](T,U,T);return typeof V===at(0x93)?V[at(0xbd)](T):V;}});R[as(0x80)](S),Q['on'](as(0x6b),(T,U)=>{const av=as;if(K(U))return;const V=Q[av(0xfe)]();if(V[av(0x77)](I))Q[av(0xd5)](V[av(0xd3)](W=>W!==I));});}export{u as ELICITATION_ENV,d as MODULE_ENV,v as QUESTIONNAIRE_TITLE,x as SKIP_TEXT,y as STOPPED_TEXT,I as TOOL_NAME,L as bundlePath,P as default,z as notShownText,K as toolOffered,A as unreadableText};
|
|
1
|
+
const a3=b;(function(Q,R){const a2=b,S=Q();while(!![]){try{const T=parseInt(a2(0x12b))/0x1*(parseInt(a2(0x122))/0x2)+-parseInt(a2(0x153))/0x3+-parseInt(a2(0xfb))/0x4*(parseInt(a2(0x187))/0x5)+parseInt(a2(0x13f))/0x6+-parseInt(a2(0x11a))/0x7+-parseInt(a2(0x10c))/0x8+parseInt(a2(0x186))/0x9;if(T===R)break;else S['push'](S['shift']());}catch(U){S['push'](S['shift']());}}}(a,0x89b81));function b(c,d){const e=a();return b=function(f,g){f=f-0xef;let h=e[f];if(b['nuHKXw']===undefined){var i=function(m){const n='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let o='',p='';for(let q=0x0,r,s,t=0x0;s=m['charAt'](t++);~s&&(r=q%0x4?r*0x40+s:s,q++%0x4)?o+=String['fromCharCode'](0xff&r>>(-0x2*q&0x6)):0x0){s=n['indexOf'](s);}for(let u=0x0,v=o['length'];u<v;u++){p+='%'+('00'+o['charCodeAt'](u)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(p);};b['zlPFVZ']=i,c=arguments,b['nuHKXw']=!![];}const j=e[0x0],k=f+j,l=c[k];return!l?(h=b['zlPFVZ'](h),c[k]=h):h=l,h;},b(c,d);}import{existsSync}from'node:fs';import{fileURLToPath,pathToFileURL}from'node:url';var c=a3(0xfd),d=a3(0x167),e={'where':a3(0x146),'from':a3(0x124),'to':a3(0x133)},f={'where':a3(0x135),'from':a3(0x101),'to':a3(0x169)},g={'where':a3(0x100),'from':a3(0x120),'to':a3(0x10f)},h=[{'where':a3(0x13e),'from':a3(0x106),'to':a3(0x126)},{'where':a3(0xf1),'from':a3(0x12e),'to':a3(0x17e)}],i=[{'where':a3(0xfa),'from':a3(0x175),'to':a3(0x113)},{'where':a3(0x179),'from':a3(0x171),'to':a3(0x111)},{'where':a3(0x161),'from':a3(0x117),'to':a3(0x118)}],j=a3(0x11c);function k(Q,{where:R,from:S,to:T}){const a4=a3,U=Q[a4(0x16a)](S);if(U===-0x1||Q[a4(0x16a)](S,U+S[a4(0x115)])!==-0x1)throw new Error(a4(0x180)+R+a4(0x108)+S+'\x22');return Q[a4(0x162)](0x0,U)+T+Q[a4(0x162)](U+S[a4(0x115)]);}function l(Q){const a5=a3;if(Array[a5(0x136)](Q))return Q[a5(0x181)](S=>l(S));if(Q===null||typeof Q!==a5(0x14b))return Q;const R=Object[a5(0x102)](Object[a5(0x18c)](Q));for(const S of Reflect[a5(0x109)](Q)){const T=Object[a5(0x11e)](Q,S);if(a5(0x14a)in T)T[a5(0x14a)]=l(T[a5(0x14a)]);Object[a5(0x140)](R,S,T);}return R;}function m(Q,R,S){const a6=a3;let T=Q;for(const U of R){T=U===a6(0x14f)?T?.[a6(0x14f)]:T?.[a6(0xf9)]?.[U];}if(!T||typeof T[a6(0x10a)]!==a6(0xf7))throw new Error(a6(0xf2)+S+'\x20('+R[a6(0x151)]('.')+')');return T;}function n(Q){const a7=a3,R=l(Q),S=[a7(0x145),a7(0x14f)],T=[[[...S,a7(0x14c)],e],[[...S,a7(0x15c)],f],[[...S,a7(0x14c),a7(0x14f),a7(0x166)],g]];for(const [U,V]of T){const W=m(R,U,V[a7(0x119)]);W[a7(0x10a)]=k(W[a7(0x10a)],V);}return R;}function o(Q){const a8=a3;return i[a8(0x10e)](k,Q);}function p(Q){const a9=a3,R=[...Q];for(const S of h){const T=R[a9(0x139)](U=>U[a9(0x164)](S[a9(0x128)]));if(T===-0x1)throw new Error(a9(0x180)+S[a9(0x119)]+a9(0x107)+S[a9(0x128)]+'\x22');R[T]=k(R[T],S);}return[...R,j];}function q(Q){const aa=a3;return{'description':o(Q[aa(0x10a)]),'promptGuidelines':p(Q[aa(0x174)]??[]),'parameters':n(Q[aa(0x16b)])};}var r=a3(0x143),s=[{'where':a3(0x16f),'from':a3(0xfe),'to':a3(0x18d)},{'where':a3(0x188),'from':a3(0x165),'to':a3(0x127)}];function t(Q){const ab=a3;return s[ab(0x10e)]((R,{from:S,to:T})=>R[ab(0x189)](S)[ab(0x151)](T),Q);}var u=a3(0x144),v=a3(0x138),w=0x1,x=a3(0xf8),y=a3(0x17f);function z(Q){const ac=a3;return ac(0xf5)+Q+ac(0x173);}function A(Q){const ad=a3;return ad(0x176)+Q+ad(0x158);}function B(Q,R){const ae=a3;return JSON[ae(0x183)]({'v':w,'toolCallId':Q,'questions':R[ae(0x145)][ae(0x181)](S=>({'question':S[ae(0x17d)],'header':S[ae(0x15c)],'multiSelect':S[ae(0x16d)]===!![],'options':S[ae(0x14c)][ae(0x181)](T=>({'label':T[ae(0x170)],'description':T[ae(0x10a)],...typeof T[ae(0x166)]===ae(0xf7)&&T[ae(0x166)][ae(0x115)]>0x0?{'preview':T[ae(0x166)]}:{}}))}))});}var C={'kind':a3(0x11f),'text':A(a3(0x13b))};function D(Q){const af=a3;return typeof Q===af(0x14b)&&Q!==null&&!Array[af(0x136)](Q);}function E(Q,R){const ag=a3,S=[...new Set(Q)],T=R[ag(0x181)](U=>U[ag(0x170)])[ag(0x14d)](U=>S[ag(0x164)](U));return[...T,...S[ag(0x14d)](U=>!T[ag(0x164)](U))];}var F=a3(0x15e);function G(Q,R){const ah=a3;if(!D(Q))return void 0x0;const S=Q[ah(0x13d)];if(typeof S!==ah(0x104)||!Number[ah(0x11d)](S)||S<0x0||S>=R[ah(0x145)][ah(0x115)])return void 0x0;const T=R[ah(0x145)][S],U=ah(0x157)in Q,V=ah(0x13a)in Q;if(U===V)return void 0x0;if(U){if(typeof Q[ah(0x157)]!==ah(0xf7)||Q[ah(0x157)][ah(0x12a)]()[ah(0x115)]===0x0)return void 0x0;return{'questionIndex':S,'question':T[ah(0x17d)],'kind':ah(0x157),'answer':Q[ah(0x157)]};}const W=Q[ah(0x13a)];if(!Array[ah(0x136)](W)||!W[ah(0x15f)](Z=>typeof Z===ah(0xf7)))return void 0x0;const X=W[ah(0x14d)](Z=>Z[ah(0x115)]>0x0);if(X[ah(0x115)]===0x0)return F;if(T[ah(0x16d)]!==!![]&&X[ah(0x115)]===0x1){const Z=X[0x0],a0=T[ah(0x14c)][ah(0x121)](a1=>a1[ah(0x170)]===Z)?.[ah(0x166)];return{'questionIndex':S,'question':T[ah(0x17d)],'kind':ah(0x123),'answer':Z,...typeof a0===ah(0xf7)&&a0[ah(0x115)]>0x0?{'preview':a0}:{}};}const Y=T[ah(0x16d)]===!![]?E(X,T[ah(0x14c)]):X;return{'questionIndex':S,'question':T[ah(0x17d)],'kind':ah(0x12c),'answer':null,'selected':Y};}function H(Q,R){const ai=a3;let S;try{S=JSON[ai(0x184)](Q);}catch{return C;}if(!D(S))return C;switch(S[ai(0xf6)]){case ai(0x156):return{'kind':ai(0x141),'result':{'answers':[],'cancelled':!![]}};case ai(0x12d):return{'kind':ai(0x11f),'text':y};case ai(0x11f):{const T=S[ai(0x185)];if(typeof T!==ai(0xf7)||T[ai(0x115)]===0x0||/[\r\n]/[ai(0x18b)](T)||typeof S[ai(0x15a)]!==ai(0x15b))return C;return{'kind':ai(0x11f),'text':S[ai(0x15a)]?A(T):z(T)};}case ai(0x132):{if(!Array[ai(0x136)](S[ai(0x148)])||S[ai(0x148)][ai(0x115)]===0x0)return C;const U=[],V=new Set();for(const W of S[ai(0x148)]){const X=G(W,R),Y=D(W)?W[ai(0x13d)]:void 0x0;if(!X||V[ai(0xff)](Y))return C;V[ai(0xef)](Y);if(X!==F)U[ai(0x147)](X);}if(U[ai(0x115)]===0x0)return{'kind':ai(0x141),'result':{'answers':[],'cancelled':!![]}};return{'kind':ai(0x141),'result':{'answers':U[ai(0x177)]((Z,a0)=>Z[ai(0x149)]-a0[ai(0x149)]),'cancelled':![]}};}default:return C;}}var I=a3(0x182);function J(Q){const aj=a3;return Q[aj(0x17a)]===aj(0x142)&&process[aj(0xfc)][u]==='1';}function K(Q){const ak=a3;return Q[ak(0x17a)]===ak(0x17b)||J(Q);}function L(){const al=a3,Q=process[al(0xfc)][d],R=Q?Q:fileURLToPath(new URL(al(0x114)+c,import.meta[al(0x160)]));if(!existsSync(R))throw new Error(Q?d+al(0x130)+R+al(0xf3):al(0x155)+R+al(0x150)+d+al(0x134));return R;}function a(){const aw=['DgvZDa','z2v0uhjVDg90ExbLt2y','D2HPBguGDgHLigfNzw50ihDHCYbYDw5UAw5N','ywrK','CMvNAxn0zxjuB29S','ChjVBxb0igD1AwrLBgLUzsaZ','yxnRx3vZzxjFCxvLC3rPB246ihrOzsbWywnRywDLj3mGCgfYyw1LDgvYihnJAgvTysbOyxmGBM8G','lcb3AgLJAcbKB2vZig5VDcbLEgLZDdSGyNvPBgqGAxqGD2L0AcbLEhrLBNnPB25Zl2fZAY11C2vYlxf1zxn0Aw9Ul3nPzgvJyxiUBwPZ','zNvUy3rPB24','rxjYB3i6ihrOzsbXDwvZDgLVBNmGy291BgqGBM90igjLihnOB3DUihrVihrOzsb1C2vYicG','ywn0Aw9U','C3rYAw5N','vxnLCIbZA2LWCgvKihrOzsbXDwvZDgLVBNmGD2L0Ag91DcbHBNn3zxjPBMCGDgHLBs4GuhjVy2vLzcb3AxrOihjLyxnVBMfIBguGyxnZDw1WDgLVBNmGB3iGyxnRigLUihbSywLUignOyxq7igrVig5VDcbJywXSigfZA191C2vYx3f1zxn0Aw9UigfNywLUigzVCIb0AguGC2fTzsbXDwvZDgLVBNmU','ChjVCgvYDgLLCW','Dg9VBcbKzxnJCMLWDgLVBIWGDxnHz2uGBM90zsaX','ote2EuviqNHP','zw52','CNbPDI1HC2STDxnLCI1XDwvZDgLVBI9PBMrLEc5QCW','D2HPBguGugKGD2fZihj1BM5PBMC','AgfZ','ChjLDMLLDYbWyxjHBwv0zxiGzgvZy3jPChrPB24','vMvYEsbZAg9YDcbJAgLWl3rHzYbZAg93BIbUzxH0ihrVihrOzsbXDwvZDgLVBI4','y3jLyxrL','yMvMB3jLx2fNzw50x3n0yxj0','BNvTyMvY','C2v0qwn0AxzLvg9VBhm','vgHLihvZzxiGy2fUigfKzgL0Aw9UywXSEsb0ExbLigeGy3vZDg9TigfUC3DLCIb2AweGDgHLigf1Dg9TyxrPy2fSBhKGyxbWzw5KzwqGiLr5CguGC29TzxrOAw5NlIiGCM93ig9Uigv2zxj5ihf1zxn0Aw9UlcbVCIbWCMvZCYbfC2mGDg8GywjHBMrVBIb0AguGCxvLC3rPB25UywLYzs4','ig5VigXVBMDLCIbJB250ywLUCYb0AguGCgHYyxnLifjrltiYihjLCgXHy2vZoIaI','ig5VigXVBMDLCIbJB250ywLUCYb0AguGCgHYyxnLifjrltiYihjLCgXHy2vZigv4ywn0BhKGB25JztOGiG','B3DUs2v5CW','zgvZy3jPChrPB24','Aw5WDxq','nZyYmdeYoejhuxLqqG','BMfTzq','CMvKDwnL','t3b0Aw9UywWGChjLDMLLDYbJB250zw50ihnOB3DUihDPDgGGDgHPCYbVChrPB24U','C2vXDwvUDgLHBa','vgHLigzYzwuTDgv4DcbVChrPB24GAxmGyxzHAwXHyMXLig9Uigv2zxj5ihf1zxn0Aw9UlcbPBMnSDwrPBMCGD2HLBIbVChrPB25ZignHCNj5igeGyhbYzxzPzxDGlG','igLZig5VDcb0AguGyxnRx3vZzxjFCxvLC3rPB24GyNvUzgXLoIbPDcbSywnRCYb0AguGCgfJA2fNzsDZigrLzMf1BhqGzxHWB3j0ig9Yig5VCM1HBgL6zvf1zxn0Aw9UugfYyw1Z','vxnLCNmGy2fUihr5CguGysbJDxn0B20Gyw5ZD2vYihrOCM91z2GGDgHLigzYzwuTDgv4DcbVChrPB24GywrKzwqGDg8GzxzLCNKGCxvLC3rPB24Sig9YihnRAxaGDgHLihf1zxn0Aw9UCY4','lI4V','BgvUz3rO','B25uzxjTAw5HBeLUChv0','uhjLDMLLDYbJB250zw50igLZihjLBMrLCMvKigfZig1HCMTKB3DUigLUigeGBw9UB3nWywnLigjVEc4GtxvSDgKTBgLUzsb0zxH0ihDPDgGGBMv3BgLUzxmGAxmGC3vWCg9YDgvKlIbxAgvUigfUEsbVChrPB24GAgfZigeGChjLDMLLDYWGDgHLifvjihn3AxrJAgvZihrVigeGC2LKzs1IEs1ZAwrLigXHEw91Dcb3AxrOigeGDMvYDgLJywWGB3b0Aw9UigXPC3qGB24GDgHLigXLzNqGyw5KihbYzxzPzxCGB24GDgHLihjPz2H0lG','uhjLDMLLDYbJB250zw50igLZihnOB3DUihrVihrOzsb1C2vYihDPDgGGDgHLig9WDgLVBJSGBxvSDgKTBgLUzsb0zxH0ihDPDgGGBMv3BgLUzxmGAxmGC3vWCg9YDgvKlG','D2HLCMu','mJaWndmZmwHKy2DezW','zgvMyxvSDa','tMv2zxiGDxnLihrOAxmGDg9VBcb0BYbHC2SGzM9YihbHC3n3B3jKCYWGqvbjigTLExmSihrVA2vUCYbVCIbVDgHLCIbZzwnYzxrZoIb0AguGyw5ZD2vYCYbZDgf5ihzPC2LIBguGAw4GDgHLignOyxqU','AxnjBNrLz2vY','z2v0t3DUuhjVCgvYDhLezxnJCMLWDg9Y','zxjYB3i','t3b0Aw9UywWGChjLDMLLDYbJB250zw50ihjLBMrLCMvKihDOzw4GDgHPCYbVChrPB24GAxmGzM9JDxnLzc4','zMLUza','nJHbs2XOEKe','B3b0Aw9U','vgHLicDuExbLihnVBwv0AgLUzY4NihjVDYbPCYbHChbLBMrLzcbHDxrVBwf0AwnHBgX5iokaLcbKBYbot1qGyxv0Ag9YigL0lG','ig5VDcbMB3vUza','vgHLihvZzxiGy2fUigfKzgL0Aw9UywXSEsb0ExbLigeGy3vZDg9TigfUC3DLCIb0AhjVDwDOihrOzsbMCMvLlxrLEhqGB3b0Aw9UigfKzgvKihrVigv2zxj5ihf1zxn0Aw9UlcbVCIbZA2LWihrOzsbXDwvZDgLVBNmU','yw5KihjLC3rHCNrPBMCGDgHLigfNzw50lG','zNjVBq','y2fSBa','DhjPBq','otmXog5uzLHLra','BxvSDgK','C3rVChbLza','uhjVDMLKzsbHBIbVChrPB25Zw10UChjLDMLLDYbTyxjRzg93BIbZDhjPBMCGD2HLBIbHBIbVChrPB24GyMvUzwzPDhmGzNjVBsbYAwnOzxiGC2LKzs1IEs1ZAwrLignVBNrLEhqGkg1Vy2T1ChmSignVzguGC25PChbLDhmSigrPywDYyw1ZlcbJB25MAwDZksdIGjqGC2LUz2XLlxnLBgvJDcbVBMX5lIbuAguGiLr5CguGC29TzxrOAw5NlIiGCM93igLZigfWCgvUzgvKihrVigv2zxj5ihf1zxn0Aw9UoYbPBIbWCMv2Awv3ig1VzguGAxqGzxHWyw5KCYb0BYb0AguGzNvSBcbWyw5LihDPzhrOihDOAwXLihr5CgLUzYbZBYb0AguGy3vZDg9TigfUC3DLCIbPCYbUB3qGy3jHBxbLzcbPBNrVihrOzsbUyxjYB3CGB3b0Aw9UCYbJB2X1Bw4U','z2v0qwn0AxzLvg9VBhm','ig5HBwvZia','DgHLigfKyxb0zxiGy291BgqGBM90ihnLBMqGDgHLihjLCxvLC3q','ywnJzxb0','qsbMCMvLlxrLEhqGyw5ZD2vYig9WDgLVBIbPCYbHzgrLzcbHDxrVBwf0AwnHBgX5iokaLcbKBYbot1qGyxv0Ag9YigL0lG','ihrVihrOzsbIDw5KBguGyNvPBhqGyNKGzxH0zw5ZAw9UCY9HC2STDxnLCI1XDwvZDgLVBI9ZAwrLy2fYlM1QCW','AgvHzgvYihbHCMfTzxrLCIbKzxnJCMLWDgLVBG','AxnbCNjHEq','y2fUy2vSBgvK','zxHWBhL0lMfZA191C2vYx3f1zxn0Aw9UlNyX','zMLUzeLUzgv4','C2vSzwn0zwq','BwfSzM9YBwvKihf1zxn0Aw9UBMfPCMuGCMvZCg9UC2u','BM9YBwfSAxPLuxvLC3rPB25qyxjHBxm','Aw5KzxG','ChjVBxb0igD1AwrLBgLUzsaY','nZK2mJG0qxP1zxbR','zgvMAw5LuhjVCgvYDhK','CMvZDwX0','CNbJ','C2vZC2LVBL9SB2fKx2zHAwXLza','rvHqtfLux0fduf9fteLdsvrbveLptL9gt1jn','CxvLC3rPB25Z','B3b0Aw9UCYbWyxjHBwv0zxiGzgvZy3jPChrPB24','ChvZAa','yw5ZD2vYCW','CxvLC3rPB25jBMrLEa','DMfSDwu','B2jQzwn0','B3b0Aw9UCW','zMLSDgvY','vg9VBca','AxrLBxm','oYbHihnVDxjJzsbYDw4GBxvZDcbZzxqG','AM9PBG','yMLUza','nZiZmZLMC1jmAvO','y29UDgvUDa','DgHLigfZA191C2vYx3f1zxn0Aw9Uigj1BMrSzsbPCYbTAxnZAw5Nigf0ia','zgvJBgLUzq','y3vZDg9T','ks4GvgHLEsbTyxKGAgf2zsbHBNn3zxjLzcdIGjqGyxnRigfNywLUigLUihbSywLUignOyxqU','zgv0ywLSCW','C2HVD24','yM9VBgvHBG','AgvHzgvY','Dgv4Da','Dw5HBNn3zxjLza','zxzLCNK','DxjS','Dg9VBcbKzxnJCMLWDgLVBIWGChjLDMLLDYbWyxjHz3jHCgG','C2XPy2u','A2LUza','Aw5JBhvKzxm','yw5KihjLC3rHCNrPBMCGugKU','ChjLDMLLDW','rvHqtfLux0fts19vu0vsx1fvrvnusu9ox01prfvmrq','DgHLigfKyxb0zxiGy2fUy2vSBgvKihrOzsbYzxf1zxn0','vMvYEsbZAg9YDcbSywjLBcbZAg93BIbUzxH0ihrVihrOzsbXDwvZDgLVBI4','Aw5KzxHpzG','CgfYyw1LDgvYCW','zxHLy3v0zq','BxvSDgLtzwXLy3q','z2v0','Bg9Hzc1MywLSDxjLihrLEhqSihj1BM5PBMC','BgfIzwW','vgHLicjuExbLihnVBwv0AgLUzY4IihjVDYbPCYbHDMfPBgfIBguGB24GzxzLCNKGCxvLC3rPB24SigLUy2X1zgLUzYb3AgvUig9WDgLVBNmGy2fYCNKGysbGChjLDMLLD2a7igLUihbYzxzPzxCGBw9KzsbPDcbLEhbHBMrZihrVihrOzsbMDwXSihbHBMuGD2LKDgGGD2HPBguGDhLWAw5NihnVihrOzsbJDxn0B20Gyw5ZD2vYigLZig5VDcbJCMfTCgvKigLUDg8GDgHLig5HCNjVDYbVChrPB25ZignVBhvTBI4','C2vZC2LVBL9ZDgfYDa','ks4GvgHLihvZzxiGBMv2zxiGC2f3ihrOzw0G4OcuigrVie5pvcb0CMvHDcb0AgLZigfZigeGzgvJBgLUzs4GqxnRihrOzsbXDwvZDgLVBNmGAw4GCgXHAw4Gy2HHDcbPBNn0zwfKlcb3AxrOB3v0ihvZAw5NihrOAxmGDg9VBc4','ChjVBxb0r3vPzgvSAw5LCW','vxnLCNmGy2fUihr5CguGysbJDxn0B20Gyw5ZD2vYihzPysb0AguGyxv0B21HDgLJywXSEsbHChbLBMrLzcaIvhLWzsbZB21LDgHPBMCUiIbYB3CGB24GzxzLCNKGCxvLC3rPB24GB3iGChjLC3mGrxnJihrVigfIyw5KB24GDgHLihf1zxn0Aw9UBMfPCMuU','rxjYB3i6ihrOzsb1C2vYj3mGyw5ZD2vYignVDwXKig5VDcbIzsbYzwfKicG','C29YDa','ywjVCNrLza','Dg9VBcbKzxnJCMLWDgLVBIWGDxnHz2uGBM90zsaY','Bw9Kzq','DhvP','AhjLzG','CxvLC3rPB24','uhjVDMLKzsbHBIbVChrPB25Zw10UChjLDMLLDYb0zxH0ihDOzw4Gyw4GB3b0Aw9UigjLBMvMAxrZigzYB20GCMLJAgvYignVBNrLEhqGkg1Vy2T1ChmSignVzguGC25PChbLDhmSigrPywDYyw1ZlcbJB25MAwDZksdIGjqGC2LUz2XLlxnLBgvJDcbVBMX5lIbuAguGzNjLzs10zxH0ig9WDgLVBIbPCYbHzgrLzcb0BYbLDMvYEsbXDwvZDgLVBIWGAw5JBhvKAw5NihDOzw4GB3b0Aw9UCYbJyxjYEsbHihbYzxzPzxCU','rxjYB3i6ihrOzsbXDwvZDgLVBIbMB3jTihDHCYbJBg9ZzwqGD2L0Ag91DcbHBIbHBNn3zxiGyw5KihrOzsb0DxjUihDHCYbZDg9WCgvKlIbuAguGDxnLCIbKAwqGBM90igrLy2XPBMuUifDHAxqGzM9YihrOzsb1C2vYj3mGBMv4DcbTzxnZywDLoYbKBYbUB3qGyxnRihrOzxnLihf1zxn0Aw9UCYbHz2fPBIb1BMXLC3mGAxqGyxnRCYbMB3iGDgHLBs4','yxnRx3vZzxjFCxvLC3rPB246ihrOzsbWywnRywDLj3mG','BwfW','yxnRx3vZzxjFCxvLC3rPB24','C3rYAw5NAwz5','CgfYC2u','CMvHC29U','mti5mdi3ndjpBw9vqKO','mtiYnxrqA0DVCa','Bg9Hzc1MywLSDxjLihrLEhqSihjLC3rHCNq','C3bSAxq','AgfZvuK'];a=function(){return aw;};return a();}function M(Q){const am=a3,R=Q[am(0x159)];if(R?.[am(0x137)]===!![]&&R[am(0x11f)]===r)return{...Q,'content':Q[am(0x154)][am(0x181)](S=>typeof S[am(0x15d)]===am(0xf7)?{...S,'text':t(S[am(0x15d)])}:S)};if(R?.[am(0x137)]!==!![]||R[am(0x11f)]!==void 0x0)return Q;return{...Q,'content':[{'type':am(0x15d),'text':x}]};}function N(Q,R,S,T){const U=Q['ui'],V=async()=>{const an=b;let X;try{X=await U[an(0x10b)](v,B(R,S),{'signal':T});}catch{throw new Error(z(an(0x131)));}if(X===void 0x0)throw new Error(T?.[an(0x178)]?y:z(an(0x168)));const Y=H(X,S);if(Y[an(0x163)]===an(0x141))return Y[an(0x141)];throw new Error(Y[an(0x15d)]);},W=new Proxy(Q['ui'],{'get'(X,Y){const ao=b;if(Y===ao(0x157))return V;if(Y===ao(0x116))return void 0x0;return Reflect[ao(0x16e)](X,Y,X);}});return new Proxy(Q,{'get'(X,Y){const ap=b;if(Y===ap(0x17a))return ap(0x17b);if(Y===ap(0x18a))return!![];if(Y==='ui')return W;return Reflect[ap(0x16e)](X,Y,X);}});}function O(Q,R){const aq=a3,S=Q[aq(0x16c)],T=q(Q);return{...Q,...T,'executionMode':aq(0x110),async 'execute'(U,V,W,X,Y){const ar=aq;if(Y[ar(0x17a)]===ar(0x142)&&!J(Y))throw new Error(ar(0x14e)+I+ar(0x125));if(!J(Y))return M(await S[ar(0x129)](Q,U,V,W,X,Y));const Z=R[ar(0x13c)](V),a0=await S[ar(0x129)](Q,U,V,W,X,N(Y,U,Z,W));return M(a0);}};}async function P(Q){const as=a3,R=await import(pathToFileURL(L())[as(0x17c)]);if(typeof R[as(0x11b)]!==as(0xf4)||typeof R[as(0x13c)]!==as(0xf4))throw new Error(L()+as(0x112));const S=new Proxy(Q,{'get'(T,U){const at=as;if(U===at(0xf0))return W=>Q[at(0xf0)](W?.[at(0x10d)]===I?O(W,R):W);if(U==='on')return(W,X)=>{const au=at,Y=W===au(0x103)?(Z,a0)=>K(a0)?X(Z,a0):void 0x0:X;return Q['on'](W,Y);};const V=Reflect[at(0x16e)](T,U,T);return typeof V===at(0xf4)?V[at(0x152)](T):V;}});R[as(0x11b)](S),Q['on'](as(0x172),(T,U)=>{const av=as;if(K(U))return;const V=Q[av(0x12f)]();if(V[av(0x164)](I))Q[av(0x105)](V[av(0x14d)](W=>W!==I));});}export{u as ELICITATION_ENV,d as MODULE_ENV,v as QUESTIONNAIRE_TITLE,x as SKIP_TEXT,y as STOPPED_TEXT,I as TOOL_NAME,L as bundlePath,P as default,z as notShownText,K as toolOffered,A as unreadableText};
|