@swarmdo/cli 1.29.0 → 1.37.0

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 (169) hide show
  1. package/.claude/helpers/auto-memory-hook.mjs +65 -32
  2. package/README.md +6 -3
  3. package/dist/src/affected/affected.d.ts +6 -1
  4. package/dist/src/affected/affected.d.ts.map +1 -1
  5. package/dist/src/affected/affected.js +7 -2
  6. package/dist/src/affected/affected.js.map +1 -1
  7. package/dist/src/apply/apply.d.ts.map +1 -1
  8. package/dist/src/apply/apply.js +18 -7
  9. package/dist/src/apply/apply.js.map +1 -1
  10. package/dist/src/changelog/changelog.d.ts.map +1 -1
  11. package/dist/src/changelog/changelog.js +4 -1
  12. package/dist/src/changelog/changelog.js.map +1 -1
  13. package/dist/src/codegraph/codegraph.d.ts.map +1 -1
  14. package/dist/src/codegraph/codegraph.js +11 -1
  15. package/dist/src/codegraph/codegraph.js.map +1 -1
  16. package/dist/src/commands/comms.d.ts +16 -0
  17. package/dist/src/commands/comms.d.ts.map +1 -0
  18. package/dist/src/commands/comms.js +280 -0
  19. package/dist/src/commands/comms.js.map +1 -0
  20. package/dist/src/commands/compact.d.ts.map +1 -1
  21. package/dist/src/commands/compact.js +6 -2
  22. package/dist/src/commands/compact.js.map +1 -1
  23. package/dist/src/commands/config.d.ts.map +1 -1
  24. package/dist/src/commands/config.js +1 -0
  25. package/dist/src/commands/config.js.map +1 -1
  26. package/dist/src/commands/hooks.d.ts.map +1 -1
  27. package/dist/src/commands/hooks.js +121 -1
  28. package/dist/src/commands/hooks.js.map +1 -1
  29. package/dist/src/commands/hotspots.d.ts.map +1 -1
  30. package/dist/src/commands/hotspots.js +8 -2
  31. package/dist/src/commands/hotspots.js.map +1 -1
  32. package/dist/src/commands/index.d.ts.map +1 -1
  33. package/dist/src/commands/index.js +6 -0
  34. package/dist/src/commands/index.js.map +1 -1
  35. package/dist/src/commands/permissions.d.ts +14 -0
  36. package/dist/src/commands/permissions.d.ts.map +1 -0
  37. package/dist/src/commands/permissions.js +92 -0
  38. package/dist/src/commands/permissions.js.map +1 -0
  39. package/dist/src/commands/usage.d.ts.map +1 -1
  40. package/dist/src/commands/usage.js +208 -3
  41. package/dist/src/commands/usage.js.map +1 -1
  42. package/dist/src/comms/mailbox.d.ts +88 -0
  43. package/dist/src/comms/mailbox.d.ts.map +1 -0
  44. package/dist/src/comms/mailbox.js +138 -0
  45. package/dist/src/comms/mailbox.js.map +1 -0
  46. package/dist/src/comms/store.d.ts +21 -0
  47. package/dist/src/comms/store.d.ts.map +1 -0
  48. package/dist/src/comms/store.js +44 -0
  49. package/dist/src/comms/store.js.map +1 -0
  50. package/dist/src/compact/compact.d.ts.map +1 -1
  51. package/dist/src/compact/compact.js +4 -1
  52. package/dist/src/compact/compact.js.map +1 -1
  53. package/dist/src/compact-snapshot/compact-snapshot.d.ts.map +1 -1
  54. package/dist/src/compact-snapshot/compact-snapshot.js +8 -3
  55. package/dist/src/compact-snapshot/compact-snapshot.js.map +1 -1
  56. package/dist/src/config-lint/lint.d.ts +3 -1
  57. package/dist/src/config-lint/lint.d.ts.map +1 -1
  58. package/dist/src/config-lint/lint.js +11 -4
  59. package/dist/src/config-lint/lint.js.map +1 -1
  60. package/dist/src/env/env.d.ts.map +1 -1
  61. package/dist/src/env/env.js +40 -14
  62. package/dist/src/env/env.js.map +1 -1
  63. package/dist/src/hooks-recipe/recipe.d.ts.map +1 -1
  64. package/dist/src/hooks-recipe/recipe.js +20 -1
  65. package/dist/src/hooks-recipe/recipe.js.map +1 -1
  66. package/dist/src/hotspots/hotspots.d.ts +3 -0
  67. package/dist/src/hotspots/hotspots.d.ts.map +1 -1
  68. package/dist/src/hotspots/hotspots.js +9 -0
  69. package/dist/src/hotspots/hotspots.js.map +1 -1
  70. package/dist/src/index.d.ts.map +1 -1
  71. package/dist/src/index.js +8 -0
  72. package/dist/src/index.js.map +1 -1
  73. package/dist/src/license/license.d.ts.map +1 -1
  74. package/dist/src/license/license.js +4 -1
  75. package/dist/src/license/license.js.map +1 -1
  76. package/dist/src/mcp-client.d.ts.map +1 -1
  77. package/dist/src/mcp-client.js +2 -0
  78. package/dist/src/mcp-client.js.map +1 -1
  79. package/dist/src/mcp-tools/comms-tools.d.ts +11 -0
  80. package/dist/src/mcp-tools/comms-tools.d.ts.map +1 -0
  81. package/dist/src/mcp-tools/comms-tools.js +93 -0
  82. package/dist/src/mcp-tools/comms-tools.js.map +1 -0
  83. package/dist/src/mcp-tools/index.d.ts +1 -0
  84. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  85. package/dist/src/mcp-tools/index.js +1 -0
  86. package/dist/src/mcp-tools/index.js.map +1 -1
  87. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  88. package/dist/src/mcp-tools/task-tools.js +4 -0
  89. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  90. package/dist/src/memory/memory-bridge.d.ts +2 -0
  91. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  92. package/dist/src/memory/memory-bridge.js +4 -2
  93. package/dist/src/memory/memory-bridge.js.map +1 -1
  94. package/dist/src/memory-inject/select.d.ts +82 -0
  95. package/dist/src/memory-inject/select.d.ts.map +1 -0
  96. package/dist/src/memory-inject/select.js +164 -0
  97. package/dist/src/memory-inject/select.js.map +1 -0
  98. package/dist/src/memory-vault/import.d.ts.map +1 -1
  99. package/dist/src/memory-vault/import.js +11 -1
  100. package/dist/src/memory-vault/import.js.map +1 -1
  101. package/dist/src/pack/pack.d.ts.map +1 -1
  102. package/dist/src/pack/pack.js +6 -2
  103. package/dist/src/pack/pack.js.map +1 -1
  104. package/dist/src/permissions/audit.d.ts +50 -0
  105. package/dist/src/permissions/audit.d.ts.map +1 -0
  106. package/dist/src/permissions/audit.js +127 -0
  107. package/dist/src/permissions/audit.js.map +1 -0
  108. package/dist/src/plugins/store/search.js +1 -1
  109. package/dist/src/plugins/store/search.js.map +1 -1
  110. package/dist/src/redact/redact.d.ts.map +1 -1
  111. package/dist/src/redact/redact.js +7 -2
  112. package/dist/src/redact/redact.js.map +1 -1
  113. package/dist/src/release/release.js +1 -1
  114. package/dist/src/release/release.js.map +1 -1
  115. package/dist/src/sbom/sbom.d.ts +2 -0
  116. package/dist/src/sbom/sbom.d.ts.map +1 -1
  117. package/dist/src/sbom/sbom.js +5 -0
  118. package/dist/src/sbom/sbom.js.map +1 -1
  119. package/dist/src/swarmvector/semantic-router.d.ts.map +1 -1
  120. package/dist/src/swarmvector/semantic-router.js +8 -3
  121. package/dist/src/swarmvector/semantic-router.js.map +1 -1
  122. package/dist/src/testreport/testreport.d.ts.map +1 -1
  123. package/dist/src/testreport/testreport.js +9 -2
  124. package/dist/src/testreport/testreport.js.map +1 -1
  125. package/dist/src/transcript/export.d.ts.map +1 -1
  126. package/dist/src/transcript/export.js +8 -4
  127. package/dist/src/transcript/export.js.map +1 -1
  128. package/dist/src/update/checker.d.ts +1 -0
  129. package/dist/src/update/checker.d.ts.map +1 -1
  130. package/dist/src/update/checker.js +7 -2
  131. package/dist/src/update/checker.js.map +1 -1
  132. package/dist/src/usage/limits.d.ts +77 -0
  133. package/dist/src/usage/limits.d.ts.map +1 -0
  134. package/dist/src/usage/limits.js +134 -0
  135. package/dist/src/usage/limits.js.map +1 -0
  136. package/dist/src/usage/model-efficiency.d.ts +29 -0
  137. package/dist/src/usage/model-efficiency.d.ts.map +1 -0
  138. package/dist/src/usage/model-efficiency.js +28 -0
  139. package/dist/src/usage/model-efficiency.js.map +1 -0
  140. package/dist/src/usage/reflect-html.d.ts +23 -0
  141. package/dist/src/usage/reflect-html.d.ts.map +1 -0
  142. package/dist/src/usage/reflect-html.js +95 -0
  143. package/dist/src/usage/reflect-html.js.map +1 -0
  144. package/dist/src/usage/reflect.d.ts +131 -0
  145. package/dist/src/usage/reflect.d.ts.map +1 -0
  146. package/dist/src/usage/reflect.js +209 -0
  147. package/dist/src/usage/reflect.js.map +1 -0
  148. package/dist/src/usage/spend-forecast.d.ts +28 -0
  149. package/dist/src/usage/spend-forecast.d.ts.map +1 -0
  150. package/dist/src/usage/spend-forecast.js +33 -0
  151. package/dist/src/usage/spend-forecast.js.map +1 -0
  152. package/dist/src/usage/transcript-errors.d.ts +14 -0
  153. package/dist/src/usage/transcript-errors.d.ts.map +1 -1
  154. package/dist/src/usage/transcript-errors.js +10 -0
  155. package/dist/src/usage/transcript-errors.js.map +1 -1
  156. package/dist/src/usage/transcript-usage.d.ts +8 -1
  157. package/dist/src/usage/transcript-usage.d.ts.map +1 -1
  158. package/dist/src/usage/transcript-usage.js +21 -1
  159. package/dist/src/usage/transcript-usage.js.map +1 -1
  160. package/dist/src/util/csv.d.ts +14 -0
  161. package/dist/src/util/csv.d.ts.map +1 -0
  162. package/dist/src/util/csv.js +20 -0
  163. package/dist/src/util/csv.js.map +1 -0
  164. package/dist/src/util/stdout.d.ts +23 -1
  165. package/dist/src/util/stdout.d.ts.map +1 -1
  166. package/dist/src/util/stdout.js +34 -2
  167. package/dist/src/util/stdout.js.map +1 -1
  168. package/dist/tsconfig.tsbuildinfo +1 -1
  169. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hotspots.d.ts","sourceRoot":"","sources":["../../../src/commands/hotspots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAwD1E,eAAO,MAAM,eAAe,EAAE,OAc7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"hotspots.d.ts","sourceRoot":"","sources":["../../../src/commands/hotspots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AA2D1E,eAAO,MAAM,eAAe,EAAE,OAgB7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import { execFileSync } from 'node:child_process';
15
15
  import { output } from '../output.js';
16
- import { parseGitLog, computeHotspots, formatHotspots } from '../hotspots/hotspots.js';
16
+ import { parseGitLog, computeHotspots, formatHotspots, hotspotsToCsv } from '../hotspots/hotspots.js';
17
17
  const SORT_KEYS = ['risk', 'churn', 'commits', 'authors'];
18
18
  /** Read a numeric flag that the parser may deliver as a number OR a string. */
19
19
  function numFlag(v, def) {
@@ -33,6 +33,7 @@ async function run(ctx) {
33
33
  }
34
34
  // Global --format (text|json|table); text and table both render the table.
35
35
  const asJson = ctx.flags.format === 'json';
36
+ const asCsv = ctx.flags.csv === true; // dedicated flag (global --format has no csv choice)
36
37
  // Capture history: SOH-delimited header + numstat, no merges. `%aN` (not
37
38
  // `%an`) resolves author names through `.mailmap`, so name/email variants of
38
39
  // the same person fold into one identity — otherwise the author-spread factor
@@ -50,7 +51,10 @@ async function run(ctx) {
50
51
  }
51
52
  const now = Date.now();
52
53
  const spots = computeHotspots(parseGitLog(raw), now, { by, top: top > 0 ? top : undefined, minCommits });
53
- if (asJson) {
54
+ if (asCsv) {
55
+ process.stdout.write(hotspotsToCsv(spots) + '\n');
56
+ }
57
+ else if (asJson) {
54
58
  process.stdout.write(JSON.stringify({ generated: new Date(now).toISOString(), by, count: spots.length, hotspots: spots }, null, 2) + '\n');
55
59
  }
56
60
  else {
@@ -72,10 +76,12 @@ export const hotspotsCommand = {
72
76
  { name: 'top', description: 'keep only the top N files (default 20; 0 = all)', type: 'string' },
73
77
  { name: 'min-commits', description: 'drop files with fewer than N commits (default 1)', type: 'string' },
74
78
  { name: 'by', description: `sort key: ${SORT_KEYS.join('|')} (default risk)`, type: 'string' },
79
+ { name: 'csv', description: 'export the ranking as CSV (for spreadsheets)', type: 'boolean' },
75
80
  ],
76
81
  examples: [
77
82
  { command: 'swarmdo hotspots src --since 90d', description: 'Risk hotspots under src/ in the last 90 days' },
78
83
  { command: 'swarmdo hotspots --by churn --top 10 --format json', description: 'Top-10 by churn as JSON' },
84
+ { command: 'swarmdo hotspots --csv > hotspots.csv', description: 'Export the risk ranking to CSV' },
79
85
  ],
80
86
  action: run,
81
87
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hotspots.js","sourceRoot":"","sources":["../../../src/commands/hotspots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAgB,MAAM,yBAAyB,CAAC;AAErG,MAAM,SAAS,GAAc,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAErE,+EAA+E;AAC/E,SAAS,OAAO,CAAC,CAAU,EAAE,GAAW;IACtC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACpF,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAmB;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;IACnF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAY,CAAC;IACjF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzC,CAAC;IACD,2EAA2E;IAC3E,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;IAE3C,yEAAyE;IACzE,6EAA6E;IAC7E,8EAA8E;IAC9E,+EAA+E;IAC/E,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,KAAK,EAAE,EAAE,sCAAsC,CAAC,CAAC;IAC7G,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;IACpI,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,UAAU,CAAC,4CAA4C,CAAC,CAAC;QAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IAEzG,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7I,CAAC;SAAM,CAAC;QACN,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/E,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAY;IACtC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,2IAA2I;IACxJ,OAAO,EAAE;QACP,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,6DAA6D,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC7G,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,iDAAiD,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/F,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,kDAAkD,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/F;IACD,QAAQ,EAAE;QACR,EAAE,OAAO,EAAE,kCAAkC,EAAE,WAAW,EAAE,8CAA8C,EAAE;QAC5G,EAAE,OAAO,EAAE,oDAAoD,EAAE,WAAW,EAAE,yBAAyB,EAAE;KAC1G;IACD,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"hotspots.js","sourceRoot":"","sources":["../../../src/commands/hotspots.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -100,6 +100,12 @@ const commandLoaders = {
100
100
  // Isolated git worktrees for parallel work (claude-squad/vibe-kanban demand)
101
101
  worktree: () => import('./worktree.js'),
102
102
  wt: () => import('./worktree.js'), // alias via loader key
103
+ // Cross-session agent mailbox (multiplayer swarms — dorsa_rohani demand)
104
+ comms: () => import('./comms.js'),
105
+ mailbox: () => import('./comms.js'), // alias via loader key
106
+ // Static audit of Claude Code permission rules (conflicts / dead / over-broad)
107
+ permissions: () => import('./permissions.js'),
108
+ perms: () => import('./permissions.js'), // alias via loader key
103
109
  // Export Claude Code sessions to Markdown (conversation-exporter demand)
104
110
  transcript: () => import('./transcript.js'),
105
111
  tx: () => import('./transcript.js'), // alias via loader key
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * permissions.ts — `swarmdo permissions` (alias `perms`) — audit Claude Code
3
+ * permission rules for conflicts, dead/shadowed rules, and over-broad grants.
4
+ *
5
+ * Complements `config lint` (which validates the hooks block): this reads the
6
+ * `permissions.allow` / `deny` / `ask` arrays from `.claude/settings.json` +
7
+ * `settings.local.json` (+ `~/.claude/settings.json` with `--global`), merges
8
+ * them into the effective ruleset Claude Code enforces, and runs the pure
9
+ * permissions/audit.ts analyzer. Read-only — never edits settings.
10
+ */
11
+ import type { Command } from '../types.js';
12
+ export declare const permissionsCommand: Command;
13
+ export default permissionsCommand;
14
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/commands/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAoB1E,eAAO,MAAM,kBAAkB,EAAE,OAuDhC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * permissions.ts — `swarmdo permissions` (alias `perms`) — audit Claude Code
3
+ * permission rules for conflicts, dead/shadowed rules, and over-broad grants.
4
+ *
5
+ * Complements `config lint` (which validates the hooks block): this reads the
6
+ * `permissions.allow` / `deny` / `ask` arrays from `.claude/settings.json` +
7
+ * `settings.local.json` (+ `~/.claude/settings.json` with `--global`), merges
8
+ * them into the effective ruleset Claude Code enforces, and runs the pure
9
+ * permissions/audit.ts analyzer. Read-only — never edits settings.
10
+ */
11
+ import { existsSync, readFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { homedir } from 'node:os';
14
+ import { output } from '../output.js';
15
+ import { auditPermissions } from '../permissions/audit.js';
16
+ const strArray = (v) => (Array.isArray(v) ? v.filter((x) => typeof x === 'string') : []);
17
+ /** Extract permissions.allow/deny/ask from a settings file, or null if none. */
18
+ function readPerms(file) {
19
+ try {
20
+ if (!existsSync(file))
21
+ return null;
22
+ const obj = JSON.parse(readFileSync(file, 'utf8'));
23
+ const perm = obj?.permissions;
24
+ if (!perm || typeof perm !== 'object')
25
+ return null;
26
+ const sets = { allow: strArray(perm.allow), deny: strArray(perm.deny), ask: strArray(perm.ask) };
27
+ return sets.allow.length + sets.deny.length + sets.ask.length > 0 ? sets : null;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ export const permissionsCommand = {
34
+ name: 'permissions',
35
+ aliases: ['perms'],
36
+ description: 'Audit Claude Code permission rules (allow/deny/ask) for conflicts, dead/shadowed rules, and over-broad grants',
37
+ options: [
38
+ { name: 'global', description: 'Also include ~/.claude/settings.json', type: 'boolean' },
39
+ { name: 'strict', description: 'Exit 1 if any error-severity finding (CI gate)', type: 'boolean' },
40
+ { name: 'json', description: 'Machine-readable output', type: 'boolean' },
41
+ ],
42
+ examples: [
43
+ { command: 'swarmdo permissions', description: "Audit this project's permission rules" },
44
+ { command: 'swarmdo permissions --global --strict', description: 'Include user-global settings; fail on conflicts' },
45
+ ],
46
+ action: async (ctx) => {
47
+ const cwd = ctx.cwd || process.cwd();
48
+ const files = [join(cwd, '.claude', 'settings.json'), join(cwd, '.claude', 'settings.local.json')];
49
+ if (ctx.flags.global === true)
50
+ files.push(join(homedir(), '.claude', 'settings.json'));
51
+ const used = [];
52
+ const merged = { allow: [], deny: [], ask: [] };
53
+ for (const file of files) {
54
+ const p = readPerms(file);
55
+ if (!p)
56
+ continue;
57
+ used.push(file);
58
+ merged.allow.push(...(p.allow ?? []));
59
+ merged.deny.push(...(p.deny ?? []));
60
+ merged.ask.push(...(p.ask ?? []));
61
+ }
62
+ const totalRules = merged.allow.length + merged.deny.length + merged.ask.length;
63
+ if (used.length === 0) {
64
+ if (ctx.flags.json === true)
65
+ output.printJson({ files: [], rules: 0, findings: [] });
66
+ else
67
+ output.printInfo('No permission rules found in .claude/settings*.json.');
68
+ return { success: true };
69
+ }
70
+ const findings = auditPermissions(merged);
71
+ const errors = findings.filter((f) => f.severity === 'error').length;
72
+ const warns = findings.filter((f) => f.severity === 'warn').length;
73
+ if (ctx.flags.json === true) {
74
+ output.printJson({ files: used, rules: totalRules, findings });
75
+ }
76
+ else if (findings.length === 0) {
77
+ output.printSuccess(`permissions audit: ${totalRules} rule(s) across ${used.length} file(s) — no issues`);
78
+ }
79
+ else {
80
+ const icon = (s) => (s === 'error' ? '✖' : s === 'warn' ? '⚠' : '·');
81
+ output.writeln(output.bold('Permission audit') + output.dim(` (${totalRules} rules, ${used.length} file${used.length === 1 ? '' : 's'})`));
82
+ for (const x of findings)
83
+ output.writeln(` ${icon(x.severity)} ${output.dim(`[${x.rule}]`)} ${x.message}`);
84
+ output.writeln('');
85
+ output.writeln(`${errors} error${errors === 1 ? '' : 's'}, ${warns} warning${warns === 1 ? '' : 's'}, ${findings.length - errors - warns} info`);
86
+ }
87
+ const failed = ctx.flags.strict === true && errors > 0;
88
+ return { success: !failed, exitCode: failed ? 1 : 0, data: { rules: totalRules, findings } };
89
+ },
90
+ };
91
+ export default permissionsCommand;
92
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/commands/permissions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/commands/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAqf1E,eAAO,MAAM,YAAY,EAAE,OAkB1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/commands/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAqsB1E,eAAO,MAAM,YAAY,EAAE,OAqB1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -14,12 +14,21 @@
14
14
  */
15
15
  import { output } from '../output.js';
16
16
  import { aggregateBlocks, aggregateUsage, collectUsage, totalUsage, localDateKey, } from '../usage/transcript-usage.js';
17
- import { collectToolErrors } from '../usage/transcript-errors.js';
17
+ import { collectToolErrors, delegationFromReport } from '../usage/transcript-errors.js';
18
18
  import { computeCacheStats } from '../usage/cache-stats.js';
19
19
  import { evaluateGuard } from '../usage/spend-guard.js';
20
20
  import { resolvePeriodPair, parseRange, diffPeriods, modelMovers } from '../usage/diff.js';
21
+ import { computeReflection, monthsBefore, hourSparkline } from '../usage/reflect.js';
22
+ import { renderReflectionHtml } from '../usage/reflect-html.js';
23
+ import { forecastWindow, parseRateLimits, worstStatus, formatForecast, formatLimitSegment } from '../usage/limits.js';
24
+ import { readFileSync } from 'node:fs';
25
+ import { toCsv } from '../util/csv.js';
26
+ import { projectMonthEnd, daysInMonthOf } from '../usage/spend-forecast.js';
27
+ import { computeModelEfficiency } from '../usage/model-efficiency.js';
28
+ import { detectSpikeDays } from '../usage/reflect.js';
21
29
  const VIEWS = {
22
30
  daily: { dimension: 'day', label: 'Date' },
31
+ weekly: { dimension: 'week', label: 'ISO week' },
23
32
  monthly: { dimension: 'month', label: 'Month' },
24
33
  models: { dimension: 'model', label: 'Model' },
25
34
  projects: { dimension: 'project', label: 'Project' },
@@ -376,6 +385,152 @@ function runGuardView(ctx, collection) {
376
385
  output.writeln(output.dim('exit 1 (--strict + over budget)'));
377
386
  return { success: exitCode === 0, exitCode };
378
387
  }
388
+ const PERIOD_MONTHS = { '1m': 1, '3m': 3, '6m': 6, '12m': 12 };
389
+ /** `usage reflect` — a wrapped-style retrospective over the local transcripts (#47). */
390
+ function runReflectView(ctx, collection) {
391
+ const periodFlag = (typeof ctx.flags.period === 'string' ? ctx.flags.period : '3m').toLowerCase();
392
+ const months = PERIOD_MONTHS[periodFlag];
393
+ if (!months) {
394
+ output.printError(`unknown --period "${periodFlag}" (expected ${Object.keys(PERIOD_MONTHS).join('|')})`);
395
+ return { success: false, exitCode: 1 };
396
+ }
397
+ const to = localDateKey(new Date());
398
+ const from = monthsBefore(to, months);
399
+ const dayRows = aggregateUsage(collection.events, 'day').map((r) => ({ key: r.key, totals: r.totals }));
400
+ const md = new Map();
401
+ const pd = new Map(); // per-(project, day) for top projects
402
+ const hourHistogram = new Array(24).fill(0); // local-hour cost, windowed to [from,to]
403
+ for (const e of collection.events) {
404
+ const k = `${e.model}\u0000${e.dateKey}`;
405
+ const row = md.get(k) ?? { key: e.model, day: e.dateKey, totals: { costUsd: 0, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, totalTokens: 0 } };
406
+ row.totals.costUsd += e.costUsd;
407
+ row.totals.inputTokens += e.inputTokens; // needed for cache-savings pricing
408
+ row.totals.cacheWriteTokens += e.cacheWriteTokens;
409
+ row.totals.cacheReadTokens += e.cacheReadTokens;
410
+ row.totals.totalTokens += e.inputTokens + e.outputTokens + e.cacheWriteTokens + e.cacheReadTokens;
411
+ md.set(k, row);
412
+ // per-(project, day) fold (space separator is safe — dateKey is fixed-width)
413
+ const pk = `${e.project} ${e.dateKey}`;
414
+ const prow = pd.get(pk) ?? { key: e.project, day: e.dateKey, totals: { costUsd: 0, inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, totalTokens: 0 } };
415
+ prow.totals.costUsd += e.costUsd;
416
+ prow.totals.totalTokens += e.inputTokens + e.outputTokens + e.cacheWriteTokens + e.cacheReadTokens;
417
+ pd.set(pk, prow);
418
+ if (e.dateKey >= from && e.dateKey <= to)
419
+ hourHistogram[new Date(e.timestampMs).getHours()] += e.costUsd;
420
+ }
421
+ const reflection = computeReflection(dayRows, [...md.values()], from, to, {}, [...pd.values()], hourHistogram);
422
+ // Delegation ratio (#47): reuse the (windowed) tool-error scan to count Task
423
+ // (subagent) calls vs all tool calls — the parsing is already tested there.
424
+ const delDirFlag = ctx.flags.dir;
425
+ const delDirs = typeof delDirFlag === 'string' ? [delDirFlag] : Array.isArray(delDirFlag) ? delDirFlag.map(String) : undefined;
426
+ const delegation = delegationFromReport(collectToolErrors({ dirs: delDirs, since: from, until: to }));
427
+ if (ctx.flags.json === true) {
428
+ output.printJson({ ...reflection, delegation });
429
+ return { success: true, data: reflection };
430
+ }
431
+ if (ctx.flags.html === true) {
432
+ output.writeln(renderReflectionHtml(reflection, { generatedAt: to, delegation }));
433
+ return { success: true, exitCode: 0 };
434
+ }
435
+ const r = reflection;
436
+ const pctStr = (x) => `${Math.round(x * 100)}%`;
437
+ const arrow = r.trend.direction === 'up' ? '↑' : r.trend.direction === 'down' ? '↓' : '→';
438
+ output.writeln(output.bold(`Usage reflect ${r.period.from}..${r.period.to}`) + output.dim(` (${periodFlag}, ${r.period.spanDays} days)`));
439
+ if (r.totals.activeDays === 0) {
440
+ output.writeln(output.info('no Claude Code activity in this window'));
441
+ return { success: true, exitCode: 0 };
442
+ }
443
+ output.writeln('');
444
+ output.writeln(` Total spend ${output.bold(fmtCost(r.totals.costUsd))} ${output.dim(`across ${r.totals.activeDays} active day${r.totals.activeDays === 1 ? '' : 's'} of ${r.period.spanDays}`)}`);
445
+ output.writeln(` Total tokens ${r.totals.totalTokens.toLocaleString()}`);
446
+ if (r.busiestDay)
447
+ output.writeln(` Busiest day ${r.busiestDay.day} ${output.dim(`(${fmtCost(r.busiestDay.costUsd)}, ${r.busiestDay.totalTokens.toLocaleString()} tok)`)}`);
448
+ if (r.spikeDays.length) {
449
+ const top = r.spikeDays.slice(0, 3).map((s) => `${s.day} ${fmtCost(s.costUsd)} (${s.ratioToMedian.toFixed(1)}×)`).join(', ');
450
+ output.writeln(` Spike days ${top} ${output.dim('vs median')}`);
451
+ }
452
+ output.writeln(` Longest streak ${r.longestStreak} day${r.longestStreak === 1 ? '' : 's'}`);
453
+ output.writeln(` Avg / active day ${fmtCost(r.avgCostPerActiveDay)}`);
454
+ output.writeln(` Cache read share ${pctStr(r.cacheReadPct)}`);
455
+ if (r.cacheSavingsUsd > 0)
456
+ output.writeln(` Cache saved ${fmtCost(r.cacheSavingsUsd)} ${output.dim('vs no caching')}`);
457
+ if (delegation.toolCalls > 0) {
458
+ output.writeln(` Delegation ${pctStr(delegation.ratio)} ${output.dim(`(${delegation.taskCalls} of ${delegation.toolCalls} tool calls to subagents)`)}`);
459
+ }
460
+ output.writeln(` Cost trend ${arrow} ${fmtCost(r.trend.firstHalfCost)} → ${fmtCost(r.trend.secondHalfCost)} ${output.dim(`(${r.trend.direction})`)}`);
461
+ if (r.peakHour)
462
+ output.writeln(` Peak hour ${String(r.peakHour.hour).padStart(2, '0')}:00 ${output.dim(`(${fmtCost(r.peakHour.value)})`)}`);
463
+ if (r.hourHistogram.some((v) => v > 0)) {
464
+ output.writeln(` By hour ${hourSparkline(r.hourHistogram)} ${output.dim('0…23')}`);
465
+ }
466
+ if (r.topModels.length) {
467
+ output.writeln('');
468
+ output.writeln(output.bold(' Top models'));
469
+ r.topModels.forEach((m, i) => {
470
+ output.writeln(` ${i + 1}. ${m.model.padEnd(22)} ${fmtCost(m.costUsd).padStart(9)} ${output.dim(pctStr(m.pct))}`);
471
+ });
472
+ }
473
+ if (r.topProjects.length) {
474
+ output.writeln('');
475
+ output.writeln(output.bold(' Top projects'));
476
+ r.topProjects.forEach((p, i) => {
477
+ const name = p.model.length > 34 ? '…' + p.model.slice(-33) : p.model;
478
+ output.writeln(` ${i + 1}. ${name.padEnd(34)} ${fmtCost(p.costUsd).padStart(9)} ${output.dim(pctStr(p.pct))}`);
479
+ });
480
+ }
481
+ return { success: true, exitCode: 0 };
482
+ }
483
+ /** `usage limits` — forecast the official 5h/7d quota windows from the
484
+ * statusline rate_limits payload (stdin or --payload). #46. */
485
+ function runLimitsView(ctx) {
486
+ const nowMs = Date.now();
487
+ let raw = typeof ctx.flags.payload === 'string' ? ctx.flags.payload : '';
488
+ if (!raw && !process.stdin.isTTY) {
489
+ try {
490
+ raw = readFileSync(0, 'utf8');
491
+ }
492
+ catch { /* no piped input */ }
493
+ }
494
+ if (!raw.trim()) {
495
+ output.writeln(output.info("no rate_limits payload — pipe Claude Code's statusline JSON in, or pass --payload '<json>'"));
496
+ output.writeln(output.dim(' e.g. in a statusline command: … | swarmdo usage limits'));
497
+ return { success: true, exitCode: 0 };
498
+ }
499
+ let payload;
500
+ try {
501
+ payload = JSON.parse(raw);
502
+ }
503
+ catch {
504
+ output.printError('payload is not valid JSON');
505
+ return { success: false, exitCode: 1 };
506
+ }
507
+ const windows = parseRateLimits(payload);
508
+ if (windows.length === 0) {
509
+ output.writeln(output.info('no five_hour / seven_day rate_limits found in the payload'));
510
+ return { success: true, exitCode: 0 };
511
+ }
512
+ const forecasts = windows.map((w) => ({ label: w.label, f: forecastWindow(w.state, nowMs) }));
513
+ if (ctx.flags.json === true) {
514
+ output.printJson(forecasts.map((x) => ({ label: x.label, ...x.f })));
515
+ return { success: true, data: forecasts };
516
+ }
517
+ if (ctx.flags.oneline === true) {
518
+ // Compact statusline-ready indicator, e.g. "5h 72%⚠ · 7d 12%".
519
+ output.writeln(formatLimitSegment(forecasts));
520
+ const worstOne = worstStatus(forecasts.map((x) => x.f));
521
+ return { success: true, exitCode: ctx.flags.strict === true && worstOne === 'over' ? 1 : 0 };
522
+ }
523
+ const worst = worstStatus(forecasts.map((x) => x.f));
524
+ output.writeln(output.bold('Usage limits') + output.dim(` (${worst})`));
525
+ for (const { label, f } of forecasts) {
526
+ const line = formatForecast(label, f, nowMs);
527
+ output.writeln(' ' + (f.status === 'over' ? output.error(line) : f.status === 'warn' ? line : output.dim(line)));
528
+ }
529
+ const exitCode = ctx.flags.strict === true && worst === 'over' ? 1 : 0;
530
+ if (exitCode === 1)
531
+ output.writeln(output.dim('exit 1 (--strict + cap reached)'));
532
+ return { success: exitCode === 0, exitCode };
533
+ }
379
534
  async function run(ctx) {
380
535
  const viewName = (ctx.args[0] || 'daily').toLowerCase();
381
536
  if (viewName === 'blocks') {
@@ -409,9 +564,17 @@ async function run(ctx) {
409
564
  const dirs = typeof dirFlag === 'string' ? [dirFlag] : Array.isArray(dirFlag) ? dirFlag.map(String) : undefined;
410
565
  return runDiffView(ctx, collectUsage({ dirs }));
411
566
  }
567
+ if (viewName === 'reflect') {
568
+ const dirFlag = ctx.flags.dir;
569
+ const dirs = typeof dirFlag === 'string' ? [dirFlag] : Array.isArray(dirFlag) ? dirFlag.map(String) : undefined;
570
+ return runReflectView(ctx, collectUsage({ dirs }));
571
+ }
572
+ if (viewName === 'limits') {
573
+ return runLimitsView(ctx); // reads the rate_limits payload from stdin/--payload, not transcripts
574
+ }
412
575
  const view = VIEWS[viewName];
413
576
  if (!view) {
414
- output.writeln(output.error(`unknown view: ${viewName} (expected ${Object.keys(VIEWS).join('|')}|blocks|errors|cache|guard|diff)`));
577
+ output.writeln(output.error(`unknown view: ${viewName} (expected ${Object.keys(VIEWS).join('|')}|blocks|errors|cache|guard|diff|reflect|limits)`));
415
578
  return { success: false, exitCode: 1 };
416
579
  }
417
580
  const since = typeof ctx.flags.since === 'string' ? ctx.flags.since : undefined;
@@ -433,12 +596,51 @@ async function run(ctx) {
433
596
  output.writeln(JSON.stringify(jsonPayload(viewName, collection, rows, grand, since, until), null, 2));
434
597
  return { success: true, exitCode: 0, data: grand };
435
598
  }
599
+ if (ctx.flags.csv === true) {
600
+ // Portable export for spreadsheets / expense reports.
601
+ const headers = ['key', 'costUsd', 'inputTokens', 'outputTokens', 'cacheReadTokens', 'cacheWriteTokens', 'totalTokens', 'entries'];
602
+ const csvRows = rows.map((r) => [r.key, r.totals.costUsd, r.totals.inputTokens, r.totals.outputTokens, r.totals.cacheReadTokens, r.totals.cacheWriteTokens, r.totals.totalTokens, r.totals.entries]);
603
+ output.writeln(toCsv(headers, csvRows));
604
+ return { success: true, exitCode: 0, data: grand };
605
+ }
436
606
  if (collection.events.length === 0) {
437
607
  output.writeln(output.info(`no usage entries found in ${collection.filesScanned} transcript files`));
438
608
  return { success: true, exitCode: 0 };
439
609
  }
440
610
  output.writeln(output.bold(`Claude Code usage — ${viewName}`) + (since || until ? output.dim(` (${since ?? '…'} → ${until ?? '…'})`) : ''));
441
611
  renderTable(view.label, rows, grand);
612
+ if (viewName === 'models') {
613
+ // Effective cost per unit of useful output — surfaces models made expensive
614
+ // by heavy input/cache overhead, beyond their sticker output price.
615
+ const eff = computeModelEfficiency(aggregateUsage(collection.events, 'model'));
616
+ if (eff.length >= 2) {
617
+ const best = eff[0];
618
+ const worst = eff[eff.length - 1];
619
+ output.writeln(output.dim(`effective $/1M output — best ${best.model} ${fmtCost(best.costPerMOutput)}, worst ${worst.model} ${fmtCost(worst.costPerMOutput)}`));
620
+ }
621
+ }
622
+ if (viewName === 'monthly') {
623
+ // Month-end pace projection for the current calendar month.
624
+ const today = localDateKey(new Date());
625
+ const curMonth = today.slice(0, 7);
626
+ const dom = Number(today.slice(8, 10));
627
+ const curRow = rows.find((r) => r.key === curMonth);
628
+ const dim = daysInMonthOf(curMonth);
629
+ if (curRow && dom > 0 && Number.isFinite(dim)) {
630
+ const p = projectMonthEnd(curRow.totals.costUsd, dom, dim);
631
+ output.writeln(output.dim(`${curMonth} on pace for ~${fmtCost(p.projectedUsd)} (${fmtCost(p.monthToDateUsd)} over ${dom}/${p.daysInMonth} days · ~${fmtCost(p.remainingUsd)} to go)`));
632
+ }
633
+ }
634
+ if (viewName === 'sessions') {
635
+ // Outlier-session detection: a single runaway session (one work unit) is more
636
+ // actionable than a spike day. Run the same median-ratio detector over ALL
637
+ // sessions (not the top-N display slice) so the baseline is representative.
638
+ const spikes = detectSpikeDays(aggregateUsage(collection.events, 'session').map((r) => ({ day: r.key, costUsd: r.totals.costUsd })));
639
+ if (spikes.length > 0) {
640
+ const top = spikes.slice(0, 3).map((s) => `${s.day} ${fmtCost(s.costUsd)} (${s.ratioToMedian.toFixed(1)}× median)`).join(', ');
641
+ output.writeln(output.dim(`outlier sessions: ${top}`));
642
+ }
643
+ }
442
644
  output.writeln(output.dim(`${collection.filesScanned} transcript files · ${grand.entries} billed responses · sources: ${collection.dirsScanned.join(', ')}`));
443
645
  if (collection.unpricedModels.length > 0) {
444
646
  const { unpricedResponses, unpricedTokens } = unpricedStats(collection.events);
@@ -449,18 +651,21 @@ async function run(ctx) {
449
651
  export const usageCommand = {
450
652
  name: 'usage',
451
653
  aliases: ['cost'],
452
- description: 'Claude Code token & cost analytics from local transcripts (daily|monthly|models|projects|sessions)',
654
+ description: 'Claude Code token & cost analytics from local transcripts (daily|weekly|monthly|models|projects|sessions)',
453
655
  options: [
454
656
  { name: 'since', description: 'inclusive start date (YYYY-MM-DD or YYYYMMDD)', type: 'string' },
455
657
  { name: 'until', description: 'inclusive end date (YYYY-MM-DD or YYYYMMDD)', type: 'string' },
456
658
  { name: 'dir', description: 'explicit Claude projects dir (replaces auto-discovery)', type: 'string' },
457
659
  { name: 'limit', description: 'max rows for models/projects/sessions views', type: 'number' },
458
660
  { name: 'json', description: 'machine-readable output', type: 'boolean', default: false },
661
+ { name: 'csv', description: 'CSV export (daily|monthly|models|projects|sessions views)', type: 'boolean', default: false },
459
662
  ],
460
663
  examples: [
461
664
  { command: 'swarmdo usage', description: 'Daily token/cost table across all local Claude Code sessions' },
665
+ { command: 'swarmdo usage weekly', description: 'Spend grouped by ISO week' },
462
666
  { command: 'swarmdo usage models --since 2026-07-01', description: 'Spend per model this month' },
463
667
  { command: 'swarmdo usage projects --json', description: 'Per-project totals as JSON' },
668
+ { command: 'swarmdo usage monthly --csv > usage.csv', description: 'Export monthly spend to CSV' },
464
669
  { command: 'swarmdo cost sessions --limit 10', description: 'Ten most expensive sessions (alias)' },
465
670
  ],
466
671
  action: run,