@kensio/skills 1.15.0 → 1.16.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kensio/skills",
3
- "version": "1.15.0",
3
+ "version": "1.16.0",
4
4
  "description": "Install Kensio agent skills into any agent that reads SKILL.md.",
5
5
  "keywords": [
6
6
  "agent-skills",
@@ -3,7 +3,7 @@ name: dynamodb-single-table
3
3
  description: Model data in Amazon DynamoDB as one table by default, reading the current AWS guidance before committing to a schema, writing the access patterns down before any keys exist, holding every entity type in one table, overloading generic partition and sort keys across those types, overloading and sparsifying secondary indexes, and splitting items by write rate. Use when designing or reviewing a DynamoDB schema, when a CDK stack is about to gain a second table, when an entity needs a query it has no key for, when application code fetches from two tables to assemble one response, when a Scan or a filter expression appears, when a partition runs hot or a write throttles, and when asked how to model users, orders, events or tenants in DynamoDB.
4
4
  license: Apache-2.0
5
5
  metadata:
6
- version: "1.15.0"
6
+ version: "1.16.0"
7
7
  ---
8
8
 
9
9
  # Single-table design in DynamoDB
@@ -3,7 +3,7 @@ name: github-issue-drafting
3
3
  description: Draft a GitHub issue from a short note or a rough idea, grounding every claim about the code in the repository the issue will be filed against, splitting work that is really two issues, and filing it with `gh` once the user has approved the draft. Use when turning a to-do item, a Slack message, a code TODO, a failing test or a bug report into an issue, when asked to "write up an issue for" something, to "raise", "file" or "open an issue", when asked whether something should be one issue or several, and when tidying the titles, types or labels of issues that already exist.
4
4
  license: Apache-2.0
5
5
  metadata:
6
- version: "1.15.0"
6
+ version: "1.16.0"
7
7
  ---
8
8
 
9
9
  # GitHub issue drafting
@@ -3,7 +3,7 @@ name: isolated-testing-style
3
3
  description: Write tests that start from given/when/then, use real collaborators through simulation rather than stubs and mocks, take their isolation from randomised data rather than shared setup and teardown, and assert behaviour rather than call counts. Use when writing or reviewing tests, when a test needs a collaborator faked, when reaching for a mock, spy, `toHaveBeenCalledWith`, `beforeEach`/`afterEach` fixtures or a hardcoded expected hash, when test setup has grown tangled, and when asked "how should I test this?".
4
4
  license: Apache-2.0
5
5
  metadata:
6
- version: "1.15.0"
6
+ version: "1.16.0"
7
7
  ---
8
8
 
9
9
  # Isolated testing style
@@ -4,7 +4,7 @@ description: Send the prose of a finished document to Pangram, a commercial AI-t
4
4
  license: Apache-2.0
5
5
  compatibility: Needs a Pangram API key and network access. Every run is billed.
6
6
  metadata:
7
- version: "1.15.0"
7
+ version: "1.16.0"
8
8
  disable-model-invocation: true
9
9
  ---
10
10
 
@@ -3,7 +3,7 @@ name: part-factory-test-data
3
3
  description: Build test data with @kensio/part-factory, keeping in the factory everything a test does not care about, passing dependencies at call time so factories stay independent, and choosing between StaticFactory, DynamicFactory, VariantFactory, MappedFactory and AsyncMappedFactory. Use when writing test fixtures or builders, when a test file is full of object literals, when a shared event, message or payload shape is being hand-written, when a required field is about to be made optional to ease test setup, and when tempted to wrap a factory in a helper function that applies overrides.
4
4
  license: Apache-2.0
5
5
  metadata:
6
- version: "1.15.0"
6
+ version: "1.16.0"
7
7
  ---
8
8
 
9
9
  # Building test data with Part Factory
@@ -3,7 +3,7 @@ name: skill-template
3
3
  description: Scaffold a new agent skill, writing the SKILL.md and its frontmatter to the Agent Skills specification, then wrapping it as a plugin in this repo with package.json, plugin.json and a marketplace entry. Use when the user asks to "add a new skill", "create a skill", "write a SKILL.md" or "start a new plugin", and when checking whether an existing skill is portable between agents.
4
4
  license: Apache-2.0
5
5
  metadata:
6
- version: "1.15.0"
6
+ version: "1.16.0"
7
7
  ---
8
8
 
9
9
  # Skill template
@@ -3,7 +3,7 @@ name: technical-prose-style
3
3
  description: Write documentation, READMEs, code comments, commit messages, release notes and PR text as plain technical prose, by removing the constructions that make unedited LLM prose tiring to read. It targets significance tails, contrastive definition, negation framing, appositive tails, colon explainers and a vocabulary that keeps renaming the same thing. Ships a script that scores prose against Django, Go, Rust and Python documentation. Use when writing or editing docs, a README, a changelog, a blog post or any prose for human readers, when asked to improve, tighten or rewrite writing, when prose "sounds like AI" or "sounds like Claude", and when reviewing documentation in a pull request.
4
4
  license: Apache-2.0
5
5
  metadata:
6
- version: "1.15.0"
6
+ version: "1.16.0"
7
7
  ---
8
8
 
9
9
  # Technical prose style
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: yulin-aws-simulation
3
- description: Use the @kensio/yulin in-process AWS simulator well when testing AWS code, using it directly rather than building a harness around it, driving tests, local dev and production from one synthesized CDK template, deploying a whole cdk.out cloud assembly, intercepting SDK clients with SimSdk, controlling simulated time, matching service errors by name, and handling properties Yulin refuses to simulate. Use when writing or reviewing tests that touch AWS, when replacing aws-sdk-client-mock or hand-rolled AWS stubs, when a CDK stack needs testing, when test setup around Yulin is growing helper classes or wrapper functions, and when Yulin refuses a template property or an SDK command.
3
+ description: Use the @kensio/yulin in-process AWS simulator well when testing AWS code, using it directly rather than building a harness around it, driving tests, local dev and production from one synthesized CDK template, deploying a whole cdk.out cloud assembly, intercepting SDK clients with SimSdk, driving HTTP requests into the simulation with SimAwsHttp, controlling simulated time, matching service errors by name, and handling properties Yulin refuses to simulate. Use when writing or reviewing tests that touch AWS, when replacing aws-sdk-client-mock or hand-rolled AWS stubs, when a CDK stack needs testing, when a CloudFront Distribution, its DNS records or its certificate need testing, when test setup around Yulin is growing helper classes or wrapper functions, and when Yulin refuses a template property or an SDK command.
4
4
  license: Apache-2.0
5
5
  metadata:
6
- version: "1.15.0"
6
+ version: "1.16.0"
7
7
  ---
8
8
 
9
9
  # Testing with Yulin
@@ -213,6 +213,33 @@ scope has), so look on the other scope before concluding a service is missing. E
213
213
  plain `{ input: { ... } }` in place of a Command object. An assertion can therefore read a service
214
214
  back without adding an `@aws-sdk/client-*` package the production code has no use for.
215
215
 
216
+ ## Drive requests into the simulation
217
+
218
+ Reading state back covers the resources. `SimAwsHttp` from `@kensio/yulin/serve` covers the path
219
+ through them, by sending a request into the environment with nothing listening. It takes what the
220
+ global `fetch` takes and answers with a `Response`:
221
+
222
+ ```typescript
223
+ const http = new SimAwsHttp({ simAws });
224
+ const response = await http.fetch("https://www.example.test/docs/x?a=1", { redirect: "manual" });
225
+
226
+ // Then the apex redirect the CloudFront Function performs has been applied.
227
+ expect(response.status).toBe(301);
228
+ expect(response.headers.get("location")).toBe("https://example.test/docs/x?a=1");
229
+ ```
230
+
231
+ A hostname simulated Route 53 answers for is requested by its own name, with no port to add and no
232
+ `localUrl(...)` adapting (an `https` URL works with no certificate set up for it). That one request
233
+ resolves the hostname, finds the Distribution its alias records point at, and runs the deployed
234
+ CloudFront Function at viewer-request. The certificate, the Hosted Zone records, the Distribution's
235
+ aliases and the function are covered together. A template assertion over the same stack passes with
236
+ every Route 53 record missing.
237
+
238
+ Reach for `serveSimAws` when the request comes from outside the process, such as a browser, `curl`
239
+ or an SDK client pointed at a local endpoint. Both go through the same routing and service code, and
240
+ `SimAwsHttp` leaves parallel test files no port to collide over. See
241
+ [the serving docs](https://yulinsim.dev/serve/) for the API.
242
+
216
243
  ## Match service errors by name
217
244
 
218
245
  ```typescript