mthds 0.0.6 → 0.0.8

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 (239) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +51 -11
  3. package/dist/agent/commands/build.d.ts +35 -0
  4. package/dist/agent/commands/build.js +334 -0
  5. package/dist/agent/commands/build.js.map +1 -0
  6. package/dist/agent/commands/config.d.ts +6 -0
  7. package/dist/agent/commands/config.js +50 -0
  8. package/dist/agent/commands/config.js.map +1 -0
  9. package/dist/agent/commands/install.d.ts +14 -0
  10. package/dist/agent/commands/install.js +178 -0
  11. package/dist/agent/commands/install.js.map +1 -0
  12. package/dist/agent/commands/pipelex.d.ts +7 -0
  13. package/dist/agent/commands/pipelex.js +56 -0
  14. package/dist/agent/commands/pipelex.js.map +1 -0
  15. package/dist/agent/commands/plxt.d.ts +7 -0
  16. package/dist/agent/commands/plxt.js +27 -0
  17. package/dist/agent/commands/plxt.js.map +1 -0
  18. package/dist/agent/commands/validate.d.ts +15 -0
  19. package/dist/agent/commands/validate.js +118 -0
  20. package/dist/agent/commands/validate.js.map +1 -0
  21. package/dist/agent/output.d.ts +25 -0
  22. package/dist/agent/output.js +51 -0
  23. package/dist/agent/output.js.map +1 -0
  24. package/dist/agent/passthrough.d.ts +5 -0
  25. package/dist/agent/passthrough.js +19 -0
  26. package/dist/agent/passthrough.js.map +1 -0
  27. package/dist/agent-cli.d.ts +8 -0
  28. package/dist/agent-cli.js +237 -0
  29. package/dist/agent-cli.js.map +1 -0
  30. package/dist/cli/commands/build.d.ts +31 -0
  31. package/dist/cli/commands/build.js +305 -0
  32. package/dist/cli/commands/build.js.map +1 -0
  33. package/dist/{commands → cli/commands}/config.js +4 -4
  34. package/dist/cli/commands/config.js.map +1 -0
  35. package/dist/{commands → cli/commands}/index.js +20 -18
  36. package/dist/cli/commands/index.js.map +1 -0
  37. package/dist/cli/commands/install.js +275 -0
  38. package/dist/cli/commands/install.js.map +1 -0
  39. package/dist/cli/commands/package/add.d.ts +6 -0
  40. package/dist/cli/commands/package/add.js +9 -0
  41. package/dist/cli/commands/package/add.js.map +1 -0
  42. package/dist/cli/commands/package/init.d.ts +3 -0
  43. package/dist/cli/commands/package/init.js +108 -0
  44. package/dist/cli/commands/package/init.js.map +1 -0
  45. package/dist/cli/commands/package/install.d.ts +3 -0
  46. package/dist/cli/commands/package/install.js +97 -0
  47. package/dist/cli/commands/package/install.js.map +1 -0
  48. package/dist/cli/commands/package/list.d.ts +3 -0
  49. package/dist/cli/commands/package/list.js +58 -0
  50. package/dist/cli/commands/package/list.js.map +1 -0
  51. package/dist/cli/commands/package/lock.d.ts +3 -0
  52. package/dist/cli/commands/package/lock.js +37 -0
  53. package/dist/cli/commands/package/lock.js.map +1 -0
  54. package/dist/cli/commands/package/update.d.ts +3 -0
  55. package/dist/cli/commands/package/update.js +35 -0
  56. package/dist/cli/commands/package/update.js.map +1 -0
  57. package/dist/cli/commands/package/validate.d.ts +3 -0
  58. package/dist/cli/commands/package/validate.js +76 -0
  59. package/dist/cli/commands/package/validate.js.map +1 -0
  60. package/dist/cli/commands/run.d.ts +12 -0
  61. package/dist/cli/commands/run.js +95 -0
  62. package/dist/cli/commands/run.js.map +1 -0
  63. package/dist/cli/commands/setup.d.ts +3 -0
  64. package/dist/cli/commands/setup.js +168 -0
  65. package/dist/cli/commands/setup.js.map +1 -0
  66. package/dist/cli/commands/utils.d.ts +9 -0
  67. package/dist/cli/commands/utils.js +34 -0
  68. package/dist/cli/commands/utils.js.map +1 -0
  69. package/dist/cli/commands/validate.d.ts +10 -0
  70. package/dist/cli/commands/validate.js +93 -0
  71. package/dist/cli/commands/validate.js.map +1 -0
  72. package/dist/cli.js +276 -99
  73. package/dist/cli.js.map +1 -1
  74. package/dist/client/client.js +2 -2
  75. package/dist/client/client.js.map +1 -1
  76. package/dist/config/config.d.ts +5 -20
  77. package/dist/config/config.js +5 -78
  78. package/dist/config/config.js.map +1 -1
  79. package/dist/config/credentials.d.ts +25 -0
  80. package/dist/config/credentials.js +230 -0
  81. package/dist/config/credentials.js.map +1 -0
  82. package/dist/installer/agents/registry.d.ts +12 -0
  83. package/dist/installer/agents/registry.js +78 -0
  84. package/dist/installer/agents/registry.js.map +1 -0
  85. package/dist/installer/agents/types.d.ts +16 -0
  86. package/dist/installer/agents/types.js +6 -0
  87. package/dist/installer/agents/types.js.map +1 -0
  88. package/dist/installer/resolver/address.d.ts +2 -0
  89. package/dist/installer/resolver/address.js.map +1 -0
  90. package/dist/{resolver → installer/resolver}/github.d.ts +1 -1
  91. package/dist/{resolver → installer/resolver}/github.js +2 -2
  92. package/dist/installer/resolver/github.js.map +1 -0
  93. package/dist/installer/resolver/index.d.ts +6 -0
  94. package/dist/{resolver → installer/resolver}/index.js +1 -1
  95. package/dist/installer/resolver/index.js.map +1 -0
  96. package/dist/{resolver → installer/resolver}/local.d.ts +1 -1
  97. package/dist/{resolver → installer/resolver}/local.js +2 -2
  98. package/dist/installer/resolver/local.js.map +1 -0
  99. package/dist/installer/runtime/check.js.map +1 -0
  100. package/dist/installer/runtime/installer.js.map +1 -0
  101. package/dist/installer/runtime/spawn.js.map +1 -0
  102. package/dist/{telemetry → installer/telemetry}/posthog.d.ts +2 -5
  103. package/dist/installer/telemetry/posthog.js +55 -0
  104. package/dist/installer/telemetry/posthog.js.map +1 -0
  105. package/dist/package/bundle-metadata.d.ts +8 -0
  106. package/dist/package/bundle-metadata.js +2 -0
  107. package/dist/package/bundle-metadata.js.map +1 -0
  108. package/dist/package/bundle-scanner.d.ts +18 -0
  109. package/dist/package/bundle-scanner.js +77 -0
  110. package/dist/package/bundle-scanner.js.map +1 -0
  111. package/dist/package/dependency-resolver.d.ts +32 -0
  112. package/dist/package/dependency-resolver.js +298 -0
  113. package/dist/package/dependency-resolver.js.map +1 -0
  114. package/dist/package/discovery.d.ts +9 -0
  115. package/dist/package/discovery.js +32 -0
  116. package/dist/package/discovery.js.map +1 -0
  117. package/dist/package/exceptions.d.ts +36 -0
  118. package/dist/package/exceptions.js +73 -0
  119. package/dist/package/exceptions.js.map +1 -0
  120. package/dist/package/lock-file.d.ts +27 -0
  121. package/dist/package/lock-file.js +137 -0
  122. package/dist/package/lock-file.js.map +1 -0
  123. package/dist/package/manifest/convert.d.ts +14 -0
  124. package/dist/package/manifest/convert.js +83 -0
  125. package/dist/package/manifest/convert.js.map +1 -0
  126. package/dist/package/manifest/parser.d.ts +9 -0
  127. package/dist/package/manifest/parser.js +261 -0
  128. package/dist/package/manifest/parser.js.map +1 -0
  129. package/dist/package/manifest/schema.d.ts +71 -0
  130. package/dist/package/manifest/schema.js +73 -0
  131. package/dist/package/manifest/schema.js.map +1 -0
  132. package/dist/{resolver → package/manifest}/types.d.ts +2 -5
  133. package/dist/{resolver → package/manifest}/types.js.map +1 -1
  134. package/dist/{resolver → package/manifest}/validate.js +25 -20
  135. package/dist/package/manifest/validate.js.map +1 -0
  136. package/dist/package/manifest/validation.d.ts +10 -0
  137. package/dist/package/manifest/validation.js +34 -0
  138. package/dist/package/manifest/validation.js.map +1 -0
  139. package/dist/package/package-cache.d.ts +24 -0
  140. package/dist/package/package-cache.js +92 -0
  141. package/dist/package/package-cache.js.map +1 -0
  142. package/dist/package/qualified-ref.d.ts +41 -0
  143. package/dist/package/qualified-ref.js +105 -0
  144. package/dist/package/qualified-ref.js.map +1 -0
  145. package/dist/package/semver.d.ts +33 -0
  146. package/dist/package/semver.js +77 -0
  147. package/dist/package/semver.js.map +1 -0
  148. package/dist/package/vcs-resolver.d.ts +19 -0
  149. package/dist/package/vcs-resolver.js +115 -0
  150. package/dist/package/vcs-resolver.js.map +1 -0
  151. package/dist/package/visibility.d.ts +25 -0
  152. package/dist/package/visibility.js +132 -0
  153. package/dist/package/visibility.js.map +1 -0
  154. package/dist/runners/api-runner.d.ts +3 -0
  155. package/dist/runners/api-runner.js +9 -1
  156. package/dist/runners/api-runner.js.map +1 -1
  157. package/dist/runners/pipelex-runner.d.ts +16 -2
  158. package/dist/runners/pipelex-runner.js +155 -41
  159. package/dist/runners/pipelex-runner.js.map +1 -1
  160. package/dist/runners/registry.d.ts +1 -1
  161. package/dist/runners/registry.js +5 -4
  162. package/dist/runners/registry.js.map +1 -1
  163. package/dist/runners/types.d.ts +17 -10
  164. package/dist/runners/types.js +6 -1
  165. package/dist/runners/types.js.map +1 -1
  166. package/package.json +7 -4
  167. package/dist/agents/claude-code.d.ts +0 -2
  168. package/dist/agents/claude-code.js +0 -36
  169. package/dist/agents/claude-code.js.map +0 -1
  170. package/dist/agents/cursor.d.ts +0 -2
  171. package/dist/agents/cursor.js +0 -11
  172. package/dist/agents/cursor.js.map +0 -1
  173. package/dist/agents/github-copilot.d.ts +0 -2
  174. package/dist/agents/github-copilot.js +0 -11
  175. package/dist/agents/github-copilot.js.map +0 -1
  176. package/dist/agents/registry.d.ts +0 -4
  177. package/dist/agents/registry.js +0 -24
  178. package/dist/agents/registry.js.map +0 -1
  179. package/dist/agents/types.d.ts +0 -25
  180. package/dist/agents/types.js +0 -11
  181. package/dist/agents/types.js.map +0 -1
  182. package/dist/agents/windsurf.d.ts +0 -2
  183. package/dist/agents/windsurf.js +0 -11
  184. package/dist/agents/windsurf.js.map +0 -1
  185. package/dist/commands/build.d.ts +0 -19
  186. package/dist/commands/build.js +0 -128
  187. package/dist/commands/build.js.map +0 -1
  188. package/dist/commands/config.js.map +0 -1
  189. package/dist/commands/index.js.map +0 -1
  190. package/dist/commands/install.js +0 -252
  191. package/dist/commands/install.js.map +0 -1
  192. package/dist/commands/run.d.ts +0 -11
  193. package/dist/commands/run.js +0 -44
  194. package/dist/commands/run.js.map +0 -1
  195. package/dist/commands/runner.d.ts +0 -2
  196. package/dist/commands/runner.js +0 -59
  197. package/dist/commands/runner.js.map +0 -1
  198. package/dist/commands/setup.d.ts +0 -1
  199. package/dist/commands/setup.js +0 -45
  200. package/dist/commands/setup.js.map +0 -1
  201. package/dist/commands/telemetry.d.ts +0 -3
  202. package/dist/commands/telemetry.js +0 -49
  203. package/dist/commands/telemetry.js.map +0 -1
  204. package/dist/commands/validate.d.ts +0 -6
  205. package/dist/commands/validate.js +0 -41
  206. package/dist/commands/validate.js.map +0 -1
  207. package/dist/resolver/address.d.ts +0 -2
  208. package/dist/resolver/address.js.map +0 -1
  209. package/dist/resolver/github.js.map +0 -1
  210. package/dist/resolver/index.d.ts +0 -6
  211. package/dist/resolver/index.js.map +0 -1
  212. package/dist/resolver/local.js.map +0 -1
  213. package/dist/resolver/validate.js.map +0 -1
  214. package/dist/runtime/check.js.map +0 -1
  215. package/dist/runtime/installer.js.map +0 -1
  216. package/dist/runtime/spawn.js.map +0 -1
  217. package/dist/supabase/client.d.ts +0 -4
  218. package/dist/supabase/client.js +0 -5
  219. package/dist/supabase/client.js.map +0 -1
  220. package/dist/supabase/methods.d.ts +0 -2
  221. package/dist/supabase/methods.js +0 -13
  222. package/dist/supabase/methods.js.map +0 -1
  223. package/dist/supabase/types.d.ts +0 -30
  224. package/dist/supabase/types.js +0 -2
  225. package/dist/supabase/types.js.map +0 -1
  226. package/dist/telemetry/posthog.js +0 -117
  227. package/dist/telemetry/posthog.js.map +0 -1
  228. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  229. /package/dist/{commands → cli/commands}/index.d.ts +0 -0
  230. /package/dist/{commands → cli/commands}/install.d.ts +0 -0
  231. /package/dist/{resolver → installer/resolver}/address.js +0 -0
  232. /package/dist/{runtime → installer/runtime}/check.d.ts +0 -0
  233. /package/dist/{runtime → installer/runtime}/check.js +0 -0
  234. /package/dist/{runtime → installer/runtime}/installer.d.ts +0 -0
  235. /package/dist/{runtime → installer/runtime}/installer.js +0 -0
  236. /package/dist/{runtime → installer/runtime}/spawn.d.ts +0 -0
  237. /package/dist/{runtime → installer/runtime}/spawn.js +0 -0
  238. /package/dist/{resolver → package/manifest}/types.js +0 -0
  239. /package/dist/{resolver → package/manifest}/validate.d.ts +0 -0
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Non-interactive agent install command.
3
+ * All choices are required CLI flags — no prompts, no clack.
4
+ */
5
+ import { join } from "node:path";
6
+ import { homedir } from "node:os";
7
+ import { mkdirSync, existsSync } from "node:fs";
8
+ import { exec } from "node:child_process";
9
+ import { promisify } from "node:util";
10
+ import { agentSuccess, agentError, AGENT_ERROR_DOMAINS } from "../output.js";
11
+ import { parseAddress } from "../../installer/resolver/address.js";
12
+ import { resolveFromGitHub } from "../../installer/resolver/github.js";
13
+ import { resolveFromLocal } from "../../installer/resolver/local.js";
14
+ import { getAllAgents, getAgentHandler } from "../../installer/agents/registry.js";
15
+ import { isPipelexInstalled } from "../../installer/runtime/check.js";
16
+ import { ensureRuntime } from "../../installer/runtime/installer.js";
17
+ import { trackInstall, shutdown } from "../../installer/telemetry/posthog.js";
18
+ import { InstallLocation as Loc } from "../../installer/agents/types.js";
19
+ const execAsync = promisify(exec);
20
+ export async function agentInstall(address, options) {
21
+ // Validate required flags
22
+ if (!options.agent) {
23
+ agentError("--agent is required", "ArgumentError", {
24
+ error_domain: AGENT_ERROR_DOMAINS.ARGUMENT,
25
+ });
26
+ }
27
+ if (!options.location) {
28
+ agentError("--location is required (local or global)", "ArgumentError", {
29
+ error_domain: AGENT_ERROR_DOMAINS.ARGUMENT,
30
+ });
31
+ }
32
+ if (options.location !== "local" && options.location !== "global") {
33
+ agentError(`Invalid location: ${options.location}. Must be "local" or "global".`, "ArgumentError", { error_domain: AGENT_ERROR_DOMAINS.ARGUMENT });
34
+ }
35
+ // Validate agent ID
36
+ const agents = getAllAgents();
37
+ const validAgentIds = agents.map((a) => a.id);
38
+ if (!validAgentIds.includes(options.agent)) {
39
+ agentError(`Unknown agent: ${options.agent}. Valid agents: ${validAgentIds.join(", ")}`, "ArgumentError", { error_domain: AGENT_ERROR_DOMAINS.ARGUMENT });
40
+ }
41
+ if (address && options.local) {
42
+ agentError("Cannot use both an address and --local at the same time.", "ArgumentError", { error_domain: AGENT_ERROR_DOMAINS.ARGUMENT });
43
+ }
44
+ if (!address && !options.local) {
45
+ agentError("Provide an address (org/repo) or use --local <path>.", "ArgumentError", { error_domain: AGENT_ERROR_DOMAINS.ARGUMENT });
46
+ }
47
+ const selectedAgent = options.agent;
48
+ const selectedLocation = options.location;
49
+ const methodFilter = options.method;
50
+ // Resolve repo
51
+ let resolved;
52
+ let orgRepo;
53
+ if (options.local) {
54
+ try {
55
+ resolved = resolveFromLocal(options.local);
56
+ }
57
+ catch (err) {
58
+ agentError(`Failed to resolve local methods: ${err.message}`, "InstallError", { error_domain: AGENT_ERROR_DOMAINS.INSTALL });
59
+ }
60
+ if (resolved.methods.length > 0) {
61
+ const addr = resolved.methods[0].manifest.package.address;
62
+ orgRepo = addr.replace(/^github\.com\//, "");
63
+ }
64
+ }
65
+ else if (address) {
66
+ let parsed;
67
+ try {
68
+ parsed = parseAddress(address);
69
+ }
70
+ catch (err) {
71
+ agentError(err.message, "InstallError", {
72
+ error_domain: AGENT_ERROR_DOMAINS.INSTALL,
73
+ });
74
+ }
75
+ try {
76
+ resolved = await resolveFromGitHub(parsed);
77
+ }
78
+ catch (err) {
79
+ agentError(`Failed to resolve methods: ${err.message}`, "InstallError", { error_domain: AGENT_ERROR_DOMAINS.INSTALL });
80
+ }
81
+ orgRepo = `${parsed.org}/${parsed.repo}`;
82
+ }
83
+ else {
84
+ // unreachable due to earlier validation
85
+ agentError("No address or local path provided.", "ArgumentError", {
86
+ error_domain: AGENT_ERROR_DOMAINS.ARGUMENT,
87
+ });
88
+ }
89
+ // Filter by --method
90
+ if (methodFilter) {
91
+ const match = resolved.methods.find((m) => m.slug === methodFilter);
92
+ if (!match) {
93
+ const available = resolved.methods.map((m) => m.slug).join(", ");
94
+ agentError(`Method "${methodFilter}" not found. Available slugs: ${available || "(none)"}`, "InstallError", { error_domain: AGENT_ERROR_DOMAINS.INSTALL });
95
+ }
96
+ resolved = { ...resolved, methods: [match] };
97
+ }
98
+ if (resolved.methods.length === 0) {
99
+ agentError("No valid methods to install.", "InstallError", {
100
+ error_domain: AGENT_ERROR_DOMAINS.INSTALL,
101
+ });
102
+ }
103
+ // Optional runner install
104
+ if (!options.noRunner) {
105
+ if (!isPipelexInstalled()) {
106
+ try {
107
+ await ensureRuntime();
108
+ }
109
+ catch (err) {
110
+ agentError(`Failed to install pipelex runtime: ${err.message}`, "InstallError", { error_domain: AGENT_ERROR_DOMAINS.INSTALL, retryable: true });
111
+ }
112
+ }
113
+ }
114
+ // Determine target directory
115
+ const localDir = join(process.cwd(), ".claude", "methods");
116
+ const globalDir = join(homedir(), ".claude", "methods");
117
+ const targetDir = selectedLocation === Loc.Global ? globalDir : localDir;
118
+ mkdirSync(targetDir, { recursive: true });
119
+ // Telemetry for public GitHub repos
120
+ if (resolved.source === "github" && resolved.isPublic) {
121
+ for (const method of resolved.methods) {
122
+ const pkg = method.manifest.package;
123
+ trackInstall({
124
+ address: orgRepo ?? pkg.address.replace(/^github\.com\//, ""),
125
+ slug: method.slug,
126
+ version: pkg.version,
127
+ description: pkg.description,
128
+ display_name: pkg.display_name,
129
+ authors: pkg.authors,
130
+ license: pkg.license,
131
+ mthds_version: pkg.mthds_version,
132
+ exports: method.manifest.exports,
133
+ manifest_raw: method.rawManifest,
134
+ });
135
+ }
136
+ }
137
+ // Install methods
138
+ const handler = getAgentHandler(selectedAgent);
139
+ try {
140
+ await handler.installMethod({
141
+ repo: resolved,
142
+ agent: selectedAgent,
143
+ location: selectedLocation,
144
+ targetDir,
145
+ });
146
+ }
147
+ catch (err) {
148
+ agentError(`Install failed: ${err.message}`, "InstallError", { error_domain: AGENT_ERROR_DOMAINS.INSTALL });
149
+ }
150
+ // Optional skills install
151
+ const installedSkills = [];
152
+ if (options.skills) {
153
+ const SKILLS_REPO = "https://github.com/mthds-ai/skills";
154
+ const globalFlag = selectedLocation === Loc.Global ? " -g" : "";
155
+ try {
156
+ await execAsync(`npx --yes skills add ${SKILLS_REPO} --skill '*' --agent ${selectedAgent}${globalFlag} -y`, { cwd: process.cwd() });
157
+ installedSkills.push("*");
158
+ }
159
+ catch {
160
+ // Skills install failures are non-fatal
161
+ }
162
+ }
163
+ await shutdown();
164
+ const shimDir = join(homedir(), ".mthds", "bin");
165
+ const shimsGenerated = existsSync(shimDir)
166
+ ? resolved.methods.map((m) => m.slug)
167
+ : [];
168
+ agentSuccess({
169
+ success: true,
170
+ installed_methods: resolved.methods.map((m) => m.slug),
171
+ location: selectedLocation,
172
+ target_dir: targetDir,
173
+ installed_skills: installedSkills,
174
+ shim_dir: shimDir,
175
+ shims_generated: shimsGenerated,
176
+ });
177
+ }
178
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/agent/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Passthrough command group that forwards to pipelex-agent.
3
+ *
4
+ * mthds-agent pipelex <cmd> [args...] -> pipelex-agent <cmd> [args...]
5
+ */
6
+ import { Command } from "commander";
7
+ export declare function registerPipelexCommands(program: Command, logLevelArgs: () => string[]): void;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Passthrough command group that forwards to pipelex-agent.
3
+ *
4
+ * mthds-agent pipelex <cmd> [args...] -> pipelex-agent <cmd> [args...]
5
+ */
6
+ import { passthrough } from "../passthrough.js";
7
+ const PIPELEX_COMMANDS = [
8
+ "validate",
9
+ "inputs",
10
+ "concept",
11
+ "pipe",
12
+ "assemble",
13
+ "models",
14
+ "doctor",
15
+ ];
16
+ const PIPELEX_RUN_SUBCOMMANDS = ["pipe", "method"];
17
+ export function registerPipelexCommands(program, logLevelArgs) {
18
+ const pipelexGroup = program
19
+ .command("pipelex")
20
+ .description("Forward commands to pipelex-agent")
21
+ .passThroughOptions()
22
+ .allowUnknownOption();
23
+ for (const subcmd of PIPELEX_COMMANDS) {
24
+ pipelexGroup
25
+ .command(subcmd)
26
+ .description(`Forward to pipelex-agent ${subcmd}`)
27
+ .allowUnknownOption()
28
+ .allowExcessArguments(true)
29
+ .passThroughOptions()
30
+ .action((_options, cmd) => {
31
+ const remaining = cmd.args;
32
+ passthrough("pipelex-agent", [...logLevelArgs(), subcmd, ...remaining]);
33
+ });
34
+ }
35
+ // Register `run` as a sub-group with `pipe` and `method` subcommands:
36
+ // mthds-agent pipelex run pipe <args> -> pipelex-agent run pipe <args>
37
+ // mthds-agent pipelex run method <args> -> pipelex-agent run method <args>
38
+ const runGroup = pipelexGroup
39
+ .command("run")
40
+ .description("Forward to pipelex-agent run (pipe or method)")
41
+ .passThroughOptions()
42
+ .allowUnknownOption();
43
+ for (const runSub of PIPELEX_RUN_SUBCOMMANDS) {
44
+ runGroup
45
+ .command(runSub)
46
+ .description(`Forward to pipelex-agent run ${runSub}`)
47
+ .allowUnknownOption()
48
+ .allowExcessArguments(true)
49
+ .passThroughOptions()
50
+ .action((_options, cmd) => {
51
+ const remaining = cmd.args;
52
+ passthrough("pipelex-agent", [...logLevelArgs(), "run", runSub, ...remaining]);
53
+ });
54
+ }
55
+ }
56
+ //# sourceMappingURL=pipelex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipelex.js","sourceRoot":"","sources":["../../../src/agent/commands/pipelex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,gBAAgB,GAAG;IACvB,UAAU;IACV,QAAQ;IACR,SAAS;IACT,MAAM;IACN,UAAU;IACV,QAAQ;IACR,QAAQ;CACA,CAAC;AAEX,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAU,CAAC;AAE5D,MAAM,UAAU,uBAAuB,CAAC,OAAgB,EAAE,YAA4B;IACpF,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mCAAmC,CAAC;SAChD,kBAAkB,EAAE;SACpB,kBAAkB,EAAE,CAAC;IAExB,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,YAAY;aACT,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CAAC,4BAA4B,MAAM,EAAE,CAAC;aACjD,kBAAkB,EAAE;aACpB,oBAAoB,CAAC,IAAI,CAAC;aAC1B,kBAAkB,EAAE;aACpB,MAAM,CAAC,CAAC,QAAiC,EAAE,GAAY,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;YAC3B,WAAW,CAAC,eAAe,EAAE,CAAC,GAAG,YAAY,EAAE,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACP,CAAC;IAED,sEAAsE;IACtE,yEAAyE;IACzE,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,YAAY;SAC1B,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,+CAA+C,CAAC;SAC5D,kBAAkB,EAAE;SACpB,kBAAkB,EAAE,CAAC;IAExB,KAAK,MAAM,MAAM,IAAI,uBAAuB,EAAE,CAAC;QAC7C,QAAQ;aACL,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CAAC,gCAAgC,MAAM,EAAE,CAAC;aACrD,kBAAkB,EAAE;aACpB,oBAAoB,CAAC,IAAI,CAAC;aAC1B,kBAAkB,EAAE;aACpB,MAAM,CAAC,CAAC,QAAiC,EAAE,GAAY,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;YAC3B,WAAW,CAAC,eAAe,EAAE,CAAC,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;IACP,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Passthrough command group that forwards to plxt.
3
+ *
4
+ * mthds-agent plxt <cmd> [args...] -> plxt <cmd> [args...]
5
+ */
6
+ import { Command } from "commander";
7
+ export declare function registerPlxtCommands(program: Command): void;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Passthrough command group that forwards to plxt.
3
+ *
4
+ * mthds-agent plxt <cmd> [args...] -> plxt <cmd> [args...]
5
+ */
6
+ import { passthrough } from "../passthrough.js";
7
+ const PLXT_COMMANDS = ["fmt", "lint"];
8
+ export function registerPlxtCommands(program) {
9
+ const plxtGroup = program
10
+ .command("plxt")
11
+ .description("Forward commands to plxt")
12
+ .passThroughOptions()
13
+ .allowUnknownOption();
14
+ for (const subcmd of PLXT_COMMANDS) {
15
+ plxtGroup
16
+ .command(subcmd)
17
+ .description(`Forward to plxt ${subcmd}`)
18
+ .allowUnknownOption()
19
+ .allowExcessArguments(true)
20
+ .passThroughOptions()
21
+ .action((_options, cmd) => {
22
+ const remaining = cmd.args;
23
+ passthrough("plxt", [subcmd, ...remaining]);
24
+ });
25
+ }
26
+ }
27
+ //# sourceMappingURL=plxt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plxt.js","sourceRoot":"","sources":["../../../src/agent/commands/plxt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAC;AAE/C,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0BAA0B,CAAC;SACvC,kBAAkB,EAAE;SACpB,kBAAkB,EAAE,CAAC;IAExB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,SAAS;aACN,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CAAC,mBAAmB,MAAM,EAAE,CAAC;aACxC,kBAAkB,EAAE;aACpB,oBAAoB,CAAC,IAAI,CAAC;aAC1B,kBAAkB,EAAE;aACpB,MAAM,CAAC,CAAC,QAAiC,EAAE,GAAY,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;YAC3B,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Agent validate command — validates a .mthds bundle and outputs JSON.
3
+ */
4
+ import type { RunnerType } from "../../runners/types.js";
5
+ export declare function agentValidateMethod(name: string, options: {
6
+ pipe?: string;
7
+ runner?: RunnerType;
8
+ libraryDir?: string[];
9
+ }): Promise<void>;
10
+ export declare function agentValidatePipe(target: string, options: {
11
+ pipe?: string;
12
+ bundle?: string;
13
+ runner?: RunnerType;
14
+ libraryDir?: string[];
15
+ }): Promise<void>;
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Agent validate command — validates a .mthds bundle and outputs JSON.
3
+ */
4
+ import { readFileSync } from "node:fs";
5
+ import { agentSuccess, agentError, AGENT_ERROR_DOMAINS } from "../output.js";
6
+ import { createRunner } from "../../runners/registry.js";
7
+ import { isPipelexRunner } from "../../cli/commands/utils.js";
8
+ /** Extract raw args after `validate`, filtering out --runner, -L/--library-dir, and --log-level */
9
+ function extractPassthroughArgs() {
10
+ const argv = process.argv;
11
+ const idx = argv.indexOf("validate");
12
+ if (idx === -1)
13
+ return [];
14
+ const raw = argv.slice(idx + 1);
15
+ const result = [];
16
+ let i = 0;
17
+ while (i < raw.length) {
18
+ if (raw[i] === "--runner" ||
19
+ raw[i] === "-L" ||
20
+ raw[i] === "--library-dir" ||
21
+ raw[i] === "--log-level") {
22
+ i += 2;
23
+ }
24
+ else if (raw[i].startsWith("--runner=") ||
25
+ raw[i].startsWith("--library-dir=") ||
26
+ raw[i].startsWith("--log-level=")) {
27
+ i += 1;
28
+ }
29
+ else {
30
+ result.push(raw[i]);
31
+ i++;
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ export async function agentValidateMethod(name, options) {
37
+ const libraryDirs = options.libraryDir?.length
38
+ ? options.libraryDir
39
+ : undefined;
40
+ let runner;
41
+ try {
42
+ runner = createRunner(options.runner, libraryDirs);
43
+ }
44
+ catch (err) {
45
+ agentError(err.message, "RunnerError", {
46
+ error_domain: AGENT_ERROR_DOMAINS.RUNNER,
47
+ });
48
+ }
49
+ if (isPipelexRunner(runner)) {
50
+ try {
51
+ await runner.validatePassthrough(extractPassthroughArgs());
52
+ }
53
+ catch (err) {
54
+ agentError(err.message, "ValidationError", {
55
+ error_domain: AGENT_ERROR_DOMAINS.VALIDATION,
56
+ });
57
+ }
58
+ return;
59
+ }
60
+ agentError("Method target is not yet supported for the API runner. Use 'mthds-agent validate pipe <target>' instead, or specify a different runner with --runner <name>.", "ArgumentError", { error_domain: AGENT_ERROR_DOMAINS.ARGUMENT });
61
+ }
62
+ export async function agentValidatePipe(target, options) {
63
+ const libraryDirs = options.libraryDir?.length
64
+ ? options.libraryDir
65
+ : undefined;
66
+ let runner;
67
+ try {
68
+ runner = createRunner(options.runner, libraryDirs);
69
+ }
70
+ catch (err) {
71
+ agentError(err.message, "RunnerError", {
72
+ error_domain: AGENT_ERROR_DOMAINS.RUNNER,
73
+ });
74
+ }
75
+ if (isPipelexRunner(runner)) {
76
+ try {
77
+ await runner.validatePassthrough(extractPassthroughArgs());
78
+ }
79
+ catch (err) {
80
+ agentError(err.message, "ValidationError", {
81
+ error_domain: AGENT_ERROR_DOMAINS.VALIDATION,
82
+ });
83
+ }
84
+ return;
85
+ }
86
+ const bundlePath = options.bundle ?? (target.endsWith(".mthds") ? target : undefined);
87
+ if (!bundlePath) {
88
+ agentError("Provide a .mthds bundle file to validate (positional or --bundle).", "ArgumentError", { error_domain: AGENT_ERROR_DOMAINS.ARGUMENT });
89
+ }
90
+ let mthdsContent;
91
+ try {
92
+ mthdsContent = readFileSync(bundlePath, "utf-8");
93
+ }
94
+ catch (err) {
95
+ agentError(`Cannot read bundle: ${err.message}`, "IOError", { error_domain: AGENT_ERROR_DOMAINS.IO });
96
+ }
97
+ try {
98
+ const result = await runner.validate({ mthds_content: mthdsContent });
99
+ if (result.success) {
100
+ agentSuccess({
101
+ success: true,
102
+ message: result.message,
103
+ pipelex_bundle_blueprint: result.pipelex_bundle_blueprint,
104
+ });
105
+ }
106
+ else {
107
+ agentError(result.message, "ValidationError", {
108
+ error_domain: AGENT_ERROR_DOMAINS.VALIDATION,
109
+ });
110
+ }
111
+ }
112
+ catch (err) {
113
+ agentError(err.message, "ValidationError", {
114
+ error_domain: AGENT_ERROR_DOMAINS.VALIDATION,
115
+ });
116
+ }
117
+ }
118
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/agent/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Structured output helpers for the mthds-agent CLI.
3
+ *
4
+ * Mirrors the contract from pipelex/cli/agent_cli/commands/agent_output.py:
5
+ * - Success: JSON to stdout
6
+ * - Error: JSON to stderr + process.exit(1)
7
+ */
8
+ export declare const AGENT_ERROR_DOMAINS: {
9
+ readonly ARGUMENT: "argument";
10
+ readonly CONFIG: "config";
11
+ readonly RUNNER: "runner";
12
+ readonly PIPELINE: "pipeline";
13
+ readonly VALIDATION: "validation";
14
+ readonly INSTALL: "install";
15
+ readonly IO: "io";
16
+ readonly BINARY: "binary";
17
+ };
18
+ export type AgentErrorDomain = (typeof AGENT_ERROR_DOMAINS)[keyof typeof AGENT_ERROR_DOMAINS];
19
+ export declare const AGENT_ERROR_HINTS: Record<string, string>;
20
+ export declare function agentSuccess(result: Record<string, unknown>): void;
21
+ export declare function agentError(message: string, errorType: string, extras?: {
22
+ hint?: string;
23
+ error_domain?: AgentErrorDomain;
24
+ retryable?: boolean;
25
+ }): never;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Structured output helpers for the mthds-agent CLI.
3
+ *
4
+ * Mirrors the contract from pipelex/cli/agent_cli/commands/agent_output.py:
5
+ * - Success: JSON to stdout
6
+ * - Error: JSON to stderr + process.exit(1)
7
+ */
8
+ // ── Error domains ────────────────────────────────────────────────────
9
+ export const AGENT_ERROR_DOMAINS = {
10
+ ARGUMENT: "argument",
11
+ CONFIG: "config",
12
+ RUNNER: "runner",
13
+ PIPELINE: "pipeline",
14
+ VALIDATION: "validation",
15
+ INSTALL: "install",
16
+ IO: "io",
17
+ BINARY: "binary",
18
+ };
19
+ // ── Error hints ──────────────────────────────────────────────────────
20
+ export const AGENT_ERROR_HINTS = {
21
+ BinaryNotFoundError: "Make sure the required CLI binary is installed and in your PATH.",
22
+ ArgumentError: "Check the command arguments and try again.",
23
+ ConfigError: "Run `mthds-agent config list` to see current configuration.",
24
+ RunnerError: "Check that the runner is properly configured.",
25
+ ValidationError: "Check the .mthds bundle for syntax or schema errors.",
26
+ InstallError: "Check the address and try again.",
27
+ };
28
+ // ── Success output ───────────────────────────────────────────────────
29
+ export function agentSuccess(result) {
30
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
31
+ }
32
+ // ── Error output ─────────────────────────────────────────────────────
33
+ export function agentError(message, errorType, extras) {
34
+ const payload = {
35
+ success: false,
36
+ error: message,
37
+ error_type: errorType,
38
+ hint: extras?.hint ?? AGENT_ERROR_HINTS[errorType] ?? undefined,
39
+ error_domain: extras?.error_domain ?? undefined,
40
+ retryable: extras?.retryable ?? false,
41
+ };
42
+ // Remove undefined values for cleaner output
43
+ for (const key of Object.keys(payload)) {
44
+ if (payload[key] === undefined) {
45
+ delete payload[key];
46
+ }
47
+ }
48
+ process.stderr.write(JSON.stringify(payload, null, 2) + "\n");
49
+ process.exit(1);
50
+ }
51
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/agent/output.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wEAAwE;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,QAAQ;CACR,CAAC;AAKX,wEAAwE;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,mBAAmB,EACjB,kEAAkE;IACpE,aAAa,EAAE,4CAA4C;IAC3D,WAAW,EAAE,6DAA6D;IAC1E,WAAW,EAAE,+CAA+C;IAC5D,eAAe,EAAE,sDAAsD;IACvE,YAAY,EAAE,kCAAkC;CACjD,CAAC;AAEF,wEAAwE;AAExE,MAAM,UAAU,YAAY,CAAC,MAA+B;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,SAAiB,EACjB,MAIC;IAED,MAAM,OAAO,GAA4B;QACvC,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;QACd,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,iBAAiB,CAAC,SAAS,CAAC,IAAI,SAAS;QAC/D,YAAY,EAAE,MAAM,EAAE,YAAY,IAAI,SAAS;QAC/C,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,KAAK;KACtC,CAAC;IAEF,6CAA6C;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generic passthrough helper for spawning an external CLI and inheriting stdio.
3
+ * Used for pipelex-agent and plxt commands that already output JSON.
4
+ */
5
+ export declare function passthrough(bin: string, args: string[]): void;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Generic passthrough helper for spawning an external CLI and inheriting stdio.
3
+ * Used for pipelex-agent and plxt commands that already output JSON.
4
+ */
5
+ import { spawnSync } from "node:child_process";
6
+ import { agentError, AGENT_ERROR_DOMAINS } from "./output.js";
7
+ export function passthrough(bin, args) {
8
+ const result = spawnSync(bin, args, {
9
+ stdio: "inherit",
10
+ });
11
+ if (result.error) {
12
+ if (result.error.code === "ENOENT") {
13
+ agentError(`${bin} not found. Make sure it is installed and in your PATH.`, "BinaryNotFoundError", { error_domain: AGENT_ERROR_DOMAINS.BINARY });
14
+ }
15
+ agentError(`Failed to spawn ${bin}: ${result.error.message}`, "BinarySpawnError", { error_domain: AGENT_ERROR_DOMAINS.BINARY });
16
+ }
17
+ process.exit(result.status ?? 1);
18
+ }
19
+ //# sourceMappingURL=passthrough.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthrough.js","sourceRoot":"","sources":["../../src/agent/passthrough.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,IAAc;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;QAClC,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,IAAK,MAAM,CAAC,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9D,UAAU,CACR,GAAG,GAAG,yDAAyD,EAC/D,qBAAqB,EACrB,EAAE,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAC7C,CAAC;QACJ,CAAC;QACD,UAAU,CACR,mBAAmB,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EACjD,kBAAkB,EAClB,EAAE,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAC7C,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mthds-agent — machine-oriented CLI for AI agents.
4
+ *
5
+ * Outputs structured JSON to stdout (success) and stderr (errors).
6
+ * No clack, no chalk, no ora — just JSON.
7
+ */
8
+ export {};