@scotthuang/agent-knock-knock 0.2.47 → 0.2.48

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 (34) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +73 -50
  3. package/dist/src/approval-policy.d.ts +2 -1
  4. package/dist/src/approval-policy.js +12 -4
  5. package/dist/src/approval-policy.js.map +1 -1
  6. package/dist/src/claude-hook-store.js +17 -6
  7. package/dist/src/claude-hook-store.js.map +1 -1
  8. package/dist/src/claude-terminal-agent-adapter.js +16 -1
  9. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  10. package/dist/src/cli.js +1037 -172
  11. package/dist/src/cli.js.map +1 -1
  12. package/dist/src/openclaw-plugin-helpers.d.ts +49 -0
  13. package/dist/src/openclaw-plugin-helpers.js +246 -0
  14. package/dist/src/openclaw-plugin-helpers.js.map +1 -0
  15. package/dist/src/openclaw-plugin.js +92 -269
  16. package/dist/src/openclaw-plugin.js.map +1 -1
  17. package/dist/src/runtime-log.js +54 -2
  18. package/dist/src/runtime-log.js.map +1 -1
  19. package/dist/src/store.js +432 -12
  20. package/dist/src/store.js.map +1 -1
  21. package/dist/src/terminal-agent-adapter.d.ts +3 -0
  22. package/dist/src/terminal-agent-adapter.js.map +1 -1
  23. package/dist/src/terminal-agent-bridge.d.ts +32 -2
  24. package/dist/src/terminal-agent-bridge.js +192 -34
  25. package/dist/src/terminal-agent-bridge.js.map +1 -1
  26. package/dist/src/terminal-control-provider.d.ts +3 -1
  27. package/dist/src/terminal-control-provider.js +41 -37
  28. package/dist/src/terminal-control-provider.js.map +1 -1
  29. package/dist/src/terminal-process-source.d.ts +12 -3
  30. package/dist/src/terminal-process-source.js +37 -6
  31. package/dist/src/terminal-process-source.js.map +1 -1
  32. package/openclaw.plugin.json +2 -2
  33. package/package.json +10 -5
  34. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +4 -18
@@ -0,0 +1,49 @@
1
+ import { type ExecutorKind } from "./executors.js";
2
+ export declare const AKK_CALLBACK_METHOD = "agent-knock-knock.callback";
3
+ export type AkkCommand = {
4
+ action: "help";
5
+ } | {
6
+ action: "list";
7
+ } | {
8
+ action: "status";
9
+ conversationId: string;
10
+ } | {
11
+ action: "describe";
12
+ conversationId: string;
13
+ } | {
14
+ action: "send";
15
+ conversationId: string;
16
+ message: string;
17
+ } | {
18
+ action: "cancel";
19
+ conversationId: string;
20
+ } | {
21
+ action: "renew";
22
+ conversationId: string;
23
+ minutes?: string;
24
+ } | {
25
+ action: "retry-callback";
26
+ conversationId: string;
27
+ } | {
28
+ action: "recover";
29
+ conversationId: string;
30
+ } | {
31
+ action: "close";
32
+ conversationId: string;
33
+ reason: string;
34
+ } | {
35
+ action: "delegate";
36
+ agent?: ExecutorKind;
37
+ request: string;
38
+ };
39
+ export declare function parseAkkCommand(args: unknown): AkkCommand;
40
+ export declare function akkUsageText(): string;
41
+ export declare function formatAkkListCommandResult(result: Record<string, unknown>): string;
42
+ export declare function resolveConversationOverrides(params: Record<string, unknown>, config: Record<string, unknown>): {
43
+ allProxy?: string;
44
+ model?: string;
45
+ };
46
+ export declare function buildAkkCommandCliArgs(command: AkkCommand, config: Record<string, unknown>, context?: {
47
+ sessionKey?: unknown;
48
+ }): string[] | undefined;
49
+ export declare function resolvePluginStoreDir(config: Record<string, unknown>, gatewayCwd?: string): string | undefined;
@@ -0,0 +1,246 @@
1
+ import path from "node:path";
2
+ import { executorDefinitionForAlias } from "./executors.js";
3
+ export const AKK_CALLBACK_METHOD = "agent-knock-knock.callback";
4
+ export function parseAkkCommand(args) {
5
+ const input = String(args ?? "").trim();
6
+ if (!input || input === "help" || input === "-h" || input === "--help") {
7
+ return { action: "help" };
8
+ }
9
+ const { token, rest } = takeToken(input);
10
+ const action = token.toLowerCase();
11
+ if (action === "list" || action === "ls" || action === "tasks") {
12
+ return { action: "list" };
13
+ }
14
+ if (action === "status" || action === "show") {
15
+ const { token: conversationId } = takeRequiredToken(rest, "Usage: /akk status <conversation-id>");
16
+ return { action: "status", conversationId };
17
+ }
18
+ if (action === "describe" || action === "summary" || action === "about") {
19
+ const { token: conversationId } = takeRequiredToken(rest, "Usage: /akk describe <conversation-id>");
20
+ return { action: "describe", conversationId };
21
+ }
22
+ if (action === "send" || action === "reply") {
23
+ const { token: conversationId, rest: message } = takeRequiredToken(rest, "Usage: /akk send <conversation-id> <message>");
24
+ const body = message.trim();
25
+ if (!body) {
26
+ throw new Error("Usage: /akk send <conversation-id> <message>");
27
+ }
28
+ return { action: "send", conversationId, message: body };
29
+ }
30
+ if (action === "cancel" || action === "stop") {
31
+ const { token: conversationId } = takeRequiredToken(rest, "Usage: /akk cancel <conversation-id>");
32
+ return { action: "cancel", conversationId };
33
+ }
34
+ if (action === "renew") {
35
+ const { token: conversationId, rest: minutesInput } = takeRequiredToken(rest, "Usage: /akk renew <conversation-id> [minutes]");
36
+ const minutes = minutesInput.trim();
37
+ if (minutes && (!Number.isFinite(Number(minutes)) || Number(minutes) <= 0)) {
38
+ throw new Error("Usage: /akk renew <conversation-id> [positive-minutes]");
39
+ }
40
+ return { action: "renew", conversationId, minutes: minutes || undefined };
41
+ }
42
+ if (action === "retry-callback" || action === "retry") {
43
+ const { token: conversationId } = takeRequiredToken(rest, "Usage: /akk retry-callback <conversation-id>");
44
+ return { action: "retry-callback", conversationId };
45
+ }
46
+ if (action === "recover") {
47
+ const { token: conversationId } = takeRequiredToken(rest, "Usage: /akk recover <conversation-id>");
48
+ return { action: "recover", conversationId };
49
+ }
50
+ if (action === "close" || action === "done") {
51
+ const { token: conversationId, rest: reason } = takeRequiredToken(rest, "Usage: /akk close <conversation-id> [reason]");
52
+ return {
53
+ action: "close",
54
+ conversationId,
55
+ reason: reason.trim() || "Closed from /akk command"
56
+ };
57
+ }
58
+ const executorDefinition = executorDefinitionForAlias(action);
59
+ if (executorDefinition) {
60
+ const request = rest.trim();
61
+ if (!request) {
62
+ throw new Error(`Usage: /akk ${executorDefinition.kind} <task>`);
63
+ }
64
+ return {
65
+ action: "delegate",
66
+ agent: executorDefinition.kind,
67
+ request
68
+ };
69
+ }
70
+ // Leaving agent unset is intentional: runDelegate applies the configured
71
+ // defaultAgent and falls back to Codex only when no default is configured.
72
+ return { action: "delegate", request: input };
73
+ }
74
+ export function akkUsageText() {
75
+ return [
76
+ "AKK usage:",
77
+ "/akk <task>",
78
+ "/akk codex <task>",
79
+ "/akk claude <task>",
80
+ "/akk cursor <task>",
81
+ "/akk list",
82
+ "/akk status <conversation-id>",
83
+ "/akk describe <conversation-id>",
84
+ "/akk send <conversation-id> <message>",
85
+ "/akk cancel <conversation-id>",
86
+ "/akk renew <conversation-id> [minutes]",
87
+ "/akk retry-callback <conversation-id>",
88
+ "/akk recover <conversation-id>",
89
+ "/akk close <conversation-id> [reason]"
90
+ ].join("\n");
91
+ }
92
+ export function formatAkkListCommandResult(result) {
93
+ const groups = [
94
+ {
95
+ label: "delegated",
96
+ tasks: arrayValue(result.delegated).length > 0
97
+ ? arrayValue(result.delegated)
98
+ : arrayValue(result.tasks)
99
+ },
100
+ { label: "terminal-controlled", tasks: arrayValue(result.terminal_controlled) },
101
+ { label: "native", tasks: arrayValue(result.native) }
102
+ ].filter((group) => group.tasks.length > 0);
103
+ const total = groups.reduce((count, group) => count + group.tasks.length, 0);
104
+ if (total === 0) {
105
+ return "AKK has no open sessions.";
106
+ }
107
+ return [
108
+ `AKK open sessions (${total}):`,
109
+ ...groups.flatMap((group) => [
110
+ `${group.label}:`,
111
+ ...group.tasks.slice(0, 20).map((task) => `- ${formatTaskLine(task)}`)
112
+ ])
113
+ ].join("\n");
114
+ }
115
+ export function resolveConversationOverrides(params, config) {
116
+ return {
117
+ allProxy: nonEmptyString(params.allProxy) ?? nonEmptyString(config.allProxy),
118
+ model: nonEmptyString(params.model) ?? nonEmptyString(config.model)
119
+ };
120
+ }
121
+ export function buildAkkCommandCliArgs(command, config, context = {}) {
122
+ const storeDir = resolvePluginStoreDir(config);
123
+ const idleTimeoutMinutes = finiteNumberString(config.idleTimeoutMinutes);
124
+ switch (command.action) {
125
+ case "help":
126
+ case "delegate":
127
+ return undefined;
128
+ case "list":
129
+ return withOptionalArgs(["list"], ["--store-dir", storeDir], ["--idle-timeout-minutes", idleTimeoutMinutes]);
130
+ case "status":
131
+ case "describe":
132
+ return withOptionalArgs([command.action, "--conversation", command.conversationId], ["--store-dir", storeDir], ["--idle-timeout-minutes", idleTimeoutMinutes]);
133
+ case "send": {
134
+ const openclawSession = nonEmptyString(context.sessionKey) ??
135
+ nonEmptyString(config.openclawSession) ??
136
+ "agent:main:main";
137
+ const overrides = resolveConversationOverrides({}, config);
138
+ return withOptionalArgs([
139
+ "send",
140
+ "--conversation",
141
+ command.conversationId,
142
+ "--message",
143
+ command.message,
144
+ "--background"
145
+ ], ["--all-proxy", overrides.allProxy], ["--model", overrides.model], ["--store-dir", storeDir], ["--idle-timeout-minutes", idleTimeoutMinutes], ["--agent-timeout-minutes", finiteNumberString(config.agentTimeoutMinutes)], ["--agent-hard-timeout-minutes", finiteNumberString(config.agentHardTimeoutMinutes)], ["--openclaw-session", openclawSession], ["--gateway-method", AKK_CALLBACK_METHOD], ["--gateway-session", openclawSession], ["--openclaw-bin", nonEmptyString(config.openclawBin)], ["--callback-command", nonEmptyString(config.callbackCommand)], ["--soft-limit", finiteNumberString(config.softLimit)], ["--hard-limit", finiteNumberString(config.hardLimit)]);
146
+ }
147
+ case "renew":
148
+ return withOptionalArgs(["renew", "--conversation", command.conversationId], [
149
+ "--minutes",
150
+ command.minutes ?? finiteNumberString(config.agentTimeoutMinutes)
151
+ ], ["--store-dir", storeDir]);
152
+ case "retry-callback":
153
+ return withOptionalArgs(["retry-callback", "--conversation", command.conversationId], ["--store-dir", storeDir]);
154
+ case "cancel": {
155
+ const overrides = resolveConversationOverrides({}, config);
156
+ return withOptionalArgs(["cancel", "--conversation", command.conversationId], ["--all-proxy", overrides.allProxy], ["--store-dir", storeDir], ["--idle-timeout-minutes", idleTimeoutMinutes]);
157
+ }
158
+ case "recover": {
159
+ const overrides = resolveConversationOverrides({}, config);
160
+ return withOptionalArgs(["recover", "--conversation", command.conversationId, "--background"], ["--all-proxy", overrides.allProxy], ["--model", overrides.model], ["--store-dir", storeDir], ["--idle-timeout-minutes", idleTimeoutMinutes]);
161
+ }
162
+ case "close":
163
+ return withOptionalArgs([
164
+ "close",
165
+ "--conversation",
166
+ command.conversationId,
167
+ "--reason",
168
+ command.reason
169
+ ], ["--store-dir", storeDir]);
170
+ }
171
+ }
172
+ export function resolvePluginStoreDir(config, gatewayCwd = process.cwd()) {
173
+ const configured = nonEmptyString(config.storeDir);
174
+ if (!configured) {
175
+ return undefined;
176
+ }
177
+ if (path.isAbsolute(configured)) {
178
+ return path.normalize(configured);
179
+ }
180
+ const configuredWorkspace = nonEmptyString(config.workspace);
181
+ const workspace = configuredWorkspace
182
+ ? path.resolve(gatewayCwd, configuredWorkspace)
183
+ : path.resolve(gatewayCwd);
184
+ return path.resolve(workspace, configured);
185
+ }
186
+ function takeRequiredToken(input, usage) {
187
+ const parsed = takeToken(input);
188
+ if (!parsed.token) {
189
+ throw new Error(usage);
190
+ }
191
+ return parsed;
192
+ }
193
+ function takeToken(input) {
194
+ const value = String(input ?? "").trimStart();
195
+ const match = value.match(/^(\S+)(?:\s+([\s\S]*))?$/);
196
+ if (!match) {
197
+ return { token: "", rest: "" };
198
+ }
199
+ return {
200
+ token: match[1],
201
+ rest: match[2] ?? ""
202
+ };
203
+ }
204
+ function nonEmptyString(value) {
205
+ return typeof value === "string" && value.trim().length > 0
206
+ ? value
207
+ : undefined;
208
+ }
209
+ function finiteNumberString(value) {
210
+ return typeof value === "number" && Number.isFinite(value)
211
+ ? String(value)
212
+ : undefined;
213
+ }
214
+ function withOptionalArgs(args, ...optionalArgs) {
215
+ for (const [flag, value] of optionalArgs) {
216
+ if (value !== undefined && value !== "") {
217
+ args.push(flag, value);
218
+ }
219
+ }
220
+ return args;
221
+ }
222
+ function arrayValue(value) {
223
+ return Array.isArray(value)
224
+ ? value.filter((item) => item !== null && typeof item === "object" && !Array.isArray(item))
225
+ : [];
226
+ }
227
+ function formatTaskLine(task) {
228
+ const executor = task.executor !== null &&
229
+ typeof task.executor === "object" &&
230
+ !Array.isArray(task.executor)
231
+ ? task.executor
232
+ : {};
233
+ return [
234
+ nonEmptyString(task.conversation_id) ?? nonEmptyString(task.id) ?? "unknown",
235
+ nonEmptyString(task.agent) ?? nonEmptyString(executor.kind) ?? "agent",
236
+ nonEmptyString(task.status) ?? "unknown",
237
+ truncateText(task.request, 90)
238
+ ].filter(Boolean).join(" | ");
239
+ }
240
+ function truncateText(value, maxLength) {
241
+ const text = String(value ?? "").replace(/\s+/g, " ").trim();
242
+ return text.length <= maxLength
243
+ ? text
244
+ : `${text.slice(0, Math.max(0, maxLength - 1))}...`;
245
+ }
246
+ //# sourceMappingURL=openclaw-plugin-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-plugin-helpers.js","sourceRoot":"","sources":["../../src/openclaw-plugin-helpers.ts"],"names":[],"mappings":"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"}