feat(cindy-web-search): add page content extraction - #86
Conversation
|
| Filename | Overview |
|---|---|
| cindy-web-search/main.js | Implements the new Tavily extraction flow with URL validation, explicit confirmation, classified errors, response limits, and untrusted-content metadata. |
| cindy-web-search/ghost.json | Declares the new tool and synchronizes its consent, cost, output, and safety contract while retaining the existing host and secret boundary. |
| .tests/cindy-web-search.test.mjs | Adds broad coverage for request construction, URL rejection, confirmation, response parsing, truncation, and error redaction. |
| cindy-web-search/settings.html | Explains that the existing Tavily key independently enables user-confirmed page extraction. |
| cindy-web-search/locales/en.json | Adds synchronized English descriptions for page extraction and its consent and safety boundaries. |
| cindy-web-search/locales/ja.json | Adds synchronized Japanese descriptions for page extraction and its consent and safety boundaries. |
| cindy-web-search/locales/ko.json | Adds synchronized Korean descriptions for page extraction and its consent and safety boundaries. |
| cindy-web-search/locales/zh-CN.json | Adds synchronized Chinese descriptions for page extraction and its consent and safety boundaries. |
Sequence Diagram
sequenceDiagram
participant U as User
participant A as Cindy Agent
participant P as Web Search Plugin
participant H as Cindy Host
participant T as Tavily Extract
U->>A: Confirm public URL may be sent
A->>P: "fetch_page(url, confirm_public_url=true)"
P->>P: Validate and normalize URL
P->>H: cindy.fetch(api.tavily.com/extract)
H->>T: Inject Tavily credential and send URL
T-->>H: Extract response
H-->>P: Status and response body
P->>P: Validate size/shape and truncate content
P-->>A: Markdown marked as untrusted
Reviews (7): Last reviewed commit: "fix(cindy-web-search): require page URL ..." | Re-trigger Greptile
当前自动门禁尚未通过(head
|
|
🤖 Cindy Automated Review / Cindy 自动审查(head aaf5ae1) Security Design Duplication N/A — this extends the existing Web Search plugin rather than adding a new plugin. The PR also explains why it reuses Tavily Extract instead of introducing TinyFish. Process ✅ The packaged-content version is bumped from 1.3.2 to 1.4.0; the four locales and paired READMEs are synchronized; the actual PR commit has a matching Signed-off-by and DCO passes; no bundled dependency/license update is needed. ❓ The required Verify pull request workflow is still History ✅ No prior Issues
Other bot feedback: Greptile’s current-head 5/5 found no actionable defect; the two issues above were independently reproduced from the current raw head. No unresolved review thread or DCO phantom-commit report exists. Verdict: Complete contract: |
当前合并门禁仍未通过(head
|
aaf5ae1 to
37d61b2
Compare
|
已修复 Cindy 自动审查指出的两个 P1,并同步到最新
原有安全边界保持不变:反斜杠、控制字符、内嵌凭证、非 HTTP(S)、明显私网/回环/保留地址和超长 URL 仍在网络请求前拒绝;没有新增 host、secret、slot、依赖或权限。 本地验证:
修复 commit: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 37d61b2b4a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
在
最新 head 本地验证:
|
当前合并门禁未通过(head
|
|
@codex review |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Additional hardening is now on the PR head in
Validation on the exact committed head:
|
Signed-off-by: Battleplus <3559424769@qq.com>
Signed-off-by: Battleplus <3559424769@qq.com>
Signed-off-by: Battleplus <3559424769@qq.com>
Signed-off-by: Battleplus <3559424769@qq.com>
Signed-off-by: Battleplus <3559424769@qq.com>
967753e to
7781e25
Compare
|
Validation refreshed after the branch was rebased onto current
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7781e25ad8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: Battleplus <3559424769@qq.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 208b899b64
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: Battleplus <3559424769@qq.com>
Signed-off-by: Battleplus <3559424769@qq.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cfa6e226d8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: Battleplus <3559424769@qq.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 30e5d5458e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: Battleplus <3559424769@qq.com>
|
Want your agent to iterate on Greptile's feedback? Try greploops. |
|
最新 head |
|
🤖 Cindy 自动审查 / Cindy Automated Review(head 0b0b6a8) Security — Pass. Design — Pass. The Duplication — N/A. This extends the existing Web Search plugin; it does not add a second plugin or provider-specific duplicate. Process — Needs maintainer action. Version 1.4.0, four locales, paired READMEs, DCO, and Greptile are green; the actual PR commit list contains 10 commits and DCO is passing. All review threads are resolved. However, Verify pull request run 31666384309 is History — Pass. No prior Issues
Verdict: ❓ Needs maintainer judgement. Code-side P1 findings are closed; do not merge until the required workflow and manual review are complete. Complete contract: |
当前合并门禁未通过(head
|
What changed / 改了什么
Why / 为什么
search_web returns titles, URLs, and snippets but cannot read a selected result’s full content. Tavily Extract reuses the plugin’s existing host and secret, so no new network host, slot, secret, dependency, Node worker, OAuth scope, provisioning audience, or minimum Cindy version change is needed.
Addresses makecindy/cindy#2401.
This overlaps mechanically with #70 in Web Search files and may require a rebase after either PR lands.
Tool contract / 工具契约
Call:
The Agent must obtain explicit user confirmation before setting confirm_public_url=true and must never infer it. The full path/query is sent to Tavily; browser-local fragments are removed. Browser login and page scripts are not supported.
Success returns provider, url, content, format, extract_depth, content_chars, truncated, and content_is_untrusted. Missing-key and provider errors are actionable and do not expose secrets or upstream response bodies.
Verification / 验证
Checklist
Sensitive changes / 敏感变更
This adds a new page-reading tool and therefore requires maintainer manual review. The code-side review threads are resolved, but the required Verify workflow remains action_required / not run on this fork head. Do not merge until maintainers run the repository gates and approve the sensitive capability.