spidersan 0.2.2

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 (245) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/LICENSE +21 -0
  3. package/LICENSE.md +85 -0
  4. package/README.md +217 -0
  5. package/dist/bin/spidersan.d.ts +9 -0
  6. package/dist/bin/spidersan.d.ts.map +1 -0
  7. package/dist/bin/spidersan.js +152 -0
  8. package/dist/bin/spidersan.js.map +1 -0
  9. package/dist/commands/abandon.d.ts +8 -0
  10. package/dist/commands/abandon.d.ts.map +1 -0
  11. package/dist/commands/abandon.js +49 -0
  12. package/dist/commands/abandon.js.map +1 -0
  13. package/dist/commands/activate.d.ts +9 -0
  14. package/dist/commands/activate.d.ts.map +1 -0
  15. package/dist/commands/activate.js +45 -0
  16. package/dist/commands/activate.js.map +1 -0
  17. package/dist/commands/active-windows.d.ts +16 -0
  18. package/dist/commands/active-windows.d.ts.map +1 -0
  19. package/dist/commands/active-windows.js +373 -0
  20. package/dist/commands/active-windows.js.map +1 -0
  21. package/dist/commands/audit-mark.d.ts +12 -0
  22. package/dist/commands/audit-mark.d.ts.map +1 -0
  23. package/dist/commands/audit-mark.js +204 -0
  24. package/dist/commands/audit-mark.js.map +1 -0
  25. package/dist/commands/cleanup.d.ts +8 -0
  26. package/dist/commands/cleanup.d.ts.map +1 -0
  27. package/dist/commands/cleanup.js +41 -0
  28. package/dist/commands/cleanup.js.map +1 -0
  29. package/dist/commands/close.d.ts +9 -0
  30. package/dist/commands/close.d.ts.map +1 -0
  31. package/dist/commands/close.js +129 -0
  32. package/dist/commands/close.js.map +1 -0
  33. package/dist/commands/collab-sync.d.ts +14 -0
  34. package/dist/commands/collab-sync.d.ts.map +1 -0
  35. package/dist/commands/collab-sync.js +240 -0
  36. package/dist/commands/collab-sync.js.map +1 -0
  37. package/dist/commands/collab.d.ts +6 -0
  38. package/dist/commands/collab.d.ts.map +1 -0
  39. package/dist/commands/collab.js +103 -0
  40. package/dist/commands/collab.js.map +1 -0
  41. package/dist/commands/completions.d.ts +8 -0
  42. package/dist/commands/completions.d.ts.map +1 -0
  43. package/dist/commands/completions.js +83 -0
  44. package/dist/commands/completions.js.map +1 -0
  45. package/dist/commands/conflicts.d.ts +12 -0
  46. package/dist/commands/conflicts.d.ts.map +1 -0
  47. package/dist/commands/conflicts.js +426 -0
  48. package/dist/commands/conflicts.js.map +1 -0
  49. package/dist/commands/demo.d.ts +3 -0
  50. package/dist/commands/demo.d.ts.map +1 -0
  51. package/dist/commands/demo.js +113 -0
  52. package/dist/commands/demo.js.map +1 -0
  53. package/dist/commands/depends.d.ts +8 -0
  54. package/dist/commands/depends.d.ts.map +1 -0
  55. package/dist/commands/depends.js +44 -0
  56. package/dist/commands/depends.js.map +1 -0
  57. package/dist/commands/doctor.d.ts +8 -0
  58. package/dist/commands/doctor.d.ts.map +1 -0
  59. package/dist/commands/doctor.js +249 -0
  60. package/dist/commands/doctor.js.map +1 -0
  61. package/dist/commands/inbox.d.ts +3 -0
  62. package/dist/commands/inbox.d.ts.map +1 -0
  63. package/dist/commands/inbox.js +66 -0
  64. package/dist/commands/inbox.js.map +1 -0
  65. package/dist/commands/index.d.ts +43 -0
  66. package/dist/commands/index.d.ts.map +1 -0
  67. package/dist/commands/index.js +61 -0
  68. package/dist/commands/index.js.map +1 -0
  69. package/dist/commands/init.d.ts +8 -0
  70. package/dist/commands/init.d.ts.map +1 -0
  71. package/dist/commands/init.js +23 -0
  72. package/dist/commands/init.js.map +1 -0
  73. package/dist/commands/intent-scan.d.ts +17 -0
  74. package/dist/commands/intent-scan.d.ts.map +1 -0
  75. package/dist/commands/intent-scan.js +336 -0
  76. package/dist/commands/intent-scan.js.map +1 -0
  77. package/dist/commands/key-import.d.ts +3 -0
  78. package/dist/commands/key-import.d.ts.map +1 -0
  79. package/dist/commands/key-import.js +54 -0
  80. package/dist/commands/key-import.js.map +1 -0
  81. package/dist/commands/keygen.d.ts +3 -0
  82. package/dist/commands/keygen.d.ts.map +1 -0
  83. package/dist/commands/keygen.js +53 -0
  84. package/dist/commands/keygen.js.map +1 -0
  85. package/dist/commands/keys.d.ts +3 -0
  86. package/dist/commands/keys.d.ts.map +1 -0
  87. package/dist/commands/keys.js +56 -0
  88. package/dist/commands/keys.js.map +1 -0
  89. package/dist/commands/list.d.ts +3 -0
  90. package/dist/commands/list.d.ts.map +1 -0
  91. package/dist/commands/list.js +45 -0
  92. package/dist/commands/list.js.map +1 -0
  93. package/dist/commands/lock.d.ts +11 -0
  94. package/dist/commands/lock.d.ts.map +1 -0
  95. package/dist/commands/lock.js +220 -0
  96. package/dist/commands/lock.js.map +1 -0
  97. package/dist/commands/log.d.ts +8 -0
  98. package/dist/commands/log.d.ts.map +1 -0
  99. package/dist/commands/log.js +95 -0
  100. package/dist/commands/log.js.map +1 -0
  101. package/dist/commands/mcp-health.d.ts +3 -0
  102. package/dist/commands/mcp-health.d.ts.map +1 -0
  103. package/dist/commands/mcp-health.js +305 -0
  104. package/dist/commands/mcp-health.js.map +1 -0
  105. package/dist/commands/mcp-restart.d.ts +3 -0
  106. package/dist/commands/mcp-restart.d.ts.map +1 -0
  107. package/dist/commands/mcp-restart.js +176 -0
  108. package/dist/commands/mcp-restart.js.map +1 -0
  109. package/dist/commands/merge-order.d.ts +9 -0
  110. package/dist/commands/merge-order.d.ts.map +1 -0
  111. package/dist/commands/merge-order.js +138 -0
  112. package/dist/commands/merge-order.js.map +1 -0
  113. package/dist/commands/merged.d.ts +8 -0
  114. package/dist/commands/merged.d.ts.map +1 -0
  115. package/dist/commands/merged.js +39 -0
  116. package/dist/commands/merged.js.map +1 -0
  117. package/dist/commands/msg-read.d.ts +3 -0
  118. package/dist/commands/msg-read.d.ts.map +1 -0
  119. package/dist/commands/msg-read.js +70 -0
  120. package/dist/commands/msg-read.js.map +1 -0
  121. package/dist/commands/pulse.d.ts +9 -0
  122. package/dist/commands/pulse.d.ts.map +1 -0
  123. package/dist/commands/pulse.js +232 -0
  124. package/dist/commands/pulse.js.map +1 -0
  125. package/dist/commands/radar.d.ts +3 -0
  126. package/dist/commands/radar.d.ts.map +1 -0
  127. package/dist/commands/radar.js +147 -0
  128. package/dist/commands/radar.js.map +1 -0
  129. package/dist/commands/ready-check.d.ts +9 -0
  130. package/dist/commands/ready-check.d.ts.map +1 -0
  131. package/dist/commands/ready-check.js +156 -0
  132. package/dist/commands/ready-check.js.map +1 -0
  133. package/dist/commands/register.d.ts +3 -0
  134. package/dist/commands/register.d.ts.map +1 -0
  135. package/dist/commands/register.js +124 -0
  136. package/dist/commands/register.js.map +1 -0
  137. package/dist/commands/send.d.ts +3 -0
  138. package/dist/commands/send.d.ts.map +1 -0
  139. package/dist/commands/send.js +134 -0
  140. package/dist/commands/send.js.map +1 -0
  141. package/dist/commands/stale.d.ts +8 -0
  142. package/dist/commands/stale.d.ts.map +1 -0
  143. package/dist/commands/stale.js +38 -0
  144. package/dist/commands/stale.js.map +1 -0
  145. package/dist/commands/status.d.ts +9 -0
  146. package/dist/commands/status.d.ts.map +1 -0
  147. package/dist/commands/status.js +41 -0
  148. package/dist/commands/status.js.map +1 -0
  149. package/dist/commands/sync-all.d.ts +9 -0
  150. package/dist/commands/sync-all.d.ts.map +1 -0
  151. package/dist/commands/sync-all.js +180 -0
  152. package/dist/commands/sync-all.js.map +1 -0
  153. package/dist/commands/sync.d.ts +8 -0
  154. package/dist/commands/sync.d.ts.map +1 -0
  155. package/dist/commands/sync.js +49 -0
  156. package/dist/commands/sync.js.map +1 -0
  157. package/dist/commands/tension.d.ts +12 -0
  158. package/dist/commands/tension.d.ts.map +1 -0
  159. package/dist/commands/tension.js +242 -0
  160. package/dist/commands/tension.js.map +1 -0
  161. package/dist/commands/torrent.d.ts +9 -0
  162. package/dist/commands/torrent.d.ts.map +1 -0
  163. package/dist/commands/torrent.js +431 -0
  164. package/dist/commands/torrent.js.map +1 -0
  165. package/dist/commands/tui.d.ts +8 -0
  166. package/dist/commands/tui.d.ts.map +1 -0
  167. package/dist/commands/tui.js +15 -0
  168. package/dist/commands/tui.js.map +1 -0
  169. package/dist/commands/wake.d.ts +9 -0
  170. package/dist/commands/wake.d.ts.map +1 -0
  171. package/dist/commands/wake.js +188 -0
  172. package/dist/commands/wake.js.map +1 -0
  173. package/dist/commands/watch.d.ts +3 -0
  174. package/dist/commands/watch.d.ts.map +1 -0
  175. package/dist/commands/watch.js +245 -0
  176. package/dist/commands/watch.js.map +1 -0
  177. package/dist/commands/who-touched.d.ts +9 -0
  178. package/dist/commands/who-touched.d.ts.map +1 -0
  179. package/dist/commands/who-touched.js +186 -0
  180. package/dist/commands/who-touched.js.map +1 -0
  181. package/dist/index.d.ts +6 -0
  182. package/dist/index.d.ts.map +1 -0
  183. package/dist/index.js +6 -0
  184. package/dist/index.js.map +1 -0
  185. package/dist/lib/agent-errors.d.ts +41 -0
  186. package/dist/lib/agent-errors.d.ts.map +1 -0
  187. package/dist/lib/agent-errors.js +143 -0
  188. package/dist/lib/agent-errors.js.map +1 -0
  189. package/dist/lib/ast.d.ts +56 -0
  190. package/dist/lib/ast.d.ts.map +1 -0
  191. package/dist/lib/ast.js +134 -0
  192. package/dist/lib/ast.js.map +1 -0
  193. package/dist/lib/config.d.ts +33 -0
  194. package/dist/lib/config.d.ts.map +1 -0
  195. package/dist/lib/config.js +127 -0
  196. package/dist/lib/config.js.map +1 -0
  197. package/dist/lib/crdt.d.ts +83 -0
  198. package/dist/lib/crdt.d.ts.map +1 -0
  199. package/dist/lib/crdt.js +160 -0
  200. package/dist/lib/crdt.js.map +1 -0
  201. package/dist/lib/crypto.d.ts +71 -0
  202. package/dist/lib/crypto.d.ts.map +1 -0
  203. package/dist/lib/crypto.js +172 -0
  204. package/dist/lib/crypto.js.map +1 -0
  205. package/dist/lib/errors.d.ts +35 -0
  206. package/dist/lib/errors.d.ts.map +1 -0
  207. package/dist/lib/errors.js +71 -0
  208. package/dist/lib/errors.js.map +1 -0
  209. package/dist/lib/license.d.ts +61 -0
  210. package/dist/lib/license.d.ts.map +1 -0
  211. package/dist/lib/license.js +171 -0
  212. package/dist/lib/license.js.map +1 -0
  213. package/dist/lib/security.d.ts +53 -0
  214. package/dist/lib/security.d.ts.map +1 -0
  215. package/dist/lib/security.js +122 -0
  216. package/dist/lib/security.js.map +1 -0
  217. package/dist/lib/update-check.d.ts +11 -0
  218. package/dist/lib/update-check.d.ts.map +1 -0
  219. package/dist/lib/update-check.js +113 -0
  220. package/dist/lib/update-check.js.map +1 -0
  221. package/dist/storage/adapter.d.ts +58 -0
  222. package/dist/storage/adapter.d.ts.map +1 -0
  223. package/dist/storage/adapter.js +8 -0
  224. package/dist/storage/adapter.js.map +1 -0
  225. package/dist/storage/factory.d.ts +6 -0
  226. package/dist/storage/factory.d.ts.map +1 -0
  227. package/dist/storage/factory.js +22 -0
  228. package/dist/storage/factory.js.map +1 -0
  229. package/dist/storage/index.d.ts +5 -0
  230. package/dist/storage/index.d.ts.map +1 -0
  231. package/dist/storage/index.js +5 -0
  232. package/dist/storage/index.js.map +1 -0
  233. package/dist/storage/local.d.ts +24 -0
  234. package/dist/storage/local.d.ts.map +1 -0
  235. package/dist/storage/local.js +101 -0
  236. package/dist/storage/local.js.map +1 -0
  237. package/dist/storage/supabase.d.ts +52 -0
  238. package/dist/storage/supabase.d.ts.map +1 -0
  239. package/dist/storage/supabase.js +221 -0
  240. package/dist/storage/supabase.js.map +1 -0
  241. package/dist/tui/screen.d.ts +14 -0
  242. package/dist/tui/screen.d.ts.map +1 -0
  243. package/dist/tui/screen.js +136 -0
  244. package/dist/tui/screen.js.map +1 -0
  245. package/package.json +89 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * License Activation Command
3
+ *
4
+ * Activates a Pro license key.
5
+ * Usage: spidersan activate <license-key>
6
+ */
7
+ import { Command } from 'commander';
8
+ import { verifyLicense, saveLicense, getLicenseStatus } from '../lib/license.js';
9
+ export const activateCommand = new Command('activate')
10
+ .description('Activate a Pro license key')
11
+ .argument('<license-key>', 'Your license key from spidersan.dev/pro')
12
+ .action(async (licenseKey) => {
13
+ console.log('šŸ•·ļø Activating license...\n');
14
+ // Verify the license
15
+ const license = verifyLicense(licenseKey);
16
+ if (!license) {
17
+ console.error('āŒ Invalid license key');
18
+ console.error(' Please check your key and try again.');
19
+ console.error(' Get a license at: spidersan.dev/pro');
20
+ process.exit(1);
21
+ }
22
+ if (license.isExpired) {
23
+ console.error('āŒ This license has expired');
24
+ console.error(` Expired on: ${new Date(license.data.expiresAt).toLocaleDateString()}`);
25
+ console.error(' Renew at: spidersan.dev/pro');
26
+ process.exit(1);
27
+ }
28
+ // Save the license
29
+ const saved = saveLicense(licenseKey);
30
+ if (!saved) {
31
+ console.error('āŒ Failed to save license');
32
+ console.error(' Please check file permissions for ~/.spidersan/');
33
+ process.exit(1);
34
+ }
35
+ // Show success
36
+ const status = getLicenseStatus();
37
+ console.log('āœ… Pro License activated!\n');
38
+ console.log(` Email: ${status.email}`);
39
+ console.log(` Plan: ${status.plan.toUpperCase()}`);
40
+ console.log(` Expires: ${new Date(status.expiresAt).toLocaleDateString()}`);
41
+ console.log(` Features: ${status.features.join(', ')}`);
42
+ console.log('');
43
+ console.log('šŸ•·ļø Thank you for supporting Spidersan!');
44
+ });
45
+ //# sourceMappingURL=activate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activate.js","sourceRoot":"","sources":["../../src/commands/activate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACjD,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,eAAe,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,EAAE;IACjC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,qBAAqB;IACrB,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,mBAAmB;IACnB,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,eAAe;IACf,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAU,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * spidersan active-windows
3
+ *
4
+ * Layer 4: Temporal Conflict Detection
5
+ *
6
+ * Tracks when agents are actively working and detects
7
+ * overlapping work sessions on the same files/areas.
8
+ *
9
+ * Usage:
10
+ * spidersan active-windows # Show current active sessions
11
+ * spidersan active-windows --history # Show recent session overlaps
12
+ * spidersan active-windows --files # Group by files touched
13
+ */
14
+ import { Command } from 'commander';
15
+ export declare const activeWindowsCommand: Command;
16
+ //# sourceMappingURL=active-windows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-windows.d.ts","sourceRoot":"","sources":["../../src/commands/active-windows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiSpC,eAAO,MAAM,oBAAoB,SA2I3B,CAAC"}
@@ -0,0 +1,373 @@
1
+ /**
2
+ * spidersan active-windows
3
+ *
4
+ * Layer 4: Temporal Conflict Detection
5
+ *
6
+ * Tracks when agents are actively working and detects
7
+ * overlapping work sessions on the same files/areas.
8
+ *
9
+ * Usage:
10
+ * spidersan active-windows # Show current active sessions
11
+ * spidersan active-windows --history # Show recent session overlaps
12
+ * spidersan active-windows --files # Group by files touched
13
+ */
14
+ import { Command } from 'commander';
15
+ import { readFileSync, readdirSync, existsSync } from 'fs';
16
+ import { join } from 'path';
17
+ import { execSync } from 'child_process';
18
+ import chalk from 'chalk';
19
+ // Parse collab for dawn/close entries
20
+ function findSessionBoundaries(collabDir) {
21
+ const sessions = new Map();
22
+ const files = readdirSync(collabDir)
23
+ .filter(f => f.match(/^\d{4}-\d{2}-\d{2}-daily\.md$/))
24
+ .sort()
25
+ .slice(-3); // Last 3 days
26
+ for (const file of files) {
27
+ const dateMatch = file.match(/^(\d{4}-\d{2}-\d{2})/);
28
+ if (!dateMatch)
29
+ continue;
30
+ const dateStr = dateMatch[1];
31
+ const content = readFileSync(join(collabDir, file), 'utf-8');
32
+ // Find agent entries with times
33
+ const entryPattern = /^##\s+([\p{Emoji}]+)\s+(\w+)\s*[—-]\s*(\d{1,2}):(\d{2})/gmu;
34
+ let match;
35
+ while ((match = entryPattern.exec(content)) !== null) {
36
+ const agent = match[2];
37
+ const hour = parseInt(match[3]);
38
+ const minute = parseInt(match[4]);
39
+ const entryTime = new Date(`${dateStr}T${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:00`);
40
+ // Check if it's a dawn or close entry
41
+ const contextStart = match.index;
42
+ const contextEnd = Math.min(content.length, contextStart + 500);
43
+ const context = content.substring(contextStart, contextEnd).toLowerCase();
44
+ if (!sessions.has(agent)) {
45
+ sessions.set(agent, []);
46
+ }
47
+ const agentSessions = sessions.get(agent);
48
+ if (context.includes('dawn') || context.includes('morning') || context.includes('joining')) {
49
+ // Start of session
50
+ agentSessions.push({ dawn: entryTime });
51
+ }
52
+ else if (context.includes('close') || context.includes('closing') || context.includes('night')) {
53
+ // End of session
54
+ const lastSession = agentSessions[agentSessions.length - 1];
55
+ if (lastSession && !lastSession.close) {
56
+ lastSession.close = entryTime;
57
+ }
58
+ }
59
+ }
60
+ }
61
+ return sessions;
62
+ }
63
+ // Get recent git activity per author
64
+ function getGitActivity(repoPath, hours) {
65
+ const activity = new Map();
66
+ try {
67
+ const since = new Date(Date.now() - hours * 60 * 60 * 1000);
68
+ const sinceStr = since.toISOString();
69
+ // Get commits with files changed
70
+ const log = execSync(`git log --since="${sinceStr}" --name-only --pretty=format:"COMMIT:%h|%an|%ai" 2>/dev/null`, { cwd: repoPath, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
71
+ const lines = log.split('\n');
72
+ let currentAuthor = '';
73
+ let currentTime = null;
74
+ let currentFiles = [];
75
+ for (const line of lines) {
76
+ if (line.startsWith('COMMIT:')) {
77
+ // Save previous commit
78
+ if (currentAuthor && currentFiles.length > 0 && currentTime) {
79
+ if (!activity.has(currentAuthor)) {
80
+ activity.set(currentAuthor, []);
81
+ }
82
+ activity.get(currentAuthor).push({
83
+ files: [...currentFiles],
84
+ timestamp: currentTime
85
+ });
86
+ }
87
+ // Parse new commit
88
+ const parts = line.substring(7).split('|');
89
+ currentAuthor = parts[1] || 'Unknown';
90
+ currentTime = new Date(parts[2]);
91
+ currentFiles = [];
92
+ }
93
+ else if (line.trim()) {
94
+ currentFiles.push(line.trim());
95
+ }
96
+ }
97
+ // Don't forget last commit
98
+ if (currentAuthor && currentFiles.length > 0 && currentTime) {
99
+ if (!activity.has(currentAuthor)) {
100
+ activity.set(currentAuthor, []);
101
+ }
102
+ activity.get(currentAuthor).push({
103
+ files: [...currentFiles],
104
+ timestamp: currentTime
105
+ });
106
+ }
107
+ }
108
+ catch (e) {
109
+ // Not a git repo or no commits
110
+ }
111
+ return activity;
112
+ }
113
+ // Build work windows from git activity
114
+ function buildWorkWindows(repoPath, hours) {
115
+ const activity = getGitActivity(repoPath, hours);
116
+ const windows = [];
117
+ // Get machine name from hostname
118
+ let machine = 'Unknown';
119
+ try {
120
+ machine = execSync('hostname', { encoding: 'utf-8' }).trim();
121
+ }
122
+ catch {
123
+ // Ignore errors getting hostname
124
+ }
125
+ for (const [author, commits] of activity) {
126
+ if (commits.length === 0)
127
+ continue;
128
+ // Sort by time
129
+ commits.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
130
+ // Group commits into windows (gap > 30 min = new window)
131
+ let windowStart = commits[0].timestamp;
132
+ let windowEnd = commits[0].timestamp;
133
+ let windowFiles = new Set(commits[0].files);
134
+ for (let i = 1; i < commits.length; i++) {
135
+ const gap = commits[i].timestamp.getTime() - windowEnd.getTime();
136
+ if (gap > 30 * 60 * 1000) { // 30 min gap
137
+ // Save current window
138
+ windows.push({
139
+ agent: author,
140
+ machine,
141
+ startTime: windowStart,
142
+ endTime: windowEnd,
143
+ filesModified: Array.from(windowFiles),
144
+ areasWorked: extractAreas(Array.from(windowFiles))
145
+ });
146
+ // Start new window
147
+ windowStart = commits[i].timestamp;
148
+ windowEnd = commits[i].timestamp;
149
+ windowFiles = new Set(commits[i].files);
150
+ }
151
+ else {
152
+ windowEnd = commits[i].timestamp;
153
+ commits[i].files.forEach(f => windowFiles.add(f));
154
+ }
155
+ }
156
+ // Check if last window is still active (last commit < 2 hours ago)
157
+ const isActive = Date.now() - windowEnd.getTime() < 2 * 60 * 60 * 1000;
158
+ windows.push({
159
+ agent: author,
160
+ machine,
161
+ startTime: windowStart,
162
+ endTime: isActive ? null : windowEnd,
163
+ filesModified: Array.from(windowFiles),
164
+ areasWorked: extractAreas(Array.from(windowFiles))
165
+ });
166
+ }
167
+ return windows;
168
+ }
169
+ function extractAreas(files) {
170
+ const areas = new Set();
171
+ for (const file of files) {
172
+ const parts = file.split('/');
173
+ if (parts.length > 1) {
174
+ areas.add(parts[0]); // Top level directory
175
+ if (parts.length > 2) {
176
+ areas.add(`${parts[0]}/${parts[1]}`); // Second level
177
+ }
178
+ }
179
+ }
180
+ return Array.from(areas);
181
+ }
182
+ function findWindowOverlaps(windows) {
183
+ const overlaps = [];
184
+ for (let i = 0; i < windows.length; i++) {
185
+ for (let j = i + 1; j < windows.length; j++) {
186
+ const w1 = windows[i];
187
+ const w2 = windows[j];
188
+ // Same agent can't conflict with self
189
+ if (w1.agent === w2.agent)
190
+ continue;
191
+ // Calculate time overlap
192
+ const start1 = w1.startTime.getTime();
193
+ const end1 = (w1.endTime || new Date()).getTime();
194
+ const start2 = w2.startTime.getTime();
195
+ const end2 = (w2.endTime || new Date()).getTime();
196
+ const overlapStart = Math.max(start1, start2);
197
+ const overlapEnd = Math.min(end1, end2);
198
+ if (overlapStart >= overlapEnd)
199
+ continue; // No time overlap
200
+ const overlapMinutes = Math.round((overlapEnd - overlapStart) / (60 * 1000));
201
+ // Check file/area overlap
202
+ const sharedFiles = w1.filesModified.filter(f => w2.filesModified.includes(f));
203
+ const sharedAreas = w1.areasWorked.filter(a => w2.areasWorked.includes(a));
204
+ // Determine severity
205
+ let severity = 'safe';
206
+ if (sharedFiles.length > 0) {
207
+ severity = 'conflict';
208
+ }
209
+ else if (sharedAreas.length > 0) {
210
+ severity = 'warn';
211
+ }
212
+ if (severity !== 'safe') {
213
+ overlaps.push({
214
+ window1: w1,
215
+ window2: w2,
216
+ overlapMinutes,
217
+ sharedFiles,
218
+ sharedAreas,
219
+ severity
220
+ });
221
+ }
222
+ }
223
+ }
224
+ return overlaps.sort((a, b) => {
225
+ if (a.severity === 'conflict' && b.severity !== 'conflict')
226
+ return -1;
227
+ if (b.severity === 'conflict' && a.severity !== 'conflict')
228
+ return 1;
229
+ return b.overlapMinutes - a.overlapMinutes;
230
+ });
231
+ }
232
+ function formatDuration(start, end) {
233
+ const endTime = end || new Date();
234
+ const minutes = Math.round((endTime.getTime() - start.getTime()) / (60 * 1000));
235
+ if (minutes < 60)
236
+ return `${minutes}m`;
237
+ const hours = Math.floor(minutes / 60);
238
+ const mins = minutes % 60;
239
+ return `${hours}h${mins > 0 ? ` ${mins}m` : ''}`;
240
+ }
241
+ function formatTime(date) {
242
+ return date.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' });
243
+ }
244
+ export const activeWindowsCommand = new Command('active-windows')
245
+ .description('Detect overlapping work sessions (Layer 4)')
246
+ .option('--hours <n>', 'Hours to look back', '24')
247
+ .option('--repo <path>', 'Repository to analyze', process.cwd())
248
+ .option('--json', 'Output as JSON')
249
+ .option('--files', 'Group by files touched')
250
+ .option('--all-repos', 'Scan all /Dev repositories')
251
+ .addHelpText('after', `
252
+ Examples:
253
+ spidersan active-windows # Show sessions in current repo
254
+ spidersan active-windows --hours 48 # Look back 48 hours
255
+ spidersan active-windows --all-repos # Scan all repos
256
+ spidersan active-windows --files # Show files per session
257
+
258
+ Layer 4 of Spidersan's 7-layer conflict detection:
259
+ L1: File-level (git conflicts)
260
+ L2: Semantic (code dependencies)
261
+ L3: Intent (collab entries)
262
+ L4: Temporal (active windows) ← THIS
263
+ L5: Cross-repo (breaking changes)
264
+ L6: Predictive (pattern analysis)
265
+ L7: Resolution (auto-merge)
266
+ `)
267
+ .action((options) => {
268
+ const hours = parseInt(options.hours) || 24;
269
+ const isJson = options.json;
270
+ let allWindows = [];
271
+ if (options.allRepos) {
272
+ // Scan all /Dev repos
273
+ const devDir = join(process.env.HOME || '', 'Dev');
274
+ if (existsSync(devDir)) {
275
+ const repos = readdirSync(devDir)
276
+ .filter(d => existsSync(join(devDir, d, '.git')));
277
+ for (const repo of repos) {
278
+ const repoPath = join(devDir, repo);
279
+ const windows = buildWorkWindows(repoPath, hours);
280
+ // Tag windows with repo name
281
+ windows.forEach(w => {
282
+ w.areasWorked = w.areasWorked.map(a => `${repo}/${a}`);
283
+ w.filesModified = w.filesModified.map(f => `${repo}/${f}`);
284
+ });
285
+ allWindows.push(...windows);
286
+ }
287
+ }
288
+ }
289
+ else {
290
+ allWindows = buildWorkWindows(options.repo, hours);
291
+ }
292
+ // Find overlaps
293
+ const overlaps = findWindowOverlaps(allWindows);
294
+ if (isJson) {
295
+ console.log(JSON.stringify({
296
+ windows: allWindows.map(w => ({
297
+ ...w,
298
+ startTime: w.startTime.toISOString(),
299
+ endTime: w.endTime?.toISOString() || null
300
+ })),
301
+ overlaps: overlaps.map(o => ({
302
+ ...o,
303
+ window1: {
304
+ agent: o.window1.agent,
305
+ startTime: o.window1.startTime.toISOString()
306
+ },
307
+ window2: {
308
+ agent: o.window2.agent,
309
+ startTime: o.window2.startTime.toISOString()
310
+ }
311
+ })),
312
+ summary: {
313
+ totalWindows: allWindows.length,
314
+ activeNow: allWindows.filter(w => !w.endTime).length,
315
+ conflicts: overlaps.filter(o => o.severity === 'conflict').length,
316
+ warnings: overlaps.filter(o => o.severity === 'warn').length
317
+ }
318
+ }, null, 2));
319
+ return;
320
+ }
321
+ console.log(chalk.bold('\nšŸ•·ļø ACTIVE WINDOWS — Layer 4 Conflict Detection\n'));
322
+ // Show active sessions
323
+ const active = allWindows.filter(w => !w.endTime);
324
+ const recent = allWindows.filter(w => w.endTime);
325
+ if (active.length > 0) {
326
+ console.log(chalk.bold.green('🟢 Currently Active:\n'));
327
+ for (const w of active) {
328
+ console.log(` ${chalk.cyan(w.agent)} (${w.machine})`);
329
+ console.log(` Started: ${formatTime(w.startTime)} (${formatDuration(w.startTime, null)} ago)`);
330
+ console.log(` Areas: ${chalk.gray(w.areasWorked.join(', ') || 'none')}`);
331
+ if (options.files && w.filesModified.length > 0) {
332
+ console.log(` Files: ${chalk.gray(w.filesModified.slice(0, 5).join(', '))}`);
333
+ }
334
+ console.log();
335
+ }
336
+ }
337
+ else {
338
+ console.log(chalk.gray('No active sessions detected\n'));
339
+ }
340
+ // Show recent sessions
341
+ if (recent.length > 0) {
342
+ console.log(chalk.bold('šŸ“Š Recent Sessions:\n'));
343
+ for (const w of recent.slice(-10)) {
344
+ console.log(` ${chalk.cyan(w.agent)} (${w.machine})`);
345
+ console.log(` ${formatTime(w.startTime)} - ${formatTime(w.endTime)} (${formatDuration(w.startTime, w.endTime)})`);
346
+ console.log(` Areas: ${chalk.gray(w.areasWorked.join(', ') || 'none')}`);
347
+ console.log();
348
+ }
349
+ }
350
+ // Show overlaps
351
+ if (overlaps.length > 0) {
352
+ console.log(chalk.bold.yellow('\nāš ļø Session Overlaps Detected:\n'));
353
+ for (const overlap of overlaps) {
354
+ const icon = overlap.severity === 'conflict' ? 'šŸ”“' : '🟠';
355
+ const label = overlap.severity === 'conflict' ? 'FILE CONFLICT' : 'AREA OVERLAP';
356
+ console.log(`${icon} ${chalk.bold(label)} (${overlap.overlapMinutes} min overlap)`);
357
+ console.log(` ${chalk.cyan(overlap.window1.agent)} ↔ ${chalk.cyan(overlap.window2.agent)}`);
358
+ if (overlap.sharedFiles.length > 0) {
359
+ console.log(` Shared files: ${chalk.red(overlap.sharedFiles.join(', '))}`);
360
+ }
361
+ if (overlap.sharedAreas.length > 0) {
362
+ console.log(` Shared areas: ${chalk.yellow(overlap.sharedAreas.join(', '))}`);
363
+ }
364
+ console.log();
365
+ }
366
+ }
367
+ else {
368
+ console.log(chalk.green('\nāœ… No overlapping sessions detected\n'));
369
+ }
370
+ // Summary
371
+ console.log(chalk.gray(`Scanned ${hours}h of activity, found ${allWindows.length} session(s)\n`));
372
+ });
373
+ //# sourceMappingURL=active-windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-windows.js","sourceRoot":"","sources":["../../src/commands/active-windows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAY,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,IAAI,EAAY,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAsB1B,sCAAsC;AACtC,SAAS,qBAAqB,CAAC,SAAiB;IAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2C,CAAC;IAEpE,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACrD,IAAI,EAAE;SACN,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,cAAc;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAE7D,gCAAgC;QAChC,MAAM,YAAY,GAAG,4DAA4D,CAAC;QAClF,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAElC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAEtH,sCAAsC;YACtC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YAE1E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;YAED,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;YAE3C,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzF,mBAAmB;gBACnB,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/F,iBAAiB;gBACjB,MAAM,WAAW,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC5D,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;oBACpC,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;gBAClC,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,qCAAqC;AACrC,SAAS,cAAc,CAAC,QAAgB,EAAE,KAAa;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkD,CAAC;IAE3E,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAErC,iCAAiC;QACjC,MAAM,GAAG,GAAG,QAAQ,CAChB,oBAAoB,QAAQ,+DAA+D,EAC3F,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CACpE,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,WAAW,GAAgB,IAAI,CAAC;QACpC,IAAI,YAAY,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,uBAAuB;gBACvB,IAAI,aAAa,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;oBAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;wBAC/B,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;oBACpC,CAAC;oBACD,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,IAAI,CAAC;wBAC9B,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC;wBACxB,SAAS,EAAE,WAAW;qBACzB,CAAC,CAAC;gBACP,CAAC;gBAED,mBAAmB;gBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3C,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;gBACtC,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,YAAY,GAAG,EAAE,CAAC;YACtB,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,IAAI,aAAa,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC/B,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,IAAI,CAAC;gBAC9B,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC;gBACxB,SAAS,EAAE,WAAW;aACzB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,+BAA+B;IACnC,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,uCAAuC;AACvC,SAAS,gBAAgB,CAAC,QAAgB,EAAE,KAAa;IACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjD,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,iCAAiC;IACjC,IAAI,OAAO,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC;QACD,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACL,iCAAiC;IACrC,CAAC;IAED,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEnC,eAAe;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAEtE,yDAAyD;QACzD,IAAI,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvC,IAAI,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrC,IAAI,WAAW,GAAgB,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YAEjE,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAE,aAAa;gBACtC,sBAAsB;gBACtB,OAAO,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,MAAM;oBACb,OAAO;oBACP,SAAS,EAAE,WAAW;oBACtB,OAAO,EAAE,SAAS;oBAClB,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;oBACtC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBACrD,CAAC,CAAC;gBAEH,mBAAmB;gBACnB,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACnC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACjC,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACJ,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACjC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC;QACL,CAAC;QAED,mEAAmE;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAEvE,OAAO,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,MAAM;YACb,OAAO;YACP,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACpC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;YACtC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACrD,CAAC,CAAC;IACP,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAAe;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,sBAAsB;YAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,eAAe;YAC1D,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAqB;IAC7C,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEtB,sCAAsC;YACtC,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;gBAAE,SAAS;YAEpC,yBAAyB;YACzB,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YAElD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAExC,IAAI,YAAY,IAAI,UAAU;gBAAE,SAAS,CAAE,kBAAkB;YAE7D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAE7E,0BAA0B;YAC1B,MAAM,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3E,qBAAqB;YACrB,IAAI,QAAQ,GAA8B,MAAM,CAAC;YACjD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,QAAQ,GAAG,UAAU,CAAC;YAC1B,CAAC;iBAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,QAAQ,GAAG,MAAM,CAAC;YACtB,CAAC;YAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACtB,QAAQ,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,EAAE;oBACX,cAAc;oBACd,WAAW;oBACX,WAAW;oBACX,QAAQ;iBACX,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;IAC/C,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,cAAc,CAAC,KAAW,EAAE,GAAgB;IACjD,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAEhF,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC;IAC1B,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,UAAU,CAAC,IAAU;IAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC5D,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,aAAa,EAAE,oBAAoB,EAAE,IAAI,CAAC;KACjD,MAAM,CAAC,eAAe,EAAE,uBAAuB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC/D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC;KAC3C,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC;KACnD,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;CAezB,CAAC;KACG,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5B,IAAI,UAAU,GAAiB,EAAE,CAAC;IAElC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,sBAAsB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;iBAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAEtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAClD,6BAA6B;gBAC7B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBAChB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;oBACvD,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACvB,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1B,GAAG,CAAC;gBACJ,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;gBACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI;aAC5C,CAAC,CAAC;YACH,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB,GAAG,CAAC;gBACJ,OAAO,EAAE;oBACL,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;oBACtB,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;iBAC/C;gBACD,OAAO,EAAE;oBACL,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;oBACtB,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;iBAC/C;aACJ,CAAC,CAAC;YACH,OAAO,EAAE;gBACL,YAAY,EAAE,UAAU,CAAC,MAAM;gBAC/B,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;gBACpD,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;gBACjE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;aAC/D;SACJ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAE/E,uBAAuB;IACvB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEjD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAClG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5E,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,OAAQ,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACtH,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAErE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;YAEjF,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,cAAc,eAAe,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAE7F,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,wBAAwB,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC;AACtG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * spidersan audit-mark
3
+ *
4
+ * Tag branches as security-reviewed by Sherlocksan (or other auditors).
5
+ * Stores audit metadata in the branch description field as JSON prefix.
6
+ *
7
+ * Part of: Security Pipeline (ssan + srlk)
8
+ * See: treebird-internal/collab/DESIGN_security_pipeline_ssan_srlk.md
9
+ */
10
+ import { Command } from 'commander';
11
+ export declare const auditMarkCommand: Command;
12
+ //# sourceMappingURL=audit-mark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-mark.d.ts","sourceRoot":"","sources":["../../src/commands/audit-mark.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC,eAAO,MAAM,gBAAgB,SA2JvB,CAAC"}