@amaster.ai/pi-lark 0.1.2-beta.43 → 0.1.2-beta.45

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.
Files changed (131) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-approval/references/lark-approval-initiate.md +2 -5
  3. package/skills/lark-approval/references/lark-approval-instances-initiated.md +6 -0
  4. package/skills/lark-approval/references/lark-approval-tasks-query.md +9 -0
  5. package/skills/lark-approval/references/lark-approval-tasks-rollback.md +8 -2
  6. package/skills/lark-apps/SKILL.md +23 -12
  7. package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
  8. package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
  9. package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
  10. package/skills/lark-apps/creative-design/assets/index.html +27 -0
  11. package/skills/lark-apps/creative-design/creative-design.md +239 -0
  12. package/skills/lark-apps/creative-design/references/aily.md +39 -0
  13. package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
  14. package/skills/lark-apps/creative-design/references/charts.md +165 -0
  15. package/skills/lark-apps/creative-design/references/claude.md +36 -0
  16. package/skills/lark-apps/creative-design/references/codex.md +32 -0
  17. package/skills/lark-apps/creative-design/references/data-report.md +108 -0
  18. package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
  19. package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
  20. package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
  21. package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
  22. package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
  23. package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
  24. package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
  25. package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
  26. package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
  27. package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
  28. package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
  29. package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
  30. package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
  31. package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
  32. package/skills/lark-apps/references/lark-apps-automation.md +80 -2
  33. package/skills/lark-apps/references/lark-apps-cloud-dev.md +0 -1
  34. package/skills/lark-apps/references/lark-apps-create.md +1 -2
  35. package/skills/lark-apps/references/lark-apps-db.md +1 -1
  36. package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
  37. package/skills/lark-apps/references/lark-apps-file.md +1 -1
  38. package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
  39. package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
  40. package/skills/lark-apps/references/lark-apps-init.md +1 -1
  41. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  42. package/skills/lark-apps/references/lark-apps-local-dev.md +54 -11
  43. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  44. package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
  45. package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
  46. package/skills/lark-base/SKILL.md +6 -3
  47. package/skills/lark-base/references/lark-base-cell-value.md +3 -3
  48. package/skills/lark-base/references/lark-base-field-create.md +4 -0
  49. package/skills/lark-base/references/lark-base-field-json.md +4 -4
  50. package/skills/lark-base/references/lark-base-field-update.md +17 -1
  51. package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
  52. package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
  53. package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
  54. package/skills/lark-base/references/lark-base-view-set-filter.md +3 -1
  55. package/skills/lark-calendar/references/lark-calendar-create.md +1 -0
  56. package/skills/lark-calendar/references/lark-calendar-update.md +3 -0
  57. package/skills/lark-doc/references/lark-doc-fetch.md +10 -2
  58. package/skills/lark-doc/references/lark-doc-whiteboard.md +9 -8
  59. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +41 -0
  60. package/skills/lark-doc/references/lark-doc-xml.md +3 -2
  61. package/skills/lark-drive/SKILL.md +4 -1
  62. package/skills/lark-drive/references/lark-drive-comment-location.md +2 -2
  63. package/skills/lark-drive/references/lark-drive-upload.md +1 -0
  64. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
  65. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
  66. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
  67. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
  68. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
  69. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
  70. package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
  71. package/skills/lark-event/SKILL.md +3 -1
  72. package/skills/lark-event/references/lark-event-application.md +38 -0
  73. package/skills/lark-event/references/lark-event-approval.md +170 -0
  74. package/skills/lark-im/SKILL.md +1 -1
  75. package/skills/lark-im/references/lark-im-flag-list.md +8 -7
  76. package/skills/lark-okr/SKILL.md +71 -26
  77. package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
  78. package/skills/lark-okr/references/lark-okr-create.md +173 -0
  79. package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
  80. package/skills/lark-okr/references/lark-okr-entities.md +1 -0
  81. package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
  82. package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
  83. package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
  84. package/skills/lark-slides/SKILL.md +103 -46
  85. package/skills/lark-slides/references/asset-planning.md +6 -4
  86. package/skills/lark-slides/references/iconpark.md +2 -2
  87. package/skills/lark-slides/references/lark-slides-create.md +2 -3
  88. package/skills/lark-slides/references/lark-slides-history.md +132 -0
  89. package/skills/lark-slides/references/lark-slides-media-upload.md +1 -2
  90. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
  91. package/skills/lark-slides/references/lark-slides-replace-slide.md +0 -3
  92. package/skills/lark-slides/references/lark-slides-screenshot.md +1 -1
  93. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +219 -0
  94. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +6 -5
  95. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
  96. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
  97. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +65 -30
  98. package/skills/lark-slides/references/planning-layer.md +11 -10
  99. package/skills/lark-slides/references/slides_chart_demo.xml +1416 -1
  100. package/skills/lark-slides/references/slides_xml_schema_definition.xml +1 -45
  101. package/skills/lark-slides/references/troubleshooting.md +25 -7
  102. package/skills/lark-slides/references/validation-checklist.md +33 -13
  103. package/skills/lark-slides/references/visual-planning.md +25 -22
  104. package/skills/lark-slides/references/xml-schema-quick-ref.md +225 -46
  105. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +487 -28
  106. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +477 -76
  107. package/skills/lark-vc/SKILL.md +6 -3
  108. package/skills/lark-vc/references/vc-domain-boundaries.md +9 -1
  109. package/skills/lark-vc-agent/SKILL.md +1 -1
  110. package/skills/lark-whiteboard/SKILL.md +13 -12
  111. package/skills/lark-whiteboard/elements/layout.md +1 -1
  112. package/skills/lark-whiteboard/elements/schema.md +2 -2
  113. package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +15 -15
  114. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +3 -3
  115. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +7 -17
  116. package/skills/lark-whiteboard/routes/dsl.md +3 -3
  117. package/skills/lark-whiteboard/routes/mermaid.md +2 -2
  118. package/skills/lark-whiteboard/routes/svg-edit.md +4 -4
  119. package/skills/lark-whiteboard/routes/svg.md +11 -6
  120. package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
  121. package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
  122. package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
  123. package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
  124. package/skills/lark-whiteboard/scenes/treemap.md +1 -1
  125. package/skills/lark-wiki/SKILL.md +1 -0
  126. package/skills/lark-slides/references/examples.md +0 -91
  127. package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
  128. package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
  129. package/skills/lark-slides/references/slide-templates.md +0 -201
  130. package/skills/lark-slides/references/slides_demo.xml +0 -226
  131. package/skills/lark-slides/references/xml-format-guide.md +0 -438
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: lark-event
3
3
  version: 1.0.0
4
- description: "Lark/Feishu real-time event listening / subscribing / consuming: stream events as NDJSON via `lark-cli event consume <EventKey>` (covers IM messages/reactions/chat changes, Task updates, VC meeting started/joined/ended, Minutes generated, Whiteboard updated, etc.). Use for Lark bots, real-time message processing, long-running subscribers, streaming webhook/push handlers. Supports `--max-events` / `--timeout` bounded runs and a stderr ready-marker contract — designed for AI agents running as subprocesses."
4
+ description: "Lark/Feishu real-time event listening / subscribing / consuming: stream events as NDJSON via `lark-cli event consume <EventKey>` (covers IM messages/reactions/chat changes, Approval status changes, Task updates, VC meeting started/joined/ended, Minutes generated, Whiteboard updated, etc.). Use for Lark bots, real-time message processing, long-running subscribers, streaming webhook/push handlers. Supports `--max-events` / `--timeout` bounded runs and a stderr ready-marker contract — designed for AI agents running as subprocesses."
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["lark-cli"]
@@ -147,6 +147,8 @@ Lark-defined semantic tags (**not** JSON Schema's standard `format`). Common val
147
147
 
148
148
  | Topic | Reference | Coverage |
149
149
  |------------|------------------------------------------------------------------------------|---|
150
+ | Application | [`references/lark-event-application.md`](references/lark-event-application.md) | Catalog of Application EventKeys, including `application.bot.menu_v6` for custom bot menu push events + flattened `event_key` / operator fields + jq recipe |
151
+ | Approval | [`references/lark-event-approval.md`](references/lark-event-approval.md) | Catalog of 2 Approval EventKeys (`approval.instance.status_changed_v4`, `approval.task.status_changed_v4`) + optional/multi `subscription_type` pre-registration + user-auth subscription lifecycle + flat output field reference |
150
152
  | IM | [`references/lark-event-im.md`](references/lark-event-im.md) | Catalog of 12 IM EventKeys + shape notes (flat vs V2 envelope) + `im.message.receive_v1` field gotchas (`sender_id` is open_id only; `.content` is plain text except for `interactive` cards) + common jq recipes (filter by chat_type / message_type / sender); for `card.action.trigger` see also [`../lark-im/references/lark-im-card-action-reply.md`](../lark-im/references/lark-im-card-action-reply.md) |
151
153
  | Task | [`references/lark-event-task.md`](references/lark-event-task.md) | Catalog of 1 Task EventKey (`task.task.update_user_access_v2`) + Native V2 envelope shape + task commit types + user/bot subscription notes |
152
154
  | VC | [`references/lark-event-vc.md`](references/lark-event-vc.md) | Catalog of 4 VC EventKeys (`vc.meeting.participant_meeting_started_v1`, `vc.meeting.participant_meeting_joined_v1`, `vc.meeting.participant_meeting_ended_v1`, `vc.note.generated_v1`) + field reference + source type semantics (meeting only) |
@@ -0,0 +1,38 @@
1
+ # Lark Application Events
2
+
3
+ This page covers Application-domain EventKeys supported by `lark-cli event`.
4
+
5
+ ## `application.bot.menu_v6`
6
+
7
+ Triggered when a user clicks a custom bot menu item whose response action is configured as a push event.
8
+
9
+ Listen as the bot identity:
10
+
11
+ ```bash
12
+ lark-cli event consume application.bot.menu_v6 --as bot
13
+ ```
14
+
15
+ Filter a specific menu event key:
16
+
17
+ ```bash
18
+ lark-cli event consume application.bot.menu_v6 --as bot --jq 'select(.event_key == "start_eval")'
19
+ ```
20
+
21
+ Output is flattened at the top level:
22
+
23
+ | Field | Meaning |
24
+ |---|---|
25
+ | `type` | Event type, always `application.bot.menu_v6` |
26
+ | `event_id` | Globally unique event ID from the event header |
27
+ | `timestamp` | Event delivery time, preferring `header.create_time` |
28
+ | `app_id` | App ID from the event header |
29
+ | `tenant_key` | Tenant key from the event header |
30
+ | `event_key` | Developer-defined menu event key, for example `start_eval` |
31
+ | `menu_timestamp` | Menu click timestamp from the event body |
32
+ | `operator_id` | Operator open_id alias |
33
+ | `operator_open_id` | Operator open_id |
34
+ | `operator_union_id` | Operator union_id |
35
+ | `operator_user_id` | Operator user_id |
36
+ | `operator_name` | Operator display name |
37
+
38
+ This EventKey has no `--param`; use `--jq` to filter by `event_key` or operator fields.
@@ -0,0 +1,170 @@
1
+ # Approval Events
2
+
3
+ > **Prerequisite:** Read [`../SKILL.md`](../SKILL.md) first for the `event consume` essentials (commands, subprocess contract, jq usage).
4
+
5
+ ## Key catalog (2)
6
+
7
+ | EventKey | Purpose |
8
+ |---|---|
9
+ | `approval.instance.status_changed_v4` | An approval instance status changed |
10
+ | `approval.task.status_changed_v4` | An approval task status changed |
11
+
12
+ Both keys use a **Custom schema**. The raw Lark schema 2.0 envelope is flattened: event metadata is exposed as `type`, `event_id`, and `timestamp`, while approval business fields are exposed at the top level.
13
+
14
+ Both keys carry a **PreConsume hook** that subscribes the current authorized user through the Approval subscription APIs before listening. The consumer intentionally does **not** unsubscribe on exit; the server-side Approval subscription relation remains until it is canceled outside `event consume`. These keys require `--as user`.
15
+
16
+ ## Listener and subscription selection
17
+
18
+ At the raw CLI level, each `event consume` process accepts exactly one EventKey. `approval.instance.status_changed_v4` and `approval.task.status_changed_v4` have different output shapes, so listening to both still means two processes.
19
+
20
+ For Approval only, `subscription_type` is an optional setup param used by PreConsume to register server-side Approval subscription relations before the local listener starts. It is **not** an output field, a local event filter, or a local subscription identity. The pushed event does not say which subscription relation caused delivery, and one business event can match both relations; deduplicate with `event_id` when needed.
21
+
22
+ `subscription_type` may be omitted, a single value, a comma-separated list, or a JSON string array:
23
+
24
+ ```bash
25
+ # Omitted: register both INVOLVED_APPROVAL and MANAGED_APPROVAL for this EventKey
26
+ lark-cli event consume approval.instance.status_changed_v4 --as user
27
+
28
+ # Single relation
29
+ lark-cli event consume approval.instance.status_changed_v4 \
30
+ -p subscription_type=INVOLVED_APPROVAL \
31
+ --as user
32
+
33
+ # Explicit multi-relation registration for one local consumer
34
+ lark-cli event consume approval.task.status_changed_v4 \
35
+ -p subscription_type=INVOLVED_APPROVAL,MANAGED_APPROVAL \
36
+ --as user
37
+
38
+ # JSON array form; quote it for the shell
39
+ lark-cli event consume approval.task.status_changed_v4 \
40
+ -p 'subscription_type=["INVOLVED_APPROVAL","MANAGED_APPROVAL"]' \
41
+ --as user
42
+ ```
43
+
44
+ | Value | Meaning |
45
+ |---|---|
46
+ | `INVOLVED_APPROVAL` | Receive events where the current user is the approval requester or approver |
47
+ | `MANAGED_APPROVAL` | Receive events under approval definitions managed by the current user |
48
+
49
+ User-intent inference:
50
+
51
+ | User intent | EventKey(s) | `subscription_type` |
52
+ |---|---|---|
53
+ | Mentions approval instances, approval forms, approval order/status, or "instance status" | `approval.instance.status_changed_v4` | infer from relation words below |
54
+ | Mentions approval tasks, approval todo items, approver operations, or "task status" | `approval.task.status_changed_v4` | infer from relation words below |
55
+ | Says "approval status changes/events" without saying task vs instance | both EventKeys | infer from relation words below |
56
+ | Says "my approvals", "approvals involving me", "I requested/approved", "待我审批", "我发起/我参与" | requested EventKey(s) | `INVOLVED_APPROVAL` |
57
+ | Says "approvals I manage", "managed definitions", "definitions managed by me", "我管理的审批定义" | requested EventKey(s) | `MANAGED_APPROVAL` |
58
+ | Explicitly asks for both involved and managed, or says "all approval subscriptions" | requested EventKey(s), or both if EventKey is also ambiguous | omit `subscription_type`, or pass both values in one `-p` |
59
+ | Relation is ambiguous and the user wants broad coverage | requested EventKey(s), or both if EventKey is also ambiguous | omit `subscription_type` so PreConsume registers both |
60
+
61
+ If the user's wording omits the relation and broad listening is acceptable, omit `subscription_type`. Ask only when registering both relations would be materially harmful.
62
+
63
+ ## Scopes & auth
64
+
65
+ | EventKey | Scope | Auth |
66
+ |---|---|---|
67
+ | `approval.instance.status_changed_v4` | `approval:instance:read` | user |
68
+ | `approval.task.status_changed_v4` | `approval:task:read` | user |
69
+
70
+ ## Subscription behavior
71
+
72
+ Startup calls the endpoint for the selected EventKey:
73
+
74
+ ```text
75
+ POST /open-apis/approval/v4/instances/subscription
76
+ POST /open-apis/approval/v4/tasks/subscription
77
+ ```
78
+
79
+ For each resolved `subscription_type`, PreConsume sends one request body:
80
+
81
+ ```json
82
+ {"subscription_type":"INVOLVED_APPROVAL"}
83
+ ```
84
+
85
+ If `subscription_type` is omitted, PreConsume sends two registration requests for that EventKey: one with `INVOLVED_APPROVAL`, then one with `MANAGED_APPROVAL`. If listening to both instance and task events, run two consumers; each consumer may omit `subscription_type` to register both relations for its own EventKey.
86
+
87
+ Do not start two consumers for the same Approval EventKey merely to split `INVOLVED_APPROVAL` and `MANAGED_APPROVAL`. The server push and flattened output are keyed by EventKey and cannot be distinguished by subscription relation.
88
+
89
+ Shutdown behavior:
90
+
91
+ `event consume` does not call the Approval unsubscribe APIs when it exits. This applies to graceful exit, Ctrl+C / SIGTERM, stdin EOF, `--timeout`, and `--max-events`.
92
+
93
+ To stop future delivery for a user, cancel the Approval subscription relation outside this consumer. The unsubscribe APIs are separate operations and are not called by `event consume`.
94
+
95
+ ## Output fields
96
+
97
+ Common fields:
98
+
99
+ | Field | Type | Description |
100
+ |---|---|---|
101
+ | `type` | string | Event type |
102
+ | `event_id` | string | Globally unique event ID; use for deduplication |
103
+ | `timestamp` | string (timestamp_ms) | Event delivery time in milliseconds, taken from `header.create_time` |
104
+
105
+ Instance event fields:
106
+
107
+ | Field | Type | Description |
108
+ |---|---|---|
109
+ | `approval_code` | string | Approval definition code; not a subscription dimension |
110
+ | `instance_code` | string | Approval instance code |
111
+ | `external_id` | string | Third-party approval instance id, when present |
112
+ | `status` | string enum | `PENDING`, `APPROVED`, `REJECTED`, `CANCELED`, `DELETED`, `REVERTED`, `OVERTIME_CLOSE`, `OVERTIME_RECOVER` |
113
+ | `operate_time` | string (timestamp_ms) | Status change time |
114
+ | `start_user` | object | Instance starter user IDs, omitted when unavailable |
115
+ | `start_user.open_id` | string (open_id) | Instance starter open_id, when present |
116
+ | `start_user.union_id` | string (union_id) | Instance starter union_id, when present |
117
+ | `start_user.user_id` | string (user_id) | Instance starter tenant user_id, when present |
118
+
119
+ Task event fields:
120
+
121
+ | Field | Type | Description |
122
+ |---|---|---|
123
+ | `approval_code` | string | Approval definition code; not a subscription dimension |
124
+ | `instance_code` | string | Approval instance code |
125
+ | `task_id` | string | Approval task id |
126
+ | `external_id` | string | Third-party approval external id, when present |
127
+ | `task_external_id` | string | Third-party task external id, when emitted |
128
+ | `assigned_user` | object | Task assignee or operator user IDs, omitted for automatic flows without an operator |
129
+ | `assigned_user.open_id` | string (open_id) | Task assignee or operator open_id, when present |
130
+ | `assigned_user.union_id` | string (union_id) | Task assignee or operator union_id, when present |
131
+ | `assigned_user.user_id` | string (user_id) | Task assignee or operator tenant user_id, when present |
132
+ | `status` | string enum | `REVERTED`, `PENDING`, `APPROVED`, `REJECTED`, `TRANSFERRED`, `ROLLBACK`, `DONE`, `OVERTIME_CLOSE`, `OVERTIME_RECOVER` |
133
+ | `operate_time` | string (timestamp_ms) | Status change time |
134
+
135
+ ## Examples
136
+
137
+ ```bash
138
+ # Stream approval instance updates broadly; registers both involved and managed relations
139
+ lark-cli event consume approval.instance.status_changed_v4 \
140
+ --as user
141
+
142
+ # Stream approval instance updates only for approvals involving the current user
143
+ lark-cli event consume approval.instance.status_changed_v4 \
144
+ -p subscription_type=INVOLVED_APPROVAL \
145
+ --as user
146
+
147
+ # Stream approval task updates for definitions managed by the current user
148
+ lark-cli event consume approval.task.status_changed_v4 \
149
+ -p subscription_type=MANAGED_APPROVAL \
150
+ --as user
151
+
152
+ # Broad approval status listening:
153
+ # run both EventKeys as separate processes; omit subscription_type so each registers both relations.
154
+ lark-cli event consume approval.instance.status_changed_v4 \
155
+ --as user > approval-instance.ndjson &
156
+ lark-cli event consume approval.task.status_changed_v4 \
157
+ --as user > approval-task.ndjson &
158
+ wait
159
+
160
+ # Listen to both involved and managed task subscriptions with one local consumer.
161
+ lark-cli event consume approval.task.status_changed_v4 \
162
+ -p subscription_type=INVOLVED_APPROVAL,MANAGED_APPROVAL \
163
+ --as user > approval-task.ndjson
164
+
165
+ # Project a compact approval-task record
166
+ lark-cli event consume approval.task.status_changed_v4 \
167
+ -p subscription_type=INVOLVED_APPROVAL \
168
+ --as user \
169
+ --jq '{event_id, task_id, status, at: .operate_time}'
170
+ ```
@@ -117,7 +117,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli im +<verb> [flags]`)。
117
117
  | [`+threads-messages-list`](references/lark-im-threads-messages-list.md) | List messages in a thread; user/bot; accepts om_/omt_ input, resolves message IDs to thread_id, supports sort/pagination |
118
118
  | [`+flag-create`](references/lark-im-flag-create.md) | Create a bookmark on a message; user-only; defaults to message-layer flag; use --flag-type feed for feed-layer flag (item_type auto-detected from chat mode) |
119
119
  | [`+flag-cancel`](references/lark-im-flag-cancel.md) | Cancel (remove) a bookmark. When no --flag-type is given, best-effort double-cancel: removes message layer and (when chat_type is determinable) feed layer |
120
- | [`+flag-list`](references/lark-im-flag-list.md) | List bookmarks; user-only; auto-enriches feed-type thread entries with message content; supports `--page-all` auto-pagination |
120
+ | [`+flag-list`](references/lark-im-flag-list.md) | List bookmarks; user-only; auto-enriches feed-type thread entries with message content; `--page-all` is capped by `--page-limit` (default 20, max 1000), and `has_more=true` means the result is incomplete |
121
121
  | [`+feed-shortcut-create`](references/lark-im-feed-shortcut-create.md) | Add chats to the user's feed shortcuts; user-only; oc_xxx chat IDs only; batch up to 10 per call; `--head`/`--tail` controls insertion order; partial failures return an `ok:false` ledger |
122
122
  | [`+feed-shortcut-remove`](references/lark-im-feed-shortcut-remove.md) | Remove chats from the user's feed shortcuts; user-only; batch up to 10 per call; removing an absent shortcut is idempotent success; real per-item failures return an `ok:false` ledger |
123
123
  | [`+feed-shortcut-list`](references/lark-im-feed-shortcut-list.md) | List one page of the user's feed shortcuts; user-only; omit `--page-token` for the first page; default output enriches CHAT entries under `detail`; pass `--no-detail` to skip the extra lookup and `im:chat:read` scope |
@@ -6,9 +6,9 @@ This skill maps to shortcut: `lark-cli im +flag-list`. Underlying API: `GET /ope
6
6
 
7
7
  ## Sorting Rules (Important)
8
8
 
9
- The API returns data sorted by `update_time` in **ascending order**, meaning **oldest first, newest last**. When `has_more=true`, you cannot simply take the first page's items as the latest flags — you must paginate through all pages and take the last item on the last page as the newest.
9
+ The API returns data sorted by `update_time` in **ascending order**, meaning **oldest first, newest last**. When `has_more=true`, continue pagination until `has_more=false`; only then is the last item in the merged result authoritative as the newest flag. If pagination stops while `has_more=true`, the last item is only the newest observed flag.
10
10
 
11
- Recommended: use `--page-all` for auto-pagination to get the complete list, then use `-q '.data.flag_items[-1]'` to get the latest item.
11
+ `--page-all` enables automatic pagination but is still capped by `--page-limit`. The default cap is 20 pages; **20 is not the hard maximum**. Set `--page-limit` between 1 and 1000 when a larger scan is required. A response with `has_more=true` is incomplete, even when `flag_items` is empty; increase the limit or resume from the returned `page_token` before reporting an authoritative latest item or count.
12
12
 
13
13
  ## Commands
14
14
 
@@ -19,7 +19,7 @@ lark-cli im +flag-list --as user
19
19
  # Manual pagination with custom page size
20
20
  lark-cli im +flag-list --as user --page-size 30 --page-token <page_token>
21
21
 
22
- # Auto-paginate to get all flags (recommended)
22
+ # Auto-paginate, capped at the default 20 pages
23
23
  lark-cli im +flag-list --as user --page-all
24
24
 
25
25
  # Auto-paginate + get the latest flag
@@ -31,8 +31,8 @@ lark-cli im +flag-list --as user --page-all -q '.data.flag_items[].item_id'
31
31
  # Disable auto-enrichment of message content (enabled by default)
32
32
  lark-cli im +flag-list --as user --page-all --enrich-feed-thread=false
33
33
 
34
- # Limit max pages (default 20, max 1000)
35
- lark-cli im +flag-list --as user --page-all --page-limit 10
34
+ # Use the largest supported page limit for a broader scan
35
+ lark-cli im +flag-list --as user --page-all --page-limit 1000
36
36
  ```
37
37
 
38
38
  ## Parameters
@@ -41,8 +41,8 @@ lark-cli im +flag-list --as user --page-all --page-limit 10
41
41
  |------|------|------|
42
42
  | `--page-size <n>` | 50 | Range 1-50 (server max is 50) |
43
43
  | `--page-token <token>` | empty | Pagination token from previous page; empty string must still be provided |
44
- | `--page-all` | false | Auto-paginate to fetch all pages and merge results |
45
- | `--page-limit <n>` | 20 | Max pages in `--page-all` mode (max 1000) |
44
+ | `--page-all` | false | Auto-paginate and merge results, capped by `--page-limit` |
45
+ | `--page-limit <n>` | 20 | Max pages in `--page-all` mode; configurable range 1-1000 (20 is only the default) |
46
46
  | `--enrich-feed-thread` | true | Auto-enrich feed-layer thread entries with message content (calls `im.messages.mget`) |
47
47
  | `--as user` | Required | Currently only supports user identity |
48
48
 
@@ -62,6 +62,7 @@ Note: `(thread, feed)` / `(msg_thread, feed)` entries are automatically enriched
62
62
 
63
63
  ## Limitations
64
64
 
65
+ - **Auto-pagination is bounded**: `--page-all` fetches at most 20 pages by default. If the response still has `has_more=true`, the result is incomplete; increase `--page-limit` up to 1000 or resume with `page_token`. Never interpret `flag_items: []` as an authoritative zero while more pages remain. Historical `delete_flag_items` may occupy early pages and push active flags to later pages.
65
66
  - **delete_flag_items are not enriched**: Message content is only fetched for active flags (`flag_items`), not canceled flags (`delete_flag_items`). If you need message content for a canceled flag, query the message separately using `+messages-mget --message-ids <item_id>`.
66
67
 
67
68
  ## Response Example (Sanitized)
@@ -14,30 +14,85 @@ metadata:
14
14
 
15
15
  **身份**:OKR 操作默认使用 `--as user`(查看当前用户/上下级的 OKR 时)。也支持 `--as bot` 查看他人 OKR(需相应权限)。
16
16
 
17
+ ## 快速决策
18
+
19
+ | 用户需求 | 操作路径 | 参考文档 |
20
+ |----------------|----------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
21
+ | 查看自己/他人的 OKR | 获取用户 ID -> `+cycle-list` -> `+cycle-detail` -> 按需查指标/进展记录 | [`cycle-list`](references/lark-okr-cycle-list.md), [`cycle-detail`](references/lark-okr-cycle-detail.md), [`indicators`](references/lark-okr-indicators.md), [`progress-list`](references/lark-okr-progress-list.md) |
22
+ | 为自己写一组 OKR | 优先用 `+batch-create` 创建 Objective/KR 骨架 | [`batch-create`](references/lark-okr-batch-create.md), [`contentblock`](references/lark-okr-contentblock.md) |
23
+ | 只新增一条 O 或单条 KR | 用 `+create` | [`create`](references/lark-okr-create.md) |
24
+ | 编辑内容/备注/截止时间 | 用 `+patch` | [`patch`](references/lark-okr-patch.md) |
25
+ | 修改 OKR 分数 | 只有用户明确说“分数”“评分”“打分”“score”时才用 `+patch --score`;分数不是进度/完成度 | [`patch`](references/lark-okr-patch.md) |
26
+ | 调整顺序或权重 | 用 `+reorder` / `+weight` | [`reorder`](references/lark-okr-reorder.md), [`weight`](references/lark-okr-weight.md) |
27
+ | 更新数字进度/完成度 | 百分比或不带单位数字用 `+indicator-update`;需要改单位/目标值时查指标后用 `indicators patch` | [`indicator-update`](references/lark-okr-indicator-update.md), [`indicators`](references/lark-okr-indicators.md) |
28
+ | 写文字进展 | 用 `+progress-create`;如果文本和数字都有,百分比或默认单位可使用 `--progress-percent` 统一改,非百分比单位更新量化指标 | [`progress-create`](references/lark-okr-progress-create.md), [`progress-list`](references/lark-okr-progress-list.md), [`progress-update`](references/lark-okr-progress-update.md) |
29
+ | 对齐目标 | 直接按对齐关系工作流处理 | [`alignments`](references/lark-okr-alignments.md) |
30
+
31
+ 分类只在用户明确要求分类,或创建 Objective 返回 `invalid parameters` 且怀疑租户强制开启分类时处理:用 `lark-cli okr categories list --params '{"owner_type":"user","page_size":100}' --as user` 查可用分类,选择语义合适且 `enabled=true` 的分类 ID;分类可后续调整,不必停下等待用户确认。
32
+
33
+ 获取当前用户用 `contact +get-user`;按姓名/邮箱查他人用 `contact +search-user`,拿到 `open_id` 后再查 OKR。
34
+
35
+ ```bash
36
+ lark-cli contact +search-user --query "张三" --has-chatted --as user
37
+ ```
38
+
39
+ 最常用 OKR 命令示例:
40
+
41
+ ```bash
42
+ # 查用户周期,再用周期 ID 查详情
43
+ lark-cli okr +cycle-list --user-id "ou_xxx" --as user
44
+ lark-cli okr +cycle-detail --cycle-id 7000000000000000001 --as user
45
+
46
+ # 批量创建 Objective/KR
47
+ lark-cli okr +batch-create \
48
+ --cycle-id 7000000000000000001 \
49
+ --input '[{"text":"提升产品用户体验","notes":"关注核心流程和用户反馈","krs":[{"text":"核心流程满意度达到 4.8 分"}]}]' \
50
+ --as user
51
+
52
+ # 更新数字进度/完成度
53
+ lark-cli okr +indicator-update \
54
+ --level key-result \
55
+ --id 7000000000000000003 \
56
+ --value 75 \
57
+ --as user
58
+ ```
59
+
60
+ 分数和进度不要混用:用户说“进度”“完成度”“当前做到 75%”时,通常是在改量化指标或写进展记录,不是在改 `score`。只有明确要求修改 OKR 分数/评分/打分时,才使用 [`+patch --score`](references/lark-okr-patch.md);`score` 取值是 0-1,最多一位小数。
61
+
62
+ 进度判断规则:用户说“进度”“完成度”时,先判断是否是量化数字。数字进度通常对应量化指标;不可量化文本对应进展记录。需要修改指标单位时看 [`lark-okr-indicators.md`](references/lark-okr-indicators.md)
63
+
17
64
  ## Shortcuts(推荐优先使用)
18
65
 
19
66
  Shortcut 是对常用操作的高级封装(`lark-cli okr +<verb> [flags]`)。有 Shortcut 的操作优先使用。
20
67
 
21
- | Shortcut | 说明 |
22
- |----------------------------------------------------------------|--------------------------|
23
- | [`+cycle-list`](references/lark-okr-cycle-list.md) | 获取特定用户的 OKR 周期列表,可以按时间筛选 |
24
- | [`+cycle-detail`](references/lark-okr-cycle-detail.md) | 获取特定 OKR 中所有目标和关键结果的内容 |
25
- | [`+progress-list`](references/lark-okr-progress-list.md) | 获取目标或关键结果的所有进展记录列表 |
26
- | [`+progress-get`](references/lark-okr-progress-get.md) | 根据 ID 获取单条 OKR 进展记录 |
27
- | [`+progress-create`](references/lark-okr-progress-create.md) | 为目标或关键结果创建进展记录 |
28
- | [`+progress-update`](references/lark-okr-progress-update.md) | 更新指定 ID 的进展记录内容 |
29
- | [`+progress-delete`](references/lark-okr-progress-delete.md) | 删除指定 ID 的进展记录(不可恢复) |
30
- | [`+upload-image`](references/lark-okr-image-upload.md) | 上传图片用于 OKR 进展记录的富文本内容 |
31
- | [`+batch-create`](references/lark-okr-batch-create.md) | 批量创建 Objective 和 KR |
32
- | [`+reorder`](references/lark-okr-reorder.md) | 调整 Objective 或 KR 的顺位 |
33
- | [`+weight`](references/lark-okr-weight.md) | 调整 Objective 或 KR 的权重 |
34
- | [`+indicator-update`](references/lark-okr-indicator-update.md) | 更新 Objective 或 KR 的指标当前值(简单场景推荐)。更复杂的指标操作见 [量化指标管理](references/lark-okr-indicators.md) |
35
- | [`+patch`](references/lark-okr-patch.md) | 部分更新 Objective 或 KR(content、notes、score、deadline) |
68
+ | Shortcut | 说明 |
69
+ |----------------------------------------------------------------|-----------------------------------------------------------------------------------|
70
+ | [`+cycle-list`](references/lark-okr-cycle-list.md) | 分页获取特定用户的 OKR 周期列表,可以用 `--time-range` 对当前页后置筛选 |
71
+ | [`+cycle-detail`](references/lark-okr-cycle-detail.md) | 获取特定 OKR 中所有目标和关键结果的内容 |
72
+ | [`+create`](references/lark-okr-create.md) | 创建单个 Objective(可带备注),或向已有 Objective 新增 KR |
73
+ | [`+progress-list`](references/lark-okr-progress-list.md) | 分页获取目标或关键结果的进展记录列表 |
74
+ | [`+progress-get`](references/lark-okr-progress-get.md) | 根据 ID 获取单条 OKR 进展记录 |
75
+ | [`+progress-create`](references/lark-okr-progress-create.md) | 为目标或关键结果创建进展记录 |
76
+ | [`+progress-update`](references/lark-okr-progress-update.md) | 更新指定 ID 的进展记录内容 |
77
+ | [`+progress-delete`](references/lark-okr-progress-delete.md) | 删除指定 ID 的进展记录(不可恢复) |
78
+ | [`+upload-image`](references/lark-okr-image-upload.md) | 上传图片用于 OKR 进展记录的富文本内容 |
79
+ | [`+batch-create`](references/lark-okr-batch-create.md) | 批量创建 Objective(可带备注)和 KR |
80
+ | [`+reorder`](references/lark-okr-reorder.md) | 调整 Objective 或 KR 的顺位 |
81
+ | [`+weight`](references/lark-okr-weight.md) | 调整 Objective 或 KR 的权重 |
82
+ | [`+indicator-update`](references/lark-okr-indicator-update.md) | 更新 Objective 或 KR 的当前进度指标。更复杂的量化指标操作见 [量化指标管理](references/lark-okr-indicators.md) |
83
+ | [`+patch`](references/lark-okr-patch.md) | 部分更新 Objective 或 KR(content、notes、score、deadline) |
84
+
85
+ ### 创建场景选择
86
+
87
+ - **单条创建优先用 [`+create`](references/lark-okr-create.md)**:适合创建一个 Objective,或给已有 Objective 增加一个 KR。
88
+ - **批量创建用 [`+batch-create`](references/lark-okr-batch-create.md)**:适合一次创建多个 Objective,并可同时附带多个 KR。
89
+ - 如果你只需要修改已有 Objective / KR 的内容、备注、分数或截止时间,使用 [`+patch`](references/lark-okr-patch.md)。
36
90
 
37
91
  ## 格式说明
38
92
 
39
93
  - [`OKR 业务实体`](references/lark-okr-entities.md) 获取 OKR 实体结构,定义和关系,帮助你更好的使用 OKR 功能
40
- - [`ContentBlock 富文本格式`](references/lark-okr-contentblock.md) — Objective/KeyResult/Progress 中 Content/Note 字段使用的富文本格式说明,以及简化的半纯文本(SemiPlainContent)格式的进一步说明。
94
+ - [`ContentBlock 富文本格式`](references/lark-okr-contentblock.md) — Objective/KeyResult/Progress 中 Content/Note
95
+ 字段使用的富文本格式说明,以及简化的半纯文本(SemiPlainContent)格式的进一步说明。
41
96
  - **强烈建议** 在操作 OKR 前,阅读[`OKR 业务实体`](references/lark-okr-entities.md)以了解基础概念
42
97
 
43
98
  ## API Resources
@@ -56,18 +111,9 @@ Shortcut 是对常用操作的高级封装(`lark-cli okr +<verb> [flags]`)
56
111
  ### cycles
57
112
 
58
113
  - `list` — 批量获取用户周期
59
- - `objectives_position` — 更新用户周期下全部目标的位置
60
- - 请求中必须携带对应周期下全部目标的 ID,否则会参数校验失败。以传入的目标ID顺序重新排列目标。
61
- - `objectives_weight` — 更新用户周期下全部目标的权重
62
- - 请求中必须同时修改对应周期下全部目标的权重,且所有权重值的和必须等于 1 ,否则会参数校验失败。例如周期下有 2 个目标时:
63
- - 正确指令示例如下:
64
- ``` bash
65
- lark-cli okr cycles objectives_weight --params '{"cycle_id": "7000000000000000001"}' --data '{"objective_weights": [{"objective_id": "7000000000000000002", "weight": 0.7}, {"objective_id": "7000000000000000003", "weight": 0.3}]}' --as user
66
- ```
67
114
 
68
115
  ### cycle.objectives
69
116
 
70
- - `create` — 创建目标
71
117
  - `list` — 批量获取用户周期下的目标
72
118
 
73
119
  ### indicators
@@ -110,7 +156,6 @@ Shortcut 是对常用操作的高级封装(`lark-cli okr +<verb> [flags]`)
110
156
 
111
157
  ### objective.key_results
112
158
 
113
- - `create` — 创建关键结果
114
159
  - `list` — 批量获取目标下的关键结果
115
160
 
116
161
  ## 不在本 skill 范围
@@ -10,23 +10,7 @@
10
10
  # 批量创建 2 个 Objective,各带 2 个 KR。
11
11
  lark-cli okr +batch-create \
12
12
  --cycle-id 7000000000000000001 \
13
- --input '[
14
- {
15
- "text": "提升产品用户体验",
16
- "mention": ["ou_xxxxxxxx"],
17
- "krs": [
18
- {"text": "页面加载速度提升 50%", "mention": ["ou_yyyyyyyy"]},
19
- {"text": "用户满意度达到 4.8 分"}
20
- ]
21
- },
22
- {
23
- "text": "拓展新市场份额",
24
- "krs": [
25
- {"text": "新增 10 个城市覆盖"},
26
- {"text": "市场份额提升至 25%"}
27
- ]
28
- }
29
- ]' \
13
+ --input '[{"text":"提升产品用户体验","mention":["ou_xxxxxxxx"],"notes":"重点关注核心路径体验","krs":[{"text":"页面加载速度提升 50%","mention":["ou_yyyyyyyy"]},{"text":"用户满意度达到 4.8 分"}]},{"text":"拓展新市场份额","krs":[{"text":"新增 10 个城市覆盖"},{"text":"市场份额提升至 25%"}]}]' \
30
14
  --as user
31
15
 
32
16
  # 从文件读取输入
@@ -44,17 +28,22 @@ lark-cli okr +batch-create \
44
28
  ```
45
29
  - mention 是可选参数,不需要使用“@”提及其他用户时不传入。
46
30
  - 传入的 mention 参数会以 @对应用户的形式,添加在文本后。
31
+ - Objective 的 notes / notes_mention 是可选参数,用于创建目标备注;KR 不支持备注。
32
+ - Objective 的 category_id 是可选参数;也可以通过 `--category-id` 给所有未显式设置分类的 Objective 指定默认分类。
47
33
 
48
34
  ## 参数
49
35
 
50
36
  | 参数 | 必填 | 默认值 | 说明 |
51
37
  |------------------|----|-----------|------------------------------------------------------------|
52
38
  | `--cycle-id` | 是 | — | OKR 周期 ID(int64 类型) |
53
- | `--input` | 是 | — | JSON 数组格式的 Objective 列表。支持 `@文件路径` 从文件读取或 `@-` 从 stdin 读取。 |
39
+ | `--input` | 是 | — | JSON 数组格式的 Objective 列表。支持 `@文件路径` 从文件读取或 `-` 从 stdin 读取。 |
40
+ | `--category-id` | 否 | — | 默认 Objective 分类 ID。仅用于 input 中未设置 `category_id` 的 Objective。通常不需要传入,见下方“分类提示”。 |
54
41
  | `--user-id-type` | 否 | `open_id` | mention 中使用的用户 ID 类型:`open_id` \| `union_id` \| `user_id` |
55
42
  | `--dry-run` | 否 | — | 预览 API 调用而不实际执行 |
56
43
  | `--format` | 否 | `json` | 输出格式 |
57
44
 
45
+ > **分类提示**:当用户明确要求设置 Objective 分类,或创建 Objective 返回 `invalid parameters` 且怀疑租户强制开启分类时,可以配置 category-id 字段进行创建。先运行 `lark-cli okr categories list --as user` 查看可用分类,然后选择一个语义合适且 `enabled=true` 的分类 ID 作为 `category-id`。分类创建后可以再调整;不必因为分类选择停下等待用户确认。
46
+
58
47
  ## 输入格式
59
48
 
60
49
  ```json
@@ -62,6 +51,9 @@ lark-cli okr +batch-create \
62
51
  {
63
52
  "text": "Objective 内容",
64
53
  "mention": ["ou_xxxxxxxx", "ou_yyyyyyyy"],
54
+ "notes": "Objective 备注",
55
+ "notes_mention": ["ou_xxxxxxxx"],
56
+ "category_id": "7249339036661170180",
65
57
  "krs": [
66
58
  {
67
59
  "text": "KR 内容",
@@ -72,6 +64,15 @@ lark-cli okr +batch-create \
72
64
  ]
73
65
  ```
74
66
 
67
+ 字段说明:
68
+
69
+ - `text`:Objective 或 KR 内容,必填。
70
+ - `mention`:追加到内容后的用户 mention,可选。
71
+ - `notes`:Objective 备注文本,可选,仅 Objective 支持。
72
+ - `notes_mention`:追加到 Objective 备注后的用户 mention,可选,仅在 `notes` 存在时有意义。
73
+ - `category_id`:Objective 分类 ID,可选;会覆盖命令级 `--category-id`。
74
+ - `krs`:当前 Objective 下要创建的 KR 列表,可选。
75
+
75
76
  ## 工作流程
76
77
 
77
78
  1. 使用 `+cycle-list` 获取可用的 OKR 周期 ID