@runweave/server-linux-x64 0.1.16 → 0.1.17

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 (93) hide show
  1. package/manifest.json +178 -167
  2. package/native.tar.gz +0 -0
  3. package/package.json +1 -1
  4. package/payload/app-server/build-info.json +4 -4
  5. package/payload/app-server/index.cjs +33 -1
  6. package/payload/app-server/index.cjs.map +1 -1
  7. package/payload/backend/build-info.json +4 -4
  8. package/payload/backend/index.cjs +2368 -1674
  9. package/payload/backend/scheduled-tasks-sqlite-worker.cjs +11 -0
  10. package/payload/frontend/dist/assets/{_baseUniq-PiWEH-yN.js → _baseUniq-Rpr7ObZY.js} +1 -1
  11. package/payload/frontend/dist/assets/{access-khJ9m2er.js → access-BvxRY1pA.js} +1 -1
  12. package/payload/frontend/dist/assets/{advanced-DGKohnXi.js → advanced-CZfrALGq.js} +1 -1
  13. package/payload/frontend/dist/assets/{appearance-U-Ug7IyD.js → appearance-D0AwwNw_.js} +1 -1
  14. package/payload/frontend/dist/assets/{arc-BRbsuNBv.js → arc-BxzXVQYF.js} +1 -1
  15. package/payload/frontend/dist/assets/{architectureDiagram-Q4EWVU46-nAa6CrLt.js → architectureDiagram-Q4EWVU46-DTYJSSVX.js} +1 -1
  16. package/payload/frontend/dist/assets/{blockDiagram-DXYQGD6D-B32hMZsU.js → blockDiagram-DXYQGD6D-DaIImc6U.js} +1 -1
  17. package/payload/frontend/dist/assets/{c4Diagram-AHTNJAMY-BF-z05RQ.js → c4Diagram-AHTNJAMY-DRS-zy_e.js} +1 -1
  18. package/payload/frontend/dist/assets/channel-hL0i3Xgx.js +1 -0
  19. package/payload/frontend/dist/assets/{chunk-4BX2VUAB-CpsbjQI6.js → chunk-4BX2VUAB-BxZHfjDE.js} +1 -1
  20. package/payload/frontend/dist/assets/{chunk-4TB4RGXK-CczITrGa.js → chunk-4TB4RGXK-BbTiOq_d.js} +1 -1
  21. package/payload/frontend/dist/assets/{chunk-55IACEB6-CpJ67cqM.js → chunk-55IACEB6-DSGNAzPL.js} +1 -1
  22. package/payload/frontend/dist/assets/{chunk-EDXVE4YY-DbBbY4zX.js → chunk-EDXVE4YY-C3VoLWVy.js} +1 -1
  23. package/payload/frontend/dist/assets/{chunk-FMBD7UC4-D7OUnmzc.js → chunk-FMBD7UC4-jgIQKRAn.js} +1 -1
  24. package/payload/frontend/dist/assets/{chunk-OYMX7WX6-XW9wc5RB.js → chunk-OYMX7WX6-CR1nxjr3.js} +1 -1
  25. package/payload/frontend/dist/assets/{chunk-QZHKN3VN-BGTWWiWa.js → chunk-QZHKN3VN-BsZQAe-R.js} +1 -1
  26. package/payload/frontend/dist/assets/{chunk-YZCP3GAM-aDPViitX.js → chunk-YZCP3GAM-C7hytF3a.js} +1 -1
  27. package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-Nr4qU3jt.js +1 -0
  28. package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-Nr4qU3jt.js +1 -0
  29. package/payload/frontend/dist/assets/clone-ePxKteP6.js +1 -0
  30. package/payload/frontend/dist/assets/{connection-C6WeK41z.js → connection-Brx3p6gD.js} +1 -1
  31. package/payload/frontend/dist/assets/{connections-DNdN1RmN.js → connections-DV6_2T4t.js} +1 -1
  32. package/payload/frontend/dist/assets/{cose-bilkent-S5V4N54A-Cwz2NhpB.js → cose-bilkent-S5V4N54A-CrqquZt2.js} +1 -1
  33. package/payload/frontend/dist/assets/{dagre-KV5264BT-BwQKFZOx.js → dagre-KV5264BT-BOAEPW4D.js} +1 -1
  34. package/payload/frontend/dist/assets/{desktop-pR36qBdU.js → desktop-1i0ByIN_.js} +1 -1
  35. package/payload/frontend/dist/assets/{diagram-5BDNPKRD-S0AGOE5T.js → diagram-5BDNPKRD-NVdwMJnF.js} +1 -1
  36. package/payload/frontend/dist/assets/{diagram-G4DWMVQ6-DovkRf9p.js → diagram-G4DWMVQ6-RKmkTTau.js} +1 -1
  37. package/payload/frontend/dist/assets/{diagram-MMDJMWI5-Dq5WNwQl.js → diagram-MMDJMWI5-B0Or1DIY.js} +1 -1
  38. package/payload/frontend/dist/assets/{diagram-TYMM5635-CCnuStVI.js → diagram-TYMM5635-CoJGPUQX.js} +1 -1
  39. package/payload/frontend/dist/assets/{erDiagram-SMLLAGMA-BDMaPGeI.js → erDiagram-SMLLAGMA-DHK_lg3E.js} +1 -1
  40. package/payload/frontend/dist/assets/{flowDiagram-DWJPFMVM-BDv6vMkM.js → flowDiagram-DWJPFMVM-CzirUF-x.js} +1 -1
  41. package/payload/frontend/dist/assets/{ganttDiagram-T4ZO3ILL-CY8dWNYQ.js → ganttDiagram-T4ZO3ILL-DGY2KYoN.js} +1 -1
  42. package/payload/frontend/dist/assets/{gitGraphDiagram-UUTBAWPF-oc3kHd5q.js → gitGraphDiagram-UUTBAWPF-BI5lNHKC.js} +1 -1
  43. package/payload/frontend/dist/assets/{graph-DKuyIZob.js → graph-CxjgBe1N.js} +1 -1
  44. package/payload/frontend/dist/assets/{image-Dc8RoLU8.js → image-LArOi_ON.js} +1 -1
  45. package/payload/frontend/dist/assets/{index-yjpBPGaI.js → index-CLYrzd8Y.js} +5 -5
  46. package/payload/frontend/dist/assets/{infoDiagram-42DDH7IO-BLcpWdtJ.js → infoDiagram-42DDH7IO-DTRl6YSd.js} +1 -1
  47. package/payload/frontend/dist/assets/{ishikawaDiagram-UXIWVN3A-BA51Kxg1.js → ishikawaDiagram-UXIWVN3A-DCnBRtVx.js} +1 -1
  48. package/payload/frontend/dist/assets/{journeyDiagram-VCZTEJTY-DihQv76o.js → journeyDiagram-VCZTEJTY-ChVgjvDs.js} +1 -1
  49. package/payload/frontend/dist/assets/{kanban-definition-6JOO6SKY-f8IFXcQ8.js → kanban-definition-6JOO6SKY-skToH2-J.js} +1 -1
  50. package/payload/frontend/dist/assets/{layout-CXtaqE_c.js → layout-B4V_ctSo.js} +1 -1
  51. package/payload/frontend/dist/assets/{linear-M-kNw4GE.js → linear-DYom329p.js} +1 -1
  52. package/payload/frontend/dist/assets/{main-2Qq7QDN9.js → main-C_6tTN_b.js} +5 -5
  53. package/payload/frontend/dist/assets/{min-CA0jPMDz.js → min-EMXbJh1s.js} +1 -1
  54. package/payload/frontend/dist/assets/{mindmap-definition-QFDTVHPH-swU906Iz.js → mindmap-definition-QFDTVHPH-DLHGcrEw.js} +1 -1
  55. package/payload/frontend/dist/assets/{monitoring-BXwlTH4w.js → monitoring-Bvfy9Q9G.js} +1 -1
  56. package/payload/frontend/dist/assets/{notifications-HSWJoZsd.js → notifications-CdkYtTCy.js} +1 -1
  57. package/payload/frontend/dist/assets/{pieDiagram-DEJITSTG-9HEe0TSS.js → pieDiagram-DEJITSTG-LrDfLpSu.js} +1 -1
  58. package/payload/frontend/dist/assets/{quadrantDiagram-34T5L4WZ-D6XYJZTB.js → quadrantDiagram-34T5L4WZ-uV9sfVKm.js} +1 -1
  59. package/payload/frontend/dist/assets/{record-content-BeTlb4At.js → record-content-B3qVdcq-.js} +1 -1
  60. package/payload/frontend/dist/assets/{requirementDiagram-MS252O5E-WEqUAT3C.js → requirementDiagram-MS252O5E-Cf_SmlxS.js} +1 -1
  61. package/payload/frontend/dist/assets/{sankeyDiagram-XADWPNL6-aArdTOj7.js → sankeyDiagram-XADWPNL6-DSLCPq2l.js} +1 -1
  62. package/payload/frontend/dist/assets/{sequenceDiagram-FGHM5R23-CDeRkIe0.js → sequenceDiagram-FGHM5R23-CAAjivQf.js} +1 -1
  63. package/payload/frontend/dist/assets/{stateDiagram-FHFEXIEX-1imZLfkb.js → stateDiagram-FHFEXIEX-DNMUe2-F.js} +1 -1
  64. package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-Ca5k1Q3K.js +1 -0
  65. package/payload/frontend/dist/assets/{status-CoUwjZ7k.js → status-BPA1tGcF.js} +1 -1
  66. package/payload/frontend/dist/assets/suiji-ZMTJOgTp.js +1 -0
  67. package/payload/frontend/dist/assets/{svg-5T9dQhUs.js → svg-BbHfpNxC.js} +1 -1
  68. package/payload/frontend/dist/assets/{tabs-yWf361z8.js → tabs-DkuqaUwz.js} +1 -1
  69. package/payload/frontend/dist/assets/{timeline-definition-GMOUNBTQ-TPyxkidk.js → timeline-definition-GMOUNBTQ-DNJNPFK4.js} +1 -1
  70. package/payload/frontend/dist/assets/{vennDiagram-DHZGUBPP-NmkcMXEI.js → vennDiagram-DHZGUBPP-BycjIB3y.js} +1 -1
  71. package/payload/frontend/dist/assets/{wardley-RL74JXVD-B_n5wDkw.js → wardley-RL74JXVD-Bq01rln7.js} +1 -1
  72. package/payload/frontend/dist/assets/{wardleyDiagram-NUSXRM2D-xyfZ4Ot2.js → wardleyDiagram-NUSXRM2D-D4_m8ewM.js} +1 -1
  73. package/payload/frontend/dist/assets/{xychartDiagram-5P7HB3ND-L0NM-pq_.js → xychartDiagram-5P7HB3ND-CovxGnwH.js} +1 -1
  74. package/payload/frontend/dist/build-info.json +4 -4
  75. package/payload/frontend/dist/companion.html +1 -1
  76. package/payload/frontend/dist/index.html +2 -2
  77. package/payload/packages/agent-bridge/src/install-pi.mjs +1 -0
  78. package/payload/plugins/pi/dist/bridge/runweave-hook-bridge.cjs +9 -3
  79. package/payload/plugins/pi/dist/bridge/runweave-hook-claude.cjs +68 -0
  80. package/payload/plugins/pi/dist/bridge/runweave-hook-completion.cjs +3 -37
  81. package/payload/plugins/pi/dist/bridge/runweave-hook-payload.cjs +1 -0
  82. package/payload/plugins/toolkit/.codex-plugin/plugin.json +1 -1
  83. package/payload/plugins/toolkit/hooks/runweave-hook-bridge.cjs +9 -3
  84. package/payload/plugins/toolkit/hooks/runweave-hook-claude.cjs +68 -0
  85. package/payload/plugins/toolkit/hooks/runweave-hook-completion.cjs +3 -37
  86. package/payload/plugins/toolkit/hooks/runweave-hook-payload.cjs +1 -0
  87. package/payload/plugins/toolkit-release.json +1 -1
  88. package/payload/frontend/dist/assets/channel-BbKg1_I_.js +0 -1
  89. package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-CQ2mrjxw.js +0 -1
  90. package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-CQ2mrjxw.js +0 -1
  91. package/payload/frontend/dist/assets/clone-B-rmfNeZ.js +0 -1
  92. package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-DafDrUDX.js +0 -1
  93. package/payload/frontend/dist/assets/suiji-Dch5gUBM.js +0 -1
@@ -1,40 +1,6 @@
1
- /* global fetch, module, require, process, AbortSignal */
1
+ /* global fetch, module, require, AbortSignal */
2
2
  /* eslint-disable @typescript-eslint/no-require-imports */
3
3
  const { buildCompletionHookBody, extractUserPrompt, isFeishuAttentionHook, readNotificationType } = require("./runweave-hook-payload.cjs");
4
- const { spawnSync } = require("node:child_process");
5
- const { randomUUID } = require("node:crypto");
6
- const path = require("node:path");
7
-
8
- function readClaudeInstance(spawnSync) {
9
- const result = spawnSync("ps", ["-axo", "pid=,ppid=,comm="], {
10
- encoding: "utf8", timeout: 1000, maxBuffer: 2 * 1024 * 1024,
11
- });
12
- if (result.error || result.status !== 0) return null;
13
- const processes = new Map();
14
- for (const line of String(result.stdout).split(/\r?\n/)) {
15
- const match = line.match(/^\s*(\d+)\s+(\d+)\s+(.+?)\s*$/);
16
- if (match) processes.set(Number(match[1]), { parent: Number(match[2]), command: path.basename(match[3]) });
17
- }
18
- let claudePid = null;
19
- const visited = new Set();
20
- for (let pid = process.ppid; pid > 1 && !visited.has(pid); ) {
21
- visited.add(pid);
22
- const entry = processes.get(pid);
23
- if (!entry) return null;
24
- if (["claude", "codex", "trae", "traex", "pi"].includes(entry.command)) {
25
- if (claudePid || entry.command !== "claude") return null;
26
- claudePid = pid;
27
- }
28
- pid = entry.parent;
29
- }
30
- if (!claudePid) return null;
31
- const started = spawnSync("ps", ["-p", String(claudePid), "-o", "lstart="], {
32
- encoding: "utf8", timeout: 1000,
33
- });
34
- const stamp = String(started.stdout || "").trim();
35
- return !started.error && started.status === 0 && stamp ? `${claudePid}:${stamp}` : null;
36
- }
37
-
38
4
  async function postCompletionHook({
39
5
  endpoint,
40
6
  token,
@@ -55,11 +21,11 @@ async function postCompletionHook({
55
21
  });
56
22
  if (source === "claude") {
57
23
  if (!endpoint) return { accepted: false };
58
- const instanceId = readClaudeInstance(spawnSync);
24
+ const instanceId = payload.claude?.instanceId;
59
25
  if (!instanceId || payload.agent_id || payload.agent_transcript_path) return { accepted: false };
60
26
  const notificationType = readNotificationType(payload);
61
27
  const event = String(rawEvent).toLowerCase().replace(/[_\s-]/g, "");
62
- body.claude = { instanceId, eventId: payload.runweaveHookEventId || randomUUID(),
28
+ body.claude = { instanceId, eventId: payload.runweaveHookEventId,
63
29
  ...(notificationType ? { notificationType } : {}),
64
30
  ...(event === "userpromptsubmit" ? { query: extractUserPrompt(payload) || "" } : {}) };
65
31
  body.completionReason = event === "permissionrequest" ||
@@ -528,6 +528,7 @@ function buildAppServerBaseEvent({
528
528
  payload: {
529
529
  source,
530
530
  ...(source === "pi" && payload.pi ? { pi: payload.pi } : {}),
531
+ ...(source === "claude" && payload.claude ? { claude: payload.claude } : {}),
531
532
  threadId,
532
533
  rawHookEvent: String(rawEvent || "Unknown"),
533
534
  normalizedEvent,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toolkit",
3
- "version": "0.2.0+codex.e3512d5d9d040601bed063536fa4ae86b155cd7fc9bb9822ae2d5f977266bddf",
3
+ "version": "0.2.0+codex.1e1b247f9ff295236b4a62855f1ca6b63035bb43bd51b14a095e2aeee09a5fea",
4
4
  "description": "Runweave Toolkit plugin for project-specific skills and automation extensions.",
5
5
  "author": {
6
6
  "name": "Runweave"
@@ -7,6 +7,7 @@ const { setTimeout } = require("node:timers");
7
7
  const fs = require("node:fs");
8
8
  const path = require("node:path");
9
9
  const crypto = require("node:crypto");
10
+ const { readClaudeContext } = require("./runweave-hook-claude.cjs");
10
11
  const { postCompletionHook } = require("./runweave-hook-completion.cjs");
11
12
  const {
12
13
  STOP_EVENTS,
@@ -221,10 +222,12 @@ async function postAgentHook({
221
222
  activityEventId,
222
223
  operationId,
223
224
  pi,
225
+ claude,
224
226
  }) {
225
227
  let body = JSON.stringify({
226
228
  activityEventId,
227
229
  ...(pi ? { pi } : {}),
230
+ ...(claude ? { claude } : {}),
228
231
  ...(operationId ? { operationId } : {}),
229
232
  terminalSessionId,
230
233
  projectId: process.env.RUNWEAVE_PROJECT_ID || undefined,
@@ -322,8 +325,11 @@ async function main() {
322
325
  }
323
326
  const completionReason = normalizeReason(args.reason);
324
327
  const threadId = readThreadId(payload);
325
- const stateHookEvent =
326
- ["pi", "codex", "trae", "traecli", "traex"].includes(source)
328
+ payload.runweaveHookEventId = crypto.randomUUID();
329
+ if (source === "claude") payload.claude = readClaudeContext(payload, payload.runweaveHookEventId);
330
+ const stateHookEvent = source === "claude"
331
+ ? (payload.claude ? toAgentHookStateEvent(normalizedEvent) || "AgentMetadata" : null)
332
+ : ["pi", "codex", "trae", "traecli", "traex"].includes(source)
327
333
  ? toAgentHookStateEvent(normalizedEvent)
328
334
  : null;
329
335
  // Compaction continues the turn; child CLIs do not own the parent terminal.
@@ -418,7 +424,6 @@ async function main() {
418
424
  const summary = extractCompletionSummary(payload);
419
425
  if (summary) payload.last_assistant_message = summary;
420
426
  }
421
- payload.runweaveHookEventId = crypto.randomUUID();
422
427
  const appServerClient = await discoverAppServer();
423
428
  if (!appServerClient) {
424
429
  appendDebugLog("hook bridge app-server unavailable", {
@@ -484,6 +489,7 @@ async function main() {
484
489
  : undefined,
485
490
  activityEventId,
486
491
  ...(source === "pi" ? { pi: payload.pi } : {}),
492
+ ...(source === "claude" ? { claude: payload.claude } : {}),
487
493
  operationId: process.env.RUNWEAVE_TERMINAL_AGENT_OPERATION_ID || null,
488
494
  });
489
495
  appendDebugLog("hook bridge posted agent hook", {
@@ -0,0 +1,68 @@
1
+ /* global module, process, require */
2
+ /* eslint-disable @typescript-eslint/no-require-imports */
3
+ const { spawnSync } = require("node:child_process");
4
+ const { performance } = require("node:perf_hooks");
5
+ const path = require("node:path");
6
+
7
+ // Use process birth, before stdin/network work, so delayed delivery cannot roll state back.
8
+ const observedAt = performance.timeOrigin;
9
+
10
+ function readClaudeIdentity() {
11
+ const options = { encoding: "utf8", timeout: 3000, maxBuffer: 4 * 1024 * 1024, windowsHide: true };
12
+ const processes = new Map();
13
+ if (process.platform === "win32") {
14
+ const script = 'Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,@{Name="StartedAt";Expression={if ($_.CreationDate) {([DateTimeOffset]$_.CreationDate).ToUnixTimeMilliseconds()} else {0}}} | ConvertTo-Json -Compress';
15
+ const result = spawnSync("powershell.exe", ["-NoLogo", "-NoProfile", "-NonInteractive", "-Command", script], options);
16
+ if (result.error || result.status !== 0) return null;
17
+ try {
18
+ const rows = JSON.parse(String(result.stdout).replace(/^\uFEFF/, ""));
19
+ for (const row of Array.isArray(rows) ? rows : [rows]) {
20
+ processes.set(row.ProcessId, { parent: row.ParentProcessId,
21
+ command: String(row.Name).toLowerCase().replace(/\.(exe|cmd|bat)$/, ""), startedAt: row.StartedAt });
22
+ }
23
+ } catch { return null; }
24
+ } else {
25
+ const result = spawnSync("ps", ["-axo", "pid=,ppid=,comm="], options);
26
+ if (result.error || result.status !== 0) return null;
27
+ for (const line of String(result.stdout).split(/\r?\n/)) {
28
+ const match = /^\s*(\d+)\s+(\d+)\s+(.+?)\s*$/.exec(line);
29
+ if (match) processes.set(Number(match[1]), { parent: Number(match[2]), command: path.basename(match[3]) });
30
+ }
31
+ }
32
+ let claudePid = null;
33
+ const visited = new Set();
34
+ for (let pid = process.ppid; pid > 1; ) {
35
+ if (visited.has(pid)) return null;
36
+ visited.add(pid);
37
+ const entry = processes.get(pid);
38
+ if (!entry) return null;
39
+ if (["claude", "codex", "trae", "traex", "traecli", "pi"].includes(entry.command)) {
40
+ if (claudePid || entry.command !== "claude") return null;
41
+ claudePid = pid;
42
+ }
43
+ pid = entry.parent;
44
+ }
45
+ if (!claudePid) return null;
46
+ let startedAt = processes.get(claudePid).startedAt;
47
+ if (process.platform !== "win32") {
48
+ const result = spawnSync("ps", ["-p", String(claudePid), "-o", "lstart="], {
49
+ ...options, env: { TZ: "UTC", LC_ALL: "C" },
50
+ });
51
+ if (result.error || result.status !== 0) return null;
52
+ startedAt = Date.parse(`${String(result.stdout).trim()} UTC`);
53
+ }
54
+ if (!Number.isFinite(startedAt) || startedAt <= 0 || startedAt > observedAt) return null;
55
+ return { instanceId: `${claudePid}:${startedAt}`, startedAt };
56
+ }
57
+
58
+ function readClaudeContext(payload, eventId) {
59
+ if (payload.agent_id || payload.agent_transcript_path || !payload.session_id) return null;
60
+ const identity = readClaudeIdentity();
61
+ if (!identity) return null;
62
+ return { version: 1, ...identity, observedAt, eventId, sessionId: payload.session_id,
63
+ event: String(payload.hook_event_name || "").toLowerCase().replace(/[_\s-]/g, ""),
64
+ ...(payload.source ? { sessionSource: payload.source } : {}),
65
+ ...(payload.notification_type ? { notificationType: payload.notification_type } : {}) };
66
+ }
67
+
68
+ module.exports = { readClaudeContext };
@@ -1,40 +1,6 @@
1
- /* global fetch, module, require, process, AbortSignal */
1
+ /* global fetch, module, require, AbortSignal */
2
2
  /* eslint-disable @typescript-eslint/no-require-imports */
3
3
  const { buildCompletionHookBody, extractUserPrompt, isFeishuAttentionHook, readNotificationType } = require("./runweave-hook-payload.cjs");
4
- const { spawnSync } = require("node:child_process");
5
- const { randomUUID } = require("node:crypto");
6
- const path = require("node:path");
7
-
8
- function readClaudeInstance(spawnSync) {
9
- const result = spawnSync("ps", ["-axo", "pid=,ppid=,comm="], {
10
- encoding: "utf8", timeout: 1000, maxBuffer: 2 * 1024 * 1024,
11
- });
12
- if (result.error || result.status !== 0) return null;
13
- const processes = new Map();
14
- for (const line of String(result.stdout).split(/\r?\n/)) {
15
- const match = line.match(/^\s*(\d+)\s+(\d+)\s+(.+?)\s*$/);
16
- if (match) processes.set(Number(match[1]), { parent: Number(match[2]), command: path.basename(match[3]) });
17
- }
18
- let claudePid = null;
19
- const visited = new Set();
20
- for (let pid = process.ppid; pid > 1 && !visited.has(pid); ) {
21
- visited.add(pid);
22
- const entry = processes.get(pid);
23
- if (!entry) return null;
24
- if (["claude", "codex", "trae", "traex", "pi"].includes(entry.command)) {
25
- if (claudePid || entry.command !== "claude") return null;
26
- claudePid = pid;
27
- }
28
- pid = entry.parent;
29
- }
30
- if (!claudePid) return null;
31
- const started = spawnSync("ps", ["-p", String(claudePid), "-o", "lstart="], {
32
- encoding: "utf8", timeout: 1000,
33
- });
34
- const stamp = String(started.stdout || "").trim();
35
- return !started.error && started.status === 0 && stamp ? `${claudePid}:${stamp}` : null;
36
- }
37
-
38
4
  async function postCompletionHook({
39
5
  endpoint,
40
6
  token,
@@ -55,11 +21,11 @@ async function postCompletionHook({
55
21
  });
56
22
  if (source === "claude") {
57
23
  if (!endpoint) return { accepted: false };
58
- const instanceId = readClaudeInstance(spawnSync);
24
+ const instanceId = payload.claude?.instanceId;
59
25
  if (!instanceId || payload.agent_id || payload.agent_transcript_path) return { accepted: false };
60
26
  const notificationType = readNotificationType(payload);
61
27
  const event = String(rawEvent).toLowerCase().replace(/[_\s-]/g, "");
62
- body.claude = { instanceId, eventId: payload.runweaveHookEventId || randomUUID(),
28
+ body.claude = { instanceId, eventId: payload.runweaveHookEventId,
63
29
  ...(notificationType ? { notificationType } : {}),
64
30
  ...(event === "userpromptsubmit" ? { query: extractUserPrompt(payload) || "" } : {}) };
65
31
  body.completionReason = event === "permissionrequest" ||
@@ -528,6 +528,7 @@ function buildAppServerBaseEvent({
528
528
  payload: {
529
529
  source,
530
530
  ...(source === "pi" && payload.pi ? { pi: payload.pi } : {}),
531
+ ...(source === "claude" && payload.claude ? { claude: payload.claude } : {}),
531
532
  threadId,
532
533
  rawHookEvent: String(rawEvent || "Unknown"),
533
534
  normalizedEvent,
@@ -1 +1 @@
1
- {"version":"0.2.0+codex.e3512d5d9d040601bed063536fa4ae86b155cd7fc9bb9822ae2d5f977266bddf","digest":"e3512d5d9d040601bed063536fa4ae86b155cd7fc9bb9822ae2d5f977266bddf"}
1
+ {"version":"0.2.0+codex.1e1b247f9ff295236b4a62855f1ca6b63035bb43bd51b14a095e2aeee09a5fea","digest":"1e1b247f9ff295236b4a62855f1ca6b63035bb43bd51b14a095e2aeee09a5fea"}
@@ -1 +0,0 @@
1
- import{U as a,M as n}from"./index-yjpBPGaI.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-CczITrGa.js";import{_ as i}from"./index-yjpBPGaI.js";import"./chunk-FMBD7UC4-D7OUnmzc.js";import"./chunk-YZCP3GAM-aDPViitX.js";import"./chunk-55IACEB6-CpJ67cqM.js";import"./chunk-EDXVE4YY-DbBbY4zX.js";import"./main-2Qq7QDN9.js";import"./index-D9-cSGu-.js";import"./record-content-BeTlb4At.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-CczITrGa.js";import{_ as i}from"./index-yjpBPGaI.js";import"./chunk-FMBD7UC4-D7OUnmzc.js";import"./chunk-YZCP3GAM-aDPViitX.js";import"./chunk-55IACEB6-CpJ67cqM.js";import"./chunk-EDXVE4YY-DbBbY4zX.js";import"./main-2Qq7QDN9.js";import"./index-D9-cSGu-.js";import"./record-content-BeTlb4At.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./graph-DKuyIZob.js";var e=4;function a(o){return r(o,e)}export{a as c};
@@ -1 +0,0 @@
1
- import{s as r,b as e,a,S as s}from"./chunk-OYMX7WX6-XW9wc5RB.js";import{_ as i}from"./index-yjpBPGaI.js";import"./chunk-55IACEB6-CpJ67cqM.js";import"./chunk-EDXVE4YY-DbBbY4zX.js";import"./index-D9-cSGu-.js";import"./main-2Qq7QDN9.js";import"./record-content-BeTlb4At.js";var n={parser:a,get db(){return new s(2)},renderer:e,styles:r,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{j as t}from"./index-D9-cSGu-.js";import o from"./connection-C6WeK41z.js";import"./main-2Qq7QDN9.js";import"./record-content-BeTlb4At.js";function n(){return t.jsx(o,{accountOnly:!0})}export{n as default};