@ramarivera/coding-agent-langfuse 0.1.30 → 0.1.32

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
@@ -65,7 +65,17 @@ The service installer supports:
65
65
  - Windows: scheduled task installer script under `%APPDATA%\\coding-agent-langfuse`
66
66
 
67
67
  Use `--dry-run` to print the exact file and commands, `--no-start` to only write
68
- the service file, and `service uninstall` to remove the service registration.
68
+ the service file, `service status` to inspect the platform registration, and
69
+ `service uninstall` to remove it.
70
+
71
+ ```sh
72
+ npx @ramarivera/coding-agent-langfuse@latest service status \
73
+ --agents codex,pi
74
+ ```
75
+
76
+ The Windows path intentionally uses a per-user Scheduled Task for the default
77
+ `npx` workflow. A true Windows SCM service needs an installed wrapper or native
78
+ service binary; raw `sc.exe` is not a good fit for a transient npm command.
69
79
 
70
80
  ## Backfill windows
71
81
 
@@ -81,3 +91,24 @@ npx @ramarivera/coding-agent-langfuse@latest \
81
91
 
82
92
  Deduplication is state-file based and keyed by agent, session id, and source
83
93
  record id. Reuse the same `--state` path for repeat repairs on a host.
94
+
95
+ ## Verification
96
+
97
+ The test suite covers parser behavior for all supported agents and exercises the
98
+ CLI against a local OTLP collector.
99
+
100
+ ```sh
101
+ npm run check
102
+ npm test
103
+ npm run test:e2e
104
+ ```
105
+
106
+ The e2e suite verifies:
107
+
108
+ - Codex full session traces with messages, reasoning, tool calls, tool results,
109
+ usage, and costs
110
+ - Follow mode picking up newly written Codex events
111
+ - One CLI run posting reconstructable traces for Claude Code, Codex, Grok,
112
+ OpenCode, and Pi
113
+ - Service plan generation for Linux systemd user units, macOS LaunchAgents, and
114
+ Windows Scheduled Tasks
package/dist/service.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  type AgentName = "claude" | "codex" | "grok" | "opencode" | "pi";
2
2
  type ServicePlatform = "darwin" | "linux" | "win32";
3
- type ServiceAction = "install" | "uninstall" | "print";
3
+ type ServiceAction = "install" | "uninstall" | "status" | "print";
4
4
  type ServiceOptions = {
5
5
  action: ServiceAction;
6
6
  platform: ServicePlatform;
@@ -28,6 +28,7 @@ type ServicePlan = {
28
28
  command: string[];
29
29
  postInstallCommands: string[][];
30
30
  uninstallCommands: string[][];
31
+ statusCommands: string[][];
31
32
  };
32
33
  declare function parseServiceArgs(argv: string[]): ServiceOptions;
33
34
  declare function buildServicePlan(options: ServiceOptions): ServicePlan;
package/dist/service.js CHANGED
@@ -9,6 +9,7 @@ function serviceUsage() {
9
9
  return `Usage:
10
10
  coding-agent-langfuse service install [options]
11
11
  coding-agent-langfuse service print [options]
12
+ coding-agent-langfuse service status [options]
12
13
  coding-agent-langfuse service uninstall [options]
13
14
 
14
15
  Service options:
@@ -153,6 +154,9 @@ function buildServicePlan(options) {
153
154
  uninstallCommands: [
154
155
  ["launchctl", "bootout", `gui/${process.getuid?.() ?? 501}`, path],
155
156
  ],
157
+ statusCommands: [
158
+ ["launchctl", "print", `gui/${process.getuid?.() ?? 501}/${options.name}`],
159
+ ],
156
160
  };
157
161
  }
158
162
  if (options.platform === "linux") {
@@ -174,6 +178,9 @@ function buildServicePlan(options) {
174
178
  ["systemctl", "--user", "disable", "--now", `${options.name}.service`],
175
179
  ["systemctl", "--user", "daemon-reload"],
176
180
  ],
181
+ statusCommands: [
182
+ ["systemctl", "--user", "status", `${options.name}.service`],
183
+ ],
177
184
  };
178
185
  }
179
186
  const path = join(process.env.APPDATA ?? join(options.homeDir, "AppData/Roaming"), "coding-agent-langfuse", `${options.name}.ps1`);
@@ -208,6 +215,14 @@ function buildServicePlan(options) {
208
215
  `Unregister-ScheduledTask -TaskName ${powershellString(taskName)} -Confirm:$false -ErrorAction SilentlyContinue`,
209
216
  ],
210
217
  ],
218
+ statusCommands: [
219
+ [
220
+ "powershell.exe",
221
+ "-NoProfile",
222
+ "-Command",
223
+ `Get-ScheduledTask -TaskName ${powershellString(taskName)} | Format-List *`,
224
+ ],
225
+ ],
211
226
  };
212
227
  }
213
228
  async function serviceMain(argv = process.argv.slice(2)) {
@@ -226,6 +241,11 @@ async function serviceMain(argv = process.argv.slice(2)) {
226
241
  console.log(JSON.stringify(plan, null, 2));
227
242
  return plan;
228
243
  }
244
+ if (options.action === "status") {
245
+ runCommands(plan.statusCommands);
246
+ console.log(JSON.stringify(plan, null, 2));
247
+ return plan;
248
+ }
229
249
  runCommands(plan.uninstallCommands, { ignoreFailure: true });
230
250
  if (existsSync(plan.path))
231
251
  rmSync(plan.path);
@@ -329,9 +349,9 @@ if ($Install) {
329
349
  `;
330
350
  }
331
351
  function parseServiceAction(value) {
332
- if (value === "install" || value === "uninstall" || value === "print")
352
+ if (value === "install" || value === "uninstall" || value === "status" || value === "print")
333
353
  return value;
334
- throw new Error(`Expected service action install, uninstall, or print; got '${value ?? ""}'`);
354
+ throw new Error(`Expected service action install, uninstall, status, or print; got '${value ?? ""}'`);
335
355
  }
336
356
  function parsePlatform(value) {
337
357
  if (value === "darwin" || value === "linux" || value === "win32")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ramarivera/coding-agent-langfuse",
3
- "version": "0.1.30",
3
+ "version": "0.1.32",
4
4
  "description": "Universal coding-agent Langfuse backfiller and live OTLP helpers",
5
5
  "type": "module",
6
6
  "license": "MIT",