Commit Graph

1124 Commits

Author SHA1 Message Date
liangshuo-1 960bdf6d71 feat: migrate application and IM guidance to affordance (#2199) 2026-08-05 23:20:39 +08:00
liangshuo-1 47c9741ce0 feat: profile selection from environment with source-aware errors (#2198) 2026-08-05 23:09:22 +08:00
liujinkun2025 bdb19643c1 docs(wiki): route node resolution through shortcut (#2132)
* docs(wiki): route node resolution through shortcut

* docs(wiki): address node routing review feedback

* docs: clarify identity for wiki resolution

* docs(drive): minimize wiki node routing change

* docs(drive): link wiki node shortcut

* docs(drive): preserve resolved wiki object type
2026-08-05 21:52:58 +08:00
calendar-assistant 875d20a278 docs(calendar): clarify attendee resolution to avoid type guessing (#2195)
Reword the note under the cross-domain search commands so agents ask
the user to clarify an attendee's type when a name cannot be resolved
or is ambiguous, instead of guessing the type from the name shape
(e.g. treating an unmatched room name as a bot).

Co-authored-by: TRAE CLI <noreply@bytedance.com>
2026-08-05 20:15:57 +08:00
evandance 09feefe96b fix: make agent recovery and concealment reliable (#2189) 2026-08-05 19:44:11 +08:00
wangweiming-01 0848a5b4fa fix(drive): stop export polling on rate limits (#2192)
* fix(drive): stop export polling on rate limits

* docs(drive): simplify export rate limit guidance
2026-08-05 18:40:53 +08:00
BD-ZERO 3fd4ebfb49 fix(slides): bind lint issues to source XML nodes (#2179)
Bind Slides lint diagnostics to exact source XML nodes through stable xml_path references.

Preserve correct paths for filtered, anonymous, nested, and duplicate-ID elements. Detect duplicate source element IDs across slides and block release with actionable guidance.

Document the new locator contract and add regression coverage for path accuracy, metadata compatibility, and duplicate-ID handling.
2026-08-05 18:05:18 +08:00
BD-ZERO 7363eb5448 feat(slides): support explicit screenshot output paths (#2180)
Adds AI-friendly output path handling to `slides +screenshot`.

- Supports `--output` for a single screenshot in both existing-slide and XML render modes.
- Validates selector count, conflicting output flags, unsafe paths, directories, whitespace, and unsupported extensions with structured errors.
- Reconciles the requested filename with the server’s actual PNG/JPEG format and reports the final path through `output`, `requested_output`, and `output_adjusted`.
- Avoids replacing existing screenshots by appending `_2`, `_3`, and subsequent suffixes.
- Keeps `--output-dir` for multi-page screenshots and preserves `--output-name` for render mode.
- Updates the Slides Skill with explicit `--slide-number` / `--slide-id` guidance and task-scoped screenshot directories.
- Adds unit, dry-run E2E, and live workflow coverage for validation, path handling, format adjustment, and collision behavior.
2026-08-05 16:50:10 +08:00
fongwave 8e884928f6 feat: add Base table copy shortcuts (#2019)
* feat: add Base table copy shortcuts

* test: cover Base table copy edge cases

* fix: preserve table copy task state

* fix: align table copy recovery with API errors

* fix: preserve table copy auth recovery

* test: verify copied table schema

---------

Co-authored-by: fongwave <272393974+fongwave@users.noreply.github.com>
2026-08-05 15:43:10 +08:00
evandance ebdeda854d feat(extension): present restricted commands as absent and trim skills (#1837) 2026-08-05 01:44:50 +08:00
tianyouskrrr fb944d236d docs(slides): temporarily route skill guidance back to +replace-pages (#2187)
* docs(slides): route skill guidance back to +replace-pages until whole-page rollout completes

Partially reverts the skill portion of #2143 (56fd29e6). lark-cli now ships
+update-slide, but the backend capability it depends on is still rolling out;
on environments without it every call answers an invalid-param error. The skill
was routing all whole-page and multi-page edits there, which turns a staged
backend rollout into a hard failure for every agent that follows the guidance.

Only the guidance moves: whole-page work routes to +replace-pages again, its
reference page is restored (with the SML namespace examples migrated to https,
a tree-wide change that landed while the page was deleted), and
lark-slides-update-slide.md is removed so nothing steers a caller to a command
the backend may refuse.

The binary is untouched. +update-slide stays available for environments that
already have the capability, and +replace-pages keeps working everywhere.
Re-apply the skill routing by reverting this commit once the rollout completes.

* docs(slides): override premature update-slide guidance

* docs(slides): route single-page rebuilds to replace-pages
2026-08-04 22:53:11 +08:00
calendar-assistant 3516952295 feat(calendar): allow bot auth for search-event (#2186)
Enable bot identity for the calendar +search-event shortcut so app/bot
credentials can search calendar events, not just user auth.
2026-08-04 21:28:44 +08:00
liangshuo-1 811d37e57b chore: release v1.0.83 (#2183) v1.0.83 2026-08-04 19:47:44 +08:00
Yuxuan Zhao 8b50caead6 ci: allow concurrent live e2e jobs (#2182) 2026-08-04 18:56:14 +08:00
tianyouskrrr b20f374c18 fix(slides): name the wrong --parts field instead of "non-empty replacement" (#2174)
XML written into a field name this shortcut does not accept — most often
"content", because <shape> nests a <content> child — was silently dropped,
so the part failed the required-field check and reported "requires
non-empty replacement". That reads as "the value is empty", which sends
callers rewriting the value instead of the key.

Reject fields outside the action's own set and name the field the caller
most likely meant, with a correct one-liner attached as a hint. Matching
folds case and separators so "Content", "newXml" and "block-id" resolve
too, while the whitelist itself stays exact: the API accepts only
snake_case, so "Replacement" must be rejected rather than slip through.
Only block_replace and block_insert parts are checked, so missing /
str_replace / unknown actions keep their existing errors, and an
actually-empty payload still reports the non-empty wording.

The alias list covers only names that plausibly carry a fragment. A shape
attribute like "fill" is deliberately absent: whoever writes it means
"recolor this block", not "here is my XML", so answering did-you-mean
"replacement" would be guessing. The unknown-field error already names the
valid set, which is true under either reading.

Docs carry the same constraint at the three points a caller can hit first:
SKILL.md, the +replace-slide reference (warning + counter-examples + error
table), and the read-modify-write workflow. The --parts flag description
now spells the field names out instead of eliding them behind "...".

Note: this tightens parsing. Extra keys inside a part used to be ignored;
they are now rejected.
2026-08-04 18:06:30 +08:00
tianyouskrrr 95a04493c3 feat(slides): support embedded SVG content (#2154)
Register <embed> in the bundled Slides SML 2.0 schema, document its SVG
contract, and teach the lint/schema validator to handle XSD wildcards and
embed geometry. Keep embedded SVG payloads out of IconPark validation so
foreign-namespaced <icon> elements inside a payload are not misreported.
2026-08-04 17:21:32 +08:00
BD-ZERO 2297435452 fix(slides): improve missing screenshot selector guidance (#2177)
- require a slide ID or slide number for screenshot requests
- reject explicitly empty slide IDs
- remove unreachable dry-run validation
- document full-deck screenshot batching
- add unit and dry-run E2E coverage
2026-08-04 16:48:19 +08:00
ethan-zhx 3b66d470f1 fix(slides): migrate SML namespace from HTTP to HTTPS (#2169)
* fix(slides): preserve requested lint input path

* fix(slides): migrate SML namespace from HTTP to HTTPS

- Change canonical namespace to https://www.larkoffice.com/sml/2.0
  in protocol schema, production code, docs, and tests
- Keep HTTP and /sml/2.0 as legacy readback compat in validator
- Fix sml_prefixed_tag check to cover all accepted SML namespaces
- Add regression test for legacy HTTP namespace acceptance
2026-08-04 14:24:05 +08:00
R0bynZhu f1dc4fcaa9 docs(slides): correct +xml-get flag requirements (#2171)
Neither --output nor --json is required: omitting --output returns the XML
in the JSON envelope on stdout, and json is the default --format.
2026-08-04 14:01:05 +08:00
guokexin.02 c828372f99 ci: notarize macOS release candidates (#2073) 2026-08-04 13:19:54 +08:00
BD-ZERO b2997944c4 fix(slides): add agent-friendly aliases for screenshot flags (#2156)
Add agent-friendly aliases for slides +screenshot while preserving the canonical flag behavior.

- Support presentation and slide selector aliases, including --presentation-id, --slides, --slide-ids, --slide-numbers, and --slide.
- Route digits-only --slide values to page numbers and other values to slide IDs.
- Merge and deduplicate same-type selectors, reject mixed ID/number requests, and report the caller’s actual flag names in structured validation errors.
- Clarify selector exclusivity in the screenshot reference.
- Add unit, dry-run E2E, and self-contained live E2E coverage for aliases, validation, screenshot output, and cleanup.
2026-08-04 12:22:17 +08:00
chenxingyang1019 ec882dd682 feat(apps): friendly error for db commands on an app with no database (#2162)
* feat(apps): friendly error for db commands on an app with no database

Server code 500002759 (a db command run against an app that has not
initialized a database yet) previously surfaced with an internal-term
message and no actionable next step.

withAppsHint now special-cases this code: it rewrites the message to a
user-facing "this app does not have a database yet" and forces a
cloud-development recovery hint (session-list/create -> chat -> poll
session-get -> retry). Because every apps db command funnels through
withAppsHint and this code is db-endpoint-specific, the whole db command
family is covered without per-command changes.

* fix(apps): generalize no-database retry hint and harden its test

Address review feedback on the no-database (500002759) recovery hint:

- The hint's final step named `+db-table-list` specifically, which would
  redirect the operation when a different db command triggered it. Replace
  it with "retry the original db command" so the recovery flow always
  resumes whatever the caller ran.
- Strengthen the unit test to assert the helper returns the same error
  value (cause chain preserved) and leaves Category/Subtype/Code intact,
  not just the rewritten Message/Hint.
2026-08-04 11:53:37 +08:00
huarenmin13 8d75ee1d71 docs(base): clarify unsupported capability boundaries (#2133)
* docs(base): clarify unsupported capability boundaries

Consolidate the retained Base guidance into generic capability rules.

Document unsupported view appearance settings, the current single-table copy contract, and unsupported field handling without carrying over same-name rename behavior or evaluation-specific command traces.

* docs(base): address capability review

Avoid an incomplete closed list of supported view properties and scope table-copy guidance to the user's requested resources.

Replace evaluation-trace blacklists with three focused capability contract checks.

* docs(base): keep generic unsupported field guidance

* docs(base): refine capability boundary contracts

* test(base): remove Markdown capability contract test

1. Delete the prose-fragment assertions for the shipped Base skill guidance
2026-08-04 11:46:04 +08:00
tianyouskrrr 56fd29e611 feat(slides): add +update-slide for whole-page updates (#2143)
Add an in-place whole-page slide update shortcut with validation, aliases, docs, unit tests, and dry-run E2E coverage.

Deprecate the superseded +replace-pages: the binary keeps the command working for a deprecation window, with the replacement named in its --help description and in a `deprecated` field on every output (dry-run, validate-only and real runs), while the skill no longer routes to it. Multi-page updates now call +update-slide once per page. The XML/revision helpers it shared with +add-slide / +delete-slide move to slides_shared.go so its eventual removal cannot break them.

+add-slide and +delete-slide now declare --presentation through the shared presentation-ref flag, so they accept the same alias spellings (--token, --url, ...) as every other slides shortcut.
2026-08-04 11:06:59 +08:00
liangshuo-1 0f29e039d7 chore: release v1.0.82 (#2165) v1.0.82 2026-08-03 22:01:23 +08:00
yballul-bytedance f4cf768565 feat(docx): refine docs history revert guidance (#2149)
* feat(docx): refine docs history revert guidance

Restructure the docs history reference to add explicit safety
constraints for overwrite-based recovery and a revision_id fallback
path when no matching history version exists.

- Replace the '安全流程' section with '安全约束' covering overwrite
  block-ID/comment loss, warning/partial_success verification, and
  preserving original error classification.
- Consolidate the revert workflow: locate the target record via
  +history-list, use history_version_id (never revision_id) for
  +history-revert, and treat only 'done' as success.
- Add a revision_id-based body recovery flow using
  docs +fetch --revision-id and docs +update --command overwrite with
  optimistic locking and post-overwrite verification.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* docs: complete revision restore command parameters

Sync incremental change from Codebase MR !1340 commit e1b0e649:
complete the +history-revert fallback command parameters
(--doc / --revision-id / --content / --reference-map) in the
lark-doc history restore reference.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* docs: harden full revision overwrite recovery

Sync incremental change from Codebase MR !1340 commit bd66e0b5:
harden the full revision overwrite recovery flow in the lark-doc
history restore reference.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* docs: exhaust revision history pagination

Sync incremental change from Codebase MR !1340 commit 567f71ba:
exhaust revision history pagination in the lark-doc history restore
reference.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* docs: skip redundant revision overwrite

Sync incremental change from Codebase MR !1340 commit fe278e9c:
skip redundant revision overwrite in the lark-doc history restore
reference.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

---------

Co-authored-by: yballul-bytedance <273011618+yballul-bytedance@users.noreply.github.com>
Co-authored-by: TRAE CLI <noreply@bytedance.com>
2026-08-03 21:41:24 +08:00
liangshuo-1 e8202c2f1c fix(slides): restore presentation aliases (#2164) 2026-08-03 21:12:55 +08:00
R0bynZhu ba104380ee feat(slides): add +add-slide and +delete-slide shortcuts (#2120)
Add two single-page slide shortcuts on top of the raw
xml_presentation.slide create/delete APIs.

slides +add-slide appends or inserts one page into an existing
presentation. It accepts --presentation as a token, a /slides/ URL or a
/wiki/ URL (resolved via wiki.spaces.get_node and checked for
obj_type=slides), takes the page XML through --slide as a literal, @file
or stdin so the document never has to be escaped into JSON and then into
the shell, and auto-uploads <img src="@./local.png"> placeholders,
replacing them with the returned file_token. Omitting --before-slide-id
appends to the end; the field is dropped from the body rather than sent
empty, which the backend rejects as an unknown slide.

slides +delete-slide removes one page by slide_id with the same
--presentation resolution. It is deliberately Risk "write" rather than
the raw command's high-risk-write, so it does not require --yes: it
targets a single explicit page and the deck keeps its version history.

Both take one page at a time so that batching stays an explicit loop and
every call has an unambiguous outcome.

The image placeholder validation used by +create is extracted into a
shared helper so both commands fail before any API call when a referenced
file is missing, is not a regular file or exceeds the 20 MB upload limit.

Covered by unit tests and by dry-run e2e tests through the built binary,
which is the only layer that proves a full <slide> document survives flag
parsing intact. Reference docs are added for both commands and the
existing slides skill docs now route to them.
2026-08-03 20:03:01 +08:00
liangshuo-1 2a1613484a feat: add framework flag aliases and unified IM pagination (#2146)
* feat: add framework flag aliases and unified IM pagination

Introduce declarative exact-name flag aliases at the shortcut framework boundary while keeping semantic compatibility domain-owned. Add a shared, format-aware IM pagination pipeline with consistent flags, metadata, safety bounds, resumable cursors, and request throttling.

* fix: align alias attribution and pagination contracts

* fix: align alias contracts and documentation

* test: remove environment-dependent contact bot e2e

* test: restore contact bot e2e

* docs: reduce IM pagination guidance noise

---------

Co-authored-by: liangshuo-1 <266696938+liangshuo-1@users.noreply.github.com>
2026-08-03 19:20:40 +08:00
wanghm25 fff1fb996c docs(base): harden dashboard multi-block read guidance (#2122)
* feat(base): clarify dashboard multi-block read pattern and arrange constraints

- SKILL.md: update routing table to say "一个或多个图表计算结果" for +dashboard-block-get-data; add three new Dashboard guidance bullets covering arrange precision limits, creation verification shortcut, and multi-block serial read pattern
- lark-base-dashboard-block-get-data.md: add multi-block serial loop example with safety note that IDs must come verbatim from +dashboard-block-list
- lark-base-dashboard.md: tighten arrange caution block (x/y/w/h wording, two new caution bullets); fix verification guideline to not call +dashboard-block-get-data just to confirm creation; add multi-block read hint after scenario 5

* fix(base): 补充分页读取组件指引

* fix(base): 避免批量读取掩盖失败

---------

Co-authored-by: yballul-bytedance <273011618+yballul-bytedance@users.noreply.github.com>
2026-08-03 18:37:06 +08:00
Yuxuan Zhao 2dafa0371e test: pass contact list params explicitly (#2150) 2026-08-03 17:35:26 +08:00
yangr-happy 427cbd6492 fix: normalize mail triage filters (#2068)
* fix: normalize mail triage filters

* fix: address mail triage review feedback

Change-Type: ci-fix

* fix: align mail triage read filters

* fix: reject bare mail triage is_read filter

* fix: clarify mail triage unread filter help

* docs: align mail triage skill filters

Document the new mail triage filter forms and standalone folder/unread flags so local skill guidance matches CLI help and schema output.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* docs: simplify mail triage filter description

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* fix: reject false unread triage filters

Reject is_unread=false instead of silently treating it as no read-status filter, and cover the JSON and key=value forms in read-status validation tests.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

---------

Co-authored-by: yangr-happy <301323675+yangr-happy@users.noreply.github.com>
Co-authored-by: TRAE CLI <noreply@bytedance.com>
2026-08-03 14:20:25 +08:00
evandance 40a0a9de66 feat(enhancement): centralize HTTP transport policies (#2021) 2026-08-02 14:55:05 +08:00
liangshuo-1 a8ad44ba13 docs: remove broken Star History chart (#2141) 2026-08-01 11:42:24 +08:00
liangshuo-1 003d0f42f8 chore: release v1.0.81 (#2136) v1.0.81 2026-07-31 18:47:19 +08:00
wangweiming-01 7946e5c81d feat: support source file preview artifacts (#2085) 2026-07-31 17:52:31 +08:00
zhouyue-bytedance 5cf09ecfda docs(base): clarify form and file operation routing (#2110)
* docs(base): clarify form and file operation routing

* docs: clarify complete base role table rules

* docs: clarify base advanced permission status

* docs: clarify base form field lifecycle

* docs: guide base form question creation

* fix(base): address form dry-run review findings

* docs(base): add complete editable role example

* fix(base): validate form question create inputs
2026-07-31 15:23:03 +08:00
chenxingyang1019 41692b7041 feat(apps): add cache debug commands (+cache-get/-delete/-clear) (#1896)
* feat(apps): add cache debug commands (+cache-get/-delete/-clear)

Add three apps-domain cache debug shortcuts for inspecting/clearing an app's
runtime cache:
- +cache-get: read a business key's value + metadata (hit/miss)
- +cache-delete: delete a single key (idempotent, write)
- +cache-clear: clear all cache in an environment (high-risk-write, --yes)

value renders raw on --format json, deserialized on --format pretty;
value_size_bytes is computed CLI-side; --environment auto-selects the branch
when omitted. Includes unit tests (hit/miss/dry-run/confirmation) and the
lark-apps cache skill reference.

* fix(apps): normalize cache numeric output fields and tidy comments

Follow-up hardening for the cache debug commands (+cache-get/-delete/-clear):

- Normalize ttl_ms / deleted_key_count via a new cacheInt() helper so
  --format json emits a stable JSON number (or null) regardless of whether
  the server sends the value as a number or a string. Aligns with the
  repo convention that numeric wire fields may arrive as strings; previously
  these were passed through raw, leaving the output type at the server's mercy.
- Add unit tests locking the string-wire -> JSON number contract for both
  cache-get ttl_ms and cache-delete deleted_key_count.
- Tidy two comments: soften cacheBool's speculative "historical wire form"
  claim to a defensive-tolerance note, and drop implementation jargon from
  cache-delete's risk-level rationale.
2026-07-31 14:13:56 +08:00
dc-bytedance b79827d60a fix: drop stale target version from root upgrade prompt (#2100) 2026-07-31 12:45:43 +08:00
zhaojiaxing-coding 0f35676a28 feat(drive): extend permission shortcuts for Miaoda (#2070)
* feat(drive): support Miaoda apps in permission shortcuts

Extend Drive permission shortcuts to accept Miaoda page URLs and the apps resource type while keeping each endpoint's accepted resource contract explicit.

Key features:

- Infer apps from /page/ URLs and accept explicit --type=apps in +apply-permission, +member-add, +member-list, and +permission-get-setting

- Decouple secure-label target parsing so expanding apply-permission does not widen secure-label support

- Align skill guidance and unit/dry-run coverage with the new resource type

* test(drive): cover apps permission target validation

Add focused coverage for Miaoda apps target handling across apply-permission and secure-label boundaries.

Exercise malformed page URLs, explicit apps bare tokens, typed validation errors, and command-level rejection so future resource-type changes cannot silently widen unsupported secure-label behavior.

* fix(drive): parse permission markers from URL paths

Keep drive +apply-permission resource inference aligned with URL component boundaries. Parse and validate URL inputs before extracting tokens so query strings and fragments cannot redirect permission requests to a different resource.

Key fixes:

- Match document and apps markers only against the parsed URL path

- Reject malformed URLs with a typed --token validation error

- Cover /page/ markers found only in query strings or fragments

* docs(skills): redact Miaoda page token example

Replace the concrete Miaoda page token with a representative pagcn placeholder. This keeps the token shape recognizable while avoiding exposure of a real resource identifier in the skill documentation.

* fix(drive): harden permission target resolution

Make Drive shortcut targets unambiguous before they reach read or write API paths. URL inputs now bind to a recognized root path and a single validated token segment, preventing encoded separators, dot segments, and type conflicts from silently changing the addressed resource.

Key fixes:

- Reject non-root URLs, dot/traversal tokens, and URL/type conflicts for secure-label and permission-apply writes

- Keep permission-setting URL parsing and pretty output reversible for every supported command-local resource kind

- Add unit and dry-run E2E regressions plus aligned permission-apply guidance
2026-07-31 12:16:22 +08:00
wangweiming-01 946964e093 fix(drive): use title for default download filename (#2089) 2026-07-31 12:12:11 +08:00
HanShaoshuai-k cfe76ad56a ci: add protected public domain allowlists (#2111)
Co-authored-by: HanShaoshuai-k <268785735+HanShaoshuai-k@users.noreply.github.com>
2026-07-31 11:02:04 +08:00
calendar-assistant fa9c30c690 docs(calendar): confirm scope before editing recurring events (#2119)
Promote the recurring-event rule to a pre-routing gate so it is read
before the specific operation flow, and require confirming the scope
(this event / all / this-and-following) when the user is ambiguous
instead of defaulting to this-event-only. Removes the redundant and
conflicting "edit existing event" row that hard-coded the single-
instance default.
2026-07-30 21:59:08 +08:00
zcc ba95252019 feat(drive): add comment-operation shortcuts (#1898)
Add comment-domain shortcuts: +batch-query-comments, +resolve-comment,
+restore-comment, +add-reply, +list-replies, +update-reply, +delete-reply
and +react-reply, sharing one target resolver with per-endpoint file_type
sets.

Flatten the comment reference docs by dropping the comments-guide routing
layer and folding its cross-command knowledge into the command refs:
comment-card model, comment/reply/interaction counting and sorting rules
into lark-drive-list-comments.md; the --solved-status prerequisite into
lark-drive-restore-comment.md; the apps exception into
lark-drive-add-comment.md. Comment intents now route straight from the
drive SKILL.md Shortcuts table to each command ref.

Cover the new shortcuts with unit tests, dry-run e2e and live workflow
e2e behind LARK_DRIVE_MD_COMMENT_E2E=1, and register them in
tests/cli_e2e/drive/coverage.md.
2026-07-30 21:53:21 +08:00
zhouyue-bytedance 4a16139348 fix(base): resolve Base URL block types accurately (#2099)
* fix: resolve Base URL block types accurately

* fix: resolve Base block selection from Wiki URLs

* fix(base): guide resolved folder and docx blocks

* fix(base): avoid field fallback for untyped URL blocks

* docs(base): specify URL example fence language

* test(base): cover unmatched URL block resolution
2026-07-30 20:29:47 +08:00
BD-ZERO 6e5308af01 feat: add SXSD schema validation to Slides lint (#2103)
- add XSD-backed SXSD validation for tags, attributes, structure, scalar values, and namespaces
- preserve supported server-filled fields and readback namespace compatibility
- isolate SXSD failures by slide so valid slides continue through layout checks
- improve actionable lint diagnostics and suppress duplicate errors
- add regression coverage for schema validation and Slides readback cases

Validated with unit tests and real Slides create/readback round trips.
2026-07-30 20:04:53 +08:00
liangshuo-1 87be09ef5f fix(contact): stop bot match segments carrying tags or empty entries (#2115) 2026-07-30 18:08:38 +08:00
sang-neo03 a575a8ba60 feat(contact): add bot search shortcut (#2083) 2026-07-30 17:03:49 +08:00
calendar-assistant 1f565a290b docs(calendar): warn against container-default timezone in time conversion (#2104)
Agents dropping to the raw `calendar events create/patch` API must convert
wall-clock time to Unix timestamps themselves. In UTC containers this silently
yields an 8-hour offset. Require explicit ISO 8601 offsets on +create/+update
--start/--end, and warn that raw-API timestamp conversion must specify the
target timezone instead of relying on the container default.
2026-07-30 14:06:14 +08:00
yballul-bytedance 68a77eee5c feat: support visible_rule for form questions (#1891)
Form questions can now carry a visible_rule (display condition) so a question shows only when earlier questions match the rule. The rule shares the exact same structure as the view filter, so extract that structure into a single shared reference (lark-base-filter-condition.md) that both view-set-filter and visible_rule point to.

- create/update shortcuts: document visible_rule in --questions help and transcribe the questions body (including visible_rule) into dry-run output
- document that form question updates use full overwrite semantics and must preserve existing fields via read-modify-write
- skill refs: add visible_rule sections to form-questions create/update, note it is only needed when the user asks for a display condition, and clarify that the shared tuple filter protocol does not apply to data-query filters
- tests: pin flag help, verbatim visible_rule passthrough on create/update/list, and add dry-run E2E coverage

Co-authored-by: yballul-bytedance <273011618+yballul-bytedance@users.noreply.github.com>
Co-authored-by: TRAE CLI <noreply@bytedance.com>
2026-07-30 12:37:24 +08:00