cc-context-stats 1.7.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/package.json +9 -1
  2. package/scripts/context-stats.sh +1 -1
  3. package/scripts/statusline.js +128 -18
  4. package/.editorconfig +0 -60
  5. package/.eslintrc.json +0 -35
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -49
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -31
  8. package/.github/PULL_REQUEST_TEMPLATE.md +0 -33
  9. package/.github/dependabot.yml +0 -44
  10. package/.github/workflows/ci.yml +0 -294
  11. package/.github/workflows/release.yml +0 -151
  12. package/.pre-commit-config.yaml +0 -74
  13. package/.prettierrc +0 -33
  14. package/.shellcheckrc +0 -10
  15. package/CHANGELOG.md +0 -163
  16. package/CLAUDE.md +0 -66
  17. package/CODE_OF_CONDUCT.md +0 -59
  18. package/CONTRIBUTING.md +0 -240
  19. package/RELEASE_NOTES.md +0 -19
  20. package/SECURITY.md +0 -44
  21. package/TODOS.md +0 -72
  22. package/assets/logo/favicon.svg +0 -19
  23. package/assets/logo/logo-black.svg +0 -24
  24. package/assets/logo/logo-full.svg +0 -40
  25. package/assets/logo/logo-icon.svg +0 -27
  26. package/assets/logo/logo-mark.svg +0 -28
  27. package/assets/logo/logo-white.svg +0 -24
  28. package/assets/logo/logo-wordmark.svg +0 -6
  29. package/config/settings-example.json +0 -7
  30. package/config/settings-node.json +0 -7
  31. package/config/settings-python.json +0 -7
  32. package/docs/ARCHITECTURE.md +0 -128
  33. package/docs/CSV_FORMAT.md +0 -42
  34. package/docs/DEPLOYMENT.md +0 -71
  35. package/docs/DEVELOPMENT.md +0 -161
  36. package/docs/configuration.md +0 -118
  37. package/docs/context-stats.md +0 -143
  38. package/docs/installation.md +0 -255
  39. package/docs/scripts.md +0 -140
  40. package/docs/troubleshooting.md +0 -278
  41. package/images/claude-statusline-token-graph.gif +0 -0
  42. package/images/claude-statusline.png +0 -0
  43. package/images/context-status-dumbzone.png +0 -0
  44. package/images/context-status.png +0 -0
  45. package/images/statusline-detail.png +0 -0
  46. package/images/token-graph.jpeg +0 -0
  47. package/images/token-graph.png +0 -0
  48. package/images/v1.6.1.png +0 -0
  49. package/install +0 -351
  50. package/install.sh +0 -298
  51. package/jest.config.js +0 -11
  52. package/pyproject.toml +0 -115
  53. package/requirements-dev.txt +0 -12
  54. package/scripts/statusline-full.sh +0 -304
  55. package/scripts/statusline-git.sh +0 -88
  56. package/scripts/statusline-minimal.sh +0 -67
  57. package/scripts/statusline.py +0 -485
  58. package/src/claude_statusline/__init__.py +0 -11
  59. package/src/claude_statusline/__main__.py +0 -6
  60. package/src/claude_statusline/cli/__init__.py +0 -1
  61. package/src/claude_statusline/cli/context_stats.py +0 -512
  62. package/src/claude_statusline/cli/explain.py +0 -228
  63. package/src/claude_statusline/cli/statusline.py +0 -169
  64. package/src/claude_statusline/core/__init__.py +0 -1
  65. package/src/claude_statusline/core/colors.py +0 -124
  66. package/src/claude_statusline/core/config.py +0 -148
  67. package/src/claude_statusline/core/git.py +0 -78
  68. package/src/claude_statusline/core/state.py +0 -323
  69. package/src/claude_statusline/formatters/__init__.py +0 -1
  70. package/src/claude_statusline/formatters/layout.py +0 -67
  71. package/src/claude_statusline/formatters/time.py +0 -50
  72. package/src/claude_statusline/formatters/tokens.py +0 -70
  73. package/src/claude_statusline/graphs/__init__.py +0 -1
  74. package/src/claude_statusline/graphs/renderer.py +0 -366
  75. package/src/claude_statusline/graphs/statistics.py +0 -92
  76. package/src/claude_statusline/ui/__init__.py +0 -1
  77. package/src/claude_statusline/ui/icons.py +0 -93
  78. package/src/claude_statusline/ui/waiting.py +0 -62
  79. package/tests/bash/test_delta_parity.bats +0 -199
  80. package/tests/bash/test_install.bats +0 -29
  81. package/tests/bash/test_parity.bats +0 -315
  82. package/tests/bash/test_statusline_full.bats +0 -139
  83. package/tests/bash/test_statusline_git.bats +0 -42
  84. package/tests/bash/test_statusline_minimal.bats +0 -37
  85. package/tests/fixtures/json/comma_in_path.json +0 -31
  86. package/tests/fixtures/json/high_usage.json +0 -17
  87. package/tests/fixtures/json/low_usage.json +0 -17
  88. package/tests/fixtures/json/medium_usage.json +0 -17
  89. package/tests/fixtures/json/valid_full.json +0 -30
  90. package/tests/fixtures/json/valid_minimal.json +0 -9
  91. package/tests/node/rotation.test.js +0 -89
  92. package/tests/node/statusline.test.js +0 -240
  93. package/tests/python/conftest.py +0 -84
  94. package/tests/python/test_colors.py +0 -105
  95. package/tests/python/test_config_colors.py +0 -78
  96. package/tests/python/test_data_pipeline.py +0 -446
  97. package/tests/python/test_explain.py +0 -177
  98. package/tests/python/test_icons.py +0 -152
  99. package/tests/python/test_layout.py +0 -127
  100. package/tests/python/test_state_rotation_validation.py +0 -232
  101. package/tests/python/test_statusline.py +0 -215
  102. package/tests/python/test_waiting.py +0 -127
package/package.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "name": "cc-context-stats",
3
- "version": "1.7.0",
3
+ "version": "1.8.1",
4
4
  "description": "Monitor your Claude Code session context in real-time - track token usage and never run out of context",
5
5
  "main": "scripts/statusline.js",
6
+ "bin": {
7
+ "context-stats": "scripts/context-stats.sh",
8
+ "claude-statusline": "scripts/statusline.js"
9
+ },
6
10
  "scripts": {
7
11
  "test": "jest",
8
12
  "test:watch": "jest --watch",
@@ -34,6 +38,10 @@
34
38
  "jest": "^29.7.0",
35
39
  "prettier": "^3.8.1"
36
40
  },
41
+ "files": [
42
+ "scripts/statusline.js",
43
+ "scripts/context-stats.sh"
44
+ ],
37
45
  "engines": {
38
46
  "node": ">=18"
39
47
  }
@@ -22,7 +22,7 @@
22
22
 
23
23
  # === CONFIGURATION ===
24
24
  # shellcheck disable=SC2034
25
- VERSION="1.6.1"
25
+ VERSION="1.8.0"
26
26
  COMMIT_HASH="dev" # Will be replaced during installation
27
27
  STATE_DIR=~/.claude/statusline
28
28
  CONFIG_FILE=~/.claude/statusline.conf
@@ -36,6 +36,61 @@ const os = require('os');
36
36
  const ROTATION_THRESHOLD = 10000;
37
37
  const ROTATION_KEEP = 5000;
38
38
 
39
+ // Model Intelligence constants (hardcoded, not configurable)
40
+ const MI_WEIGHT_CPS = 0.60;
41
+ const MI_WEIGHT_ES = 0.25;
42
+ const MI_WEIGHT_PS = 0.15;
43
+ const MI_GREEN_THRESHOLD = 0.65;
44
+ const MI_YELLOW_THRESHOLD = 0.35;
45
+ const MI_PRODUCTIVITY_TARGET = 0.2;
46
+
47
+ /**
48
+ * Compute Model Intelligence score.
49
+ * Returns { mi, cps, es, ps }.
50
+ */
51
+ function computeMI(usedTokens, contextWindowSize, cacheRead, totalContext,
52
+ deltaLines, deltaOutput, beta = 1.5) {
53
+ // Guard clause
54
+ if (contextWindowSize === 0) {
55
+ return { mi: 1.0, cps: 1.0, es: 1.0, ps: 0.5 };
56
+ }
57
+
58
+ // CPS
59
+ const u = usedTokens / contextWindowSize;
60
+ const cps = u > 0 ? Math.max(0, 1 - Math.pow(u, beta)) : 1.0;
61
+
62
+ // ES
63
+ let es;
64
+ if (totalContext === 0) {
65
+ es = 1.0;
66
+ } else {
67
+ const cacheHitRatio = cacheRead / totalContext;
68
+ es = 0.3 + 0.7 * cacheHitRatio;
69
+ }
70
+
71
+ // PS
72
+ let ps;
73
+ if (deltaOutput === null || deltaOutput === undefined || deltaOutput <= 0) {
74
+ ps = 0.5;
75
+ } else {
76
+ const ratio = deltaLines / deltaOutput;
77
+ const normalized = Math.min(1.0, ratio / MI_PRODUCTIVITY_TARGET);
78
+ ps = 0.2 + 0.8 * normalized;
79
+ }
80
+
81
+ const mi = MI_WEIGHT_CPS * cps + MI_WEIGHT_ES * es + MI_WEIGHT_PS * ps;
82
+ return { mi, cps, es, ps };
83
+ }
84
+
85
+ /**
86
+ * Return ANSI color code for MI score.
87
+ */
88
+ function getMIColor(mi, greenColor, yellowColor, redColor) {
89
+ if (mi > MI_GREEN_THRESHOLD) return greenColor || GREEN;
90
+ if (mi > MI_YELLOW_THRESHOLD) return yellowColor || YELLOW;
91
+ return redColor || RED;
92
+ }
93
+
39
94
  /**
40
95
  * Rotate a state file if it exceeds ROTATION_THRESHOLD lines.
41
96
  * Keeps the most recent ROTATION_KEEP lines via atomic temp-file + rename.
@@ -141,8 +196,24 @@ function visibleWidth(s) {
141
196
  /**
142
197
  * Return the terminal width in columns, defaulting to 80.
143
198
  */
199
+ /**
200
+ * Return the terminal width in columns.
201
+ *
202
+ * When running inside Claude Code's statusline subprocess, neither $COLUMNS
203
+ * nor process.stdout.columns can detect the real terminal width (they return
204
+ * undefined or 80). If COLUMNS is not explicitly set and we'd fall back to 80,
205
+ * use a generous default of 200 so that no parts are unnecessarily dropped;
206
+ * Claude Code's own UI handles any overflow/truncation.
207
+ */
144
208
  function getTerminalWidth() {
145
- return process.stdout.columns || parseInt(process.env.COLUMNS, 10) || 80;
209
+ if (process.env.COLUMNS) {
210
+ return parseInt(process.env.COLUMNS, 10) || 200;
211
+ }
212
+ const cols = process.stdout.columns;
213
+ if (cols && cols !== 80) {
214
+ return cols;
215
+ }
216
+ return 200;
146
217
  }
147
218
 
148
219
  /**
@@ -220,6 +291,8 @@ function readConfig() {
220
291
  showSession: true,
221
292
  showIoTokens: true,
222
293
  reducedMotion: false,
294
+ showMI: true,
295
+ miCurveBeta: 1.5,
223
296
  colors: {},
224
297
  };
225
298
  const configPath = path.join(os.homedir(), '.claude', 'statusline.conf');
@@ -280,6 +353,13 @@ show_session=true
280
353
  config.showIoTokens = valueTrimmed !== 'false';
281
354
  } else if (keyTrimmed === 'reduced_motion') {
282
355
  config.reducedMotion = valueTrimmed !== 'false';
356
+ } else if (keyTrimmed === 'show_mi') {
357
+ config.showMI = valueTrimmed !== 'false';
358
+ } else if (keyTrimmed === 'mi_curve_beta') {
359
+ const parsed = parseFloat(rawValue);
360
+ if (!isNaN(parsed)) {
361
+ config.miCurveBeta = parsed;
362
+ }
283
363
  } else if (COLOR_CONFIG_KEYS[keyTrimmed]) {
284
364
  const ansi = parseColor(rawValue);
285
365
  if (ansi) {
@@ -340,7 +420,10 @@ process.stdin.on('end', () => {
340
420
  let contextInfo = '';
341
421
  let acInfo = '';
342
422
  let deltaInfo = '';
423
+ let miInfo = '';
343
424
  let sessionInfo = '';
425
+ const showMI = config.showMI;
426
+ const miCurveBeta = config.miCurveBeta;
344
427
  const totalSize = data.context_window?.context_window_size || 0;
345
428
  const currentUsage = data.context_window?.current_usage;
346
429
  const totalInputTokens = data.context_window?.total_input_tokens || 0;
@@ -399,10 +482,10 @@ process.stdin.on('end', () => {
399
482
  ctxColor = cRed;
400
483
  }
401
484
 
402
- contextInfo = ` | ${ctxColor}${freeDisplay} free (${freePct.toFixed(1)}%)${RESET}`;
485
+ contextInfo = ` | ${ctxColor}${freeDisplay} (${freePct.toFixed(1)}%)${RESET}`;
403
486
 
404
- // Calculate and display token delta if enabled
405
- if (showDelta) {
487
+ // Read previous entry if needed for delta OR MI
488
+ if (showDelta || showMI) {
406
489
  const stateDir = path.join(os.homedir(), '.claude', 'statusline');
407
490
  if (!fs.existsSync(stateDir)) {
408
491
  fs.mkdirSync(stateDir, { recursive: true });
@@ -432,10 +515,13 @@ process.stdin.on('end', () => {
432
515
  const stateFile = path.join(stateDir, stateFileName);
433
516
  let hasPrev = false;
434
517
  let prevTokens = 0;
518
+ let prevOutputTokens = 0;
519
+ let prevLinesAdded = 0;
520
+ let prevLinesRemoved = 0;
435
521
  try {
436
522
  if (fs.existsSync(stateFile)) {
437
523
  hasPrev = true;
438
- // Read last line to get previous context usage
524
+ // Read last line to get previous state
439
525
  const content = fs.readFileSync(stateFile, 'utf8').trim();
440
526
  const lines = content.split('\n');
441
527
  const lastLine = lines[lines.length - 1];
@@ -448,6 +534,10 @@ process.stdin.on('end', () => {
448
534
  const prevCacheCreation = parseInt(parts[5], 10) || 0;
449
535
  const prevCacheRead = parseInt(parts[6], 10) || 0;
450
536
  prevTokens = prevCurInput + prevCacheCreation + prevCacheRead;
537
+ // For MI productivity score
538
+ prevOutputTokens = parseInt(parts[2], 10) || 0;
539
+ prevLinesAdded = parseInt(parts[8], 10) || 0;
540
+ prevLinesRemoved = parseInt(parts[9], 10) || 0;
451
541
  } else {
452
542
  // Old format - single value
453
543
  prevTokens = parseInt(lastLine, 10) || 0;
@@ -459,20 +549,40 @@ process.stdin.on('end', () => {
459
549
  );
460
550
  prevTokens = 0;
461
551
  }
462
- // Calculate delta (difference in context window usage)
463
- const delta = usedTokens - prevTokens;
464
- // Only show positive delta (and skip first run when no previous state)
465
- if (hasPrev && delta > 0) {
466
- const deltaDisplay = tokenDetail
467
- ? delta.toLocaleString('en-US')
468
- : `${(delta / 1000).toFixed(1)}k`;
469
- deltaInfo = ` ${DIM}[+${deltaDisplay}]${RESET}`;
552
+
553
+ // Calculate and display token delta if enabled
554
+ if (showDelta) {
555
+ const delta = usedTokens - prevTokens;
556
+ if (hasPrev && delta > 0) {
557
+ const deltaDisplay = tokenDetail
558
+ ? delta.toLocaleString('en-US')
559
+ : `${(delta / 1000).toFixed(1)}k`;
560
+ deltaInfo = ` ${DIM}[+${deltaDisplay}]${RESET}`;
561
+ }
470
562
  }
563
+
564
+ // Calculate and display MI score if enabled
565
+ if (showMI) {
566
+ let deltaLines, deltaOutput;
567
+ if (hasPrev) {
568
+ const deltaLA = linesAdded - prevLinesAdded;
569
+ const deltaLR = linesRemoved - prevLinesRemoved;
570
+ deltaLines = deltaLA + deltaLR;
571
+ deltaOutput = totalOutputTokens - prevOutputTokens;
572
+ } else {
573
+ deltaLines = 0;
574
+ deltaOutput = null;
575
+ }
576
+ const miResult = computeMI(
577
+ usedTokens, totalSize, cacheRead, usedTokens,
578
+ deltaLines, deltaOutput, miCurveBeta
579
+ );
580
+ const miColor = getMIColor(miResult.mi, cGreen, cYellow, cRed);
581
+ miInfo = ` ${miColor}MI:${miResult.mi.toFixed(2)}${RESET}`;
582
+ }
583
+
471
584
  // Only append if context usage changed (avoid duplicates from multiple refreshes)
472
585
  if (!hasPrev || usedTokens !== prevTokens) {
473
- // Append current usage with comprehensive format
474
- // Format: ts,total_in,total_out,cur_in,cur_out,cache_create,cache_read,
475
- // cost_usd,lines_added,lines_removed,session_id,model_id,project_dir
476
586
  try {
477
587
  const timestamp = Math.floor(Date.now() / 1000);
478
588
  const curInputTokens = currentUsage.input_tokens || 0;
@@ -512,11 +622,11 @@ process.stdin.on('end', () => {
512
622
  // Output: [Model] dir | branch [n] | free (%) [+delta] [AC] session
513
623
  const base = `${DIM}[${model}]${RESET} ${cBlue}${dirName}${RESET}`;
514
624
  const maxWidth = getTerminalWidth();
515
- const parts = [base, gitInfo, contextInfo, deltaInfo, acInfo, sessionInfo];
625
+ const parts = [base, gitInfo, contextInfo, deltaInfo, miInfo, acInfo, sessionInfo];
516
626
  console.log(fitToWidth(parts, maxWidth));
517
627
  });
518
628
 
519
629
  // Export for testing
520
630
  if (typeof module !== 'undefined' && module.exports) {
521
- module.exports = { maybeRotateStateFile, ROTATION_THRESHOLD, ROTATION_KEEP };
631
+ module.exports = { maybeRotateStateFile, ROTATION_THRESHOLD, ROTATION_KEEP, computeMI };
522
632
  }
package/.editorconfig DELETED
@@ -1,60 +0,0 @@
1
- # EditorConfig for claude-statusline project
2
- # https://editorconfig.org
3
-
4
- root = true
5
-
6
- # Default settings for all files
7
- [*]
8
- charset = utf-8
9
- end_of_line = lf
10
- insert_final_newline = true
11
- trim_trailing_whitespace = true
12
- indent_style = space
13
- indent_size = 4
14
-
15
- # Shell scripts
16
- [*.{sh,bash}]
17
- indent_style = space
18
- indent_size = 4
19
-
20
- # Python
21
- [*.py]
22
- indent_style = space
23
- indent_size = 4
24
- max_line_length = 100
25
-
26
- # JavaScript
27
- [*.js]
28
- indent_style = space
29
- indent_size = 4
30
- max_line_length = 100
31
-
32
- # JSON files
33
- [*.json]
34
- indent_style = space
35
- indent_size = 2
36
-
37
- # YAML files
38
- [*.{yml,yaml}]
39
- indent_style = space
40
- indent_size = 2
41
-
42
- # TOML files
43
- [*.toml]
44
- indent_style = space
45
- indent_size = 4
46
-
47
- # Markdown
48
- [*.md]
49
- indent_style = space
50
- indent_size = 2
51
- trim_trailing_whitespace = false
52
-
53
- # Makefile
54
- [Makefile]
55
- indent_style = tab
56
-
57
- # Bats test files
58
- [*.bats]
59
- indent_style = space
60
- indent_size = 4
package/.eslintrc.json DELETED
@@ -1,35 +0,0 @@
1
- {
2
- "env": {
3
- "node": true,
4
- "es2022": true,
5
- "jest": true
6
- },
7
- "parserOptions": {
8
- "ecmaVersion": 2022,
9
- "sourceType": "commonjs"
10
- },
11
- "extends": ["eslint:recommended"],
12
- "rules": {
13
- "indent": ["error", 4],
14
- "linebreak-style": ["error", "unix"],
15
- "quotes": ["error", "single", { "avoidEscape": true }],
16
- "semi": ["error", "always"],
17
- "no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
18
- "no-console": "off",
19
- "eqeqeq": ["error", "always"],
20
- "curly": ["error", "all"],
21
- "brace-style": ["error", "1tbs"],
22
- "comma-dangle": ["error", "only-multiline"],
23
- "comma-spacing": ["error", { "before": false, "after": true }],
24
- "keyword-spacing": ["error", { "before": true, "after": true }],
25
- "space-before-blocks": ["error", "always"],
26
- "object-curly-spacing": ["error", "always"],
27
- "array-bracket-spacing": ["error", "never"],
28
- "no-trailing-spaces": "error",
29
- "eol-last": ["error", "always"],
30
- "max-len": ["warn", { "code": 100, "ignoreStrings": true, "ignoreTemplateLiterals": true }],
31
- "prefer-const": "error",
32
- "no-var": "error"
33
- },
34
- "ignorePatterns": ["node_modules/", "coverage/", "*.min.js"]
35
- }
@@ -1,49 +0,0 @@
1
- ---
2
- name: Bug Report
3
- about: Report a bug to help us improve
4
- title: '[BUG] '
5
- labels: bug
6
- assignees: ''
7
- ---
8
-
9
- ## Bug Description
10
-
11
- A clear and concise description of what the bug is.
12
-
13
- ## Steps to Reproduce
14
-
15
- 1. Install cc-context-stats via '...'
16
- 2. Run '...'
17
- 3. See error
18
-
19
- ## Expected Behavior
20
-
21
- A clear and concise description of what you expected to happen.
22
-
23
- ## Actual Behavior
24
-
25
- What actually happened instead.
26
-
27
- ## Screenshots
28
-
29
- If applicable, add screenshots to help explain your problem.
30
-
31
- ## Environment
32
-
33
- - OS: [e.g., macOS 14.0, Ubuntu 22.04, Windows 11]
34
- - Shell: [e.g., zsh, bash, PowerShell]
35
- - cc-context-stats version: [e.g., 1.6.0]
36
- - Installation method: [npm, pip, shell script]
37
- - Node.js version: [if applicable]
38
- - Python version: [if applicable]
39
- - Claude Code version: [if applicable]
40
-
41
- ## Additional Context
42
-
43
- Add any other context about the problem here.
44
-
45
- ## State File Content (if relevant)
46
-
47
- ```
48
- # Paste output of: cat ~/.claude/statusline/statusline.*.state
49
- ```
@@ -1,31 +0,0 @@
1
- ---
2
- name: Feature Request
3
- about: Suggest an idea for this project
4
- title: '[FEATURE] '
5
- labels: enhancement
6
- assignees: ''
7
- ---
8
-
9
- ## Problem Statement
10
-
11
- A clear and concise description of what the problem is.
12
- Ex. I'm always frustrated when [...]
13
-
14
- ## Proposed Solution
15
-
16
- A clear and concise description of what you want to happen.
17
-
18
- ## Alternatives Considered
19
-
20
- A clear and concise description of any alternative solutions or features you've considered.
21
-
22
- ## Use Cases
23
-
24
- Describe specific use cases where this feature would be beneficial:
25
-
26
- 1. Use case 1
27
- 2. Use case 2
28
-
29
- ## Additional Context
30
-
31
- Add any other context, mockups, or screenshots about the feature request here.
@@ -1,33 +0,0 @@
1
- ## Description
2
-
3
- Brief description of the changes in this PR.
4
-
5
- ## Related Issue
6
-
7
- Fixes #(issue number)
8
-
9
- ## Type of Change
10
-
11
- - [ ] Bug fix (non-breaking change which fixes an issue)
12
- - [ ] New feature (non-breaking change which adds functionality)
13
- - [ ] Breaking change (fix or feature that would cause existing functionality to change)
14
- - [ ] Documentation update
15
- - [ ] Refactoring (no functional changes)
16
-
17
- ## Checklist
18
-
19
- - [ ] My code follows the project's style guidelines
20
- - [ ] I have performed a self-review of my code
21
- - [ ] I have made corresponding changes to the documentation
22
- - [ ] My changes generate no new warnings
23
- - [ ] I have added tests that prove my fix is effective or that my feature works
24
- - [ ] New and existing unit tests pass locally with my changes
25
- - [ ] All three implementations (bash, Python, Node.js) produce consistent output (if applicable)
26
-
27
- ## Screenshots (if applicable)
28
-
29
- Add screenshots to help explain your changes.
30
-
31
- ## Additional Notes
32
-
33
- Any additional information that reviewers should know.
@@ -1,44 +0,0 @@
1
- version: 2
2
- updates:
3
- # GitHub Actions
4
- - package-ecosystem: "github-actions"
5
- directory: "/"
6
- schedule:
7
- interval: "weekly"
8
- day: "monday"
9
- commit-message:
10
- prefix: "ci"
11
- labels:
12
- - "dependencies"
13
- - "github-actions"
14
-
15
- # npm dependencies
16
- - package-ecosystem: "npm"
17
- directory: "/"
18
- schedule:
19
- interval: "weekly"
20
- day: "monday"
21
- commit-message:
22
- prefix: "deps"
23
- labels:
24
- - "dependencies"
25
- - "javascript"
26
- groups:
27
- dev-dependencies:
28
- patterns:
29
- - "*"
30
- update-types:
31
- - "minor"
32
- - "patch"
33
-
34
- # pip dependencies
35
- - package-ecosystem: "pip"
36
- directory: "/"
37
- schedule:
38
- interval: "weekly"
39
- day: "monday"
40
- commit-message:
41
- prefix: "deps"
42
- labels:
43
- - "dependencies"
44
- - "python"