Commit Graph
276 Commits
Author SHA1 Message Date
dxb 9d65cbf500 feat(doc): add verified insertion before blocks 2026-08-26 09:53:11 +08:00
dxb 9e1c511523 fix(doc): harden shortcut reliability 2026-08-26 09:53:11 +08:00
liyuan333 7ab86b82f4 Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-26 08:40:38 +08:00
liyuan333 7a9bac0a05 Merge branch 'main' into fix/report-entry-submit-require-recipient 2026-08-25 23:59:48 +08:00
liyuan333 a316222584 Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-25 23:55:07 +08:00
liyuan333 879054000d Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-25 22:21:45 +08:00
liyuan f50f086271 Merge remote-tracking branch 'upstream/main' into fix/report-entry-submit-require-recipient
# Conflicts:
#	scripts/policy/interface-migrations/approved-flag-migrations-v1.json
2026-08-25 22:07:51 +08:00
赤川 0fe9dd8ba0 Merge branch 'main' into fix/markdown-split 2026-08-25 21:46:42 +08:00
chichuan c77046531e fix(ci): admit fork PRs without repository variables 2026-08-25 21:43:27 +08:00
liyuan 7f353b73a5 fix(security): drop IP-literal refusal from download URL validation
Confirmed with the product team that the official GUI client applies no
client-side SSRF interception to downloads, so the IP-literal refusal
was the last remaining client-side interception beyond transport
hygiene. Dedicated deployments make every host dimension (domain,
port, network location) unenumerable, and an IP-literal host is just
another network location.

- ValidateDownloadURL accepts any HTTPS host, IP literals included;
  HTTPS scheme, userinfo refusal, and per-hop redirect re-validation
  stay as the transport baseline
- this retires the third and last interception layer after the host
  allowlist removal and the dial-time public-IP refusal (be52ca5d)
- upload targets stay unaffected: trustedUploadHost keeps rejecting
  non-DingTalk/OSS hosts, so local file bytes cannot be PUT to an IP
- regressions: IP-literal URLs pass validation on the shared and chat
  download paths; userinfo and plain-HTTP URLs stay rejected
2026-08-25 21:07:18 +08:00
liyuan be52ca5d2a fix(security): remove dial-time public-IP refusal from download client
Customer round-2 testing on the dedicated deployment (Jingbo) found the
storage domain resolving to a customer-intranet address (10.254.87.52),
which the dial-time public-IP policy refused: dedicated storage can be
deployed inside the customer network, so its resolved network location
is as unenumerable as its domain and port.

- delete the public-IP policy, the IANA special-purpose denylist, and
  the NAT64 embedded-IPv4 re-validation introduced in 617b780a;
  downloads now dial the service-issued host directly, still ignoring
  environment proxies
- align with the official GUI client, which applies no client-side
  SSRF interception to downloads: no command accepts a user-supplied
  download URL, TLS hostname verification pins the connection to the
  requested domain, redirects are re-validated per hop, and credential
  headers are stripped once a redirect leaves the original origin
- uploads keep the static DingTalk/OSS default-port trust boundary
- simplify SetSecureDownloadDialTargetForTest to a single dial seam
2026-08-25 20:40:47 +08:00
赤川 7e1d595036 Merge branch 'main' into fix/markdown-split 2026-08-25 20:22:05 +08:00
liyuan 6134d413f5 fix(security): restore default-port-only HTTPS rule for upload URLs
Review finding on 1ba6bec8: relaxing ValidateDownloadURL to accept
non-default HTTPS ports also widened upload targets, because the upload
validator reuses it and only re-imposed the host trust set.

- validateUploadURL now also rejects non-default ports, making the
  upload trust boundary identical to the pre-removal policy (trusted
  DingTalk/OSS hosts on the default port)
- DingTalk/OSS upload endpoints always serve HTTPS on 443, so unlike
  dedicated-deployment downloads there is no legitimate non-default
  port scenario for uploads
- regressions: trusted-host:8443 upload targets are rejected for both
  public-cloud and dedicated hosts
2026-08-25 20:05:06 +08:00
liyuan 1ba6bec8c1 fix(security): accept non-default HTTPS ports for download URLs
Customer testing on a dedicated deployment found real download URLs served
on a non-default HTTPS port (e.g. 8443) by the dedicated storage domain,
which the inherited default-port-only rule rejected.

- drop the 443-only restriction from ValidateDownloadURL; HTTPS scheme,
  domain-only hosts (no IP literals), and no-userinfo rules stay
- the port is not a trust signal: SSRF protection lives at dial time in
  the port-agnostic public-IP policy
- redirect hygiene unchanged: a port change is a cross-origin redirect
  and still strips service credential headers (new regression guard)
- dedicated-deployment regression: same host on a non-default port is
  accepted by URL validation and downloads successfully
2026-08-25 19:25:20 +08:00
chichuan 4a4062d09e fix(ci): bind required checks to GitHub Actions 2026-08-25 19:20:57 +08:00
chichuan 4815fcc7fc fix(ci): merge App-owned PRs synchronously 2026-08-25 18:13:38 +08:00
liyuan333 15a7b0a0a7 Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-25 17:55:54 +08:00
liyuan 617b780a76 fix(security): block IPv4-embedded IPv6 transition ranges in publicIP
- re-validate NAT64 well-known prefix answers (64:ff9b::/96) against the
  embedded IPv4 address: DNS64-synthesized answers for public IPv4-only
  hosts keep working while embedded loopback/private/special addresses
  are refused before dialing
- refuse NAT64 local-use (64:ff9b:1::/48) outright: the IPv4 embedding
  is deployment-specific and cannot be extracted reliably
- refuse Teredo (2001::/32) outright as part of the transition-mechanism
  audit; 6to4 (2002::/16) was already refused and IPv4-mapped addresses
  are normalized via Unmap before checks
- add dial-layer regression: a hostile AAAA answer embedding 127.0.0.1
  fails before any dial attempt
2026-08-25 16:56:20 +08:00
chichuan 09b0a59949 revert: remove edu and college vendor extensions 2026-08-25 16:55:40 +08:00
liyuan 4423af1af2 fix(security): keep upload host trust and harden non-public IP policy
- restore the pre-existing DingTalk/OSS trusted host requirement for
  upload target URLs via a dedicated upload validator
- extend the dial-time non-public IP denylist with IANA special-purpose
  ranges (0.0.0.0/8, 192.88.99.0/24, 100::/64, 2002::/16, 3fff::/20,
  5f00::/16)
- document that download credential headers follow the service-issued
  URL as-is on the first hop (same authenticated response issues both);
  cross-host redirects keep stripping them
2026-08-25 15:38:49 +08:00
CHHH 3030faf73d Merge branch 'main' into fix/markdown-split 2026-08-25 11:10:03 +08:00
liyuan333 9afe9c1436 Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-25 10:23:24 +08:00
chichuan ea4a463956 fix: add bounded command typo guidance 2026-08-25 00:49:59 +08:00
chichuan f684c412ea docs: amend v1.0.60-beta.2 release notes 2026-08-24 23:37:21 +08:00
xiatian 29a0dde9d4 Merge remote-tracking branch 'upstream/main' into codex/sheet-float-image-local-file 2026-08-24 22:02:38 +08:00
chichuan aa265acd50 chore(release): prepare v1.0.60-beta.2 2026-08-24 21:46:54 +08:00
赤川 1c90623e31 Merge branch 'main' into refresh_legacy_slot_fix 2026-08-24 21:38:34 +08:00
liyuan ab883f11f0 fix(report): require --to-user-ids on entry submit
Reject report submissions without visible recipients at the CLI layer
(Cobra required flag + fail-closed on blank values) while keeping the
openAPI create_report parameter optional (bug 85724185).
2026-08-24 21:14:40 +08:00
liyuan 4381a54efa test: adapt mock_mcp download e2e and coverage to proxy-free secure client 2026-08-24 21:00:00 +08:00
xiatian 1b6a592387 Merge remote-tracking branch 'upstream/main' into codex/sheet-float-image-local-file 2026-08-24 20:59:28 +08:00
赤川 e58f255476 Merge branch 'main' into refresh_legacy_slot_fix 2026-08-24 20:28:19 +08:00
赤川 79f4f66d34 Merge branch 'main' into feat/migrate-edu-contact 2026-08-24 20:25:16 +08:00
半圭 6df6b3f8dd docs(release): use PR-numbered fragment name for drive permission get-setting 2026-08-24 19:46:13 +08:00
半圭 227861a71d feat(drive): add permission get-setting command 2026-08-24 19:46:13 +08:00
赤川 7844b59a8c Merge branch 'main' into refresh_legacy_slot_fix 2026-08-24 19:08:53 +08:00
muling.cs 0bfb1ff1de chore: add release fragment for legacy global slot recovery 2026-08-24 18:11:07 +08:00
nitonitori 1ba326279f fix(markdown): 修复并优化Markdown追加内容分片逻辑
- 重新实现Markdown追加分片,确保每个分片为完整独立的顶级区块序列,满足update_document追加模式要求
- 修复分片过程中丢失换行符导致标题等Markdown元素识别错误的问题
- 解决超大表格和代码块被截断在单元格或代码围栏中间的问题
- 修正读取回写验证,避免与服务器未接收的内容比较导致验证失败
- 统一多条Markdown写入路径,统一分片逻辑与分片大小限制(30000字符)
- doc update --index参数在内容需分片时改为失败,避免不可预期的插入位置
- 添加分片写入过程中的降级变更通知字段,明确分片对文档结构的影响
- 优化写入流水线,增强超长内容自动分片支持和错误处理逻辑
- 补充分片相关的单元测试,保障内容完整性及边界拆分行为
2026-08-24 15:15:11 +08:00
xiatian 583d31141d feat(sheet): support local files for float images 2026-08-24 14:48:12 +08:00
听荷 f3e98d55e8 feat: add edu & college vendor extension commands
Add five hidden vendor extension commands for education scenarios:
- edu-contact: school/class/family/teacher contact management
- edu-group: student/class group lifecycle
- edu-app: homework, notices, report cards, diplomas, class circles
- edu-familygroup: family group management, child binding, app permissions
- college-contact: university dept/employee/alumni/graduate management

All route to dedicated MCP servers via callMCPToolOnServer with endpoints
registered in openSupplementServers (helper-only, not VisibleProducts).

Includes: helper implementations, dispatch tests, mono/multi skill docs,
coverage.yaml registration, context-budget compliance, and .changes fragment.
2026-08-24 13:30:32 +08:00
zengyouling.zyl 82dc2b5e5e Merge remote-tracking branch 'upstream/main' into feat/drive-permission-pagination 2026-08-24 11:57:48 +08:00
zengyouling.zyl fb1847d62e Merge remote-tracking branch 'upstream/main' into feat/drive-permission-pagination 2026-08-24 11:15:26 +08:00
陌渊 1633888290 Merge upstream/main: resolve shortcut count conflict + fix field-ids doc
- schemaPublishedShortcutCount: 461→468 after merging aisearch/contact/live
  shortcuts from upstream/main
- Fix P2: datasource-update --field-ids doc says "不传时同步全部字段" but
  actual behavior keeps existing field config; fixed in usage guide and
  reference
2026-08-24 10:54:58 +08:00
Dennis 137151b38c fix(shortcut): align reviewed live response shapes 2026-08-24 09:57:54 +08:00
陌渊 081220f15e Merge branch 'main' into feat/add-aitable-datasource-tools 2026-08-24 09:50:50 +08:00
Dennis 83bc213b7f fix(aisearch): reject non-person search sources 2026-08-23 19:40:27 +08:00
Dennis 804b9a3142 fix(contact): normalize exact mobile lookup input 2026-08-23 19:40:26 +08:00
Dennis cfdb0d0556 fix(contact): preserve legacy role placeholders 2026-08-23 19:40:24 +08:00
Dennis 222a0230ae fix(contact): preserve strict list roles compatibility 2026-08-23 19:40:18 +08:00
Dennis f7befc7943 fix(contact): preserve roster CLI compatibility 2026-08-23 19:40:15 +08:00
Dennis 0e8d6e00cf fix(contact): avoid unnecessary mobile detail lookup 2026-08-23 19:40:09 +08:00