@agimon-ai/po-web-search 0.0.0-alpha.1
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/LICENSE +21 -0
- package/NOTICE +14 -0
- package/README.md +33 -0
- package/dist/apiContracts.cjs +17 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +53 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +13 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/extensions/server.cjs +26 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +22 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/extensions/web.mjs +159 -0
- package/dist/extensions/web.mjs.map +1 -0
- package/dist/index.cjs +3 -0
- package/dist/index.d.mts +74 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1 -0
- package/dist/webRunTool-BkYexFJr.mjs +337 -0
- package/dist/webRunTool-BkYexFJr.mjs.map +1 -0
- package/dist/webRunTool-CuCm5OZL.cjs +342 -0
- package/dist/webRunTool-CuCm5OZL.cjs.map +1 -0
- package/licenses/Codex-Apache-2.0.txt +201 -0
- package/package.json +109 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Vuong Ngo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
This package includes portions adapted from OpenAI Codex.
|
|
2
|
+
Copyright 2025 OpenAI
|
|
3
|
+
https://github.com/openai/codex
|
|
4
|
+
Source revision: b56a579fc6
|
|
5
|
+
|
|
6
|
+
Adapted files:
|
|
7
|
+
- src/constants/webRun.ts: the web.run tool description (codex-rs/ext/web-search/web_run_description.md)
|
|
8
|
+
- src/schemas/webRun.ts: the search command schema (codex-rs/codex-api/src/search.rs)
|
|
9
|
+
- src/services/recentConversation/index.ts: the conversation tail (codex-rs/ext/web-search/src/history.rs, codex-rs/tools/src/response_history.rs)
|
|
10
|
+
- src/extensions/workspaces/sessions/(frontend)/tool/_lib/webRunToolView.ts: the search action summary (codex-rs/ext/web-search/src/tool.rs, codex-rs/tui/src/history_cell/search.rs)
|
|
11
|
+
|
|
12
|
+
These portions were modified for Po and are licensed under Apache-2.0.
|
|
13
|
+
A copy is included in licenses/Codex-Apache-2.0.txt.
|
|
14
|
+
The package's MIT license continues to apply to its original code.
|
package/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# @agimon-ai/po-web-search
|
|
2
|
+
|
|
3
|
+
Search the web using the ChatGPT subscription sign-in that Po features share (Image generation, Web search, Voice). This is a port of Codex's standalone `web.run` tool. Credentials stay inside the Po host. No API-key fallback or automatic retries.
|
|
4
|
+
|
|
5
|
+
## Activation
|
|
6
|
+
|
|
7
|
+
This is an optional `web-search` layer. Register `@agimon-ai/po-web-search` under a layer's `packages` in your modes config, then include that layer in your chosen major mode. The repository's local `copilot` mode includes it for development; published starter configs do not.
|
|
8
|
+
|
|
9
|
+
Sign in to **ChatGPT for Po features** under Settings > Providers (or with `/login`). Search entitlement and quota depend on your account. This uses the same private ChatGPT search endpoint as Codex (`backend-api/codex/alpha/search`), which may change without notice.
|
|
10
|
+
|
|
11
|
+
## Tool
|
|
12
|
+
|
|
13
|
+
`web_run` accepts the Codex search commands: `search_query`, `image_query`, `open`, `click`, `find`, `screenshot`, `finance`, `weather`, `sports`, `time`, and `response_length`. The schema is closed, so unknown fields are rejected before anything is sent.
|
|
14
|
+
|
|
15
|
+
Access defaults to cached results (no live page fetch). Set `PO_WEB_SEARCH_ACCESS` in the session environment to `cached`, `indexed`, or `live`. Any other value fails the call before a request is sent.
|
|
16
|
+
|
|
17
|
+
## What leaves Po
|
|
18
|
+
|
|
19
|
+
Every call sends the search commands the model wrote, the session id, a model id, and the access mode. When the active chat model is a ChatGPT (`openai-codex`) model, the call also sends a short excerpt of recent conversation: the last two user text messages and up to 4,000 characters of assistant text between them. Tool output, file contents, images, reasoning, and injected context are never sent. Sessions on other providers send no conversation text.
|
|
20
|
+
|
|
21
|
+
Search output is external, untrusted content that enters the model's context. Po's sandbox and approval layers still gate any action the model takes on it.
|
|
22
|
+
|
|
23
|
+
Sign-in, account, quota, and network failures are returned without retrying. Cancelling propagates the abort signal. The tool is not available inside the sandbox container, where host OAuth is not mounted.
|
|
24
|
+
|
|
25
|
+
## Structure and lifecycle
|
|
26
|
+
|
|
27
|
+
The generated server entry discovers the routed `webRun.server.ts` tool. The web entry discovers its matching `webRun.web.tsx` renderer. Tool execution uses the host's provider-neutral `webSearch` capability; extensions never receive tokens or headers. The host guards readiness and disposal, and refreshes existing OAuth credentials per call.
|
|
28
|
+
|
|
29
|
+
Portions are adapted from OpenAI Codex under Apache-2.0. See `NOTICE` and `licenses/`.
|
|
30
|
+
|
|
31
|
+
## Development
|
|
32
|
+
|
|
33
|
+
Run `pnpm exec nx run-many -t lint typecheck build test -p @agimon-ai/po-web-search` from the repository root. Renderer stories are deterministic. Their `mockup` status remains until human visual approval and runtime acceptance.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
5
|
+
//#region src/schemas/apiContracts.ts
|
|
6
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
7
|
+
const apiContracts = (0, require("@agimon-ai/po-core/apiContracts").defineApiContract)({
|
|
8
|
+
version: 1,
|
|
9
|
+
http: [],
|
|
10
|
+
sockets: [],
|
|
11
|
+
dynamic: []
|
|
12
|
+
});
|
|
13
|
+
//#endregion
|
|
14
|
+
exports.apiContracts = apiContracts;
|
|
15
|
+
exports.default = apiContracts;
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=apiContracts.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.cjs","names":["defineApiContract"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/po-core/apiContracts';\n\n/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */\nexport const apiContracts = defineApiContract({ version: 1, http: [], sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":";;;;;;AAGA,MAAa,gBAAA,4CAAeA,CAAAA,CAAAA,kBAAAA,CAAkB;CAAE,SAAS;CAAG,MAAM,CAAC;CAAG,SAAS,CAAC;CAAG,SAAS,CAAC;AAAE,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//#region src/schemas/apiContracts.d.ts
|
|
2
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
3
|
+
export declare const apiContracts: {
|
|
4
|
+
version: 1;
|
|
5
|
+
protocols?: Record<string, string> | undefined;
|
|
6
|
+
schemas?: Record<string, boolean | object> | undefined;
|
|
7
|
+
http: {
|
|
8
|
+
id: string;
|
|
9
|
+
scope: "global" | "session" | "workspace";
|
|
10
|
+
basePath?: string | undefined;
|
|
11
|
+
path: string;
|
|
12
|
+
method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
|
|
13
|
+
description: string;
|
|
14
|
+
availability?: string | undefined;
|
|
15
|
+
authentication: "device" | "none" | "owner";
|
|
16
|
+
parameters?: {
|
|
17
|
+
name: string;
|
|
18
|
+
in: "header" | "path" | "query";
|
|
19
|
+
required: boolean;
|
|
20
|
+
schema: boolean | object;
|
|
21
|
+
}[] | undefined;
|
|
22
|
+
body?: {
|
|
23
|
+
contentType: string;
|
|
24
|
+
contentTypes?: string[] | undefined;
|
|
25
|
+
required: boolean;
|
|
26
|
+
schema: boolean | object;
|
|
27
|
+
} | undefined;
|
|
28
|
+
responses: Record<string, {
|
|
29
|
+
description: string;
|
|
30
|
+
contentType?: string | undefined;
|
|
31
|
+
schema?: boolean | object | undefined;
|
|
32
|
+
events?: Record<string, boolean | object> | undefined;
|
|
33
|
+
}>;
|
|
34
|
+
}[];
|
|
35
|
+
sockets: {
|
|
36
|
+
id: string;
|
|
37
|
+
scope: "global" | "session" | "workspace";
|
|
38
|
+
description: string;
|
|
39
|
+
availability?: string | undefined;
|
|
40
|
+
service: string;
|
|
41
|
+
member: string;
|
|
42
|
+
direction: "client-to-server" | "server-to-client";
|
|
43
|
+
kind: "channel" | "method" | "state";
|
|
44
|
+
input: boolean | object;
|
|
45
|
+
output?: boolean | object | undefined;
|
|
46
|
+
errors?: boolean | object | undefined;
|
|
47
|
+
}[];
|
|
48
|
+
dynamic: string[];
|
|
49
|
+
gaps?: string[] | undefined;
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { apiContracts as default };
|
|
53
|
+
//# sourceMappingURL=apiContracts.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts"],"mappings":";;qBAGa"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineApiContract } from "@agimon-ai/po-core/apiContracts";
|
|
2
|
+
//#region src/schemas/apiContracts.ts
|
|
3
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
4
|
+
const apiContracts = defineApiContract({
|
|
5
|
+
version: 1,
|
|
6
|
+
http: [],
|
|
7
|
+
sockets: [],
|
|
8
|
+
dynamic: []
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { apiContracts, apiContracts as default };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=apiContracts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/po-core/apiContracts';\n\n/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */\nexport const apiContracts = defineApiContract({ version: 1, http: [], sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":";;;AAGA,MAAa,eAAe,kBAAkB;CAAE,SAAS;CAAG,MAAM,CAAC;CAAG,SAAS,CAAC;CAAG,SAAS,CAAC;AAAE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
5
|
+
const require_webRunTool = require("../webRunTool-CuCm5OZL.cjs");
|
|
6
|
+
let _agimon_ai_po_core_serverFacet = require("@agimon-ai/po-core/serverFacet");
|
|
7
|
+
//#region src/extensions/workspaces/sessions/(backend)/tool/webRun.server.ts
|
|
8
|
+
var webRun_server_default = (0, require("@agimon-ai/po-core/extensionFile").defineServerTool)(() => require_webRunTool.createWebRunTool());
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region generated/server.ts
|
|
11
|
+
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
12
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
13
|
+
...identity,
|
|
14
|
+
...value
|
|
15
|
+
};
|
|
16
|
+
const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
|
|
17
|
+
name: "@agimon-ai/po-web-search",
|
|
18
|
+
session: (context) => ({ get tools() {
|
|
19
|
+
return [via({ name: "web_run" }, at(webRun_server_default, context))];
|
|
20
|
+
} })
|
|
21
|
+
});
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.default = facet;
|
|
24
|
+
exports.facet = facet;
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=server.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.cjs","names":["defineServerTool","createWebRunTool","defineServerPlugin","toolWebRun"],"sources":["../../src/extensions/workspaces/sessions/(backend)/tool/webRun.server.ts","../../generated/server.ts"],"sourcesContent":["import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\n\nimport { createWebRunTool } from '../../../../../services/webRunTool';\n\nexport default defineServerTool(() => createWebRunTool());\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport toolWebRun from '../src/extensions/workspaces/sessions/(backend)/tool/webRun.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const facet = defineServerPlugin({\n name: '@agimon-ai/po-web-search',\n session: (context) => ({\n get tools(): DoomServerSessionPlugin['tools'] { return [via({ name: 'web_run' }, at(toolWebRun, context))]; },\n }),\n});\n\nexport default facet;\n"],"mappings":";;;;;;;AAIA,IAAA,yBAAA,6CAAeA,CAAAA,CAAAA,iBAAAA,OAAuBC,mBAAAA,iBAAiB,CAAC;;;ACExD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,SAAA,GAAQC,+BAAAA,mBAAAA,CAAmB;CACtC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAA0C;EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,UAAU,GAAG,GAAGC,uBAAY,OAAO,CAAC,CAAC;CAAG,EAC9G;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.mts","names":[],"sources":["../../generated/server.ts"],"mappings":";qBAWa,gDAAK"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { t as createWebRunTool } from "../webRunTool-BkYexFJr.mjs";
|
|
2
|
+
import { defineServerPlugin } from "@agimon-ai/po-core/serverFacet";
|
|
3
|
+
import { defineServerTool } from "@agimon-ai/po-core/extensionFile";
|
|
4
|
+
//#region src/extensions/workspaces/sessions/(backend)/tool/webRun.server.ts
|
|
5
|
+
var webRun_server_default = defineServerTool(() => createWebRunTool());
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region generated/server.ts
|
|
8
|
+
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
9
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
10
|
+
...identity,
|
|
11
|
+
...value
|
|
12
|
+
};
|
|
13
|
+
const facet = defineServerPlugin({
|
|
14
|
+
name: "@agimon-ai/po-web-search",
|
|
15
|
+
session: (context) => ({ get tools() {
|
|
16
|
+
return [via({ name: "web_run" }, at(webRun_server_default, context))];
|
|
17
|
+
} })
|
|
18
|
+
});
|
|
19
|
+
//#endregion
|
|
20
|
+
export { facet as default, facet };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=server.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["toolWebRun"],"sources":["../../src/extensions/workspaces/sessions/(backend)/tool/webRun.server.ts","../../generated/server.ts"],"sourcesContent":["import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\n\nimport { createWebRunTool } from '../../../../../services/webRunTool';\n\nexport default defineServerTool(() => createWebRunTool());\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport toolWebRun from '../src/extensions/workspaces/sessions/(backend)/tool/webRun.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const facet = defineServerPlugin({\n name: '@agimon-ai/po-web-search',\n session: (context) => ({\n get tools(): DoomServerSessionPlugin['tools'] { return [via({ name: 'web_run' }, at(toolWebRun, context))]; },\n }),\n});\n\nexport default facet;\n"],"mappings":";;;;AAIA,IAAA,wBAAe,uBAAuB,iBAAiB,CAAC;;;ACExD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,QAAQ,mBAAmB;CACtC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAA0C;EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,UAAU,GAAG,GAAGA,uBAAY,OAAO,CAAC,CAAC;CAAG,EAC9G;AACF,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { defineToolRenderer, defineWebPlugin } from "@agimon-ai/po-core/web";
|
|
2
|
+
import { MessageItem, MessageItemBody, MessageItemHeader, MessageItemStatus, resultTextLines, toolTone } from "@agimon-ai/po-web-components";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
//#region src/extensions/workspaces/sessions/(frontend)/tool/_lib/webRunToolView.ts
|
|
5
|
+
const ACCESS_LABELS = [
|
|
6
|
+
"cached",
|
|
7
|
+
"indexed",
|
|
8
|
+
"live"
|
|
9
|
+
];
|
|
10
|
+
const MAX_URL = 2048;
|
|
11
|
+
function entries(value) {
|
|
12
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === "object" && item !== null) : [];
|
|
13
|
+
}
|
|
14
|
+
function string(value) {
|
|
15
|
+
return typeof value === "string" ? value : "";
|
|
16
|
+
}
|
|
17
|
+
function literalUrl(refId) {
|
|
18
|
+
return URL.canParse(refId) ? refId : "";
|
|
19
|
+
}
|
|
20
|
+
function queryAction(value) {
|
|
21
|
+
const queries = entries(value).map((query) => string(query.q));
|
|
22
|
+
if (queries.length === 0) return void 0;
|
|
23
|
+
const first = queries[0];
|
|
24
|
+
return {
|
|
25
|
+
kind: "search",
|
|
26
|
+
detail: queries.length > 1 && first ? `${first} ...` : first
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function action(args) {
|
|
30
|
+
const search = queryAction(args.search_query) ?? queryAction(args.image_query);
|
|
31
|
+
if (search) return search;
|
|
32
|
+
const url = literalUrl(string(entries(args.open)[0]?.ref_id));
|
|
33
|
+
if (url) return {
|
|
34
|
+
kind: "open",
|
|
35
|
+
detail: url
|
|
36
|
+
};
|
|
37
|
+
const find = entries(args.find)[0];
|
|
38
|
+
if (find) {
|
|
39
|
+
const pattern = string(find.pattern);
|
|
40
|
+
const page = literalUrl(string(find.ref_id));
|
|
41
|
+
return {
|
|
42
|
+
kind: "find",
|
|
43
|
+
detail: pattern && page ? `'${pattern}' in ${page}` : pattern ? `'${pattern}'` : page,
|
|
44
|
+
pattern: !!pattern
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return { kind: "other" };
|
|
48
|
+
}
|
|
49
|
+
function summary(current, completed) {
|
|
50
|
+
if (current.kind === "open") return `${completed ? "Opened" : "Opening"} ${current.detail}`;
|
|
51
|
+
if (current.kind === "find") {
|
|
52
|
+
const verb = current.pattern ? completed ? "Searched for" : "Searching for" : completed ? "Searched page" : "Searching page";
|
|
53
|
+
return current.detail ? `${verb} ${current.detail}` : verb;
|
|
54
|
+
}
|
|
55
|
+
const detail = current.kind === "search" ? current.detail : "";
|
|
56
|
+
if (!detail) return completed ? "Searched the web" : current.kind === "other" ? "Browsing the web" : "Searching the web";
|
|
57
|
+
return `${completed ? "Searched the web" : "Searching the web"} for ${detail}`;
|
|
58
|
+
}
|
|
59
|
+
/** `details` is re-validated here: only http(s) URLs become links, everything else is ignored. */
|
|
60
|
+
function sources(details) {
|
|
61
|
+
if (typeof details !== "object" || details === null) return [];
|
|
62
|
+
return entries(details.sources).flatMap((source) => {
|
|
63
|
+
const url = string(source.url);
|
|
64
|
+
if (url.length > MAX_URL || !URL.canParse(url)) return [];
|
|
65
|
+
const parsed = new URL(url);
|
|
66
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return [];
|
|
67
|
+
return [{
|
|
68
|
+
url: parsed.href,
|
|
69
|
+
label: string(source.title).trim() || parsed.hostname
|
|
70
|
+
}];
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function webRunToolView({ args, result, running }) {
|
|
74
|
+
const details = result?.details;
|
|
75
|
+
const record = typeof details === "object" && details !== null ? details : {};
|
|
76
|
+
return {
|
|
77
|
+
summary: summary(action(args), !running),
|
|
78
|
+
access: ACCESS_LABELS.find((label) => label === record.access),
|
|
79
|
+
sharedConversation: record.sharedConversation === true,
|
|
80
|
+
sources: sources(details)
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region src/extensions/workspaces/sessions/(frontend)/tool/_components/WebRunToolMessage.tsx
|
|
85
|
+
/** Collapsed by default; `defaultExpanded` lets a story show the body. */
|
|
86
|
+
function WebRunToolMessage(props) {
|
|
87
|
+
const { result, output, running, isError, defaultExpanded = false } = props;
|
|
88
|
+
const view = webRunToolView(props);
|
|
89
|
+
const label = view.access ? `${view.access}${view.sharedConversation ? " · with recent conversation" : ""}` : "";
|
|
90
|
+
return /* @__PURE__ */ jsx(MessageItem, {
|
|
91
|
+
tone: toolTone({
|
|
92
|
+
running,
|
|
93
|
+
isError
|
|
94
|
+
}),
|
|
95
|
+
expandable: true,
|
|
96
|
+
defaultExpanded,
|
|
97
|
+
children: ({ expanded }) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(MessageItemHeader, {
|
|
98
|
+
title: "web search",
|
|
99
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
100
|
+
"data-testid": "tool-call-web_run",
|
|
101
|
+
className: "min-w-0 flex-1 truncate text-doom-text",
|
|
102
|
+
children: view.summary
|
|
103
|
+
}), label ? /* @__PURE__ */ jsx("span", {
|
|
104
|
+
className: "shrink-0 text-doom-faint",
|
|
105
|
+
children: label
|
|
106
|
+
}) : null]
|
|
107
|
+
}), expanded ? /* @__PURE__ */ jsxs(MessageItemBody, {
|
|
108
|
+
"data-testid": "tool-result-web_run",
|
|
109
|
+
className: "flex flex-col gap-2",
|
|
110
|
+
children: [
|
|
111
|
+
running ? /* @__PURE__ */ jsx(MessageItemStatus, {
|
|
112
|
+
tone: "running",
|
|
113
|
+
children: "searching"
|
|
114
|
+
}) : null,
|
|
115
|
+
isError ? /* @__PURE__ */ jsx(MessageItemStatus, {
|
|
116
|
+
tone: "error",
|
|
117
|
+
children: "failed"
|
|
118
|
+
}) : null,
|
|
119
|
+
!isError && view.sources.length > 0 ? /* @__PURE__ */ jsx("ul", {
|
|
120
|
+
"aria-label": "Sources",
|
|
121
|
+
className: "flex flex-col gap-1",
|
|
122
|
+
children: view.sources.map((source) => /* @__PURE__ */ jsx("li", {
|
|
123
|
+
className: "min-w-0 truncate",
|
|
124
|
+
children: /* @__PURE__ */ jsx("a", {
|
|
125
|
+
href: source.url,
|
|
126
|
+
target: "_blank",
|
|
127
|
+
rel: "noreferrer",
|
|
128
|
+
className: "text-doom-blue underline decoration-doom-blue/50",
|
|
129
|
+
children: source.label
|
|
130
|
+
})
|
|
131
|
+
}, source.url))
|
|
132
|
+
}) : null,
|
|
133
|
+
resultTextLines(result, output).map((line, index) => /* @__PURE__ */ jsx("span", {
|
|
134
|
+
className: `whitespace-pre-wrap break-words ${isError ? "text-doom-red" : "text-doom-dim"}`,
|
|
135
|
+
children: line
|
|
136
|
+
}, `${String(index)}-${line}`))
|
|
137
|
+
]
|
|
138
|
+
}) : null] })
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
//#endregion
|
|
142
|
+
//#region src/extensions/workspaces/sessions/(frontend)/tool/webRun.web.tsx
|
|
143
|
+
var webRun_web_default = defineToolRenderer({ message: WebRunToolMessage });
|
|
144
|
+
//#endregion
|
|
145
|
+
//#region generated/web.ts
|
|
146
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
147
|
+
...identity,
|
|
148
|
+
...value
|
|
149
|
+
};
|
|
150
|
+
const webPlugin = defineWebPlugin({
|
|
151
|
+
id: "web-search",
|
|
152
|
+
session: { get toolRenderers() {
|
|
153
|
+
return [via({ tools: ["web_run"] }, webRun_web_default)];
|
|
154
|
+
} }
|
|
155
|
+
});
|
|
156
|
+
//#endregion
|
|
157
|
+
export { webPlugin };
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=web.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.mjs","names":["toolWebRun"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/_lib/webRunToolView.ts","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/WebRunToolMessage.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/webRun.web.tsx","../../generated/web.ts"],"sourcesContent":["// Copyright 2025 OpenAI\n// SPDX-License-Identifier: Apache-2.0\n// Modified for Po from codex-rs ext/web-search/src/tool.rs (command_action), core/src/web_search.rs\n// (web_search_action_detail) and tui/src/history_cell/search.rs (summary wording).\n\nimport type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\n\ntype Action =\n | { kind: 'search'; detail: string }\n | { kind: 'open'; detail: string }\n | { kind: 'find'; detail: string; pattern: boolean }\n | { kind: 'other' };\n\nexport interface WebRunSourceView {\n url: string;\n label: string;\n}\n\nconst ACCESS_LABELS = ['cached', 'indexed', 'live'] as const;\nconst MAX_URL = 2048;\n\nfunction entries(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value)\n ? value.filter((item): item is Record<string, unknown> => typeof item === 'object' && item !== null)\n : [];\n}\n\nfunction string(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction literalUrl(refId: string): string {\n return URL.canParse(refId) ? refId : '';\n}\n\nfunction queryAction(value: unknown): Action | undefined {\n const queries = entries(value).map((query) => string(query.q));\n if (queries.length === 0) return undefined;\n const first = queries[0]!;\n return { kind: 'search', detail: queries.length > 1 && first ? `${first} ...` : first };\n}\n\nfunction action(args: Record<string, unknown>): Action {\n const search = queryAction(args.search_query) ?? queryAction(args.image_query);\n if (search) return search;\n const url = literalUrl(string(entries(args.open)[0]?.ref_id));\n if (url) return { kind: 'open', detail: url };\n const find = entries(args.find)[0];\n if (find) {\n const pattern = string(find.pattern);\n const page = literalUrl(string(find.ref_id));\n const detail = pattern && page ? `'${pattern}' in ${page}` : pattern ? `'${pattern}'` : page;\n return { kind: 'find', detail, pattern: !!pattern };\n }\n return { kind: 'other' };\n}\n\nfunction summary(current: Action, completed: boolean): string {\n if (current.kind === 'open') return `${completed ? 'Opened' : 'Opening'} ${current.detail}`;\n if (current.kind === 'find') {\n const verb = current.pattern\n ? completed\n ? 'Searched for'\n : 'Searching for'\n : completed\n ? 'Searched page'\n : 'Searching page';\n return current.detail ? `${verb} ${current.detail}` : verb;\n }\n const detail = current.kind === 'search' ? current.detail : '';\n if (!detail)\n return completed ? 'Searched the web' : current.kind === 'other' ? 'Browsing the web' : 'Searching the web';\n return `${completed ? 'Searched the web' : 'Searching the web'} for ${detail}`;\n}\n\n/** `details` is re-validated here: only http(s) URLs become links, everything else is ignored. */\nfunction sources(details: unknown): WebRunSourceView[] {\n if (typeof details !== 'object' || details === null) return [];\n return entries((details as { sources?: unknown }).sources).flatMap((source) => {\n const url = string(source.url);\n if (url.length > MAX_URL || !URL.canParse(url)) return [];\n const parsed = new URL(url);\n if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') return [];\n return [{ url: parsed.href, label: string(source.title).trim() || parsed.hostname }];\n });\n}\n\nexport function webRunToolView({ args, result, running }: Pick<ToolMessageRenderProps, 'args' | 'result' | 'running'>) {\n const details: unknown = result?.details;\n const record = typeof details === 'object' && details !== null ? (details as Record<string, unknown>) : {};\n return {\n summary: summary(action(args), !running),\n access: ACCESS_LABELS.find((label) => label === record.access),\n sharedConversation: record.sharedConversation === true,\n sources: sources(details),\n };\n}\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport {\n MessageItem,\n MessageItemBody,\n MessageItemHeader,\n MessageItemStatus,\n resultTextLines,\n toolTone,\n} from '@agimon-ai/po-web-components';\n\nimport { webRunToolView } from '../_lib/webRunToolView';\n\n/** Collapsed by default; `defaultExpanded` lets a story show the body. */\nexport function WebRunToolMessage(props: ToolMessageRenderProps & { defaultExpanded?: boolean }) {\n const { result, output, running, isError, defaultExpanded = false } = props;\n const view = webRunToolView(props);\n const label = view.access ? `${view.access}${view.sharedConversation ? ' · with recent conversation' : ''}` : '';\n return (\n <MessageItem tone={toolTone({ running, isError })} expandable defaultExpanded={defaultExpanded}>\n {({ expanded }) => (\n <>\n <MessageItemHeader title=\"web search\">\n <span data-testid=\"tool-call-web_run\" className=\"min-w-0 flex-1 truncate text-doom-text\">\n {view.summary}\n </span>\n {label ? <span className=\"shrink-0 text-doom-faint\">{label}</span> : null}\n </MessageItemHeader>\n {expanded ? (\n <MessageItemBody data-testid=\"tool-result-web_run\" className=\"flex flex-col gap-2\">\n {running ? <MessageItemStatus tone=\"running\">searching</MessageItemStatus> : null}\n {isError ? <MessageItemStatus tone=\"error\">failed</MessageItemStatus> : null}\n {!isError && view.sources.length > 0 ? (\n <ul aria-label=\"Sources\" className=\"flex flex-col gap-1\">\n {view.sources.map((source) => (\n <li key={source.url} className=\"min-w-0 truncate\">\n <a\n href={source.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-doom-blue underline decoration-doom-blue/50\"\n >\n {source.label}\n </a>\n </li>\n ))}\n </ul>\n ) : null}\n {resultTextLines(result, output).map((line, index) => (\n <span\n key={`${String(index)}-${line}`}\n className={`whitespace-pre-wrap break-words ${isError ? 'text-doom-red' : 'text-doom-dim'}`}\n >\n {line}\n </span>\n ))}\n </MessageItemBody>\n ) : null}\n </>\n )}\n </MessageItem>\n );\n}\n","import { defineToolRenderer } from '@agimon-ai/po-core/web';\n\nimport { WebRunToolMessage } from './_components/WebRunToolMessage';\n\nexport default defineToolRenderer({ message: WebRunToolMessage });\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport toolWebRun from '../src/extensions/workspaces/sessions/(frontend)/tool/webRun.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'web-search',\n session: {\n get toolRenderers(): WebPluginContributions['toolRenderers'] { return [via({ tools: ['web_run'] }, toolWebRun)]; },\n },\n});\n"],"mappings":"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"}
|
package/dist/index.cjs
ADDED
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import { DoomHeadlessTool } from "@agimon-ai/po-core/headless";
|
|
3
|
+
//#region src/schemas/webRun.d.ts
|
|
4
|
+
declare const WebRunParamsSchema: Type.TObject<{
|
|
5
|
+
search_query: Type.TOptional<Type.TArray<Type.TObject<{
|
|
6
|
+
q: Type.TString;
|
|
7
|
+
recency: Type.TOptional<Type.TInteger>;
|
|
8
|
+
domains: Type.TOptional<Type.TArray<Type.TString>>;
|
|
9
|
+
}>>>;
|
|
10
|
+
image_query: Type.TOptional<Type.TArray<Type.TObject<{
|
|
11
|
+
q: Type.TString;
|
|
12
|
+
recency: Type.TOptional<Type.TInteger>;
|
|
13
|
+
domains: Type.TOptional<Type.TArray<Type.TString>>;
|
|
14
|
+
}>>>;
|
|
15
|
+
open: Type.TOptional<Type.TArray<Type.TObject<{
|
|
16
|
+
ref_id: Type.TString;
|
|
17
|
+
lineno: Type.TOptional<Type.TInteger>;
|
|
18
|
+
}>>>;
|
|
19
|
+
click: Type.TOptional<Type.TArray<Type.TObject<{
|
|
20
|
+
ref_id: Type.TString;
|
|
21
|
+
id: Type.TInteger;
|
|
22
|
+
}>>>;
|
|
23
|
+
find: Type.TOptional<Type.TArray<Type.TObject<{
|
|
24
|
+
ref_id: Type.TString;
|
|
25
|
+
pattern: Type.TString;
|
|
26
|
+
}>>>;
|
|
27
|
+
screenshot: Type.TOptional<Type.TArray<Type.TObject<{
|
|
28
|
+
ref_id: Type.TString;
|
|
29
|
+
pageno: Type.TInteger;
|
|
30
|
+
}>>>;
|
|
31
|
+
finance: Type.TOptional<Type.TArray<Type.TObject<{
|
|
32
|
+
ticker: Type.TString;
|
|
33
|
+
type: Type.TUnion<Type.TLiteral<string>[]>;
|
|
34
|
+
market: Type.TOptional<Type.TString>;
|
|
35
|
+
}>>>;
|
|
36
|
+
weather: Type.TOptional<Type.TArray<Type.TObject<{
|
|
37
|
+
location: Type.TString;
|
|
38
|
+
start: Type.TOptional<Type.TString>;
|
|
39
|
+
duration: Type.TOptional<Type.TInteger>;
|
|
40
|
+
}>>>;
|
|
41
|
+
sports: Type.TOptional<Type.TArray<Type.TObject<{
|
|
42
|
+
tool: Type.TOptional<Type.TUnion<Type.TLiteral<string>[]>>;
|
|
43
|
+
fn: Type.TUnion<Type.TLiteral<string>[]>;
|
|
44
|
+
league: Type.TUnion<Type.TLiteral<string>[]>;
|
|
45
|
+
team: Type.TOptional<Type.TString>;
|
|
46
|
+
opponent: Type.TOptional<Type.TString>;
|
|
47
|
+
date_from: Type.TOptional<Type.TString>;
|
|
48
|
+
date_to: Type.TOptional<Type.TString>;
|
|
49
|
+
num_games: Type.TOptional<Type.TInteger>;
|
|
50
|
+
locale: Type.TOptional<Type.TString>;
|
|
51
|
+
}>>>;
|
|
52
|
+
time: Type.TOptional<Type.TArray<Type.TObject<{
|
|
53
|
+
utc_offset: Type.TString;
|
|
54
|
+
}>>>;
|
|
55
|
+
response_length: Type.TOptional<Type.TUnion<Type.TLiteral<string>[]>>;
|
|
56
|
+
}>;
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region src/services/webRunTool/index.d.ts
|
|
59
|
+
export declare function createWebRunTool(): DoomHeadlessTool<typeof WebRunParamsSchema>;
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/services/webRunTool/type.d.ts
|
|
62
|
+
type WebSearchAccess = 'cached' | 'indexed' | 'live';
|
|
63
|
+
interface WebRunSource {
|
|
64
|
+
url: string;
|
|
65
|
+
title?: string;
|
|
66
|
+
}
|
|
67
|
+
interface WebRunDetails {
|
|
68
|
+
access: WebSearchAccess;
|
|
69
|
+
sharedConversation: boolean;
|
|
70
|
+
sources: WebRunSource[];
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export type { WebRunDetails, WebRunSource };
|
|
74
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/schemas/webRun.ts","../src/services/webRunTool/index.ts","../src/services/webRunTool/type.ts"],"mappings":";;;cAgCa,oBAAkB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBCiBf,oBAAoB,wBAAwB;;;KCjDhD;UAEK;EACf;EACA;;UAGe;EACf,QAAQ;EACR;EACA,SAAS"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as createWebRunTool } from "./webRunTool-BkYexFJr.mjs";
|