@paretools/python 0.12.0 → 0.13.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.
package/README.md CHANGED
@@ -61,7 +61,7 @@ Add to your MCP client config:
61
61
  }
62
62
  ```
63
63
 
64
- ## All Pare Servers (149 tools)
64
+ ## All Pare Servers (240 tools)
65
65
 
66
66
  | Package | Tools | Wraps |
67
67
  | -------------------------------------------------------------------- | --------------------------------------------------------------------------- | ---------------------------------- |
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { createServer } from "@paretools/shared";
2
+ import { createServer, readPackageVersion } from "@paretools/shared";
3
3
  import { registerAllTools } from "./tools/index.js";
4
4
  await createServer({
5
5
  name: "@paretools/python",
6
- version: "0.8.1",
6
+ version: readPackageVersion(import.meta.url),
7
7
  instructions: "Structured Python tool operations (pip install, mypy, ruff, pip-audit, pytest, uv, black). Returns typed JSON with structured type errors, lint violations, vulnerability data, test results, and formatting status.",
8
8
  registerTools: registerAllTools,
9
9
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,YAAY,CAAC;IACjB,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,OAAO;IAChB,YAAY,EACV,sNAAsN;IACxN,aAAa,EAAE,gBAAgB;CAChC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,YAAY,CAAC;IACjB,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5C,YAAY,EACV,sNAAsN;IACxN,aAAa,EAAE,gBAAgB;CAChC,CAAC,CAAC"}
@@ -15,7 +15,7 @@ export declare function formatUvInstall(data: UvInstall): string;
15
15
  export declare function formatUvRun(data: UvRun): string;
16
16
  /** Formats structured Black formatter results into a human-readable summary. */
17
17
  export declare function formatBlack(data: BlackResult): string;
18
- /** Compact pytest: counts + duration + failure test names only (no stack traces). */
18
+ /** Compact pytest: counts + failure test names only (no stack traces). */
19
19
  export interface PytestResultCompact {
20
20
  [key: string]: unknown;
21
21
  success: boolean;
@@ -24,29 +24,21 @@ export interface PytestResultCompact {
24
24
  errors: number;
25
25
  skipped: number;
26
26
  warnings: number;
27
- total: number;
28
- duration: number;
29
27
  failedTests: string[];
30
28
  }
31
29
  export declare function compactPytestMap(data: PytestResult): PytestResultCompact;
32
30
  export declare function formatPytestCompact(data: PytestResultCompact): string;
33
- /** Compact mypy: success + diagnostic counts per severity. Drop individual diagnostics. */
31
+ /** Compact mypy: success only. Drop individual diagnostics. */
34
32
  export interface MypyResultCompact {
35
33
  [key: string]: unknown;
36
34
  success: boolean;
37
- total: number;
38
- errors: number;
39
- warnings: number;
40
- notes: number;
41
35
  }
42
36
  export declare function compactMypyMap(data: MypyResult): MypyResultCompact;
43
37
  export declare function formatMypyCompact(data: MypyResultCompact): string;
44
- /** Compact ruff: success + diagnostic count. Drop individual entries. */
38
+ /** Compact ruff: success + fixedCount. Drop individual entries. */
45
39
  export interface RuffResultCompact {
46
40
  [key: string]: unknown;
47
41
  success: boolean;
48
- total: number;
49
- fixable: number;
50
42
  fixedCount?: number;
51
43
  }
52
44
  export declare function compactRuffMap(data: RuffResult): RuffResultCompact;
@@ -57,35 +49,30 @@ export interface BlackResultCompact {
57
49
  success: boolean;
58
50
  filesChanged: number;
59
51
  filesUnchanged: number;
60
- filesChecked: number;
61
52
  errorType?: "check_failed" | "internal_error";
62
53
  }
63
54
  export declare function compactBlackMap(data: BlackResult): BlackResultCompact;
64
55
  export declare function formatBlackCompact(data: BlackResultCompact): string;
65
- /** Compact pip-install: success + installed count + dryRun. Drop individual package details. */
56
+ /** Compact pip-install: success + dryRun. Drop individual package details. */
66
57
  export interface PipInstallCompact {
67
58
  [key: string]: unknown;
68
59
  success: boolean;
69
- total: number;
70
60
  alreadySatisfied: boolean;
71
61
  dryRun?: boolean;
72
62
  }
73
63
  export declare function compactPipInstallMap(data: PipInstall): PipInstallCompact;
74
64
  export declare function formatPipInstallCompact(data: PipInstallCompact): string;
75
- /** Compact pip-audit: success + vulnerability count. Drop individual CVE details. */
65
+ /** Compact pip-audit: success only. Drop individual CVE details. */
76
66
  export interface PipAuditResultCompact {
77
67
  [key: string]: unknown;
78
68
  success: boolean;
79
- total: number;
80
69
  }
81
70
  export declare function compactPipAuditMap(data: PipAuditResult): PipAuditResultCompact;
82
71
  export declare function formatPipAuditCompact(data: PipAuditResultCompact): string;
83
- /** Compact uv-install: success + installed count + duration + error info. Drop individual packages. */
72
+ /** Compact uv-install: success + error info. Drop individual packages. */
84
73
  export interface UvInstallCompact {
85
74
  [key: string]: unknown;
86
75
  success: boolean;
87
- total: number;
88
- duration: number;
89
76
  alreadySatisfied?: boolean;
90
77
  error?: string;
91
78
  resolutionConflicts?: {
@@ -95,23 +82,21 @@ export interface UvInstallCompact {
95
82
  }
96
83
  export declare function compactUvInstallMap(data: UvInstall): UvInstallCompact;
97
84
  export declare function formatUvInstallCompact(data: UvInstallCompact): string;
98
- /** Compact uv-run: exitCode + duration. Drop stdout/stderr. */
85
+ /** Compact uv-run: exitCode. Drop stdout/stderr. */
99
86
  export interface UvRunCompact {
100
87
  [key: string]: unknown;
101
88
  exitCode: number;
102
89
  success: boolean;
103
- duration: number;
104
90
  truncated?: boolean;
105
91
  }
106
92
  export declare function compactUvRunMap(data: UvRun): UvRunCompact;
107
93
  export declare function formatUvRunCompact(data: UvRunCompact): string;
108
94
  /** Formats structured pip list results into a human-readable package listing. */
109
95
  export declare function formatPipList(data: PipList): string;
110
- /** Compact pip-list: total count only. Drop individual package details. */
96
+ /** Compact pip-list: success + error only. Drop individual package details. */
111
97
  export interface PipListCompact {
112
98
  [key: string]: unknown;
113
99
  success: boolean;
114
- total: number;
115
100
  error?: string;
116
101
  }
117
102
  export declare function compactPipListMap(data: PipList): PipListCompact;
@@ -216,14 +201,14 @@ export interface PyenvResultCompact {
216
201
  }
217
202
  export declare function compactPyenvMap(data: PyenvResult): PyenvResultCompact;
218
203
  export declare function formatPyenvCompact(data: PyenvResultCompact): string;
219
- /** Formats structured poetry results into a human-readable summary. */
220
- export declare function formatPoetry(data: PoetryResult): string;
221
- /** Compact poetry: success + action + total count. Drop individual package/artifact details. */
204
+ /** Formats structured poetry results into a human-readable summary.
205
+ * action is passed separately since it is not included in the output schema. */
206
+ export declare function formatPoetry(data: PoetryResult, action: string): string;
207
+ /** Compact poetry: success only. Drop individual package/artifact details.
208
+ * action is not in the Zod schema so it must not appear in compact output. */
222
209
  export interface PoetryResultCompact {
223
210
  [key: string]: unknown;
224
211
  success: boolean;
225
- action: string;
226
- total: number;
227
212
  }
228
213
  export declare function compactPoetryMap(data: PoetryResult): PoetryResultCompact;
229
214
  export declare function formatPoetryCompact(data: PoetryResultCompact): string;
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  /** Formats structured pip install results into a human-readable summary of installed packages. */
2
2
  export function formatPipInstall(data) {
3
- if (data.alreadySatisfied && data.total === 0)
3
+ const total = (data.installed ?? []).length;
4
+ if (data.alreadySatisfied && total === 0)
4
5
  return "All requirements already satisfied.";
5
6
  if (!data.success)
6
7
  return "pip install failed.";
7
8
  const verb = data.dryRun ? "Would install" : "Installed";
8
- const lines = [`${verb} ${data.total} packages:`];
9
+ const lines = [`${verb} ${total} packages:`];
9
10
  for (const pkg of data.installed ?? []) {
10
11
  lines.push(` ${pkg.name}==${pkg.version}`);
11
12
  }
@@ -13,10 +14,14 @@ export function formatPipInstall(data) {
13
14
  }
14
15
  /** Formats structured mypy type-check results into a human-readable diagnostic summary. */
15
16
  export function formatMypy(data) {
16
- if (data.success && data.total === 0)
17
+ const diagnostics = data.diagnostics ?? [];
18
+ if (data.success && diagnostics.length === 0)
17
19
  return "mypy: no errors found.";
18
- const lines = [`mypy: ${data.errors} errors, ${data.warnings} warnings, ${data.notes} notes`];
19
- for (const d of data.diagnostics ?? []) {
20
+ const errors = diagnostics.filter((d) => d.severity === "error").length;
21
+ const warnings = diagnostics.filter((d) => d.severity === "warning").length;
22
+ const notes = diagnostics.filter((d) => d.severity === "note").length;
23
+ const lines = [`mypy: ${errors} errors, ${warnings} warnings, ${notes} notes`];
24
+ for (const d of diagnostics) {
20
25
  const col = d.column ? `:${d.column}` : "";
21
26
  const code = d.code ? ` [${d.code}]` : "";
22
27
  lines.push(` ${d.file}:${d.line}${col} ${d.severity}: ${d.message}${code}`);
@@ -25,11 +30,14 @@ export function formatMypy(data) {
25
30
  }
26
31
  /** Formats structured ruff lint results into a human-readable diagnostic listing. */
27
32
  export function formatRuff(data) {
28
- if (data.total === 0)
33
+ const diagnostics = data.diagnostics ?? [];
34
+ const total = diagnostics.length;
35
+ if (total === 0)
29
36
  return "ruff: no issues found.";
37
+ const fixable = diagnostics.filter((d) => d.fixable).length;
30
38
  const fixedPart = data.fixedCount !== undefined ? `, ${data.fixedCount} fixed` : "";
31
- const lines = [`ruff: ${data.total} issues (${data.fixable} fixable${fixedPart})`];
32
- for (const d of data.diagnostics ?? []) {
39
+ const lines = [`ruff: ${total} issues (${fixable} fixable${fixedPart})`];
40
+ for (const d of diagnostics) {
33
41
  const fixInfo = d.fixApplicability ? ` [fix: ${d.fixApplicability}]` : "";
34
42
  lines.push(` ${d.file}:${d.line}:${d.column} ${d.code}: ${d.message}${fixInfo}`);
35
43
  }
@@ -37,10 +45,12 @@ export function formatRuff(data) {
37
45
  }
38
46
  /** Formats structured pip-audit vulnerability results into a human-readable security report. */
39
47
  export function formatPipAudit(data) {
40
- if (data.total === 0)
48
+ const vulns = data.vulnerabilities ?? [];
49
+ const total = vulns.length;
50
+ if (total === 0)
41
51
  return "No vulnerabilities found.";
42
- const lines = [`${data.total} vulnerabilities:`];
43
- for (const v of data.vulnerabilities ?? []) {
52
+ const lines = [`${total} vulnerabilities:`];
53
+ for (const v of vulns) {
44
54
  const fix = v.fixVersions.length ? ` (fix: ${v.fixVersions.join(", ")})` : "";
45
55
  const severity = v.severity ? ` [${v.severity}]` : "";
46
56
  const score = v.cvssScore != null ? ` CVSS:${v.cvssScore}` : "";
@@ -50,7 +60,8 @@ export function formatPipAudit(data) {
50
60
  }
51
61
  /** Formats structured pytest results into a human-readable test summary. */
52
62
  export function formatPytest(data) {
53
- if (data.total === 0)
63
+ const total = data.passed + data.failed + data.errors + data.skipped;
64
+ if (total === 0)
54
65
  return "pytest: no tests collected.";
55
66
  const parts = [];
56
67
  if (data.passed > 0)
@@ -63,7 +74,7 @@ export function formatPytest(data) {
63
74
  parts.push(`${data.skipped} skipped`);
64
75
  if (data.warnings > 0)
65
76
  parts.push(`${data.warnings} warnings`);
66
- const lines = [`pytest: ${parts.join(", ")} in ${data.duration}s`];
77
+ const lines = [`pytest: ${parts.join(", ")}`];
67
78
  for (const f of data.failures ?? []) {
68
79
  lines.push(` FAILED ${f.test}: ${f.message}`);
69
80
  }
@@ -71,6 +82,8 @@ export function formatPytest(data) {
71
82
  }
72
83
  /** Formats structured uv install results into a human-readable summary. */
73
84
  export function formatUvInstall(data) {
85
+ const installed = data.installed ?? [];
86
+ const total = installed.length;
74
87
  if (!data.success) {
75
88
  const lines = ["uv install failed."];
76
89
  if (data.resolutionConflicts && data.resolutionConflicts.length > 0) {
@@ -84,10 +97,10 @@ export function formatUvInstall(data) {
84
97
  }
85
98
  return lines.join("\n");
86
99
  }
87
- if (data.alreadySatisfied || data.total === 0)
100
+ if (data.alreadySatisfied || total === 0)
88
101
  return "All requirements already satisfied.";
89
- const lines = [`Installed ${data.total} packages in ${data.duration}s:`];
90
- for (const pkg of data.installed ?? []) {
102
+ const lines = [`Installed ${total} packages:`];
103
+ for (const pkg of installed) {
91
104
  lines.push(` ${pkg.name}==${pkg.version}`);
92
105
  }
93
106
  return lines.join("\n");
@@ -95,7 +108,7 @@ export function formatUvInstall(data) {
95
108
  /** Formats structured uv run results into a human-readable summary. */
96
109
  export function formatUvRun(data) {
97
110
  const status = data.success ? "completed" : `failed (exit ${data.exitCode})`;
98
- const lines = [`uv run ${status} in ${data.duration}s`];
111
+ const lines = [`uv run ${status}`];
99
112
  if (data.uvDiagnostics && data.uvDiagnostics.length > 0) {
100
113
  lines.push("uv diagnostics:");
101
114
  for (const d of data.uvDiagnostics) {
@@ -124,7 +137,8 @@ export function formatBlack(data) {
124
137
  }
125
138
  return "black: internal error (exit 123). Check for syntax errors.";
126
139
  }
127
- if (data.filesChecked === 0)
140
+ const filesChecked = data.filesChanged + data.filesUnchanged;
141
+ if (filesChecked === 0)
128
142
  return "black: no Python files found.";
129
143
  if (data.success && data.filesChanged === 0) {
130
144
  return `black: ${data.filesUnchanged} files already formatted.`;
@@ -150,13 +164,12 @@ export function compactPytestMap(data) {
150
164
  errors: data.errors,
151
165
  skipped: data.skipped,
152
166
  warnings: data.warnings,
153
- total: data.total,
154
- duration: data.duration,
155
167
  failedTests: (data.failures ?? []).map((f) => f.test),
156
168
  };
157
169
  }
158
170
  export function formatPytestCompact(data) {
159
- if (data.total === 0)
171
+ const total = data.passed + data.failed + data.errors + data.skipped;
172
+ if (total === 0)
160
173
  return "pytest: no tests collected.";
161
174
  const parts = [];
162
175
  if (data.passed > 0)
@@ -169,7 +182,7 @@ export function formatPytestCompact(data) {
169
182
  parts.push(`${data.skipped} skipped`);
170
183
  if (data.warnings > 0)
171
184
  parts.push(`${data.warnings} warnings`);
172
- const lines = [`pytest: ${parts.join(", ")} in ${data.duration}s`];
185
+ const lines = [`pytest: ${parts.join(", ")}`];
173
186
  for (const t of data.failedTests) {
174
187
  lines.push(` FAILED ${t}`);
175
188
  }
@@ -178,37 +191,30 @@ export function formatPytestCompact(data) {
178
191
  export function compactMypyMap(data) {
179
192
  return {
180
193
  success: data.success,
181
- total: data.total,
182
- errors: data.errors,
183
- warnings: data.warnings,
184
- notes: data.notes,
185
194
  };
186
195
  }
187
196
  export function formatMypyCompact(data) {
188
- if (data.success && data.total === 0)
197
+ if (data.success)
189
198
  return "mypy: no errors found.";
190
- return `mypy: ${data.errors} errors, ${data.warnings} warnings, ${data.notes} notes (${data.total} total)`;
199
+ return "mypy: errors found.";
191
200
  }
192
201
  export function compactRuffMap(data) {
193
202
  return {
194
203
  success: data.success,
195
- total: data.total,
196
- fixable: data.fixable,
197
204
  fixedCount: data.fixedCount,
198
205
  };
199
206
  }
200
207
  export function formatRuffCompact(data) {
201
- if (data.total === 0)
208
+ if (data.success && !data.fixedCount)
202
209
  return "ruff: no issues found.";
203
210
  const fixedPart = data.fixedCount !== undefined ? `, ${data.fixedCount} fixed` : "";
204
- return `ruff: ${data.total} issues (${data.fixable} fixable${fixedPart})`;
211
+ return `ruff: issues found${fixedPart}`;
205
212
  }
206
213
  export function compactBlackMap(data) {
207
214
  return {
208
215
  success: data.success,
209
216
  filesChanged: data.filesChanged,
210
217
  filesUnchanged: data.filesUnchanged,
211
- filesChecked: data.filesChecked,
212
218
  errorType: data.errorType,
213
219
  };
214
220
  }
@@ -216,7 +222,8 @@ export function formatBlackCompact(data) {
216
222
  if (data.errorType === "internal_error") {
217
223
  return "black: internal error (exit 123).";
218
224
  }
219
- if (data.filesChecked === 0)
225
+ const filesChecked = data.filesChanged + data.filesUnchanged;
226
+ if (filesChecked === 0)
220
227
  return "black: no Python files found.";
221
228
  if (data.filesChanged === 0)
222
229
  return `black: ${data.filesUnchanged} files already formatted.`;
@@ -225,35 +232,31 @@ export function formatBlackCompact(data) {
225
232
  export function compactPipInstallMap(data) {
226
233
  return {
227
234
  success: data.success,
228
- total: data.total,
229
235
  alreadySatisfied: data.alreadySatisfied,
230
236
  dryRun: data.dryRun || undefined,
231
237
  };
232
238
  }
233
239
  export function formatPipInstallCompact(data) {
234
- if (data.alreadySatisfied && data.total === 0)
240
+ if (data.alreadySatisfied)
235
241
  return "All requirements already satisfied.";
236
242
  if (!data.success)
237
243
  return "pip install failed.";
238
244
  const verb = data.dryRun ? "Would install" : "Installed";
239
- return `${verb} ${data.total} packages.`;
245
+ return `${verb} packages.`;
240
246
  }
241
247
  export function compactPipAuditMap(data) {
242
248
  return {
243
249
  success: data.success,
244
- total: data.total,
245
250
  };
246
251
  }
247
252
  export function formatPipAuditCompact(data) {
248
- if (data.total === 0)
253
+ if (data.success)
249
254
  return "No vulnerabilities found.";
250
- return `${data.total} vulnerabilities found.`;
255
+ return "Vulnerabilities found.";
251
256
  }
252
257
  export function compactUvInstallMap(data) {
253
258
  return {
254
259
  success: data.success,
255
- total: data.total,
256
- duration: data.duration,
257
260
  alreadySatisfied: data.alreadySatisfied,
258
261
  error: data.error,
259
262
  resolutionConflicts: data.resolutionConflicts,
@@ -266,32 +269,33 @@ export function formatUvInstallCompact(data) {
266
269
  }
267
270
  return "uv install failed.";
268
271
  }
269
- if (data.alreadySatisfied || data.total === 0)
272
+ if (data.alreadySatisfied)
270
273
  return "All requirements already satisfied.";
271
- return `Installed ${data.total} packages in ${data.duration}s.`;
274
+ return "Installed packages.";
272
275
  }
273
276
  export function compactUvRunMap(data) {
274
277
  return {
275
278
  exitCode: data.exitCode,
276
279
  success: data.success,
277
- duration: data.duration,
278
280
  truncated: data.truncated,
279
281
  };
280
282
  }
281
283
  export function formatUvRunCompact(data) {
282
284
  const status = data.success ? "completed" : `failed (exit ${data.exitCode})`;
283
285
  const truncated = data.truncated ? " (truncated)" : "";
284
- return `uv run ${status} in ${data.duration}s${truncated}`;
286
+ return `uv run ${status}${truncated}`;
285
287
  }
286
288
  // ── pip-list formatters ──────────────────────────────────────────────
287
289
  /** Formats structured pip list results into a human-readable package listing. */
288
290
  export function formatPipList(data) {
289
291
  if (data.error)
290
292
  return `pip list error: ${data.error}`;
291
- if (data.total === 0)
293
+ const packages = data.packages ?? [];
294
+ const total = packages.length;
295
+ if (total === 0)
292
296
  return "No packages installed.";
293
- const lines = [`${data.total} packages installed:`];
294
- for (const pkg of data.packages ?? []) {
297
+ const lines = [`${total} packages installed:`];
298
+ for (const pkg of packages) {
295
299
  lines.push(` ${pkg.name}==${pkg.version}`);
296
300
  }
297
301
  return lines.join("\n");
@@ -299,16 +303,15 @@ export function formatPipList(data) {
299
303
  export function compactPipListMap(data) {
300
304
  return {
301
305
  success: data.success,
302
- total: data.total,
303
306
  error: data.error,
304
307
  };
305
308
  }
306
309
  export function formatPipListCompact(data) {
307
310
  if (data.error)
308
311
  return `pip list error: ${data.error}`;
309
- if (data.total === 0)
310
- return "No packages installed.";
311
- return `${data.total} packages installed.`;
312
+ if (data.success)
313
+ return "Packages listed.";
314
+ return "No packages installed.";
312
315
  }
313
316
  // ── pip-show formatters ──────────────────────────────────────────────
314
317
  /** Formats structured pip show results into a human-readable package info display. */
@@ -696,11 +699,12 @@ export function formatPyenvCompact(data) {
696
699
  return `pyenv ${data.action}: success.`;
697
700
  }
698
701
  // ── poetry formatters ────────────────────────────────────────────────
699
- /** Formats structured poetry results into a human-readable summary. */
700
- export function formatPoetry(data) {
702
+ /** Formats structured poetry results into a human-readable summary.
703
+ * action is passed separately since it is not included in the output schema. */
704
+ export function formatPoetry(data, action) {
701
705
  if (!data.success)
702
- return `poetry ${data.action} failed.`;
703
- if (data.action === "show") {
706
+ return `poetry ${action} failed.`;
707
+ if (action === "show") {
704
708
  const pkgs = data.packages ?? [];
705
709
  if (pkgs.length === 0)
706
710
  return "No packages found.";
@@ -711,7 +715,7 @@ export function formatPoetry(data) {
711
715
  }
712
716
  return lines.join("\n");
713
717
  }
714
- if (data.action === "build") {
718
+ if (action === "build") {
715
719
  const arts = data.artifacts ?? [];
716
720
  if (arts.length === 0)
717
721
  return "poetry build: no artifacts produced.";
@@ -721,11 +725,11 @@ export function formatPoetry(data) {
721
725
  }
722
726
  return lines.join("\n");
723
727
  }
724
- if (data.action === "check" || data.action === "lock" || data.action === "export") {
728
+ if (action === "check" || action === "lock" || action === "export") {
725
729
  const msgs = data.messages ?? [];
726
730
  if (msgs.length === 0)
727
- return `poetry ${data.action}: success.`;
728
- const lines = [`poetry ${data.action}:`];
731
+ return `poetry ${action}: success.`;
732
+ const lines = [`poetry ${action}:`];
729
733
  for (const m of msgs) {
730
734
  lines.push(` ${m}`);
731
735
  }
@@ -734,8 +738,8 @@ export function formatPoetry(data) {
734
738
  // install, add, remove, update
735
739
  const pkgs = data.packages ?? [];
736
740
  if (pkgs.length === 0)
737
- return `poetry ${data.action}: no changes.`;
738
- const lines = [`poetry ${data.action}: ${pkgs.length} packages:`];
741
+ return `poetry ${action}: no changes.`;
742
+ const lines = [`poetry ${action}: ${pkgs.length} packages:`];
739
743
  for (const pkg of pkgs) {
740
744
  lines.push(` ${pkg.name}==${pkg.version}`);
741
745
  }
@@ -744,28 +748,11 @@ export function formatPoetry(data) {
744
748
  export function compactPoetryMap(data) {
745
749
  return {
746
750
  success: data.success,
747
- action: data.action,
748
- total: data.total,
749
751
  };
750
752
  }
751
753
  export function formatPoetryCompact(data) {
752
754
  if (!data.success)
753
- return `poetry ${data.action} failed.`;
754
- if (data.action === "show") {
755
- if (data.total === 0)
756
- return "No packages found.";
757
- return `${data.total} packages installed.`;
758
- }
759
- if (data.action === "build") {
760
- if (data.total === 0)
761
- return "poetry build: no artifacts produced.";
762
- return `Built ${data.total} artifacts.`;
763
- }
764
- if (data.action === "check" || data.action === "lock" || data.action === "export") {
765
- return `poetry ${data.action}: success.`;
766
- }
767
- if (data.total === 0)
768
- return `poetry ${data.action}: no changes.`;
769
- return `poetry ${data.action}: ${data.total} packages.`;
755
+ return "poetry: failed.";
756
+ return "poetry: success.";
770
757
  }
771
758
  //# sourceMappingURL=formatters.js.map