@mclawnet/agent 0.5.8 → 0.6.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.
Files changed (78) hide show
  1. package/cli.js +168 -61
  2. package/dist/__tests__/cli.test.d.ts +2 -0
  3. package/dist/__tests__/cli.test.d.ts.map +1 -0
  4. package/dist/__tests__/service-config.test.d.ts +2 -0
  5. package/dist/__tests__/service-config.test.d.ts.map +1 -0
  6. package/dist/__tests__/service-linux.test.d.ts +2 -0
  7. package/dist/__tests__/service-linux.test.d.ts.map +1 -0
  8. package/dist/__tests__/service-macos.test.d.ts +2 -0
  9. package/dist/__tests__/service-macos.test.d.ts.map +1 -0
  10. package/dist/__tests__/service-windows.test.d.ts +2 -0
  11. package/dist/__tests__/service-windows.test.d.ts.map +1 -0
  12. package/dist/backend-adapter.d.ts +2 -0
  13. package/dist/backend-adapter.d.ts.map +1 -1
  14. package/dist/{chunk-KHPEQTWF.js → chunk-KITKMSBE.js} +166 -90
  15. package/dist/chunk-KITKMSBE.js.map +1 -0
  16. package/dist/chunk-W3LSW4XY.js +95 -0
  17. package/dist/chunk-W3LSW4XY.js.map +1 -0
  18. package/dist/hub-connection.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/linux-5KQ4SCAA.js +175 -0
  21. package/dist/linux-5KQ4SCAA.js.map +1 -0
  22. package/dist/macos-FGY546NC.js +173 -0
  23. package/dist/macos-FGY546NC.js.map +1 -0
  24. package/dist/service/config.d.ts +19 -0
  25. package/dist/service/config.d.ts.map +1 -0
  26. package/dist/service/index.d.ts +6 -0
  27. package/dist/service/index.d.ts.map +1 -0
  28. package/dist/service/index.js +46 -0
  29. package/dist/service/index.js.map +1 -0
  30. package/dist/service/linux.d.ts +18 -0
  31. package/dist/service/linux.d.ts.map +1 -0
  32. package/dist/service/macos.d.ts +18 -0
  33. package/dist/service/macos.d.ts.map +1 -0
  34. package/dist/service/types.d.ts +19 -0
  35. package/dist/service/types.d.ts.map +1 -0
  36. package/dist/service/windows.d.ts +18 -0
  37. package/dist/service/windows.d.ts.map +1 -0
  38. package/dist/session-manager.d.ts +4 -7
  39. package/dist/session-manager.d.ts.map +1 -1
  40. package/dist/skill-loader.d.ts +8 -0
  41. package/dist/skill-loader.d.ts.map +1 -0
  42. package/dist/start.d.ts.map +1 -1
  43. package/dist/start.js +1 -1
  44. package/dist/windows-PIJ4CMWX.js +164 -0
  45. package/dist/windows-PIJ4CMWX.js.map +1 -0
  46. package/package.json +18 -16
  47. package/skills/academic-search/SKILL.md +147 -0
  48. package/skills/architecture/SKILL.md +294 -0
  49. package/skills/changelog-generator/SKILL.md +112 -0
  50. package/skills/chart-visualization/SKILL.md +183 -0
  51. package/skills/code-review/SKILL.md +304 -0
  52. package/skills/codebase-health/SKILL.md +281 -0
  53. package/skills/consulting-analysis/SKILL.md +584 -0
  54. package/skills/content-research-writer/SKILL.md +546 -0
  55. package/skills/data-analysis/SKILL.md +194 -0
  56. package/skills/deep-research/SKILL.md +198 -0
  57. package/skills/docx/SKILL.md +211 -0
  58. package/skills/github-deep-research/SKILL.md +207 -0
  59. package/skills/image-generation/SKILL.md +209 -0
  60. package/skills/lead-research-assistant/SKILL.md +207 -0
  61. package/skills/mcp-builder/SKILL.md +304 -0
  62. package/skills/meeting-insights-analyzer/SKILL.md +335 -0
  63. package/skills/pair-programming/SKILL.md +196 -0
  64. package/skills/pdf/SKILL.md +309 -0
  65. package/skills/performance-analysis/SKILL.md +261 -0
  66. package/skills/podcast-generation/SKILL.md +224 -0
  67. package/skills/pptx/SKILL.md +497 -0
  68. package/skills/project-learnings/SKILL.md +280 -0
  69. package/skills/security-audit/SKILL.md +211 -0
  70. package/skills/skill-creator/SKILL.md +200 -0
  71. package/skills/technical-writing/SKILL.md +286 -0
  72. package/skills/testing/SKILL.md +363 -0
  73. package/skills/video-generation/SKILL.md +247 -0
  74. package/skills/web-design-guidelines/SKILL.md +203 -0
  75. package/skills/webapp-testing/SKILL.md +162 -0
  76. package/skills/workflow-automation/SKILL.md +299 -0
  77. package/skills/xlsx/SKILL.md +305 -0
  78. package/dist/chunk-KHPEQTWF.js.map +0 -1
package/cli.js CHANGED
@@ -1,74 +1,181 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const args = process.argv.slice(2);
4
- const command = args[0] || "start";
5
-
6
- if (command === "start") {
7
- // Parse CLI flags
8
- const opts = {};
9
- for (let i = 1; i < args.length; i++) {
10
- if ((args[i] === "--hub-url" || args[i] === "--server") && args[i + 1]) {
11
- opts.hubUrl = args[++i];
12
- } else if (args[i] === "--token" && args[i + 1]) {
13
- opts.token = args[++i];
14
- } else if (args[i] === "--name" && args[i + 1]) {
15
- opts.name = args[++i];
16
- } else if (args[i] === "--backend" && args[i + 1]) {
17
- opts.backendType = args[++i];
18
- }
19
- }
3
+ import { Command } from "commander";
4
+ import { readFileSync } from "fs";
5
+
6
+ const pkg = JSON.parse(readFileSync(new URL("./package.json", import.meta.url), "utf-8"));
20
7
 
21
- // Default to claude-code adapter
22
- const backendType = opts.backendType || "claude-code";
8
+ const program = new Command();
23
9
 
24
- async function main() {
25
- let adapter;
10
+ program
11
+ .name("clawnet-agent")
12
+ .description("ClawNet Agent — intelligent agent daemon service")
13
+ .version(pkg.version);
26
14
 
27
- if (backendType === "claude-code") {
28
- try {
29
- const { ClaudeCodeAdapter } = await import("@mclawnet/claude-adapter");
30
- adapter = new ClaudeCodeAdapter();
31
- } catch (err) {
32
- console.error("[clawnet] Failed to load @mclawnet/claude-adapter:", err.message);
33
- console.error("[clawnet] Install it: pnpm add @mclawnet/claude-adapter");
15
+ // === start (default command) ===
16
+ program
17
+ .command("start", { isDefault: true })
18
+ .description("Start Agent (daemon mode by default, use -f for foreground)")
19
+ .option("-f, --foreground", "Run in foreground (for development/debugging)")
20
+ .option("--hub-url <url>", "Hub WebSocket URL")
21
+ .option("--token <token>", "Agent token")
22
+ .option("--name <name>", "Agent name")
23
+ .option("--backend <type>", "Backend type", "claude-code")
24
+ .action(async (opts) => {
25
+ if (opts.foreground) {
26
+ // Foreground mode: directly run agent (existing behavior)
27
+ const config = {};
28
+ if (opts.hubUrl) config.hubUrl = opts.hubUrl;
29
+ if (opts.token) config.token = opts.token;
30
+ if (opts.name) config.name = opts.name;
31
+ if (opts.backend) config.backendType = opts.backend;
32
+
33
+ let adapter;
34
+ const backendType = opts.backend || "claude-code";
35
+ if (backendType === "claude-code") {
36
+ try {
37
+ const { ClaudeCodeAdapter } = await import("@mclawnet/claude-adapter");
38
+ adapter = new ClaudeCodeAdapter();
39
+ } catch (err) {
40
+ console.error("[clawnet] Failed to load @mclawnet/claude-adapter:", err.message);
41
+ process.exit(1);
42
+ }
43
+ } else {
44
+ console.error(`[clawnet] Unknown backend type: ${backendType}`);
34
45
  process.exit(1);
35
46
  }
47
+
48
+ const { startAgent } = await import("./dist/start.js");
49
+ await startAgent({ config, adapter });
36
50
  } else {
37
- console.error(`[clawnet] Unknown backend type: ${backendType}`);
38
- process.exit(1);
51
+ // Daemon mode: register service + start
52
+ const { getServiceManager, mergeServiceConfig, saveServiceConfig, validateServiceConfig } =
53
+ await import("./dist/service/index.js");
54
+
55
+ const cliOpts = {};
56
+ if (opts.hubUrl) cliOpts.hubUrl = opts.hubUrl;
57
+ if (opts.token) cliOpts.token = opts.token;
58
+ if (opts.name) cliOpts.name = opts.name;
59
+
60
+ const config = mergeServiceConfig(cliOpts);
61
+ validateServiceConfig(config);
62
+ saveServiceConfig(config);
63
+
64
+ const manager = await getServiceManager();
65
+ const status = await manager.status();
66
+
67
+ if (status.running) {
68
+ console.log(`Agent is already running (PID: ${status.pid}). Use 'restart' to restart.`);
69
+ return;
70
+ }
71
+
72
+ await manager.install();
73
+ await manager.start();
39
74
  }
75
+ });
40
76
 
41
- const { startAgent } = await import("./dist/start.js");
42
- await startAgent({ config: opts, adapter });
43
- }
77
+ // === stop ===
78
+ program
79
+ .command("stop")
80
+ .description("Stop Agent service")
81
+ .action(async () => {
82
+ const { getServiceManager } = await import("./dist/service/index.js");
83
+ const manager = await getServiceManager();
84
+ await manager.stop();
85
+ });
44
86
 
45
- main().catch((err) => {
46
- console.error("[clawnet] Fatal:", err);
47
- process.exit(1);
87
+ // === restart ===
88
+ program
89
+ .command("restart")
90
+ .description("Restart Agent service")
91
+ .action(async () => {
92
+ const { getServiceManager } = await import("./dist/service/index.js");
93
+ const manager = await getServiceManager();
94
+ await manager.restart();
48
95
  });
49
- } else if (command === "config") {
50
- const subCmd = args[1];
51
- import("./dist/index.js").then(({ loadConfig, saveConfig }) => {
52
- if (subCmd === "set" && args[2] && args[3]) {
53
- saveConfig({ [args[2]]: args[3] });
54
- console.log(`Set ${args[2]} = ${args[3]}`);
55
- } else if (subCmd === "show") {
56
- console.log(JSON.stringify(loadConfig(), null, 2));
57
- } else {
58
- console.log("Usage: clawnet-agent config set <key> <value>");
59
- console.log(" clawnet-agent config show");
60
- }
96
+
97
+ // === enable ===
98
+ program
99
+ .command("enable")
100
+ .description("Register system service (without starting)")
101
+ .option("--hub-url <url>", "Hub WebSocket URL")
102
+ .option("--token <token>", "Agent token")
103
+ .option("--name <name>", "Agent name")
104
+ .action(async (opts) => {
105
+ const { getServiceManager, mergeServiceConfig, saveServiceConfig, validateServiceConfig } =
106
+ await import("./dist/service/index.js");
107
+
108
+ const cliOpts = {};
109
+ if (opts.hubUrl) cliOpts.hubUrl = opts.hubUrl;
110
+ if (opts.token) cliOpts.token = opts.token;
111
+ if (opts.name) cliOpts.name = opts.name;
112
+
113
+ const config = mergeServiceConfig(cliOpts);
114
+ validateServiceConfig(config);
115
+ saveServiceConfig(config);
116
+
117
+ const manager = await getServiceManager();
118
+ await manager.install();
119
+ });
120
+
121
+ // === disable ===
122
+ program
123
+ .command("disable")
124
+ .description("Stop and remove system service")
125
+ .action(async () => {
126
+ const { getServiceManager } = await import("./dist/service/index.js");
127
+ const manager = await getServiceManager();
128
+ await manager.uninstall();
129
+ });
130
+
131
+ // === status ===
132
+ program
133
+ .command("status")
134
+ .description("Show Agent status")
135
+ .action(async () => {
136
+ const { getServiceManager } = await import("./dist/service/index.js");
137
+ const manager = await getServiceManager();
138
+ await manager.printStatus();
61
139
  });
62
- } else {
63
- console.log("Usage: clawnet-agent [start|config] [options]");
64
- console.log("");
65
- console.log("Commands:");
66
- console.log(" start Start the agent (default)");
67
- console.log(" config View/set configuration");
68
- console.log("");
69
- console.log("Options:");
70
- console.log(" --server <url> Hub WebSocket URL (alias: --hub-url)");
71
- console.log(" --token <token> Agent token");
72
- console.log(" --name <name> Agent name");
73
- console.log(" --backend <type> Backend type (claude-code)");
74
- }
140
+
141
+ // === logs ===
142
+ program
143
+ .command("logs")
144
+ .description("View Agent logs")
145
+ .option("-f, --follow", "Follow log output in real-time")
146
+ .option("-n, --lines <number>", "Number of lines to show", "100")
147
+ .action(async (opts) => {
148
+ const { getServiceManager } = await import("./dist/service/index.js");
149
+ const manager = await getServiceManager();
150
+ await manager.logs({
151
+ follow: opts.follow,
152
+ lines: parseInt(opts.lines, 10),
153
+ });
154
+ });
155
+
156
+ // === config ===
157
+ const configCmd = program
158
+ .command("config")
159
+ .description("View or modify configuration");
160
+
161
+ configCmd
162
+ .command("show")
163
+ .description("Show current configuration")
164
+ .action(async () => {
165
+ const { loadConfig } = await import("./dist/index.js");
166
+ console.log(JSON.stringify(loadConfig(), null, 2));
167
+ });
168
+
169
+ configCmd
170
+ .command("set <key> <value>")
171
+ .description("Set a configuration value")
172
+ .action(async (key, value) => {
173
+ const { saveConfig } = await import("./dist/index.js");
174
+ saveConfig({ [key]: value });
175
+ console.log(`Set ${key} = ${value}`);
176
+ });
177
+
178
+ program.parseAsync(process.argv).catch((err) => {
179
+ console.error("[clawnet] Fatal:", err.message || err);
180
+ process.exit(1);
181
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=service-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/service-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=service-linux.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-linux.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/service-linux.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=service-macos.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-macos.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/service-macos.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=service-windows.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-windows.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/service-windows.test.ts"],"names":[],"mappings":""}
@@ -29,6 +29,8 @@ export interface SpawnOptions {
29
29
  mcpConfigPath?: string;
30
30
  /** Memory system role ID. When set, SessionManager auto-injects memory prompt + MCP config */
31
31
  roleId?: string;
32
+ /** Extra directories to mount via --add-dir */
33
+ additionalDirs?: string[];
32
34
  }
33
35
  export interface BackendAdapter {
34
36
  /** Backend type identifier */
@@ -1 +1 @@
1
- {"version":3,"file":"backend-adapter.d.ts","sourceRoot":"","sources":["../src/backend-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IAEb,kCAAkC;IAClC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEtD,qCAAqC;IACrC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,6CAA6C;IAC7C,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnD,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAEzE,qCAAqC;IACrC,cAAc,CAAC,CACb,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KAChD,KAAK,IAAI,GACT,IAAI,CAAC;IAER,6BAA6B;IAC7B,OAAO,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;CAC1E"}
1
+ {"version":3,"file":"backend-adapter.d.ts","sourceRoot":"","sources":["../src/backend-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IAEb,kCAAkC;IAClC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEtD,qCAAqC;IACrC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,6CAA6C;IAC7C,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnD,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAEzE,qCAAqC;IACrC,cAAc,CAAC,CACb,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KAChD,KAAK,IAAI,GACT,IAAI,CAAC;IAER,6BAA6B;IAC7B,OAAO,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;CAC1E"}