github-issue-tower-defence-management 1.44.3 → 1.44.4

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,3 +1,10 @@
1
+ ## [1.44.4](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.44.3...v1.44.4) (2026-05-13)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **core:** skip synthesised 100% entry when overage-disabled-reason indicates plan quota is still available ([b7e5833](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/b7e58332953ece15d675430f3b47a37bd04a08c4)), closes [#533](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/533) [#538](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/538)
7
+
1
8
  ## [1.44.3](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.44.2...v1.44.3) (2026-05-13)
2
9
 
3
10
 
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.OauthProxyClaudeRepository = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
+ const OVERAGE_DISABLED_REASONS_INDICATING_AVAILABLE_PLAN_QUOTA = new Set(['org_level_disabled_until']);
8
9
  const isProxyFile = (value) => {
9
10
  if (typeof value !== 'object' || value === null)
10
11
  return false;
@@ -64,7 +65,11 @@ class OauthProxyClaudeRepository {
64
65
  }
65
66
  }
66
67
  const overageStatus = headers['anthropic-ratelimit-unified-overage-status'];
68
+ const overageDisabledReason = headers['anthropic-ratelimit-unified-overage-disabled-reason'];
69
+ const overageDisabledReasonIndicatesAvailablePlanQuota = overageDisabledReason !== undefined &&
70
+ OVERAGE_DISABLED_REASONS_INDICATING_AVAILABLE_PLAN_QUOTA.has(overageDisabledReason);
67
71
  if (overageStatus === 'rejected' &&
72
+ !overageDisabledReasonIndicatesAvailablePlanQuota &&
68
73
  !usages.some((u) => u.utilizationPercentage >= 100)) {
69
74
  usages.push({
70
75
  hour: 168,
@@ -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.3",
3
+ "version": "1.44.4",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -117,7 +117,7 @@ describe('OauthProxyClaudeRepository', () => {
117
117
  ],
118
118
  },
119
119
  {
120
- name: 'synthesises hour:168 100% entry when overage-status is rejected and no existing entry is at 100%',
120
+ name: 'synthesises hour:168 100% entry when overage-status is rejected with out_of_credits reason and no existing entry is at 100%',
121
121
  fileExists: true,
122
122
  fileContent: JSON.stringify({
123
123
  headers: {
@@ -142,6 +142,61 @@ describe('OauthProxyClaudeRepository', () => {
142
142
  },
143
143
  ],
144
144
  },
145
+ {
146
+ name: 'synthesises hour:168 100% entry when overage-status is rejected without disabled-reason header',
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
+ 'anthropic-ratelimit-unified-overage-status': 'rejected',
153
+ },
154
+ ts: 1234567890,
155
+ }),
156
+ expected: [
157
+ {
158
+ hour: 168,
159
+ utilizationPercentage: 88,
160
+ resetsAt: new Date(1772769600 * 1000),
161
+ },
162
+ {
163
+ hour: 168,
164
+ utilizationPercentage: 100,
165
+ resetsAt: new Date(1772769600 * 1000),
166
+ },
167
+ ],
168
+ },
169
+ {
170
+ name: 'does not synthesise entry when overage-status is rejected but overage-disabled-reason is org_level_disabled_until',
171
+ fileExists: true,
172
+ fileContent: JSON.stringify({
173
+ headers: {
174
+ 'anthropic-ratelimit-unified-status': 'allowed',
175
+ 'anthropic-ratelimit-unified-5h-status': 'allowed',
176
+ 'anthropic-ratelimit-unified-5h-utilization': '0.10',
177
+ 'anthropic-ratelimit-unified-5h-reset': '1772575200',
178
+ 'anthropic-ratelimit-unified-7d-status': 'allowed',
179
+ 'anthropic-ratelimit-unified-7d-utilization': '0.05',
180
+ 'anthropic-ratelimit-unified-7d-reset': '1772769600',
181
+ 'anthropic-ratelimit-unified-overage-status': 'rejected',
182
+ 'anthropic-ratelimit-unified-overage-disabled-reason':
183
+ 'org_level_disabled_until',
184
+ },
185
+ ts: 1234567890,
186
+ }),
187
+ expected: [
188
+ {
189
+ hour: 5,
190
+ utilizationPercentage: 10,
191
+ resetsAt: new Date(1772575200 * 1000),
192
+ },
193
+ {
194
+ hour: 168,
195
+ utilizationPercentage: 5,
196
+ resetsAt: new Date(1772769600 * 1000),
197
+ },
198
+ ],
199
+ },
145
200
  {
146
201
  name: 'does not synthesise entry when overage-status is absent',
147
202
  fileExists: true,
@@ -8,8 +8,12 @@ type ProxyFileHeaders = {
8
8
  'anthropic-ratelimit-unified-5h-reset'?: string;
9
9
  'anthropic-ratelimit-unified-7d-reset'?: string;
10
10
  'anthropic-ratelimit-unified-overage-status'?: string;
11
+ 'anthropic-ratelimit-unified-overage-disabled-reason'?: string;
11
12
  };
12
13
 
14
+ const OVERAGE_DISABLED_REASONS_INDICATING_AVAILABLE_PLAN_QUOTA: ReadonlySet<string> =
15
+ new Set(['org_level_disabled_until']);
16
+
13
17
  type ProxyFile = {
14
18
  headers?: ProxyFileHeaders;
15
19
  };
@@ -86,8 +90,16 @@ export class OauthProxyClaudeRepository implements ClaudeRepository {
86
90
  }
87
91
 
88
92
  const overageStatus = headers['anthropic-ratelimit-unified-overage-status'];
93
+ const overageDisabledReason =
94
+ headers['anthropic-ratelimit-unified-overage-disabled-reason'];
95
+ const overageDisabledReasonIndicatesAvailablePlanQuota =
96
+ overageDisabledReason !== undefined &&
97
+ OVERAGE_DISABLED_REASONS_INDICATING_AVAILABLE_PLAN_QUOTA.has(
98
+ overageDisabledReason,
99
+ );
89
100
  if (
90
101
  overageStatus === 'rejected' &&
102
+ !overageDisabledReasonIndicatesAvailablePlanQuota &&
91
103
  !usages.some((u) => u.utilizationPercentage >= 100)
92
104
  ) {
93
105
  usages.push({
@@ -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;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"}
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;AAwB5E,qBAAa,0BAA2B,YAAW,gBAAgB;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGhC,QAAQ,GAAE,MACoB;IAK1B,QAAQ,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAiFxC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAO7D"}