shakers-cli 0.15.0 → 0.16.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 (123) hide show
  1. package/README.md +51 -1203
  2. package/bin/ai-usage.js +11 -56
  3. package/bin/login.js +10 -10
  4. package/bin/mcp.js +13 -9
  5. package/bin/mcpb.js +1 -1
  6. package/bin/onboarding.js +3 -2
  7. package/bin/register.js +17 -4
  8. package/bin/report-html.js +2 -2
  9. package/bin/shakers-cli.js +352 -0
  10. package/bin/shakers.js +20 -344
  11. package/bin/share.js +1 -1
  12. package/bin/superadmin.js +5 -5
  13. package/bin/version.js +3 -0
  14. package/package.json +12 -3
  15. package/src/agent-category.js +1 -1
  16. package/src/agent-evaluation.js +3 -3
  17. package/src/agent-org-chart.js +5 -5
  18. package/src/agent-synthesis.js +3 -3
  19. package/src/agent-usage.js +1 -1
  20. package/src/agents-client.js +4 -4
  21. package/src/ai.js +1 -1
  22. package/src/ansi.js +1 -1
  23. package/src/auth-client.js +18 -4
  24. package/src/auth-method-picker.js +1 -1
  25. package/src/auth-methods.js +1 -1
  26. package/src/auth-session-store.js +11 -8
  27. package/src/authorship-mismatch.js +1 -1
  28. package/src/authorship.js +2 -2
  29. package/src/automations-detector.js +1 -1
  30. package/src/backend-request.js +3 -3
  31. package/src/brand-ansi.js +1 -1
  32. package/src/browser-tools-detector.js +1 -1
  33. package/src/certify-disclaimer.js +1 -1
  34. package/src/certify-remediation-prompt.js +1 -1
  35. package/src/cli-args.js +2 -2
  36. package/src/command-audit.js +8 -5
  37. package/src/config-dir.js +1 -1
  38. package/src/config.js +112 -48
  39. package/src/consent-flow.js +4 -4
  40. package/src/consent-skip.js +1 -1
  41. package/src/detection-evidence.js +2 -2
  42. package/src/detection-noise.js +1 -1
  43. package/src/detectors.js +1 -1
  44. package/src/device-login.js +12 -1
  45. package/src/email-verification.js +3 -3
  46. package/src/env-paths.js +1 -1
  47. package/src/find-projects-client.js +12 -0
  48. package/src/find-projects-flow.js +1 -13
  49. package/src/git-activity.js +1 -1
  50. package/src/graph-certs.js +3 -3
  51. package/src/graph-scan.js +9 -9
  52. package/src/i18n.js +124 -124
  53. package/src/interactive-select.js +1 -1
  54. package/src/interview-client.js +6 -1
  55. package/src/interview-transcript.js +1 -1
  56. package/src/legal-notice.js +1 -1
  57. package/src/maturity.js +6 -6
  58. package/src/mcp-ai-usage-tool.js +1 -1
  59. package/src/mcp-auth-form.js +1 -1
  60. package/src/mcp-detector.js +3 -3
  61. package/src/mcp-device-login-tools.js +2 -1
  62. package/src/mcp-find-projects-tools.js +1 -2
  63. package/src/mcp-onboarding-tools.js +4 -4
  64. package/src/mcp-prompts.js +2 -2
  65. package/src/mcp-register-tools.js +1 -0
  66. package/src/mcp-server.js +5 -1
  67. package/src/mcp-signup-client.js +2 -2
  68. package/src/mcp-signup-tools.js +26 -2
  69. package/src/memory-structure-detector.js +1 -1
  70. package/src/model-call-record.js +2 -2
  71. package/src/onboarding-flow.js +16 -16
  72. package/src/onboarding-funnel.js +110 -17
  73. package/src/open-file.js +1 -1
  74. package/src/osc-link.js +1 -1
  75. package/src/portfolio-client.js +11 -1
  76. package/src/portfolio-git-info.js +1 -1
  77. package/src/profile-flow.js +1 -1
  78. package/src/profile-switch.js +5 -12
  79. package/src/render-certification.js +10 -10
  80. package/src/render-html.js +6 -6
  81. package/src/render-sheet.js +10 -10
  82. package/src/render-terminal.js +6 -6
  83. package/src/repo-scope.js +132 -0
  84. package/src/report-gating.js +1 -1
  85. package/src/report-store.js +6 -6
  86. package/src/roadmap-content.js +5 -5
  87. package/src/roadmap-personalization.js +3 -3
  88. package/src/roadmap-prompt.js +2 -2
  89. package/src/scan-exclusions.js +1 -1
  90. package/src/scanner.js +14 -14
  91. package/src/secret-prompt.js +1 -1
  92. package/src/session-gate.js +1 -1
  93. package/src/session-refresh.js +33 -3
  94. package/src/session-scan.js +1 -1
  95. package/src/shakers-wordmark.js +1 -1
  96. package/src/share-card.js +2 -2
  97. package/src/share-certification.js +4 -4
  98. package/src/share-consent-state.js +7 -7
  99. package/src/share-payload.js +7 -7
  100. package/src/share.js +7 -7
  101. package/src/signup-client.js +1 -1
  102. package/src/signup-copy.js +1 -1
  103. package/src/skills-client.js +1 -1
  104. package/src/start-add-agents.js +2 -2
  105. package/src/start-add-portfolio.js +3 -13
  106. package/src/start-add-skills.js +2 -2
  107. package/src/stdin-ask.js +3 -3
  108. package/src/strip-internal-comments.js +1 -1
  109. package/src/tech-detector.js +2 -2
  110. package/src/templates/report-sheet.html +11 -13
  111. package/src/terminal-agents.js +8 -8
  112. package/src/terminal-format.js +3 -3
  113. package/src/terminal-sections.js +11 -11
  114. package/src/tier-engine.js +3 -3
  115. package/src/tier-projection.js +2 -2
  116. package/src/transcript-turns.js +1 -1
  117. package/src/typewriter.js +1 -1
  118. package/src/usage-model-calls.js +6 -6
  119. package/src/usage-oneshot-commands.js +5 -5
  120. package/src/usage-repo-scope.js +11 -129
  121. package/src/usage-run-steps.js +32 -184
  122. package/src/usage-scan.js +235 -0
  123. package/src/work-streams.js +1 -1
package/src/graph-scan.js CHANGED
@@ -7,7 +7,7 @@ const { scan } = require('./scanner');
7
7
  const { classify } = require('./maturity');
8
8
  const { setupLevelForTier } = require('./tier-engine');
9
9
  const { sanitizeRenderText } = require('./sanitize-network-text');
10
- // The ONE agent-shaping layer, shared with the terminal report (issue 089).
10
+ // The ONE agent-shaping layer, shared with the terminal report.
11
11
  const { buildAgentCardTree } = require('./render-html');
12
12
 
13
13
  function slug(s) {
@@ -115,7 +115,7 @@ function buildGraphScan(root, { scanFn = scan, classifyFn = classify } = {}) {
115
115
  };
116
116
  }
117
117
 
118
- // Setup-level ladder for the drawer (ADR-016): the 3 Setup Levels + "Not certified", replacing the retired 0-4 maturity ladder.
118
+ // Setup-level ladder for the drawer: the 3 Setup Levels + "Not certified", replacing the retired 0-4 maturity ladder.
119
119
  const SETUP_LADDER = [
120
120
  { rank: 0, key: 'none', label: 'Sin certificar' },
121
121
  { rank: 1, key: 'S1', label: 'S1 · Asistido' },
@@ -124,7 +124,7 @@ const SETUP_LADDER = [
124
124
  ];
125
125
 
126
126
  // #3 footprint drawer payload from the live scan (defensive). Detected agents =
127
- // a FLAT list with a depth number, not a tree object (issue 089).
127
+ // a FLAT list with a depth number, not a tree object.
128
128
  function drawerAgents(report, t) {
129
129
  let tree;
130
130
  try {
@@ -155,7 +155,7 @@ function drawerAgents(report, t) {
155
155
  whatItDoes: card.whatItDoes || null,
156
156
  // The category is a REQUIREMENT of the design, and it is the agent → catalog-seed association, not the Talent's tier.
157
157
  category: cls ? cls.category : null,
158
- // THREE STATES, NOT TWO (issue 106).
158
+ // THREE STATES, NOT TWO.
159
159
  evaluated: evaluatedNames.has(card.name),
160
160
  // COPIED from the card, never recomputed (2026-08-03).
161
161
  evaluationState: card.evaluationState || (evaluatedNames.has(card.name) ? (cls ? 'classified' : 'unclassified') : 'not-evaluated'),
@@ -176,11 +176,11 @@ function buildFootprintDrawer(report, maturity, t) {
176
176
  ? maturity.tier
177
177
  : (/^T([0-7])$/.test(tierKey) ? Number(tierKey.slice(1)) : null);
178
178
  const tierName = (maturity && maturity.tierName) || '—';
179
- // Setup Level (ADR-016) replaces the 0-4 band as the drawer's headline rollup.
179
+ // Setup Level replaces the 0-4 band as the drawer's headline rollup.
180
180
  const setup = (maturity && maturity.setupLevel)
181
181
  || (tierNum != null ? setupLevelForTier(tierNum) : { key: 'none', code: null, rank: 0, emoji: '○' });
182
182
  const setupLabel = (SETUP_LADDER.find((s) => s.key === setup.key) || SETUP_LADDER[0]).label;
183
- // Issue 055: this drawer payload feeds the shareable sheet AND the graph report, and both only `esc()`.
183
+ // This drawer payload feeds the shareable sheet AND the graph report, and both only `esc()`.
184
184
  const technologies = (Array.isArray(report.technologies) ? report.technologies : [])
185
185
  .map((x) => (typeof x === 'string' ? sanitizeRenderText(x) : x));
186
186
  // Installed AI dev tools (assistants).
@@ -198,7 +198,7 @@ function buildFootprintDrawer(report, maturity, t) {
198
198
 
199
199
  return {
200
200
  score,
201
- // `setup` is the ADR-016 rollup shown in the drawer hero; `tier` keeps the tierKey · tierName chip.
201
+ // `setup` is the Setup Level rollup shown in the drawer hero; `tier` keeps the tierKey · tierName chip.
202
202
  setup: { key: setup.key, code: setup.code, rank: setup.rank, emoji: setup.emoji, label: setupLabel },
203
203
  tier: { key: tierKey || 'none', name: tierName, label: tierKey ? `${tierKey} · ${tierName}` : tierName },
204
204
  ladder: SETUP_LADDER,
@@ -207,9 +207,9 @@ function buildFootprintDrawer(report, maturity, t) {
207
207
  summary: buildReading({ setupLabel, tierKey, tierName, score, nTools: tools.length, nTech: technologies.length }),
208
208
  tools,
209
209
  technologies,
210
- // Issue 089: ALL detected agents, always.
210
+ // ALL detected agents, always.
211
211
  agents: drawerAgents(report, t),
212
- // Issue 110: the SERVICES behind the MCP servers, shaped ONCE here for both consumers of this drawer (the shareable sheet and the graph report), the same way `agents` is.
212
+ // The SERVICES behind the MCP servers, shaped ONCE here for both consumers of this drawer (the shareable sheet and the graph report), the same way `agents` is.
213
213
  mcp: {
214
214
  services: (report.mcp && Array.isArray(report.mcp.services) ? report.mcp.services : [])
215
215
  .map((x) => ({ label: sanitizeRenderText(x.label), count: x.count })),