sensorium-mcp 3.1.0-refactor.18 → 3.1.0-refactor.19

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 (113) hide show
  1. package/dist/config/agent-settings.d.ts +6 -0
  2. package/dist/config/agent-settings.d.ts.map +1 -1
  3. package/dist/config/agent-settings.js +22 -0
  4. package/dist/config/agent-settings.js.map +1 -1
  5. package/dist/config/detail-grant.d.ts +39 -0
  6. package/dist/config/detail-grant.d.ts.map +1 -0
  7. package/dist/config/detail-grant.js +61 -0
  8. package/dist/config/detail-grant.js.map +1 -0
  9. package/dist/config/index.d.ts +1 -0
  10. package/dist/config/index.d.ts.map +1 -1
  11. package/dist/config/index.js +1 -0
  12. package/dist/config/index.js.map +1 -1
  13. package/dist/dashboard/routes/copilot.d.ts.map +1 -1
  14. package/dist/dashboard/routes/copilot.js +17 -1
  15. package/dist/dashboard/routes/copilot.js.map +1 -1
  16. package/dist/dashboard/routes/threads-read.d.ts.map +1 -1
  17. package/dist/dashboard/routes/threads-read.js +9 -2
  18. package/dist/dashboard/routes/threads-read.js.map +1 -1
  19. package/dist/dashboard/routes/threads.js +3 -3
  20. package/dist/dashboard/routes/threads.js.map +1 -1
  21. package/dist/dashboard/routes.d.ts.map +1 -1
  22. package/dist/dashboard/routes.js +11 -4
  23. package/dist/dashboard/routes.js.map +1 -1
  24. package/dist/dashboard/spa.html +11 -11
  25. package/dist/index.js +48 -13
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib/logger.d.ts.map +1 -1
  28. package/dist/lib/logger.js +21 -2
  29. package/dist/lib/logger.js.map +1 -1
  30. package/dist/server/factory.js +16 -6
  31. package/dist/server/factory.js.map +1 -1
  32. package/dist/server/http-server.d.ts.map +1 -1
  33. package/dist/server/http-server.js +10 -7
  34. package/dist/server/http-server.js.map +1 -1
  35. package/dist/services/agent-spawn.service.d.ts +3 -3
  36. package/dist/services/agent-spawn.service.d.ts.map +1 -1
  37. package/dist/services/agent-spawn.service.js +14 -8
  38. package/dist/services/agent-spawn.service.js.map +1 -1
  39. package/dist/services/background-runner.d.ts.map +1 -1
  40. package/dist/services/background-runner.js +6 -12
  41. package/dist/services/background-runner.js.map +1 -1
  42. package/dist/services/broker-client.d.ts +181 -0
  43. package/dist/services/broker-client.d.ts.map +1 -0
  44. package/dist/services/broker-client.js +323 -0
  45. package/dist/services/broker-client.js.map +1 -0
  46. package/dist/services/claude-spawn.service.d.ts +1 -1
  47. package/dist/services/claude-spawn.service.d.ts.map +1 -1
  48. package/dist/services/claude-spawn.service.js +25 -25
  49. package/dist/services/claude-spawn.service.js.map +1 -1
  50. package/dist/services/codex-spawn.service.d.ts +1 -1
  51. package/dist/services/codex-spawn.service.d.ts.map +1 -1
  52. package/dist/services/codex-spawn.service.js +19 -24
  53. package/dist/services/codex-spawn.service.js.map +1 -1
  54. package/dist/services/copilot-spawn.service.d.ts +1 -1
  55. package/dist/services/copilot-spawn.service.d.ts.map +1 -1
  56. package/dist/services/copilot-spawn.service.js +45 -36
  57. package/dist/services/copilot-spawn.service.js.map +1 -1
  58. package/dist/services/dispatcher/broker.d.ts +4 -3
  59. package/dist/services/dispatcher/broker.d.ts.map +1 -1
  60. package/dist/services/dispatcher/broker.js +21 -9
  61. package/dist/services/dispatcher/broker.js.map +1 -1
  62. package/dist/services/dispatcher/poller.d.ts.map +1 -1
  63. package/dist/services/dispatcher/poller.js +24 -5
  64. package/dist/services/dispatcher/poller.js.map +1 -1
  65. package/dist/services/flight-recorder.service.d.ts.map +1 -1
  66. package/dist/services/flight-recorder.service.js +41 -2
  67. package/dist/services/flight-recorder.service.js.map +1 -1
  68. package/dist/services/keeper.service.d.ts +9 -0
  69. package/dist/services/keeper.service.d.ts.map +1 -1
  70. package/dist/services/keeper.service.js +147 -31
  71. package/dist/services/keeper.service.js.map +1 -1
  72. package/dist/services/process.service.d.ts +40 -62
  73. package/dist/services/process.service.d.ts.map +1 -1
  74. package/dist/services/process.service.js +118 -613
  75. package/dist/services/process.service.js.map +1 -1
  76. package/dist/services/scheduler.d.ts +1 -0
  77. package/dist/services/scheduler.d.ts.map +1 -1
  78. package/dist/services/scheduler.js +67 -12
  79. package/dist/services/scheduler.js.map +1 -1
  80. package/dist/services/self-update.service.d.ts +14 -3
  81. package/dist/services/self-update.service.d.ts.map +1 -1
  82. package/dist/services/self-update.service.js +141 -72
  83. package/dist/services/self-update.service.js.map +1 -1
  84. package/dist/services/spawn-common.d.ts +49 -23
  85. package/dist/services/spawn-common.d.ts.map +1 -1
  86. package/dist/services/spawn-common.js +262 -47
  87. package/dist/services/spawn-common.js.map +1 -1
  88. package/dist/services/spawn-exit-watcher.d.ts +32 -0
  89. package/dist/services/spawn-exit-watcher.d.ts.map +1 -0
  90. package/dist/services/spawn-exit-watcher.js +102 -0
  91. package/dist/services/spawn-exit-watcher.js.map +1 -0
  92. package/dist/services/thread-health.service.d.ts +1 -1
  93. package/dist/services/thread-health.service.d.ts.map +1 -1
  94. package/dist/services/thread-health.service.js +6 -6
  95. package/dist/services/thread-health.service.js.map +1 -1
  96. package/dist/services/worker-cleanup.service.d.ts.map +1 -1
  97. package/dist/services/worker-cleanup.service.js +9 -92
  98. package/dist/services/worker-cleanup.service.js.map +1 -1
  99. package/dist/tools/defs/session-defs.js +1 -1
  100. package/dist/tools/defs/session-defs.js.map +1 -1
  101. package/dist/tools/defs/utility-defs.d.ts.map +1 -1
  102. package/dist/tools/defs/utility-defs.js +4 -3
  103. package/dist/tools/defs/utility-defs.js.map +1 -1
  104. package/dist/tools/delegate-tool.d.ts +1 -1
  105. package/dist/tools/delegate-tool.d.ts.map +1 -1
  106. package/dist/tools/delegate-tool.js +5 -5
  107. package/dist/tools/delegate-tool.js.map +1 -1
  108. package/dist/tools/session-tools.d.ts.map +1 -1
  109. package/dist/tools/session-tools.js +26 -9
  110. package/dist/tools/session-tools.js.map +1 -1
  111. package/dist/tools/utility-tools.js +1 -1
  112. package/dist/tools/utility-tools.js.map +1 -1
  113. package/package.json +1 -1
@@ -30,16 +30,28 @@ export declare const clearTaskConsumed: (threadId: number) => void;
30
30
  /** Delete a worker's pending-task mailbox (and any in-flight .processing temp)
31
31
  * so a retired worker can never be re-fed a late append. */
32
32
  export declare function deletePendingTaskMailbox(threadId: number): void;
33
- /** @param spawnedAtMs when the caller knows the process's spawn time (pid-file
34
- * startedAt), pass it: absence from a pid-table snapshot taken BEFORE the
35
- * spawn proves nothing, so such a process is treated as alive until a fresher
36
- * snapshot can actually testify. Without it, a freshly spawned child could be
37
- * declared dead against a stale snapshot → duplicate spawn. */
38
- export declare function isProcessAlive(pid: number, spawnedAtMs?: number): boolean;
33
+ /**
34
+ * Liveness + identity in one question: is `pid` alive AND (when `spawnedAtMs`
35
+ * is given) still the process we spawned?
36
+ *
37
+ * Two-step check, neither of which ever spawns a child process:
38
+ * 1. `process.kill(pid, 0)` — a plain syscall. ESRCH (any non-EPERM error) is
39
+ * a definitive "dead" and needs no broker (this also keeps dev mode
40
+ * without a supervisor fully functional for the common case).
41
+ * 2. Otherwise the answer is NOT trustworthy on Windows — kill(0) succeeds
42
+ * for kernel-zombie PIDs held open by a lingering handle, and EPERM is
43
+ * what a parent sees for its own terminated child. Ask the supervisor's
44
+ * process broker, which answers from a native process snapshot and also
45
+ * verifies creation-time identity (PID-reuse guard).
46
+ *
47
+ * Broker unreachable → "cannot confirm → treat alive", exactly the audited-safe
48
+ * degradation the deleted tasklist/Get-Process breakers had.
49
+ */
50
+ export declare function isProcessAlive(pid: number, spawnedAtMs?: number): Promise<boolean>;
39
51
  export declare function readPidFiles(): PidFileEntry[];
40
- export declare function findAliveThread(threadId: number): SpawnedThread | undefined;
41
- export declare const isThreadRunning: (threadId: number) => boolean;
42
- export declare function getActiveThreadIds(): number[];
52
+ export declare function findAliveThread(threadId: number): Promise<SpawnedThread | undefined>;
53
+ export declare const isThreadRunning: (threadId: number) => Promise<boolean>;
54
+ export declare function getActiveThreadIds(): Promise<number[]>;
43
55
  export declare function ensureDirs(): void;
44
56
  /** Thread transcripts (logs/threads/*.json) are append-only debug artifacts with
45
57
  * one file per thread per day. Nothing consumes them at runtime except the
@@ -52,10 +64,15 @@ export declare function ensureDirs(): void;
52
64
  export declare function pruneOldThreadLogs(): void;
53
65
  /**
54
66
  * Check liveness of a thread directly via its PID file, bypassing the
55
- * spawnedThreads[] in-memory cache. Returns the live PID, or undefined
56
- * if no PID file exists or the process is dead (stale file is deleted).
67
+ * spawnedThreads[] in-memory cache. Returns the live PID together with its
68
+ * recorded spawn identity (startedAt) so callers can make identity-checked
69
+ * kill/alive calls, or undefined if no PID file exists or the process is dead
70
+ * (stale file is deleted).
57
71
  */
58
- export declare function findAliveThreadViaPidFile(threadId: number): number | undefined;
72
+ export declare function findAliveThreadViaPidFile(threadId: number): Promise<{
73
+ pid: number;
74
+ startedAt?: number;
75
+ } | undefined>;
59
76
  /**
60
77
  * Reconcile in-memory state (spawnedThreads[]) with the two authoritative
61
78
  * sources of truth at startup:
@@ -64,58 +81,19 @@ export declare function findAliveThreadViaPidFile(threadId: number): number | un
64
81
  *
65
82
  * Replaces the old restoreFromPidFiles() + cleanupStalePidFiles() pair.
66
83
  */
67
- export declare function reconcileState(db: Database, threadLifecycle: ThreadLifecycleService): void;
68
- export interface ProcSnapshotEntry {
69
- ppid: number;
70
- startMs: number;
71
- }
72
- export type ProcSnapshot = Map<number, ProcSnapshotEntry>;
73
- interface OrphanLineageEntry {
74
- ownerThreadId: number;
75
- ownerPid: number;
76
- ownerStartedAt?: number;
77
- descendantStartMs: number;
78
- }
79
- export interface OrphanSweepTrackedThread {
80
- threadId: number;
81
- pid: number;
82
- startedAt?: number;
83
- alive: boolean;
84
- }
85
- export interface OrphanSweepResult {
86
- /** Confirmed orphans that passed BOTH pid-reuse guards. */
87
- orphans: {
88
- pid: number;
89
- ownerThreadId: number;
90
- startMs: number;
91
- }[];
92
- /** Recorded descendants whose pid was recycled (start-time mismatch) — dropped, never killed. */
93
- reusedPidsSkipped: number[];
94
- /** Candidates rejected by the child-not-older-than-parent guard — never killed. */
95
- olderThanParentSkipped: number[];
96
- /** How many descendant lineage entries were (re)recorded this pass. */
97
- recorded: number;
98
- }
99
- /**
100
- * Pure core of the orphan sweep — no IO, no clock, fully deterministic so the
101
- * pid-reuse guard and the snapshot-unavailable path can be tested directly.
102
- * Mutates `lineage` in place (records new descendants, drops dead/recycled ones).
103
- */
104
- export declare function computeOrphanSweep(params: {
105
- snapshot: ProcSnapshot | null;
106
- trackedThreads: OrphanSweepTrackedThread[];
107
- lineage: Map<number, OrphanLineageEntry>;
108
- protectedPids: Set<number>;
109
- toleranceMs: number;
110
- }): OrphanSweepResult;
84
+ export declare function reconcileState(db: Database, threadLifecycle: ThreadLifecycleService): Promise<void>;
111
85
  /**
112
- * Run one orphan-descendant sweep on the existing worker-cleanup cadence. Takes a
113
- * single process snapshot (no new timer, no second snapshot on the hot liveness
114
- * path), records lineage for live threads, and logs — or, when ORPHAN_SWEEP_KILL
115
- * is set, reaps — confirmed orphans. Best-effort and self-contained; any failure
116
- * degrades to doing nothing.
86
+ * Kill the process tree rooted at `pid` via the supervisor's broker (native
87
+ * TerminateProcess over the whole tree, identity-checked when `spawnedAtMs` is
88
+ * given, outcome recorded in the broker's on-disk registry). Never spawns a
89
+ * child process and never blocks the event loop.
90
+ *
91
+ * Broker unreachable → degraded best-effort: one native `process.kill(pid)`
92
+ * (root only — Node cannot enumerate a tree without shelling out, and that
93
+ * machinery is gone by design) followed by a conservative liveness re-check.
94
+ * A survived kill keeps the PID file so the keeper/cleanup policy loops retry
95
+ * and escalate — same contract as before.
117
96
  */
118
- export declare function sweepOrphanDescendants(): Promise<OrphanSweepResult>;
119
97
  export declare function killProcessTree(pid: number, threadId: number, caller?: string, spawnedAtMs?: number): Promise<void>;
120
98
  export {};
121
99
  //# sourceMappingURL=process.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"process.service.d.ts","sourceRoot":"","sources":["../../src/services/process.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.service.d.ts","sourceRoot":"","sources":["../../src/services/process.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAuB5E,eAAO,MAAM,iBAAiB,QAAkC,CAAC;AACjE,eAAO,MAAM,gBAAgB,QAAW,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAW,CAAC;AACzC,eAAO,MAAM,eAAe,QAA4B,CAAC;AACzD,eAAO,MAAM,gBAAgB,QAAW,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAClC;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,aAAa,EAAO,CAAC;AAYlD,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,IAEnD,CAAC;AACF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,KAAG,OAA4C,CAAC;AAChG,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,IAEpD,CAAC;AAEF;6DAC6D;AAC7D,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAaxF;AAED,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAiC7C;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA2B1F;AAED,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,OAAO,CACvB,CAAC;AAElD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAW5D;AAED,wBAAgB,UAAU,IAAI,IAAI,CAMjC;AAED;;;;;;;uCAOuC;AACvC,wBAAgB,kBAAkB,IAAI,IAAI,CAsBzC;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAY1D;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,QAAQ,EACZ,eAAe,EAAE,sBAAsB,GACtC,OAAO,CAAC,IAAI,CAAC,CA4Hf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAgEf"}