@poolzin/pool-bot 2026.4.44 → 2026.4.46

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 (46) hide show
  1. package/dist/agents/model-catalog-gemma4.d.ts +6 -0
  2. package/dist/agents/model-catalog-gemma4.d.ts.map +1 -0
  3. package/dist/agents/model-catalog-gemma4.js +17 -0
  4. package/dist/agents/model-catalog.d.ts.map +1 -1
  5. package/dist/agents/model-catalog.js +7 -0
  6. package/dist/agents/tools/music-edit-tool.d.ts +9 -0
  7. package/dist/agents/tools/music-edit-tool.d.ts.map +1 -0
  8. package/dist/agents/tools/music-edit-tool.js +46 -0
  9. package/dist/agents/tools/video-edit-tool.d.ts +9 -0
  10. package/dist/agents/tools/video-edit-tool.d.ts.map +1 -0
  11. package/dist/agents/tools/video-edit-tool.js +46 -0
  12. package/dist/build-info.json +3 -3
  13. package/dist/cli/completion.d.ts +15 -0
  14. package/dist/cli/completion.d.ts.map +1 -0
  15. package/dist/cli/completion.js +183 -0
  16. package/dist/cli/onboard-cli.d.ts.map +1 -1
  17. package/dist/cli/onboard-cli.js +4 -1
  18. package/dist/cli/program/register.subclis.js +5 -5
  19. package/dist/cli/sessions-checkpoints-cli.d.ts +6 -0
  20. package/dist/cli/sessions-checkpoints-cli.d.ts.map +1 -0
  21. package/dist/cli/sessions-checkpoints-cli.js +117 -0
  22. package/dist/cli/webhooks-cli.d.ts +13 -0
  23. package/dist/cli/webhooks-cli.d.ts.map +1 -1
  24. package/dist/cli/webhooks-cli.js +323 -130
  25. package/dist/errors/user-friendly-errors.d.ts +23 -0
  26. package/dist/errors/user-friendly-errors.d.ts.map +1 -0
  27. package/dist/errors/user-friendly-errors.js +182 -0
  28. package/dist/infra/net/fetch-guard.d.ts.map +1 -1
  29. package/dist/memory/wiki/store.d.ts +53 -0
  30. package/dist/memory/wiki/store.d.ts.map +1 -0
  31. package/dist/memory/wiki/store.js +222 -0
  32. package/dist/memory/wiki/types.d.ts +57 -0
  33. package/dist/memory/wiki/types.d.ts.map +1 -0
  34. package/dist/memory/wiki/types.js +6 -0
  35. package/dist/plugins/webhook-ingress.d.ts +104 -0
  36. package/dist/plugins/webhook-ingress.d.ts.map +1 -0
  37. package/dist/plugins/webhook-ingress.js +287 -0
  38. package/dist/providers/ollama-vision.d.ts +30 -0
  39. package/dist/providers/ollama-vision.d.ts.map +1 -0
  40. package/dist/providers/ollama-vision.js +62 -0
  41. package/dist/sessions/checkpoints.d.ts +76 -0
  42. package/dist/sessions/checkpoints.d.ts.map +1 -0
  43. package/dist/sessions/checkpoints.js +162 -0
  44. package/dist/slack/channel.d.ts.map +1 -1
  45. package/dist/slack/channel.js +13 -2
  46. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Gemma 4 Model Support
3
+ */
4
+ import type { ModelCatalogEntry } from "./model-catalog.js";
5
+ export declare const gemma4Models: ModelCatalogEntry[];
6
+ //# sourceMappingURL=model-catalog-gemma4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog-gemma4.d.ts","sourceRoot":"","sources":["../../src/agents/model-catalog-gemma4.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,eAAO,MAAM,YAAY,EAAE,iBAAiB,EAa3C,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Gemma 4 Model Support
3
+ */
4
+ export const gemma4Models = [
5
+ {
6
+ id: "google/gemma-4-27b-it",
7
+ name: "Google Gemma 4 27B Instruct",
8
+ provider: "google",
9
+ contextWindow: 131072,
10
+ },
11
+ {
12
+ id: "google/gemma-4-12b-it",
13
+ name: "Google Gemma 4 12B Instruct",
14
+ provider: "google",
15
+ contextWindow: 131072,
16
+ },
17
+ ];
@@ -1 +1 @@
1
- {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/agents/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAOrE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;CACjC,CAAC;AAWF,KAAK,WAAW,GAAG,cAAc,yBAAyB,CAAC,CAAC;AAoC5D,wBAAgB,6BAA6B,SAI5C;AAGD,wBAAgB,8BAA8B,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,QAEjF;AAUD,wBAAsB,gBAAgB,CAAC,MAAM,CAAC,EAAE;IAC9C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAoF/B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAEjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,iBAAiB,GAAG,SAAS,CAQ/B"}
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/agents/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAQrE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;CACjC,CAAC;AAWF,KAAK,WAAW,GAAG,cAAc,yBAAyB,CAAC,CAAC;AAoC5D,wBAAgB,6BAA6B,SAI5C;AAGD,wBAAgB,8BAA8B,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,QAEjF;AAUD,wBAAsB,gBAAgB,CAAC,MAAM,CAAC,EAAE;IAC9C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0F/B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAEjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,iBAAiB,GAAG,SAAS,CAQ/B"}
@@ -2,6 +2,7 @@ import { loadConfig } from "../config/config.js";
2
2
  import { createSubsystemLogger } from "../logging/subsystem.js";
3
3
  import { resolvePoolbotAgentDir } from "./agent-paths.js";
4
4
  import { ensurePoolbotModelsJson } from "./models-config.js";
5
+ import { gemma4Models } from "./model-catalog-gemma4.js";
5
6
  const log = createSubsystemLogger("model-catalog");
6
7
  let modelCatalogPromise = null;
7
8
  let hasLoggedModelCatalogError = false;
@@ -104,8 +105,14 @@ export async function loadModelCatalog(params) {
104
105
  // Don't poison the cache on transient dependency/filesystem issues.
105
106
  modelCatalogPromise = null;
106
107
  if (models.length > 0) {
108
+ // Add Gemma 4 models
109
+ models.push(...gemma4Models);
107
110
  return sortModels(models);
108
111
  }
112
+ // Add Gemma 4 models even if no other models
113
+ if (gemma4Models.length > 0) {
114
+ return sortModels([...gemma4Models]);
115
+ }
109
116
  return [];
110
117
  }
111
118
  })();
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Music Editing Tool
3
+ *
4
+ * Allows editing music with prompts (audio-to-audio).
5
+ * Simplified version using external APIs.
6
+ */
7
+ import type { AnyAgentTool } from "./common.js";
8
+ export declare function createMusicEditTool(): AnyAgentTool;
9
+ //# sourceMappingURL=music-edit-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"music-edit-tool.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/music-edit-tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,mBAAmB,IAAI,YAAY,CA4ClD"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Music Editing Tool
3
+ *
4
+ * Allows editing music with prompts (audio-to-audio).
5
+ * Simplified version using external APIs.
6
+ */
7
+ import { Type } from "@sinclair/typebox";
8
+ export function createMusicEditTool() {
9
+ return {
10
+ name: "music_edit",
11
+ label: "Music Edit",
12
+ description: "Edit a music track using a text prompt (audio-to-audio). " +
13
+ "Provide a source audio URL and describe the changes you want.",
14
+ parameters: Type.Object({
15
+ sourceUrl: Type.String({
16
+ description: "URL of the source audio to edit",
17
+ }),
18
+ prompt: Type.String({
19
+ description: "Description of the edits to apply",
20
+ }),
21
+ duration: Type.Optional(Type.Number({
22
+ description: "Output duration in seconds (optional)",
23
+ })),
24
+ genre: Type.Optional(Type.String({
25
+ description: "Target genre (e.g., 'jazz', 'electronic', 'classical')",
26
+ })),
27
+ }),
28
+ execute: async (_toolCallId, params) => {
29
+ // Placeholder - in production, integrate with Suno, Udio, or MusicLM
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: `Music edit task queued.\n\n` +
35
+ `Source: ${params.sourceUrl}\n` +
36
+ `Prompt: ${params.prompt}\n` +
37
+ `Duration: ${params.duration ?? "same as source"}s\n` +
38
+ `Genre: ${params.genre ?? "none"}\n\n` +
39
+ `Note: Music editing requires external API integration (Suno, Udio, MusicLM). ` +
40
+ `This is a placeholder for the workflow.`,
41
+ },
42
+ ],
43
+ };
44
+ },
45
+ };
46
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Video Editing Tool
3
+ *
4
+ * Allows editing videos with prompts (video-to-video).
5
+ * Simplified version using external APIs.
6
+ */
7
+ import type { AnyAgentTool } from "./common.js";
8
+ export declare function createVideoEditTool(): AnyAgentTool;
9
+ //# sourceMappingURL=video-edit-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-edit-tool.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/video-edit-tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,mBAAmB,IAAI,YAAY,CA4ClD"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Video Editing Tool
3
+ *
4
+ * Allows editing videos with prompts (video-to-video).
5
+ * Simplified version using external APIs.
6
+ */
7
+ import { Type } from "@sinclair/typebox";
8
+ export function createVideoEditTool() {
9
+ return {
10
+ name: "video_edit",
11
+ label: "Video Edit",
12
+ description: "Edit a video using a text prompt (video-to-video). " +
13
+ "Provide a source video URL and describe the changes you want.",
14
+ parameters: Type.Object({
15
+ sourceUrl: Type.String({
16
+ description: "URL of the source video to edit",
17
+ }),
18
+ prompt: Type.String({
19
+ description: "Description of the edits to apply",
20
+ }),
21
+ duration: Type.Optional(Type.Number({
22
+ description: "Output duration in seconds (optional)",
23
+ })),
24
+ style: Type.Optional(Type.String({
25
+ description: "Style preset (e.g., 'cinematic', 'anime', 'realistic')",
26
+ })),
27
+ }),
28
+ execute: async (_toolCallId, params) => {
29
+ // Placeholder - in production, integrate with Runway, Pika, or ComfyUI
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: `Video edit task queued.\n\n` +
35
+ `Source: ${params.sourceUrl}\n` +
36
+ `Prompt: ${params.prompt}\n` +
37
+ `Duration: ${params.duration ?? "same as source"}s\n` +
38
+ `Style: ${params.style ?? "none"}\n\n` +
39
+ `Note: Video editing requires external API integration (Runway, Pika, ComfyUI). ` +
40
+ `This is a placeholder for the workflow.`,
41
+ },
42
+ ],
43
+ };
44
+ },
45
+ };
46
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.4.44",
3
- "commit": "2a04fd278aee8e7b369bdc1dca503419859df769",
4
- "builtAt": "2026-04-08T03:20:50.969Z"
2
+ "version": "2026.4.46",
3
+ "commit": "ec268e52a52b5717bb045639f4e49082129b6ff9",
4
+ "builtAt": "2026-04-08T13:19:55.920Z"
5
5
  }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * CLI Auto-Complete Generator
3
+ *
4
+ * Generates shell completion scripts for bash, zsh, and fish.
5
+ *
6
+ * Usage:
7
+ * poolbot completion bash # Bash completion
8
+ * poolbot completion zsh # Zsh completion
9
+ * poolbot completion fish # Fish completion
10
+ */
11
+ import type { Command } from "commander";
12
+ export declare function generateBashCompletion(program: Command): string;
13
+ export declare function generateZshCompletion(program: Command): string;
14
+ export declare function generateFishCompletion(program: Command): string;
15
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/cli/completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CA0B/D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CA8D9D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAoC/D"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * CLI Auto-Complete Generator
3
+ *
4
+ * Generates shell completion scripts for bash, zsh, and fish.
5
+ *
6
+ * Usage:
7
+ * poolbot completion bash # Bash completion
8
+ * poolbot completion zsh # Zsh completion
9
+ * poolbot completion fish # Fish completion
10
+ */
11
+ const commands = [
12
+ "agent",
13
+ "channels",
14
+ "config",
15
+ "cron",
16
+ "devices",
17
+ "doctor",
18
+ "exec-approvals",
19
+ "gateway",
20
+ "infer",
21
+ "message",
22
+ "models",
23
+ "mcp",
24
+ "nodes",
25
+ "onboard",
26
+ "plugins",
27
+ "secret",
28
+ "security",
29
+ "sessions",
30
+ "skills",
31
+ "status",
32
+ "telemetry",
33
+ "update",
34
+ "webhooks",
35
+ ];
36
+ const agentCommands = ["run", "stop", "status", "list"];
37
+ const channelCommands = ["list", "status", "probe", "add", "remove", "enable", "disable"];
38
+ const configCommands = ["show", "set", "get", "validate", "schema"];
39
+ const cronCommands = ["list", "add", "remove", "run", "enable", "disable"];
40
+ const inferCommands = [
41
+ "chat",
42
+ "image",
43
+ "video",
44
+ "music",
45
+ "embed",
46
+ "web-search",
47
+ "web-fetch",
48
+ "batch",
49
+ ];
50
+ const modelCommands = ["list", "set", "status", "aliases", "fallbacks", "scan"];
51
+ const pluginCommands = ["list", "install", "uninstall", "enable", "disable", "update"];
52
+ const secretCommands = ["list", "get", "set", "rotate", "validate", "delete"];
53
+ const sessionCommands = ["list", "show", "checkpoints"];
54
+ const checkpointCommands = ["list", "show", "prune"];
55
+ const skillCommands = ["list", "show", "enable", "disable"];
56
+ const webhookCommands = ["list", "create", "show", "delete", "enable", "disable", "stats", "serve"];
57
+ export function generateBashCompletion(program) {
58
+ return `# Pool Bot bash completion
59
+ _poolbot_completion() {
60
+ local cur="\${COMP_WORDS[COMP_CWORD]}"
61
+ local prev="\${COMP_WORDS[COMP_CWORD-1]}"
62
+ local cmd="\${COMP_WORDS[1]}"
63
+
64
+ case "\$cmd" in
65
+ agent) COMPREPLY=(\$(compgen -W "${agentCommands.join(" ")}" -- "\$cur")) ;;
66
+ channels) COMPREPLY=(\$(compgen -W "${channelCommands.join(" ")}" -- "\$cur")) ;;
67
+ config) COMPREPLY=(\$(compgen -W "${configCommands.join(" ")}" -- "\$cur")) ;;
68
+ cron) COMPREPLY=(\$(compgen -W "${cronCommands.join(" ")}" -- "\$cur")) ;;
69
+ infer) COMPREPLY=(\$(compgen -W "${inferCommands.join(" ")}" -- "\$cur")) ;;
70
+ models) COMPREPLY=(\$(compgen -W "${modelCommands.join(" ")}" -- "\$cur")) ;;
71
+ plugins) COMPREPLY=(\$(compgen -W "${pluginCommands.join(" ")}" -- "\$cur")) ;;
72
+ secret) COMPREPLY=(\$(compgen -W "${secretCommands.join(" ")}" -- "\$cur")) ;;
73
+ sessions) COMPREPLY=(\$(compgen -W "${sessionCommands.join(" ")}" -- "\$cur")) ;;
74
+ checkpoints) COMPREPLY=(\$(compgen -W "${checkpointCommands.join(" ")}" -- "\$cur")) ;;
75
+ skills) COMPREPLY=(\$(compgen -W "${skillCommands.join(" ")}" -- "\$cur")) ;;
76
+ webhooks) COMPREPLY=(\$(compgen -W "${webhookCommands.join(" ")}" -- "\$cur")) ;;
77
+ *) COMPREPLY=(\$(compgen -W "${commands.join(" ")}" -- "\$cur")) ;;
78
+ esac
79
+ }
80
+
81
+ complete -F _poolbot_completion poolbot
82
+ `;
83
+ }
84
+ export function generateZshCompletion(program) {
85
+ return `# Pool Bot zsh completion
86
+ #compdef poolbot
87
+
88
+ _poolbot() {
89
+ local -a commands
90
+ local -a agent_cmds
91
+ local -a channel_cmds
92
+ local -a config_cmds
93
+ local -a cron_cmds
94
+ local -a infer_cmds
95
+ local -a model_cmds
96
+ local -a plugin_cmds
97
+ local -a secret_cmds
98
+ local -a session_cmds
99
+ local -a checkpoint_cmds
100
+ local -a skill_cmds
101
+ local -a webhook_cmds
102
+
103
+ commands=(${commands.map((c) => `'${c}'`).join(" ")})
104
+ agent_cmds=(${agentCommands.map((c) => `'${c}'`).join(" ")})
105
+ channel_cmds=(${channelCommands.map((c) => `'${c}'`).join(" ")})
106
+ config_cmds=(${configCommands.map((c) => `'${c}'`).join(" ")})
107
+ cron_cmds=(${cronCommands.map((c) => `'${c}'`).join(" ")})
108
+ infer_cmds=(${inferCommands.map((c) => `'${c}'`).join(" ")})
109
+ model_cmds=(${modelCommands.map((c) => `'${c}'`).join(" ")})
110
+ plugin_cmds=(${pluginCommands.map((c) => `'${c}'`).join(" ")})
111
+ secret_cmds=(${secretCommands.map((c) => `'${c}'`).join(" ")})
112
+ session_cmds=(${sessionCommands.map((c) => `'${c}'`).join(" ")})
113
+ checkpoint_cmds=(${checkpointCommands.map((c) => `'${c}'`).join(" ")})
114
+ skill_cmds=(${skillCommands.map((c) => `'${c}'`).join(" ")})
115
+ webhook_cmds=(${webhookCommands.map((c) => `'${c}'`).join(" ")})
116
+
117
+ _arguments -C \\
118
+ '1: :->cmds' \\
119
+ '*::arg:->args'
120
+
121
+ case \$state in
122
+ cmds)
123
+ _values 'command' \$commands
124
+ ;;
125
+ args)
126
+ case \$words[2] in
127
+ agent) _values 'agent command' \$agent_cmds ;;
128
+ channels) _values 'channel command' \$channel_cmds ;;
129
+ config) _values 'config command' \$config_cmds ;;
130
+ cron) _values 'cron command' \$cron_cmds ;;
131
+ infer) _values 'infer command' \$infer_cmds ;;
132
+ models) _values 'model command' \$model_cmds ;;
133
+ plugins) _values 'plugin command' \$plugin_cmds ;;
134
+ secret) _values 'secret command' \$secret_cmds ;;
135
+ sessions) _values 'session command' \$session_cmds ;;
136
+ checkpoints) _values 'checkpoint command' \$checkpoint_cmds ;;
137
+ skills) _values 'skill command' \$skill_cmds ;;
138
+ webhooks) _values 'webhook command' \$webhook_cmds ;;
139
+ esac
140
+ ;;
141
+ esac
142
+ }
143
+
144
+ _poolbot
145
+ `;
146
+ }
147
+ export function generateFishCompletion(program) {
148
+ return `# Pool Bot fish completion
149
+ function __fish_poolbot_needs_command
150
+ set -l cmd (commandline -opc)
151
+ if [ (count $cmd) -eq 1 -a $cmd[1] = 'poolbot' ]
152
+ return 0
153
+ end
154
+ return 1
155
+ end
156
+
157
+ function __fish_poolbot_using_command
158
+ set -l cmd (commandline -opc)
159
+ if [ (count $cmd) -gt 1 ]
160
+ if [ $argv[1] = $cmd[2] ]
161
+ return 0
162
+ end
163
+ end
164
+ return 1
165
+ end
166
+
167
+ # Main commands
168
+ complete -c poolbot -n '__fish_poolbot_needs_command' -a "${commands.join(" ")}"
169
+
170
+ # Subcommands
171
+ complete -c poolbot -n '__fish_poolbot_using_command agent' -a "${agentCommands.join(" ")}"
172
+ complete -c poolbot -n '__fish_poolbot_using_command channels' -a "${channelCommands.join(" ")}"
173
+ complete -c poolbot -n '__fish_poolbot_using_command config' -a "${configCommands.join(" ")}"
174
+ complete -c poolbot -n '__fish_poolbot_using_command cron' -a "${cronCommands.join(" ")}"
175
+ complete -c poolbot -n '__fish_poolbot_using_command infer' -a "${inferCommands.join(" ")}"
176
+ complete -c poolbot -n '__fish_poolbot_using_command models' -a "${modelCommands.join(" ")}"
177
+ complete -c poolbot -n '__fish_poolbot_using_command plugins' -a "${pluginCommands.join(" ")}"
178
+ complete -c poolbot -n '__fish_poolbot_using_command secret' -a "${secretCommands.join(" ")}"
179
+ complete -c poolbot -n '__fish_poolbot_using_command sessions' -a "${sessionCommands.join(" ")}"
180
+ complete -c poolbot -n '__fish_poolbot_using_command skills' -a "${skillCommands.join(" ")}"
181
+ complete -c poolbot -n '__fish_poolbot_using_command webhooks' -a "${webhookCommands.join(" ")}"
182
+ `;
183
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"onboard-cli.d.ts","sourceRoot":"","sources":["../../src/cli/onboard-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsfzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QAwBlD"}
1
+ {"version":3,"file":"onboard-cli.d.ts","sourceRoot":"","sources":["../../src/cli/onboard-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4gBzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QA0BlD"}
@@ -96,7 +96,10 @@ async function promptSelect(rl, question, options, defaultValue) {
96
96
  async function runSystemChecks(_options) {
97
97
  printStepHeader(1, 6, "System Checks");
98
98
  const checks = [
99
- { name: "Node.js version", pass: process.version.startsWith("v22") || process.version.startsWith("v20") },
99
+ {
100
+ name: "Node.js version",
101
+ pass: process.version.startsWith("v22") || process.version.startsWith("v20"),
102
+ },
100
103
  { name: "Home directory", pass: Boolean(process.env.HOME) },
101
104
  { name: "Config directory writable", pass: true }, // Assume OK for now
102
105
  ];
@@ -291,12 +291,12 @@ const entries = [
291
291
  },
292
292
  },
293
293
  {
294
- name: "onboard",
295
- description: "Interactive setup wizard for new Pool Bot installations",
296
- hasSubcommands: false,
294
+ name: "webhooks",
295
+ description: "Manage webhook ingress routes (TaskFlows via HTTP)",
296
+ hasSubcommands: true,
297
297
  register: async (program) => {
298
- const mod = await import("../onboard-cli.js");
299
- mod.registerOnboardCli(program);
298
+ const mod = await import("../webhooks-cli.js");
299
+ mod.registerWebhooksCli(program);
300
300
  },
301
301
  },
302
302
  {
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Session Checkpoints CLI
3
+ */
4
+ import type { Command } from "commander";
5
+ export declare function registerSessionCheckpointsCli(program: Command): void;
6
+ //# sourceMappingURL=sessions-checkpoints-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-checkpoints-cli.d.ts","sourceRoot":"","sources":["../../src/cli/sessions-checkpoints-cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,QAgH7D"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Session Checkpoints CLI
3
+ */
4
+ import { loadConfig } from "../config/config.js";
5
+ import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js";
6
+ import { defaultRuntime } from "../runtime.js";
7
+ import { theme } from "../terminal/theme.js";
8
+ import { danger, info, success } from "../globals.js";
9
+ import { formatDocsLink } from "../terminal/links.js";
10
+ import { listAllCheckpoints, listSessionCheckpoints, getCheckpoint, pruneOldCheckpoints, getCheckpointStats, } from "../sessions/checkpoints.js";
11
+ import { runCommandWithRuntime } from "./cli-utils.js";
12
+ function runSessionCommand(action) {
13
+ return runCommandWithRuntime(defaultRuntime, action);
14
+ }
15
+ export function registerSessionCheckpointsCli(program) {
16
+ const checkpoints = program
17
+ .command("checkpoints")
18
+ .description("Manage session checkpoints (list/show/prune)")
19
+ .addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/sessions/checkpoints", "docs.molt.bot/sessions/checkpoints")}\n`);
20
+ checkpoints
21
+ .command("list")
22
+ .description("List session checkpoints")
23
+ .option("--json", "Output JSON", false)
24
+ .option("--session <key>", "Filter by session key")
25
+ .option("--limit <n>", "Maximum checkpoints to return", "50")
26
+ .action(async (opts) => {
27
+ await runSessionCommand(async () => {
28
+ const config = loadConfig();
29
+ const workspaceDir = resolveAgentWorkspaceDir(config, "main");
30
+ const checkpointsList = opts.session
31
+ ? listSessionCheckpoints(workspaceDir, opts.session)
32
+ : listAllCheckpoints(workspaceDir, Number.parseInt(opts.limit || "50", 10));
33
+ if (opts.json) {
34
+ defaultRuntime.log(JSON.stringify(checkpointsList, null, 2));
35
+ return;
36
+ }
37
+ defaultRuntime.log("");
38
+ defaultRuntime.log(theme.heading("Session Checkpoints"));
39
+ defaultRuntime.log(theme.muted("─────────────────────────────────────────"));
40
+ if (checkpointsList.length === 0) {
41
+ defaultRuntime.log(info("No checkpoints found."));
42
+ }
43
+ else {
44
+ for (const checkpoint of checkpointsList) {
45
+ const date = new Date(checkpoint.createdAt).toLocaleString();
46
+ const reason = checkpoint.reason === "auto-compaction" ? "🔄 auto" : `📌 ${checkpoint.reason}`;
47
+ defaultRuntime.log(` ${theme.success("●")} ${checkpoint.id.substring(0, 12)}... | ${reason} | ${date}`);
48
+ if (checkpoint.metadata?.model)
49
+ defaultRuntime.log(theme.muted(` Model: ${checkpoint.metadata.model}`));
50
+ }
51
+ }
52
+ const stats = getCheckpointStats(workspaceDir);
53
+ defaultRuntime.log(theme.muted(`Total: ${stats.total} checkpoints`));
54
+ defaultRuntime.exit(0);
55
+ });
56
+ });
57
+ checkpoints
58
+ .command("show <id>")
59
+ .description("Show checkpoint details")
60
+ .option("--json", "Output JSON", false)
61
+ .action(async (id, opts) => {
62
+ await runSessionCommand(async () => {
63
+ const config = loadConfig();
64
+ const workspaceDir = resolveAgentWorkspaceDir(config, "main");
65
+ const checkpoint = getCheckpoint(workspaceDir, id);
66
+ if (!checkpoint) {
67
+ defaultRuntime.log(danger(`Checkpoint "${id}" not found.`));
68
+ defaultRuntime.exit(1);
69
+ return;
70
+ }
71
+ if (opts.json) {
72
+ defaultRuntime.log(JSON.stringify(checkpoint, null, 2));
73
+ return;
74
+ }
75
+ defaultRuntime.log("");
76
+ defaultRuntime.log(theme.heading(`Checkpoint: ${checkpoint.id}`));
77
+ defaultRuntime.log(theme.muted("─────────────────────────────────────────"));
78
+ defaultRuntime.log(` Session: ${checkpoint.sessionKey}`);
79
+ defaultRuntime.log(` Reason: ${checkpoint.reason}`);
80
+ defaultRuntime.log(` Created: ${new Date(checkpoint.createdAt).toLocaleString()}`);
81
+ if (checkpoint.metadata?.model)
82
+ defaultRuntime.log(` Model: ${checkpoint.metadata.model}`);
83
+ if (checkpoint.metadata?.note)
84
+ defaultRuntime.log(` Note: ${checkpoint.metadata.note}`);
85
+ defaultRuntime.exit(0);
86
+ });
87
+ });
88
+ checkpoints
89
+ .command("prune")
90
+ .description("Prune old checkpoints")
91
+ .option("--age <days>", "Prune checkpoints older than N days", "30")
92
+ .option("--yes", "Skip confirmation", false)
93
+ .action(async (opts) => {
94
+ await runSessionCommand(async () => {
95
+ const config = loadConfig();
96
+ const workspaceDir = resolveAgentWorkspaceDir(config, "main");
97
+ const ageDays = Number.parseInt(opts.age || "30", 10);
98
+ const maxAgeMs = ageDays * 24 * 60 * 60 * 1000;
99
+ if (!opts.yes) {
100
+ const stats = getCheckpointStats(workspaceDir);
101
+ defaultRuntime.log("");
102
+ defaultRuntime.log(danger(`⚠️ This will prune checkpoints older than ${ageDays} days`));
103
+ defaultRuntime.log(`Current checkpoints: ${stats.total}`);
104
+ if (stats.oldest)
105
+ defaultRuntime.log(`Oldest: ${new Date(stats.oldest).toLocaleDateString()}`);
106
+ defaultRuntime.log("");
107
+ defaultRuntime.log(info("Use --yes to skip this confirmation."));
108
+ defaultRuntime.exit(1);
109
+ return;
110
+ }
111
+ const pruned = pruneOldCheckpoints(workspaceDir, maxAgeMs);
112
+ defaultRuntime.log("");
113
+ defaultRuntime.log(success(`Pruned ${pruned} old checkpoint(s).`));
114
+ defaultRuntime.exit(0);
115
+ });
116
+ });
117
+ }
@@ -1,3 +1,16 @@
1
+ /**
2
+ * Webhook CLI - Manage webhook ingress routes
3
+ *
4
+ * Commands:
5
+ * poolbot webhooks list # List all webhook routes
6
+ * poolbot webhooks create <path> # Create webhook route
7
+ * poolbot webhooks show <id> # Show webhook details
8
+ * poolbot webhooks delete <id> # Delete webhook route
9
+ * poolbot webhooks enable <id> # Enable webhook route
10
+ * poolbot webhooks disable <id> # Disable webhook route
11
+ * poolbot webhooks stats # Show webhook statistics
12
+ * poolbot webhooks serve # Start webhook server
13
+ */
1
14
  import type { Command } from "commander";
2
15
  export declare function registerWebhooksCli(program: Command): void;
3
16
  //# sourceMappingURL=webhooks-cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks-cli.d.ts","sourceRoot":"","sources":["../../src/cli/webhooks-cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAkFnD"}
1
+ {"version":3,"file":"webhooks-cli.d.ts","sourceRoot":"","sources":["../../src/cli/webhooks-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA4WnD"}