v0.1.17 — cache question settled, quota vocabulary corrected
The account's monthly allowance reset, so two questions that were previously
blocked could be answered by asking the service rather than reasoning about it.
Can cache usage be forwarded to DSH? No — Kiro never sends it
Seven request shapes were replayed; five returned 200 and two were throttled.
Across both surfaces, three agent modes, two chatTriggerType values and two model
families, every response was metadataEvent {"stopReason":"END_TURN"} with no
tokenUsage — therefore no cacheReadInputTokens or cacheWriteInputTokens.
Cache hit 0% in the session line is DSH displaying an absent signal, not a
measurement: cacheHitPercent divides cache reads by billed input, and derived
usage supplies a real input figure with no cache buckets. The only plugin-side
alternative would be to invent cache numbers.
Caching happens anyway, and cachePoint is a no-op
A 2×2 with a separate ~24 KB prefix per arm, so neither arm warms the other:
| arm | first call | repeat |
|---|---|---|
| no cache points | 0.07866418315091211 credits | 0.041732541359867335 |
| with cache points | 0.07866418315091211 credits | 0.041732541359867335 |
Identical to 17 significant digits in all four cells. So Kiro caches
automatically, server-side, keyed on the prefix — a repeat costs 47% less, and the
harness's turn loop already benefits from resending history. And cachePoint
(declared on UserInputMessage, AssistantResponseMessage, and as a Tool union
arm) is accepted but changes nothing, so it is deliberately not added to the
serializer.
The experiment is kept as tests/live-cache.spec.ts, including the control that
disproved a first, wrong reading of it.
Quota vocabulary corrected
0.1.15's reasons were partly guessed. The service model's own enums:
ThrottlingExceptionReason: CREDIT_CONSUMPTION_RATE_EXCEEDED,
DAILY_REQUEST_COUNT, INSUFFICIENT_MODEL_CAPACITY, MONTHLY_REQUEST_COUNT,
SERVICE_REQUEST_RATE_EXCEEDED, USER_REQUEST_RATE_EXCEEDEDServiceQuotaExceededExceptionReason: CONVERSATION_LIMIT_EXCEEDED,
MONTHLY_REQUEST_COUNT, OVERAGE_REQUEST_LIMIT_EXCEEDED
FREE_TIER_LIMIT_REACHED does not exist and was removed;
OVERAGE_REQUEST_LIMIT_EXCEEDED was added; CREDIT_CONSUMPTION_RATE_EXCEEDED
returns to RATE_LIMIT because it names a burn rate, not an empty balance;
CONVERSATION_LIMIT_EXCEEDED reports as CONTEXT_WINDOW_EXCEEDED whatever status
carries it, since a smaller conversation is the harness's only lever. Reason
matching now runs ahead of the status branches, because the service uses more than
one status for the same condition.
Verification
npm run check: 185 tests pass (9 live probes skipped), plus typecheck, build and
syntax checks.
Install
dsh plugin --profile <name> add github:dat-lequoc/dsh-kiro#v0.1.17Artifact checksum
sha256 c475ed47e951712a651857846337350c6938958dc70157206677614690b89fa9 dsh-kiro-0.1.17.tgz