@nerdvana/parism 0.1.6 → 0.3.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 (99) hide show
  1. package/README.en.md +46 -8
  2. package/README.md +56 -9
  3. package/dist/config/loader.d.ts.map +1 -1
  4. package/dist/config/loader.js +19 -3
  5. package/dist/config/loader.js.map +1 -1
  6. package/dist/engine/guard.d.ts.map +1 -1
  7. package/dist/engine/guard.js +4 -2
  8. package/dist/engine/guard.js.map +1 -1
  9. package/dist/parsers/compact.d.ts +6 -0
  10. package/dist/parsers/compact.d.ts.map +1 -0
  11. package/dist/parsers/compact.js +42 -0
  12. package/dist/parsers/compact.js.map +1 -0
  13. package/dist/parsers/devops/docker.d.ts +28 -0
  14. package/dist/parsers/devops/docker.d.ts.map +1 -0
  15. package/dist/parsers/devops/docker.js +63 -0
  16. package/dist/parsers/devops/docker.js.map +1 -0
  17. package/dist/parsers/devops/gh.d.ts +18 -0
  18. package/dist/parsers/devops/gh.d.ts.map +1 -0
  19. package/dist/parsers/devops/gh.js +62 -0
  20. package/dist/parsers/devops/gh.js.map +1 -0
  21. package/dist/parsers/devops/helm.d.ts +27 -0
  22. package/dist/parsers/devops/helm.d.ts.map +1 -0
  23. package/dist/parsers/devops/helm.js +41 -0
  24. package/dist/parsers/devops/helm.js.map +1 -0
  25. package/dist/parsers/devops/index.d.ts +6 -0
  26. package/dist/parsers/devops/index.d.ts.map +1 -0
  27. package/dist/parsers/devops/index.js +6 -0
  28. package/dist/parsers/devops/index.js.map +1 -0
  29. package/dist/parsers/devops/kubectl.d.ts +27 -0
  30. package/dist/parsers/devops/kubectl.d.ts.map +1 -0
  31. package/dist/parsers/devops/kubectl.js +68 -0
  32. package/dist/parsers/devops/kubectl.js.map +1 -0
  33. package/dist/parsers/devops/terraform.d.ts +22 -0
  34. package/dist/parsers/devops/terraform.d.ts.map +1 -0
  35. package/dist/parsers/devops/terraform.js +30 -0
  36. package/dist/parsers/devops/terraform.js.map +1 -0
  37. package/dist/parsers/fs/ls.js +1 -1
  38. package/dist/parsers/fs/ls.js.map +1 -1
  39. package/dist/parsers/fs/stat.d.ts.map +1 -1
  40. package/dist/parsers/fs/stat.js +33 -0
  41. package/dist/parsers/fs/stat.js.map +1 -1
  42. package/dist/parsers/git/diff.d.ts +23 -2
  43. package/dist/parsers/git/diff.d.ts.map +1 -1
  44. package/dist/parsers/git/diff.js +57 -2
  45. package/dist/parsers/git/diff.js.map +1 -1
  46. package/dist/parsers/index.d.ts.map +1 -1
  47. package/dist/parsers/index.js +16 -1
  48. package/dist/parsers/index.js.map +1 -1
  49. package/dist/parsers/json-passthrough.d.ts +6 -0
  50. package/dist/parsers/json-passthrough.d.ts.map +1 -0
  51. package/dist/parsers/json-passthrough.js +19 -0
  52. package/dist/parsers/json-passthrough.js.map +1 -0
  53. package/dist/parsers/network/netstat.d.ts.map +1 -1
  54. package/dist/parsers/network/netstat.js +7 -2
  55. package/dist/parsers/network/netstat.js.map +1 -1
  56. package/dist/parsers/packages/cargo.d.ts +23 -0
  57. package/dist/parsers/packages/cargo.d.ts.map +1 -0
  58. package/dist/parsers/packages/cargo.js +41 -0
  59. package/dist/parsers/packages/cargo.js.map +1 -0
  60. package/dist/parsers/packages/index.d.ts +3 -0
  61. package/dist/parsers/packages/index.d.ts.map +1 -0
  62. package/dist/parsers/packages/index.js +3 -0
  63. package/dist/parsers/packages/index.js.map +1 -0
  64. package/dist/parsers/packages/npm.d.ts +23 -0
  65. package/dist/parsers/packages/npm.d.ts.map +1 -0
  66. package/dist/parsers/packages/npm.js +38 -0
  67. package/dist/parsers/packages/npm.js.map +1 -0
  68. package/dist/parsers/registry.d.ts +8 -0
  69. package/dist/parsers/registry.d.ts.map +1 -1
  70. package/dist/parsers/registry.js.map +1 -1
  71. package/dist/parsers/system/apt.d.ts +24 -0
  72. package/dist/parsers/system/apt.d.ts.map +1 -0
  73. package/dist/parsers/system/apt.js +38 -0
  74. package/dist/parsers/system/apt.js.map +1 -0
  75. package/dist/parsers/system/brew.d.ts +22 -0
  76. package/dist/parsers/system/brew.d.ts.map +1 -0
  77. package/dist/parsers/system/brew.js +31 -0
  78. package/dist/parsers/system/brew.js.map +1 -0
  79. package/dist/parsers/system/index.d.ts +4 -0
  80. package/dist/parsers/system/index.d.ts.map +1 -1
  81. package/dist/parsers/system/index.js +4 -0
  82. package/dist/parsers/system/index.js.map +1 -1
  83. package/dist/parsers/system/journalctl.d.ts +27 -0
  84. package/dist/parsers/system/journalctl.d.ts.map +1 -0
  85. package/dist/parsers/system/journalctl.js +57 -0
  86. package/dist/parsers/system/journalctl.js.map +1 -0
  87. package/dist/parsers/system/systemctl.d.ts +27 -0
  88. package/dist/parsers/system/systemctl.d.ts.map +1 -0
  89. package/dist/parsers/system/systemctl.js +50 -0
  90. package/dist/parsers/system/systemctl.js.map +1 -0
  91. package/dist/parsers/windows/tasklist.d.ts.map +1 -1
  92. package/dist/parsers/windows/tasklist.js +0 -2
  93. package/dist/parsers/windows/tasklist.js.map +1 -1
  94. package/dist/server.d.ts +3 -2
  95. package/dist/server.d.ts.map +1 -1
  96. package/dist/server.js +66 -42
  97. package/dist/server.js.map +1 -1
  98. package/package.json +14 -2
  99. package/prism.config.json +5 -2
package/dist/server.js CHANGED
@@ -4,36 +4,49 @@ import { execute } from "./engine/executor.js";
4
4
  import { checkGuard, GuardError } from "./engine/guard.js";
5
5
  import { defaultRegistry } from "./parsers/index.js";
6
6
  import { paginateLines } from "./engine/paginator.js";
7
- export const PACKAGE_VERSION = "0.1.6";
7
+ import { toCompact } from "./parsers/compact.js";
8
+ import { tryParseNativeJson } from "./parsers/json-passthrough.js";
9
+ export const PACKAGE_VERSION = "0.3.0";
10
+ /**
11
+ * Guard 차단 시 반환하는 에러 봉투를 생성한다.
12
+ */
13
+ function buildGuardErrorEnvelope(cmd, args, cwd, err) {
14
+ return JSON.stringify({
15
+ ok: false,
16
+ exitCode: -1,
17
+ cmd,
18
+ args,
19
+ cwd,
20
+ duration_ms: 0,
21
+ stdout: { raw: "", parsed: null },
22
+ stderr: { raw: err.message, parsed: null },
23
+ diff: null,
24
+ guard_error: { reason: err.reason, message: err.message },
25
+ }, null, 2);
26
+ }
8
27
  /**
9
28
  * Guard 검사 → 실행 → JSON 직렬화까지의 파이프라인.
10
29
  * MCP 서버와 테스트 코드가 공통으로 사용한다.
11
30
  */
12
- export async function buildRunResult(cmd, args, cwd, config) {
31
+ export async function buildRunResult(cmd, args, cwd, config, format = "json") {
13
32
  try {
14
33
  checkGuard(cmd, args, cwd, config);
15
34
  }
16
35
  catch (err) {
17
- if (err instanceof GuardError) {
18
- const envelope = {
19
- ok: false,
20
- exitCode: -1,
21
- cmd,
22
- args,
23
- cwd,
24
- duration_ms: 0,
25
- stdout: { raw: "", parsed: null },
26
- stderr: { raw: err.message, parsed: null },
27
- diff: null,
28
- guard_error: { reason: err.reason, message: err.message },
29
- };
30
- return JSON.stringify(envelope, null, 2);
31
- }
36
+ if (err instanceof GuardError)
37
+ return buildGuardErrorEnvelope(cmd, args, cwd, err);
32
38
  throw err;
33
39
  }
34
40
  const envelope = await execute(cmd, args, cwd, config.guard.env_secret_patterns, config.guard.timeout_ms, config.guard.max_output_bytes);
35
- const parsed = defaultRegistry.parse(cmd, args, envelope.stdout.raw, { maxItems: config.guard.max_items });
36
- const enriched = { ...envelope, stdout: { ...envelope.stdout, parsed } };
41
+ const parseFormat = format === "json-no-raw" ? "json" : format;
42
+ let parsed = defaultRegistry.parse(cmd, args, envelope.stdout.raw, { maxItems: config.guard.max_items, format: parseFormat });
43
+ if (parsed == null)
44
+ parsed = tryParseNativeJson(envelope.stdout.raw);
45
+ const final = parseFormat === "compact" ? toCompact(parsed) : parsed;
46
+ const stdout = format === "json-no-raw"
47
+ ? { raw: "", parsed: final }
48
+ : { ...envelope.stdout, parsed: final };
49
+ const enriched = { ...envelope, stdout };
37
50
  return JSON.stringify(enriched, null, 2);
38
51
  }
39
52
  /**
@@ -45,21 +58,8 @@ export async function buildPagedResult(cmd, args, cwd, page, pageSize, config) {
45
58
  checkGuard(cmd, args, cwd, config);
46
59
  }
47
60
  catch (err) {
48
- if (err instanceof GuardError) {
49
- const envelope = {
50
- ok: false,
51
- exitCode: -1,
52
- cmd,
53
- args,
54
- cwd,
55
- duration_ms: 0,
56
- stdout: { raw: "", parsed: null },
57
- stderr: { raw: err.message, parsed: null },
58
- diff: null,
59
- guard_error: { reason: err.reason, message: err.message },
60
- };
61
- return JSON.stringify(envelope, null, 2);
62
- }
61
+ if (err instanceof GuardError)
62
+ return buildGuardErrorEnvelope(cmd, args, cwd, err);
63
63
  throw err;
64
64
  }
65
65
  // 전체 stdout이 필요하므로 max_output_bytes 비활성 (0)
@@ -73,21 +73,45 @@ export async function buildPagedResult(cmd, args, cwd, page, pageSize, config) {
73
73
  };
74
74
  return JSON.stringify(enriched, null, 2);
75
75
  }
76
+ const MCP_INSTRUCTIONS = `Parism: Structured shell output for AI agents.
77
+
78
+ When to use Parism:
79
+ - File listing (ls, find): Get entries[] with name, type, size, permissions — no raw parsing.
80
+ - Git state (status, log, diff): Structured branch, modified[], commits[], hunks — code review ready.
81
+ - Process/container (ps, docker ps): Structured processes[]/containers[] — filter by PID, status.
82
+ - Disk/network (df, netstat): Structured filesystems[]/connections[] — no column alignment guess.
83
+ - System (systemctl list-units, journalctl -o short-iso): units[]/entries[] — service status, logs.
84
+ - DevOps (helm list, terraform plan): releases[]/summary — deployments, plan changes.
85
+ - Packages (apt list, brew list, npm list, cargo tree): packages[]/dependencies[]/crates[].
86
+ - When output has spaces in filenames or OS-specific format: Parism parses deterministically, CFR 0%.
87
+ - When you need to count, filter, or compare: Use parsed.entries.length, parsed.files_changed, etc.
88
+
89
+ When NOT to use: Simple one-line output (pwd, echo), or when you need pipe/redirect (Guard blocks).
90
+
91
+ Tools:
92
+ - run: Execute command, get structured JSON. format: json|compact|json-no-raw.
93
+ - run_paged: Paginated stdout for large output (ps aux, find, grep -r). parsed is always null.
94
+
95
+ Usage:
96
+ 1. Prefer run when output is small. Use format=compact for token savings.
97
+ 2. For large output: run_paged(page=0) first, check page_info.total_lines, then fetch needed pages.
98
+ 3. Guard blocks disallowed commands. Check result.ok and result.guard_error on failure.
99
+ 4. stdout.parsed has structured data; stdout.raw is fallback. Schema varies by command.`;
76
100
  /**
77
101
  * MCP 서버를 생성하고 `run` 도구를 등록한다.
78
102
  */
79
103
  export function createServer(config) {
80
- const server = new McpServer({
81
- name: "parism",
82
- version: PACKAGE_VERSION,
83
- });
84
- server.tool("run", "Execute a shell command and receive structured JSON output. " +
85
- "All commands are filtered through an execution guard (whitelist + injection prevention).", {
104
+ const server = new McpServer({ name: "parism", version: PACKAGE_VERSION }, { instructions: MCP_INSTRUCTIONS });
105
+ server.tool("run", "Execute a shell command and receive structured output. " +
106
+ "All commands are filtered through an execution guard (whitelist + injection prevention). " +
107
+ "Use format='compact' for token-efficient columnar output.", {
86
108
  cmd: z.string().describe("Command name (e.g. 'ls', 'git')"),
87
109
  args: z.array(z.string()).default([]).describe("Command arguments"),
88
110
  cwd: z.string().default(process.cwd()).describe("Working directory"),
89
- }, async ({ cmd, args, cwd }) => {
90
- const result = await buildRunResult(cmd, args, cwd, config);
111
+ format: z.enum(["json", "compact", "json-no-raw"]).default("json")
112
+ .describe("Output format. 'compact'=columnar. 'json-no-raw'=omit raw for token savings."),
113
+ }, async ({ cmd, args, cwd, format }) => {
114
+ const result = await buildRunResult(cmd, args, cwd, config, format);
91
115
  return {
92
116
  content: [{ type: "text", text: result }],
93
117
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nerdvana/parism",
3
- "version": "0.1.6",
3
+ "version": "0.3.0",
4
4
  "description": "Structured shell output wrapper for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,16 +13,24 @@
13
13
  "start": "node dist/index.js",
14
14
  "test": "vitest run",
15
15
  "test:watch": "vitest",
16
- "test:coverage": "vitest run --coverage"
16
+ "test:coverage": "vitest run --coverage",
17
+ "lint": "eslint src tests",
18
+ "benchmark": "npx tsx benchmarks/index.ts"
17
19
  },
18
20
  "dependencies": {
19
21
  "@modelcontextprotocol/sdk": "^1.10.0",
20
22
  "zod": "^3.24.0"
21
23
  },
22
24
  "devDependencies": {
25
+ "@eslint/js": "^10.0.1",
23
26
  "@types/node": "^22.0.0",
27
+ "@typescript-eslint/eslint-plugin": "^8.56.1",
28
+ "@typescript-eslint/parser": "^8.56.1",
24
29
  "@vitest/coverage-v8": "^3.0.0",
30
+ "eslint": "^10.0.3",
31
+ "gpt-tokenizer": "^3.4.0",
25
32
  "typescript": "^5.7.0",
33
+ "typescript-eslint": "^8.56.1",
26
34
  "vitest": "^3.0.0"
27
35
  },
28
36
  "files": [
@@ -32,5 +40,9 @@
32
40
  "engines": {
33
41
  "node": ">=20"
34
42
  },
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/JinHo-von-Choi/parism"
46
+ },
35
47
  "license": "MIT"
36
48
  }
package/prism.config.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "guard": {
3
3
  "allowed_commands": [
4
4
  "ls", "find", "stat", "du", "df", "tree",
5
- "ps", "kill",
5
+ "ps",
6
6
  "ping", "curl", "netstat", "lsof", "ss", "dig",
7
7
  "grep", "wc", "head", "tail", "cat",
8
8
  "git",
@@ -10,7 +10,10 @@
10
10
  "free", "uname", "id",
11
11
  "echo", "date", "hostname",
12
12
  "npm", "node", "npx",
13
- "dir", "tasklist", "ipconfig", "systeminfo"
13
+ "dir", "tasklist", "ipconfig", "systeminfo",
14
+ "kubectl", "docker", "gh",
15
+ "terraform", "helm", "cargo",
16
+ "systemctl", "journalctl", "apt", "brew"
14
17
  ],
15
18
  "allowed_paths": [],
16
19
  "timeout_ms": 10000,