@oratis/lisa 0.9.0 → 0.11.1

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 (296) hide show
  1. package/README.md +123 -16
  2. package/README.zh-CN.md +101 -15
  3. package/completions/_lisa +56 -0
  4. package/completions/lisa.bash +35 -1
  5. package/completions/lisa.fish +18 -1
  6. package/dist/advisor/engine.d.ts +7 -0
  7. package/dist/advisor/engine.d.ts.map +1 -1
  8. package/dist/advisor/engine.js +12 -0
  9. package/dist/advisor/engine.js.map +1 -1
  10. package/dist/agent.d.ts +14 -0
  11. package/dist/agent.d.ts.map +1 -1
  12. package/dist/agent.js +58 -7
  13. package/dist/agent.js.map +1 -1
  14. package/dist/agents/managed.d.ts +108 -0
  15. package/dist/agents/managed.d.ts.map +1 -0
  16. package/dist/agents/managed.js +241 -0
  17. package/dist/agents/managed.js.map +1 -0
  18. package/dist/agents/pty.d.ts +155 -0
  19. package/dist/agents/pty.d.ts.map +1 -0
  20. package/dist/agents/pty.js +299 -0
  21. package/dist/agents/pty.js.map +1 -0
  22. package/dist/approval.d.ts +13 -0
  23. package/dist/approval.d.ts.map +1 -1
  24. package/dist/approval.js +25 -2
  25. package/dist/approval.js.map +1 -1
  26. package/dist/autonomy/runs.d.ts +33 -0
  27. package/dist/autonomy/runs.d.ts.map +1 -0
  28. package/dist/autonomy/runs.js +106 -0
  29. package/dist/autonomy/runs.js.map +1 -0
  30. package/dist/channels/feishu.d.ts.map +1 -1
  31. package/dist/channels/feishu.js +65 -0
  32. package/dist/channels/feishu.js.map +1 -1
  33. package/dist/channels/router.d.ts +7 -0
  34. package/dist/channels/router.d.ts.map +1 -1
  35. package/dist/channels/router.js +1 -1
  36. package/dist/channels/router.js.map +1 -1
  37. package/dist/cli/agents-pty.d.ts +18 -0
  38. package/dist/cli/agents-pty.d.ts.map +1 -0
  39. package/dist/cli/agents-pty.js +182 -0
  40. package/dist/cli/agents-pty.js.map +1 -0
  41. package/dist/cli/agents.d.ts +2 -0
  42. package/dist/cli/agents.d.ts.map +1 -0
  43. package/dist/cli/agents.js +65 -0
  44. package/dist/cli/agents.js.map +1 -0
  45. package/dist/cli/consent.d.ts +2 -0
  46. package/dist/cli/consent.d.ts.map +1 -0
  47. package/dist/cli/consent.js +57 -0
  48. package/dist/cli/consent.js.map +1 -0
  49. package/dist/cli/model.d.ts +2 -0
  50. package/dist/cli/model.d.ts.map +1 -0
  51. package/dist/cli/model.js +121 -0
  52. package/dist/cli/model.js.map +1 -0
  53. package/dist/cli/sense.d.ts +2 -0
  54. package/dist/cli/sense.d.ts.map +1 -0
  55. package/dist/cli/sense.js +36 -0
  56. package/dist/cli/sense.js.map +1 -0
  57. package/dist/cli.js +117 -12
  58. package/dist/cli.js.map +1 -1
  59. package/dist/consent/blacklist.d.ts +28 -0
  60. package/dist/consent/blacklist.d.ts.map +1 -0
  61. package/dist/consent/blacklist.js +78 -0
  62. package/dist/consent/blacklist.js.map +1 -0
  63. package/dist/consent/store.d.ts +45 -0
  64. package/dist/consent/store.d.ts.map +1 -0
  65. package/dist/consent/store.js +126 -0
  66. package/dist/consent/store.js.map +1 -0
  67. package/dist/control/policy.d.ts +13 -0
  68. package/dist/control/policy.d.ts.map +1 -0
  69. package/dist/control/policy.js +57 -0
  70. package/dist/control/policy.js.map +1 -0
  71. package/dist/heartbeat/runner.d.ts.map +1 -1
  72. package/dist/heartbeat/runner.js +70 -14
  73. package/dist/heartbeat/runner.js.map +1 -1
  74. package/dist/idle/runner.d.ts.map +1 -1
  75. package/dist/idle/runner.js +87 -17
  76. package/dist/idle/runner.js.map +1 -1
  77. package/dist/integrations/aider/observer.d.ts +21 -1
  78. package/dist/integrations/aider/observer.d.ts.map +1 -1
  79. package/dist/integrations/aider/observer.js +110 -1
  80. package/dist/integrations/aider/observer.js.map +1 -1
  81. package/dist/integrations/claude-code/liveness.d.ts +10 -0
  82. package/dist/integrations/claude-code/liveness.d.ts.map +1 -0
  83. package/dist/integrations/claude-code/liveness.js +62 -0
  84. package/dist/integrations/claude-code/liveness.js.map +1 -0
  85. package/dist/integrations/claude-code/watcher.d.ts +39 -4
  86. package/dist/integrations/claude-code/watcher.d.ts.map +1 -1
  87. package/dist/integrations/claude-code/watcher.js +94 -57
  88. package/dist/integrations/claude-code/watcher.js.map +1 -1
  89. package/dist/integrations/codex/observer.d.ts +19 -6
  90. package/dist/integrations/codex/observer.d.ts.map +1 -1
  91. package/dist/integrations/codex/observer.js +228 -4
  92. package/dist/integrations/codex/observer.js.map +1 -1
  93. package/dist/integrations/dispatch-ledger.d.ts +30 -1
  94. package/dist/integrations/dispatch-ledger.d.ts.map +1 -1
  95. package/dist/integrations/dispatch-ledger.js +75 -9
  96. package/dist/integrations/dispatch-ledger.js.map +1 -1
  97. package/dist/integrations/git/branch.d.ts +11 -0
  98. package/dist/integrations/git/branch.d.ts.map +1 -0
  99. package/dist/integrations/git/branch.js +49 -0
  100. package/dist/integrations/git/branch.js.map +1 -0
  101. package/dist/integrations/git/observer.d.ts +39 -0
  102. package/dist/integrations/git/observer.d.ts.map +1 -0
  103. package/dist/integrations/git/observer.js +252 -0
  104. package/dist/integrations/git/observer.js.map +1 -0
  105. package/dist/integrations/github-pr/observer.d.ts.map +1 -1
  106. package/dist/integrations/github-pr/observer.js +7 -2
  107. package/dist/integrations/github-pr/observer.js.map +1 -1
  108. package/dist/integrations/hub.d.ts +8 -0
  109. package/dist/integrations/hub.d.ts.map +1 -1
  110. package/dist/integrations/hub.js +39 -1
  111. package/dist/integrations/hub.js.map +1 -1
  112. package/dist/integrations/managed/observer.d.ts +17 -0
  113. package/dist/integrations/managed/observer.d.ts.map +1 -0
  114. package/dist/integrations/managed/observer.js +46 -0
  115. package/dist/integrations/managed/observer.js.map +1 -0
  116. package/dist/integrations/opencode/observer.d.ts +53 -5
  117. package/dist/integrations/opencode/observer.d.ts.map +1 -1
  118. package/dist/integrations/opencode/observer.js +242 -20
  119. package/dist/integrations/opencode/observer.js.map +1 -1
  120. package/dist/integrations/pty/observer.d.ts +25 -0
  121. package/dist/integrations/pty/observer.d.ts.map +1 -0
  122. package/dist/integrations/pty/observer.js +48 -0
  123. package/dist/integrations/pty/observer.js.map +1 -0
  124. package/dist/integrations/registry.d.ts.map +1 -1
  125. package/dist/integrations/registry.js +5 -0
  126. package/dist/integrations/registry.js.map +1 -1
  127. package/dist/integrations/shell/observer.d.ts +33 -0
  128. package/dist/integrations/shell/observer.d.ts.map +1 -0
  129. package/dist/integrations/shell/observer.js +223 -0
  130. package/dist/integrations/shell/observer.js.map +1 -0
  131. package/dist/integrations/takoapi/a2a.d.ts +38 -0
  132. package/dist/integrations/takoapi/a2a.d.ts.map +1 -0
  133. package/dist/integrations/takoapi/a2a.js +70 -0
  134. package/dist/integrations/takoapi/a2a.js.map +1 -0
  135. package/dist/integrations/takoapi/ledger.d.ts +32 -0
  136. package/dist/integrations/takoapi/ledger.d.ts.map +1 -0
  137. package/dist/integrations/takoapi/ledger.js +96 -0
  138. package/dist/integrations/takoapi/ledger.js.map +1 -0
  139. package/dist/integrations/takoapi/observer.d.ts +39 -0
  140. package/dist/integrations/takoapi/observer.d.ts.map +1 -0
  141. package/dist/integrations/takoapi/observer.js +102 -0
  142. package/dist/integrations/takoapi/observer.js.map +1 -0
  143. package/dist/integrations/types.d.ts +17 -0
  144. package/dist/integrations/types.d.ts.map +1 -1
  145. package/dist/mcp/client.d.ts +5 -0
  146. package/dist/mcp/client.d.ts.map +1 -1
  147. package/dist/mcp/client.js +1 -1
  148. package/dist/mcp/client.js.map +1 -1
  149. package/dist/memory/embedding.d.ts +45 -0
  150. package/dist/memory/embedding.d.ts.map +1 -0
  151. package/dist/memory/embedding.js +139 -0
  152. package/dist/memory/embedding.js.map +1 -0
  153. package/dist/memory/search_tool.d.ts.map +1 -1
  154. package/dist/memory/search_tool.js +6 -2
  155. package/dist/memory/search_tool.js.map +1 -1
  156. package/dist/memory/vector.d.ts +14 -3
  157. package/dist/memory/vector.d.ts.map +1 -1
  158. package/dist/memory/vector.js +50 -0
  159. package/dist/memory/vector.js.map +1 -1
  160. package/dist/model/local.d.ts +43 -0
  161. package/dist/model/local.d.ts.map +1 -0
  162. package/dist/model/local.js +118 -0
  163. package/dist/model/local.js.map +1 -0
  164. package/dist/model/plan-usage.d.ts +41 -0
  165. package/dist/model/plan-usage.d.ts.map +1 -0
  166. package/dist/model/plan-usage.js +168 -0
  167. package/dist/model/plan-usage.js.map +1 -0
  168. package/dist/model/plans.d.ts +73 -0
  169. package/dist/model/plans.d.ts.map +1 -0
  170. package/dist/model/plans.js +246 -0
  171. package/dist/model/plans.js.map +1 -0
  172. package/dist/orchestrator/recent-recap.d.ts +2 -0
  173. package/dist/orchestrator/recent-recap.d.ts.map +1 -0
  174. package/dist/orchestrator/recent-recap.js +20 -0
  175. package/dist/orchestrator/recent-recap.js.map +1 -0
  176. package/dist/providers/anthropic.d.ts +1 -0
  177. package/dist/providers/anthropic.d.ts.map +1 -1
  178. package/dist/providers/anthropic.js +10 -2
  179. package/dist/providers/anthropic.js.map +1 -1
  180. package/dist/providers/fallback.d.ts +23 -0
  181. package/dist/providers/fallback.d.ts.map +1 -0
  182. package/dist/providers/fallback.js +29 -0
  183. package/dist/providers/fallback.js.map +1 -0
  184. package/dist/providers/gemini.d.ts +2 -0
  185. package/dist/providers/gemini.d.ts.map +1 -1
  186. package/dist/providers/gemini.js +24 -10
  187. package/dist/providers/gemini.js.map +1 -1
  188. package/dist/providers/openai.d.ts.map +1 -1
  189. package/dist/providers/openai.js +4 -1
  190. package/dist/providers/openai.js.map +1 -1
  191. package/dist/providers/registry.d.ts +18 -2
  192. package/dist/providers/registry.d.ts.map +1 -1
  193. package/dist/providers/registry.js +56 -9
  194. package/dist/providers/registry.js.map +1 -1
  195. package/dist/reflect.d.ts +55 -0
  196. package/dist/reflect.d.ts.map +1 -1
  197. package/dist/reflect.js +148 -54
  198. package/dist/reflect.js.map +1 -1
  199. package/dist/sense/log.d.ts +9 -0
  200. package/dist/sense/log.d.ts.map +1 -0
  201. package/dist/sense/log.js +63 -0
  202. package/dist/sense/log.js.map +1 -0
  203. package/dist/sense/screen.d.ts +43 -0
  204. package/dist/sense/screen.d.ts.map +1 -0
  205. package/dist/sense/screen.js +107 -0
  206. package/dist/sense/screen.js.map +1 -0
  207. package/dist/sense/service.d.ts +16 -0
  208. package/dist/sense/service.d.ts.map +1 -0
  209. package/dist/sense/service.js +33 -0
  210. package/dist/sense/service.js.map +1 -0
  211. package/dist/sense/types.d.ts +35 -0
  212. package/dist/sense/types.d.ts.map +1 -0
  213. package/dist/sense/types.js +11 -0
  214. package/dist/sense/types.js.map +1 -0
  215. package/dist/sense/voice.d.ts +28 -0
  216. package/dist/sense/voice.d.ts.map +1 -0
  217. package/dist/sense/voice.js +64 -0
  218. package/dist/sense/voice.js.map +1 -0
  219. package/dist/soul/git.d.ts.map +1 -1
  220. package/dist/soul/git.js +35 -16
  221. package/dist/soul/git.js.map +1 -1
  222. package/dist/soul/store.d.ts +22 -0
  223. package/dist/soul/store.d.ts.map +1 -1
  224. package/dist/soul/store.js +69 -14
  225. package/dist/soul/store.js.map +1 -1
  226. package/dist/soul/summary.d.ts +10 -0
  227. package/dist/soul/summary.d.ts.map +1 -0
  228. package/dist/soul/summary.js +57 -0
  229. package/dist/soul/summary.js.map +1 -0
  230. package/dist/soul/tools.d.ts.map +1 -1
  231. package/dist/soul/tools.js +13 -24
  232. package/dist/soul/tools.js.map +1 -1
  233. package/dist/soul/types.d.ts +9 -0
  234. package/dist/soul/types.d.ts.map +1 -1
  235. package/dist/soul/types.js.map +1 -1
  236. package/dist/subagent.d.ts +7 -0
  237. package/dist/subagent.d.ts.map +1 -1
  238. package/dist/subagent.js +3 -1
  239. package/dist/subagent.js.map +1 -1
  240. package/dist/tools/dispatch_agent.d.ts +13 -1
  241. package/dist/tools/dispatch_agent.d.ts.map +1 -1
  242. package/dist/tools/dispatch_agent.js +56 -12
  243. package/dist/tools/dispatch_agent.js.map +1 -1
  244. package/dist/tools/dispatch_status.d.ts +22 -0
  245. package/dist/tools/dispatch_status.d.ts.map +1 -0
  246. package/dist/tools/dispatch_status.js +57 -0
  247. package/dist/tools/dispatch_status.js.map +1 -0
  248. package/dist/tools/registry.d.ts +29 -0
  249. package/dist/tools/registry.d.ts.map +1 -1
  250. package/dist/tools/registry.js +67 -0
  251. package/dist/tools/registry.js.map +1 -1
  252. package/dist/tools/run_on_plan.d.ts +46 -0
  253. package/dist/tools/run_on_plan.d.ts.map +1 -0
  254. package/dist/tools/run_on_plan.js +89 -0
  255. package/dist/tools/run_on_plan.js.map +1 -0
  256. package/dist/tools/takoapi.d.ts +60 -0
  257. package/dist/tools/takoapi.d.ts.map +1 -0
  258. package/dist/tools/takoapi.js +181 -0
  259. package/dist/tools/takoapi.js.map +1 -0
  260. package/dist/tools/validate.d.ts +22 -0
  261. package/dist/tools/validate.d.ts.map +1 -0
  262. package/dist/tools/validate.js +50 -0
  263. package/dist/tools/validate.js.map +1 -0
  264. package/dist/web/agent-roster.d.ts +56 -0
  265. package/dist/web/agent-roster.d.ts.map +1 -0
  266. package/dist/web/agent-roster.js +109 -0
  267. package/dist/web/agent-roster.js.map +1 -0
  268. package/dist/web/devices.d.ts +27 -0
  269. package/dist/web/devices.d.ts.map +1 -0
  270. package/dist/web/devices.js +113 -0
  271. package/dist/web/devices.js.map +1 -0
  272. package/dist/web/island.d.ts +5 -1
  273. package/dist/web/island.d.ts.map +1 -1
  274. package/dist/web/island.js +410 -63
  275. package/dist/web/island.js.map +1 -1
  276. package/dist/web/lisa-client.d.ts +20 -0
  277. package/dist/web/lisa-client.d.ts.map +1 -0
  278. package/dist/web/lisa-client.js +1358 -0
  279. package/dist/web/lisa-client.js.map +1 -0
  280. package/dist/web/lisa-css.d.ts +13 -0
  281. package/dist/web/lisa-css.d.ts.map +1 -0
  282. package/dist/web/lisa-css.js +1163 -0
  283. package/dist/web/lisa-css.js.map +1 -0
  284. package/dist/web/lisa-html.d.ts +1 -1
  285. package/dist/web/lisa-html.d.ts.map +1 -1
  286. package/dist/web/lisa-html.js +15 -2136
  287. package/dist/web/lisa-html.js.map +1 -1
  288. package/dist/web/push.d.ts +76 -0
  289. package/dist/web/push.d.ts.map +1 -0
  290. package/dist/web/push.js +163 -0
  291. package/dist/web/push.js.map +1 -0
  292. package/dist/web/server.d.ts +19 -0
  293. package/dist/web/server.d.ts.map +1 -1
  294. package/dist/web/server.js +878 -64
  295. package/dist/web/server.js.map +1 -1
  296. package/package.json +5 -2
@@ -16,14 +16,24 @@
16
16
  * - latest message role=assistant, not completed → working (mid-turn)
17
17
  * - latest message role=user → working (its turn)
18
18
  *
19
+ * TIER 2 (visibility ≥ "activity"): in addition to state we extract STRUCTURAL
20
+ * activity from the session's most recent messages — tool NAMES, file PATHS,
21
+ * the last shell command's argv[0], an error label, turn count. The extraction
22
+ * is a pure function (`extractActivity`) over already-parsed message blobs, so
23
+ * it is unit-testable without sqlite and keeps the same 60-second-audit
24
+ * privacy property as the Claude Code parser.
25
+ *
19
26
  * PRIVACY: only structural fields — session title, directory, token counts,
20
- * message role/role-timing/error flag. Never message text or tool arguments.
27
+ * message role/role-timing/error flag, tool NAMES, file PATHS, command argv[0].
28
+ * NEVER message text, prompt/reply prose, tool inputs beyond known path keys,
29
+ * or full command lines beyond argv[0].
21
30
  * DISABLED by default; opt in via ~/.lisa/agents.json. Graceful no-op if
22
31
  * `sqlite3` or the DB is absent (every read failure → empty, never throws).
23
32
  */
24
33
  import { EventEmitter } from "node:events";
25
- import type { AgentIntegrationConfig, AgentObserver, AgentSession } from "../types.js";
26
- /** A row of the adapter's query session columns + the newest message's data. */
34
+ import { type GitBranchResolver } from "../git/branch.js";
35
+ import type { AgentIntegrationConfig, AgentObserver, AgentSession, SessionActivity } from "../types.js";
36
+ /** A row of the adapter's query — session columns + recent message data. */
27
37
  export interface OpencodeRow {
28
38
  id: string;
29
39
  directory?: string | null;
@@ -36,9 +46,40 @@ export interface OpencodeRow {
36
46
  tokens_output?: number | null;
37
47
  /** JSON string of the latest message's `data` column, or null. */
38
48
  last_msg?: string | null;
49
+ /**
50
+ * JSON-array string of the session's most-recent message `data` blobs
51
+ * (oldest → newest), or null. Only populated/used at visibility ≥ activity.
52
+ */
53
+ recent_msgs?: string | null;
39
54
  }
40
- /** Map one query row to the normalized session. Pure — the unit under test. */
41
- export declare function mapOpencodeSession(row: OpencodeRow): AgentSession;
55
+ /**
56
+ * Map one query row to the normalized session. Pure — the unit under test.
57
+ *
58
+ * When `computeActivity` is true (visibility ≥ "activity") we additionally
59
+ * scan the session's recent messages for structural activity. Otherwise we
60
+ * stay metadata-only, surfacing just token counts (the prior behaviour).
61
+ */
62
+ export declare function mapOpencodeSession(row: OpencodeRow, computeActivity?: boolean): AgentSession;
63
+ /** Tolerantly parse the `recent_msgs` JSON-array string into message objects. */
64
+ export declare function parseRecentMessages(raw: string | null | undefined): Record<string, unknown>[];
65
+ /**
66
+ * Pure Tier-2 extractor — STRUCTURAL metadata only.
67
+ *
68
+ * Input: an array of OpenCode message `data` objects, oldest → newest. Each
69
+ * message may carry a `parts` array; a tool part has `type: "tool"`, a tool
70
+ * name (`tool`), and a `state` object whose `input` may contain a file path
71
+ * and/or a command. We read ONLY:
72
+ * - tool NAMES (part `.tool` / `.name`)
73
+ * - file PATHS (part `state.input[path|filePath|file|filename]`)
74
+ * - command argv[0] (first token of a bash/shell tool's `state.input.command`)
75
+ * - error label (message `.error`)
76
+ * - turn count (one per message)
77
+ * We NEVER read text parts, prompt/reply prose, the rest of a tool's input,
78
+ * or a command beyond its argv[0]. (Privacy-tested in observer.test.ts.)
79
+ *
80
+ * Returns undefined when there is nothing structural to report.
81
+ */
82
+ export declare function extractActivity(messages: Record<string, unknown>[]): SessionActivity | undefined;
42
83
  interface LastMsg {
43
84
  role?: string;
44
85
  completed?: boolean;
@@ -47,12 +88,15 @@ interface LastMsg {
47
88
  }
48
89
  /** Tolerant parse of an OpenCode message `data` JSON blob. */
49
90
  export declare function parseLastMessage(raw: string | null | undefined): LastMsg;
91
+ export declare function buildQuery(withActivity: boolean): string;
50
92
  export interface OpencodeObserverOptions extends AgentIntegrationConfig {
51
93
  /** Override the row fetcher (tests). */
52
94
  fetchRows?: () => Promise<OpencodeRow[]>;
53
95
  pollMs?: number;
54
96
  activeWindowMs?: number;
55
97
  now?: () => number;
98
+ /** O-D1: derive gitBranch from a session's directory (injectable for tests). */
99
+ gitBranch?: GitBranchResolver;
56
100
  }
57
101
  export declare class OpencodeObserver extends EventEmitter implements AgentObserver {
58
102
  readonly agent = "opencode";
@@ -63,6 +107,10 @@ export declare class OpencodeObserver extends EventEmitter implements AgentObser
63
107
  private readonly pollMs;
64
108
  private readonly windowMs;
65
109
  private readonly now;
110
+ /** Tier-2 gate: only at visibility ≥ "activity" do we deep-extract. */
111
+ private readonly computeActivity;
112
+ /** O-D1: derive gitBranch from a session's directory (OpenCode stores none). */
113
+ private readonly resolveBranch;
66
114
  constructor(cfg: OpencodeObserverOptions);
67
115
  start(emit: (s: AgentSession) => void): Promise<void>;
68
116
  list(): AgentSession[];
@@ -1 +1 @@
1
- {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/integrations/opencode/observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,YAAY,EAEb,MAAM,aAAa,CAAC;AAQrB,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAWD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAoDjE;AAED,UAAU,OAAO;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAyBxE;AAyBD,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAiB,SAAQ,YAAa,YAAW,aAAa;IACzE,QAAQ,CAAC,KAAK,cAAc;IAC5B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,GAAG,EAAE,uBAAuB;IAYlC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D,IAAI,IAAI,YAAY,EAAE;IAQhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,2DAA2D;IACrD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB5B"}
1
+ {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/integrations/opencode/observer.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,17 @@
16
16
  * - latest message role=assistant, not completed → working (mid-turn)
17
17
  * - latest message role=user → working (its turn)
18
18
  *
19
+ * TIER 2 (visibility ≥ "activity"): in addition to state we extract STRUCTURAL
20
+ * activity from the session's most recent messages — tool NAMES, file PATHS,
21
+ * the last shell command's argv[0], an error label, turn count. The extraction
22
+ * is a pure function (`extractActivity`) over already-parsed message blobs, so
23
+ * it is unit-testable without sqlite and keeps the same 60-second-audit
24
+ * privacy property as the Claude Code parser.
25
+ *
19
26
  * PRIVACY: only structural fields — session title, directory, token counts,
20
- * message role/role-timing/error flag. Never message text or tool arguments.
27
+ * message role/role-timing/error flag, tool NAMES, file PATHS, command argv[0].
28
+ * NEVER message text, prompt/reply prose, tool inputs beyond known path keys,
29
+ * or full command lines beyond argv[0].
21
30
  * DISABLED by default; opt in via ~/.lisa/agents.json. Graceful no-op if
22
31
  * `sqlite3` or the DB is absent (every read failure → empty, never throws).
23
32
  */
@@ -27,10 +36,19 @@ import { EventEmitter } from "node:events";
27
36
  import { execFile } from "node:child_process";
28
37
  import { promisify } from "node:util";
29
38
  import { registerIntegration } from "../registry.js";
39
+ import { cwdGitBranch } from "../git/branch.js";
30
40
  const pexec = promisify(execFile);
31
41
  const POLL_MS_DEFAULT = 60_000;
32
42
  const ACTIVE_WINDOW_MS_DEFAULT = 6 * 60 * 60_000; // 6h
33
43
  const MAX_LISTED = 12;
44
+ // Tier-2 extraction caps (mirror the Claude Code parser).
45
+ const MAX_TOOLS = 6;
46
+ const MAX_FILES = 10;
47
+ /** How many of a session's most-recent messages to scan for activity.
48
+ * O-D2: 40 (was 20) so long sessions don't under-count tools/files. */
49
+ const RECENT_MSGS = 40;
50
+ /** Known path-bearing keys in a tool part's input. We NEVER read other keys. */
51
+ const PATH_KEYS = ["path", "filePath", "file", "filename"];
34
52
  function defaultDbPath(cfg) {
35
53
  const home = cfg.home
36
54
  ? cfg.home.replace(/^~/, os.homedir())
@@ -39,8 +57,14 @@ function defaultDbPath(cfg) {
39
57
  : path.join(os.homedir(), ".local", "share", "opencode");
40
58
  return path.join(home, "opencode.db");
41
59
  }
42
- /** Map one query row to the normalized session. Pure — the unit under test. */
43
- export function mapOpencodeSession(row) {
60
+ /**
61
+ * Map one query row to the normalized session. Pure — the unit under test.
62
+ *
63
+ * When `computeActivity` is true (visibility ≥ "activity") we additionally
64
+ * scan the session's recent messages for structural activity. Otherwise we
65
+ * stay metadata-only, surfacing just token counts (the prior behaviour).
66
+ */
67
+ export function mapOpencodeSession(row, computeActivity = false) {
44
68
  const directory = row.directory ?? undefined;
45
69
  const lastMtime = typeof row.time_updated === "number" ? row.time_updated : 0;
46
70
  let state;
@@ -85,16 +109,179 @@ export function mapOpencodeSession(row) {
85
109
  };
86
110
  const tin = row.tokens_input ?? 0;
87
111
  const tout = row.tokens_output ?? 0;
88
- if (tin || tout) {
89
- session.activity = {
90
- turnCount: 0,
91
- lastTools: [],
92
- filesTouched: [],
93
- tokens: { input: tin, output: tout },
94
- };
112
+ const tokens = tin || tout ? { input: tin, output: tout } : undefined;
113
+ if (computeActivity) {
114
+ // Deep (Tier-2) path: scan recent messages for structural metadata.
115
+ // The session-row token counts are authoritative, so they win over any
116
+ // per-message usage the extractor may also see.
117
+ const deep = extractActivity(parseRecentMessages(row.recent_msgs));
118
+ if (deep || tokens) {
119
+ session.activity = { ...(deep ?? EMPTY_ACTIVITY), ...(tokens ? { tokens } : {}) };
120
+ }
121
+ }
122
+ else if (tokens) {
123
+ // Metadata-only path: surface tokens for cost tracking, nothing else.
124
+ session.activity = { turnCount: 0, lastTools: [], filesTouched: [], tokens };
95
125
  }
96
126
  return session;
97
127
  }
128
+ const EMPTY_ACTIVITY = { turnCount: 0, lastTools: [], filesTouched: [] };
129
+ /** Tolerantly parse the `recent_msgs` JSON-array string into message objects. */
130
+ export function parseRecentMessages(raw) {
131
+ if (!raw)
132
+ return [];
133
+ let arr;
134
+ try {
135
+ arr = JSON.parse(raw);
136
+ }
137
+ catch {
138
+ return [];
139
+ }
140
+ if (!Array.isArray(arr))
141
+ return [];
142
+ const out = [];
143
+ for (const el of arr) {
144
+ // Each element is itself the message `data` column — a JSON string in the
145
+ // DB. Accept both an already-parsed object and a nested JSON string.
146
+ if (el && typeof el === "object") {
147
+ out.push(el);
148
+ }
149
+ else if (typeof el === "string") {
150
+ try {
151
+ const o = JSON.parse(el);
152
+ if (o && typeof o === "object")
153
+ out.push(o);
154
+ }
155
+ catch {
156
+ /* skip unparseable */
157
+ }
158
+ }
159
+ }
160
+ return out;
161
+ }
162
+ /**
163
+ * Pure Tier-2 extractor — STRUCTURAL metadata only.
164
+ *
165
+ * Input: an array of OpenCode message `data` objects, oldest → newest. Each
166
+ * message may carry a `parts` array; a tool part has `type: "tool"`, a tool
167
+ * name (`tool`), and a `state` object whose `input` may contain a file path
168
+ * and/or a command. We read ONLY:
169
+ * - tool NAMES (part `.tool` / `.name`)
170
+ * - file PATHS (part `state.input[path|filePath|file|filename]`)
171
+ * - command argv[0] (first token of a bash/shell tool's `state.input.command`)
172
+ * - error label (message `.error`)
173
+ * - turn count (one per message)
174
+ * We NEVER read text parts, prompt/reply prose, the rest of a tool's input,
175
+ * or a command beyond its argv[0]. (Privacy-tested in observer.test.ts.)
176
+ *
177
+ * Returns undefined when there is nothing structural to report.
178
+ */
179
+ export function extractActivity(messages) {
180
+ if (!Array.isArray(messages) || messages.length === 0)
181
+ return undefined;
182
+ let turnCount = 0;
183
+ const toolsInOrder = [];
184
+ const files = [];
185
+ let lastCommandName;
186
+ let lastError;
187
+ for (const msg of messages) {
188
+ if (!msg || typeof msg !== "object")
189
+ continue;
190
+ turnCount++;
191
+ const errLabel = errorReasonOf(msg);
192
+ if (errLabel)
193
+ lastError = errLabel;
194
+ const parts = msg.parts;
195
+ if (!Array.isArray(parts))
196
+ continue;
197
+ for (const part of parts) {
198
+ if (!part || typeof part !== "object")
199
+ continue;
200
+ const p = part;
201
+ // ONLY tool parts. text parts (prompts/replies) are skipped entirely —
202
+ // we never read their `.text`.
203
+ if (readString(p.type) !== "tool")
204
+ continue;
205
+ const name = readString(p.tool) ?? readString(p.name);
206
+ if (!name)
207
+ continue;
208
+ toolsInOrder.push(name);
209
+ // A tool part's input lives under `state.input` (newer opencode) or, as a
210
+ // fallback, directly on the part. We read ONLY known path keys + command.
211
+ const input = toolInput(p);
212
+ if (!input)
213
+ continue;
214
+ for (const k of PATH_KEYS) {
215
+ const v = input[k];
216
+ if (typeof v === "string" && v) {
217
+ files.push(v);
218
+ break;
219
+ }
220
+ }
221
+ if (isShellTool(name)) {
222
+ const cmd = input.command;
223
+ if (typeof cmd === "string" && cmd.trim()) {
224
+ // argv[0] ONLY — never the full command line.
225
+ lastCommandName = cmd.trim().split(/\s+/)[0];
226
+ }
227
+ }
228
+ }
229
+ }
230
+ if (turnCount === 0 && toolsInOrder.length === 0)
231
+ return undefined;
232
+ return {
233
+ turnCount,
234
+ lastTools: toolsInOrder.slice(-MAX_TOOLS),
235
+ filesTouched: dedupeKeepRecent(files, MAX_FILES),
236
+ lastCommandName,
237
+ lastError,
238
+ };
239
+ }
240
+ /** Pull a tool part's input object from `state.input` or the part itself. */
241
+ function toolInput(part) {
242
+ const state = part.state;
243
+ if (state && typeof state === "object") {
244
+ const inp = state.input;
245
+ if (inp && typeof inp === "object")
246
+ return inp;
247
+ }
248
+ const direct = part.input;
249
+ if (direct && typeof direct === "object")
250
+ return direct;
251
+ return undefined;
252
+ }
253
+ function isShellTool(name) {
254
+ const n = name.toLowerCase();
255
+ return n === "bash" || n === "shell";
256
+ }
257
+ /** Short error label for a message, mirroring parseLastMessage's logic. */
258
+ function errorReasonOf(msg) {
259
+ const err = msg.error;
260
+ if (!err || typeof err !== "object")
261
+ return undefined;
262
+ const m = err.data?.message;
263
+ if (typeof m === "string")
264
+ return m.slice(0, 80);
265
+ if (typeof err.name === "string")
266
+ return err.name;
267
+ return "error";
268
+ }
269
+ function readString(v) {
270
+ return typeof v === "string" ? v : undefined;
271
+ }
272
+ /** Dedupe paths keeping each one's most-recent position; cap to `max`. */
273
+ function dedupeKeepRecent(items, max) {
274
+ const seen = new Set();
275
+ const out = [];
276
+ for (let i = items.length - 1; i >= 0; i--) {
277
+ const it = items[i];
278
+ if (!seen.has(it)) {
279
+ seen.add(it);
280
+ out.unshift(it);
281
+ }
282
+ }
283
+ return out.slice(-max);
284
+ }
98
285
  /** Tolerant parse of an OpenCode message `data` JSON blob. */
99
286
  export function parseLastMessage(raw) {
100
287
  if (!raw)
@@ -124,16 +311,35 @@ export function parseLastMessage(raw) {
124
311
  }
125
312
  return { role, completed, error, errorReason };
126
313
  }
127
- const QUERY = "SELECT s.id AS id, s.directory AS directory, s.title AS title, s.agent AS agent, " +
128
- "s.time_updated AS time_updated, s.time_archived AS time_archived, " +
129
- "s.time_compacting AS time_compacting, s.tokens_input AS tokens_input, " +
130
- "s.tokens_output AS tokens_output, " +
131
- "(SELECT m.data FROM message m WHERE m.session_id = s.id ORDER BY m.time_created DESC LIMIT 1) AS last_msg " +
132
- "FROM session s ORDER BY s.time_updated DESC LIMIT 40;";
314
+ const COL_LAST_MSG = "(SELECT m.data FROM message m WHERE m.session_id = s.id ORDER BY m.time_created DESC LIMIT 1) AS last_msg";
315
+ // Tier-2 only: the most-recent N messages' `data`, aggregated into a JSON array
316
+ // (oldest newest via the outer ORDER BY). json_group_array preserves the
317
+ // subquery order. Each element is the raw `data` JSON string; extractActivity's
318
+ // parseRecentMessages tolerates that.
319
+ const COL_RECENT_MSGS = "(SELECT json_group_array(d) FROM " +
320
+ `(SELECT m.data AS d FROM message m WHERE m.session_id = s.id ORDER BY m.time_created DESC LIMIT ${RECENT_MSGS}) ` +
321
+ "ORDER BY rowid DESC) AS recent_msgs";
322
+ export function buildQuery(withActivity) {
323
+ const cols = [
324
+ "s.id AS id",
325
+ "s.directory AS directory",
326
+ "s.title AS title",
327
+ "s.agent AS agent",
328
+ "s.time_updated AS time_updated",
329
+ "s.time_archived AS time_archived",
330
+ "s.time_compacting AS time_compacting",
331
+ "s.tokens_input AS tokens_input",
332
+ "s.tokens_output AS tokens_output",
333
+ COL_LAST_MSG,
334
+ ];
335
+ if (withActivity)
336
+ cols.push(COL_RECENT_MSGS);
337
+ return `SELECT ${cols.join(", ")} FROM session s ORDER BY s.time_updated DESC LIMIT 40;`;
338
+ }
133
339
  /** Read sessions from the OpenCode DB via the system sqlite3 CLI. [] on failure. */
134
- async function sqliteFetch(dbPath) {
340
+ async function sqliteFetch(dbPath, withActivity) {
135
341
  try {
136
- const { stdout } = await pexec("sqlite3", ["-json", "-readonly", dbPath, QUERY], {
342
+ const { stdout } = await pexec("sqlite3", ["-json", "-readonly", dbPath, buildQuery(withActivity)], {
137
343
  maxBuffer: 16 * 1024 * 1024,
138
344
  timeout: 15_000,
139
345
  });
@@ -155,10 +361,19 @@ export class OpencodeObserver extends EventEmitter {
155
361
  pollMs;
156
362
  windowMs;
157
363
  now;
364
+ /** Tier-2 gate: only at visibility ≥ "activity" do we deep-extract. */
365
+ computeActivity;
366
+ /** O-D1: derive gitBranch from a session's directory (OpenCode stores none). */
367
+ resolveBranch;
158
368
  constructor(cfg) {
159
369
  super();
160
370
  const db = defaultDbPath(cfg);
161
- this.fetcher = cfg.fetchRows ?? (() => sqliteFetch(db));
371
+ // Tier 2: compute structural activity when visibility is "activity" or
372
+ // "intent". At "metadata"/"off" we stay metadata-only (cheaper, and the
373
+ // privacy-minimal default) — same gate as the Claude Code observer.
374
+ this.computeActivity = cfg.visibility === "activity" || cfg.visibility === "intent";
375
+ this.resolveBranch = cfg.gitBranch ?? cwdGitBranch;
376
+ this.fetcher = cfg.fetchRows ?? (() => sqliteFetch(db, this.computeActivity));
162
377
  this.pollMs = typeof cfg.pollMs === "number" && cfg.pollMs > 0 ? cfg.pollMs : POLL_MS_DEFAULT;
163
378
  this.windowMs =
164
379
  typeof cfg.activeWindowMs === "number" && cfg.activeWindowMs > 0
@@ -194,7 +409,14 @@ export class OpencodeObserver extends EventEmitter {
194
409
  return;
195
410
  }
196
411
  for (const row of rows) {
197
- const s = mapOpencodeSession(row);
412
+ const s = mapOpencodeSession(row, this.computeActivity);
413
+ // O-D1: enrich with the branch derived from the session's cwd.
414
+ if (this.computeActivity && s.cwd) {
415
+ const gitBranch = await this.resolveBranch(s.cwd);
416
+ if (gitBranch) {
417
+ s.activity = { ...(s.activity ?? { turnCount: 0, lastTools: [], filesTouched: [] }), gitBranch };
418
+ }
419
+ }
198
420
  const prev = this.sessions.get(s.sessionId);
199
421
  this.sessions.set(s.sessionId, s);
200
422
  if (this.emitFn && (!prev || prev.state !== s.state || prev.lastMtime !== s.lastMtime)) {
@@ -1 +1 @@
1
- {"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../src/integrations/opencode/observer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../src/integrations/opencode/observer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * PTY-agent observer — surfaces LISA's PTY-backed CLI agents (Stage C spike)
3
+ * in the orchestrator hub, so a real `claude`/`codex` LISA spawned under a
4
+ * pseudo-terminal appears in the roster (island / GUI / menu bar) under its
5
+ * REAL kind ("claude-code"/"codex"), marked controllable so the UI offers
6
+ * send/cancel. Reads the in-process ptyRegistry; emits on its "update" event.
7
+ *
8
+ * The registry is empty unless the spike is enabled (LISA_PTY_AGENTS=1), so at
9
+ * rest this observer contributes nothing.
10
+ *
11
+ * PRIVACY: the roster session is structural only (kind/state/cli) — the captured
12
+ * terminal output is NEVER folded in here; it's served separately, on demand,
13
+ * via /api/agents/pty/<id>/output.
14
+ */
15
+ import { EventEmitter } from "node:events";
16
+ import type { AgentObserver, AgentSession } from "../types.js";
17
+ export declare class PtyObserver extends EventEmitter implements AgentObserver {
18
+ readonly agent = "pty";
19
+ private emitFn;
20
+ private readonly onUpdate;
21
+ start(emit: (s: AgentSession) => void): Promise<void>;
22
+ list(): AgentSession[];
23
+ stop(): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/integrations/pty/observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAA0B,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBvF,qBAAa,WAAY,SAAQ,YAAa,YAAW,aAAa;IACpE,QAAQ,CAAC,KAAK,SAAS;IACvB,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+C;IAElE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,IAAI,IAAI,YAAY,EAAE;IAIhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5B"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * PTY-agent observer — surfaces LISA's PTY-backed CLI agents (Stage C spike)
3
+ * in the orchestrator hub, so a real `claude`/`codex` LISA spawned under a
4
+ * pseudo-terminal appears in the roster (island / GUI / menu bar) under its
5
+ * REAL kind ("claude-code"/"codex"), marked controllable so the UI offers
6
+ * send/cancel. Reads the in-process ptyRegistry; emits on its "update" event.
7
+ *
8
+ * The registry is empty unless the spike is enabled (LISA_PTY_AGENTS=1), so at
9
+ * rest this observer contributes nothing.
10
+ *
11
+ * PRIVACY: the roster session is structural only (kind/state/cli) — the captured
12
+ * terminal output is NEVER folded in here; it's served separately, on demand,
13
+ * via /api/agents/pty/<id>/output.
14
+ */
15
+ import { EventEmitter } from "node:events";
16
+ import { registerIntegration } from "../registry.js";
17
+ import { ptyRegistry } from "../../agents/pty.js";
18
+ function toSession(v) {
19
+ return {
20
+ agent: v.agent, // real roster kind: "claude-code" | "codex"
21
+ sessionId: v.id,
22
+ project: v.project,
23
+ cwd: v.cwd,
24
+ state: v.state,
25
+ stateReason: v.stateReason,
26
+ lastMtime: v.lastMtime,
27
+ controllable: "pty",
28
+ ...(v.adoptedSessionId ? { adoptedSessionId: v.adoptedSessionId } : {}),
29
+ };
30
+ }
31
+ export class PtyObserver extends EventEmitter {
32
+ agent = "pty";
33
+ emitFn = null;
34
+ onUpdate = (v) => this.emitFn?.(toSession(v));
35
+ async start(emit) {
36
+ this.emitFn = emit;
37
+ ptyRegistry.on("update", this.onUpdate);
38
+ }
39
+ list() {
40
+ return ptyRegistry.list().map(toSession);
41
+ }
42
+ async stop() {
43
+ ptyRegistry.off("update", this.onUpdate);
44
+ this.emitFn = null;
45
+ }
46
+ }
47
+ registerIntegration("pty", (_cfg) => new PtyObserver());
48
+ //# sourceMappingURL=observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../src/integrations/pty/observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AAGhE,SAAS,SAAS,CAAC,CAAU;IAC3B,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,4CAA4C;QAC5D,SAAS,EAAE,CAAC,CAAC,EAAE;QACf,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,YAAY,EAAE,KAAK;QACnB,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,YAAY;IAClC,KAAK,GAAG,KAAK,CAAC;IACf,MAAM,GAAuC,IAAI,CAAC;IACzC,QAAQ,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,KAAK,CAAC,KAAK,CAAC,IAA+B;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI;QACF,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF;AAED,mBAAmB,CAAC,KAAK,EAAE,CAAC,IAA4B,EAAE,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/integrations/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAIpB,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAEN;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAUxB;AAED,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAEpD;AAED,yDAAyD;AACzD,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAKD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAQjE"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/integrations/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAIpB,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAEN;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAUxB;AAED,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAEpD;AAED,yDAAyD;AACzD,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAKD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAajE"}
@@ -36,5 +36,10 @@ export async function registerBuiltinIntegrations() {
36
36
  await import("./github-pr/observer.js");
37
37
  await import("./opencode/observer.js");
38
38
  await import("./aider/observer.js");
39
+ await import("./git/observer.js");
40
+ await import("./shell/observer.js");
41
+ await import("./takoapi/observer.js");
42
+ await import("./managed/observer.js");
43
+ await import("./pty/observer.js");
39
44
  }
40
45
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/integrations/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;AAE1D,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,OAA6B;IAE7B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,GAA2B;IAE3B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,wBAAwB,IAAI,aAC1B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,mBAC7C,EAAE,CACH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,yBAAyB;IACvC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,kBAAkB,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED,4DAA4D;AAC5D,wCAAwC;AACxC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,IAAI,kBAAkB;QAAE,OAAO;IAC/B,kBAAkB,GAAG,IAAI,CAAC;IAC1B,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC1C,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACpC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACxC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACvC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/integrations/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;AAE1D,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,OAA6B;IAE7B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,GAA2B;IAE3B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,wBAAwB,IAAI,aAC1B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,mBAC7C,EAAE,CACH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,yBAAyB;IACvC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,kBAAkB,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED,4DAA4D;AAC5D,wCAAwC;AACxC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,IAAI,kBAAkB;QAAE,OAAO;IAC/B,kBAAkB,GAAG,IAAI,CAAC;IAC1B,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC1C,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACpC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACxC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACvC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACpC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAClC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACpC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACtC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACtC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { AgentIntegrationConfig, AgentObserver, AgentSession, SessionActivity } from "../types.js";
3
+ /**
4
+ * Extract argv[0] (the program name) from one history command line. Pure.
5
+ * Strips leading `VAR=val` assignments, takes the first token, basenames it,
6
+ * and returns null for anything that isn't a plain command name (flags, shell
7
+ * syntax). Deliberately surfaces ONLY the program name — nothing after it.
8
+ */
9
+ export declare function extractArgv0(command: string): string | null;
10
+ /**
11
+ * Parse a shell-history tail into a list of argv[0]s (program names only).
12
+ * Handles zsh EXTENDED_HISTORY (": <ts>:<elapsed>;<cmd>") and bash
13
+ * HISTTIMEFORMAT ("#<epoch>" lines) as well as plain command-per-line. Pure.
14
+ */
15
+ export declare function parseHistoryArgv0s(raw: string): string[];
16
+ /** Tier-2 structural activity from recent argv[0]s. Program names + counts only. Pure. */
17
+ export declare function shellActivity(argv0s: string[]): SessionActivity;
18
+ export declare class ShellObserver extends EventEmitter implements AgentObserver {
19
+ readonly agent = "shell";
20
+ private files;
21
+ private sessions;
22
+ private watchers;
23
+ private pending;
24
+ private emitFn;
25
+ private readonly computeActivity;
26
+ constructor(cfg: AgentIntegrationConfig);
27
+ start(emit: (s: AgentSession) => void): Promise<void>;
28
+ list(): AgentSession[];
29
+ stop(): Promise<void>;
30
+ private attach;
31
+ private record;
32
+ }
33
+ //# sourceMappingURL=observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/integrations/shell/observer.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,YAAY,EAEZ,eAAe,EAChB,MAAM,aAAa,CAAC;AAQrB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa3D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAWxD;AAcD,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAQ/D;AAuCD,qBAAa,aAAc,SAAQ,YAAa,YAAW,aAAa;IACtE,QAAQ,CAAC,KAAK,WAAW;IACzB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAE9B,GAAG,EAAE,sBAAsB;IASjC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,IAAI,IAAI,YAAY,EAAE;IAQhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,MAAM;YAuBA,MAAM;CAmBrB"}