@sakupa/mcp 0.7.51 → 0.7.52

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/dist/bin.js CHANGED
@@ -266,6 +266,8 @@ var PAID_SITE_MAX_TOTAL_BYTES = 2 * 1024 * 1024 * 1024;
266
266
  var MAX_FILE_COUNT = 5e3;
267
267
  var MAX_SINGLE_FILE_BYTES = 25 * 1024 * 1024;
268
268
  var FREE_REQUESTS_PER_MINUTE = 240;
269
+ var FREE_TRANSFER_BYTES_PER_DAY = 1024 * 1024 * 1024;
270
+ var USAGE_ROLLUP_MAX_DELAY_SECONDS = 5 * 60;
269
271
  var LOAD_BUDGET_ADVISORY = {
270
272
  maxFiles: 50,
271
273
  maxTotalBytes: 5 * 1024 * 1024,
@@ -400,7 +402,7 @@ function isFreeSiteAllowanceNetworkReference(value) {
400
402
  }
401
403
 
402
404
  // ../core/dist/domain/version.js
403
- var SAKUPA_MCP_VERSION = "0.7.51";
405
+ var SAKUPA_MCP_VERSION = "0.7.52";
404
406
 
405
407
  // ../core/dist/domain/errors.js
406
408
  var HTTP_STATUS = {
@@ -4936,7 +4938,7 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
4936
4938
  server.registerTool(
4937
4939
  "billing",
4938
4940
  {
4939
- description: "Return the sole authoritative source for this site's hosting subscription: current plan, next renewal plan or cancellation, effective time, payment state, current paid entitlement, reconciled usage, estimated usage tier, bound custom domains and risks. Owner-only (uses the credential in .sakupa/site.json).",
4941
+ description: "Return the sole authoritative source for this site's hosting subscription: current plan, next renewal plan or cancellation, effective time, payment state, current paid entitlement, reconciled paid usage or current free-site fair-use telemetry, estimated usage tier, bound custom domains and risks. Owner-only (uses the credential in .sakupa/site.json).",
4940
4942
  outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
4941
4943
  annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true },
4942
4944
  inputSchema: {}
@@ -4955,7 +4957,10 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
4955
4957
  res.cancelAtPeriodEnd === true ? `Renewal: CANCELED \u2014 the site reverts to free at ${res.cancellationEffectiveAt ? timestampForAgent(res.cancellationEffectiveAt) : res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "the end of the already-paid month"}` : res.renewalPlan ? `Next renewal plan: ${res.renewalPlan} (JPY ${res.renewalMonthlyPriceJpy ?? tierPriceJpy(res.renewalPlan)}/month)` + (res.renewalEffectiveAt ? `, effective ${timestampForAgent(res.renewalEffectiveAt)}` : " (unchanged)") : res.cancelAtPeriodEnd === false ? "Renewal cancellation: no" : void 0,
4956
4958
  res.periodEntitlementPlan ? `Current paid entitlement: ${res.periodEntitlementPlan}` : void 0,
4957
4959
  res.currentPeriodStart ? `Current paid period: ${timestampForAgent(res.currentPeriodStart)} -> ${res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "?"}` : void 0,
4958
- `Usage state: ${res.usageState}`,
4960
+ res.mode === "free" ? `Usage state: ${res.usageState} \u2014 this describes free-site telemetry availability, not unlimited or unmeasured traffic. Free previews are measured and fair-use limited.` : `Usage state: ${res.usageState}`,
4961
+ res.freeUsage ? `Current free-site recorded usage for UTC day ${timestampForAgent(res.freeUsage.windowStart)} -> ${timestampForAgent(res.freeUsage.windowEnd)}: storage ${res.freeUsage.recordedUsage.storageBytes} bytes; transfer ${res.freeUsage.recordedUsage.transferBytes} bytes; requests ${res.freeUsage.recordedUsage.requests}.` : void 0,
4962
+ res.freeUsage ? `Free-site fair-use limits: transfer ${res.freeUsage.limits.transferBytesPerDay} bytes per UTC day; requests ${res.freeUsage.limits.requestsPerMinute} per minute per site.` : void 0,
4963
+ res.freeUsage ? `Free-site measurement delay: up to ${res.freeUsage.measurementDelaySecondsMax} seconds; ` + (res.freeUsage.recordedThrough ? `latest flushed counter ${timestampForAgent(res.freeUsage.recordedThrough)}.` : "no flushed request counter yet.") : void 0,
4959
4964
  res.currentPeriodUsage ? `Current usage: storage ${res.currentPeriodUsage.storageBytes} bytes; transfer ${res.currentPeriodUsage.transferBytes} bytes; requests ${res.currentPeriodUsage.requests}` : void 0,
4960
4965
  res.currentPeriodCountedTransferBytes !== void 0 ? `Transfer counted against current plan: ${res.currentPeriodCountedTransferBytes} bytes` : void 0,
4961
4966
  res.currentPlanLimits ? `Current plan limits: storage ${res.currentPlanLimits.storageBytes} bytes; transfer ${res.currentPlanLimits.transferBytes} bytes; requests ${res.currentPlanLimits.requests}` : void 0,
package/dist/index.js CHANGED
@@ -11,6 +11,8 @@ var PAID_SITE_MAX_TOTAL_BYTES = 2 * 1024 * 1024 * 1024;
11
11
  var MAX_FILE_COUNT = 5e3;
12
12
  var MAX_SINGLE_FILE_BYTES = 25 * 1024 * 1024;
13
13
  var FREE_REQUESTS_PER_MINUTE = 240;
14
+ var FREE_TRANSFER_BYTES_PER_DAY = 1024 * 1024 * 1024;
15
+ var USAGE_ROLLUP_MAX_DELAY_SECONDS = 5 * 60;
14
16
  var LOAD_BUDGET_ADVISORY = {
15
17
  maxFiles: 50,
16
18
  maxTotalBytes: 5 * 1024 * 1024,
@@ -145,7 +147,7 @@ function isFreeSiteAllowanceNetworkReference(value) {
145
147
  }
146
148
 
147
149
  // ../core/dist/domain/version.js
148
- var SAKUPA_MCP_VERSION = "0.7.51";
150
+ var SAKUPA_MCP_VERSION = "0.7.52";
149
151
 
150
152
  // ../core/dist/domain/errors.js
151
153
  var HTTP_STATUS = {
@@ -5052,7 +5054,7 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
5052
5054
  server.registerTool(
5053
5055
  "billing",
5054
5056
  {
5055
- description: "Return the sole authoritative source for this site's hosting subscription: current plan, next renewal plan or cancellation, effective time, payment state, current paid entitlement, reconciled usage, estimated usage tier, bound custom domains and risks. Owner-only (uses the credential in .sakupa/site.json).",
5057
+ description: "Return the sole authoritative source for this site's hosting subscription: current plan, next renewal plan or cancellation, effective time, payment state, current paid entitlement, reconciled paid usage or current free-site fair-use telemetry, estimated usage tier, bound custom domains and risks. Owner-only (uses the credential in .sakupa/site.json).",
5056
5058
  outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
5057
5059
  annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true },
5058
5060
  inputSchema: {}
@@ -5071,7 +5073,10 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
5071
5073
  res.cancelAtPeriodEnd === true ? `Renewal: CANCELED \u2014 the site reverts to free at ${res.cancellationEffectiveAt ? timestampForAgent(res.cancellationEffectiveAt) : res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "the end of the already-paid month"}` : res.renewalPlan ? `Next renewal plan: ${res.renewalPlan} (JPY ${res.renewalMonthlyPriceJpy ?? tierPriceJpy(res.renewalPlan)}/month)` + (res.renewalEffectiveAt ? `, effective ${timestampForAgent(res.renewalEffectiveAt)}` : " (unchanged)") : res.cancelAtPeriodEnd === false ? "Renewal cancellation: no" : void 0,
5072
5074
  res.periodEntitlementPlan ? `Current paid entitlement: ${res.periodEntitlementPlan}` : void 0,
5073
5075
  res.currentPeriodStart ? `Current paid period: ${timestampForAgent(res.currentPeriodStart)} -> ${res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "?"}` : void 0,
5074
- `Usage state: ${res.usageState}`,
5076
+ res.mode === "free" ? `Usage state: ${res.usageState} \u2014 this describes free-site telemetry availability, not unlimited or unmeasured traffic. Free previews are measured and fair-use limited.` : `Usage state: ${res.usageState}`,
5077
+ res.freeUsage ? `Current free-site recorded usage for UTC day ${timestampForAgent(res.freeUsage.windowStart)} -> ${timestampForAgent(res.freeUsage.windowEnd)}: storage ${res.freeUsage.recordedUsage.storageBytes} bytes; transfer ${res.freeUsage.recordedUsage.transferBytes} bytes; requests ${res.freeUsage.recordedUsage.requests}.` : void 0,
5078
+ res.freeUsage ? `Free-site fair-use limits: transfer ${res.freeUsage.limits.transferBytesPerDay} bytes per UTC day; requests ${res.freeUsage.limits.requestsPerMinute} per minute per site.` : void 0,
5079
+ res.freeUsage ? `Free-site measurement delay: up to ${res.freeUsage.measurementDelaySecondsMax} seconds; ` + (res.freeUsage.recordedThrough ? `latest flushed counter ${timestampForAgent(res.freeUsage.recordedThrough)}.` : "no flushed request counter yet.") : void 0,
5075
5080
  res.currentPeriodUsage ? `Current usage: storage ${res.currentPeriodUsage.storageBytes} bytes; transfer ${res.currentPeriodUsage.transferBytes} bytes; requests ${res.currentPeriodUsage.requests}` : void 0,
5076
5081
  res.currentPeriodCountedTransferBytes !== void 0 ? `Transfer counted against current plan: ${res.currentPeriodCountedTransferBytes} bytes` : void 0,
5077
5082
  res.currentPlanLimits ? `Current plan limits: storage ${res.currentPlanLimits.storageBytes} bytes; transfer ${res.currentPlanLimits.transferBytes} bytes; requests ${res.currentPlanLimits.requests}` : void 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakupa/mcp",
3
- "version": "0.7.51",
3
+ "version": "0.7.52",
4
4
  "description": "Sakupa MCP server: publish AI-made static sites from your AI tool. AI-made pages, live in seconds.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",