@scotthuang/agent-knock-knock 0.14.5 → 0.14.7

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 (52) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +1 -1
  3. package/dist/src/conversation-list-presentation.d.ts +18 -0
  4. package/dist/src/conversation-list-presentation.js +79 -0
  5. package/dist/src/conversation-list-presentation.js.map +1 -0
  6. package/dist/src/conversation-list.d.ts +14 -2
  7. package/dist/src/conversation-list.js +28 -2
  8. package/dist/src/conversation-list.js.map +1 -1
  9. package/dist/src/desktop-cli-adapter.js +5 -2
  10. package/dist/src/desktop-cli-adapter.js.map +1 -1
  11. package/dist/src/desktop-compatibility.d.ts +4 -1
  12. package/dist/src/desktop-compatibility.js +9 -4
  13. package/dist/src/desktop-compatibility.js.map +1 -1
  14. package/dist/src/desktop-interaction-projection.d.ts +2 -1
  15. package/dist/src/desktop-interaction-projection.js +3 -1
  16. package/dist/src/desktop-interaction-projection.js.map +1 -1
  17. package/dist/src/desktop-ipc-client.js +3 -3
  18. package/dist/src/desktop-ipc-client.js.map +1 -1
  19. package/dist/src/desktop-ipc-native-operations.d.ts +2 -1
  20. package/dist/src/desktop-ipc-native-operations.js +5 -1
  21. package/dist/src/desktop-ipc-native-operations.js.map +1 -1
  22. package/dist/src/desktop-list.d.ts +1 -0
  23. package/dist/src/desktop-list.js +1 -0
  24. package/dist/src/desktop-list.js.map +1 -1
  25. package/dist/src/desktop-public-projection.js +16 -13
  26. package/dist/src/desktop-public-projection.js.map +1 -1
  27. package/dist/src/desktop-runtime.js +1 -1
  28. package/dist/src/desktop-runtime.js.map +1 -1
  29. package/dist/src/desktop-task-interactions.d.ts +2 -1
  30. package/dist/src/desktop-task-interactions.js +3 -1
  31. package/dist/src/desktop-task-interactions.js.map +1 -1
  32. package/dist/src/desktop-task-service.d.ts +2 -1
  33. package/dist/src/desktop-task-service.js.map +1 -1
  34. package/dist/src/semantic-tool-command-helpers.js +62 -0
  35. package/dist/src/semantic-tool-command-helpers.js.map +1 -1
  36. package/dist/src/semantic-tool-descriptions.d.ts +1 -1
  37. package/dist/src/semantic-tool-descriptions.js +6 -6
  38. package/dist/src/semantic-tool-descriptions.js.map +1 -1
  39. package/dist/src/semantic-tool-list-projection.d.ts +2 -0
  40. package/dist/src/semantic-tool-list-projection.js +89 -7
  41. package/dist/src/semantic-tool-list-projection.js.map +1 -1
  42. package/dist/src/semantic-tool-schemas.js +1 -1
  43. package/dist/src/semantic-tool-schemas.js.map +1 -1
  44. package/dist/src/terminal-list-cli-adapter.js +1 -1
  45. package/dist/src/terminal-list-cli-adapter.js.map +1 -1
  46. package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
  47. package/docs/codex-cli-native-compatibility.md +20 -10
  48. package/docs/codex-desktop-compatibility.md +47 -9
  49. package/docs/desktop-create.md +5 -3
  50. package/docs/operator-guide.md +13 -7
  51. package/package.json +1 -1
  52. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +8 -6
@@ -18,16 +18,19 @@ version and build. It is not a minimum-version promise:
18
18
  | macOS Desktop application | Send to live owner / Status / Watch | Native approvals, answers, model/permission changes, cancellation | New conversation |
19
19
  | --- | --- | --- | --- |
20
20
  | `26.1002.52244` / `13536` | Existing verified adapter | Existing verified adapter | Not enabled |
21
- | `26.1007.30912` / `20156` | Send profile for the new-conversation workflow; read-only observation retains exact owner/turn checks | Not enabled: these operations have not been reverified on this build | Available in AKK 0.14.5; see the creation boundary below |
21
+ | `26.1007.30912` / `20156` | Send profile for the new-conversation workflow; read-only observation retains exact owner/turn checks | AKK 0.14.7 adds command/file approvals: allow once or reject. Answers, model/permission changes, and cancellation remain unavailable | Available in AKK 0.14.5; see the creation boundary below |
22
22
  | Other builds | Compatible read-only observations may work; no native writes are advertised | Not enabled | Not enabled |
23
23
 
24
- The `20156` profile does not inherit the old build's native-control approval.
25
- List and Status keep pending question/approval content visible when it can be
26
- read reliably, but expose no executable Respond/Approve action and direct the
27
- user to Desktop. Watch attention notifications follow the same boundary.
24
+ The `20156` profile does not inherit the old build's full native controls.
25
+ AKK 0.14.6 exposes pending interactions but requires handling them in
26
+ Desktop. AKK 0.14.7 adds an Approve action for recognized
27
+ command/file requests, with explicit `approve_once` or `reject` decisions.
28
+ Question replies and other unsupported controls still direct the user to
29
+ Desktop. Watch attention notifications follow the same per-operation boundary.
28
30
  `desktop_scan.send_contract_verified` reports the Send profile;
31
+ `approval_contract_verified` reports the per-build approval profile;
29
32
  `write_contract_verified` continues to mean the full native-control profile.
30
- The new profile and creation workflow are available starting in AKK 0.14.5.
33
+ The Send profile and creation workflow are available starting in AKK 0.14.5.
31
34
 
32
35
  The original fully reviewed application is macOS Codex Desktop `26.1002.52244`, build `13536`,
33
36
  bundle ID `com.openai.codex`, installed as `/Applications/ChatGPT.app`. These
@@ -76,6 +79,40 @@ No Desktop operation types a slash command or uses terminal activity as exact
76
79
  completion evidence. Existing terminal capabilities remain separate and retain
77
80
  their previous checks.
78
81
 
82
+ ## Approval validation on build 20156
83
+
84
+ The 2026-10-14 validation for AKK 0.14.7 uses macOS Desktop `26.1007.30912`,
85
+ build `20156`, and one dedicated test conversation.
86
+
87
+ Real semantic Send, Status and Approve calls passed four cases:
88
+
89
+ - Command allowed once: the original item completed with exit code 0 and the
90
+ expected output marker.
91
+ - Command rejected: the original item became `declined`; its target file was
92
+ never created.
93
+ - File change allowed once: the original item completed and the dedicated file
94
+ contained exactly the expected text.
95
+ - File change rejected: the original item became `declined`; its target file
96
+ was never created.
97
+
98
+ All four responses reached `confirmed` with `exact_approval_item_advanced` and
99
+ one dispatch attempt. Both conversation and exact Watch targets were exercised.
100
+ Repeated consumed semantic approval actions were rejected without another
101
+ dispatch. Approval-attention and completion callbacks were accepted once each by
102
+ an isolated local receiver. The conversation finished idle, with no pending
103
+ interaction and its original read-only/on-request settings unchanged.
104
+ An IPC acknowledgement alone is not confirmation.
105
+
106
+ Approval responses retain exact thread, turn, owner, and typed request identity
107
+ checks. A repeated response uses its durable record; a possibly submitted
108
+ response is observed without resending. The supported decisions do not grant
109
+ persistent permission or change the conversation's permission mode. This run
110
+ does not establish support for question replies, settings, cancellation, or
111
+ external-channel notification delivery on this build. Network-form command
112
+ approvals share the existing typed request path but were not separately
113
+ live-tested; persistent approvals and permission-request approvals remain
114
+ outside this operation's supported decisions.
115
+
79
116
  ## New-conversation boundary
80
117
 
81
118
  Use `agent_knock_knock_desktop_create` or the `desktop-create` CLI command; see
@@ -102,9 +139,10 @@ No external channel delivery or newer-build native controls were exercised.
102
139
  This route is intentionally separate from loading or replacing an existing
103
140
  conversation. A failed or uncertain create/load/send stage must preserve its
104
141
  record and exact identities; it must not silently create another conversation
105
- or replay a task. Native approvals and questions on build `20156` still need
106
- to be handled in Desktop. The broader native controls remain enabled only for
107
- build `13536`, where those effects were previously verified.
142
+ or replay a task. AKK 0.14.7 supports the command/file approvals described
143
+ above on build `20156`; question replies and the broader native controls remain
144
+ unavailable there. Those remain
145
+ enabled only for build `13536`, where their effects were previously verified.
108
146
 
109
147
  ## Find and select a conversation
110
148
 
@@ -119,9 +119,11 @@ joining unrelated work.
119
119
 
120
120
  The 0.14.5 profile enables new-conversation creation and Desktop Send on
121
121
  macOS Desktop `26.1007.30912`, build `20156`. It preserves exact owner and task
122
- checks for Status/Watch. Native approvals, question replies, permission/model
123
- changes, and cancellation have not been reverified on this build and remain
124
- unavailable: handle those actions in Desktop.
122
+ checks for Status/Watch. AKK 0.14.7 adds command/file approvals with explicit
123
+ allow-once or reject decisions. Question replies,
124
+ permission/model changes, and cancellation remain unavailable on this build;
125
+ handle those actions in Desktop. Approval does not change the permissions
126
+ inherited when the conversation was created.
125
127
 
126
128
  The existing full native-control profile for Desktop `26.1002.52244`, build
127
129
  `13536`, is unchanged; it does not enable this new creation workflow. These are
@@ -53,13 +53,19 @@ Direct slash commands are available in every first-party Host integration:
53
53
  | `/akk respond <turn-id> <answer>` | Answer a question inside the same managed Turn. |
54
54
  | `/akk cancel <turn-id>` | Interrupt one exact active managed Turn. |
55
55
 
56
- AKK List presents one `conversations[]` collection. It merges terminal/backend
57
- rows only when their exact current native identities match. A matching project
58
- or title does not establish that link. Select a conversation and action; AKK
59
- chooses the supported transport. Bound task and interaction IDs retain their
60
- original provider, and an uncertain mutation is never retried through another
61
- transport. The [CLI backend guide](codex-cli-native-compatibility.md#automatic-conversation-routing-2026-10-10)
62
- describes backend preference and terminal fallback in detail.
56
+ AKK List presents **CLI** and **Desktop** in one `conversations[]` collection,
57
+ with Codex/Claude Code as the agent type. Choose the displayed conversation and
58
+ action; AKK selects the connection. The default view groups a one-to-one
59
+ same-agent/project terminal and direct candidate without changing the terminal's
60
+ identity, status, actions or dispatch checks. Multiple candidates and known
61
+ identity conflicts stay separate; direct-only CLI conversations remain visible.
62
+ Use `terminalDebug: true` or `list --terminal-debug` for all unassociated
63
+ connections and routing details. A display group is not proof that its candidates
64
+ are the same native session, and neither rows nor Watches are a task count.
65
+ Bound task and interaction IDs retain their original provider; uncertain input
66
+ is never retried through another transport. The
67
+ [CLI backend guide](codex-cli-native-compatibility.md#automatic-conversation-routing-2026-10-10)
68
+ describes routing evidence and presentation boundaries.
63
69
 
64
70
  The terminal-specific commands in the table require a physical terminal;
65
71
  Desktop interaction, model, permission, and cancellation controls use their
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scotthuang/agent-knock-knock",
3
- "version": "0.14.5",
3
+ "version": "0.14.7",
4
4
  "description": "Delegate to existing Codex CLI, Codex Desktop, and Claude Code sessions from OpenClaw or compatible controller Hosts, with native direct control and supported terminal fallbacks.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -19,9 +19,11 @@ Keep the user's requested scope and approval boundaries. Do not expand a task, a
19
19
 
20
20
  ## Choose a conversation
21
21
 
22
- Use `conversations[]` from List as the primary collection and select by title, project and current identity. Choose the row's exact conversation and advertised operation; AKK chooses the route, including Status, Send, Watch and permission controls. Callers do not select between a backend and a terminal. For a proven terminal/backend match, `terminal_controls[]` preserves that terminal’s managed Turns, recovery and capability-specific actions inside the conversation row; these are controls for the same conversation, not extra tasks. The raw CLI retains `terminals[]`, `codex_cli_sessions[]`, `claude_cli_sessions[]` and `desktop_sessions[]` for compatibility and private authority, but do not present these again as extra conversations when `conversations[]` exists.
22
+ Present `conversations[]` as **CLI** or **Desktop** using `surface`, and keep Codex/Claude Code as the agent type. Select the displayed `conversation_id` and its advertised operation; AKK chooses the connection internally. Do not make separate user-facing backend and terminal lists, repeat raw discovery arrays, or count Watches as additional conversations or tasks. Preserve unavailable actions, current questions/approvals, and management/recovery records. Scoped controls, when present, are operations on exact targets within a row, not extra conversations.
23
23
 
24
- AKK prefers a reachable direct connection only when it proves the exact current native session and process or thread. A terminal and backend row merge only with exact identity evidence, never matching cwd, title, newest history or version alone. Unresolved representations may remain separate; do not assume they are different tasks or send twice. The routing diagnostics describe available evidence, not authority to skip a guard. An unavailable backend may retain an eligible terminal path; a busy, blocked or mismatched native task is not an excuse to try terminal input. For a selected physical terminal without a proven native anchor, targeted conversation operations, including Status, may run an advertised idle-only `/status` identity inspection when backend candidates exist. This can display a native status card but submits no user task; a working or blocked terminal is not interrupted. List sends no terminal input. If a dispatch is uncertain, keep its receipt and inspect it instead of retrying another route.
24
+ Default CLI presentation folds one same-agent, same-project terminal/backend candidate pair into the original terminal row. This is display grouping only: the candidate contributes no identity, status or permissions, and does not authorize backend dispatch. Known conflicts or multiple candidates remain separate. Backend-only CLI conversations remain discoverable. If a particular connection is missing or ambiguous, use `terminalDebug: true` (CLI `list --terminal-debug`) to expand every unassociated connection and routing detail. A same-project embedded CLI and an independent direct CLI can share a default display row when their identities are unknown; the expanded view preserves both. Display entry counts are not proof of unique native tasks.
25
+
26
+ AKK prefers a reachable direct connection only after proving the exact selected native session and process or thread. An unavailable backend may retain an eligible terminal path; busy/blocked state or identity conflict cannot authorize bypass. Targeted operations on an idle terminal can use the existing advertised `/status` inspection to learn its identity; working or blocked terminals are not interrupted. List itself sends no terminal input. Keep an uncertain dispatch receipt and inspect it instead of retrying through another connection.
25
27
 
26
28
  Use the returned `watch_id` or `turn_id` for that task's follow-up. Existing Watches and pending interactions keep their task and route. After a question or approval callback, refresh that exact Status and copy the current interaction action; do not translate its IDs to another transport. Permission operations prefer the verified backend. Backend task recovery retains the original task identity and provider. Terminal binding/menu recovery, model and lifecycle operations retain their separately advertised capability; the caller does not pick a transport. The route-specific guidance below explains those capabilities and result boundaries, not an additional route-selection step.
27
29
 
@@ -39,7 +41,7 @@ Callbacks already in flight cannot be recalled by Close or Unwatch. `accepted` p
39
41
 
40
42
  ## Direct Codex CLI
41
43
 
42
- A `conversations[]` row with `source="codex_cli"` uses an exact `codex-cli:v1:...` conversation ID. This route addresses the existing loaded backend thread and works without tmux or Herdr. It never starts a replacement CLI or treats saved history as a live owner. Embedded CLI sessions without a reachable shared backend continue to use the terminal route. Desktop uses its separate route below.
44
+ A direct Codex CLI conversation uses an exact `codex-cli:v1:...` conversation ID. This route addresses the existing loaded backend thread and works without tmux or Herdr. It never starts a replacement CLI or treats saved history as a live owner. Embedded CLI sessions without a reachable shared backend continue to use the terminal route. Desktop uses its separate route below.
43
45
 
44
46
  - Select by the returned title, working directory and native thread identity. Copy the advertised action; do not construct IDs, infer thread ownership from the newest same-directory history, or substitute another target. Unresolved physical terminal and direct thread rows can refer to the same work; select one conversation and send once.
45
47
  - Send with `agent_knock_knock_send({conversation_id,request})`. AKK preserves current settings, submits once and returns `codex-cli-watch:...` for the accepted native task. Keep the receipt if acceptance is uncertain; refresh its Status instead of blindly sending again.
@@ -51,7 +53,7 @@ Use AKK's advertised actions and read the actual operation result after backend
51
53
 
52
54
  ## Direct Claude Code
53
55
 
54
- Rows with `source="claude_cli"` use `claude-cli:v1:...` IDs for an already-running native CLI. This path is live-tested on macOS with Claude Code `2.1.296` and peer protocol `1`; Python 3 is required on the AKK side. It needs no Claude plugin, hook, special launch arguments or replacement process. Use actual advertised capabilities after upgrades, not a version number alone.
56
+ Direct Claude Code conversations use `claude-cli:v1:...` IDs for an already-running native CLI. This path is live-tested on macOS with Claude Code `2.1.296` and peer protocol `1`; Python 3 is required on the AKK side. It needs no Claude plugin, hook, special launch arguments or replacement process. Use actual advertised capabilities after upgrades, not a version number alone.
55
57
 
56
58
  - Send to a verified idle conversation. Keep its `claude-cli-watch:...` receipt: Send already creates completion monitoring with the shared 720-minute hard deadline. Do not add another Watch for that Send. Busy/blocked, held/refused or uncertain delivery must not be retried through terminal input.
57
59
  - Status on the conversation reads its latest input; Status on the Watch reads its original exact `native_input_id`. This is an input UUID, not a native turn ID. Public progress and tool-action summaries are bounded to 800 code points; List has no progress body. `agent_acceptance: proven` requires exact native sender/message/input evidence, not merely a socket write.
@@ -61,7 +63,7 @@ Rows with `source="claude_cli"` use `claude-cli:v1:...` IDs for an already-runni
61
63
 
62
64
  ## Codex Desktop
63
65
 
64
- Desktop rows in `conversations[]` have `source="codex_desktop"` and a full `desktop:v1:...` conversation ID. Their owner identity is separate from terminal selectors, managed Sessions, and managed Turns. The terminal-specific instructions below do not grant Desktop input authority.
66
+ Desktop rows in `conversations[]` have `surface="desktop"` and a full `desktop:v1:...` conversation ID. Their owner identity is separate from terminal selectors, managed Sessions, and managed Turns. The terminal-specific instructions below do not grant Desktop input authority.
65
67
 
66
68
  - List defaults to `desktop_view: "sidebar"`: persisted expanded sidebar membership, including eligible pinned threads and expanded project members. This is not a live screen or scroll-viewport snapshot. Present all returned rows, including unconnected conversations, and distinguish them from rows that can receive tasks. Report `desktop_scan` limitations when the saved layout cannot be reconstructed; do not silently substitute the historical catalog.
67
69
  - Find the intended row by title and project. Use `desktopSearch`, `desktopProject`, `desktopLimit`, and returned pagination cursor as `desktopCursor` within the same view. Use `desktop_view: "history"` explicitly to search the broader saved catalog for an older or hidden conversation. Do not assume the first page is complete or treat `live_count` as a count across unreturned pages. If several rows match, show their titles and project paths; do not invent IDs or ask for a deep link when List can discover the target.
@@ -75,7 +77,7 @@ Desktop rows in `conversations[]` have `source="codex_desktop"` and a full `desk
75
77
  - `model_options({conversation_id})` reads the current model, reasoning effort, and Plan/default mode. Desktop does not expose a model catalog (`catalog_available=false`). Use `set_model({conversation_id,model,reasoning_effort,collaboration_mode?})` only with an explicitly requested model ID; optional `collaboration_mode` is `plan` or `default`. Omitting it preserves the existing mode. Effective settings do not prove a model is available to the account. An unconfirmed update must be inspected, not blindly replayed.
76
78
  - Cancel with `cancel({watch_id})` for the exact watched task, or `cancel({conversation_id,expected_native_turn_id})` using the native task ID advertised by fresh Status. A late cancel must never interrupt a newer task. `unwatch` only stops observation. Arbitrary cold loading/resume remains unsupported; explicit creation uses the separate tool below.
77
79
 
78
- Full Desktop control is reviewed for macOS Codex Desktop `26.1002.52244` build `13536` through private local IPC. The AKK 0.14.5 profile for `26.1007.30912` build `20156` enables creation and Send/Status/Watch, but approvals, answers, permission/model changes and cancellation remain unavailable; use Desktop for those actions. The interaction instructions above apply only when the current result advertises that action. Read the actual capability and error result after an app update; never downgrade to raw UI input or relax identity checks. The native protocol has no atomic idle-and-send operation, so concurrent human input can make acceptance uncertain. Preserve the returned Watch and reconcile it instead of repeating the task.
80
+ Full Desktop control is reviewed for macOS Codex Desktop `26.1002.52244` build `13536` through private local IPC. The profile for `26.1007.30912` build `20156` supports creation and Send/Status/Watch; AKK 0.14.7 also supports command/file approvals with `approve_once` or `reject`. Answers, permission/model changes and cancellation remain unavailable on that build; handle them in Desktop. Use only the currently advertised action: approval support does not imply support for other interaction responses. Read the actual capability and error result after an app update; never downgrade to raw UI input or relax identity checks. The native protocol has no atomic idle-and-send operation, so concurrent human input can make acceptance uncertain. Preserve the returned Watch and reconcile it instead of repeating the task.
79
81
 
80
82
  ### Create a Desktop conversation
81
83