@archznn/crewloop-skills 0.4.0 → 0.4.2

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 (132) hide show
  1. package/package.json +18 -3
  2. package/packages/cli/README.md +55 -0
  3. package/packages/cli/bin/crewloop.js +6 -0
  4. package/packages/cli/dist/agents.d.ts +7 -0
  5. package/packages/cli/dist/agents.d.ts.map +1 -0
  6. package/packages/cli/dist/agents.js +31 -0
  7. package/packages/cli/dist/agents.js.map +1 -0
  8. package/packages/cli/dist/cli.d.ts +14 -0
  9. package/packages/cli/dist/cli.d.ts.map +1 -0
  10. package/packages/cli/dist/cli.js +283 -0
  11. package/packages/cli/dist/cli.js.map +1 -0
  12. package/packages/cli/dist/installer.d.ts +19 -0
  13. package/packages/cli/dist/installer.d.ts.map +1 -0
  14. package/packages/cli/dist/installer.js +89 -0
  15. package/packages/cli/dist/installer.js.map +1 -0
  16. package/packages/cli/dist/mcp.d.ts +20 -0
  17. package/packages/cli/dist/mcp.d.ts.map +1 -0
  18. package/packages/cli/dist/mcp.js +130 -0
  19. package/packages/cli/dist/mcp.js.map +1 -0
  20. package/packages/cli/dist/resolver.d.ts +7 -0
  21. package/packages/cli/dist/resolver.d.ts.map +1 -0
  22. package/packages/cli/dist/resolver.js +57 -0
  23. package/packages/cli/dist/resolver.js.map +1 -0
  24. package/packages/cli/dist/tests/agents.test.d.ts +2 -0
  25. package/packages/cli/dist/tests/agents.test.d.ts.map +1 -0
  26. package/packages/cli/dist/tests/agents.test.js +27 -0
  27. package/packages/cli/dist/tests/agents.test.js.map +1 -0
  28. package/packages/cli/dist/tests/cli.test.d.ts +2 -0
  29. package/packages/cli/dist/tests/cli.test.d.ts.map +1 -0
  30. package/packages/cli/dist/tests/cli.test.js +103 -0
  31. package/packages/cli/dist/tests/cli.test.js.map +1 -0
  32. package/packages/cli/dist/tests/installer.test.d.ts +2 -0
  33. package/packages/cli/dist/tests/installer.test.d.ts.map +1 -0
  34. package/packages/cli/dist/tests/installer.test.js +129 -0
  35. package/packages/cli/dist/tests/installer.test.js.map +1 -0
  36. package/packages/cli/dist/tests/mcp.test.d.ts +2 -0
  37. package/packages/cli/dist/tests/mcp.test.d.ts.map +1 -0
  38. package/packages/cli/dist/tests/mcp.test.js +153 -0
  39. package/packages/cli/dist/tests/mcp.test.js.map +1 -0
  40. package/packages/cli/dist/tests/resolver.test.d.ts +2 -0
  41. package/packages/cli/dist/tests/resolver.test.d.ts.map +1 -0
  42. package/packages/cli/dist/tests/resolver.test.js +41 -0
  43. package/packages/cli/dist/tests/resolver.test.js.map +1 -0
  44. package/servers/dashboard/bin/crewloop-dashboard.js +0 -0
  45. package/servers/dashboard/dist/adapters/codex.d.ts +23 -0
  46. package/servers/dashboard/dist/adapters/codex.d.ts.map +1 -0
  47. package/servers/dashboard/dist/adapters/codex.js +28 -0
  48. package/servers/dashboard/dist/adapters/codex.js.map +1 -0
  49. package/servers/dashboard/dist/adapters/kimi.d.ts +13 -0
  50. package/servers/dashboard/dist/adapters/kimi.d.ts.map +1 -0
  51. package/servers/dashboard/dist/adapters/kimi.js +28 -0
  52. package/servers/dashboard/dist/adapters/kimi.js.map +1 -0
  53. package/servers/dashboard/dist/adapters/opencode.d.ts +9 -0
  54. package/servers/dashboard/dist/adapters/opencode.d.ts.map +1 -0
  55. package/servers/dashboard/dist/adapters/opencode.js +26 -0
  56. package/servers/dashboard/dist/adapters/opencode.js.map +1 -0
  57. package/servers/dashboard/dist/adapters/shim.d.ts +7 -0
  58. package/servers/dashboard/dist/adapters/shim.d.ts.map +1 -0
  59. package/servers/dashboard/dist/adapters/shim.js +107 -0
  60. package/servers/dashboard/dist/adapters/shim.js.map +1 -0
  61. package/servers/dashboard/dist/adapters/shim.test.d.ts +2 -0
  62. package/servers/dashboard/dist/adapters/shim.test.d.ts.map +1 -0
  63. package/servers/dashboard/dist/adapters/shim.test.js +72 -0
  64. package/servers/dashboard/dist/adapters/shim.test.js.map +1 -0
  65. package/servers/dashboard/dist/api/event.d.ts +13 -0
  66. package/servers/dashboard/dist/api/event.d.ts.map +1 -0
  67. package/servers/dashboard/dist/api/event.js +52 -0
  68. package/servers/dashboard/dist/api/event.js.map +1 -0
  69. package/servers/dashboard/dist/api/skills.d.ts +4 -0
  70. package/servers/dashboard/dist/api/skills.d.ts.map +1 -0
  71. package/servers/dashboard/dist/api/skills.js +12 -0
  72. package/servers/dashboard/dist/api/skills.js.map +1 -0
  73. package/servers/dashboard/dist/config.d.ts +11 -0
  74. package/servers/dashboard/dist/config.d.ts.map +1 -0
  75. package/servers/dashboard/dist/config.js +65 -0
  76. package/servers/dashboard/dist/config.js.map +1 -0
  77. package/servers/dashboard/dist/filters/sanitize.d.ts +14 -0
  78. package/servers/dashboard/dist/filters/sanitize.d.ts.map +1 -0
  79. package/servers/dashboard/dist/filters/sanitize.js +64 -0
  80. package/servers/dashboard/dist/filters/sanitize.js.map +1 -0
  81. package/servers/dashboard/dist/filters/sanitize.test.d.ts +2 -0
  82. package/servers/dashboard/dist/filters/sanitize.test.d.ts.map +1 -0
  83. package/servers/dashboard/dist/filters/sanitize.test.js +71 -0
  84. package/servers/dashboard/dist/filters/sanitize.test.js.map +1 -0
  85. package/servers/dashboard/dist/index.d.ts +2 -0
  86. package/servers/dashboard/dist/index.d.ts.map +1 -0
  87. package/servers/dashboard/dist/index.js +22 -0
  88. package/servers/dashboard/dist/index.js.map +1 -0
  89. package/servers/dashboard/dist/presenter.d.ts +7 -0
  90. package/servers/dashboard/dist/presenter.d.ts.map +1 -0
  91. package/servers/dashboard/dist/presenter.js +54 -0
  92. package/servers/dashboard/dist/presenter.js.map +1 -0
  93. package/servers/dashboard/dist/presenter.test.d.ts +2 -0
  94. package/servers/dashboard/dist/presenter.test.d.ts.map +1 -0
  95. package/servers/dashboard/dist/presenter.test.js +66 -0
  96. package/servers/dashboard/dist/presenter.test.js.map +1 -0
  97. package/servers/dashboard/dist/server.d.ts +13 -0
  98. package/servers/dashboard/dist/server.d.ts.map +1 -0
  99. package/servers/dashboard/dist/server.js +162 -0
  100. package/servers/dashboard/dist/server.js.map +1 -0
  101. package/servers/dashboard/dist/server.test.d.ts +2 -0
  102. package/servers/dashboard/dist/server.test.d.ts.map +1 -0
  103. package/servers/dashboard/dist/server.test.js +113 -0
  104. package/servers/dashboard/dist/server.test.js.map +1 -0
  105. package/servers/dashboard/dist/skills/infer.d.ts +8 -0
  106. package/servers/dashboard/dist/skills/infer.d.ts.map +1 -0
  107. package/servers/dashboard/dist/skills/infer.js +48 -0
  108. package/servers/dashboard/dist/skills/infer.js.map +1 -0
  109. package/servers/dashboard/dist/skills/infer.test.d.ts +2 -0
  110. package/servers/dashboard/dist/skills/infer.test.d.ts.map +1 -0
  111. package/servers/dashboard/dist/skills/infer.test.js +82 -0
  112. package/servers/dashboard/dist/skills/infer.test.js.map +1 -0
  113. package/servers/dashboard/dist/skills/mapping.d.ts +5 -0
  114. package/servers/dashboard/dist/skills/mapping.d.ts.map +1 -0
  115. package/servers/dashboard/dist/skills/mapping.js +28 -0
  116. package/servers/dashboard/dist/skills/mapping.js.map +1 -0
  117. package/servers/dashboard/dist/skills/registry.d.ts +11 -0
  118. package/servers/dashboard/dist/skills/registry.d.ts.map +1 -0
  119. package/servers/dashboard/dist/skills/registry.js +59 -0
  120. package/servers/dashboard/dist/skills/registry.js.map +1 -0
  121. package/servers/dashboard/dist/state.d.ts +18 -0
  122. package/servers/dashboard/dist/state.d.ts.map +1 -0
  123. package/servers/dashboard/dist/state.js +91 -0
  124. package/servers/dashboard/dist/state.js.map +1 -0
  125. package/servers/dashboard/dist/state.test.d.ts +2 -0
  126. package/servers/dashboard/dist/state.test.d.ts.map +1 -0
  127. package/servers/dashboard/dist/state.test.js +83 -0
  128. package/servers/dashboard/dist/state.test.js.map +1 -0
  129. package/servers/dashboard/dist/types.d.ts +86 -0
  130. package/servers/dashboard/dist/types.d.ts.map +1 -0
  131. package/servers/dashboard/dist/types.js +3 -0
  132. package/servers/dashboard/dist/types.js.map +1 -0
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_os_1 = __importDefault(require("node:os"));
11
+ const mcp_1 = require("../mcp");
12
+ function createFakePython(baseDir) {
13
+ const isWindows = node_os_1.default.platform() === 'win32';
14
+ const binDir = node_path_1.default.join(baseDir, 'bin');
15
+ node_fs_1.default.mkdirSync(binDir, { recursive: true });
16
+ const pythonCmd = node_path_1.default.join(binDir, isWindows ? 'python.cmd' : 'python');
17
+ const unixScript = `#!/bin/sh
18
+ if [ "$1" = "--version" ]; then exit 0; fi
19
+ if [ "$1" = "-m" ] && [ "$2" = "venv" ]; then
20
+ VENV="$3"
21
+ mkdir -p "$VENV/bin"
22
+ mkdir -p "$VENV/Scripts"
23
+ if [ -n "$CREWLOOP_PIP_FAIL" ]; then
24
+ cat > "$VENV/bin/pip" <<'PIP_EOF'
25
+ #!/bin/sh
26
+ exit 1
27
+ PIP_EOF
28
+ else
29
+ cat > "$VENV/bin/pip" <<'PIP_EOF'
30
+ #!/bin/sh
31
+ if [ "$1" = "install" ]; then
32
+ touch "$(dirname "$0")/obsidian-mcp"
33
+ exit 0
34
+ fi
35
+ exit 1
36
+ PIP_EOF
37
+ fi
38
+ chmod +x "$VENV/bin/pip"
39
+ exit 0
40
+ fi
41
+ exit 1
42
+ `;
43
+ const windowsScript = `@echo off
44
+ if "%1"=="--version" exit /b 0
45
+ if "%1"=="-m" if "%2"=="venv" (
46
+ mkdir "%3/Scripts"
47
+ mkdir "%3/bin"
48
+ if defined CREWLOOP_PIP_FAIL (
49
+ (
50
+ echo @echo off
51
+ echo exit /b 1
52
+ ) > "%3/Scripts/pip.cmd"
53
+ ) else (
54
+ (
55
+ echo @echo off
56
+ echo if "%%1"=="install" ^(
57
+ echo type nul ^> "%%~dp0obsidian-mcp.exe"
58
+ echo exit /b 0
59
+ echo ^)
60
+ echo exit /b 1
61
+ ) > "%3/Scripts/pip.cmd"
62
+ )
63
+ exit /b 0
64
+ )
65
+ exit /b 1
66
+ `;
67
+ node_fs_1.default.writeFileSync(pythonCmd, isWindows ? windowsScript : unixScript);
68
+ if (!isWindows) {
69
+ node_fs_1.default.chmodSync(pythonCmd, 0o755);
70
+ }
71
+ return { pythonCmd };
72
+ }
73
+ (0, node_test_1.describe)('mcp', () => {
74
+ let mcpSourceDir;
75
+ let localBinDir;
76
+ let fakePythonDir;
77
+ (0, node_test_1.before)(() => {
78
+ mcpSourceDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'crewloop-mcp-'));
79
+ localBinDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'crewloop-bin-'));
80
+ fakePythonDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'crewloop-fakepy-'));
81
+ node_fs_1.default.writeFileSync(node_path_1.default.join(mcpSourceDir, 'pyproject.toml'), '[project]\nname = "obsidian-mcp"\n');
82
+ });
83
+ (0, node_test_1.after)(() => {
84
+ node_fs_1.default.rmSync(mcpSourceDir, { recursive: true, force: true });
85
+ node_fs_1.default.rmSync(localBinDir, { recursive: true, force: true });
86
+ node_fs_1.default.rmSync(fakePythonDir, { recursive: true, force: true });
87
+ delete process.env.CREWLOOP_PIP_FAIL;
88
+ });
89
+ (0, node_test_1.it)('dry-run reports would-install without creating venv', () => {
90
+ const { pythonCmd } = createFakePython(fakePythonDir);
91
+ const result = (0, mcp_1.installMcpServer)(mcpSourceDir, {
92
+ dryRun: true,
93
+ pythonCmd,
94
+ localBinDir,
95
+ });
96
+ node_assert_1.default.strictEqual(result.installed, true);
97
+ node_assert_1.default.strictEqual(result.skipped, false);
98
+ node_assert_1.default.strictEqual(result.error, undefined);
99
+ node_assert_1.default.ok(result.binaryPath);
100
+ node_assert_1.default.ok(!node_fs_1.default.existsSync(node_path_1.default.join(mcpSourceDir, '.venv')));
101
+ });
102
+ (0, node_test_1.it)('missing python is reported as an error but not thrown', () => {
103
+ const result = (0, mcp_1.installMcpServer)(mcpSourceDir, {
104
+ pythonCmd: node_path_1.default.join(fakePythonDir, 'missing-python'),
105
+ localBinDir,
106
+ });
107
+ node_assert_1.default.strictEqual(result.installed, false);
108
+ node_assert_1.default.strictEqual(result.skipped, false);
109
+ node_assert_1.default.ok(result.error);
110
+ node_assert_1.default.ok(result.error.message.includes('Python not found'));
111
+ });
112
+ (0, node_test_1.it)('pip failure is reported as an error', () => {
113
+ const { pythonCmd } = createFakePython(fakePythonDir);
114
+ process.env.CREWLOOP_PIP_FAIL = '1';
115
+ try {
116
+ const result = (0, mcp_1.installMcpServer)(mcpSourceDir, {
117
+ pythonCmd,
118
+ localBinDir,
119
+ force: true,
120
+ });
121
+ node_assert_1.default.strictEqual(result.installed, false);
122
+ node_assert_1.default.strictEqual(result.skipped, false);
123
+ node_assert_1.default.ok(result.error);
124
+ }
125
+ finally {
126
+ delete process.env.CREWLOOP_PIP_FAIL;
127
+ }
128
+ });
129
+ (0, node_test_1.it)('successful install creates venv, runs pip, and exposes binary', () => {
130
+ const { pythonCmd } = createFakePython(fakePythonDir);
131
+ const result = (0, mcp_1.installMcpServer)(mcpSourceDir, {
132
+ pythonCmd,
133
+ localBinDir,
134
+ force: true,
135
+ });
136
+ node_assert_1.default.strictEqual(result.installed, true);
137
+ node_assert_1.default.strictEqual(result.skipped, false);
138
+ node_assert_1.default.strictEqual(result.error, undefined);
139
+ node_assert_1.default.ok(result.binaryPath);
140
+ node_assert_1.default.ok(node_fs_1.default.existsSync(result.binaryPath));
141
+ });
142
+ (0, node_test_1.it)('skips install when binary already exists and force is false', () => {
143
+ const { pythonCmd } = createFakePython(fakePythonDir);
144
+ const result = (0, mcp_1.installMcpServer)(mcpSourceDir, {
145
+ pythonCmd,
146
+ localBinDir,
147
+ });
148
+ node_assert_1.default.strictEqual(result.installed, false);
149
+ node_assert_1.default.strictEqual(result.skipped, true);
150
+ node_assert_1.default.ok(result.binaryPath);
151
+ });
152
+ });
153
+ //# sourceMappingURL=mcp.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.test.js","sourceRoot":"","sources":["../../src/tests/mcp.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.test.d.ts","sourceRoot":"","sources":["../../src/tests/resolver.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_os_1 = __importDefault(require("node:os"));
11
+ const resolver_1 = require("../resolver");
12
+ (0, node_test_1.describe)('resolver', () => {
13
+ let tmpDir;
14
+ (0, node_test_1.before)(() => {
15
+ tmpDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'crewloop-resolver-'));
16
+ const skillsDir = node_path_1.default.join(tmpDir, 'skills');
17
+ node_fs_1.default.mkdirSync(node_path_1.default.join(skillsDir, 'architect'), { recursive: true });
18
+ node_fs_1.default.mkdirSync(node_path_1.default.join(skillsDir, 'engineer'), { recursive: true });
19
+ node_fs_1.default.writeFileSync(node_path_1.default.join(skillsDir, 'architect', 'SKILL.md'), '---\nname: architect\ndescription: Creates specs\n---\n# Architect\n');
20
+ node_fs_1.default.writeFileSync(node_path_1.default.join(skillsDir, 'engineer', 'SKILL.md'), '---\nname: engineer\ndescription: Builds code\n---\n# Engineer\n');
21
+ });
22
+ (0, node_test_1.after)(() => {
23
+ node_fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
24
+ });
25
+ (0, node_test_1.it)('discovers all skills', () => {
26
+ const skills = (0, resolver_1.resolveSkills)(tmpDir);
27
+ node_assert_1.default.strictEqual(skills.length, 2);
28
+ node_assert_1.default.ok(skills.some((s) => s.name === 'architect'));
29
+ node_assert_1.default.ok(skills.some((s) => s.name === 'engineer'));
30
+ });
31
+ (0, node_test_1.it)('filters skills by name', () => {
32
+ const skills = (0, resolver_1.resolveSkills)(tmpDir, ['architect']);
33
+ node_assert_1.default.strictEqual(skills.length, 1);
34
+ node_assert_1.default.strictEqual(skills[0].name, 'architect');
35
+ node_assert_1.default.strictEqual(skills[0].description, 'Creates specs');
36
+ });
37
+ (0, node_test_1.it)('throws when skills directory is missing', () => {
38
+ node_assert_1.default.throws(() => (0, resolver_1.resolveSkills)(node_path_1.default.join(tmpDir, 'missing')), /Skills directory not found/);
39
+ });
40
+ });
41
+ //# sourceMappingURL=resolver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.test.js","sourceRoot":"","sources":["../../src/tests/resolver.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAwD;AACxD,8DAAiC;AACjC,sDAAyB;AACzB,0DAA6B;AAC7B,sDAAyB;AACzB,0CAA4C;AAE5C,IAAA,oBAAQ,EAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,MAAc,CAAC;IAEnB,IAAA,kBAAM,EAAC,GAAG,EAAE;QACV,MAAM,GAAG,iBAAE,CAAC,WAAW,CAAC,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,iBAAE,CAAC,SAAS,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,iBAAE,CAAC,SAAS,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,iBAAE,CAAC,aAAa,CACd,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,EAC7C,sEAAsE,CACvE,CAAC;QACF,iBAAE,CAAC,aAAa,CACd,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,EAC5C,kEAAkE,CACnE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAK,EAAC,GAAG,EAAE;QACT,iBAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,MAAM,GAAG,IAAA,wBAAa,EAAC,MAAM,CAAC,CAAC;QACrC,qBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC;QACxE,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,MAAM,GAAG,IAAA,wBAAa,EAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACpD,qBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,qBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChD,qBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,qBAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,wBAAa,EAAC,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
File without changes
@@ -0,0 +1,23 @@
1
+ import type { DashboardEvent } from '../types';
2
+ export interface CodexHookPayload {
3
+ sessionId?: string;
4
+ session_id?: string;
5
+ turnId?: string;
6
+ cwd?: string;
7
+ transcriptPath?: string;
8
+ model?: string;
9
+ permissionMode?: string;
10
+ callId?: string;
11
+ toolName?: string;
12
+ toolKind?: string;
13
+ toolInput?: Record<string, unknown>;
14
+ toolResponse?: Record<string, unknown>;
15
+ hook_event_name?: string;
16
+ stop_reason?: string;
17
+ usage?: unknown;
18
+ executed?: boolean;
19
+ success?: boolean;
20
+ durationMs?: number;
21
+ }
22
+ export declare function normalizeCodex(payload: CodexHookPayload): DashboardEvent | undefined;
23
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,cAAc,EAAa,MAAM,UAAU,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAepF"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeCodex = normalizeCodex;
4
+ const EVENT_MAP = {
5
+ PreToolUse: 'tool_start',
6
+ PostToolUse: 'tool_end',
7
+ SessionStart: 'session_start',
8
+ Stop: 'session_end',
9
+ };
10
+ function normalizeCodex(payload) {
11
+ const eventName = payload.hook_event_name || 'PostToolUse';
12
+ const event_type = EVENT_MAP[eventName];
13
+ if (!event_type) {
14
+ return undefined;
15
+ }
16
+ return {
17
+ id: generateId(),
18
+ timestamp: Date.now(),
19
+ source: 'codex',
20
+ session_id: payload.sessionId || payload.session_id || 'unknown',
21
+ event_type,
22
+ tool: payload.toolName,
23
+ };
24
+ }
25
+ function generateId() {
26
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
27
+ }
28
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":";;AA8BA,wCAeC;AAtBD,MAAM,SAAS,GAA8B;IAC3C,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,eAAe;IAC7B,IAAI,EAAE,aAAa;CACpB,CAAC;AAEF,SAAgB,cAAc,CAAC,OAAyB;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,IAAI,aAAa,CAAC;IAC3D,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,MAAM,EAAE,OAAsB;QAC9B,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,IAAI,SAAS;QAChE,UAAU;QACV,IAAI,EAAE,OAAO,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { DashboardEvent } from '../types';
2
+ export interface KimiHookPayload {
3
+ hook_event_name: string;
4
+ session_id: string;
5
+ cwd: string;
6
+ tool_name?: string;
7
+ tool_input?: Record<string, unknown>;
8
+ tool_response?: Record<string, unknown>;
9
+ stop_reason?: string;
10
+ usage?: unknown;
11
+ }
12
+ export declare function normalizeKimi(payload: KimiHookPayload): DashboardEvent | undefined;
13
+ //# sourceMappingURL=kimi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.d.ts","sourceRoot":"","sources":["../../src/adapters/kimi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,cAAc,EAAa,MAAM,UAAU,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAUD,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,GAAG,SAAS,CAclF"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeKimi = normalizeKimi;
4
+ const EVENT_MAP = {
5
+ PreToolUse: 'tool_start',
6
+ PostToolUse: 'tool_end',
7
+ SessionStart: 'session_start',
8
+ SessionEnd: 'session_end',
9
+ Stop: 'session_end',
10
+ };
11
+ function normalizeKimi(payload) {
12
+ const event_type = EVENT_MAP[payload.hook_event_name];
13
+ if (!event_type) {
14
+ return undefined;
15
+ }
16
+ return {
17
+ id: generateId(),
18
+ timestamp: Date.now(),
19
+ source: 'kimi',
20
+ session_id: payload.session_id || 'unknown',
21
+ event_type,
22
+ tool: payload.tool_name,
23
+ };
24
+ }
25
+ function generateId() {
26
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
27
+ }
28
+ //# sourceMappingURL=kimi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.js","sourceRoot":"","sources":["../../src/adapters/kimi.ts"],"names":[],"mappings":";;AAqBA,sCAcC;AAtBD,MAAM,SAAS,GAA8B;IAC3C,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,eAAe;IAC7B,UAAU,EAAE,aAAa;IACzB,IAAI,EAAE,aAAa;CACpB,CAAC;AAEF,SAAgB,aAAa,CAAC,OAAwB;IACpD,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,MAAM,EAAE,MAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;QAC3C,UAAU;QACV,IAAI,EAAE,OAAO,CAAC,SAAS;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DashboardEvent, EventType } from '../types';
2
+ export interface OpenCodeToolEvent {
3
+ tool: string;
4
+ args?: Record<string, unknown>;
5
+ duration?: number;
6
+ success?: boolean;
7
+ }
8
+ export declare function createOpenCodeEvent(sessionId: string, eventType: EventType, data: OpenCodeToolEvent): DashboardEvent;
9
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/adapters/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,cAAc,EAAE,SAAS,EAAe,MAAM,UAAU,CAAC;AAEpF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,iBAAiB,GACtB,cAAc,CAkBhB"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOpenCodeEvent = createOpenCodeEvent;
4
+ function createOpenCodeEvent(sessionId, eventType, data) {
5
+ let status;
6
+ if (eventType === 'tool_end') {
7
+ status = data.success === false ? 'error' : 'success';
8
+ }
9
+ else if (eventType === 'tool_start') {
10
+ status = 'running';
11
+ }
12
+ return {
13
+ id: generateId(),
14
+ timestamp: Date.now(),
15
+ source: 'opencode',
16
+ session_id: sessionId,
17
+ event_type: eventType,
18
+ tool: data.tool,
19
+ status,
20
+ duration_ms: data.duration,
21
+ };
22
+ }
23
+ function generateId() {
24
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
25
+ }
26
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/adapters/opencode.ts"],"names":[],"mappings":";;AASA,kDAsBC;AAtBD,SAAgB,mBAAmB,CACjC,SAAiB,EACjB,SAAoB,EACpB,IAAuB;IAEvB,IAAI,MAA+B,CAAC;IACpC,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;SAAM,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QACtC,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IAED,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,MAAM,EAAE,UAAyB;QACjC,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM;QACN,WAAW,EAAE,IAAI,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AgentSource, DashboardEvent } from '../types';
2
+ export declare function detectSource(argv: string[]): AgentSource | undefined;
3
+ export declare function normalizePayload(source: AgentSource, raw: unknown): DashboardEvent | undefined;
4
+ export declare function buildEvent(source: AgentSource, raw: Record<string, unknown>): DashboardEvent | undefined;
5
+ export declare function postEvent(event: DashboardEvent): void;
6
+ export declare function runShim(): void;
7
+ //# sourceMappingURL=shim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shim.d.ts","sourceRoot":"","sources":["../../src/adapters/shim.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAO5D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,SAAS,CAepE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAe9F;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,cAAc,GAAG,SAAS,CAsB5B;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAwBrD;AAED,wBAAgB,OAAO,IAAI,IAAI,CAwB9B"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectSource = detectSource;
7
+ exports.normalizePayload = normalizePayload;
8
+ exports.buildEvent = buildEvent;
9
+ exports.postEvent = postEvent;
10
+ exports.runShim = runShim;
11
+ const node_http_1 = __importDefault(require("node:http"));
12
+ const kimi_1 = require("./kimi");
13
+ const codex_1 = require("./codex");
14
+ const sanitize_1 = require("../filters/sanitize");
15
+ const DEFAULT_SERVER_URL = 'http://127.0.0.1:7890';
16
+ function detectSource(argv) {
17
+ const arg = argv[2];
18
+ if (arg === 'kimi' || arg === 'codex' || arg === 'opencode' || arg === 'log-watcher') {
19
+ return arg;
20
+ }
21
+ const env = process.env.CREWLOOP_DASHBOARD_SOURCE;
22
+ if (env === 'kimi' ||
23
+ env === 'codex' ||
24
+ env === 'opencode' ||
25
+ env === 'log-watcher') {
26
+ return env;
27
+ }
28
+ return undefined;
29
+ }
30
+ function normalizePayload(source, raw) {
31
+ if (typeof raw !== 'object' || raw === null) {
32
+ return undefined;
33
+ }
34
+ const payload = raw;
35
+ switch (source) {
36
+ case 'kimi':
37
+ return (0, kimi_1.normalizeKimi)(payload);
38
+ case 'codex':
39
+ return (0, codex_1.normalizeCodex)(payload);
40
+ default:
41
+ return undefined;
42
+ }
43
+ }
44
+ function buildEvent(source, raw) {
45
+ const base = normalizePayload(source, raw);
46
+ if (!base) {
47
+ return undefined;
48
+ }
49
+ const isPost = base.event_type === 'tool_end';
50
+ const sanitized = (0, sanitize_1.sanitize)({
51
+ tool_name: base.tool || '',
52
+ tool_input: (raw.tool_input || raw.toolInput),
53
+ tool_response: (raw.tool_response || raw.toolResponse),
54
+ }, isPost ? 'post' : 'pre');
55
+ return {
56
+ ...base,
57
+ detail: sanitized.detail,
58
+ status: sanitized.status,
59
+ duration_ms: sanitized.duration_ms,
60
+ };
61
+ }
62
+ function postEvent(event) {
63
+ const serverUrl = process.env.CREWLOOP_DASHBOARD_URL || DEFAULT_SERVER_URL;
64
+ const body = JSON.stringify(event);
65
+ const url = new URL('/event', serverUrl);
66
+ const req = node_http_1.default.request({
67
+ hostname: url.hostname,
68
+ port: url.port,
69
+ path: url.pathname,
70
+ method: 'POST',
71
+ headers: {
72
+ 'Content-Type': 'application/json',
73
+ 'Content-Length': Buffer.byteLength(body),
74
+ },
75
+ timeout: 300,
76
+ }, () => { });
77
+ req.on('error', () => { });
78
+ req.on('timeout', () => req.destroy());
79
+ req.write(body);
80
+ req.end();
81
+ }
82
+ function runShim() {
83
+ const source = detectSource(process.argv);
84
+ if (!source) {
85
+ process.stderr.write('crewloop-shim: unknown source. Use: crewloop-shim <kimi|codex>\n');
86
+ process.exit(1);
87
+ }
88
+ let raw = '';
89
+ process.stdin.setEncoding('utf8');
90
+ process.stdin.on('data', (chunk) => {
91
+ raw += chunk;
92
+ });
93
+ process.stdin.on('end', () => {
94
+ try {
95
+ const payload = JSON.parse(raw);
96
+ const event = buildEvent(source, payload);
97
+ if (event) {
98
+ postEvent(event);
99
+ }
100
+ }
101
+ catch {
102
+ // Fail silently so the agent is never blocked.
103
+ }
104
+ process.exit(0);
105
+ });
106
+ }
107
+ //# sourceMappingURL=shim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shim.js","sourceRoot":"","sources":["../../src/adapters/shim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shim.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shim.test.d.ts","sourceRoot":"","sources":["../../src/adapters/shim.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const strict_1 = __importDefault(require("node:assert/strict"));
8
+ const shim_1 = require("./shim");
9
+ (0, node_test_1.describe)('detectSource', () => {
10
+ (0, node_test_1.it)('detects source from argv', () => {
11
+ strict_1.default.equal((0, shim_1.detectSource)(['node', 'shim', 'kimi']), 'kimi');
12
+ strict_1.default.equal((0, shim_1.detectSource)(['node', 'shim', 'codex']), 'codex');
13
+ });
14
+ (0, node_test_1.it)('falls back to env var', () => {
15
+ process.env.CREWLOOP_DASHBOARD_SOURCE = 'opencode';
16
+ strict_1.default.equal((0, shim_1.detectSource)(['node', 'shim']), 'opencode');
17
+ delete process.env.CREWLOOP_DASHBOARD_SOURCE;
18
+ });
19
+ (0, node_test_1.it)('returns undefined when unknown', () => {
20
+ strict_1.default.equal((0, shim_1.detectSource)(['node', 'shim', 'unknown']), undefined);
21
+ });
22
+ });
23
+ (0, node_test_1.describe)('buildEvent', () => {
24
+ (0, node_test_1.it)('builds Kimi PreToolUse event', () => {
25
+ const event = (0, shim_1.buildEvent)('kimi', {
26
+ hook_event_name: 'PreToolUse',
27
+ session_id: 'sess-1',
28
+ cwd: '/project',
29
+ tool_name: 'Read',
30
+ tool_input: { path: 'README.md' },
31
+ });
32
+ strict_1.default.equal(event?.event_type, 'tool_start');
33
+ strict_1.default.equal(event?.tool, 'Read');
34
+ strict_1.default.equal(event?.detail, 'README.md');
35
+ strict_1.default.equal(event?.status, 'running');
36
+ });
37
+ (0, node_test_1.it)('builds Kimi PostToolUse event with status', () => {
38
+ const event = (0, shim_1.buildEvent)('kimi', {
39
+ hook_event_name: 'PostToolUse',
40
+ session_id: 'sess-1',
41
+ cwd: '/project',
42
+ tool_name: 'Read',
43
+ tool_input: { path: 'README.md' },
44
+ tool_response: { success: true, duration_ms: 12 },
45
+ });
46
+ strict_1.default.equal(event?.event_type, 'tool_end');
47
+ strict_1.default.equal(event?.status, 'success');
48
+ strict_1.default.equal(event?.duration_ms, 12);
49
+ });
50
+ (0, node_test_1.it)('builds Codex event', () => {
51
+ const event = (0, shim_1.buildEvent)('codex', {
52
+ sessionId: 'sess-2',
53
+ toolName: 'Bash',
54
+ toolInput: { command: 'ls' },
55
+ toolResponse: { success: true, durationMs: 5 },
56
+ });
57
+ strict_1.default.equal(event?.source, 'codex');
58
+ strict_1.default.equal(event?.tool, 'Bash');
59
+ strict_1.default.equal(event?.detail, undefined);
60
+ strict_1.default.equal(event?.status, 'success');
61
+ strict_1.default.equal(event?.duration_ms, 5);
62
+ });
63
+ (0, node_test_1.it)('returns undefined for unsupported hook event', () => {
64
+ const event = (0, shim_1.buildEvent)('kimi', {
65
+ hook_event_name: 'UnknownEvent',
66
+ session_id: 'sess-1',
67
+ cwd: '/project',
68
+ });
69
+ strict_1.default.equal(event, undefined);
70
+ });
71
+ });
72
+ //# sourceMappingURL=shim.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shim.test.js","sourceRoot":"","sources":["../../src/adapters/shim.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { ClientWebSocketMessage } from '../types';
3
+ import { StateStore } from '../state';
4
+ import { SkillInferenceEngine } from '../skills/infer';
5
+ export interface EventHandlerDependencies {
6
+ state: StateStore;
7
+ inference: SkillInferenceEngine;
8
+ broadcast: (message: ClientWebSocketMessage) => void;
9
+ getActiveSessionId: () => string | undefined;
10
+ setActiveSessionId: (id: string) => void;
11
+ }
12
+ export declare function createEventHandler(deps: EventHandlerDependencies): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
13
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/api/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAkB,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAIvD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,oBAAoB,CAAC;IAChC,SAAS,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACrD,kBAAkB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC7C,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,wBAAwB,IACjD,KAAK,eAAe,EAAE,KAAK,cAAc,KAAG,OAAO,CAAC,IAAI,CAAC,CAqDxE"}