@intentic/extension-manifest 1.223.0 → 1.225.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.
Files changed (66) hide show
  1. package/README.md +16 -16
  2. package/dist/bundle.js +2 -2
  3. package/dist/bundle.js.map +1 -1
  4. package/dist/manifest.js +5 -5
  5. package/dist/manifest.js.map +1 -1
  6. package/dist/mark.js +3 -3
  7. package/dist/mark.js.map +1 -1
  8. package/dist/permissions.js +1 -1
  9. package/dist/permissions.js.map +1 -1
  10. package/dist/points/automation-templates.d.ts +1 -1
  11. package/dist/points/automation-templates.d.ts.map +1 -1
  12. package/dist/points/automation-templates.js +6 -6
  13. package/dist/points/automation-templates.js.map +1 -1
  14. package/dist/points/bin.d.ts +1 -1
  15. package/dist/points/bin.d.ts.map +1 -1
  16. package/dist/points/bin.js +1 -1
  17. package/dist/points/bin.js.map +1 -1
  18. package/dist/points/capabilities.d.ts +1 -1
  19. package/dist/points/capabilities.d.ts.map +1 -1
  20. package/dist/points/capabilities.js +13 -13
  21. package/dist/points/capabilities.js.map +1 -1
  22. package/dist/points/commands.js +1 -1
  23. package/dist/points/commands.js.map +1 -1
  24. package/dist/points/environment.d.ts +1 -1
  25. package/dist/points/environment.d.ts.map +1 -1
  26. package/dist/points/environment.js +2 -2
  27. package/dist/points/environment.js.map +1 -1
  28. package/dist/points/files.js +2 -2
  29. package/dist/points/files.js.map +1 -1
  30. package/dist/points/index.d.ts +7 -7
  31. package/dist/points/listener.d.ts +1 -1
  32. package/dist/points/listener.d.ts.map +1 -1
  33. package/dist/points/listener.js +3 -3
  34. package/dist/points/listener.js.map +1 -1
  35. package/dist/points/processes.d.ts +1 -1
  36. package/dist/points/processes.d.ts.map +1 -1
  37. package/dist/points/processes.js +1 -1
  38. package/dist/points/processes.js.map +1 -1
  39. package/dist/points/settings.js +1 -1
  40. package/dist/points/settings.js.map +1 -1
  41. package/dist/points/viewers.d.ts +1 -1
  42. package/dist/points/viewers.d.ts.map +1 -1
  43. package/dist/points/viewers.js +3 -3
  44. package/dist/points/viewers.js.map +1 -1
  45. package/intentic-extension.schema.json +73 -73
  46. package/package.json +3 -3
  47. package/src/bundle.ts +5 -5
  48. package/src/contribution-point.ts +5 -5
  49. package/src/json-schema.ts +6 -6
  50. package/src/manifest.ts +18 -18
  51. package/src/mark.ts +11 -11
  52. package/src/permissions.ts +2 -2
  53. package/src/points/agent.ts +1 -1
  54. package/src/points/automation-templates.ts +10 -10
  55. package/src/points/bin.ts +2 -2
  56. package/src/points/capabilities.ts +38 -38
  57. package/src/points/commands.ts +4 -4
  58. package/src/points/documents.ts +2 -2
  59. package/src/points/environment.ts +2 -2
  60. package/src/points/files.ts +9 -9
  61. package/src/points/index.ts +4 -4
  62. package/src/points/listener.ts +7 -7
  63. package/src/points/processes.ts +1 -1
  64. package/src/points/settings.ts +1 -1
  65. package/src/points/viewers.ts +8 -8
  66. package/src/powers-diff.ts +5 -5
@@ -17,24 +17,24 @@
17
17
  "version": {
18
18
  "type": "string",
19
19
  "minLength": 1,
20
- "description": "Your own semver — display and identity only. The installed code's identity is the pinned commit sha."
20
+ "description": "Your own semver, display and identity only. The installed code's identity is the pinned commit sha."
21
21
  },
22
22
  "category": {
23
- "description": "Which section of the Extensions tab this sits under — a grouping by what it is FOR, which cannot be derived from what it contributes. A section this app has never heard of lands in “Other” rather than failing to install.",
23
+ "description": "Which section of the Extensions tab this sits under: a grouping by what it is FOR, which cannot be derived from what it contributes. A section this app has never heard of lands in 'Other' rather than failing to install.",
24
24
  "type": "string",
25
25
  "minLength": 1
26
26
  },
27
27
  "art": {
28
- "description": "This extension's own mark, as a complete SVG document inline — the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
28
+ "description": "This extension's own mark, as a complete SVG document inline: the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
29
29
  "type": "string",
30
30
  "maxLength": 4096
31
31
  },
32
32
  "logo": {
33
- "description": "A simple-icons slug, fetched from a CDN — right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
33
+ "description": "A simple-icons slug, fetched from a CDN: right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
34
34
  "type": "string"
35
35
  },
36
36
  "icon": {
37
- "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request — what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
37
+ "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request: what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
38
38
  "type": "string"
39
39
  },
40
40
  "engines": {
@@ -62,18 +62,18 @@
62
62
  "minLength": 1
63
63
  },
64
64
  "permissions": {
65
- "description": "How far this extension may reach into the daemon, as \"<METHOD> <path-glob>\" entries where `*` matches one path segment — e.g. \"GET /panels\", \"POST /panels/*/start\". The install dialog shows these, the host refuses anything undeclared, and the usage ledger records which were actually earned.",
65
+ "description": "How far this extension may reach into the daemon, as \"<METHOD> <path-glob>\" entries where `*` matches one path segment: e.g. \"GET /panels\", \"POST /panels/*/start\". The install dialog shows these, the host refuses anything undeclared, and the usage ledger records which were actually earned.",
66
66
  "type": "object",
67
67
  "properties": {
68
68
  "sandbox": {
69
- "description": "Daemon routes your UI half may call. Your own backend namespace needs no entry — its backend is your own code.",
69
+ "description": "Daemon routes your UI half may call. Your own backend namespace needs no entry: its backend is your own code.",
70
70
  "type": "array",
71
71
  "items": {
72
72
  "type": "string"
73
73
  }
74
74
  },
75
75
  "daemon": {
76
- "description": "Daemon routes your SERVER half may call. Separate from `sandbox` because the two halves run as different principals — the UI as the owner's session, the backend as a minted per-extension token — so a grant to one must never quietly widen the other.",
76
+ "description": "Daemon routes your SERVER half may call. Separate from `sandbox` because the two halves run as different principals: the UI as the owner's session, the backend as a minted per-extension token, so a grant to one must never quietly widen the other.",
77
77
  "type": "array",
78
78
  "items": {
79
79
  "type": "string"
@@ -130,7 +130,7 @@
130
130
  "path": {
131
131
  "type": "string",
132
132
  "minLength": 1,
133
- "description": "Workspace-root-relative, forward-slash, matched by prefix — so one entry covers an exact file (`.intentic/config/automations.json`), a directory (`.intentic/config/drafts/`, with the trailing slash so it cannot match a sibling file) or a name family (`.intentic/environment.`). Not a glob."
133
+ "description": "Workspace-root-relative, forward-slash, matched by prefix, so one entry covers an exact file (`.intentic/config/automations.json`), a directory (`.intentic/config/drafts/`, with the trailing slash so it cannot match a sibling file) or a name family (`.intentic/environment.`). Not a glob."
134
134
  },
135
135
  "invalidates": {
136
136
  "minItems": 1,
@@ -139,7 +139,7 @@
139
139
  "type": "string",
140
140
  "minLength": 1
141
141
  },
142
- "description": "The query keys this path makes stale — the first element of your own api.sandbox.key(...) keys. Keep both this and the path as narrow as the view actually needs: a broad prefix costs every connected browser a refetch on every matching write."
142
+ "description": "The query keys this path makes stale, the first element of your own api.sandbox.key(...) keys. Keep both this and the path as narrow as the view actually needs: a broad prefix costs every connected browser a refetch on every matching write."
143
143
  }
144
144
  },
145
145
  "required": [
@@ -166,7 +166,7 @@
166
166
  "type": "string",
167
167
  "pattern": "^[a-z0-9]+$"
168
168
  },
169
- "description": "Bare file extensions, no dot — e.g. [\"docx\", \"xlsx\"]."
169
+ "description": "Bare file extensions, no dot: e.g. [\"docx\", \"xlsx\"]."
170
170
  },
171
171
  "fetch": {
172
172
  "type": "string",
@@ -175,7 +175,7 @@
175
175
  "blob",
176
176
  "url"
177
177
  ],
178
- "description": "How much of the file the host hands you. `text` for a format that is text (svg, a subtitle track). `blob` for one that must be parsed end to end before any of it shows (a .docx, a spreadsheet) — bounded by the daemon's raw-read cap. `url` for anything range-read rather than parsed (audio, video): your component gets a streaming URL to point an element at, never the bytes."
178
+ "description": "How much of the file the host hands you. `text` for a format that is text (svg, a subtitle track). `blob` for one that must be parsed end to end before any of it shows (a .docx, a spreadsheet), bounded by the daemon's raw-read cap. `url` for anything range-read rather than parsed (audio, video): your component gets a streaming URL to point an element at, never the bytes."
179
179
  }
180
180
  },
181
181
  "required": [
@@ -185,7 +185,7 @@
185
185
  ],
186
186
  "additionalProperties": false
187
187
  },
188
- "description": "File formats this extension can render. The host resolves an opened file to your viewer by its extension, fetches the content, and renders your component with it — you keep none of the fetch lifecycle and none of the daemon credentials."
188
+ "description": "File formats this extension can render. The host resolves an opened file to your viewer by its extension, fetches the content, and renders your component with it: you keep none of the fetch lifecycle and none of the daemon credentials."
189
189
  },
190
190
  "documents": {
191
191
  "type": "array",
@@ -234,7 +234,7 @@
234
234
  "pattern": "^\\S+$"
235
235
  },
236
236
  "when": {
237
- "description": "When the shortcut applies, as a condition over the shell's context keys — `tabSurface == 'chat'`, `!editableTarget`. Without one the chord is claimed everywhere, including inside a terminal where a bare key belongs to the program running in it. The command palette ignores this: a command is always runnable by name.",
237
+ "description": "When the shortcut applies, as a condition over the shell's context keys, `tabSurface == 'chat'`, `!editableTarget`. Without one the chord is claimed everywhere, including inside a terminal where a bare key belongs to the program running in it. The command palette ignores this: a command is always runnable by name.",
238
238
  "type": "string"
239
239
  }
240
240
  },
@@ -294,7 +294,7 @@
294
294
  }
295
295
  },
296
296
  "secret": {
297
- "description": "Mask the value in the UI and strip it from reads — a set secret round-trips as “still set”, never as its value.",
297
+ "description": "Mask the value in the UI and strip it from reads: a set secret round-trips as 'still set', never as its value.",
298
298
  "type": "boolean"
299
299
  },
300
300
  "env": {
@@ -349,7 +349,7 @@
349
349
  ],
350
350
  "additionalProperties": false
351
351
  },
352
- "description": "Long-lived background processes the daemon runs for this extension — a gateway holding a connection the daemon must not, a dev server. Managed the same way panel dev servers are, and startable and stoppable from the Extensions tab."
352
+ "description": "Long-lived background processes the daemon runs for this extension: a gateway holding a connection the daemon must not, a dev server. Managed the same way panel dev servers are, and startable and stoppable from the Extensions tab."
353
353
  },
354
354
  "agent": {
355
355
  "type": "object",
@@ -368,13 +368,13 @@
368
368
  "fragment": {
369
369
  "type": "string",
370
370
  "minLength": 1,
371
- "description": "Checkout-relative path to a file holding ONLY RUN and ENV instructions. FROM and privileged directives are rejected — those stay daemon-owned."
371
+ "description": "Checkout-relative path to a file holding ONLY RUN and ENV instructions. FROM and privileged directives are rejected: those stay daemon-owned."
372
372
  }
373
373
  },
374
374
  "required": [
375
375
  "fragment"
376
376
  ],
377
- "description": "A Dockerfile fragment baked into the sandbox image so your tools are actually installed at runtime — a whisper binary, a psql client. The owner approves the composed overlay and rebuilds out of band, so this does not take effect immediately.",
377
+ "description": "A Dockerfile fragment baked into the sandbox image so your tools are actually installed at runtime: a whisper binary, a psql client. The owner approves the composed overlay and rebuilds out of band, so this does not take effect immediately.",
378
378
  "additionalProperties": false
379
379
  },
380
380
  "capabilities": {
@@ -396,29 +396,29 @@
396
396
  "minLength": 1
397
397
  },
398
398
  "art": {
399
- "description": "This extension's own mark, as a complete SVG document inline — the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
399
+ "description": "This extension's own mark, as a complete SVG document inline: the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
400
400
  "type": "string",
401
401
  "maxLength": 4096
402
402
  },
403
403
  "logo": {
404
- "description": "A simple-icons slug, fetched from a CDN — right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
404
+ "description": "A simple-icons slug, fetched from a CDN: right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
405
405
  "type": "string"
406
406
  },
407
407
  "icon": {
408
- "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request — what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
408
+ "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request: what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
409
409
  "type": "string"
410
410
  },
411
411
  "description": {
412
412
  "type": "string",
413
413
  "minLength": 1,
414
- "description": "ONE LINE — aim for 60 characters or fewer. The grid clamps it at two lines in a narrow pane, so a paragraph here is a paragraph the reader gets truncated. Everything longer belongs in `hint`."
414
+ "description": "ONE LINE: aim for 60 characters or fewer. The grid clamps it at two lines in a narrow pane, so a paragraph here is a paragraph the reader gets truncated. Everything longer belongs in `hint`."
415
415
  },
416
416
  "category": {
417
417
  "type": "string",
418
418
  "minLength": 1
419
419
  },
420
420
  "hint": {
421
- "description": "The paragraph, shown under the add form and searched from the catalog — so the words that identify this card to someone hunting for it (\"webauthn\", \"socket mode\") belong here even when the tile cannot show them.",
421
+ "description": "The paragraph, shown under the add form and searched from the catalog, so the words that identify this card to someone hunting for it (\"webauthn\", \"socket mode\") belong here even when the tile cannot show them.",
422
422
  "type": "string"
423
423
  },
424
424
  "guide": {
@@ -489,11 +489,11 @@
489
489
  "type": "boolean"
490
490
  },
491
491
  "hint": {
492
- "description": "A line under this control, for what the label alone cannot say — a host requirement, when a value takes effect. The card's own `hint` speaks for the whole card; this one is bound to the field it qualifies.",
492
+ "description": "A line under this control, for what the label alone cannot say: a host requirement, when a value takes effect. The card's own `hint` speaks for the whole card; this one is bound to the field it qualifies.",
493
493
  "type": "string"
494
494
  },
495
495
  "rebuild": {
496
- "description": "This value only takes effect after the sandbox is rebuilt, because it rides the image overlay. Shown as a chip beside the label — two switches side by side, identical in every visible way, can otherwise cost five seconds or five minutes with no way to tell which.",
496
+ "description": "This value only takes effect after the sandbox is rebuilt, because it rides the image overlay. Shown as a chip beside the label: two switches side by side, identical in every visible way, can otherwise cost five seconds or five minutes with no way to tell which.",
497
497
  "type": "boolean"
498
498
  },
499
499
  "default": {
@@ -520,15 +520,15 @@
520
520
  }
521
521
  },
522
522
  "when": {
523
- "description": "Only show this field while a condition over the answers already given holds — `auth == 'key'`, `provider in ['ipsec', 'fortinet']`, `!advanced`. Supports `&&`, `||`, `!`, comparisons and `in`.",
523
+ "description": "Only show this field while a condition over the answers already given holds: `auth == 'key'`, `provider in ['ipsec', 'fortinet']`, `!advanced`. Supports `&&`, `||`, `!`, comparisons and `in`.",
524
524
  "type": "string"
525
525
  },
526
526
  "value": {
527
- "description": "A fixed value baked into the config rather than asked for — how a card pins its discriminator (platform=\"reddit\", provider=\"stripe\"). Renders as nothing.",
527
+ "description": "A fixed value baked into the config rather than asked for: how a card pins its discriminator (platform=\"reddit\", provider=\"stripe\"). Renders as nothing.",
528
528
  "type": "string"
529
529
  },
530
530
  "totp": {
531
- "description": "This field holds a TOTP seed — the base32 key or otpauth:// URI a service shows when enrolling an authenticator app. Declare it with `secret: true`. Unlike an ordinary secret it never enters the agent's environment: the daemon mints the six-digit codes on demand and only those cross.",
531
+ "description": "This field holds a TOTP seed, the base32 key or otpauth:// URI a service shows when enrolling an authenticator app. Declare it with `secret: true`. Unlike an ordinary secret it never enters the agent's environment: the daemon mints the six-digit codes on demand and only those cross.",
532
532
  "type": "boolean"
533
533
  }
534
534
  },
@@ -552,7 +552,7 @@
552
552
  "additionalProperties": {
553
553
  "type": "string"
554
554
  },
555
- "description": "The environment the agent's shell gets, as value templates over the fields — `${field}` substitutes, `${field:uri}` percent-encodes. Each name is suffixed per instance."
555
+ "description": "The environment the agent's shell gets, as value templates over the fields: `${field}` substitutes, `${field:uri}` percent-encodes. Each name is suffixed per instance."
556
556
  },
557
557
  "skill": {
558
558
  "type": "string",
@@ -590,29 +590,29 @@
590
590
  "minLength": 1
591
591
  },
592
592
  "art": {
593
- "description": "This extension's own mark, as a complete SVG document inline — the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
593
+ "description": "This extension's own mark, as a complete SVG document inline: the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
594
594
  "type": "string",
595
595
  "maxLength": 4096
596
596
  },
597
597
  "logo": {
598
- "description": "A simple-icons slug, fetched from a CDN — right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
598
+ "description": "A simple-icons slug, fetched from a CDN: right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
599
599
  "type": "string"
600
600
  },
601
601
  "icon": {
602
- "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request — what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
602
+ "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request: what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
603
603
  "type": "string"
604
604
  },
605
605
  "description": {
606
606
  "type": "string",
607
607
  "minLength": 1,
608
- "description": "ONE LINE — aim for 60 characters or fewer. The grid clamps it at two lines in a narrow pane, so a paragraph here is a paragraph the reader gets truncated. Everything longer belongs in `hint`."
608
+ "description": "ONE LINE: aim for 60 characters or fewer. The grid clamps it at two lines in a narrow pane, so a paragraph here is a paragraph the reader gets truncated. Everything longer belongs in `hint`."
609
609
  },
610
610
  "category": {
611
611
  "type": "string",
612
612
  "minLength": 1
613
613
  },
614
614
  "hint": {
615
- "description": "The paragraph, shown under the add form and searched from the catalog — so the words that identify this card to someone hunting for it (\"webauthn\", \"socket mode\") belong here even when the tile cannot show them.",
615
+ "description": "The paragraph, shown under the add form and searched from the catalog, so the words that identify this card to someone hunting for it (\"webauthn\", \"socket mode\") belong here even when the tile cannot show them.",
616
616
  "type": "string"
617
617
  },
618
618
  "guide": {
@@ -682,11 +682,11 @@
682
682
  "type": "boolean"
683
683
  },
684
684
  "hint": {
685
- "description": "A line under this control, for what the label alone cannot say — a host requirement, when a value takes effect. The card's own `hint` speaks for the whole card; this one is bound to the field it qualifies.",
685
+ "description": "A line under this control, for what the label alone cannot say: a host requirement, when a value takes effect. The card's own `hint` speaks for the whole card; this one is bound to the field it qualifies.",
686
686
  "type": "string"
687
687
  },
688
688
  "rebuild": {
689
- "description": "This value only takes effect after the sandbox is rebuilt, because it rides the image overlay. Shown as a chip beside the label — two switches side by side, identical in every visible way, can otherwise cost five seconds or five minutes with no way to tell which.",
689
+ "description": "This value only takes effect after the sandbox is rebuilt, because it rides the image overlay. Shown as a chip beside the label: two switches side by side, identical in every visible way, can otherwise cost five seconds or five minutes with no way to tell which.",
690
690
  "type": "boolean"
691
691
  },
692
692
  "default": {
@@ -713,15 +713,15 @@
713
713
  }
714
714
  },
715
715
  "when": {
716
- "description": "Only show this field while a condition over the answers already given holds — `auth == 'key'`, `provider in ['ipsec', 'fortinet']`, `!advanced`. Supports `&&`, `||`, `!`, comparisons and `in`.",
716
+ "description": "Only show this field while a condition over the answers already given holds: `auth == 'key'`, `provider in ['ipsec', 'fortinet']`, `!advanced`. Supports `&&`, `||`, `!`, comparisons and `in`.",
717
717
  "type": "string"
718
718
  },
719
719
  "value": {
720
- "description": "A fixed value baked into the config rather than asked for — how a card pins its discriminator (platform=\"reddit\", provider=\"stripe\"). Renders as nothing.",
720
+ "description": "A fixed value baked into the config rather than asked for: how a card pins its discriminator (platform=\"reddit\", provider=\"stripe\"). Renders as nothing.",
721
721
  "type": "string"
722
722
  },
723
723
  "totp": {
724
- "description": "This field holds a TOTP seed — the base32 key or otpauth:// URI a service shows when enrolling an authenticator app. Declare it with `secret: true`. Unlike an ordinary secret it never enters the agent's environment: the daemon mints the six-digit codes on demand and only those cross.",
724
+ "description": "This field holds a TOTP seed, the base32 key or otpauth:// URI a service shows when enrolling an authenticator app. Declare it with `secret: true`. Unlike an ordinary secret it never enters the agent's environment: the daemon mints the six-digit codes on demand and only those cross.",
725
725
  "type": "boolean"
726
726
  }
727
727
  },
@@ -737,19 +737,19 @@
737
737
  "const": "browser"
738
738
  },
739
739
  "loginUrl": {
740
- "description": "What the sign-in window opens; the profile it persists IS the credential. Optional so one card can be the generic one that asks for the URL on its form instead — but a card must either pin this or declare a field that supplies it, or the window opens on nothing.",
740
+ "description": "What the sign-in window opens; the profile it persists IS the credential. Optional so one card can be the generic one that asks for the URL on its form instead, but a card must either pin this or declare a field that supplies it, or the window opens on nothing.",
741
741
  "type": "string",
742
742
  "format": "uri"
743
743
  },
744
744
  "homeUrl": {
745
- "description": "Where that same profile opens once it HAS a session — the owner's own hands on the connected browser. Separate from loginUrl because for some platforms the login lives on another site entirely (YouTube signs in at accounts.google.com).",
745
+ "description": "Where that same profile opens once it HAS a session: the owner's own hands on the connected browser. Separate from loginUrl because for some platforms the login lives on another site entirely (YouTube signs in at accounts.google.com).",
746
746
  "type": "string",
747
747
  "format": "uri"
748
748
  },
749
749
  "skill": {
750
750
  "type": "string",
751
751
  "minLength": 1,
752
- "description": "Checkout-relative SKILL.md teaching the agent this site's actions — rendered once per site, all its connected accounts on one roster (`${accounts}`), the core tool note at `${tools}`."
752
+ "description": "Checkout-relative SKILL.md teaching the agent this site's actions: rendered once per site, all its connected accounts on one roster (`${accounts}`), the core tool note at `${tools}`."
753
753
  }
754
754
  },
755
755
  "required": [
@@ -776,29 +776,29 @@
776
776
  "minLength": 1
777
777
  },
778
778
  "art": {
779
- "description": "This extension's own mark, as a complete SVG document inline — the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
779
+ "description": "This extension's own mark, as a complete SVG document inline: the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
780
780
  "type": "string",
781
781
  "maxLength": 4096
782
782
  },
783
783
  "logo": {
784
- "description": "A simple-icons slug, fetched from a CDN — right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
784
+ "description": "A simple-icons slug, fetched from a CDN: right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
785
785
  "type": "string"
786
786
  },
787
787
  "icon": {
788
- "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request — what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
788
+ "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request: what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
789
789
  "type": "string"
790
790
  },
791
791
  "description": {
792
792
  "type": "string",
793
793
  "minLength": 1,
794
- "description": "ONE LINE — aim for 60 characters or fewer. The grid clamps it at two lines in a narrow pane, so a paragraph here is a paragraph the reader gets truncated. Everything longer belongs in `hint`."
794
+ "description": "ONE LINE: aim for 60 characters or fewer. The grid clamps it at two lines in a narrow pane, so a paragraph here is a paragraph the reader gets truncated. Everything longer belongs in `hint`."
795
795
  },
796
796
  "category": {
797
797
  "type": "string",
798
798
  "minLength": 1
799
799
  },
800
800
  "hint": {
801
- "description": "The paragraph, shown under the add form and searched from the catalog — so the words that identify this card to someone hunting for it (\"webauthn\", \"socket mode\") belong here even when the tile cannot show them.",
801
+ "description": "The paragraph, shown under the add form and searched from the catalog, so the words that identify this card to someone hunting for it (\"webauthn\", \"socket mode\") belong here even when the tile cannot show them.",
802
802
  "type": "string"
803
803
  },
804
804
  "guide": {
@@ -868,11 +868,11 @@
868
868
  "type": "boolean"
869
869
  },
870
870
  "hint": {
871
- "description": "A line under this control, for what the label alone cannot say — a host requirement, when a value takes effect. The card's own `hint` speaks for the whole card; this one is bound to the field it qualifies.",
871
+ "description": "A line under this control, for what the label alone cannot say: a host requirement, when a value takes effect. The card's own `hint` speaks for the whole card; this one is bound to the field it qualifies.",
872
872
  "type": "string"
873
873
  },
874
874
  "rebuild": {
875
- "description": "This value only takes effect after the sandbox is rebuilt, because it rides the image overlay. Shown as a chip beside the label — two switches side by side, identical in every visible way, can otherwise cost five seconds or five minutes with no way to tell which.",
875
+ "description": "This value only takes effect after the sandbox is rebuilt, because it rides the image overlay. Shown as a chip beside the label: two switches side by side, identical in every visible way, can otherwise cost five seconds or five minutes with no way to tell which.",
876
876
  "type": "boolean"
877
877
  },
878
878
  "default": {
@@ -899,15 +899,15 @@
899
899
  }
900
900
  },
901
901
  "when": {
902
- "description": "Only show this field while a condition over the answers already given holds — `auth == 'key'`, `provider in ['ipsec', 'fortinet']`, `!advanced`. Supports `&&`, `||`, `!`, comparisons and `in`.",
902
+ "description": "Only show this field while a condition over the answers already given holds: `auth == 'key'`, `provider in ['ipsec', 'fortinet']`, `!advanced`. Supports `&&`, `||`, `!`, comparisons and `in`.",
903
903
  "type": "string"
904
904
  },
905
905
  "value": {
906
- "description": "A fixed value baked into the config rather than asked for — how a card pins its discriminator (platform=\"reddit\", provider=\"stripe\"). Renders as nothing.",
906
+ "description": "A fixed value baked into the config rather than asked for: how a card pins its discriminator (platform=\"reddit\", provider=\"stripe\"). Renders as nothing.",
907
907
  "type": "string"
908
908
  },
909
909
  "totp": {
910
- "description": "This field holds a TOTP seed — the base32 key or otpauth:// URI a service shows when enrolling an authenticator app. Declare it with `secret: true`. Unlike an ordinary secret it never enters the agent's environment: the daemon mints the six-digit codes on demand and only those cross.",
910
+ "description": "This field holds a TOTP seed, the base32 key or otpauth:// URI a service shows when enrolling an authenticator app. Declare it with `secret: true`. Unlike an ordinary secret it never enters the agent's environment: the daemon mints the six-digit codes on demand and only those cross.",
911
911
  "type": "boolean"
912
912
  }
913
913
  },
@@ -952,29 +952,29 @@
952
952
  "minLength": 1
953
953
  },
954
954
  "art": {
955
- "description": "This extension's own mark, as a complete SVG document inline — the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
955
+ "description": "This extension's own mark, as a complete SVG document inline: the tier an author controls fully. Give it a viewBox and let it fill its own square edge to edge; it is drawn as the tile, not as a glyph on a plate. Kept as readable SVG text (not base64) so a registry reviewer can see what they are publishing, drawn inert so it cannot script the page, and capped at 4 KB. Anything that does not parse as SVG falls back to `logo`, then `icon`, then initials.",
956
956
  "type": "string",
957
957
  "maxLength": 4096
958
958
  },
959
959
  "logo": {
960
- "description": "A simple-icons slug, fetched from a CDN — right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
960
+ "description": "A simple-icons slug, fetched from a CDN: right for standing in for somebody else's product. Add a \"/<hex>\" suffix to force a colour for a mark that vanishes against the surface it lands on. Unreachable in an offline sandbox, so it falls back to `icon`, then to initials.",
961
961
  "type": "string"
962
962
  },
963
963
  "icon": {
964
- "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request — what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
964
+ "description": "A name from the host's own icon set, drawn when no simple-icons slug fits. It ships in the image, follows the theme and costs no request: what actually carries a first-party extension. An unknown name falls back to initials rather than to a hole.",
965
965
  "type": "string"
966
966
  },
967
967
  "description": {
968
968
  "type": "string",
969
969
  "minLength": 1,
970
- "description": "ONE LINE — aim for 60 characters or fewer. The grid clamps it at two lines in a narrow pane, so a paragraph here is a paragraph the reader gets truncated. Everything longer belongs in `hint`."
970
+ "description": "ONE LINE: aim for 60 characters or fewer. The grid clamps it at two lines in a narrow pane, so a paragraph here is a paragraph the reader gets truncated. Everything longer belongs in `hint`."
971
971
  },
972
972
  "category": {
973
973
  "type": "string",
974
974
  "minLength": 1
975
975
  },
976
976
  "hint": {
977
- "description": "The paragraph, shown under the add form and searched from the catalog — so the words that identify this card to someone hunting for it (\"webauthn\", \"socket mode\") belong here even when the tile cannot show them.",
977
+ "description": "The paragraph, shown under the add form and searched from the catalog, so the words that identify this card to someone hunting for it (\"webauthn\", \"socket mode\") belong here even when the tile cannot show them.",
978
978
  "type": "string"
979
979
  },
980
980
  "guide": {
@@ -1044,11 +1044,11 @@
1044
1044
  "type": "boolean"
1045
1045
  },
1046
1046
  "hint": {
1047
- "description": "A line under this control, for what the label alone cannot say — a host requirement, when a value takes effect. The card's own `hint` speaks for the whole card; this one is bound to the field it qualifies.",
1047
+ "description": "A line under this control, for what the label alone cannot say: a host requirement, when a value takes effect. The card's own `hint` speaks for the whole card; this one is bound to the field it qualifies.",
1048
1048
  "type": "string"
1049
1049
  },
1050
1050
  "rebuild": {
1051
- "description": "This value only takes effect after the sandbox is rebuilt, because it rides the image overlay. Shown as a chip beside the label — two switches side by side, identical in every visible way, can otherwise cost five seconds or five minutes with no way to tell which.",
1051
+ "description": "This value only takes effect after the sandbox is rebuilt, because it rides the image overlay. Shown as a chip beside the label: two switches side by side, identical in every visible way, can otherwise cost five seconds or five minutes with no way to tell which.",
1052
1052
  "type": "boolean"
1053
1053
  },
1054
1054
  "default": {
@@ -1075,15 +1075,15 @@
1075
1075
  }
1076
1076
  },
1077
1077
  "when": {
1078
- "description": "Only show this field while a condition over the answers already given holds — `auth == 'key'`, `provider in ['ipsec', 'fortinet']`, `!advanced`. Supports `&&`, `||`, `!`, comparisons and `in`.",
1078
+ "description": "Only show this field while a condition over the answers already given holds: `auth == 'key'`, `provider in ['ipsec', 'fortinet']`, `!advanced`. Supports `&&`, `||`, `!`, comparisons and `in`.",
1079
1079
  "type": "string"
1080
1080
  },
1081
1081
  "value": {
1082
- "description": "A fixed value baked into the config rather than asked for — how a card pins its discriminator (platform=\"reddit\", provider=\"stripe\"). Renders as nothing.",
1082
+ "description": "A fixed value baked into the config rather than asked for: how a card pins its discriminator (platform=\"reddit\", provider=\"stripe\"). Renders as nothing.",
1083
1083
  "type": "string"
1084
1084
  },
1085
1085
  "totp": {
1086
- "description": "This field holds a TOTP seed — the base32 key or otpauth:// URI a service shows when enrolling an authenticator app. Declare it with `secret: true`. Unlike an ordinary secret it never enters the agent's environment: the daemon mints the six-digit codes on demand and only those cross.",
1086
+ "description": "This field holds a TOTP seed, the base32 key or otpauth:// URI a service shows when enrolling an authenticator app. Declare it with `secret: true`. Unlike an ordinary secret it never enters the agent's environment: the daemon mints the six-digit codes on demand and only those cross.",
1087
1087
  "type": "boolean"
1088
1088
  }
1089
1089
  },
@@ -1109,7 +1109,7 @@
1109
1109
  }
1110
1110
  ]
1111
1111
  },
1112
- "description": "Capability cards this pack adds to the \"+\" grid — a connected CLI tool, a site the agent acts on as the owner through the shared browser, an operating system pack, or a preset over a core kind. The card and its form are data here; the machinery that acts on them is core, which is why a card may only name one of these four kinds."
1112
+ "description": "Capability cards this pack adds to the \"+\" grid: a connected CLI tool, a site the agent acts on as the owner through the shared browser, an operating system pack, or a preset over a core kind. The card and its form are data here; the machinery that acts on them is core, which is why a card may only name one of these four kinds."
1113
1113
  },
1114
1114
  "listener": {
1115
1115
  "type": "object",
@@ -1175,11 +1175,11 @@
1175
1175
  "label",
1176
1176
  "placeholder"
1177
1177
  ],
1178
- "description": "The primary narrowing filter — a channel, a room, a repo.",
1178
+ "description": "The primary narrowing filter, a channel, a room, a repo.",
1179
1179
  "additionalProperties": false
1180
1180
  },
1181
1181
  "branchField": {
1182
- "description": "A second narrowing axis, for a source whose events carry one — a pipeline's git ref, so a trigger can say \"the branch that ships\" rather than \"every agent's every failure\".",
1182
+ "description": "A second narrowing axis, for a source whose events carry one: a pipeline's git ref, so a trigger can say \"the branch that ships\" rather than \"every agent's every failure\".",
1183
1183
  "type": "object",
1184
1184
  "properties": {
1185
1185
  "label": {
@@ -1222,7 +1222,7 @@
1222
1222
  "events",
1223
1223
  "automation"
1224
1224
  ],
1225
- "description": "A realtime event source this extension supplies, so automations can trigger on it. One declaration feeds both halves: the daemon accepts these event types and serves this provider's control surface, and the automation editor derives its source picker, filters and starter prompt from it — so a newly installed listener is configurable without a matching app release.",
1225
+ "description": "A realtime event source this extension supplies, so automations can trigger on it. One declaration feeds both halves: the daemon accepts these event types and serves this provider's control surface, and the automation editor derives its source picker, filters and starter prompt from it, so a newly installed listener is configurable without a matching app release.",
1226
1226
  "additionalProperties": false
1227
1227
  },
1228
1228
  "automationTemplates": {
@@ -1233,7 +1233,7 @@
1233
1233
  "id": {
1234
1234
  "type": "string",
1235
1235
  "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]*$",
1236
- "description": "Prefills the automation name, and is what \"does one of these exist already\" is asked by — so spell it as an id, not as prose."
1236
+ "description": "Prefills the automation name, and is what \"does one of these exist already\" is asked by, so spell it as an id, not as prose."
1237
1237
  },
1238
1238
  "title": {
1239
1239
  "type": "string",
@@ -1250,7 +1250,7 @@
1250
1250
  "minLength": 1
1251
1251
  },
1252
1252
  "requires": {
1253
- "description": "Capability providers that make this template work — any one connected is enough (fixing CI rides github or gitlab). Omitted ⇒ nothing to connect, so it is always offered.",
1253
+ "description": "Capability providers that make this template work: any one connected is enough (fixing CI rides github or gitlab). Omitted ⇒ nothing to connect, so it is always offered.",
1254
1254
  "type": "array",
1255
1255
  "items": {
1256
1256
  "type": "string",
@@ -1293,7 +1293,7 @@
1293
1293
  "additionalProperties": false
1294
1294
  },
1295
1295
  "guard": {
1296
- "description": "A condition that must hold before the turn runs — what makes a template safe to leave switched on.",
1296
+ "description": "A condition that must hold before the turn runs: what makes a template safe to leave switched on.",
1297
1297
  "type": "string",
1298
1298
  "minLength": 1
1299
1299
  },
@@ -1322,7 +1322,7 @@
1322
1322
  "minLength": 1
1323
1323
  },
1324
1324
  "offer": {
1325
- "description": "Absent ⇒ it waits in the gallery, where you go once you know what you want. `create` puts a card on the page that makes it, switched off, in one click. `configure` puts one there that opens the dialog prefilled, for a template that cannot work unconfigured. Both are for what a user would never think to go looking for — mark everything as offered and you have rebuilt the gallery with extra steps.",
1325
+ "description": "Absent ⇒ it waits in the gallery, where you go once you know what you want. `create` puts a card on the page that makes it, switched off, in one click. `configure` puts one there that opens the dialog prefilled, for a template that cannot work unconfigured. Both are for what a user would never think to go looking for: mark everything as offered and you have rebuilt the gallery with extra steps.",
1326
1326
  "type": "string",
1327
1327
  "enum": [
1328
1328
  "create",
@@ -1330,7 +1330,7 @@
1330
1330
  ]
1331
1331
  },
1332
1332
  "chore": {
1333
- "description": "Whether what this makes watches THIS codebase rather than the outside world. Declared rather than read off the trigger — a nightly dependency sweep and a nightly Stripe poll are both schedules.",
1333
+ "description": "Whether what this makes watches THIS codebase rather than the outside world. Declared rather than read off the trigger: a nightly dependency sweep and a nightly Stripe poll are both schedules.",
1334
1334
  "type": "boolean"
1335
1335
  }
1336
1336
  },
@@ -1342,12 +1342,12 @@
1342
1342
  ],
1343
1343
  "additionalProperties": false
1344
1344
  },
1345
- "description": "Starting points this pack offers in the automation composer — a trigger, a prompt written for that trigger's payload, and whatever guard makes it safe to leave on. Declared by whoever knows the service rather than by the composer, so they appear when your pack is installed and disappear with it. Pure prefill: creating one makes an ordinary automation."
1345
+ "description": "Starting points this pack offers in the automation composer, a trigger, a prompt written for that trigger's payload, and whatever guard makes it safe to leave on. Declared by whoever knows the service rather than by the composer, so they appear when your pack is installed and disappear with it. Pure prefill: creating one makes an ordinary automation."
1346
1346
  },
1347
1347
  "bin": {
1348
1348
  "type": "string",
1349
1349
  "minLength": 1,
1350
- "description": "A checkout-relative directory of executables the daemon puts on the agent's PATH every turn — how you ship the agent a command-line tool. The files are the approved code themselves: they ride the pinned checkout, and the daemon only adds the directory to PATH."
1350
+ "description": "A checkout-relative directory of executables the daemon puts on the agent's PATH every turn, how you ship the agent a command-line tool. The files are the approved code themselves: they ride the pinned checkout, and the daemon only adds the directory to PATH."
1351
1351
  }
1352
1352
  },
1353
1353
  "additionalProperties": false
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@intentic/extension-manifest",
3
- "version": "1.223.0",
4
- "description": "What an intentic extension DECLARES — the intentic-extension.json schema and the sandbox-route allowlist rule",
3
+ "version": "1.225.0",
4
+ "description": "What an intentic extension DECLARES, the intentic-extension.json schema and the sandbox-route allowlist rule",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "repository": {
@@ -34,7 +34,7 @@
34
34
  "dependencies": {
35
35
  "tslib": "2.8.1",
36
36
  "zod": "4.4.3",
37
- "@intentic/base": "1.223.0"
37
+ "@intentic/base": "1.225.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "24.13.2",