@plurnk/plurnk-meta 2.1.1 → 2.1.3

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 (47) hide show
  1. package/CORPUS.md +6 -6
  2. package/DIVERGENCES.md +11 -11
  3. package/README.md +3 -3
  4. package/SPEC.md +36 -227
  5. package/dist/AgentPlugin.d.ts +48 -2
  6. package/dist/AgentPlugin.d.ts.map +1 -1
  7. package/dist/AgentPlugin.js +139 -2
  8. package/dist/AgentPlugin.js.map +1 -1
  9. package/dist/ConfigurationError.d.ts +1 -0
  10. package/dist/ConfigurationError.d.ts.map +1 -1
  11. package/dist/ConfigurationError.js +5 -0
  12. package/dist/ConfigurationError.js.map +1 -1
  13. package/dist/ErrorDetail.js +1 -1
  14. package/dist/ErrorDetail.js.map +1 -1
  15. package/dist/Knob.d.ts.map +1 -1
  16. package/dist/Knob.js +5 -4
  17. package/dist/Knob.js.map +1 -1
  18. package/dist/ResourceEnvironment.js +1 -1
  19. package/dist/ResourceEnvironment.js.map +1 -1
  20. package/dist/index.d.ts +28 -5
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +50 -11
  23. package/dist/index.js.map +1 -1
  24. package/dist/observe.js.map +1 -1
  25. package/dist/outbound-http.d.ts +3 -0
  26. package/dist/outbound-http.d.ts.map +1 -0
  27. package/dist/outbound-http.js +43 -0
  28. package/dist/outbound-http.js.map +1 -0
  29. package/docs/delegation.md +25 -23
  30. package/docs/pattern.md +2 -14
  31. package/docs/session.md +79 -0
  32. package/package.json +3 -3
  33. package/skills/plurnk/SKILL.md +6 -6
  34. package/skills/plurnk/references/extensibility.md +9 -13
  35. package/dist/AgentPluginFiles.d.ts +0 -10
  36. package/dist/AgentPluginFiles.d.ts.map +0 -1
  37. package/dist/AgentPluginFiles.js +0 -68
  38. package/dist/AgentPluginFiles.js.map +0 -1
  39. package/dist/AgentPluginFormat.d.ts +0 -10
  40. package/dist/AgentPluginFormat.d.ts.map +0 -1
  41. package/dist/AgentPluginFormat.js +0 -10
  42. package/dist/AgentPluginFormat.js.map +0 -1
  43. package/dist/AgentPluginManifest.d.ts +0 -32
  44. package/dist/AgentPluginManifest.d.ts.map +0 -1
  45. package/dist/AgentPluginManifest.js +0 -52
  46. package/dist/AgentPluginManifest.js.map +0 -1
  47. package/docs/worker.md +0 -80
package/CORPUS.md CHANGED
@@ -10,11 +10,11 @@ Authored defaults published by `@plurnk/plurnk-meta` and consumed by
10
10
  | ------------------------------- | ---------------------------------------------------------------------------- |
11
11
  | `POLICY.md` | Read before the first-run seed of the user-owned XDG config `AGENTS.md`. |
12
12
  | `recap.md` | Read for an optional Recap rendered last when its content is nonempty. |
13
- | `docs/worker.md` | Read when registered built-in pull docs are materialized. |
14
- | `skills/plurnk/SKILL.md` | Standard skill entry; Core composes its package-owned and generated resources. |
13
+ | `docs/*.md` | Built-in reference pages (`env.md`, `members.md`, `ops.md`, `reasoning.md`, `session.md`, `workspace.md`) read when registered pull docs are materialized. |
14
+ | `skills/plurnk/**` | Standard skill entry (`SKILL.md`) and reference chapters (`references/configuration.md`, `references/extensibility.md`); Core composes its package-owned and generated resources (`copy-move.md`, `models.md`, `.env.defaults`). |
15
15
 
16
16
  Core materializes eligible scheme and runtime pull docs at
17
- `worker:///_plurnk/plurnk/<name>.md` and exposes them through turn-0 FIND surveys. Merely
17
+ `plurnk:///<name>.md` or `<scheme>:///<name>.md` and exposes them through turn-0 FIND surveys. Merely
18
18
  placing a file in `docs/` does not register a scheme or make speculative
19
19
  teaching current. Every listed source is a required package member; a missing
20
20
  or failed read surfaces at the admission boundary rather than silently reducing
@@ -23,7 +23,7 @@ one.
23
23
 
24
24
  Plurnk's own reference is catalogued at `skill://plurnk/SKILL.md` alongside
25
25
  installed skills. Chapters and the complete generated defaults catalog are
26
- ordinary pull resources, not additional startup packet sections ({§plurnk-skill}).
26
+ ordinary pull resources, not additional startup packet sections ({§tools-resource-materialization}).
27
27
 
28
28
  ## The teaching split
29
29
 
@@ -46,7 +46,7 @@ monorepo forge.
46
46
  A recovery warning belongs at the state that makes it relevant, not in every packet.
47
47
  - Use concrete, executable examples. Distribute them across useful operations
48
48
  rather than accidentally teaching one pattern as the only workflow.
49
- - Show temporal behavior with legal turns under {§op-execution-order} and
49
+ - Show temporal behavior with legal turns under {§op-methods-op-dispatch} and
50
50
  {§send}; describe the contract, not a model's historical workaround.
51
51
  - Evaluate packet bytes, reasoning, operation results, and self-audit evidence
52
52
  together. Distinguish a teaching gap from a runtime defect before prescribing
@@ -56,5 +56,5 @@ monorepo forge.
56
56
  policy can tune different workloads without broadening the default teaching.
57
57
 
58
58
  Probe history and unresolved experiments belong in forge issues, not current
59
- doctrine. {§teaching-corpus} owns source membership; {§recap} owns the optional
59
+ doctrine. {§teaching-corpus} owns source membership; {§packet-inject} owns the optional
60
60
  footer. Neither creates a second admission rule or release gate.
package/DIVERGENCES.md CHANGED
@@ -18,7 +18,7 @@ Interoperability:
18
18
 
19
19
  - PLURNK hosts current MCP servers through `@plurnk/plurnk-mcp`, exposing
20
20
  their tools and resources through the ordinary operation language.
21
- - Clients use AG-UI.
21
+ - Clients use ACP.
22
22
  - Provider adapters use established model APIs.
23
23
 
24
24
  This difference is justified only if whole-product evaluations demonstrate an
@@ -26,19 +26,19 @@ advantage over conventional tool calling.
26
26
 
27
27
  ## Internal resource addressing
28
28
 
29
- Agent-visible state uses URI schemes such as `worker://` and
30
- `log://`. The URI authority identifies the relevant worker namespace where the
31
- scheme supports one.
29
+ Agent-visible state uses URI schemes such as `workspace:///`, `session://`,
30
+ `ops://`, `reasoning://`, `mcp:///`, `skill://`, and `plurnk:///`. The URI
31
+ authority identifies the relevant session namespace where the scheme supports one.
32
32
 
33
- This provides one address form for project content, worker state, execution
33
+ This provides one address form for project content, session state, execution
34
34
  results, and external resources. The internal representation does not alter
35
- MCP, AG-UI, or provider wire protocols.
35
+ MCP, ACP, or provider wire protocols.
36
36
 
37
- ## AG-UI management extensions
37
+ ## ACP management extensions
38
38
 
39
- AG-UI defines agent Runs but not all workspace-management operations PLURNK
40
- requires. Management actions therefore use AG-UI's extension fields and custom
41
- events on the same authenticated endpoint.
39
+ ACP v2 defines JSON-RPC 2.0 sessions, notifications, and client-bound gates, and
40
+ PLURNK management actions use `_plurnk/action` and `_meta.plurnk` extension fields
41
+ on the same authenticated endpoint.
42
42
 
43
- These extensions must remain optional to generic AG-UI consumers. If AG-UI
43
+ These extensions must remain optional to generic ACP consumers. If ACP
44
44
  standardizes equivalent management operations, PLURNK should adopt them.
package/README.md CHANGED
@@ -4,9 +4,9 @@ What plurnk's packages share that no single package owns: extension discovery an
4
4
 
5
5
  **Membership primitives** (`import Meta from "@plurnk/plurnk-meta"`): shared kind identity, trust, attribution, enumeration, and root resolution for each kind's scanner. [SPEC.md](./SPEC.md) owns the complete contract ({§extension-discovery}).
6
6
 
7
- - `Meta.declaresKind(manifest, kind)` — accepts one exact string kind identity ({§extension-kind}).
7
+ - `Meta.declaresKind(manifest, kind)` — accepts one exact string kind identity ({§extension-discovery}).
8
8
  - `Meta.isTrusted(packageName, env?)` — the `PLURNK_EXTENSIONS_TRUSTED_ONLY` gate: `""`/`"0"` off; any value on, `@plurnk/*` always trusted plus a comma-separated allowlist. An unset key is answered by this package's own panel, which ships the gate on.
9
- - `Meta.normalizeAttribution(raw, packageName)` — normalize an always-on package declaration, including the reserved `@plurnk/` namespace rule ({§extension-attribution}).
9
+ - `Meta.normalizeAttribution(raw, packageName)` — normalize an always-on package declaration, including the reserved `@plurnk/` namespace rule ({§extension-discovery}).
10
10
  - `Meta.runtimeAttribution(source, context, packageName)` — pull and normalize an extension's optional synchronous `attributions` function for one provider emission attempt.
11
11
  - `Meta.composeAttributions(...lists)` — flatten, deduplicate, and sort opaque tag lists.
12
12
  - `Meta.packageDirs(nodeModulesDir)` — scope-agnostic, symlink-aware enumeration across Node's ancestor resolution chain as `{ dir, name }` candidates; the nearest package name wins. Ordering and filtering are the caller's policy.
@@ -23,4 +23,4 @@ validation is exported from `@plurnk/plurnk-meta/agent-plugin`; the portable com
23
23
  `@plurnk/plurnk-agent-plugins`. Extension imports use the same operator trust gate.
24
24
 
25
25
  An admitted extension package may declare always-on `plurnk.attribution` tags and its loaded object
26
- may return per-attempt tags from `attributions(context)` ({§extension-attribution}). MIT.
26
+ may return per-attempt tags from `attributions(context)` ({§extension-discovery}). MIT.
package/SPEC.md CHANGED
@@ -1,243 +1,52 @@
1
1
  # plurnk-meta — Specification
2
2
 
3
- Contract for facts shared across the open plurnk packages. Each kind's
4
- framework owns its kind-specific declarations and runtime interfaces; this
5
- package owns the installed-membership primitives they share and the published
6
- teaching sources listed below.
3
+ Contract for facts shared across the open plurnk packages: published teaching sources, installed extension discovery, environment readers, redaction-first spans, and ambient HTTP transport.
7
4
 
8
- ## §teaching-corpus Published teaching sources
5
+ ## §teaching-corpus 1. Published Teaching Sources and Skill Boundary
9
6
 
10
- The package owns the authored defaults and exact membership below. Consumers
11
- own admission, runtime projection, and model-facing placement; copying these
12
- sources into a consuming package would create a second teaching owner.
7
+ The package owns the authored defaults and exact membership below. Consumers own admission, runtime projection, and model-facing placement; every teaching source and `docs/*.md` obeys `TEACHING.md` (mechanism over advice, one owner per claim, knobs by name, shapes over purposes, no contract tags on a page).
13
8
 
14
- | Source | Membership | Meta-owned content | Core read boundary |
15
- | ------------------------------- | ---------- | -------------------------------------------------- | ------------------------------------------------------- |
16
- | `POLICY.md` | Required | First-run default operating policy | Policy bootstrap {§policy-sections} |
17
- | `recap.md` | Required | Optional default operational Recap | Per-packet user-slot footer {§recap} |
18
- | `docs/worker.md` | Required | Deep reference prose for the reserved worker scheme | Pull-doc materialization {§schemes-directory} |
19
- | `docs/delegation.md` | Required | Worker delegation, lifecycle, and messaging | Pull-doc materialization with the worker scheme |
20
- | `docs/pattern.md` | Required | Operation-neutral pattern selection and literal source editing | Pull-doc materialization independent of schemes |
21
- | `skills/plurnk/SKILL.md` | Required | Standard Plurnk skill entry and chapter directory | Service-provided skill {§plurnk-skill} |
22
- | `skills/plurnk/references/extensibility.md` | Required | How integrations and extensions reach the model, and each kind's contract | Skill chapter {§plurnk-skill} |
9
+ | Source | Membership | Meta-owned content | Core read boundary |
10
+ | --- | --- | --- | --- |
11
+ | `POLICY.md` | Required | First-run default operating policy | Policy bootstrap {§packet-inject} |
12
+ | `recap.md` | Required | Optional default operational Recap (empty contributes no rendered section) | Per-packet user-slot footer {§packet-inject} |
13
+ | `docs/session.md` | Required | Deep reference prose for the reserved session scheme | Pull-doc materialization {§tools-resource-materialization} |
14
+ | `docs/delegation.md` | Required | Session delegation, lifecycle, and messaging | Pull-doc materialization with the session scheme |
15
+ | `docs/pattern.md` | Required | Operation-neutral pattern selection and literal source editing | Pull-doc materialization independent of schemes |
16
+ | `skills/plurnk/SKILL.md` | Required | Standard Plurnk skill entry and chapter directory | Service-provided skill {§tools-resource-materialization} |
17
+ | `skills/plurnk/references/extensibility.md` | Required | How integrations and extensions reach the model, and each kind's contract | Skill chapter {§tools-resource-materialization} |
23
18
 
24
- Every teaching source, and every package's `docs/*.md`, is written to
25
- `TEACHING.md`, the style rule for model-facing prose: mechanism over advice,
26
- one owner per claim, knobs by name, shapes over purposes, one home per
27
- mechanism, no contract tags on a page.
19
+ - **Exact membership**: Each source is read only at its consuming boundary; missing required sources or read errors fail that boundary with the original cause. Consumers resolve exported membership without scanning `docs/` or inferring capabilities from filenames.
20
+ - **Scheme-bound vs language docs**: Exported documents declare their source and optional owning scheme. Plugin `documentation` is manifest-owned and serves as fallback only when meta owns no document of that name. Document exclusions apply to the document and its owning scheme.
21
+ - **Skill composition boundary**: Meta authors `skills/plurnk/SKILL.md`; Core composes its resource tree from package-owned references and generated resources ({§tools-resource-materialization}) and exposes it through the `skills` Functionality family ({§skills-module}) without copying skills into universal roots or invoking an installer.
28
22
 
29
- Required is a package-membership statement, not unconditional packet
30
- projection. Each source is read only at its consuming boundary; absence or an
31
- unrelated read failure fails that boundary with the original cause. An empty
32
- `recap.md` intentionally contributes no rendered packet section while preserving
33
- its one authored source for later use. Consumers resolve the exported membership
34
- exactly: they do not scan `docs/`, infer new members from filenames, or treat a
35
- missing required source as empty teaching.
23
+ ## §extension-discovery 2. Installed Extension Discovery and Kinds
36
24
 
37
- A file in `docs/` does not declare a capability. Each exported document declares
38
- its source and an optional owning scheme. Scheme-bound references follow that
39
- scheme's visibility and capability admission; language references are independent
40
- of scheme registration. A basename is a document identity, not an invented scheme.
41
- Plugin documentation is owned by its manifest: an absent `documentation`
42
- contributes no pull doc; a present field is the fallback when meta owns no
43
- document of that name. Document exclusions apply to the document and its owning
44
- scheme, when present.
25
+ Enumeration (`Meta.packageDirs`) is scope-agnostic and symlink-aware across Node's ancestor resolution chain; the nearest package with a given name wins.
45
26
 
46
- ## §skills-installation-boundary Skill composition and installation
27
+ | Surface | Contract |
28
+ | --- | --- |
29
+ | Layer ownership | `plurnk-meta` owns Node package enumeration, exact `kind` identity, `Meta.isTrusted`, and attribution normalization. Each kind's framework owns kind-field validation, deterministic ordering/collisions, trust enforcement before import, and code loading. The composed host arbitrates cross-kind collisions and presents skipped-package evidence. |
30
+ | `plurnk.kind` values | `"exec"` (`runtimes[]`), `"mimetype"` (`handlers[]`), `"provider"` (singular `name`), `"scheme"` (`schemes[]` or singular `name` shorthand), `"http-materializer"` (`materializers[]`, {§http-lifecycle}), `"module"` (singular `module` export subpath, {§module-lifecycle}). |
31
+ | Manifest read (`Meta.readManifest(dir, kind?)`) | Reads `package.json#plurnk` (`packageName` = npm `name`) or Agent Plugin `plugin.json#extensions.ai.plurnk` (validated per {§agent-plugins-roots}; `packageName` = npm `name` when packaged for Node, else plugin `name`; files under `ai.plurnk/` resolve inside the plugin root via `Meta.moduleFile(manifest, relative)`). Declaring both manifests or an invalid `plugin.json` throws; `module` loads from npm or user plugin roots, never project roots ({§module-lifecycle}). Returns `null` for missing/malformed ordinary manifests, non-objects, absent declarations, or other kinds; propagates `AbortSignal` aborts. |
32
+ | Attribution (`plurnk.attribution` / `attributions(context)`) | Static `plurnk.attribution` (`string \| string[] \| null`) and optional synchronous runtime `attributions({ workspaceId, sessionId, primarySessionId, loop, turn, attempt })` normalize via `Meta.normalizeAttribution` / `Meta.runtimeAttribution` into readonly ordered lists (`packageAttributions`). Tags starting with `@plurnk/` are reserved to `@plurnk/*` packages; malformed declarations or thrown functions fail at the package boundary. The host flattens, deduplicates, and sorts tags as an opaque folksonomy. |
33
+ | Trust boundary (`Meta.isTrusted(packageName, env)`) | Enforced after reading the inert manifest and before importing or validating attribution. Empty or `"0"` `PLURNK_EXTENSIONS_TRUSTED_ONLY` trusts all installed packages; any other value trusts `@plurnk/*` plus the comma-separated allowlist in that value; an unset key falls back to this package's `.env.defaults` ({§operator-config-precedence}). Untrusted packages are preserved as skipped evidence without crashing discovery. |
47
34
 
48
- Meta authors the standard Plurnk `SKILL.md`; Core composes its resource tree
49
- from package-owned references and generated resources ({§plurnk-skill}). Skill
50
- discovery and enablement use the same `skills` Functionality family as installed
51
- skills ({§skills-functionality}). Neither package copies skills into universal roots
52
- or invokes an installer merely to expose the service's own reference material.
35
+ ## §env-knob 3. Environment Knobs, Resource Projection, and Error Detail
53
36
 
54
- ## §extension-discovery Installed extension discovery
37
+ `Knob` reads a declared key by name from the system environment or an explicitly supplied authoritative environment (never falling through to `process.env` or mutating either environment, and accepting no code fallback).
55
38
 
56
- ```mermaid
57
- flowchart LR
58
- graph[Installed Node dependency graph] --> enumerate[Meta.packageDirs]
59
- enumerate --> scanner[Kind-owned scanner]
60
- manifest[package.json plurnk manifest] --> scanner
61
- policy[Meta.isTrusted] --> gate{Trusted?}
62
- scanner --> gate
63
- gate -->|yes| attribution[Meta.normalizeAttribution]
64
- attribution --> framework[Framework-owned validation, loading, and registry]
65
- gate -->|no| skipped[Skipped-package evidence]
66
- framework --> host[Composed host]
67
- skipped --> host
68
- ```
39
+ | Surface | Contract |
40
+ | --- | --- |
41
+ | `Knob` readers | `text`, `list`, `flag` (`0` or `1`), `choice` (vocabulary member), `percent` (`80%` $\to$ `0.8`), `integer(name, floor)` (safe integer $\ge$ floor; floor bounds operator input and is never a fallback), `family(prefix)` (every `<prefix><alias>` with non-empty value in alias order; empty value turns member off). Unset keys are internal errors (broken floor); invalid operator values raise `ConfigurationError` naming `key` ({§configuration-repair-path}). |
42
+ | `ConfigurationError` identity | Available at `@plurnk/plurnk-meta/configuration-error`. `instanceof ConfigurationError` recognizes any `Error` named `ConfigurationError` with a string `key` across duplicate package copies. |
43
+ | `ResourceEnvironment` | Reads `PLURNK_<FAMILY>_<alias>=<definition>` (`_` decodes to `-`; validated against family grammar or `[a-z][a-z0-9-]*`, preserving case and Unicode without folding into uppercase controls), `PLURNK_<FAMILY>_ENABLED=0\|1`, `PLURNK_<FAMILY>_<alias>_ENABLED=0\|1`, and declared family controls. Empty/whitespace-only definitions are invalid even when disabled; `<alias>_ENABLED=0` suppresses activation without hiding the definition. |
44
+ | `ErrorDetail(knob)` | Binds `preview(value)` and `limit(environment?)` to a package's `*_ERROR_DETAIL_LIMIT` knob via `Knob`: truncates messages to at most that many characters with `...`, crashing by knob name if unset or invalid. |
69
45
 
70
- | Layer | Owns | Does not own |
71
- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
72
- | `plurnk-meta` | Node package enumeration, exact kind identity, the one trust predicate, and package-attribution normalization. | Kind fields, capability collisions, extension imports, or presentation. |
73
- | Kind framework | Kind-field validation, deterministic ordering/collisions, trust enforcement before any extension import, and trusted code loading. | A second trust or attribution policy, or cross-kind composition. |
74
- | Composed host | Cross-kind arbitration and presentation of skipped-package evidence. | Re-parsing manifests or importing a declined package. |
46
+ ## §observed-span 4. Redaction-First Spans
75
47
 
76
- The installed dependency graph is the compatibility boundary. Enumeration is
77
- scope-agnostic and symlink-aware across Node's ancestor resolution chain; the
78
- nearest package with a given package name wins. Installing a package makes a
79
- valid declared extension discoverable. Environment values configure or bound
80
- installed extensions; they never manufacture package existence.
48
+ `observed(tracer, name, attributes, fn, options?)` and its synchronous twin wrap one span around `fn` on the caller's tracer: attributes admit strings (capped at 300 characters), numbers, and booleans and drop everything else; a thrown error marks the span `ERROR` and records only `error.type` (the error's class name, never its message).
81
49
 
82
- ### §extension-kind One package, one kind
50
+ ## §ambient-http-transport 5. Ambient Proxy and CA Transport
83
51
 
84
- The native declaration's `kind` is one exact string, in either manifest location
85
- at {§extension-manifest-read}. A package may declare multiple named capabilities inside its one
86
- kind-owned collection.
87
-
88
- | `plurnk.kind` | Kind-owned names |
89
- | ----------------- | -------------------------------------------------------- |
90
- | `"exec"` | `runtimes[]` |
91
- | `"mimetype"` | `handlers[]` |
92
- | `"provider"` | singular `name` |
93
- | `"scheme"` | `schemes[]`; singular `name` is the one-scheme shorthand |
94
- | `"http-materializer"` | `materializers[]` ({§http-materializer-extensions}) |
95
- | `"module"` | singular `module` export subpath ({§module-discovery}) |
96
-
97
- Coordinated capabilities spanning kinds use explicit daemon-module
98
- composition ({§module-lifecycle}).
99
-
100
- ### §env-knob One environment reader
101
-
102
- `Knob` reads a declared key by name from the system environment, or an explicitly
103
- supplied assembled environment: `text`, `list`, `flag` (exactly `0` or `1`), `choice` (one of a
104
- vocabulary), `percent` (`80%` is 0.8) and `integer(name, floor)` (a safe
105
- integer of at least the floor, which bounds what the operator may say and is
106
- never a value used in the operator's place). `family(prefix)` reads every `<prefix><alias>`
107
- key with a non-empty value, in alias order; an empty value is a member turned off. An unset key is a broken floor
108
- and remains an internal error. Invalid operator values raise a
109
- `ConfigurationError` naming the key; the owning capability contains that
110
- diagnostic without inventing a value ({§configuration-repair-path}).
111
- The same class is available from `@plurnk/plurnk-meta/configuration-error`
112
- without loading discovery or observability machinery.
113
- No reader accepts a fallback: a signature that could carry one is a second
114
- home for a choice. A supplied environment is authoritative: missing keys do not
115
- fall through to the process, and reading never mutates either environment.
116
- Every package reads its knobs through it, so validation and failure wording
117
- have one home for runtime and offline configuration checks.
118
-
119
- ### §resource-environment Named resource environment projection
120
-
121
- `ResourceEnvironment` reads one family's assembled environment without loading
122
- resources or changing configuration. Families declare their supported controls,
123
- per-resource settings and, when required by their resource standard, an alias
124
- grammar. Definition parsing and validation remain family-owned.
125
-
126
- | Form | Meaning |
127
- |---|---|
128
- | `PLURNK_<FAMILY>_<alias>=<definition>` | One complete definition. `_` represents `-` in the resource name; validate the decoded name with the family's grammar, otherwise `[a-z][a-z0-9-]*`. |
129
- | `PLURNK_<FAMILY>_ENABLED=0\|1` | The family default, declared in its owning `.env.defaults`. |
130
- | `PLURNK_<FAMILY>_<alias>_ENABLED=0\|1` | This resource's independent override; it does not copy or modify the definition. |
131
- | Other uppercase controls/settings | Accepted only when the family declares them. Definition aliases are never case-folded into controls. |
132
-
133
- Enabledness uses {§env-knob}. Controls may precede a definition or address resources
134
- supplied by other sources; they do not manufacture definitions. An unused alias
135
- is valid. Spelling, supported settings and their values are validated when the
136
- environment is read, independently of whether a definition exists.
137
- Definition data remains verbatim for its owning schema; this reader neither merges
138
- fields nor includes those values in its diagnostics. Empty or whitespace-only
139
- definitions are invalid even when disabled. Absence leaves inheritance intact;
140
- `<alias>_ENABLED=0` suppresses activation without hiding the definition.
141
- Names are preserved without case folding or Unicode normalization. Standard skill
142
- names ({§agent-skills-name}) may lead with a digit or contain Unicode; native
143
- `.env` files and `env 'NAME=value' command` carry such keys even when a shell's
144
- assignment grammar cannot. Uppercase controls remain distinct from aliases.
145
-
146
- ### §error-detail-bound One diagnostic-preview bound
147
-
148
- `new ErrorDetail(knob)` binds a package's model-facing diagnostic preview to
149
- that package's `*_ERROR_DETAIL_LIMIT` knob, read through {§env-knob}:
150
- `preview(value)` keeps at most that many characters of an error's message
151
- (or a value's string form) and marks the cut with `...`. The bound is read at
152
- each preview; an unset or invalid bound crashes by name at the first
153
- diagnostic, never degrades into an unbounded one.
154
- `limit(environment?)` validates the same bound without rendering a diagnostic;
155
- an explicitly supplied environment is complete and never falls back to the process.
156
-
157
- ### §extension-manifest-read One extension declaration
158
-
159
- | Distribution | Declaration | Identity |
160
- |---|---|---|
161
- | Extension package | `package.json#plurnk` | npm package name |
162
- | Agent Plugin bundle | `plugin.json#extensions.ai.plurnk` | npm package name when packaged for Node; otherwise the standard plugin name |
163
-
164
- The bundle uses the standard manifest validation at {§agent-plugins-manifest}.
165
- Its namespace contains the same `kind` and kind-owned fields as an extension
166
- package. Each kind's loader, import convention, registry and lifetime remain
167
- unchanged; bundling does not convert extensions into daemon modules.
168
- Use `kind: "module"` when the extension needs the daemon lifecycle ({§module-lifecycle}).
169
- Its Plurnk-specific files, including defaults, live under `ai.plurnk/`.
170
- A bundle never repeats its kind declaration in `package.json`: two declarations
171
- are an error, not an override. npm exports and dependencies remain Node packaging
172
- metadata. The standard manifest is authoritative when present; an invalid one
173
- cannot fall through to a package declaration. Other clients' extension namespaces
174
- claim no Plurnk extension.
175
-
176
- | Kind | Installation boundary |
177
- |---|---|
178
- | `module` | npm or selected user plugin roots; never project roots ({§module-discovery}) |
179
- | `exec`, `mimetype`, `provider`, `scheme`, `http-materializer` | Existing npm discovery and each kind's import conventions |
180
-
181
- `Meta.moduleFile(manifest, relative)` resolves a kind-owned file entry. A standard
182
- bundle's entry must be under `ai.plurnk/` and resolve inside the plugin root.
183
- npm export-based kinds retain Node's package export resolution. Declared file
184
- entry loaders use this shared containment boundary before importing.
185
-
186
- `Meta.readManifest(dir, kind?)` is the one read of a package's kind claim:
187
- its declaration, parsed, with an object declaring exactly that
188
- `kind` ({§extension-kind}); omitting the filter inspects any kind,
189
- as required by the configuration-floor collector. It answers `null` for a missing or
190
- malformed ordinary package manifest, a non-object, no declaration, or another kind —
191
- none of those is a package of that kind, and a scanner skips them without
192
- evidence. The result carries the manifest path, the package name when
193
- `name` is a non-empty string (otherwise `null`; what an unnamed package is
194
- remains the kind's decision), and the `plurnk` object untouched: kind
195
- fields are validated by the kind's framework, after the trust gate. A scanner that
196
- passes an `AbortSignal` receives the abort; it is never masked as an
197
- unreadable directory. No framework reads a manifest any other way.
198
-
199
- ### §extension-attribution Extension-authored attribution tags
200
-
201
- | Surface | Contract |
202
- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
203
- | Static declaration | Optional `plurnk.attribution` is one non-empty string or an array of non-empty strings. `null`, absence, and an empty array normalize to no tags. A declaration is an always-on source for the admitted package. |
204
- | Runtime declaration | A loaded extension object may implement synchronous `attributions(context)`, returning the same declaration shape, `null`, or `undefined`. The function is pulled once for each provider emission attempt; returning no tags omits that source. |
205
- | Function context | `workspaceId`, `workerId`, and `primaryWorkerId` are opaque strings; `loop`, `turn`, and `attempt` are positive sequence numbers. The function receives no engine, database, trust, or mutation capability. |
206
- | Trust | The kind's framework applies {§extension-trust-boundary} before attribution validation or extension import. Trust admits executable code; it does not make an authored tag truthful. |
207
- | Normalization | `Meta.normalizeAttribution(raw, packageName)` and `Meta.runtimeAttribution(source, context, packageName)` produce readonly ordered lists. A malformed trusted declaration, malformed function, or thrown function fails at the package boundary. |
208
- | Namespace reservation | A tag beginning `@plurnk/` is valid only when `packageName` also begins `@plurnk/`; a violating trusted package fails. Other tag vocabularies, collisions, and meanings are deliberately uninterpreted. |
209
- | Discovery result | Each kind's discovery returns `packageAttributions`, keyed once by package name. Only non-empty static lists for packages represented after admission are present. |
210
- | Host composition | The host flattens static and runtime lists from its admitted extension objects, deduplicates and sorts the result, and treats it as an opaque folksonomy. It does not infer contribution, provenance, weight, trustworthiness, or causal value. |
211
-
212
- Manifest acquisition and static validation occur once in each kind's discovery
213
- path. A composed host consumes the admitted package map and loaded extension
214
- objects without reopening a manifest or tracing tags through produced values.
215
-
216
- ### §extension-trust-boundary One policy, enforcement before import
217
-
218
- `Meta.isTrusted(packageName, env)` is the sole trust decision:
219
-
220
- - empty or `"0"` `PLURNK_EXTENSIONS_TRUSTED_ONLY` trusts every installed package;
221
- - any other value trusts every `@plurnk/*` package plus the comma-separated
222
- package-name allowlist in that value;
223
- - an **unset** key is answered by this package's own `.env.defaults`, because the
224
- gate decides whose panel joins the floor and so is asked before the floor
225
- exists. A value in code would outrank the panel, so there is none
226
- ({§operator-config-only-home}).
227
-
228
- Every kind's scanner applies that predicate after reading the inert package
229
- manifest and before importing or registering extension code. An untrusted package
230
- does not crash discovery: the scanner's result preserves its package identity as
231
- skipped evidence. The composed host decides how to present that evidence.
232
- Direct framework consumers receive the same safe load boundary and can choose
233
- their own presentation.
234
-
235
- ## §observed-span Redaction-first spans
236
-
237
- `observed(tracer, name, attributes, fn, options?)` and its synchronous twin wrap
238
- one span around `fn` on the caller's tracer: attributes admit strings (capped at
239
- 300 characters), numbers and booleans and drop everything else; a thrown error
240
- marks the span `ERROR` and records only `error.type`, the error's class name,
241
- never its message. Every instrumented package binds these to its own tracer
242
- rather than declaring a second helper; prompts, payloads and arbitrary URLs never
243
- reach a span through them.
52
+ `outboundFetch` and `syncAmbientHttp(env?)` apply ambient proxy (`HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY`, and lowercase spellings) and extra CA (`NODE_EXTRA_CA_CERTS`) settings from the shell or `$XDG_CONFIG_HOME/plurnk/.env` to Node's global HTTP/HTTPS agents, global `fetch` dispatcher, and OpenSSL root store, leaving global state untouched when none are set.
@@ -1,3 +1,49 @@
1
- export * from "./AgentPluginManifest.ts";
2
- export { default as AgentPluginFiles } from "./AgentPluginFiles.ts";
1
+ export declare const AGENT_PLUGINS_VERSION = "1.0.0";
2
+ export declare const PLUGIN_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
3
+ export declare const MCP_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
4
+ export declare const schemaVersion: (identifier: string, kind: "plugin" | "mcp") => string | null;
5
+ export declare const expandPlaceholders: (value: string, { root, data }: {
6
+ root: string;
7
+ data: string;
8
+ }) => string;
9
+ export declare const isObject: (value: unknown) => value is Record<string, unknown>;
10
+ export interface Finding {
11
+ readonly section: string;
12
+ readonly message: string;
13
+ }
14
+ export interface PluginAuthor {
15
+ readonly name?: string;
16
+ readonly email?: string;
17
+ readonly url?: string;
18
+ }
19
+ export interface PluginManifest {
20
+ readonly $schema: typeof PLUGIN_SCHEMA;
21
+ readonly name: string;
22
+ readonly version?: string;
23
+ readonly description?: string;
24
+ readonly author?: PluginAuthor;
25
+ readonly homepage?: string;
26
+ readonly repository?: string;
27
+ readonly license?: string;
28
+ readonly keywords?: readonly string[];
29
+ readonly extensions?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
30
+ }
31
+ export type ManifestResult = {
32
+ readonly manifest: PluginManifest;
33
+ readonly ignored: readonly Finding[];
34
+ } | {
35
+ readonly rejected: Finding;
36
+ readonly ignored: readonly Finding[];
37
+ };
38
+ export declare const validateManifest: (value: unknown) => ManifestResult;
39
+ export declare class AgentPluginFiles {
40
+ static errnoCode(cause: unknown): string | undefined;
41
+ static inside(root: string, candidate: string): boolean;
42
+ static isFile(path: string): Promise<boolean>;
43
+ static resolved(path: string): Promise<string | null>;
44
+ static contained(root: string, candidate: string): Promise<boolean>;
45
+ static manifest(directory: string, { signal }?: {
46
+ signal?: AbortSignal;
47
+ }): Promise<ManifestResult | null>;
48
+ }
3
49
  //# sourceMappingURL=AgentPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentPlugin.d.ts","sourceRoot":"","sources":["../src/AgentPlugin.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"AgentPlugin.d.ts","sourceRoot":"","sources":["../src/AgentPlugin.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,aAAa,+DAA+D,CAAC;AAC1F,eAAO,MAAM,UAAU,4DAA4D,CAAC;AAGpF,eAAO,MAAM,aAAa,eAAgB,MAAM,QAAQ,QAAQ,GAAG,KAAK,KAAG,MAAM,GAAG,IACsC,CAAC;AAG3H,eAAO,MAAM,kBAAkB,UAAW,MAAM,kBAAkB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,MAC8B,CAAC;AAElI,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CACD,CAAC;AAEzE,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,aAAa,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CACrF;AAED,MAAM,MAAM,cAAc,GACpB;IAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC;AAQ3E,eAAO,MAAM,gBAAgB,UAAW,OAAO,KAAG,cAmCjD,CAAC;AAGF,qBAAa,gBAAgB;IACzB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEnD;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAGtD;IAED,OAAa,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQlD;IAED,OAAa,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ1D;IAED,OAAa,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMxE;IAGD,OAAa,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA6BlH;CACJ"}
@@ -1,3 +1,140 @@
1
- export * from "./AgentPluginManifest.js";
2
- export { default as AgentPluginFiles } from "./AgentPluginFiles.js";
1
+ import { lstat, readFile, realpath, stat } from "node:fs/promises";
2
+ import { dirname, isAbsolute, join, relative, sep } from "node:path";
3
+ // {§agent-plugins-roots} Shared inert Agent Plugins format primitives.
4
+ export const AGENT_PLUGINS_VERSION = "1.0.0";
5
+ export const PLUGIN_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
6
+ export const MCP_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
7
+ // A canonical identifier names its version; any other string is not an Agent Plugins identifier.
8
+ export const schemaVersion = (identifier, kind) => new RegExp(`^https://agent-plugins\\.org/schemas/([^/]+)/${kind}\\.schema\\.json$`, "u").exec(identifier)?.[1] ?? null;
9
+ // {§agent-plugins-expansion} One textual pass: text a replacement introduces is never scanned again.
10
+ export const expandPlaceholders = (value, { root, data }) => value.replaceAll(/\$\{(PLUGIN_ROOT|PLUGIN_DATA)\}/gu, (_placeholder, name) => (name === "PLUGIN_ROOT" ? root : data));
11
+ export const isObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
12
+ const FIELDS = new Set(["$schema", "name", "version", "description", "author", "homepage", "repository", "license", "keywords", "extensions"]);
13
+ const STRINGS = ["version", "description", "homepage", "repository", "license"];
14
+ const AUTHOR = new Set(["name", "email", "url"]);
15
+ const NAME = /^(?!.*(?:--|\.\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/u;
16
+ // {§agent-plugins-roots} Unknown fields and a non-object `extensions` are the only non-fatal violations.
17
+ export const validateManifest = (value) => {
18
+ if (!isObject(value))
19
+ return { rejected: { section: "5.2", message: "plugin.json must contain a top-level JSON object" }, ignored: [] };
20
+ const ignored = Object.keys(value).filter((key) => !FIELDS.has(key))
21
+ .map((key) => ({ section: "5.2", message: `unknown top-level field ${JSON.stringify(key)} is ignored` }));
22
+ const reject = (section, message) => ({ rejected: { section, message }, ignored });
23
+ const { $schema, name, author, keywords, extensions } = value;
24
+ if (typeof $schema !== "string")
25
+ return reject("5.3", "required field $schema is missing or not a string");
26
+ if ($schema !== PLUGIN_SCHEMA) {
27
+ const version = schemaVersion($schema, "plugin");
28
+ return reject("5.2", version === null
29
+ ? `$schema ${JSON.stringify($schema)} is not a canonical Agent Plugins manifest identifier`
30
+ : `Agent Plugins ${version} is not supported; this client implements 1.0.0`);
31
+ }
32
+ if (typeof name !== "string")
33
+ return reject("5.3", "required field name is missing or not a string");
34
+ if (name.length === 0 || name.length > 64 || !NAME.test(name))
35
+ return reject("5.5", `name ${JSON.stringify(name)} violates the plugin name constraints`);
36
+ const nonString = STRINGS.find((field) => value[field] !== undefined && typeof value[field] !== "string");
37
+ if (nonString !== undefined)
38
+ return reject("5.4", `${nonString} must be a string`);
39
+ if (author !== undefined) {
40
+ if (!isObject(author))
41
+ return reject("5.4", "author must be an object");
42
+ const invalid = Object.keys(author).find((key) => !AUTHOR.has(key) || typeof author[key] !== "string");
43
+ if (invalid !== undefined)
44
+ return reject("5.4", `author may hold only string name, email, and url; found ${JSON.stringify(invalid)}`);
45
+ }
46
+ if (keywords !== undefined && !(Array.isArray(keywords) && keywords.every((keyword) => typeof keyword === "string"))) {
47
+ return reject("5.4", "keywords must be an array of strings");
48
+ }
49
+ if (extensions !== undefined && !isObject(extensions)) {
50
+ ignored.push({ section: "8.1", message: "extensions is not an object and is ignored" });
51
+ }
52
+ else if (extensions !== undefined) {
53
+ const member = Object.keys(extensions).find((namespace) => !isObject(extensions[namespace]));
54
+ if (member !== undefined)
55
+ return reject("8.1", `extensions member ${JSON.stringify(member)} must be an object`);
56
+ }
57
+ const manifest = Object.fromEntries(Object.entries(value)
58
+ .filter(([key]) => FIELDS.has(key) && !(key === "extensions" && !isObject(extensions))));
59
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- the checks above are the manifest's validator; the kept fields are the ones it names
60
+ return { manifest: manifest, ignored };
61
+ };
62
+ // {§agent-plugins-containment} Shared by portable components and extension admission.
63
+ export class AgentPluginFiles {
64
+ static errnoCode(cause) {
65
+ return typeof cause === "object" && cause !== null && "code" in cause && typeof cause.code === "string" ? cause.code : undefined;
66
+ }
67
+ static inside(root, candidate) {
68
+ const path = relative(root, candidate);
69
+ return path !== ".." && !path.startsWith(`..${sep}`) && !isAbsolute(path);
70
+ }
71
+ static async isFile(path) {
72
+ try {
73
+ return (await stat(path)).isFile();
74
+ }
75
+ catch (cause) {
76
+ const code = AgentPluginFiles.errnoCode(cause);
77
+ if (code === "ENOENT" || code === "ENOTDIR")
78
+ return false;
79
+ throw cause;
80
+ }
81
+ }
82
+ static async resolved(path) {
83
+ try {
84
+ return await realpath(path);
85
+ }
86
+ catch (cause) {
87
+ const code = AgentPluginFiles.errnoCode(cause);
88
+ if (code === "ENOENT" || code === "ENOTDIR")
89
+ return null;
90
+ throw cause;
91
+ }
92
+ }
93
+ static async contained(root, candidate) {
94
+ if (!AgentPluginFiles.inside(root, candidate))
95
+ return false;
96
+ const real = await AgentPluginFiles.resolved(candidate);
97
+ if (real !== null)
98
+ return AgentPluginFiles.inside(root, real);
99
+ // A missing leaf can still escape through an existing symlinked parent.
100
+ return candidate !== root && AgentPluginFiles.contained(root, dirname(candidate));
101
+ }
102
+ // null is absence, not an invalid manifest that permits another format to take its place.
103
+ static async manifest(directory, { signal } = {}) {
104
+ signal?.throwIfAborted();
105
+ const authored = join(directory, "plugin.json");
106
+ try {
107
+ await lstat(authored);
108
+ }
109
+ catch (cause) {
110
+ const code = AgentPluginFiles.errnoCode(cause);
111
+ if (code === "ENOENT" || code === "ENOTDIR")
112
+ return null;
113
+ throw cause;
114
+ }
115
+ const root = await AgentPluginFiles.resolved(directory);
116
+ if (root === null)
117
+ return null;
118
+ const location = await AgentPluginFiles.resolved(authored);
119
+ if (location === null) {
120
+ return { rejected: { section: "5.1", message: "plugin.json does not resolve to a regular file" }, ignored: [] };
121
+ }
122
+ if (!AgentPluginFiles.inside(root, location)) {
123
+ return { rejected: { section: "4.1", message: "plugin.json resolves outside the plugin root" }, ignored: [] };
124
+ }
125
+ if (!(await stat(location)).isFile()) {
126
+ return { rejected: { section: "5.1", message: "plugin.json is not a regular file" }, ignored: [] };
127
+ }
128
+ let value;
129
+ try {
130
+ value = JSON.parse(await readFile(location, { encoding: "utf8", signal }));
131
+ }
132
+ catch (cause) {
133
+ if (!(cause instanceof SyntaxError))
134
+ throw cause;
135
+ return { rejected: { section: "5.2", message: "plugin.json is not valid JSON" }, ignored: [] };
136
+ }
137
+ return validateManifest(value);
138
+ }
139
+ }
3
140
  //# sourceMappingURL=AgentPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentPlugin.js","sourceRoot":"","sources":["../src/AgentPlugin.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"AgentPlugin.js","sourceRoot":"","sources":["../src/AgentPlugin.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export default class ConfigurationError extends Error {
2
2
  readonly key: string;
3
3
  constructor(key: string, message: string, options?: ErrorOptions);
4
+ static [Symbol.hasInstance](value: unknown): boolean;
4
5
  }
5
6
  //# sourceMappingURL=ConfigurationError.d.ts.map