@gencode/cli 0.0.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 (61) hide show
  1. package/dist/auth.d.ts +4 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +9 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/bin.d.ts +6 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +12 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/commands/agents.d.ts +10 -0
  10. package/dist/commands/agents.d.ts.map +1 -0
  11. package/dist/commands/agents.js +319 -0
  12. package/dist/commands/agents.js.map +1 -0
  13. package/dist/commands/bootstrap.d.ts +12 -0
  14. package/dist/commands/bootstrap.d.ts.map +1 -0
  15. package/dist/commands/bootstrap.js +25 -0
  16. package/dist/commands/bootstrap.js.map +1 -0
  17. package/dist/commands/commands.d.ts +12 -0
  18. package/dist/commands/commands.d.ts.map +1 -0
  19. package/dist/commands/commands.js +37 -0
  20. package/dist/commands/commands.js.map +1 -0
  21. package/dist/commands/memory.d.ts +14 -0
  22. package/dist/commands/memory.d.ts.map +1 -0
  23. package/dist/commands/memory.js +173 -0
  24. package/dist/commands/memory.js.map +1 -0
  25. package/dist/commands/plugins.d.ts +3 -0
  26. package/dist/commands/plugins.d.ts.map +1 -0
  27. package/dist/commands/plugins.js +228 -0
  28. package/dist/commands/plugins.js.map +1 -0
  29. package/dist/commands/run.d.ts +26 -0
  30. package/dist/commands/run.d.ts.map +1 -0
  31. package/dist/commands/run.js +163 -0
  32. package/dist/commands/run.js.map +1 -0
  33. package/dist/commands/sessions.d.ts +14 -0
  34. package/dist/commands/sessions.d.ts.map +1 -0
  35. package/dist/commands/sessions.js +31 -0
  36. package/dist/commands/sessions.js.map +1 -0
  37. package/dist/config.d.ts +21 -0
  38. package/dist/config.d.ts.map +1 -0
  39. package/dist/config.js +33 -0
  40. package/dist/config.js.map +1 -0
  41. package/dist/output.d.ts +20 -0
  42. package/dist/output.d.ts.map +1 -0
  43. package/dist/output.js +90 -0
  44. package/dist/output.js.map +1 -0
  45. package/dist/pkg-path.d.ts +6 -0
  46. package/dist/pkg-path.d.ts.map +1 -0
  47. package/dist/pkg-path.js +8 -0
  48. package/dist/pkg-path.js.map +1 -0
  49. package/dist/plugins-config.d.ts +5 -0
  50. package/dist/plugins-config.d.ts.map +1 -0
  51. package/dist/plugins-config.js +30 -0
  52. package/dist/plugins-config.js.map +1 -0
  53. package/dist/program.d.ts +11 -0
  54. package/dist/program.d.ts.map +1 -0
  55. package/dist/program.js +37 -0
  56. package/dist/program.js.map +1 -0
  57. package/dist/utils/message-input.d.ts +72 -0
  58. package/dist/utils/message-input.d.ts.map +1 -0
  59. package/dist/utils/message-input.js +117 -0
  60. package/dist/utils/message-input.js.map +1 -0
  61. package/package.json +37 -0
@@ -0,0 +1,173 @@
1
+ /**
2
+ * `aimax memory` command — status/index/search for semantic memory.
3
+ */
4
+ import { resolveMemoryProvider } from "@gencode/agents";
5
+ import { createBuiltinMemoryProvider } from "@gencode/agents";
6
+ import path from "node:path";
7
+ import { writeError, writeLine } from "../output.js";
8
+ function formatStatus(status, deep) {
9
+ const lines = [];
10
+ lines.push(`backend: ${status.backend}`);
11
+ lines.push(`provider: ${status.provider}${status.model ? ` (${status.model})` : ""}`);
12
+ if (typeof status.files === "number") {
13
+ lines.push(`files: ${status.files}`);
14
+ }
15
+ if (typeof status.chunks === "number") {
16
+ lines.push(`chunks: ${status.chunks}`);
17
+ }
18
+ if (typeof status.dirty === "boolean") {
19
+ lines.push(`dirty: ${status.dirty}`);
20
+ }
21
+ if (status.dbPath) {
22
+ lines.push(`db: ${status.dbPath}`);
23
+ }
24
+ if (status.sources?.length) {
25
+ lines.push(`sources: ${status.sources.join(", ")}`);
26
+ }
27
+ if (deep) {
28
+ if (status.fts) {
29
+ lines.push(`fts: enabled=${status.fts.enabled} available=${status.fts.available}`);
30
+ if (status.fts.error) {
31
+ lines.push(`fts_error: ${status.fts.error}`);
32
+ }
33
+ }
34
+ if (status.vector) {
35
+ lines.push(`vector: enabled=${status.vector.enabled} available=${status.vector.available ?? "unknown"}`);
36
+ if (status.vector.dims) {
37
+ lines.push(`vector_dims: ${status.vector.dims}`);
38
+ }
39
+ if (status.vector.loadError) {
40
+ lines.push(`vector_error: ${status.vector.loadError}`);
41
+ }
42
+ }
43
+ if (status.cache) {
44
+ lines.push(`cache: enabled=${status.cache.enabled} entries=${status.cache.entries ?? 0}`);
45
+ }
46
+ }
47
+ return lines.join("\n");
48
+ }
49
+ function getProvider(params) {
50
+ const memoryRoot = path.join(params.dataDir, ".aimax");
51
+ const resolved = resolveMemoryProvider({
52
+ providerId: params.provider,
53
+ pluginId: params.providerPlugin,
54
+ dataDir: params.dataDir,
55
+ memoryDir: memoryRoot,
56
+ });
57
+ if (resolved) {
58
+ return resolved.provider;
59
+ }
60
+ return createBuiltinMemoryProvider({ dataDir: params.dataDir, memoryDir: memoryRoot }, { includeSessions: params.includeSessions });
61
+ }
62
+ export function registerMemoryCommand(program) {
63
+ const memory = program.command("memory").description("Manage semantic memory indexing and search");
64
+ memory
65
+ .command("status")
66
+ .description("Show memory index status")
67
+ .requiredOption("-d, --data-dir <path>", "Data directory path")
68
+ .option("--deep", "Probe embedding/vector availability")
69
+ .option("--index", "Run a refresh before reporting status")
70
+ .option("--include-sessions", "Include session transcripts in indexing")
71
+ .option("--provider <id>", "Memory provider id")
72
+ .option("--provider-plugin <id>", "Memory provider plugin id")
73
+ .option("--verbose", "Verbose output")
74
+ .option("--output <format>", "Output format: text (default) or json", "text")
75
+ .action(async (options) => {
76
+ const format = options.output === "json" ? "json" : "text";
77
+ try {
78
+ const provider = getProvider({
79
+ dataDir: options.dataDir,
80
+ provider: options.provider,
81
+ providerPlugin: options.providerPlugin,
82
+ includeSessions: options.includeSessions,
83
+ });
84
+ if (options.index && provider.sync) {
85
+ await provider.sync("cli-status");
86
+ }
87
+ const status = provider.status();
88
+ if (options.deep) {
89
+ (status.custom ??= {}).note = "deep probe is only supported by builtin provider";
90
+ }
91
+ if (format === "json") {
92
+ writeLine(JSON.stringify(status, null, 2));
93
+ }
94
+ else {
95
+ writeLine(formatStatus(status, options.deep));
96
+ }
97
+ }
98
+ catch (err) {
99
+ writeError(`Error getting memory status: ${err.message}`);
100
+ process.exit(1);
101
+ }
102
+ });
103
+ memory
104
+ .command("index")
105
+ .description("Reindex memory files")
106
+ .requiredOption("-d, --data-dir <path>", "Data directory path")
107
+ .option("--include-sessions", "Include session transcripts in indexing")
108
+ .option("--provider <id>", "Memory provider id")
109
+ .option("--provider-plugin <id>", "Memory provider plugin id")
110
+ .option("--verbose", "Verbose output")
111
+ .action(async (options) => {
112
+ try {
113
+ const provider = getProvider({
114
+ dataDir: options.dataDir,
115
+ provider: options.provider,
116
+ providerPlugin: options.providerPlugin,
117
+ includeSessions: options.includeSessions,
118
+ });
119
+ if (provider.sync) {
120
+ await provider.sync("cli-index");
121
+ }
122
+ writeLine("Memory index refreshed.");
123
+ }
124
+ catch (err) {
125
+ writeError(`Error indexing memory: ${err.message}`);
126
+ process.exit(1);
127
+ }
128
+ });
129
+ memory
130
+ .command("search [query]")
131
+ .description("Search semantic memory")
132
+ .requiredOption("-d, --data-dir <path>", "Data directory path")
133
+ .option("--query <text>", "Search query")
134
+ .option("--include-sessions", "Include session transcripts in search")
135
+ .option("--provider <id>", "Memory provider id")
136
+ .option("--provider-plugin <id>", "Memory provider plugin id")
137
+ .option("--output <format>", "Output format: text (default) or json", "text")
138
+ .action(async (query, options) => {
139
+ const format = options.output === "json" ? "json" : "text";
140
+ const q = options.query?.trim() || query?.trim();
141
+ if (!q) {
142
+ writeError("Query is required: provide [query] or --query <text>");
143
+ process.exit(1);
144
+ }
145
+ try {
146
+ const provider = getProvider({
147
+ dataDir: options.dataDir,
148
+ provider: options.provider,
149
+ providerPlugin: options.providerPlugin,
150
+ includeSessions: options.includeSessions,
151
+ });
152
+ const results = await provider.search(q);
153
+ if (format === "json") {
154
+ writeLine(JSON.stringify(results, null, 2));
155
+ return;
156
+ }
157
+ if (results.length === 0) {
158
+ writeLine(`No results found for: ${q}`);
159
+ return;
160
+ }
161
+ const lines = results.map((r) => {
162
+ const base = `${r.path}:${r.startLine}-${r.endLine} (${r.score.toFixed(4)}) ${r.snippet}`;
163
+ return r.citation ? `${base}\n${r.citation}` : base;
164
+ });
165
+ writeLine(lines.join("\n"));
166
+ }
167
+ catch (err) {
168
+ writeError(`Error searching memory: ${err.message}`);
169
+ process.exit(1);
170
+ }
171
+ });
172
+ }
173
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA6B,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;AAwBxE,SAAS,YAAY,CAAC,MAA4B,EAAE,IAAc;IAChE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,GAAG,CAAC,OAAO,cAAc,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YACnF,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,MAAM,CAAC,OAAO,cAAc,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC;YACzG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,MAKpB;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,qBAAqB,CAAC;QACrC,UAAU,EAAE,MAAM,CAAC,QAAQ;QAC3B,QAAQ,EAAE,MAAM,CAAC,cAAc;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IACH,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,QAA0D,CAAC;IAC7E,CAAC;IACD,OAAO,2BAA2B,CAChC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,EAClD,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IAEnG,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC;SACvC,cAAc,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,qCAAqC,CAAC;SACvD,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CAAC,oBAAoB,EAAE,yCAAyC,CAAC;SACvE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SAC/C,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC;SAC7D,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;SACrC,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,EAAE,MAAM,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAiB,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,CAAC;gBAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,eAAe,EAAE,OAAO,CAAC,eAAe;aACzC,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,CAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,IAAI,GAAG,kDAAkD,CAAC;YACnF,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,gCAAiC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sBAAsB,CAAC;SACnC,cAAc,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;SAC9D,MAAM,CAAC,oBAAoB,EAAE,yCAAyC,CAAC;SACvE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SAC/C,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC;SAC7D,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,CAAC;gBAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,eAAe,EAAE,OAAO,CAAC,eAAe;aACzC,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC;YACD,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,0BAA2B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,wBAAwB,CAAC;SACrC,cAAc,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;SAC9D,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC;SACxC,MAAM,CAAC,oBAAoB,EAAE,uCAAuC,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SAC/C,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,EAAE,MAAM,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,KAAyB,EAAE,OAAsB,EAAE,EAAE;QAClE,MAAM,MAAM,GAAiB,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACzE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,UAAU,CAAC,sDAAsD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,CAAC;gBAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,eAAe,EAAE,OAAO,CAAC,eAAe;aACzC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,SAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1F,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,CAAC;YACH,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerPluginsCommand(program: Command, getDataDir: () => string): void;
3
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,CA+LvF"}
@@ -0,0 +1,228 @@
1
+ import path from "node:path";
2
+ import { initializePluginSystem, normalizePluginsConfig, } from "@gencode/agents";
3
+ import { loadPluginsConfig, savePluginsConfig } from "../plugins-config.js";
4
+ import { writeError, writeLine } from "../output.js";
5
+ function resolveWorkspaceDir(dataDir) {
6
+ return path.join(dataDir, "workspace");
7
+ }
8
+ function resolveBundledDir() {
9
+ const raw = process.env.AIMAX_PLUGINS_BUNDLED_DIR;
10
+ return raw ? raw.trim() || undefined : undefined;
11
+ }
12
+ function printPluginList(records) {
13
+ if (records.length === 0) {
14
+ writeLine("No plugins discovered.");
15
+ return;
16
+ }
17
+ for (const record of records) {
18
+ const status = record.status.padEnd(8, " ");
19
+ writeLine(`${record.id} ${status} ${record.origin} ${record.source}`);
20
+ }
21
+ }
22
+ function printPluginInfo(record) {
23
+ writeLine(`id: ${record.id}`);
24
+ writeLine(`status: ${record.status}`);
25
+ writeLine(`origin: ${record.origin}`);
26
+ writeLine(`source: ${record.source}`);
27
+ writeLine(`enabled: ${record.enabled}`);
28
+ if (record.error) {
29
+ writeLine(`error: ${record.error}`);
30
+ }
31
+ writeLine(`tools: ${record.toolCount}`);
32
+ writeLine(`hooks: ${record.hookCount}`);
33
+ if (record.skills.length > 0) {
34
+ writeLine(`skills: ${record.skills.join(", ")}`);
35
+ }
36
+ }
37
+ function normalizeAllowlist(list) {
38
+ return Array.from(new Set((list ?? []).map((entry) => entry.trim()).filter(Boolean)));
39
+ }
40
+ function printAllowlist(list) {
41
+ if (list.length === 0) {
42
+ writeLine("LLM allowlist is empty.");
43
+ return;
44
+ }
45
+ for (const entry of list) {
46
+ writeLine(entry);
47
+ }
48
+ }
49
+ export function registerPluginsCommand(program, getDataDir) {
50
+ const cmd = program.command("plugins").description("Manage AIMax plugins");
51
+ const addPluginsConfigOption = (command) => command.option("--plugins-config <path>", "Plugins config file path");
52
+ addPluginsConfigOption(cmd.command("list"))
53
+ .description("List discovered plugins")
54
+ .option("-d, --data-dir <path>", "Data directory path")
55
+ .action(async (options) => {
56
+ const dataDir = options.dataDir ?? getDataDir();
57
+ const config = await loadPluginsConfig(dataDir, options.pluginsConfig);
58
+ const system = initializePluginSystem({
59
+ config,
60
+ dataDir,
61
+ workspaceDir: resolveWorkspaceDir(dataDir),
62
+ bundledDir: resolveBundledDir(),
63
+ });
64
+ printPluginList(system.registry.plugins);
65
+ });
66
+ addPluginsConfigOption(cmd.command("info"))
67
+ .description("Show plugin details")
68
+ .argument("<id>", "Plugin id")
69
+ .option("-d, --data-dir <path>", "Data directory path")
70
+ .action(async (id, options) => {
71
+ const dataDir = options.dataDir ?? getDataDir();
72
+ const config = await loadPluginsConfig(dataDir, options.pluginsConfig);
73
+ const system = initializePluginSystem({
74
+ config,
75
+ dataDir,
76
+ workspaceDir: resolveWorkspaceDir(dataDir),
77
+ bundledDir: resolveBundledDir(),
78
+ });
79
+ const record = system.registry.plugins.find((entry) => entry.id === id);
80
+ if (!record) {
81
+ writeError(`Plugin not found: ${id}`);
82
+ process.exit(1);
83
+ }
84
+ printPluginInfo(record);
85
+ });
86
+ addPluginsConfigOption(cmd.command("enable"))
87
+ .description("Enable a plugin")
88
+ .argument("<id>", "Plugin id")
89
+ .option("-d, --data-dir <path>", "Data directory path")
90
+ .action(async (id, options) => {
91
+ const dataDir = options.dataDir ?? getDataDir();
92
+ const config = (await loadPluginsConfig(dataDir, options.pluginsConfig)) ?? {};
93
+ const normalized = normalizePluginsConfig(config);
94
+ const system = initializePluginSystem({
95
+ config,
96
+ dataDir,
97
+ workspaceDir: resolveWorkspaceDir(dataDir),
98
+ bundledDir: resolveBundledDir(),
99
+ });
100
+ const exists = system.registry.plugins.some((entry) => entry.id === id);
101
+ if (!exists) {
102
+ writeError(`Plugin not found: ${id}`);
103
+ process.exit(1);
104
+ }
105
+ const updated = {
106
+ ...config,
107
+ entries: {
108
+ ...config.entries,
109
+ [id]: { ...(config.entries?.[id] ?? {}), enabled: true },
110
+ },
111
+ };
112
+ await savePluginsConfig(dataDir, updated, options.pluginsConfig);
113
+ writeLine(`Enabled ${id}`);
114
+ if (normalized.allow.length > 0 && !normalized.allow.includes(id)) {
115
+ writeLine("Note: plugins.allow is set; add this plugin id to allowlist if needed.");
116
+ }
117
+ });
118
+ addPluginsConfigOption(cmd.command("disable"))
119
+ .description("Disable a plugin")
120
+ .argument("<id>", "Plugin id")
121
+ .option("-d, --data-dir <path>", "Data directory path")
122
+ .action(async (id, options) => {
123
+ const dataDir = options.dataDir ?? getDataDir();
124
+ const config = (await loadPluginsConfig(dataDir, options.pluginsConfig)) ?? {};
125
+ const system = initializePluginSystem({
126
+ config,
127
+ dataDir,
128
+ workspaceDir: resolveWorkspaceDir(dataDir),
129
+ bundledDir: resolveBundledDir(),
130
+ });
131
+ const exists = system.registry.plugins.some((entry) => entry.id === id);
132
+ if (!exists) {
133
+ writeError(`Plugin not found: ${id}`);
134
+ process.exit(1);
135
+ }
136
+ const updated = {
137
+ ...config,
138
+ entries: {
139
+ ...config.entries,
140
+ [id]: { ...(config.entries?.[id] ?? {}), enabled: false },
141
+ },
142
+ };
143
+ await savePluginsConfig(dataDir, updated, options.pluginsConfig);
144
+ writeLine(`Disabled ${id}`);
145
+ });
146
+ addPluginsConfigOption(cmd.command("doctor"))
147
+ .description("Validate plugin configuration")
148
+ .option("-d, --data-dir <path>", "Data directory path")
149
+ .action(async (options) => {
150
+ const dataDir = options.dataDir ?? getDataDir();
151
+ const config = await loadPluginsConfig(dataDir, options.pluginsConfig);
152
+ const system = initializePluginSystem({
153
+ config,
154
+ dataDir,
155
+ workspaceDir: resolveWorkspaceDir(dataDir),
156
+ bundledDir: resolveBundledDir(),
157
+ });
158
+ if (system.diagnostics.length === 0) {
159
+ writeLine("No plugin issues detected.");
160
+ return;
161
+ }
162
+ for (const diag of system.diagnostics) {
163
+ const prefix = diag.level === "error" ? "ERROR" : "WARN";
164
+ const id = diag.pluginId ? ` ${diag.pluginId}` : "";
165
+ writeLine(`${prefix}${id}: ${diag.message}`);
166
+ }
167
+ const hasError = system.diagnostics.some((d) => d.level === "error");
168
+ if (hasError) {
169
+ process.exit(1);
170
+ }
171
+ });
172
+ const llmCmd = cmd.command("llm-allow").description("Manage plugin LLM allowlist");
173
+ addPluginsConfigOption(llmCmd.command("list"))
174
+ .description("List LLM allowlist entries")
175
+ .option("-d, --data-dir <path>", "Data directory path")
176
+ .action(async (options) => {
177
+ const dataDir = options.dataDir ?? getDataDir();
178
+ const config = await loadPluginsConfig(dataDir, options.pluginsConfig);
179
+ const allowlist = normalizeAllowlist(config?.llmAllowlist);
180
+ printAllowlist(allowlist);
181
+ });
182
+ addPluginsConfigOption(llmCmd.command("add"))
183
+ .description("Add entries to the LLM allowlist (plugin id or tool name)")
184
+ .argument("<entry...>", "Plugin id or tool name")
185
+ .option("-d, --data-dir <path>", "Data directory path")
186
+ .action(async (entries, options) => {
187
+ const dataDir = options.dataDir ?? getDataDir();
188
+ const config = (await loadPluginsConfig(dataDir, options.pluginsConfig)) ?? {};
189
+ const allowlist = normalizeAllowlist([...((config.llmAllowlist ?? [])), ...entries]);
190
+ const updated = {
191
+ ...config,
192
+ llmAllowlist: allowlist,
193
+ };
194
+ await savePluginsConfig(dataDir, updated, options.pluginsConfig);
195
+ writeLine(`LLM allowlist updated (${allowlist.length} entries).`);
196
+ });
197
+ addPluginsConfigOption(llmCmd.command("remove"))
198
+ .description("Remove entries from the LLM allowlist")
199
+ .argument("<entry...>", "Plugin id or tool name")
200
+ .option("-d, --data-dir <path>", "Data directory path")
201
+ .action(async (entries, options) => {
202
+ const dataDir = options.dataDir ?? getDataDir();
203
+ const config = (await loadPluginsConfig(dataDir, options.pluginsConfig)) ?? {};
204
+ const removeSet = new Set(entries.map((entry) => entry.trim()).filter(Boolean));
205
+ const current = normalizeAllowlist(config.llmAllowlist);
206
+ const allowlist = current.filter((entry) => !removeSet.has(entry));
207
+ const updated = {
208
+ ...config,
209
+ llmAllowlist: allowlist,
210
+ };
211
+ await savePluginsConfig(dataDir, updated, options.pluginsConfig);
212
+ writeLine(`LLM allowlist updated (${allowlist.length} entries).`);
213
+ });
214
+ addPluginsConfigOption(llmCmd.command("clear"))
215
+ .description("Clear the LLM allowlist")
216
+ .option("-d, --data-dir <path>", "Data directory path")
217
+ .action(async (options) => {
218
+ const dataDir = options.dataDir ?? getDataDir();
219
+ const config = (await loadPluginsConfig(dataDir, options.pluginsConfig)) ?? {};
220
+ const updated = {
221
+ ...config,
222
+ llmAllowlist: [],
223
+ };
224
+ await savePluginsConfig(dataDir, updated, options.pluginsConfig);
225
+ writeLine("LLM allowlist cleared.");
226
+ });
227
+ }
228
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `aimax run` command — executes an agent task.
3
+ */
4
+ import type { Command } from "commander";
5
+ import type { Channel } from "@gencode/agents";
6
+ import { type OutputFormat } from "../output.js";
7
+ export type RunOptions = {
8
+ dataDir: string;
9
+ message?: string;
10
+ fromFile?: string;
11
+ sessionId?: string;
12
+ messageId?: string;
13
+ channel?: Channel;
14
+ baseUrl?: string;
15
+ apiKey?: string;
16
+ authToken?: string;
17
+ model?: string;
18
+ contextWindow?: string;
19
+ callbackUrl?: string;
20
+ timeout?: string;
21
+ output?: OutputFormat;
22
+ pluginsConfig?: string;
23
+ };
24
+ /** Registers the `run` subcommand on the given Commander program */
25
+ export declare function registerRunCommand(program: Command): void;
26
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/C,OAAO,EAAkD,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjG,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAkCF,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4IzD"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * `aimax run` command — executes an agent task.
3
+ */
4
+ import { ensureBootstrapMountLayout, runAgent } from "@gencode/agents";
5
+ import path from "node:path";
6
+ import { resolveLlmConfig } from "../config.js";
7
+ import { printProgressEvent, printRunResult, writeError } from "../output.js";
8
+ import { loadPluginsConfig } from "../plugins-config.js";
9
+ import { resolveRunMessageInput } from "../utils/message-input.js";
10
+ async function sendCallback(url, payload) {
11
+ const response = await fetch(url, {
12
+ method: "POST",
13
+ headers: { "content-type": "application/json" },
14
+ body: JSON.stringify(payload),
15
+ });
16
+ if (!response.ok) {
17
+ throw new Error(`Callback failed with status ${response.status}`);
18
+ }
19
+ }
20
+ async function emitBootstrapEvent(event, options) {
21
+ if (options.format === "text") {
22
+ printProgressEvent(event);
23
+ }
24
+ if (!options.callbackUrl) {
25
+ return;
26
+ }
27
+ await sendCallback(options.callbackUrl, {
28
+ sessionId: options.sessionId ?? "pending",
29
+ channel: options.channel,
30
+ messageId: options.messageId,
31
+ type: "progress",
32
+ event,
33
+ });
34
+ }
35
+ /** Registers the `run` subcommand on the given Commander program */
36
+ export function registerRunCommand(program) {
37
+ program
38
+ .command("run")
39
+ .description("Run an agent task")
40
+ .requiredOption("-d, --data-dir <path>", "Data directory path")
41
+ .option("--message <text>", "User message to send to the agent")
42
+ .option("--from-file <path>", "Load structured Message JSON from a file")
43
+ .option("-s, --session-id <id>", "Resume an existing session by ID")
44
+ .option("--message-id <id>", "Message ID for correlating events")
45
+ .option("-c, --channel <channel>", "Channel type: H5 | WEB | KLPA | CRON (default: WEB)", "WEB")
46
+ .option("--base-url <url>", "LLM API base URL (overrides AIMAX_BASE_URL)")
47
+ .option("--api-key <key>", "LLM API key (overrides AIMAX_API_KEY)")
48
+ .option("--auth-token <token>", "Auth token used to generate the API key (highest priority)")
49
+ .option("--model <name>", "LLM model name (overrides AIMAX_MODEL)")
50
+ .option("--context-window <n>", "LLM context window size")
51
+ .option("--callback-url <url>", "HTTP callback URL for progress events")
52
+ .option("--timeout <ms>", "Execution timeout in milliseconds (default: 600000)")
53
+ .option("--output <format>", "Output format: text (default) or json", "text")
54
+ .option("--plugins-config <path>", "Plugins config file path")
55
+ .action(async (options) => {
56
+ let llm;
57
+ try {
58
+ llm = resolveLlmConfig({
59
+ baseUrl: options.baseUrl,
60
+ apiKey: options.apiKey,
61
+ authToken: options.authToken,
62
+ model: options.model,
63
+ contextWindow: options.contextWindow ? Number(options.contextWindow) : undefined,
64
+ });
65
+ }
66
+ catch (err) {
67
+ writeError(err.message);
68
+ process.exit(1);
69
+ }
70
+ // Validate channel
71
+ const channel = options.channel ?? "WEB";
72
+ if (channel !== "H5" && channel !== "WEB" && channel !== "KLPA" && channel !== "CRON") {
73
+ writeError(`Invalid channel: ${channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);
74
+ process.exit(1);
75
+ }
76
+ const format = options.output === "json" ? "json" : "text";
77
+ let input;
78
+ try {
79
+ input = await resolveRunMessageInput({
80
+ message: options.message,
81
+ fromFile: options.fromFile,
82
+ });
83
+ }
84
+ catch (err) {
85
+ writeError(err.message);
86
+ process.exit(1);
87
+ }
88
+ // Wire abort signal to OS termination signals so the agent can be
89
+ // gracefully cancelled when the container is stopped (SIGTERM) or
90
+ // the user presses Ctrl-C (SIGINT).
91
+ const abortController = new AbortController();
92
+ const abort = () => abortController.abort();
93
+ process.once("SIGTERM", abort);
94
+ process.once("SIGINT", abort);
95
+ try {
96
+ await emitBootstrapEvent({ type: "bootstrap", phase: "checking", dataDir: options.dataDir }, { callbackUrl: options.callbackUrl, sessionId: options.sessionId, channel, messageId: options.messageId, format });
97
+ const bootstrap = await ensureBootstrapMountLayout(options.dataDir);
98
+ if (bootstrap.performedBootstrap) {
99
+ await emitBootstrapEvent({ type: "bootstrap", phase: "initializing", dataDir: options.dataDir }, { callbackUrl: options.callbackUrl, sessionId: options.sessionId, channel, messageId: options.messageId, format });
100
+ await emitBootstrapEvent({ type: "bootstrap", phase: "initialized", dataDir: options.dataDir }, { callbackUrl: options.callbackUrl, sessionId: options.sessionId, channel, messageId: options.messageId, format });
101
+ }
102
+ else {
103
+ await emitBootstrapEvent({ type: "bootstrap", phase: "ready", dataDir: options.dataDir }, { callbackUrl: options.callbackUrl, sessionId: options.sessionId, channel, messageId: options.messageId, format });
104
+ }
105
+ const pluginsConfig = await loadPluginsConfig(options.dataDir, options.pluginsConfig);
106
+ const runParams = input.kind === "messages"
107
+ ? {
108
+ dataDir: options.dataDir,
109
+ messages: input.messages,
110
+ sessionId: options.sessionId,
111
+ messageId: options.messageId,
112
+ channel,
113
+ llm,
114
+ callbackUrl: options.callbackUrl,
115
+ timeoutMs: options.timeout ? Number(options.timeout) : undefined,
116
+ abortSignal: abortController.signal,
117
+ plugins: pluginsConfig ? {
118
+ config: pluginsConfig,
119
+ dataDir: options.dataDir,
120
+ workspaceDir: path.join(options.dataDir, "workspace"),
121
+ bundledDir: process.env.AIMAX_PLUGINS_BUNDLED_DIR,
122
+ llmAllowlist: pluginsConfig.llmAllowlist,
123
+ } : undefined,
124
+ onProgress: format === "text"
125
+ ? async (event) => { printProgressEvent(event); }
126
+ : undefined,
127
+ }
128
+ : {
129
+ dataDir: options.dataDir,
130
+ message: input.message,
131
+ sessionId: options.sessionId,
132
+ messageId: options.messageId,
133
+ channel,
134
+ llm,
135
+ callbackUrl: options.callbackUrl,
136
+ timeoutMs: options.timeout ? Number(options.timeout) : undefined,
137
+ abortSignal: abortController.signal,
138
+ plugins: pluginsConfig ? {
139
+ config: pluginsConfig,
140
+ dataDir: options.dataDir,
141
+ workspaceDir: path.join(options.dataDir, "workspace"),
142
+ bundledDir: process.env.AIMAX_PLUGINS_BUNDLED_DIR,
143
+ llmAllowlist: pluginsConfig.llmAllowlist,
144
+ } : undefined,
145
+ onProgress: format === "text"
146
+ ? async (event) => { printProgressEvent(event); }
147
+ : undefined,
148
+ };
149
+ const result = await runAgent(runParams);
150
+ printRunResult(result, format);
151
+ process.exit(result.error ? 1 : 0);
152
+ }
153
+ catch (err) {
154
+ writeError(`Fatal: ${err.message}`);
155
+ process.exit(1);
156
+ }
157
+ finally {
158
+ process.off("SIGTERM", abort);
159
+ process.off("SIGINT", abort);
160
+ }
161
+ });
162
+ }
163
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}