@tickernelz/paperclip-pro-adapter-codex-local 2026.1007.3 → 2026.1008.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tickernelz/paperclip-pro-adapter-codex-local",
3
- "version": "2026.1007.3",
3
+ "version": "2026.1008.1",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/tickernelz/paperclip-pro",
6
6
  "bugs": {
@@ -39,8 +39,8 @@
39
39
  ],
40
40
  "dependencies": {
41
41
  "@agentclientprotocol/codex-acp": "^1.6.2",
42
- "@tickernelz/paperclip-pro-adapter-utils": "2026.1007.3",
43
- "@tickernelz/paperclip-pro-shared": "2026.1007.3",
42
+ "@tickernelz/paperclip-pro-adapter-utils": "2026.1008.1",
43
+ "@tickernelz/paperclip-pro-shared": "2026.1008.1",
44
44
  "picocolors": "^1.1.1"
45
45
  },
46
46
  "devDependencies": {
@@ -11,7 +11,7 @@ Call these tools directly by name; never list, search or catalog tools to find
11
11
  them: `openwa_send`, `openwa_read_chat`, `openwa_get_media`, `openwa_find`,
12
12
  `openwa_request_approval`, `openwa_approval_resolve`, `openwa_stay_silent`,
13
13
  `openwa_handoff`, `openwa_catalog`, `openwa_describe`, `openwa_call`,
14
- `openwa_endpoint_config`, `openwa_linked_list`, `openwa_linked_read`,
14
+ `openwa_endpoint_config`, `openwa_autonomy_window`, `openwa_linked_list`, `openwa_linked_read`,
15
15
  `openwa_linked_get_media`. The run
16
16
  guidance already states your trigger class, profile, owners and whether you may
17
17
  reply; do not re-read this skill to confirm them.
@@ -185,12 +185,18 @@ of the person you answer.
185
185
 
186
186
  ## Progress, silence and handoff
187
187
 
188
- - When work takes longer than about a minute and nothing in the chat has
189
- acknowledged the request yet, send one short progress update with
190
- `openwa_send` (when replying is allowed). Skip it when you are about to reply,
191
- and never restate what was already sent. The server may remind you inside the
192
- run while a trigger waits unacknowledged; that reminder is never sent to
193
- WhatsApp and stops once you send to the chat.
188
+ - Send one progress update with `openwa_send` only to a person whose message
189
+ is in this run's `messages` and who has had no reply from you yet, and only
190
+ when your result is still minutes away. Never restate what was already sent,
191
+ and never post internal status to a group (approval, review, tests, retries,
192
+ blocked, waiting for a deploy); that belongs on the issue. The server may
193
+ remind you inside the run while a trigger waits unacknowledged; that reminder
194
+ is never sent to WhatsApp and stops once you send to the chat.
195
+ - Wakes without a new chat message (empty `messages`: issue comments, child
196
+ issues completing, other non-chat wakes) post to the chat only a final result
197
+ that is live or delivered and not yet announced there; otherwise update the
198
+ issue and send nothing to the chat. An `approval_resolved` wake still tells
199
+ the requester the outcome as described under Approvals.
194
200
  - `openwa_stay_silent({triggerIds?})` marks triggers you deliberately leave
195
201
  unanswered (default: every visible pending trigger of this run). Use it when no
196
202
  reply is appropriate.
@@ -279,6 +285,19 @@ with before and after values. Credentials, number mode, owners and the gateway
279
285
  admin level are changed by a person in Paperclip and fail with
280
286
  `ui_only_setting`.
281
287
 
288
+ ## Autonomy windows (owner runs only)
289
+
290
+ When an owner hands named work over for autonomous progress ("full otonom",
291
+ "aku approve commit, push, deploy"), call
292
+ `openwa_autonomy_window({operation: "open", issues: ["ZHA-745"], hours?, maxAccepts?, idempotencyKey})`
293
+ for the issues they name; descendants are included. `hours` is 1 to 24 (default
294
+ 12). Ask once which issues when their words do not name the work. While the
295
+ window is open, plain confirmation cards created in those trees come back
296
+ accepted and audited; questions, verdicts, governed approvals and cards marked
297
+ `destructive: true` or without `destructive: false` still wait for a person. When the owner says they are back,
298
+ call `{operation: "close", idempotencyKey}` (optionally with `issues`); `list` shows the
299
+ live windows. Other runs get `owner_only`.
300
+
282
301
  ## Linked numbers (owner runs only)
283
302
 
284
303
  The board may link other WhatsApp numbers on the same gateway, such as an
@@ -386,6 +386,7 @@ Key shared semantics:
386
386
  - **Resolver audience.** Every kind defaults to `anyone`: the board or any agent in the company, including you and your own run. **Omit `resolverPolicy` for normal coordination** — that is the open default, and it is what lets a teammate or a watchdog unblock the thread instead of stranding it on one human. Ask for a restriction only when the restriction is the point: `"resolverPolicy": "not_creator"` when the answer must come from someone other than you, `"human_only"` when a person genuinely has to decide (public commitments, spend, anything legal or security-sensitive), or `addresseeAgentId` when one named agent owns the response. Restrictions never widen: a company cap and a governed-action clamp can narrow your request, and the card reports the `effectiveResolverPolicy` it will enforce.
387
387
  - **Continuation policy.** `request_checkbox_confirmation` and `request_item_verdicts` default to `wake_assignee`, which wakes you after the card is resolved or newly resolved item verdicts are submitted. `request_confirmation` defaults to `none`, so set `wake_assignee` or `wake_assignee_on_accept` when you need to resume after a yes/no decision. `none` never wakes you — only use it when you truly do not need to resume.
388
388
  - **Target binding and staleness.** `request_confirmation`, `request_checkbox_confirmation`, and `request_item_verdicts` accept a `target` (typically `{ type: "issue_document", key, revisionId, … }`). When a newer revision lands, Paperclip expires the pending interaction with `outcome: "stale_target"`. Rebuild against the latest revision and create a fresh interaction.
389
+ - **Autonomy windows and destructive steps.** Every `request_confirmation` declares `payload.destructive`: `false` for a routine step (push, merge, deploy, upgrade, restart with a backup and rollback path), `true` for a destructive one (force-push, history rewrite, data loss or a data change without a fresh dump, secrets). While the owner has an autonomy window open on your issue tree, a card with `destructive: false` comes back from create already `accepted`; read the returned `status` and continue instead of waiting. A card with `destructive: true`, a card without the field, and every other kind still wait for a person.
389
390
  - **Supersede on user comment.** Request kinds default `supersedeOnUserComment` to `false`, so the pending card stays open while the board/user keeps discussing it in ordinary comments. Set `supersedeOnUserComment: true` when a new comment should replace the pending request; it then expires with `outcome: "superseded_by_comment"`, and on that wake you address the comment and create a new interaction if approval is still required.
390
391
  - **Withdraw and terminal expiry.** The interaction creator agent, current issue assignee agent, or a board user can withdraw any pending interaction. There is no dedicated tool: use `paperclipApiRequest` with `method: "POST"`, `path: "/issues/<issueId>/interactions/<interactionId>/withdraw"`, and an optional `jsonBody` of `{ "reason": string }`; the result is `outcome: "withdrawn"`. Closing an issue as `done` or `cancelled` expires all remaining pending interactions with `outcome: "issue_closed"` and never wakes the closed issue.
391
392
  - **Idempotency.** Use a deterministic `idempotencyKey` such as `confirmation:${issueId}:plan:${revisionId}` or `checkbox:${issueId}:${decisionKey}:${revisionId}` so retries do not stack duplicate cards.