opentasks 0.0.3 → 0.0.4

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 (298) hide show
  1. package/README.md +58 -1
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +81 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/client/client.d.ts +20 -0
  7. package/dist/client/client.d.ts.map +1 -1
  8. package/dist/client/client.js +46 -5
  9. package/dist/client/client.js.map +1 -1
  10. package/dist/config/env.d.ts.map +1 -1
  11. package/dist/config/env.js +11 -0
  12. package/dist/config/env.js.map +1 -1
  13. package/dist/config/index.d.ts +1 -1
  14. package/dist/config/index.d.ts.map +1 -1
  15. package/dist/config/index.js.map +1 -1
  16. package/dist/config/schema.d.ts +76 -0
  17. package/dist/config/schema.d.ts.map +1 -1
  18. package/dist/config/schema.js +60 -0
  19. package/dist/config/schema.js.map +1 -1
  20. package/dist/core/init.d.ts +17 -0
  21. package/dist/core/init.d.ts.map +1 -0
  22. package/dist/core/init.js +54 -0
  23. package/dist/core/init.js.map +1 -0
  24. package/dist/daemon/entire-linker.d.ts +3 -0
  25. package/dist/daemon/entire-linker.d.ts.map +1 -1
  26. package/dist/daemon/entire-linker.js +29 -2
  27. package/dist/daemon/entire-linker.js.map +1 -1
  28. package/dist/daemon/factory.d.ts +3 -0
  29. package/dist/daemon/factory.d.ts.map +1 -1
  30. package/dist/daemon/factory.js +2 -1
  31. package/dist/daemon/factory.js.map +1 -1
  32. package/dist/daemon/lifecycle.d.ts.map +1 -1
  33. package/dist/daemon/lifecycle.js +34 -4
  34. package/dist/daemon/lifecycle.js.map +1 -1
  35. package/dist/daemon/location-state.d.ts +2 -1
  36. package/dist/daemon/location-state.d.ts.map +1 -1
  37. package/dist/daemon/location-state.js +19 -4
  38. package/dist/daemon/location-state.js.map +1 -1
  39. package/dist/daemon/methods/tools.d.ts +11 -1
  40. package/dist/daemon/methods/tools.d.ts.map +1 -1
  41. package/dist/daemon/methods/tools.js +40 -6
  42. package/dist/daemon/methods/tools.js.map +1 -1
  43. package/dist/entire/agent/agents/claude-code.d.ts +76 -0
  44. package/dist/entire/agent/agents/claude-code.d.ts.map +1 -0
  45. package/dist/entire/agent/agents/claude-code.js +759 -0
  46. package/dist/entire/agent/agents/claude-code.js.map +1 -0
  47. package/dist/entire/agent/agents/cursor.d.ts +35 -0
  48. package/dist/entire/agent/agents/cursor.d.ts.map +1 -0
  49. package/dist/entire/agent/agents/cursor.js +294 -0
  50. package/dist/entire/agent/agents/cursor.js.map +1 -0
  51. package/dist/entire/agent/agents/gemini-cli.d.ts +62 -0
  52. package/dist/entire/agent/agents/gemini-cli.d.ts.map +1 -0
  53. package/dist/entire/agent/agents/gemini-cli.js +462 -0
  54. package/dist/entire/agent/agents/gemini-cli.js.map +1 -0
  55. package/dist/entire/agent/agents/opencode.d.ts +100 -0
  56. package/dist/entire/agent/agents/opencode.d.ts.map +1 -0
  57. package/dist/entire/agent/agents/opencode.js +423 -0
  58. package/dist/entire/agent/agents/opencode.js.map +1 -0
  59. package/dist/entire/agent/registry.d.ts +54 -0
  60. package/dist/entire/agent/registry.d.ts.map +1 -0
  61. package/dist/entire/agent/registry.js +123 -0
  62. package/dist/entire/agent/registry.js.map +1 -0
  63. package/dist/entire/agent/session-types.d.ts +45 -0
  64. package/dist/entire/agent/session-types.d.ts.map +1 -0
  65. package/dist/entire/agent/session-types.js +50 -0
  66. package/dist/entire/agent/session-types.js.map +1 -0
  67. package/dist/entire/agent/types.d.ts +126 -0
  68. package/dist/entire/agent/types.d.ts.map +1 -0
  69. package/dist/entire/agent/types.js +39 -0
  70. package/dist/entire/agent/types.js.map +1 -0
  71. package/dist/entire/commands/clean.d.ts +30 -0
  72. package/dist/entire/commands/clean.d.ts.map +1 -0
  73. package/dist/entire/commands/clean.js +99 -0
  74. package/dist/entire/commands/clean.js.map +1 -0
  75. package/dist/entire/commands/disable.d.ts +23 -0
  76. package/dist/entire/commands/disable.d.ts.map +1 -0
  77. package/dist/entire/commands/disable.js +57 -0
  78. package/dist/entire/commands/disable.js.map +1 -0
  79. package/dist/entire/commands/doctor.d.ts +43 -0
  80. package/dist/entire/commands/doctor.d.ts.map +1 -0
  81. package/dist/entire/commands/doctor.js +97 -0
  82. package/dist/entire/commands/doctor.js.map +1 -0
  83. package/dist/entire/commands/enable.d.ts +29 -0
  84. package/dist/entire/commands/enable.d.ts.map +1 -0
  85. package/dist/entire/commands/enable.js +102 -0
  86. package/dist/entire/commands/enable.js.map +1 -0
  87. package/dist/entire/commands/explain.d.ts +68 -0
  88. package/dist/entire/commands/explain.d.ts.map +1 -0
  89. package/dist/entire/commands/explain.js +182 -0
  90. package/dist/entire/commands/explain.js.map +1 -0
  91. package/dist/entire/commands/reset.d.ts +23 -0
  92. package/dist/entire/commands/reset.d.ts.map +1 -0
  93. package/dist/entire/commands/reset.js +68 -0
  94. package/dist/entire/commands/reset.js.map +1 -0
  95. package/dist/entire/commands/resume.d.ts +42 -0
  96. package/dist/entire/commands/resume.d.ts.map +1 -0
  97. package/dist/entire/commands/resume.js +134 -0
  98. package/dist/entire/commands/resume.js.map +1 -0
  99. package/dist/entire/commands/rewind.d.ts +34 -0
  100. package/dist/entire/commands/rewind.d.ts.map +1 -0
  101. package/dist/entire/commands/rewind.js +155 -0
  102. package/dist/entire/commands/rewind.js.map +1 -0
  103. package/dist/entire/commands/status.d.ts +51 -0
  104. package/dist/entire/commands/status.d.ts.map +1 -0
  105. package/dist/entire/commands/status.js +94 -0
  106. package/dist/entire/commands/status.js.map +1 -0
  107. package/dist/entire/config.d.ts +40 -0
  108. package/dist/entire/config.d.ts.map +1 -0
  109. package/dist/entire/config.js +126 -0
  110. package/dist/entire/config.js.map +1 -0
  111. package/dist/entire/git-operations.d.ts +170 -0
  112. package/dist/entire/git-operations.d.ts.map +1 -0
  113. package/dist/entire/git-operations.js +395 -0
  114. package/dist/entire/git-operations.js.map +1 -0
  115. package/dist/entire/hooks/git-hooks.d.ts +22 -0
  116. package/dist/entire/hooks/git-hooks.d.ts.map +1 -0
  117. package/dist/entire/hooks/git-hooks.js +145 -0
  118. package/dist/entire/hooks/git-hooks.js.map +1 -0
  119. package/dist/entire/hooks/lifecycle.d.ts +21 -0
  120. package/dist/entire/hooks/lifecycle.d.ts.map +1 -0
  121. package/dist/entire/hooks/lifecycle.js +179 -0
  122. package/dist/entire/hooks/lifecycle.js.map +1 -0
  123. package/dist/entire/index.d.ts +68 -0
  124. package/dist/entire/index.d.ts.map +1 -0
  125. package/dist/entire/index.js +152 -0
  126. package/dist/entire/index.js.map +1 -0
  127. package/dist/entire/security/redaction.d.ts +35 -0
  128. package/dist/entire/security/redaction.d.ts.map +1 -0
  129. package/dist/entire/security/redaction.js +221 -0
  130. package/dist/entire/security/redaction.js.map +1 -0
  131. package/dist/entire/session/state-machine.d.ts +90 -0
  132. package/dist/entire/session/state-machine.d.ts.map +1 -0
  133. package/dist/entire/session/state-machine.js +347 -0
  134. package/dist/entire/session/state-machine.js.map +1 -0
  135. package/dist/entire/store/checkpoint-store.d.ts +47 -0
  136. package/dist/entire/store/checkpoint-store.d.ts.map +1 -0
  137. package/dist/entire/store/checkpoint-store.js +307 -0
  138. package/dist/entire/store/checkpoint-store.js.map +1 -0
  139. package/dist/entire/store/native-store.d.ts +14 -0
  140. package/dist/entire/store/native-store.d.ts.map +1 -0
  141. package/dist/entire/store/native-store.js +159 -0
  142. package/dist/entire/store/native-store.js.map +1 -0
  143. package/dist/entire/store/session-store.d.ts +28 -0
  144. package/dist/entire/store/session-store.d.ts.map +1 -0
  145. package/dist/entire/store/session-store.js +187 -0
  146. package/dist/entire/store/session-store.js.map +1 -0
  147. package/dist/entire/strategy/attribution.d.ts +39 -0
  148. package/dist/entire/strategy/attribution.d.ts.map +1 -0
  149. package/dist/entire/strategy/attribution.js +227 -0
  150. package/dist/entire/strategy/attribution.js.map +1 -0
  151. package/dist/entire/strategy/common.d.ts +57 -0
  152. package/dist/entire/strategy/common.d.ts.map +1 -0
  153. package/dist/entire/strategy/common.js +156 -0
  154. package/dist/entire/strategy/common.js.map +1 -0
  155. package/dist/entire/strategy/content-overlap.d.ts +33 -0
  156. package/dist/entire/strategy/content-overlap.d.ts.map +1 -0
  157. package/dist/entire/strategy/content-overlap.js +168 -0
  158. package/dist/entire/strategy/content-overlap.js.map +1 -0
  159. package/dist/entire/strategy/manual-commit.d.ts +31 -0
  160. package/dist/entire/strategy/manual-commit.d.ts.map +1 -0
  161. package/dist/entire/strategy/manual-commit.js +730 -0
  162. package/dist/entire/strategy/manual-commit.js.map +1 -0
  163. package/dist/entire/strategy/types.d.ts +163 -0
  164. package/dist/entire/strategy/types.d.ts.map +1 -0
  165. package/dist/entire/strategy/types.js +49 -0
  166. package/dist/entire/strategy/types.js.map +1 -0
  167. package/dist/entire/summarize/claude-generator.d.ts +25 -0
  168. package/dist/entire/summarize/claude-generator.d.ts.map +1 -0
  169. package/dist/entire/summarize/claude-generator.js +87 -0
  170. package/dist/entire/summarize/claude-generator.js.map +1 -0
  171. package/dist/entire/summarize/summarize.d.ts +52 -0
  172. package/dist/entire/summarize/summarize.d.ts.map +1 -0
  173. package/dist/entire/summarize/summarize.js +335 -0
  174. package/dist/entire/summarize/summarize.js.map +1 -0
  175. package/dist/entire/types.d.ts +288 -0
  176. package/dist/entire/types.d.ts.map +1 -0
  177. package/dist/entire/types.js +94 -0
  178. package/dist/entire/types.js.map +1 -0
  179. package/dist/entire/utils/chunk-files.d.ts +25 -0
  180. package/dist/entire/utils/chunk-files.d.ts.map +1 -0
  181. package/dist/entire/utils/chunk-files.js +47 -0
  182. package/dist/entire/utils/chunk-files.js.map +1 -0
  183. package/dist/entire/utils/commit-message.d.ts +11 -0
  184. package/dist/entire/utils/commit-message.d.ts.map +1 -0
  185. package/dist/entire/utils/commit-message.js +54 -0
  186. package/dist/entire/utils/commit-message.js.map +1 -0
  187. package/dist/entire/utils/detect-agent.d.ts +19 -0
  188. package/dist/entire/utils/detect-agent.d.ts.map +1 -0
  189. package/dist/entire/utils/detect-agent.js +34 -0
  190. package/dist/entire/utils/detect-agent.js.map +1 -0
  191. package/dist/entire/utils/hook-managers.d.ts +24 -0
  192. package/dist/entire/utils/hook-managers.d.ts.map +1 -0
  193. package/dist/entire/utils/hook-managers.js +87 -0
  194. package/dist/entire/utils/hook-managers.js.map +1 -0
  195. package/dist/entire/utils/ide-tags.d.ts +12 -0
  196. package/dist/entire/utils/ide-tags.d.ts.map +1 -0
  197. package/dist/entire/utils/ide-tags.js +30 -0
  198. package/dist/entire/utils/ide-tags.js.map +1 -0
  199. package/dist/entire/utils/paths.d.ts +32 -0
  200. package/dist/entire/utils/paths.d.ts.map +1 -0
  201. package/dist/entire/utils/paths.js +55 -0
  202. package/dist/entire/utils/paths.js.map +1 -0
  203. package/dist/entire/utils/preview-rewind.d.ts +23 -0
  204. package/dist/entire/utils/preview-rewind.d.ts.map +1 -0
  205. package/dist/entire/utils/preview-rewind.js +63 -0
  206. package/dist/entire/utils/preview-rewind.js.map +1 -0
  207. package/dist/entire/utils/rewind-conflict.d.ts +52 -0
  208. package/dist/entire/utils/rewind-conflict.d.ts.map +1 -0
  209. package/dist/entire/utils/rewind-conflict.js +79 -0
  210. package/dist/entire/utils/rewind-conflict.js.map +1 -0
  211. package/dist/entire/utils/shadow-branch.d.ts +44 -0
  212. package/dist/entire/utils/shadow-branch.d.ts.map +1 -0
  213. package/dist/entire/utils/shadow-branch.js +93 -0
  214. package/dist/entire/utils/shadow-branch.js.map +1 -0
  215. package/dist/entire/utils/string-utils.d.ts +24 -0
  216. package/dist/entire/utils/string-utils.d.ts.map +1 -0
  217. package/dist/entire/utils/string-utils.js +47 -0
  218. package/dist/entire/utils/string-utils.js.map +1 -0
  219. package/dist/entire/utils/todo-extract.d.ts +52 -0
  220. package/dist/entire/utils/todo-extract.d.ts.map +1 -0
  221. package/dist/entire/utils/todo-extract.js +167 -0
  222. package/dist/entire/utils/todo-extract.js.map +1 -0
  223. package/dist/entire/utils/trailers.d.ts +36 -0
  224. package/dist/entire/utils/trailers.d.ts.map +1 -0
  225. package/dist/entire/utils/trailers.js +149 -0
  226. package/dist/entire/utils/trailers.js.map +1 -0
  227. package/dist/entire/utils/transcript-parse.d.ts +57 -0
  228. package/dist/entire/utils/transcript-parse.d.ts.map +1 -0
  229. package/dist/entire/utils/transcript-parse.js +126 -0
  230. package/dist/entire/utils/transcript-parse.js.map +1 -0
  231. package/dist/entire/utils/transcript-timestamp.d.ts +22 -0
  232. package/dist/entire/utils/transcript-timestamp.d.ts.map +1 -0
  233. package/dist/entire/utils/transcript-timestamp.js +56 -0
  234. package/dist/entire/utils/transcript-timestamp.js.map +1 -0
  235. package/dist/entire/utils/tree-ops.d.ts +47 -0
  236. package/dist/entire/utils/tree-ops.d.ts.map +1 -0
  237. package/dist/entire/utils/tree-ops.js +145 -0
  238. package/dist/entire/utils/tree-ops.js.map +1 -0
  239. package/dist/entire/utils/tty.d.ts +25 -0
  240. package/dist/entire/utils/tty.d.ts.map +1 -0
  241. package/dist/entire/utils/tty.js +70 -0
  242. package/dist/entire/utils/tty.js.map +1 -0
  243. package/dist/entire/utils/validation.d.ts +31 -0
  244. package/dist/entire/utils/validation.d.ts.map +1 -0
  245. package/dist/entire/utils/validation.js +59 -0
  246. package/dist/entire/utils/validation.js.map +1 -0
  247. package/dist/entire/utils/worktree.d.ts +16 -0
  248. package/dist/entire/utils/worktree.d.ts.map +1 -0
  249. package/dist/entire/utils/worktree.js +50 -0
  250. package/dist/entire/utils/worktree.js.map +1 -0
  251. package/dist/index.d.ts +3 -0
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +6 -0
  254. package/dist/index.js.map +1 -1
  255. package/dist/providers/entire.d.ts +27 -2
  256. package/dist/providers/entire.d.ts.map +1 -1
  257. package/dist/providers/entire.js +13 -2
  258. package/dist/providers/entire.js.map +1 -1
  259. package/dist/providers/from-config.d.ts.map +1 -1
  260. package/dist/providers/from-config.js +23 -0
  261. package/dist/providers/from-config.js.map +1 -1
  262. package/dist/providers/global.d.ts +27 -0
  263. package/dist/providers/global.d.ts.map +1 -0
  264. package/dist/providers/global.js +242 -0
  265. package/dist/providers/global.js.map +1 -0
  266. package/dist/providers/index.d.ts +2 -1
  267. package/dist/providers/index.d.ts.map +1 -1
  268. package/dist/providers/index.js +3 -1
  269. package/dist/providers/index.js.map +1 -1
  270. package/dist/schema/edges.d.ts +5 -1
  271. package/dist/schema/edges.d.ts.map +1 -1
  272. package/dist/schema/index.d.ts +1 -1
  273. package/dist/schema/index.d.ts.map +1 -1
  274. package/dist/tracking/claude-task-reconstructor.d.ts +41 -0
  275. package/dist/tracking/claude-task-reconstructor.d.ts.map +1 -0
  276. package/dist/tracking/claude-task-reconstructor.js +91 -0
  277. package/dist/tracking/claude-task-reconstructor.js.map +1 -0
  278. package/dist/tracking/claude-tool-categorizer.d.ts +30 -0
  279. package/dist/tracking/claude-tool-categorizer.d.ts.map +1 -0
  280. package/dist/tracking/claude-tool-categorizer.js +98 -0
  281. package/dist/tracking/claude-tool-categorizer.js.map +1 -0
  282. package/dist/tracking/index.d.ts +19 -0
  283. package/dist/tracking/index.d.ts.map +1 -0
  284. package/dist/tracking/index.js +14 -0
  285. package/dist/tracking/index.js.map +1 -0
  286. package/dist/tracking/plan-mode-tracker.d.ts +20 -0
  287. package/dist/tracking/plan-mode-tracker.d.ts.map +1 -0
  288. package/dist/tracking/plan-mode-tracker.js +35 -0
  289. package/dist/tracking/plan-mode-tracker.js.map +1 -0
  290. package/dist/tracking/skill-tracker.d.ts +133 -0
  291. package/dist/tracking/skill-tracker.d.ts.map +1 -0
  292. package/dist/tracking/skill-tracker.js +130 -0
  293. package/dist/tracking/skill-tracker.js.map +1 -0
  294. package/dist/tracking/transcript-extractor.d.ts +45 -0
  295. package/dist/tracking/transcript-extractor.d.ts.map +1 -0
  296. package/dist/tracking/transcript-extractor.js +174 -0
  297. package/dist/tracking/transcript-extractor.js.map +1 -0
  298. package/package.json +2 -1
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Claude Tool Call Categorizer
3
+ *
4
+ * Extracts and categorizes tool_use blocks from parsed Claude Code transcripts.
5
+ * Groups tools by system: claude-native, mcp-sudocode, mcp-other, or unknown.
6
+ */
7
+ // ============================================================================
8
+ // Categorization
9
+ // ============================================================================
10
+ const CLAUDE_NATIVE_TOOLS = new Set([
11
+ 'TaskCreate',
12
+ 'TaskUpdate',
13
+ 'TaskList',
14
+ 'TaskGet',
15
+ 'EnterPlanMode',
16
+ 'ExitPlanMode',
17
+ ]);
18
+ export function categorizeToolName(name) {
19
+ if (CLAUDE_NATIVE_TOOLS.has(name))
20
+ return 'claude-native';
21
+ if (name.startsWith('mcp__plugin_sudocode_sudocode__'))
22
+ return 'mcp-sudocode';
23
+ if (name.startsWith('mcp__'))
24
+ return 'mcp-other';
25
+ return 'unknown';
26
+ }
27
+ /**
28
+ * Build a map of tool_use_id → tool_result from all user messages.
29
+ */
30
+ function buildToolResultMap(lines) {
31
+ const resultMap = new Map();
32
+ for (const line of lines) {
33
+ if (line.type !== 'user')
34
+ continue;
35
+ const message = line.message;
36
+ if (!message?.content)
37
+ continue;
38
+ const content = message.content;
39
+ if (!Array.isArray(content))
40
+ continue;
41
+ for (const block of content) {
42
+ if (block.type !== 'tool_result' || !block.tool_use_id)
43
+ continue;
44
+ let contentStr;
45
+ if (typeof block.content === 'string') {
46
+ contentStr = block.content;
47
+ }
48
+ else if (Array.isArray(block.content)) {
49
+ contentStr = JSON.stringify(block.content);
50
+ }
51
+ else if (block.content !== undefined && block.content !== null) {
52
+ contentStr = String(block.content);
53
+ }
54
+ else {
55
+ contentStr = '';
56
+ }
57
+ resultMap.set(block.tool_use_id, {
58
+ content: contentStr,
59
+ isError: !!block.is_error,
60
+ });
61
+ }
62
+ }
63
+ return resultMap;
64
+ }
65
+ /**
66
+ * Extract and categorize all tool calls from a parsed Claude Code transcript.
67
+ */
68
+ export function extractToolCalls(lines) {
69
+ const resultMap = buildToolResultMap(lines);
70
+ const toolCalls = [];
71
+ for (let i = 0; i < lines.length; i++) {
72
+ const line = lines[i];
73
+ if (line.type !== 'assistant')
74
+ continue;
75
+ const message = line.message;
76
+ if (!message?.content || !Array.isArray(message.content))
77
+ continue;
78
+ for (const block of message.content) {
79
+ if (block.type !== 'tool_use' || !block.name)
80
+ continue;
81
+ const toolUseId = block.id;
82
+ if (!toolUseId)
83
+ continue;
84
+ const result = resultMap.get(toolUseId);
85
+ toolCalls.push({
86
+ toolName: block.name,
87
+ toolUseId,
88
+ category: categorizeToolName(block.name),
89
+ input: block.input ?? {},
90
+ output: result?.content,
91
+ success: result ? !result.isError : true,
92
+ lineIndex: i,
93
+ });
94
+ }
95
+ }
96
+ return toolCalls;
97
+ }
98
+ //# sourceMappingURL=claude-tool-categorizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-tool-categorizer.js","sourceRoot":"","sources":["../../src/tracking/claude-tool-categorizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tracking Module
3
+ *
4
+ * Skill usage tracking for agent sessions/trajectories,
5
+ * plus transcript-based tool extraction and Claude task reconstruction.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export type { SkillName, SkillInvocation, SkillUsageStats, SkillUsageSummary, SkillTrackerOptions, SkillTracker, SkillTrackerRegistry, } from './skill-tracker.js';
10
+ export { createSkillTracker, createSkillTrackerRegistry } from './skill-tracker.js';
11
+ export type { ToolCategory, ExtractedToolCall } from './claude-tool-categorizer.js';
12
+ export { categorizeToolName, extractToolCalls } from './claude-tool-categorizer.js';
13
+ export type { ReconstructedTask, ReconstructedClaudeTaskState, } from './claude-task-reconstructor.js';
14
+ export { reconstructClaudeTaskState } from './claude-task-reconstructor.js';
15
+ export type { PlanModeTransition } from './plan-mode-tracker.js';
16
+ export { extractPlanModeTransitions } from './plan-mode-tracker.js';
17
+ export type { TranscriptExtractorConfig, TranscriptExtractionResult, TranscriptExtractor, } from './transcript-extractor.js';
18
+ export { createTranscriptExtractor } from './transcript-extractor.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracking/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEpF,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEpF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEpF,YAAY,EACV,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAE5E,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,YAAY,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Tracking Module
3
+ *
4
+ * Skill usage tracking for agent sessions/trajectories,
5
+ * plus transcript-based tool extraction and Claude task reconstruction.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export { createSkillTracker, createSkillTrackerRegistry } from './skill-tracker.js';
10
+ export { categorizeToolName, extractToolCalls } from './claude-tool-categorizer.js';
11
+ export { reconstructClaudeTaskState } from './claude-task-reconstructor.js';
12
+ export { extractPlanModeTransitions } from './plan-mode-tracker.js';
13
+ export { createTranscriptExtractor } from './transcript-extractor.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracking/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAIpF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAI5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAQpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Plan Mode Tracker
3
+ *
4
+ * Extracts EnterPlanMode/ExitPlanMode transitions from extracted tool calls.
5
+ */
6
+ import type { ExtractedToolCall } from './claude-tool-categorizer.js';
7
+ export interface PlanModeTransition {
8
+ type: 'enter' | 'exit';
9
+ lineIndex: number;
10
+ /** For exit: the plan content from ExitPlanMode input */
11
+ planContent?: string;
12
+ /** For exit: whether user approved (inferred from tool_result success) */
13
+ approved?: boolean;
14
+ }
15
+ /**
16
+ * Extract plan mode transitions from a list of extracted tool calls.
17
+ * Only processes calls with `toolName` of `EnterPlanMode` or `ExitPlanMode`.
18
+ */
19
+ export declare function extractPlanModeTransitions(toolCalls: ExtractedToolCall[]): PlanModeTransition[];
20
+ //# sourceMappingURL=plan-mode-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-mode-tracker.d.ts","sourceRoot":"","sources":["../../src/tracking/plan-mode-tracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAMtE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAElB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,kBAAkB,EAAE,CAwB/F"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Plan Mode Tracker
3
+ *
4
+ * Extracts EnterPlanMode/ExitPlanMode transitions from extracted tool calls.
5
+ */
6
+ // ============================================================================
7
+ // Implementation
8
+ // ============================================================================
9
+ /**
10
+ * Extract plan mode transitions from a list of extracted tool calls.
11
+ * Only processes calls with `toolName` of `EnterPlanMode` or `ExitPlanMode`.
12
+ */
13
+ export function extractPlanModeTransitions(toolCalls) {
14
+ const transitions = [];
15
+ for (const call of toolCalls) {
16
+ if (call.category !== 'claude-native')
17
+ continue;
18
+ if (call.toolName === 'EnterPlanMode') {
19
+ transitions.push({
20
+ type: 'enter',
21
+ lineIndex: call.lineIndex,
22
+ });
23
+ }
24
+ if (call.toolName === 'ExitPlanMode') {
25
+ transitions.push({
26
+ type: 'exit',
27
+ lineIndex: call.lineIndex,
28
+ planContent: call.input.plan ?? undefined,
29
+ approved: call.success,
30
+ });
31
+ }
32
+ }
33
+ return transitions;
34
+ }
35
+ //# sourceMappingURL=plan-mode-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-mode-tracker.js","sourceRoot":"","sources":["../../src/tracking/plan-mode-tracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAA8B;IACvE,MAAM,WAAW,GAAyB,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,eAAe;YAAE,SAAS;QAEhD,IAAI,IAAI,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;YACtC,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAG,IAAI,CAAC,KAAK,CAAC,IAAe,IAAI,SAAS;gBACrD,QAAQ,EAAE,IAAI,CAAC,OAAO;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Skill Tracker
3
+ *
4
+ * Tracks which agent skills (tools) are used during a session/trajectory.
5
+ * Provides types and a tracker implementation for recording skill invocations,
6
+ * aggregating usage statistics, and surfacing them in session metadata.
7
+ *
8
+ * This enables answering: "What skills did the agent use during this trajectory?"
9
+ */
10
+ /**
11
+ * Names of trackable skills (the OpenTasks tool interface)
12
+ */
13
+ export type SkillName = 'link' | 'query' | 'annotate' | 'task' | 'create' | 'get' | 'update' | 'delete' | string;
14
+ /**
15
+ * A single skill invocation record
16
+ */
17
+ export interface SkillInvocation {
18
+ /** Which skill was invoked */
19
+ skill: SkillName;
20
+ /** ISO timestamp of invocation */
21
+ timestamp: string;
22
+ /** Whether the invocation succeeded */
23
+ success: boolean;
24
+ /** Duration in milliseconds (if available) */
25
+ durationMs?: number;
26
+ /** Sub-operation within the skill (e.g., query type: 'ready', 'blockers') */
27
+ operation?: string;
28
+ /** Node IDs or URIs involved */
29
+ targets?: string[];
30
+ /** Error message if failed */
31
+ error?: string;
32
+ /** Agent context at time of invocation */
33
+ agentId?: string;
34
+ /** Session context at time of invocation */
35
+ sessionId?: string;
36
+ }
37
+ /**
38
+ * Aggregated usage statistics for a single skill
39
+ */
40
+ export interface SkillUsageStats {
41
+ /** Skill name */
42
+ skill: SkillName;
43
+ /** Total invocation count */
44
+ count: number;
45
+ /** Number of successful invocations */
46
+ successCount: number;
47
+ /** Number of failed invocations */
48
+ failureCount: number;
49
+ /** First invocation timestamp */
50
+ firstUsedAt: string;
51
+ /** Last invocation timestamp */
52
+ lastUsedAt: string;
53
+ /** Average duration in milliseconds */
54
+ avgDurationMs?: number;
55
+ /** Distinct operations used (e.g., query types) */
56
+ operations: string[];
57
+ }
58
+ /**
59
+ * Complete skill usage summary for a session/trajectory
60
+ */
61
+ export interface SkillUsageSummary {
62
+ /** Session ID this summary belongs to */
63
+ sessionId: string;
64
+ /** Total invocations across all skills */
65
+ totalInvocations: number;
66
+ /** Distinct skills used */
67
+ skillsUsed: SkillName[];
68
+ /** Per-skill statistics */
69
+ stats: SkillUsageStats[];
70
+ /** Full invocation log (chronological) */
71
+ invocations: SkillInvocation[];
72
+ /** When tracking started */
73
+ startedAt: string;
74
+ /** When this summary was last updated */
75
+ updatedAt: string;
76
+ }
77
+ /**
78
+ * Options for creating a SkillTracker
79
+ */
80
+ export interface SkillTrackerOptions {
81
+ /** Session ID to associate with tracked invocations */
82
+ sessionId: string;
83
+ /** Agent ID performing the invocations */
84
+ agentId?: string;
85
+ /** Maximum invocations to retain in the log (default: 1000) */
86
+ maxInvocations?: number;
87
+ }
88
+ /**
89
+ * SkillTracker interface
90
+ */
91
+ export interface SkillTracker {
92
+ /** Record a skill invocation */
93
+ record(invocation: Omit<SkillInvocation, 'timestamp' | 'agentId' | 'sessionId'>): void;
94
+ /** Get the full invocation log */
95
+ getInvocations(): SkillInvocation[];
96
+ /** Get aggregated usage statistics */
97
+ getStats(): SkillUsageStats[];
98
+ /** Get a complete usage summary */
99
+ getSummary(): SkillUsageSummary;
100
+ /** Get invocations for a specific skill */
101
+ getSkillInvocations(skill: SkillName): SkillInvocation[];
102
+ /** Get the list of distinct skills used */
103
+ getSkillsUsed(): SkillName[];
104
+ /** Reset the tracker (clear all recorded invocations) */
105
+ reset(): void;
106
+ /** Session ID this tracker is associated with */
107
+ readonly sessionId: string;
108
+ }
109
+ /**
110
+ * Create a SkillTracker for recording skill usage during a session
111
+ */
112
+ export declare function createSkillTracker(options: SkillTrackerOptions): SkillTracker;
113
+ /**
114
+ * Registry for managing SkillTrackers across concurrent sessions.
115
+ * The daemon maintains one registry, with one tracker per active session.
116
+ */
117
+ export interface SkillTrackerRegistry {
118
+ /** Get or create a tracker for a session */
119
+ getOrCreate(sessionId: string, agentId?: string): SkillTracker;
120
+ /** Get an existing tracker (returns null if not found) */
121
+ get(sessionId: string): SkillTracker | null;
122
+ /** Remove a tracker when session ends */
123
+ remove(sessionId: string): SkillUsageSummary | null;
124
+ /** Get summaries for all active sessions */
125
+ getAllSummaries(): SkillUsageSummary[];
126
+ /** Get the number of active trackers */
127
+ readonly size: number;
128
+ }
129
+ /**
130
+ * Create a SkillTrackerRegistry for managing per-session trackers
131
+ */
132
+ export declare function createSkillTrackerRegistry(): SkillTrackerRegistry;
133
+ //# sourceMappingURL=skill-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-tracker.d.ts","sourceRoot":"","sources":["../../src/tracking/skill-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Skill Tracker
3
+ *
4
+ * Tracks which agent skills (tools) are used during a session/trajectory.
5
+ * Provides types and a tracker implementation for recording skill invocations,
6
+ * aggregating usage statistics, and surfacing them in session metadata.
7
+ *
8
+ * This enables answering: "What skills did the agent use during this trajectory?"
9
+ */
10
+ // ============================================================================
11
+ // Implementation
12
+ // ============================================================================
13
+ /**
14
+ * Create a SkillTracker for recording skill usage during a session
15
+ */
16
+ export function createSkillTracker(options) {
17
+ const { sessionId, agentId, maxInvocations = 1000 } = options;
18
+ let invocations = [];
19
+ const startedAt = new Date().toISOString();
20
+ return {
21
+ get sessionId() {
22
+ return sessionId;
23
+ },
24
+ record(partial) {
25
+ const invocation = {
26
+ ...partial,
27
+ timestamp: new Date().toISOString(),
28
+ agentId,
29
+ sessionId,
30
+ };
31
+ invocations.push(invocation);
32
+ // Trim if over limit (keep most recent)
33
+ if (invocations.length > maxInvocations) {
34
+ invocations = invocations.slice(-maxInvocations);
35
+ }
36
+ },
37
+ getInvocations() {
38
+ return [...invocations];
39
+ },
40
+ getSkillInvocations(skill) {
41
+ return invocations.filter((i) => i.skill === skill);
42
+ },
43
+ getSkillsUsed() {
44
+ return [...new Set(invocations.map((i) => i.skill))];
45
+ },
46
+ getStats() {
47
+ const bySkill = new Map();
48
+ for (const inv of invocations) {
49
+ const existing = bySkill.get(inv.skill) ?? [];
50
+ existing.push(inv);
51
+ bySkill.set(inv.skill, existing);
52
+ }
53
+ const stats = [];
54
+ for (const [skill, skillInvocations] of bySkill) {
55
+ const successCount = skillInvocations.filter((i) => i.success).length;
56
+ const failureCount = skillInvocations.length - successCount;
57
+ const durations = skillInvocations
58
+ .map((i) => i.durationMs)
59
+ .filter((d) => d !== undefined);
60
+ const avgDurationMs = durations.length > 0
61
+ ? Math.round(durations.reduce((a, b) => a + b, 0) / durations.length)
62
+ : undefined;
63
+ const operations = [
64
+ ...new Set(skillInvocations
65
+ .map((i) => i.operation)
66
+ .filter((op) => op !== undefined)),
67
+ ];
68
+ stats.push({
69
+ skill,
70
+ count: skillInvocations.length,
71
+ successCount,
72
+ failureCount,
73
+ firstUsedAt: skillInvocations[0].timestamp,
74
+ lastUsedAt: skillInvocations[skillInvocations.length - 1].timestamp,
75
+ avgDurationMs,
76
+ operations,
77
+ });
78
+ }
79
+ return stats;
80
+ },
81
+ getSummary() {
82
+ return {
83
+ sessionId,
84
+ totalInvocations: invocations.length,
85
+ skillsUsed: this.getSkillsUsed(),
86
+ stats: this.getStats(),
87
+ invocations: this.getInvocations(),
88
+ startedAt,
89
+ updatedAt: new Date().toISOString(),
90
+ };
91
+ },
92
+ reset() {
93
+ invocations = [];
94
+ },
95
+ };
96
+ }
97
+ /**
98
+ * Create a SkillTrackerRegistry for managing per-session trackers
99
+ */
100
+ export function createSkillTrackerRegistry() {
101
+ const trackers = new Map();
102
+ return {
103
+ get size() {
104
+ return trackers.size;
105
+ },
106
+ getOrCreate(sessionId, agentId) {
107
+ let tracker = trackers.get(sessionId);
108
+ if (!tracker) {
109
+ tracker = createSkillTracker({ sessionId, agentId });
110
+ trackers.set(sessionId, tracker);
111
+ }
112
+ return tracker;
113
+ },
114
+ get(sessionId) {
115
+ return trackers.get(sessionId) ?? null;
116
+ },
117
+ remove(sessionId) {
118
+ const tracker = trackers.get(sessionId);
119
+ if (!tracker)
120
+ return null;
121
+ const summary = tracker.getSummary();
122
+ trackers.delete(sessionId);
123
+ return summary;
124
+ },
125
+ getAllSummaries() {
126
+ return Array.from(trackers.values()).map((t) => t.getSummary());
127
+ },
128
+ };
129
+ }
130
+ //# sourceMappingURL=skill-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-tracker.js","sourceRoot":"","sources":["../../src/tracking/skill-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Transcript Extractor Orchestrator
3
+ *
4
+ * Fetches Entire session transcripts, dispatches to the correct parser,
5
+ * runs categorization/reconstruction/plan-mode tracking, and backfills
6
+ * the SkillTrackerRegistry before session finalization.
7
+ *
8
+ * Best-effort: errors are caught and logged, never blocking the linker.
9
+ */
10
+ import type { AgentType, TokenUsage } from 'agent-session-parser';
11
+ import { type ExtractedToolCall, type ToolCategory } from './claude-tool-categorizer.js';
12
+ import { type ReconstructedClaudeTaskState } from './claude-task-reconstructor.js';
13
+ import { type PlanModeTransition } from './plan-mode-tracker.js';
14
+ import type { SkillTrackerRegistry } from './skill-tracker.js';
15
+ import type { EntireSessionEvent } from '../daemon/entire-watcher.js';
16
+ export interface TranscriptExtractorConfig {
17
+ /** Skill tracker registry for backfilling tool usage */
18
+ skillTrackerRegistry?: SkillTrackerRegistry;
19
+ /** Git repo path to resolve transcript from (defaults to cwd) */
20
+ repoPath?: string;
21
+ /** Override git command execution (for testing) */
22
+ execGit?: (args: string) => string;
23
+ }
24
+ export interface TranscriptExtractionResult {
25
+ sessionId: string;
26
+ agentType: AgentType | 'unknown';
27
+ /** All extracted tool calls, chronological */
28
+ toolCalls: ExtractedToolCall[];
29
+ /** Tool call counts by category */
30
+ toolCategories: Record<ToolCategory, number>;
31
+ /** Claude native task state reconstructed from tool calls */
32
+ claudeTasks?: ReconstructedClaudeTaskState;
33
+ /** Plan mode transitions */
34
+ planModeTransitions: PlanModeTransition[];
35
+ /** Token usage (from agent-session-parser) */
36
+ tokenUsage?: TokenUsage;
37
+ /** Spawned subagent IDs (agentId → toolUseId) */
38
+ subagentIds?: Record<string, string>;
39
+ }
40
+ export interface TranscriptExtractor {
41
+ /** Extract tool usage from a session's transcript on session end */
42
+ extract(event: EntireSessionEvent): Promise<TranscriptExtractionResult | null>;
43
+ }
44
+ export declare function createTranscriptExtractor(config: TranscriptExtractorConfig): TranscriptExtractor;
45
+ //# sourceMappingURL=transcript-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-extractor.d.ts","sourceRoot":"","sources":["../../src/tracking/transcript-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAoB,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC3G,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAA8B,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAMtE,MAAM,WAAW,yBAAyB;IACxC,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IAEjC,8CAA8C;IAC9C,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAE/B,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAE7C,6DAA6D;IAC7D,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAE3C,4BAA4B;IAC5B,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAE1C,8CAA8C;IAC9C,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;CAChF;AAiED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,GAAG,mBAAmB,CA6FhG"}