mthds 0.4.1 → 0.6.0

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 (47) hide show
  1. package/README.md +5 -6
  2. package/dist/agent/binaries.d.ts +5 -0
  3. package/dist/agent/binaries.js +26 -27
  4. package/dist/agent/binaries.js.map +1 -1
  5. package/dist/agent/commands/codex-config.d.ts +51 -0
  6. package/dist/agent/commands/codex-config.js +301 -0
  7. package/dist/agent/commands/codex-config.js.map +1 -0
  8. package/dist/agent/commands/codex-hook.d.ts +70 -0
  9. package/dist/agent/commands/codex-hook.js +205 -0
  10. package/dist/agent/commands/codex-hook.js.map +1 -0
  11. package/dist/agent/commands/codex.d.ts +17 -10
  12. package/dist/agent/commands/codex.js +89 -27
  13. package/dist/agent/commands/codex.js.map +1 -1
  14. package/dist/agent/commands/doctor.js +42 -2
  15. package/dist/agent/commands/doctor.js.map +1 -1
  16. package/dist/agent/commands/install.d.ts +0 -2
  17. package/dist/agent/commands/install.js +10 -81
  18. package/dist/agent/commands/install.js.map +1 -1
  19. package/dist/agent/plugin-version.d.ts +2 -2
  20. package/dist/agent/plugin-version.js +2 -2
  21. package/dist/agent/plugin-version.js.map +1 -1
  22. package/dist/agent-cli.js +20 -4
  23. package/dist/agent-cli.js.map +1 -1
  24. package/dist/cli/commands/install.js +34 -119
  25. package/dist/cli/commands/install.js.map +1 -1
  26. package/dist/client/client.js +72 -9
  27. package/dist/client/client.js.map +1 -1
  28. package/dist/client/exceptions.d.ts +41 -1
  29. package/dist/client/exceptions.js +50 -2
  30. package/dist/client/exceptions.js.map +1 -1
  31. package/dist/client/index.d.ts +1 -1
  32. package/dist/client/index.js +1 -1
  33. package/dist/client/index.js.map +1 -1
  34. package/dist/installer/methods/install-flow.d.ts +25 -0
  35. package/dist/installer/methods/install-flow.js +51 -0
  36. package/dist/installer/methods/install-flow.js.map +1 -0
  37. package/dist/installer/methods/types.d.ts +4 -0
  38. package/dist/installer/methods/types.js.map +1 -0
  39. package/dist/installer/methods/writer.d.ts +19 -0
  40. package/dist/installer/{agents/registry.js → methods/writer.js} +11 -26
  41. package/dist/installer/methods/writer.js.map +1 -0
  42. package/package.json +1 -1
  43. package/dist/installer/agents/registry.d.ts +0 -12
  44. package/dist/installer/agents/registry.js.map +0 -1
  45. package/dist/installer/agents/types.d.ts +0 -16
  46. package/dist/installer/agents/types.js.map +0 -1
  47. /package/dist/installer/{agents → methods}/types.js +0 -0
@@ -1,4 +1,4 @@
1
- import { ClientAuthenticationError, PipelineRequestError, } from "./exceptions.js";
1
+ import { ApiResponseError, ApiUnreachableError, ClientAuthenticationError, PipelineRequestError, } from "./exceptions.js";
2
2
  export class MthdsApiClient {
3
3
  apiToken;
4
4
  apiBaseUrl;
@@ -18,15 +18,26 @@ export class MthdsApiClient {
18
18
  if (this.apiToken) {
19
19
  headers["Authorization"] = `Bearer ${this.apiToken}`;
20
20
  }
21
- const response = await fetch(url, {
22
- method: "POST",
23
- headers,
24
- body: JSON.stringify(pipelineRequest),
25
- signal: AbortSignal.timeout(1_200_000),
26
- });
21
+ let response;
22
+ try {
23
+ response = await fetch(url, {
24
+ method: "POST",
25
+ headers,
26
+ body: JSON.stringify(pipelineRequest),
27
+ signal: AbortSignal.timeout(1_200_000),
28
+ });
29
+ }
30
+ catch (err) {
31
+ // undici (Node fetch) wraps DNS/connect/TLS failures as
32
+ // `TypeError("fetch failed")` with the system error attached as `cause`.
33
+ // `AbortSignal.timeout` rejects with a DOMException named "TimeoutError".
34
+ const code = extractNetworkErrorCode(err);
35
+ throw new ApiUnreachableError(`Could not reach Pipelex API at ${this.apiBaseUrl} (${code ?? "network error"})`, this.apiBaseUrl, code, { cause: err });
36
+ }
27
37
  if (!response.ok) {
28
- const text = await response.text().catch(() => "");
29
- throw new PipelineRequestError(`API POST /${endpoint} failed (${response.status}): ${text || response.statusText}`);
38
+ const body = await response.text().catch(() => "");
39
+ const { errorType, serverMessage } = parseErrorBody(body);
40
+ throw new ApiResponseError(`API POST /${endpoint} failed (${response.status}): ${serverMessage ?? (body || response.statusText)}`, this.apiBaseUrl, response.status, response.statusText, body, errorType, serverMessage);
30
41
  }
31
42
  return response.json();
32
43
  }
@@ -61,4 +72,56 @@ export class MthdsApiClient {
61
72
  return data;
62
73
  }
63
74
  }
75
+ function extractNetworkErrorCode(err) {
76
+ if (err instanceof DOMException && err.name === "TimeoutError") {
77
+ return "ABORT_TIMEOUT";
78
+ }
79
+ if (err instanceof Error) {
80
+ const cause = err.cause;
81
+ if (cause && typeof cause === "object" && "code" in cause) {
82
+ const code = cause.code;
83
+ if (typeof code === "string")
84
+ return code;
85
+ }
86
+ }
87
+ return undefined;
88
+ }
89
+ /**
90
+ * Pipelex API serializes errors as `{"detail": {"error_type": ..., "message": ...}}`
91
+ * (HTTPException with dict detail) or `{"detail": "..."}` (auth 401s).
92
+ * Both shapes are extracted here. Falls through silently on non-JSON bodies.
93
+ */
94
+ function parseErrorBody(body) {
95
+ if (!body)
96
+ return { errorType: undefined, serverMessage: undefined };
97
+ let parsed;
98
+ try {
99
+ parsed = JSON.parse(body);
100
+ }
101
+ catch {
102
+ return { errorType: undefined, serverMessage: undefined };
103
+ }
104
+ if (!parsed || typeof parsed !== "object") {
105
+ return { errorType: undefined, serverMessage: undefined };
106
+ }
107
+ const root = parsed;
108
+ const detail = root.detail;
109
+ let errorType;
110
+ let serverMessage;
111
+ if (detail && typeof detail === "object") {
112
+ const d = detail;
113
+ if (typeof d.error_type === "string")
114
+ errorType = d.error_type;
115
+ if (typeof d.message === "string")
116
+ serverMessage = d.message;
117
+ }
118
+ else if (typeof detail === "string") {
119
+ serverMessage = detail;
120
+ }
121
+ if (errorType === undefined && typeof root.error_type === "string")
122
+ errorType = root.error_type;
123
+ if (serverMessage === undefined && typeof root.message === "string")
124
+ serverMessage = root.message;
125
+ return { errorType, serverMessage };
126
+ }
64
127
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,45 @@ export declare class ClientAuthenticationError extends Error {
2
2
  constructor(message: string);
3
3
  }
4
4
  export declare class PipelineRequestError extends Error {
5
- constructor(message: string);
5
+ constructor(message: string, options?: {
6
+ cause?: unknown;
7
+ });
8
+ }
9
+ /**
10
+ * Thrown when the Pipelex API host cannot be reached at all (DNS failure,
11
+ * connection refused, TLS handshake failure, request timeout). The HTTP
12
+ * exchange never produced a response — distinguish from `ApiResponseError`,
13
+ * which represents a non-2xx response that did come back.
14
+ *
15
+ * `code` is the underlying network error code when available
16
+ * (`ECONNREFUSED`, `ENOTFOUND`, `ETIMEDOUT`, `EAI_AGAIN`, `ABORT_TIMEOUT`).
17
+ */
18
+ export declare class ApiUnreachableError extends PipelineRequestError {
19
+ readonly apiUrl: string;
20
+ readonly code: string | undefined;
21
+ constructor(message: string, apiUrl: string, code: string | undefined, options?: {
22
+ cause?: unknown;
23
+ });
24
+ }
25
+ /**
26
+ * Thrown when the API returned a non-2xx HTTP response. Carries structured
27
+ * fields so callers can render meaningful UI without parsing the message:
28
+ * - `status` / `statusText` — HTTP status from the response
29
+ * - `responseBody` — raw response body (always retained)
30
+ * - `errorType` / `serverMessage` — parsed from the JSON body when present
31
+ *
32
+ * Pipelex API serializes errors as `{"detail": {"error_type", "message"}}`
33
+ * (HTTPException with dict detail) or `{"detail": "..."}` (auth 401s).
34
+ * Both shapes are extracted here.
35
+ */
36
+ export declare class ApiResponseError extends PipelineRequestError {
37
+ readonly apiUrl: string;
38
+ readonly status: number;
39
+ readonly statusText: string;
40
+ readonly responseBody: string;
41
+ readonly errorType: string | undefined;
42
+ readonly serverMessage: string | undefined;
43
+ constructor(message: string, apiUrl: string, status: number, statusText: string, responseBody: string, errorType: string | undefined, serverMessage: string | undefined, options?: {
44
+ cause?: unknown;
45
+ });
6
46
  }
@@ -5,9 +5,57 @@ export class ClientAuthenticationError extends Error {
5
5
  }
6
6
  }
7
7
  export class PipelineRequestError extends Error {
8
- constructor(message) {
9
- super(message);
8
+ constructor(message, options) {
9
+ super(message, options);
10
10
  this.name = "PipelineRequestError";
11
11
  }
12
12
  }
13
+ /**
14
+ * Thrown when the Pipelex API host cannot be reached at all (DNS failure,
15
+ * connection refused, TLS handshake failure, request timeout). The HTTP
16
+ * exchange never produced a response — distinguish from `ApiResponseError`,
17
+ * which represents a non-2xx response that did come back.
18
+ *
19
+ * `code` is the underlying network error code when available
20
+ * (`ECONNREFUSED`, `ENOTFOUND`, `ETIMEDOUT`, `EAI_AGAIN`, `ABORT_TIMEOUT`).
21
+ */
22
+ export class ApiUnreachableError extends PipelineRequestError {
23
+ apiUrl;
24
+ code;
25
+ constructor(message, apiUrl, code, options) {
26
+ super(message, options);
27
+ this.name = "ApiUnreachableError";
28
+ this.apiUrl = apiUrl;
29
+ this.code = code;
30
+ }
31
+ }
32
+ /**
33
+ * Thrown when the API returned a non-2xx HTTP response. Carries structured
34
+ * fields so callers can render meaningful UI without parsing the message:
35
+ * - `status` / `statusText` — HTTP status from the response
36
+ * - `responseBody` — raw response body (always retained)
37
+ * - `errorType` / `serverMessage` — parsed from the JSON body when present
38
+ *
39
+ * Pipelex API serializes errors as `{"detail": {"error_type", "message"}}`
40
+ * (HTTPException with dict detail) or `{"detail": "..."}` (auth 401s).
41
+ * Both shapes are extracted here.
42
+ */
43
+ export class ApiResponseError extends PipelineRequestError {
44
+ apiUrl;
45
+ status;
46
+ statusText;
47
+ responseBody;
48
+ errorType;
49
+ serverMessage;
50
+ constructor(message, apiUrl, status, statusText, responseBody, errorType, serverMessage, options) {
51
+ super(message, options);
52
+ this.name = "ApiResponseError";
53
+ this.apiUrl = apiUrl;
54
+ this.status = status;
55
+ this.statusText = statusText;
56
+ this.responseBody = responseBody;
57
+ this.errorType = errorType;
58
+ this.serverMessage = serverMessage;
59
+ }
60
+ }
13
61
  //# sourceMappingURL=exceptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/client/exceptions.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/client/exceptions.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAmC,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,mBAAoB,SAAQ,oBAAoB;IAC3C,MAAM,CAAS;IACf,IAAI,CAAqB;IAEzC,YACE,OAAe,EACf,MAAc,EACd,IAAwB,EACxB,OAA6B;QAE7B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAiB,SAAQ,oBAAoB;IACxC,MAAM,CAAS;IACf,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,YAAY,CAAS;IACrB,SAAS,CAAqB;IAC9B,aAAa,CAAqB;IAElD,YACE,OAAe,EACf,MAAc,EACd,MAAc,EACd,UAAkB,EAClB,YAAoB,EACpB,SAA6B,EAC7B,aAAiC,EACjC,OAA6B;QAE7B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  export { MthdsApiClient } from "./client.js";
2
2
  export type { RunnerProtocol } from "./protocol.js";
3
- export { ClientAuthenticationError, PipelineRequestError, } from "./exceptions.js";
3
+ export { ApiResponseError, ApiUnreachableError, ClientAuthenticationError, PipelineRequestError, } from "./exceptions.js";
4
4
  export type { PipelineState, PipelineRequest, PipelineExecuteResponse, PipelineStartResponse, ExecutePipelineOptions, } from "./pipeline.js";
5
5
  export type { DictStuff, DictWorkingMemory, DictPipeOutput, VariableMultiplicity, StuffContentOrData, PipelineInputs, } from "./models/index.js";
@@ -1,3 +1,3 @@
1
1
  export { MthdsApiClient } from "./client.js";
2
- export { ClientAuthenticationError, PipelineRequestError, } from "./exceptions.js";
2
+ export { ApiResponseError, ApiUnreachableError, ClientAuthenticationError, PipelineRequestError, } from "./exceptions.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { InstallLocation } from "./types.js";
2
+ import type { ResolvedRepo } from "../../package/manifest/types.js";
3
+ export interface InstallFlowInput {
4
+ readonly resolved: ResolvedRepo;
5
+ readonly location: InstallLocation;
6
+ readonly orgRepo?: string;
7
+ }
8
+ export interface InstallFlowResult {
9
+ readonly targetDir: string;
10
+ readonly installedMethods: string[];
11
+ readonly shimDir: string;
12
+ readonly shimsGenerated: string[];
13
+ }
14
+ /**
15
+ * Shared install flow used by both `mthds install` (interactive) and
16
+ * `mthds-agent install` (non-interactive JSON). Handles target-dir
17
+ * computation, telemetry, file writes, and shim generation.
18
+ *
19
+ * The on-disk layout is agent-agnostic — methods always go under
20
+ * `.mthds/methods/` (project-local) or `~/.mthds/methods/` (global).
21
+ *
22
+ * Resolution, runner setup, validation, and prompts/output formatting are
23
+ * the caller's responsibility.
24
+ */
25
+ export declare function runInstallFlow(input: InstallFlowInput): InstallFlowResult;
@@ -0,0 +1,51 @@
1
+ import { join } from "node:path";
2
+ import { homedir } from "node:os";
3
+ import { trackInstall } from "../telemetry/posthog.js";
4
+ import { writeMethodFiles } from "./writer.js";
5
+ import { InstallLocation } from "./types.js";
6
+ /**
7
+ * Shared install flow used by both `mthds install` (interactive) and
8
+ * `mthds-agent install` (non-interactive JSON). Handles target-dir
9
+ * computation, telemetry, file writes, and shim generation.
10
+ *
11
+ * The on-disk layout is agent-agnostic — methods always go under
12
+ * `.mthds/methods/` (project-local) or `~/.mthds/methods/` (global).
13
+ *
14
+ * Resolution, runner setup, validation, and prompts/output formatting are
15
+ * the caller's responsibility.
16
+ */
17
+ export function runInstallFlow(input) {
18
+ const { resolved, location, orgRepo } = input;
19
+ const localDir = join(process.cwd(), ".mthds", "methods");
20
+ const globalDir = join(homedir(), ".mthds", "methods");
21
+ const targetDir = location === InstallLocation.Global ? globalDir : localDir;
22
+ if (resolved.source === "github" && resolved.isPublic) {
23
+ for (const method of resolved.methods) {
24
+ const pkg = method.manifest.package;
25
+ trackInstall({
26
+ address: orgRepo ?? pkg.address.replace(/^github\.com\//, ""),
27
+ name: pkg.name,
28
+ main_pipe: pkg.main_pipe,
29
+ version: pkg.version,
30
+ description: pkg.description,
31
+ display_name: pkg.display_name,
32
+ authors: pkg.authors,
33
+ license: pkg.license,
34
+ mthds_version: pkg.mthds_version,
35
+ exports: method.manifest.exports,
36
+ manifest_raw: method.rawManifest,
37
+ });
38
+ }
39
+ }
40
+ writeMethodFiles(resolved, targetDir);
41
+ // writeMethodFiles always generates a shim per method (creating ~/.mthds/bin
42
+ // if needed), so installed methods and generated shims are the same set.
43
+ const installedNames = resolved.methods.map((method) => method.name);
44
+ return {
45
+ targetDir,
46
+ installedMethods: installedNames,
47
+ shimDir: join(homedir(), ".mthds", "bin"),
48
+ shimsGenerated: installedNames,
49
+ };
50
+ }
51
+ //# sourceMappingURL=install-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-flow.js","sourceRoot":"","sources":["../../../src/installer/methods/install-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAgB7C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,KAAuB;IACpD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,QAAQ,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE7E,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YACpC,YAAY,CAAC;gBACX,OAAO,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAC7D,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;gBAChC,YAAY,EAAE,MAAM,CAAC,WAAW;aACjC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEtC,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAErE,OAAO;QACL,SAAS;QACT,gBAAgB,EAAE,cAAc;QAChC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC;QACzC,cAAc,EAAE,cAAc;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare enum InstallLocation {
2
+ Local = "local",
3
+ Global = "global"
4
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/installer/methods/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B"}
@@ -0,0 +1,19 @@
1
+ import type { ResolvedRepo } from "../../package/manifest/types.js";
2
+ /**
3
+ * Generate an executable CLI shim for a method in ~/.mthds/bin/.
4
+ *
5
+ * The shim allows invoking a method directly by name, e.g.:
6
+ * extract-contract-terms --inputs '{"text": "..."}'
7
+ *
8
+ * On Windows, a .cmd shim is also generated.
9
+ */
10
+ export declare function generateShim(name: string, installDir: string): void;
11
+ /**
12
+ * Write all method files from a ResolvedRepo into targetDir/<method-name>/,
13
+ * generating a CLI shim for each. Refuses any path that escapes targetDir or
14
+ * the per-method install dir (path traversal protection).
15
+ *
16
+ * Agent-agnostic: the on-disk layout is identical regardless of which AI
17
+ * coding agent triggered the install.
18
+ */
19
+ export declare function writeMethodFiles(repo: ResolvedRepo, targetDirInput: string): void;
@@ -20,7 +20,6 @@ export function generateShim(name, installDir) {
20
20
  "",
21
21
  ].join("\n");
22
22
  writeFileSync(shimPath, shimContent, { mode: 0o755 });
23
- // On Windows, also generate a .cmd shim
24
23
  if (process.platform === "win32") {
25
24
  const cmdPath = join(binDir, `${name}.cmd`);
26
25
  const cmdEscapedDir = installDir.replace(/%/g, "%%").replace(/"/g, '""');
@@ -32,9 +31,16 @@ export function generateShim(name, installDir) {
32
31
  writeFileSync(cmdPath, cmdContent, "utf-8");
33
32
  }
34
33
  }
35
- function writeMethodFiles(options) {
36
- const { repo } = options;
37
- const targetDir = resolve(options.targetDir);
34
+ /**
35
+ * Write all method files from a ResolvedRepo into targetDir/<method-name>/,
36
+ * generating a CLI shim for each. Refuses any path that escapes targetDir or
37
+ * the per-method install dir (path traversal protection).
38
+ *
39
+ * Agent-agnostic: the on-disk layout is identical regardless of which AI
40
+ * coding agent triggered the install.
41
+ */
42
+ export function writeMethodFiles(repo, targetDirInput) {
43
+ const targetDir = resolve(targetDirInput);
38
44
  mkdirSync(targetDir, { recursive: true });
39
45
  for (const method of repo.methods) {
40
46
  const installDir = resolve(join(targetDir, method.name));
@@ -54,25 +60,4 @@ function writeMethodFiles(options) {
54
60
  generateShim(method.name, installDir);
55
61
  }
56
62
  }
57
- const defaultHandler = (id) => ({
58
- id,
59
- async installMethod(options) {
60
- writeMethodFiles(options);
61
- },
62
- });
63
- const handlers = {
64
- "claude-code": defaultHandler("claude-code"),
65
- cursor: defaultHandler("cursor"),
66
- codex: defaultHandler("codex"),
67
- };
68
- export function getAllAgents() {
69
- return Object.values(handlers);
70
- }
71
- export function getAgentHandler(agent) {
72
- const handler = handlers[agent];
73
- if (!handler) {
74
- throw new Error(`Unknown agent: ${agent}`);
75
- }
76
- return handler;
77
- }
78
- //# sourceMappingURL=registry.js.map
63
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../src/installer/methods/writer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mthds",
3
- "version": "0.4.1",
3
+ "version": "0.6.0",
4
4
  "description": "CLI and SDK for MTHDS — the open standard for executable AI methods. Install, execute, and manage methods.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,12 +0,0 @@
1
- import type { Agent, AgentHandler } from "./types.js";
2
- /**
3
- * Generate an executable CLI shim for a method in ~/.mthds/bin/.
4
- *
5
- * The shim allows invoking a method directly by name, e.g.:
6
- * extract-contract-terms --inputs '{"text": "..."}'
7
- *
8
- * On Windows, a .cmd shim is also generated.
9
- */
10
- export declare function generateShim(name: string, installDir: string): void;
11
- export declare function getAllAgents(): AgentHandler[];
12
- export declare function getAgentHandler(agent: Agent): AgentHandler;
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/installer/agents/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGnD;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,UAAkB;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG;QAClB,WAAW;QACX,wCAAwC,UAAU,GAAG;QACrD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtD,wCAAwC;IACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG;YACjB,WAAW;YACX,iCAAiC,aAAa,GAAG;YACjD,EAAE;SACH,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACf,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA6B;IACrD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,IAAI,6BAA6B,CAAC,CAAC;QAC9F,CAAC;QACD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE7E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,YAAY,8BAA8B,CAAC,CAAC;YAChG,CAAC;YACD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAgC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3D,EAAE;IACF,KAAK,CAAC,aAAa,CAAC,OAA6B;QAC/C,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAgC;IAC5C,aAAa,EAAE,cAAc,CAAC,aAAa,CAAC;IAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;IAChC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { ResolvedRepo } from "../../package/manifest/types.js";
2
- export type Agent = "claude-code" | "cursor" | "codex";
3
- export declare enum InstallLocation {
4
- Local = "local",
5
- Global = "global"
6
- }
7
- export interface InstallMethodOptions {
8
- readonly repo: ResolvedRepo;
9
- readonly agent: Agent;
10
- readonly location: InstallLocation;
11
- readonly targetDir: string;
12
- }
13
- export interface AgentHandler {
14
- readonly id: Agent;
15
- installMethod(options: InstallMethodOptions): Promise<void>;
16
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/installer/agents/types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B"}
File without changes