@sakupa/mcp 0.7.50 → 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 +27 -5
- package/dist/index.js +27 -5
- package/package.json +1 -1
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.
|
|
405
|
+
var SAKUPA_MCP_VERSION = "0.7.52";
|
|
404
406
|
|
|
405
407
|
// ../core/dist/domain/errors.js
|
|
406
408
|
var HTTP_STATUS = {
|
|
@@ -3329,6 +3331,7 @@ function structuredToolResult(envelope) {
|
|
|
3329
3331
|
"nextActions",
|
|
3330
3332
|
"operationId",
|
|
3331
3333
|
"embedded URLs, paths, IDs, code tokens, tool names, arguments, DNS values, field names, amounts and exact timestamps",
|
|
3334
|
+
"complete relative paths including every directory segment; never reduce a path to its basename",
|
|
3332
3335
|
...envelope.presentation?.preserveExactFields ?? []
|
|
3333
3336
|
],
|
|
3334
3337
|
mustTellUser: [
|
|
@@ -3347,13 +3350,15 @@ function structuredToolResult(envelope) {
|
|
|
3347
3350
|
"Answer the current user question instead of mechanically dumping every returned field. Explain relevant technical terms in plain language while retaining the exact term when it helps accuracy.",
|
|
3348
3351
|
"Do not ask the user to copy or run tool arguments that this AI can execute. Use exact nextActions internally after any required user choice.",
|
|
3349
3352
|
"Translate human-readable explanations into the language the user is using and present dates and sizes in locally understandable form alongside exact values when precision matters.",
|
|
3353
|
+
"Preserve every returned path verbatim, including all directory segments. For example, .sakupa/site.json must never be shortened to site.json.",
|
|
3354
|
+
"A subscription-backed site stays online only while its subscription remains active. Never describe that duration as permanent or long-term, and never say a subscription is bound to the site.",
|
|
3350
3355
|
`Every ISO timestamp ending in Z is UTC, never the user local time. Never present it without an explicit UTC label. If the user time zone is known, convert it and show the local date, local clock time, and zone name or UTC offset, while also preserving the exact UTC timestamp. The MCP client runtime reports ${clientTimeZone}; use that only when it represents the user's timezone. If the user time zone is unknown, label the exact value as UTC and do not guess.`,
|
|
3351
3356
|
"Do not proactively mention a normal Production environment. Always disclose Test or unknown/non-production environments prominently.",
|
|
3352
3357
|
...envelope.presentation?.agentInstructions ?? []
|
|
3353
3358
|
]
|
|
3354
3359
|
};
|
|
3355
3360
|
const structuredEnvelope = { ...envelope, presentation };
|
|
3356
|
-
const presentationFallback = `AGENT PRESENTATION CONTRACT: Retain every technical fact below for reasoning and exact follow-up. Tell the user the requested result, required next step, and every material charge, deadline, security or irreversible consequence. Answer only the current question instead of dumping all fields; explain relevant technical terms in plain language while keeping exact terms available. Translate human-readable explanations into the user's language, but preserve URLs, paths, IDs, tool names, arguments, DNS values, field names, amounts and exact timestamps. A timestamp ending in Z is UTC, never local time: label UTC explicitly and, when the user time zone is known, also show the converted local date/time with its zone name or UTC offset. Never show an unlabeled timestamp or guess an unknown time zone. The MCP client runtime timezone is ${clientTimeZone}; use it only when it represents the user timezone. Do not proactively show a normal Production environment; always disclose Test or unknown environments. Never ask the user to run exact tool arguments that this AI can execute.`;
|
|
3361
|
+
const presentationFallback = `AGENT PRESENTATION CONTRACT: Retain every technical fact below for reasoning and exact follow-up. Tell the user the requested result, required next step, and every material charge, deadline, security or irreversible consequence. Answer only the current question instead of dumping all fields; explain relevant technical terms in plain language while keeping exact terms available. Translate human-readable explanations into the user's language, but preserve URLs, paths, IDs, tool names, arguments, DNS values, field names, amounts and exact timestamps. Preserve every path verbatim with all directory segments: never shorten .sakupa/site.json to site.json. A subscription-backed site stays online only while its subscription remains active; never call that permanent or long-term, and never say a subscription is bound to the site. A timestamp ending in Z is UTC, never local time: label UTC explicitly and, when the user time zone is known, also show the converted local date/time with its zone name or UTC offset. Never show an unlabeled timestamp or guess an unknown time zone. The MCP client runtime timezone is ${clientTimeZone}; use it only when it represents the user timezone. Do not proactively show a normal Production environment; always disclose Test or unknown environments. Never ask the user to run exact tool arguments that this AI can execute.`;
|
|
3357
3362
|
return {
|
|
3358
3363
|
content: [{ type: "text", text: `${envelope.summary}
|
|
3359
3364
|
|
|
@@ -4547,7 +4552,7 @@ Next action: ${analysis.suggestedNextAction}`,
|
|
|
4547
4552
|
Files uploaded: ${uploaded2} (${finalized2.totalBytes} bytes)
|
|
4548
4553
|
` + (finalized2.expiresAt ? `Expiry deadline: ${timestampForAgent(finalized2.expiresAt)}
|
|
4549
4554
|
` : "") + `
|
|
4550
|
-
This is a FREE temporary preview: it stays live for ${FREE_SITE_TTL_HOURS} hours. Deploying again or calling refresh extends the validity; while a subscription remains active, this URL stays live without the free-site expiry. The management credential was saved to .sakupa/site.json \u2014
|
|
4555
|
+
This is a FREE temporary preview: it stays live for ${FREE_SITE_TTL_HOURS} hours. Deploying again or calling refresh extends the validity; while a subscription remains active, this URL stays live without the free-site expiry. This is conditional on the subscription remaining active: do NOT describe the site as permanent or long-term, and do NOT say the subscription is bound to the site. The management credential was saved to the exact relative path .sakupa/site.json \u2014 preserve this complete path verbatim and never shorten it to site.json. Keep that file: it is the only way to manage this site.
|
|
4551
4556
|
` + credentialGitReminder(ctx.projectDir) + (finalized2.warnings.length > 0 ? `
|
|
4552
4557
|
Warnings:
|
|
4553
4558
|
${JSON.stringify(finalized2.warnings, null, 2)}` : ""),
|
|
@@ -4562,6 +4567,13 @@ ${JSON.stringify(finalized2.warnings, null, 2)}` : ""),
|
|
|
4562
4567
|
totalBytes: finalized2.totalBytes,
|
|
4563
4568
|
warnings: finalized2.warnings,
|
|
4564
4569
|
credentialStoredLocally: true,
|
|
4570
|
+
credentialPath: ".sakupa/site.json",
|
|
4571
|
+
subscriptionServingRule: {
|
|
4572
|
+
siteStaysOnlineOnlyWhileSubscriptionActive: true,
|
|
4573
|
+
freeSiteExpirySuppressedWhileSubscriptionActive: true,
|
|
4574
|
+
permanentOrLongTermDescriptionAllowed: false,
|
|
4575
|
+
subscriptionBindingDescriptionAllowed: false
|
|
4576
|
+
},
|
|
4565
4577
|
projectDir: ctx.projectDir,
|
|
4566
4578
|
environment: environmentFor(ctx.apiBaseUrl)
|
|
4567
4579
|
}
|
|
@@ -4653,6 +4665,13 @@ Optional security recommendation: this management credential was created at ${ti
|
|
|
4653
4665
|
filesUploaded: uploaded,
|
|
4654
4666
|
totalBytes: finalized.totalBytes,
|
|
4655
4667
|
warnings: finalized.warnings,
|
|
4668
|
+
credentialPath: ".sakupa/site.json",
|
|
4669
|
+
subscriptionServingRule: {
|
|
4670
|
+
siteStaysOnlineOnlyWhileSubscriptionActive: true,
|
|
4671
|
+
freeSiteExpirySuppressedWhileSubscriptionActive: true,
|
|
4672
|
+
permanentOrLongTermDescriptionAllowed: false,
|
|
4673
|
+
subscriptionBindingDescriptionAllowed: false
|
|
4674
|
+
},
|
|
4656
4675
|
credentialSecurity: credentialSecurity ? {
|
|
4657
4676
|
credentialCreatedAt: credentialSecurity.credentialCreatedAt,
|
|
4658
4677
|
ageSeconds: credentialSecurity.ageSeconds,
|
|
@@ -4919,7 +4938,7 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
|
|
|
4919
4938
|
server.registerTool(
|
|
4920
4939
|
"billing",
|
|
4921
4940
|
{
|
|
4922
|
-
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).",
|
|
4923
4942
|
outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
|
|
4924
4943
|
annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true },
|
|
4925
4944
|
inputSchema: {}
|
|
@@ -4938,7 +4957,10 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
|
|
|
4938
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,
|
|
4939
4958
|
res.periodEntitlementPlan ? `Current paid entitlement: ${res.periodEntitlementPlan}` : void 0,
|
|
4940
4959
|
res.currentPeriodStart ? `Current paid period: ${timestampForAgent(res.currentPeriodStart)} -> ${res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "?"}` : void 0,
|
|
4941
|
-
`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,
|
|
4942
4964
|
res.currentPeriodUsage ? `Current usage: storage ${res.currentPeriodUsage.storageBytes} bytes; transfer ${res.currentPeriodUsage.transferBytes} bytes; requests ${res.currentPeriodUsage.requests}` : void 0,
|
|
4943
4965
|
res.currentPeriodCountedTransferBytes !== void 0 ? `Transfer counted against current plan: ${res.currentPeriodCountedTransferBytes} bytes` : void 0,
|
|
4944
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.
|
|
150
|
+
var SAKUPA_MCP_VERSION = "0.7.52";
|
|
149
151
|
|
|
150
152
|
// ../core/dist/domain/errors.js
|
|
151
153
|
var HTTP_STATUS = {
|
|
@@ -2139,6 +2141,7 @@ function structuredToolResult(envelope) {
|
|
|
2139
2141
|
"nextActions",
|
|
2140
2142
|
"operationId",
|
|
2141
2143
|
"embedded URLs, paths, IDs, code tokens, tool names, arguments, DNS values, field names, amounts and exact timestamps",
|
|
2144
|
+
"complete relative paths including every directory segment; never reduce a path to its basename",
|
|
2142
2145
|
...envelope.presentation?.preserveExactFields ?? []
|
|
2143
2146
|
],
|
|
2144
2147
|
mustTellUser: [
|
|
@@ -2157,13 +2160,15 @@ function structuredToolResult(envelope) {
|
|
|
2157
2160
|
"Answer the current user question instead of mechanically dumping every returned field. Explain relevant technical terms in plain language while retaining the exact term when it helps accuracy.",
|
|
2158
2161
|
"Do not ask the user to copy or run tool arguments that this AI can execute. Use exact nextActions internally after any required user choice.",
|
|
2159
2162
|
"Translate human-readable explanations into the language the user is using and present dates and sizes in locally understandable form alongside exact values when precision matters.",
|
|
2163
|
+
"Preserve every returned path verbatim, including all directory segments. For example, .sakupa/site.json must never be shortened to site.json.",
|
|
2164
|
+
"A subscription-backed site stays online only while its subscription remains active. Never describe that duration as permanent or long-term, and never say a subscription is bound to the site.",
|
|
2160
2165
|
`Every ISO timestamp ending in Z is UTC, never the user local time. Never present it without an explicit UTC label. If the user time zone is known, convert it and show the local date, local clock time, and zone name or UTC offset, while also preserving the exact UTC timestamp. The MCP client runtime reports ${clientTimeZone}; use that only when it represents the user's timezone. If the user time zone is unknown, label the exact value as UTC and do not guess.`,
|
|
2161
2166
|
"Do not proactively mention a normal Production environment. Always disclose Test or unknown/non-production environments prominently.",
|
|
2162
2167
|
...envelope.presentation?.agentInstructions ?? []
|
|
2163
2168
|
]
|
|
2164
2169
|
};
|
|
2165
2170
|
const structuredEnvelope = { ...envelope, presentation };
|
|
2166
|
-
const presentationFallback = `AGENT PRESENTATION CONTRACT: Retain every technical fact below for reasoning and exact follow-up. Tell the user the requested result, required next step, and every material charge, deadline, security or irreversible consequence. Answer only the current question instead of dumping all fields; explain relevant technical terms in plain language while keeping exact terms available. Translate human-readable explanations into the user's language, but preserve URLs, paths, IDs, tool names, arguments, DNS values, field names, amounts and exact timestamps. A timestamp ending in Z is UTC, never local time: label UTC explicitly and, when the user time zone is known, also show the converted local date/time with its zone name or UTC offset. Never show an unlabeled timestamp or guess an unknown time zone. The MCP client runtime timezone is ${clientTimeZone}; use it only when it represents the user timezone. Do not proactively show a normal Production environment; always disclose Test or unknown environments. Never ask the user to run exact tool arguments that this AI can execute.`;
|
|
2171
|
+
const presentationFallback = `AGENT PRESENTATION CONTRACT: Retain every technical fact below for reasoning and exact follow-up. Tell the user the requested result, required next step, and every material charge, deadline, security or irreversible consequence. Answer only the current question instead of dumping all fields; explain relevant technical terms in plain language while keeping exact terms available. Translate human-readable explanations into the user's language, but preserve URLs, paths, IDs, tool names, arguments, DNS values, field names, amounts and exact timestamps. Preserve every path verbatim with all directory segments: never shorten .sakupa/site.json to site.json. A subscription-backed site stays online only while its subscription remains active; never call that permanent or long-term, and never say a subscription is bound to the site. A timestamp ending in Z is UTC, never local time: label UTC explicitly and, when the user time zone is known, also show the converted local date/time with its zone name or UTC offset. Never show an unlabeled timestamp or guess an unknown time zone. The MCP client runtime timezone is ${clientTimeZone}; use it only when it represents the user timezone. Do not proactively show a normal Production environment; always disclose Test or unknown environments. Never ask the user to run exact tool arguments that this AI can execute.`;
|
|
2167
2172
|
return {
|
|
2168
2173
|
content: [{ type: "text", text: `${envelope.summary}
|
|
2169
2174
|
|
|
@@ -4663,7 +4668,7 @@ Next action: ${analysis.suggestedNextAction}`,
|
|
|
4663
4668
|
Files uploaded: ${uploaded2} (${finalized2.totalBytes} bytes)
|
|
4664
4669
|
` + (finalized2.expiresAt ? `Expiry deadline: ${timestampForAgent(finalized2.expiresAt)}
|
|
4665
4670
|
` : "") + `
|
|
4666
|
-
This is a FREE temporary preview: it stays live for ${FREE_SITE_TTL_HOURS} hours. Deploying again or calling refresh extends the validity; while a subscription remains active, this URL stays live without the free-site expiry. The management credential was saved to .sakupa/site.json \u2014
|
|
4671
|
+
This is a FREE temporary preview: it stays live for ${FREE_SITE_TTL_HOURS} hours. Deploying again or calling refresh extends the validity; while a subscription remains active, this URL stays live without the free-site expiry. This is conditional on the subscription remaining active: do NOT describe the site as permanent or long-term, and do NOT say the subscription is bound to the site. The management credential was saved to the exact relative path .sakupa/site.json \u2014 preserve this complete path verbatim and never shorten it to site.json. Keep that file: it is the only way to manage this site.
|
|
4667
4672
|
` + credentialGitReminder(ctx.projectDir) + (finalized2.warnings.length > 0 ? `
|
|
4668
4673
|
Warnings:
|
|
4669
4674
|
${JSON.stringify(finalized2.warnings, null, 2)}` : ""),
|
|
@@ -4678,6 +4683,13 @@ ${JSON.stringify(finalized2.warnings, null, 2)}` : ""),
|
|
|
4678
4683
|
totalBytes: finalized2.totalBytes,
|
|
4679
4684
|
warnings: finalized2.warnings,
|
|
4680
4685
|
credentialStoredLocally: true,
|
|
4686
|
+
credentialPath: ".sakupa/site.json",
|
|
4687
|
+
subscriptionServingRule: {
|
|
4688
|
+
siteStaysOnlineOnlyWhileSubscriptionActive: true,
|
|
4689
|
+
freeSiteExpirySuppressedWhileSubscriptionActive: true,
|
|
4690
|
+
permanentOrLongTermDescriptionAllowed: false,
|
|
4691
|
+
subscriptionBindingDescriptionAllowed: false
|
|
4692
|
+
},
|
|
4681
4693
|
projectDir: ctx.projectDir,
|
|
4682
4694
|
environment: environmentFor(ctx.apiBaseUrl)
|
|
4683
4695
|
}
|
|
@@ -4769,6 +4781,13 @@ Optional security recommendation: this management credential was created at ${ti
|
|
|
4769
4781
|
filesUploaded: uploaded,
|
|
4770
4782
|
totalBytes: finalized.totalBytes,
|
|
4771
4783
|
warnings: finalized.warnings,
|
|
4784
|
+
credentialPath: ".sakupa/site.json",
|
|
4785
|
+
subscriptionServingRule: {
|
|
4786
|
+
siteStaysOnlineOnlyWhileSubscriptionActive: true,
|
|
4787
|
+
freeSiteExpirySuppressedWhileSubscriptionActive: true,
|
|
4788
|
+
permanentOrLongTermDescriptionAllowed: false,
|
|
4789
|
+
subscriptionBindingDescriptionAllowed: false
|
|
4790
|
+
},
|
|
4772
4791
|
credentialSecurity: credentialSecurity ? {
|
|
4773
4792
|
credentialCreatedAt: credentialSecurity.credentialCreatedAt,
|
|
4774
4793
|
ageSeconds: credentialSecurity.ageSeconds,
|
|
@@ -5035,7 +5054,7 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
|
|
|
5035
5054
|
server.registerTool(
|
|
5036
5055
|
"billing",
|
|
5037
5056
|
{
|
|
5038
|
-
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).",
|
|
5039
5058
|
outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
|
|
5040
5059
|
annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true },
|
|
5041
5060
|
inputSchema: {}
|
|
@@ -5054,7 +5073,10 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
|
|
|
5054
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,
|
|
5055
5074
|
res.periodEntitlementPlan ? `Current paid entitlement: ${res.periodEntitlementPlan}` : void 0,
|
|
5056
5075
|
res.currentPeriodStart ? `Current paid period: ${timestampForAgent(res.currentPeriodStart)} -> ${res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "?"}` : void 0,
|
|
5057
|
-
`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,
|
|
5058
5080
|
res.currentPeriodUsage ? `Current usage: storage ${res.currentPeriodUsage.storageBytes} bytes; transfer ${res.currentPeriodUsage.transferBytes} bytes; requests ${res.currentPeriodUsage.requests}` : void 0,
|
|
5059
5081
|
res.currentPeriodCountedTransferBytes !== void 0 ? `Transfer counted against current plan: ${res.currentPeriodCountedTransferBytes} bytes` : void 0,
|
|
5060
5082
|
res.currentPlanLimits ? `Current plan limits: storage ${res.currentPlanLimits.storageBytes} bytes; transfer ${res.currentPlanLimits.transferBytes} bytes; requests ${res.currentPlanLimits.requests}` : void 0,
|