github-issue-tower-defence-management 1.44.1 → 1.44.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.
package/CHANGELOG.md CHANGED
@@ -1,9 +1,9 @@
1
- ## [1.44.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.44.0...v1.44.1) (2026-05-13)
1
+ ## [1.44.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.44.1...v1.44.2) (2026-05-13)
2
2
 
3
3
 
4
4
  ### Bug Fixes
5
5
 
6
- * **core:** revertOrphanedPreparationUseCase misses zombie-wrapper orphans where inner claude is dead but outer processes hold argv ([7c7f864](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/7c7f864f4dd683b58ca91bf43abcf660de6c0e7c))
6
+ * **core:** synthesise hour:168 100% entry when overage-status is rejected in OauthProxyClaudeRepository ([3396f91](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/3396f91be11bdd296b9858b7e78b3eb67869c19f))
7
7
 
8
8
  # [1.44.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.43.2...v1.44.0) (2026-05-13)
9
9
 
@@ -63,6 +63,17 @@ class OauthProxyClaudeRepository {
63
63
  });
64
64
  }
65
65
  }
66
+ const overageStatus = headers['anthropic-ratelimit-unified-overage-status'];
67
+ if (overageStatus === 'rejected' &&
68
+ !usages.some((u) => u.utilizationPercentage >= 100)) {
69
+ usages.push({
70
+ hour: 168,
71
+ utilizationPercentage: 100,
72
+ resetsAt: sevenDayReset
73
+ ? new Date(parseInt(sevenDayReset, 10) * 1000)
74
+ : new Date(),
75
+ });
76
+ }
66
77
  return usages;
67
78
  }
68
79
  async isClaudeAvailable(threshold) {
@@ -1 +1 @@
1
- {"version":3,"file":"OauthProxyClaudeRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/OauthProxyClaudeRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OauthProxyClaudeRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/OauthProxyClaudeRepository.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.44.1",
3
+ "version": "1.44.2",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -116,6 +116,88 @@ describe('OauthProxyClaudeRepository', () => {
116
116
  },
117
117
  ],
118
118
  },
119
+ {
120
+ name: 'synthesises hour:168 100% entry when overage-status is rejected and no existing entry is at 100%',
121
+ fileExists: true,
122
+ fileContent: JSON.stringify({
123
+ headers: {
124
+ 'anthropic-ratelimit-unified-7d-utilization': '0.88',
125
+ 'anthropic-ratelimit-unified-7d-reset': '1772769600',
126
+ 'anthropic-ratelimit-unified-overage-status': 'rejected',
127
+ 'anthropic-ratelimit-unified-overage-disabled-reason':
128
+ 'out_of_credits',
129
+ },
130
+ ts: 1234567890,
131
+ }),
132
+ expected: [
133
+ {
134
+ hour: 168,
135
+ utilizationPercentage: 88,
136
+ resetsAt: new Date(1772769600 * 1000),
137
+ },
138
+ {
139
+ hour: 168,
140
+ utilizationPercentage: 100,
141
+ resetsAt: new Date(1772769600 * 1000),
142
+ },
143
+ ],
144
+ },
145
+ {
146
+ name: 'does not synthesise entry when overage-status is absent',
147
+ fileExists: true,
148
+ fileContent: JSON.stringify({
149
+ headers: {
150
+ 'anthropic-ratelimit-unified-7d-utilization': '0.88',
151
+ 'anthropic-ratelimit-unified-7d-reset': '1772769600',
152
+ },
153
+ ts: 1234567890,
154
+ }),
155
+ expected: [
156
+ {
157
+ hour: 168,
158
+ utilizationPercentage: 88,
159
+ resetsAt: new Date(1772769600 * 1000),
160
+ },
161
+ ],
162
+ },
163
+ {
164
+ name: 'does not synthesise entry when overage-status is a value other than rejected',
165
+ fileExists: true,
166
+ fileContent: JSON.stringify({
167
+ headers: {
168
+ 'anthropic-ratelimit-unified-7d-utilization': '0.88',
169
+ 'anthropic-ratelimit-unified-7d-reset': '1772769600',
170
+ 'anthropic-ratelimit-unified-overage-status': 'allowed',
171
+ },
172
+ ts: 1234567890,
173
+ }),
174
+ expected: [
175
+ {
176
+ hour: 168,
177
+ utilizationPercentage: 88,
178
+ resetsAt: new Date(1772769600 * 1000),
179
+ },
180
+ ],
181
+ },
182
+ {
183
+ name: 'does not synthesise extra entry when an existing entry already reports 100%',
184
+ fileExists: true,
185
+ fileContent: JSON.stringify({
186
+ headers: {
187
+ 'anthropic-ratelimit-unified-7d-utilization': '1.00',
188
+ 'anthropic-ratelimit-unified-7d-reset': '1772769600',
189
+ 'anthropic-ratelimit-unified-overage-status': 'rejected',
190
+ },
191
+ ts: 1234567890,
192
+ }),
193
+ expected: [
194
+ {
195
+ hour: 168,
196
+ utilizationPercentage: 100,
197
+ resetsAt: new Date(1772769600 * 1000),
198
+ },
199
+ ],
200
+ },
119
201
  ];
120
202
 
121
203
  test.each(testCases)(
@@ -7,6 +7,7 @@ type ProxyFileHeaders = {
7
7
  'anthropic-ratelimit-unified-7d-utilization'?: string;
8
8
  'anthropic-ratelimit-unified-5h-reset'?: string;
9
9
  'anthropic-ratelimit-unified-7d-reset'?: string;
10
+ 'anthropic-ratelimit-unified-overage-status'?: string;
10
11
  };
11
12
 
12
13
  type ProxyFile = {
@@ -84,6 +85,20 @@ export class OauthProxyClaudeRepository implements ClaudeRepository {
84
85
  }
85
86
  }
86
87
 
88
+ const overageStatus = headers['anthropic-ratelimit-unified-overage-status'];
89
+ if (
90
+ overageStatus === 'rejected' &&
91
+ !usages.some((u) => u.utilizationPercentage >= 100)
92
+ ) {
93
+ usages.push({
94
+ hour: 168,
95
+ utilizationPercentage: 100,
96
+ resetsAt: sevenDayReset
97
+ ? new Date(parseInt(sevenDayReset, 10) * 1000)
98
+ : new Date(),
99
+ });
100
+ }
101
+
87
102
  return usages;
88
103
  }
89
104
 
@@ -1 +1 @@
1
- {"version":3,"file":"OauthProxyClaudeRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/OauthProxyClaudeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAmB5E,qBAAa,0BAA2B,YAAW,gBAAgB;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGhC,QAAQ,GAAE,MACoB;IAK1B,QAAQ,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA2DxC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAO7D"}
1
+ {"version":3,"file":"OauthProxyClaudeRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/OauthProxyClaudeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAoB5E,qBAAa,0BAA2B,YAAW,gBAAgB;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGhC,QAAQ,GAAE,MACoB;IAK1B,QAAQ,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAyExC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAO7D"}