create-kumiko-app 0.414.0 → 0.416.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "source": "samples/apps/use-all-bundled APP_FEATURES (composeFeatures includeBundled + signup)",
3
- "featureCount": 94,
3
+ "featureCount": 96,
4
4
  "features": [
5
5
  {
6
6
  "name": "account-security",
@@ -1443,6 +1443,25 @@
1443
1443
  "secrets": [],
1444
1444
  "writeHandlers": []
1445
1445
  },
1446
+ {
1447
+ "name": "handbook-knowledge",
1448
+ "description": "Gives the AI agent the app's handbook as two read-only query tools: `list-pages` returns the catalog of task and screen pages with the questions each answers, `read-page` returns one page in the caller's language with a fallback to the default language and a fixed length cap. The pages come from a build-time JSON (`kumiko handbuch knowledge`), so no table, projection or search index is involved and the handbook text stays public content.",
1449
+ "toggleableDefault": null,
1450
+ "requires": [],
1451
+ "optionalRequires": [],
1452
+ "configReads": [],
1453
+ "exposesApis": [],
1454
+ "usesApis": [],
1455
+ "extensionsUsed": [],
1456
+ "configKeys": [],
1457
+ "secrets": [],
1458
+ "writeHandlers": [],
1459
+ "uiHints": {
1460
+ "displayLabel": "Handbook Knowledge",
1461
+ "category": "ai",
1462
+ "recommended": false
1463
+ }
1464
+ },
1446
1465
  {
1447
1466
  "name": "helpdesk",
1448
1467
  "description": "Helpdesk inbox: an anonymous browser client (GET /helpdesk/client.js) submits questions, contact requests, bug reports and wishes behind a honeypot, a minimum submit time and a single-use proof-of-work challenge; signed-in users file reports from the admin. Every request is stored platform-wide and every SystemAdmin is notified by mail, optionally also in a Telegram chat (option `telegram`, off by default); the notification names only the kind, the app and a link, never name, address, phone, subject or message, because mail and Telegram cannot be shredded. SystemAdmins reply by mail (Reply-To set, attachments, quoting the original) and mark requests done; a website sender gets a fixed acknowledgement, a signed-in reporter a copy and an in-app note. Personal data is crypto-shredding-ready and the EXT_USER_DATA hooks export and erase a user's requests.",
@@ -2658,6 +2677,49 @@
2658
2677
  "recommended": false
2659
2678
  }
2660
2679
  },
2680
+ {
2681
+ "name": "signature",
2682
+ "description": "Signature requests: a signed-in user asks several people to sign one PDF of the tenant. Each signer draws a signature on a display in person or through a link in the URL fragment (14 days, limited opens, revocable, single-use, one answer for every rejection). The last signature moves the request to all-signed; a job renders a signature page through the injected print function, appends it to the unchanged original and completes the request. Events completed, declined and expired report the outcome; signer name, email, image, IP and user agent are personal data.",
2683
+ "toggleableDefault": null,
2684
+ "adoptsBundledLists": true,
2685
+ "requires": [
2686
+ "files",
2687
+ "user-data-rights"
2688
+ ],
2689
+ "optionalRequires": [],
2690
+ "configReads": [],
2691
+ "exposesApis": [],
2692
+ "usesApis": [],
2693
+ "extensionsUsed": [
2694
+ {
2695
+ "extensionName": "userData",
2696
+ "entityName": "signatureSigner"
2697
+ }
2698
+ ],
2699
+ "configKeys": [],
2700
+ "secrets": [],
2701
+ "writeHandlers": [
2702
+ "signature:write:cancel",
2703
+ "signature:write:decline-by-link",
2704
+ "signature:write:expire",
2705
+ "signature:write:finish",
2706
+ "signature:write:issue-link",
2707
+ "signature:write:link-decline",
2708
+ "signature:write:link-open",
2709
+ "signature:write:link-sign",
2710
+ "signature:write:open-by-link",
2711
+ "signature:write:reconcile",
2712
+ "signature:write:request",
2713
+ "signature:write:revoke-link",
2714
+ "signature:write:sign-by-link",
2715
+ "signature:write:sign-in-person"
2716
+ ],
2717
+ "uiHints": {
2718
+ "displayLabel": "Signatures",
2719
+ "category": "data",
2720
+ "recommended": false
2721
+ }
2722
+ },
2661
2723
  {
2662
2724
  "name": "step-dispatcher",
2663
2725
  "description": "Internal system feature that drains deferred Tier-2 side-effects (currently `webhook.send` and `mail.send`) after their originating transaction commits. An `r.multiStreamProjection` on the `kumiko:system:step.dispatch-requested` system event enqueues one `step-dispatcher:job:deliver` BullMQ job per dispatch (Redis carries only the stream id and tenant, never the request payload). The job performs the actual HTTP or mail delivery and appends `kumiko:system:step.dispatched` or `kumiko:system:step.dispatch-failed` back onto the same stream, so the outcome is recorded in the event log without a separate status table. Transient failures (network error, timeout, 5xx, 408, 429, any mail adapter failure) are retried 3 times with exponential backoff; the outcome is recorded after the final attempt and the payload key is erased only then. A request that still has no outcome after 24 hours (job stalled or lost, or its final attempt could not record one) is closed by the daily `step-dispatcher:job:sweep-abandoned` cron (it pages through all such requests; requests that already have an outcome are not swept) with a generic `dispatch-failed` event and its payload key is erased. Permanent failures (invalid url, blocked host, other 4xx, unavailable auth secret) are recorded immediately. At most 2 deliveries per tenant run at once (`maxPerTenant` with `onLimit: \"defer\"`), so a slow receiver of one tenant does not delay other tenants. Requires a job runner (Redis) and a worker consuming the job's default `worker` lane; without a job runner the projection fails loudly. Mount this feature explicitly via `createStepDispatcherFeature()` in your app's feature list alongside any features that use `r.step.webhook.send` or `r.step.mail.send`. Requires the `secrets` feature (`createSecretsFeature()`) to be mounted — `webhook.send` auth resolves per-tenant through it, under `step-dispatcher:webhook-auth.<name>`. Every `webhook.send` request carries `Idempotency-Key: <dispatch stream id>`, stable across retries and redeliveries of the same dispatch request; an explicit `Idempotency-Key` in `headers` takes precedence.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-kumiko-app",
3
- "version": "0.414.0",
3
+ "version": "0.416.0",
4
4
  "description": "`bun create kumiko-app <name>` — scaffold a new Kumiko app with an interactive feature picker.",
5
5
  "license": "MIT",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -27,10 +27,10 @@
27
27
  }
28
28
  },
29
29
  "dependencies": {
30
- "@cosmicdrift/kumiko-dev-server": "0.414.0",
31
- "@cosmicdrift/kumiko-framework": "0.414.0",
32
- "@cosmicdrift/kumiko-server-runtime": "0.414.0",
33
- "@cosmicdrift/kumiko-testing": "0.414.0",
30
+ "@cosmicdrift/kumiko-dev-server": "0.416.0",
31
+ "@cosmicdrift/kumiko-framework": "0.416.0",
32
+ "@cosmicdrift/kumiko-server-runtime": "0.416.0",
33
+ "@cosmicdrift/kumiko-testing": "0.416.0",
34
34
  "@inquirer/core": "^10.3.2",
35
35
  "@inquirer/prompts": "^7.10.1"
36
36
  },