@tacuchi/agent-workflow-cli 21.0.0 → 21.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/adapters/git-cli.js +12 -7
- package/dist/adapters/git-cli.js.map +1 -1
- package/dist/application/capability/compose.js +161 -0
- package/dist/application/capability/compose.js.map +1 -0
- package/dist/application/capability/descriptor-loader.js +109 -0
- package/dist/application/capability/descriptor-loader.js.map +1 -0
- package/dist/application/capability/design-handler.js +299 -0
- package/dist/application/capability/design-handler.js.map +1 -0
- package/dist/application/capability/dispatcher.js +312 -0
- package/dist/application/capability/dispatcher.js.map +1 -0
- package/dist/application/capability/durable-effect.js +220 -0
- package/dist/application/capability/durable-effect.js.map +1 -0
- package/dist/application/capability/installed-inventory.js +168 -0
- package/dist/application/capability/installed-inventory.js.map +1 -0
- package/dist/application/capability/readiness.js +204 -0
- package/dist/application/capability/readiness.js.map +1 -0
- package/dist/application/capability/resolution.js +264 -0
- package/dist/application/capability/resolution.js.map +1 -0
- package/dist/application/capability/wrapper.js +195 -0
- package/dist/application/capability/wrapper.js.map +1 -0
- package/dist/application/context/manifest.js +11 -5
- package/dist/application/context/manifest.js.map +1 -1
- package/dist/application/context/measure.js +5 -2
- package/dist/application/context/measure.js.map +1 -1
- package/dist/application/context/plan-service.js +6 -6
- package/dist/application/context/plan-service.js.map +1 -1
- package/dist/application/design/design-bundle-service.js +148 -0
- package/dist/application/design/design-bundle-service.js.map +1 -0
- package/dist/application/design/design-proposal-service.js +69 -0
- package/dist/application/design/design-proposal-service.js.map +1 -0
- package/dist/application/design/design-publish-service.js +275 -7
- package/dist/application/design/design-publish-service.js.map +1 -1
- package/dist/application/design/design-record-service.js +100 -0
- package/dist/application/design/design-record-service.js.map +1 -0
- package/dist/application/flow/advance.js +533 -0
- package/dist/application/flow/advance.js.map +1 -0
- package/dist/application/flow/flow-service.js +65 -0
- package/dist/application/flow/flow-service.js.map +1 -0
- package/dist/application/flow/run-projection.js +80 -0
- package/dist/application/flow/run-projection.js.map +1 -0
- package/dist/application/flow/run-state-service.js +107 -0
- package/dist/application/flow/run-state-service.js.map +1 -0
- package/dist/application/flow/submit.js +423 -0
- package/dist/application/flow/submit.js.map +1 -0
- package/dist/application/markdown.js +16 -2
- package/dist/application/markdown.js.map +1 -1
- package/dist/application/resume-service.js +23 -10
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/self/hooks-toml.js +137 -17
- package/dist/application/self/hooks-toml.js.map +1 -1
- package/dist/application/self/host-states.js +87 -1
- package/dist/application/self/host-states.js.map +1 -1
- package/dist/application/self/install-hooks.js +62 -6
- package/dist/application/self/install-hooks.js.map +1 -1
- package/dist/application/self/install-skill.js +37 -6
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/uninstall.js +21 -0
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/skills-resolver-service.js +8 -2
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/status-service.js +4 -1
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/workline-index-service.js +15 -2
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +13 -1
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/capability.js +182 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/flow.js +71 -0
- package/dist/cli/commands/flow.js.map +1 -0
- package/dist/cli/commands/index.js +4 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/skills.js +55 -2
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/status.js +5 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/help-groups.js +6 -0
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/parser.js +6 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/tui/components/host-admin-section.js +14 -2
- package/dist/cli/tui/components/host-admin-section.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +13 -1
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js +8 -1
- package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
- package/dist/domain/capability/descriptor.js +553 -0
- package/dist/domain/capability/descriptor.js.map +1 -0
- package/dist/domain/capability/effects.js +90 -0
- package/dist/domain/capability/effects.js.map +1 -0
- package/dist/domain/capability/protocol.js +494 -0
- package/dist/domain/capability/protocol.js.map +1 -0
- package/dist/domain/contract-reader.js +84 -0
- package/dist/domain/contract-reader.js.map +1 -0
- package/dist/domain/design/adapter.js +161 -0
- package/dist/domain/design/adapter.js.map +1 -0
- package/dist/domain/design/artifact.js +148 -4
- package/dist/domain/design/artifact.js.map +1 -1
- package/dist/domain/design/capability.js +263 -4
- package/dist/domain/design/capability.js.map +1 -1
- package/dist/domain/design/direct.js +108 -0
- package/dist/domain/design/direct.js.map +1 -0
- package/dist/domain/design/external-send.js +65 -0
- package/dist/domain/design/external-send.js.map +1 -0
- package/dist/domain/design/maturity.js +71 -0
- package/dist/domain/design/maturity.js.map +1 -1
- package/dist/domain/design/offline.js +92 -0
- package/dist/domain/design/offline.js.map +1 -0
- package/dist/domain/design/profiles.js +212 -0
- package/dist/domain/design/profiles.js.map +1 -0
- package/dist/domain/design/proposal.js +234 -0
- package/dist/domain/design/proposal.js.map +1 -0
- package/dist/domain/design/render-bundle.js +0 -0
- package/dist/domain/design/render-bundle.js.map +1 -0
- package/dist/domain/design/rendition.js +472 -0
- package/dist/domain/design/rendition.js.map +1 -0
- package/dist/domain/design/sources.js +180 -0
- package/dist/domain/design/sources.js.map +1 -0
- package/dist/domain/design/validation.js +12 -68
- package/dist/domain/design/validation.js.map +1 -1
- package/dist/domain/design/visual-evidence.js +155 -0
- package/dist/domain/design/visual-evidence.js.map +1 -0
- package/dist/domain/flow/answer.js +459 -0
- package/dist/domain/flow/answer.js.map +1 -0
- package/dist/domain/flow/authority.js +2338 -0
- package/dist/domain/flow/authority.js.map +1 -0
- package/dist/domain/flow/authorization.js +62 -0
- package/dist/domain/flow/authorization.js.map +1 -0
- package/dist/domain/flow/directive.js +421 -0
- package/dist/domain/flow/directive.js.map +1 -0
- package/dist/domain/flow/rules.js +140 -0
- package/dist/domain/flow/rules.js.map +1 -0
- package/dist/domain/flow/run-state.js +317 -0
- package/dist/domain/flow/run-state.js.map +1 -0
- package/dist/domain/harnesses.js +124 -4
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/host-verification.js +8 -8
- package/dist/domain/skills.js +13 -14
- package/dist/domain/skills.js.map +1 -1
- package/dist/domain/structured-choice-stamp.js +106 -0
- package/dist/domain/structured-choice-stamp.js.map +1 -0
- package/package.json +1 -1
- package/skills/w/SKILL.md +5 -5
- package/skills/w/context/MANIFEST.json +42 -1
- package/skills/w/harness/HARNESS.md +30 -4
- package/skills/w/loops/CHASSIS.md +11 -20
- package/skills/w/loops/CODE-POLICIES.md +9 -15
- package/skills/w/loops/plan-exec-loop/LOOP.md +11 -13
- package/skills/w/loops/plan-new-loop/LOOP.md +6 -4
- package/skills/w/loops/plan-refine-loop/LOOP.md +5 -3
- package/skills/w/loops/quick-loop/LOOP.md +18 -26
- package/skills/w/loops/spec-refine-loop/LOOP.md +14 -18
- package/skills/w/modules/COMPACTION.md +2 -6
- package/skills/w/modules/DB-SCRIPTS-ONLY.md +2 -0
- package/skills/w/modules/DESIGN-REFERENCES.md +15 -11
- package/skills/w/modules/IDEATION-GATE.md +3 -3
- package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +17 -36
- package/skills/w/modules/PLAN-INPUT.md +5 -3
- package/skills/w/modules/PLAN-REFINE-SPLIT.md +3 -1
- package/skills/w/modules/PLAN-SPLIT-GATE.md +7 -5
- package/skills/w/modules/PROMPT-CONTINUITY.md +3 -1
- package/skills/w/modules/SPEC-CHANGE-SHAPE.md +4 -4
- package/skills/w/roles/README.md +2 -0
- package/skills/w/roles/design/CONTRACT.md +80 -0
- package/skills/w/roles/design/ROLE.md +7 -0
- package/skills/w/schemas/capability-descriptor.schema.json +260 -0
- package/skills/w/schemas/design/design-render-bundle.v1.schema.json +191 -0
- package/skills/w/schemas/design/design-rendition.v1.schema.json +232 -0
- package/skills/w/schemas/design/ui-screen.v1.schema.json +29 -1
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cross-cutting contract a capability declares, and the only door into this
|
|
3
|
+
* layer.
|
|
4
|
+
*
|
|
5
|
+
* An Agent Skill that is merely installed is a file on disk. What turns it into
|
|
6
|
+
* something SPEC, PLAN, QUICK or a host adapter may invoke is this descriptor:
|
|
7
|
+
* a finite operation catalog, the inputs and outputs each one takes, the context
|
|
8
|
+
* it needs, whether it can ask for more, what it is allowed to DO, what happens
|
|
9
|
+
* when it is `off`, and what a built-in floor guarantees when no improvement is
|
|
10
|
+
* installed. Without it, "a loop composes the design capability" is a sentence
|
|
11
|
+
* in Markdown that nothing can verify.
|
|
12
|
+
*
|
|
13
|
+
* Three boundaries are load-bearing and none of them is stylistic:
|
|
14
|
+
*
|
|
15
|
+
* - **This is not a design format.** It lives outside `domain/design` and
|
|
16
|
+
* outside `CANONICAL_SCHEMAS`, and it must stay there: the day the capability
|
|
17
|
+
* contract is catalogued next to `workline.ui-screen/v1`, adding a second
|
|
18
|
+
* capability means touching the design package's registry.
|
|
19
|
+
* - **The `name` is the whole public identity.** There is no parallel role ID.
|
|
20
|
+
* `design` the capability and `design` the binding slot are one string, and
|
|
21
|
+
* `design/capability.ts` proves it at compile time.
|
|
22
|
+
* - **Declaring compatibility is not becoming the capability.** An improvement
|
|
23
|
+
* keeps its own `name`; its metadata only points at a descriptor it satisfies.
|
|
24
|
+
* It never earns an alias, a binding or a Workline surface by saying so.
|
|
25
|
+
*
|
|
26
|
+
* The published JSON Schema (`skills/w/schemas/capability-descriptor.schema.json`)
|
|
27
|
+
* is the normative contract; this validator is hand-written (same call as
|
|
28
|
+
* DEC-001: no schema engine, no new dependency) and `capability-descriptor-guard`
|
|
29
|
+
* proves the two never drift.
|
|
30
|
+
*/
|
|
31
|
+
import { createHash } from "node:crypto";
|
|
32
|
+
import { ContractReader, eachRecord, isNonEmptyString, isRecord } from "../contract-reader.js";
|
|
33
|
+
import { checkSafeRelativePath } from "../safe-path.js";
|
|
34
|
+
import { RETIRED_SKILL_IDENTITIES } from "../skills.js";
|
|
35
|
+
import { isEffectClass } from "./effects.js";
|
|
36
|
+
export const CAPABILITY_CONTRACT_VERSION = 1;
|
|
37
|
+
export const CAPABILITY_DESCRIPTOR_SCHEMA_ID = "workline.capability-descriptor/v1";
|
|
38
|
+
/**
|
|
39
|
+
* THE grammar, as pattern fragments.
|
|
40
|
+
*
|
|
41
|
+
* Same discipline as the design package: every regex here and every `pattern` in
|
|
42
|
+
* the published schema is built from these strings, and a guard proves it. A
|
|
43
|
+
* tightened regex that leaves the normative contract describing something looser
|
|
44
|
+
* is a divergence a green test suite will not notice.
|
|
45
|
+
*/
|
|
46
|
+
export const CAPABILITY_GRAMMAR = {
|
|
47
|
+
/** A capability name is a skill name: lowercase kebab, no leading digit. */
|
|
48
|
+
name: "[a-z][a-z0-9]*(?:-[a-z0-9]+)*",
|
|
49
|
+
/** Operation and input identifiers. */
|
|
50
|
+
identifier: "[a-z][a-z0-9_]*",
|
|
51
|
+
/** A schema id the operation's payload conforms to, e.g. `workline.ui-screen/v1`. */
|
|
52
|
+
schemaId: "[a-z][a-z0-9.-]*/v[1-9][0-9]*",
|
|
53
|
+
digest: "[0-9a-f]{64}",
|
|
54
|
+
};
|
|
55
|
+
const NAME_RE = new RegExp(`^${CAPABILITY_GRAMMAR.name}$`);
|
|
56
|
+
const IDENTIFIER_RE = new RegExp(`^${CAPABILITY_GRAMMAR.identifier}$`);
|
|
57
|
+
const SCHEMA_ID_RE = new RegExp(`^${CAPABILITY_GRAMMAR.schemaId}$`);
|
|
58
|
+
export const CAPABILITY_EXPOSURES = ["direct", "compose"];
|
|
59
|
+
/** Whether the operation needs a Workline workspace to mean anything. */
|
|
60
|
+
export const WORKSPACE_REQUIREMENTS = ["required", "optional", "standalone"];
|
|
61
|
+
/** Whether one attempt is the whole conversation, or it may ask for more. */
|
|
62
|
+
export const INTERACTION_MODES = ["single_pass", "needs_input"];
|
|
63
|
+
export const INPUT_KINDS = ["text", "reference", "attachment", "selection"];
|
|
64
|
+
export const INPUT_SENSITIVITIES = ["public", "sensitive"];
|
|
65
|
+
export const OUTPUT_KINDS = ["value", "reference", "value_and_reference"];
|
|
66
|
+
/**
|
|
67
|
+
* Completeness is NOT an outcome.
|
|
68
|
+
*
|
|
69
|
+
* An attempt can finish and still hand back something the requested profile does
|
|
70
|
+
* not fully cover; saying so is the only way a gate that demands completeness can
|
|
71
|
+
* refuse it without calling the whole attempt a failure.
|
|
72
|
+
*/
|
|
73
|
+
export const COMPLETENESS_VALUES = ["complete", "partial"];
|
|
74
|
+
/** What `off` does to one operation. */
|
|
75
|
+
export const OFF_POLICIES = ["blocked", "allowed"];
|
|
76
|
+
/** A floor a core gate can count on, or a feature that may simply be absent. */
|
|
77
|
+
export const FLOOR_KINDS = ["core", "feature"];
|
|
78
|
+
export const IMPROVEMENT_POLICIES = ["host_selected", "none"];
|
|
79
|
+
/** Why a run fell back. Every one of them is observable, none is a guess. */
|
|
80
|
+
export const DEGRADATION_CAUSES = [
|
|
81
|
+
"opaque_selection",
|
|
82
|
+
"incompatible_improvement",
|
|
83
|
+
"invalid_binding",
|
|
84
|
+
"digest_changed",
|
|
85
|
+
];
|
|
86
|
+
export const DEGRADATION_ACTIONS = ["floor", "reject"];
|
|
87
|
+
export const COMPATIBILITY_STATUSES = ["active", "deprecated"];
|
|
88
|
+
export const ALLOWED_KEYS = {
|
|
89
|
+
"": [
|
|
90
|
+
"contract_version",
|
|
91
|
+
"name",
|
|
92
|
+
"purpose",
|
|
93
|
+
"exposure",
|
|
94
|
+
"default_operation",
|
|
95
|
+
"operations",
|
|
96
|
+
"floor",
|
|
97
|
+
"degradations",
|
|
98
|
+
"compatibility",
|
|
99
|
+
],
|
|
100
|
+
"operations[]": [
|
|
101
|
+
"name",
|
|
102
|
+
"summary",
|
|
103
|
+
"exposure",
|
|
104
|
+
"workspace",
|
|
105
|
+
"interaction",
|
|
106
|
+
"inputs",
|
|
107
|
+
"output",
|
|
108
|
+
"effects",
|
|
109
|
+
"off",
|
|
110
|
+
],
|
|
111
|
+
"operations[].inputs[]": ["name", "kind", "required", "sensitivity", "schema"],
|
|
112
|
+
"operations[].output": ["kind", "schema", "completeness"],
|
|
113
|
+
"operations[].effects[]": ["class", "idempotent", "authorization", "approval"],
|
|
114
|
+
floor: ["builtin", "kind", "improvements"],
|
|
115
|
+
"degradations[]": ["cause", "action"],
|
|
116
|
+
compatibility: [
|
|
117
|
+
"status",
|
|
118
|
+
"minimum_contract_version",
|
|
119
|
+
"improves",
|
|
120
|
+
"retired_names",
|
|
121
|
+
"retired_formats",
|
|
122
|
+
],
|
|
123
|
+
"compatibility.improves": ["capability", "operations", "contract_version"],
|
|
124
|
+
};
|
|
125
|
+
/** Whether the capability declares `exposure` for the given route. */
|
|
126
|
+
export function exposes(descriptor, route) {
|
|
127
|
+
return descriptor.exposure.includes(route);
|
|
128
|
+
}
|
|
129
|
+
export function findOperation(descriptor, operation) {
|
|
130
|
+
return descriptor.operations.find((op) => op.name === operation) ?? null;
|
|
131
|
+
}
|
|
132
|
+
export function validateCapabilityDescriptor(raw, artifact = "workline-capability.json") {
|
|
133
|
+
const r = new ContractReader("CAPABILITY", ALLOWED_KEYS);
|
|
134
|
+
if (!isRecord(raw)) {
|
|
135
|
+
r.fail("CAPABILITY_DESCRIPTOR_NOT_OBJECT", artifact, "el descriptor no es un objeto JSON", `reescribí '${artifact}' como un único objeto JSON conforme a ${CAPABILITY_DESCRIPTOR_SCHEMA_ID}`);
|
|
136
|
+
return done(r, null);
|
|
137
|
+
}
|
|
138
|
+
// The version gate runs first and alone: reading fields off a descriptor whose
|
|
139
|
+
// contract we do not know would report a pile of derived nonsense.
|
|
140
|
+
const version = r.read(raw, "contract_version");
|
|
141
|
+
if (version !== CAPABILITY_CONTRACT_VERSION) {
|
|
142
|
+
r.fail("CAPABILITY_CONTRACT_VERSION_UNSUPPORTED", artifact, `'contract_version' es ${JSON.stringify(version)} y esta CLI implementa ${CAPABILITY_CONTRACT_VERSION}`, `declará 'contract_version': ${CAPABILITY_CONTRACT_VERSION} o actualizá la CLI`);
|
|
143
|
+
return done(r, null);
|
|
144
|
+
}
|
|
145
|
+
r.closed(raw, "", artifact);
|
|
146
|
+
readIdentity(r, raw, artifact);
|
|
147
|
+
const operations = readOperations(r, raw, artifact);
|
|
148
|
+
readDefaultOperation(r, raw, artifact, operations);
|
|
149
|
+
readFloor(r, raw, artifact);
|
|
150
|
+
readDegradations(r, raw, artifact);
|
|
151
|
+
readCompatibility(r, raw, artifact);
|
|
152
|
+
return done(r, r.failures.length === 0 ? raw : null);
|
|
153
|
+
}
|
|
154
|
+
function readIdentity(r, raw, artifact) {
|
|
155
|
+
const name = r.read(raw, "name");
|
|
156
|
+
if (!isNonEmptyString(name) || !NAME_RE.test(name)) {
|
|
157
|
+
r.invalid(artifact, `'name' debe ser un nombre de skill en minúsculas: ${JSON.stringify(name)}`, `escribí 'name' con la forma '${CAPABILITY_GRAMMAR.name}'`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// A descriptor is an entry surface like any other. Accepting a retired name
|
|
161
|
+
// here would let the identity come back in through the one door that was
|
|
162
|
+
// not watched — and it would come back CARRYING a contract.
|
|
163
|
+
const retired = RETIRED_SKILL_IDENTITIES.get(name.toLowerCase());
|
|
164
|
+
if (retired !== undefined) {
|
|
165
|
+
r.fail("CAPABILITY_NAME_RETIRED", artifact, `'${name}' está retirado — ${retired}`, "publicá el descriptor bajo el nombre vigente de la capacidad");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const purpose = r.read(raw, "purpose");
|
|
169
|
+
if (!isNonEmptyString(purpose)) {
|
|
170
|
+
r.invalid(artifact, "'purpose' no puede estar vacío", "describí en una frase qué resuelve la capacidad");
|
|
171
|
+
}
|
|
172
|
+
readExposure(r, raw, "exposure", artifact, null);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Read an exposure list. An operation's list is checked against the capability's
|
|
176
|
+
* so an operation cannot advertise a route the capability itself does not open.
|
|
177
|
+
*/
|
|
178
|
+
function readExposure(r, node, path, artifact, within) {
|
|
179
|
+
const raw = r.read(node, path);
|
|
180
|
+
if (!Array.isArray(raw) || raw.length === 0) {
|
|
181
|
+
r.invalid(artifact, `'${path}' debe declarar al menos una ruta`, `escribí '${path}': ["direct"], ["compose"] o ambas`);
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
const out = [];
|
|
185
|
+
for (const entry of raw) {
|
|
186
|
+
if (!CAPABILITY_EXPOSURES.includes(entry)) {
|
|
187
|
+
r.invalid(artifact, `'${path}' no admite ${JSON.stringify(entry)}`, `usá solo: ${CAPABILITY_EXPOSURES.join(", ")}`);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (out.includes(entry)) {
|
|
191
|
+
r.invalid(artifact, `'${path}' repite '${String(entry)}'`, "declará cada ruta una sola vez");
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (within !== null && !within.includes(entry)) {
|
|
195
|
+
r.invalid(artifact, `'${path}' declara '${String(entry)}' y la capacidad no expone esa ruta`, "agregá la ruta al 'exposure' de la capacidad o quitala de la operación");
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
out.push(entry);
|
|
199
|
+
}
|
|
200
|
+
return out;
|
|
201
|
+
}
|
|
202
|
+
function readOperations(r, raw, artifact) {
|
|
203
|
+
const capabilityExposure = Array.isArray(raw.exposure) ? raw.exposure : [];
|
|
204
|
+
const names = [];
|
|
205
|
+
for (const op of eachRecord(r, raw, "operations", artifact)) {
|
|
206
|
+
const name = r.read(op, "operations[].name");
|
|
207
|
+
if (!isNonEmptyString(name) || !IDENTIFIER_RE.test(name)) {
|
|
208
|
+
r.invalid(artifact, `'operations[].name' inválido: ${JSON.stringify(name)}`, `nombrá la operación con la forma '${CAPABILITY_GRAMMAR.identifier}'`);
|
|
209
|
+
}
|
|
210
|
+
else if (names.includes(name)) {
|
|
211
|
+
r.invalid(artifact, `la operación '${name}' está declarada dos veces`, "el catálogo de operaciones es finito y sin repeticiones: dejá una sola");
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
names.push(name);
|
|
215
|
+
}
|
|
216
|
+
const where = isNonEmptyString(name) ? `${artifact} (${name})` : artifact;
|
|
217
|
+
if (!isNonEmptyString(r.read(op, "operations[].summary"))) {
|
|
218
|
+
r.invalid(where, "'summary' no puede estar vacío", "describí la operación en una frase");
|
|
219
|
+
}
|
|
220
|
+
readExposure(r, op, "operations[].exposure", where, capabilityExposure);
|
|
221
|
+
readEnum(r, op, "operations[].workspace", WORKSPACE_REQUIREMENTS, where);
|
|
222
|
+
readEnum(r, op, "operations[].interaction", INTERACTION_MODES, where);
|
|
223
|
+
readInputs(r, op, where);
|
|
224
|
+
readOutput(r, op, where);
|
|
225
|
+
readEffects(r, op, where);
|
|
226
|
+
readEnum(r, op, "operations[].off", OFF_POLICIES, where);
|
|
227
|
+
}
|
|
228
|
+
if (names.length === 0) {
|
|
229
|
+
r.invalid(artifact, "'operations' no declara ninguna operación válida", "una capacidad sin catálogo de operaciones no es invocable: declará al menos una");
|
|
230
|
+
}
|
|
231
|
+
return names;
|
|
232
|
+
}
|
|
233
|
+
function readInputs(r, op, artifact) {
|
|
234
|
+
const seen = [];
|
|
235
|
+
for (const input of eachRecord(r, op, "operations[].inputs", artifact)) {
|
|
236
|
+
const name = r.read(input, "operations[].inputs[].name");
|
|
237
|
+
if (!isNonEmptyString(name) || !IDENTIFIER_RE.test(name)) {
|
|
238
|
+
r.invalid(artifact, `nombre de input inválido: ${JSON.stringify(name)}`, `nombrá el input con la forma '${CAPABILITY_GRAMMAR.identifier}'`);
|
|
239
|
+
}
|
|
240
|
+
else if (seen.includes(name)) {
|
|
241
|
+
r.invalid(artifact, `el input '${name}' está declarado dos veces`, "dejá una sola entrada");
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
seen.push(name);
|
|
245
|
+
}
|
|
246
|
+
readEnum(r, input, "operations[].inputs[].kind", INPUT_KINDS, artifact);
|
|
247
|
+
readBoolean(r, input, "operations[].inputs[].required", artifact);
|
|
248
|
+
// Sensitivity is declared per input because it decides authorization, not
|
|
249
|
+
// presentation: reading a sensitive source is never self-authorized.
|
|
250
|
+
readEnum(r, input, "operations[].inputs[].sensitivity", INPUT_SENSITIVITIES, artifact);
|
|
251
|
+
readSchemaId(r, input, "operations[].inputs[].schema", artifact);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function readOutput(r, op, artifact) {
|
|
255
|
+
const output = r.read(op, "operations[].output");
|
|
256
|
+
if (!isRecord(output)) {
|
|
257
|
+
r.invalid(artifact, "'output' debe ser un objeto", "declará 'output' con 'kind', 'schema' y 'completeness'");
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
r.closed(output, "operations[].output", artifact);
|
|
261
|
+
readEnum(r, output, "operations[].output.kind", OUTPUT_KINDS, artifact);
|
|
262
|
+
readSchemaId(r, output, "operations[].output.schema", artifact);
|
|
263
|
+
const completeness = r.read(output, "operations[].output.completeness");
|
|
264
|
+
if (!Array.isArray(completeness) || completeness.length === 0) {
|
|
265
|
+
r.invalid(artifact, "'output.completeness' debe declarar al menos un valor", `usá alguno de: ${COMPLETENESS_VALUES.join(", ")}`);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const seen = [];
|
|
269
|
+
for (const value of completeness) {
|
|
270
|
+
if (!COMPLETENESS_VALUES.includes(value)) {
|
|
271
|
+
r.invalid(artifact, `'output.completeness' no admite ${JSON.stringify(value)}`, `usá solo: ${COMPLETENESS_VALUES.join(", ")}`);
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
if (seen.includes(value)) {
|
|
275
|
+
r.invalid(artifact, `'output.completeness' repite '${String(value)}'`, "dejá un solo valor");
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
seen.push(value);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function readEffects(r, op, artifact) {
|
|
282
|
+
const seen = [];
|
|
283
|
+
let count = 0;
|
|
284
|
+
for (const effect of eachRecord(r, op, "operations[].effects", artifact)) {
|
|
285
|
+
count += 1;
|
|
286
|
+
const cls = r.read(effect, "operations[].effects[].class");
|
|
287
|
+
if (!isEffectClass(cls)) {
|
|
288
|
+
r.invalid(artifact, `clase de efecto desconocida: ${JSON.stringify(cls)}`, "declará una clase de la taxonomía de efectos");
|
|
289
|
+
}
|
|
290
|
+
else if (seen.includes(cls)) {
|
|
291
|
+
r.invalid(artifact, `la clase de efecto '${cls}' está declarada dos veces`, "declará cada clase una sola vez por operación");
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
seen.push(cls);
|
|
295
|
+
}
|
|
296
|
+
readBoolean(r, effect, "operations[].effects[].idempotent", artifact);
|
|
297
|
+
readEnum(r, effect, "operations[].effects[].authorization", ["invocation", "preflight"], artifact);
|
|
298
|
+
readEnum(r, effect, "operations[].effects[].approval", ["none", "visible"], artifact);
|
|
299
|
+
}
|
|
300
|
+
// An operation that declares nothing authorizes nothing — including reading.
|
|
301
|
+
// `read_only` is a declaration, not the absence of one.
|
|
302
|
+
if (count === 0) {
|
|
303
|
+
r.invalid(artifact, "'effects' no declara ninguna clase", "declará al menos 'read_only': un efecto no declarado no se ejerce");
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function readDefaultOperation(r, raw, artifact, operations) {
|
|
307
|
+
const value = r.read(raw, "default_operation");
|
|
308
|
+
if (value === null)
|
|
309
|
+
return;
|
|
310
|
+
if (value === undefined) {
|
|
311
|
+
r.invalid(artifact, "falta 'default_operation'", "declará el nombre de la operación por defecto, o null si no hay");
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
if (!isNonEmptyString(value) || !operations.includes(value)) {
|
|
315
|
+
r.invalid(artifact, `'default_operation' nombra ${JSON.stringify(value)}, que no está en el catálogo`, `usá una de: ${operations.join(", ")} — o null`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
function readFloor(r, raw, artifact) {
|
|
319
|
+
const floor = r.read(raw, "floor");
|
|
320
|
+
if (!isRecord(floor)) {
|
|
321
|
+
r.invalid(artifact, "'floor' debe ser un objeto", "declará 'floor' con 'builtin', 'kind' e 'improvements'");
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
r.closed(floor, "floor", artifact);
|
|
325
|
+
const builtin = readBoolean(r, floor, "floor.builtin", artifact);
|
|
326
|
+
const kind = readEnum(r, floor, "floor.kind", FLOOR_KINDS, artifact);
|
|
327
|
+
readEnum(r, floor, "floor.improvements", IMPROVEMENT_POLICIES, artifact);
|
|
328
|
+
// The single rule that keeps a core gate from depending on an external
|
|
329
|
+
// install: something a flow cannot proceed without has to run with nothing
|
|
330
|
+
// installed. A feature may legitimately be absent — and blocks only itself.
|
|
331
|
+
if (kind === "core" && builtin === false) {
|
|
332
|
+
r.invalid(artifact, "una capacidad 'core' sin floor incorporado bloquearía un gate al faltar una skill externa", "declará 'floor.builtin': true, o bajá 'floor.kind' a 'feature'");
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
function readDegradations(r, raw, artifact) {
|
|
336
|
+
for (const entry of eachRecord(r, raw, "degradations", artifact)) {
|
|
337
|
+
readEnum(r, entry, "degradations[].cause", DEGRADATION_CAUSES, artifact);
|
|
338
|
+
readEnum(r, entry, "degradations[].action", DEGRADATION_ACTIONS, artifact);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
function readCompatibility(r, raw, artifact) {
|
|
342
|
+
const compat = r.read(raw, "compatibility");
|
|
343
|
+
if (!isRecord(compat)) {
|
|
344
|
+
r.invalid(artifact, "'compatibility' debe ser un objeto", "declará 'compatibility' con estado, versión mínima y nombres/formatos retirados");
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
r.closed(compat, "compatibility", artifact);
|
|
348
|
+
readEnum(r, compat, "compatibility.status", COMPATIBILITY_STATUSES, artifact);
|
|
349
|
+
const minimum = r.read(compat, "compatibility.minimum_contract_version");
|
|
350
|
+
if (typeof minimum !== "number" || !Number.isInteger(minimum) || minimum < 1) {
|
|
351
|
+
r.invalid(artifact, `'minimum_contract_version' debe ser un entero ≥ 1: ${JSON.stringify(minimum)}`, "declará la versión de contrato más antigua que este descriptor acepta");
|
|
352
|
+
}
|
|
353
|
+
else if (minimum > CAPABILITY_CONTRACT_VERSION) {
|
|
354
|
+
r.invalid(artifact, `'minimum_contract_version' (${minimum}) es mayor que la versión declarada (${CAPABILITY_CONTRACT_VERSION})`, "bajá el mínimo o publicá el descriptor contra una versión de contrato mayor");
|
|
355
|
+
}
|
|
356
|
+
const name = isNonEmptyString(raw.name) ? raw.name : null;
|
|
357
|
+
readImproves(r, compat, artifact, name);
|
|
358
|
+
readNameList(r, compat, "compatibility.retired_names", artifact, name);
|
|
359
|
+
readStringList(r, compat, "compatibility.retired_formats", artifact);
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* A descriptor either IS a capability (`improves: null`) or improves one. The
|
|
363
|
+
* claim is read here so the resolution can verify it against the capability
|
|
364
|
+
* being resolved instead of trusting the host's word that the two match.
|
|
365
|
+
*/
|
|
366
|
+
function readImproves(r, compat, artifact, ownName) {
|
|
367
|
+
const improves = r.read(compat, "compatibility.improves");
|
|
368
|
+
if (improves === null)
|
|
369
|
+
return;
|
|
370
|
+
if (!isRecord(improves)) {
|
|
371
|
+
r.invalid(artifact, "'compatibility.improves' debe ser un objeto o null", "declará qué capacidad, operaciones y versión de contrato mejora, o null si el descriptor es la capacidad");
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
r.closed(improves, "compatibility.improves", artifact);
|
|
375
|
+
readImprovedCapability(r, improves, artifact, ownName);
|
|
376
|
+
readImprovedOperations(r, improves, artifact);
|
|
377
|
+
const version = r.read(improves, "compatibility.improves.contract_version");
|
|
378
|
+
if (typeof version !== "number" || !Number.isInteger(version) || version < 1) {
|
|
379
|
+
r.invalid(artifact, `'improves.contract_version' debe ser un entero ≥ 1: ${JSON.stringify(version)}`, "declará la versión de contrato de la capacidad que mejora");
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
function readImprovedCapability(r, improves, artifact, ownName) {
|
|
383
|
+
const capability = r.read(improves, "compatibility.improves.capability");
|
|
384
|
+
if (!isNonEmptyString(capability) || !NAME_RE.test(capability)) {
|
|
385
|
+
r.invalid(artifact, `'improves.capability' inválido: ${JSON.stringify(capability)}`, `nombrá la capacidad con la forma '${CAPABILITY_GRAMMAR.name}'`);
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
// Self-improvement would let a descriptor grant itself the compatibility it is
|
|
389
|
+
// supposed to be claiming about something else.
|
|
390
|
+
if (capability === ownName) {
|
|
391
|
+
r.invalid(artifact, `'${capability}' declara mejorarse a sí misma`, "una mejora nombra OTRA capacidad; si el descriptor es la capacidad, poné 'improves': null");
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
function readImprovedOperations(r, improves, artifact) {
|
|
395
|
+
const operations = r.read(improves, "compatibility.improves.operations");
|
|
396
|
+
if (!Array.isArray(operations) || operations.length === 0) {
|
|
397
|
+
r.invalid(artifact, "'improves.operations' debe enumerar al menos una operación", "declará qué operaciones mejora: una mejora que no dice cuáles no se puede verificar");
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
for (const entry of operations) {
|
|
401
|
+
if (isNonEmptyString(entry) && IDENTIFIER_RE.test(entry))
|
|
402
|
+
continue;
|
|
403
|
+
r.invalid(artifact, `'improves.operations' no admite ${JSON.stringify(entry)}`, `nombrá cada operación con la forma '${CAPABILITY_GRAMMAR.identifier}'`);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/** Retired names fail with guidance; listing the live name among them is a loop. */
|
|
407
|
+
function readNameList(r, node, path, artifact, liveName) {
|
|
408
|
+
const list = r.read(node, path);
|
|
409
|
+
if (!Array.isArray(list)) {
|
|
410
|
+
r.invalid(artifact, `'${path}' debe ser un array`, `escribí '${path}': []`);
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
for (const entry of list) {
|
|
414
|
+
if (!isNonEmptyString(entry) || !NAME_RE.test(entry)) {
|
|
415
|
+
r.invalid(artifact, `'${path}' no admite ${JSON.stringify(entry)}`, `usá nombres con la forma '${CAPABILITY_GRAMMAR.name}'`);
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
if (entry === liveName) {
|
|
419
|
+
r.invalid(artifact, `'${path}' retira '${entry}', que es el nombre vigente de la capacidad`, "quitá el nombre vigente de la lista de retirados");
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
function readStringList(r, node, path, artifact) {
|
|
424
|
+
const list = r.read(node, path);
|
|
425
|
+
if (!Array.isArray(list)) {
|
|
426
|
+
r.invalid(artifact, `'${path}' debe ser un array`, `escribí '${path}': []`);
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
for (const entry of list) {
|
|
430
|
+
if (!isNonEmptyString(entry)) {
|
|
431
|
+
r.invalid(artifact, `'${path}' no admite ${JSON.stringify(entry)}`, "usá strings no vacíos");
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
function readEnum(r, node, path, values, artifact) {
|
|
436
|
+
const value = r.read(node, path);
|
|
437
|
+
if (typeof value === "string" && values.includes(value)) {
|
|
438
|
+
return value;
|
|
439
|
+
}
|
|
440
|
+
const field = path.split(".").pop();
|
|
441
|
+
r.invalid(artifact, `'${field}' no admite ${JSON.stringify(value)}`, `usá alguno de: ${values.join(", ")}`);
|
|
442
|
+
return null;
|
|
443
|
+
}
|
|
444
|
+
function readBoolean(r, node, path, artifact) {
|
|
445
|
+
const value = r.read(node, path);
|
|
446
|
+
if (typeof value === "boolean")
|
|
447
|
+
return value;
|
|
448
|
+
const field = path.split(".").pop();
|
|
449
|
+
r.invalid(artifact, `'${field}' debe ser booleano`, `escribí '${field}': true o false`);
|
|
450
|
+
return null;
|
|
451
|
+
}
|
|
452
|
+
function readSchemaId(r, node, path, artifact) {
|
|
453
|
+
const value = r.read(node, path);
|
|
454
|
+
if (value === null)
|
|
455
|
+
return;
|
|
456
|
+
if (!isNonEmptyString(value) || !SCHEMA_ID_RE.test(value)) {
|
|
457
|
+
const field = path.split(".").pop();
|
|
458
|
+
r.invalid(artifact, `'${field}' debe ser un id de schema o null: ${JSON.stringify(value)}`, `usá la forma '${CAPABILITY_GRAMMAR.schemaId}', p. ej. 'workline.design-manifest/v1'`);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
function done(r, value) {
|
|
462
|
+
return { ok: r.failures.length === 0, failures: r.failures, touched: r.touched, value };
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* How an improvement points at the descriptor it satisfies — and nothing more.
|
|
466
|
+
*
|
|
467
|
+
* The Agent Skills standard gives a skill directory `SKILL.md` plus whatever
|
|
468
|
+
* files it wants, and `metadata` as a flat string→string map. That is enough:
|
|
469
|
+
* one namespaced scalar key holds a RELATIVE path to a JSON file inside the
|
|
470
|
+
* skill's own directory, sealed with the digest of its bytes.
|
|
471
|
+
*
|
|
472
|
+
* Everything about that shape is defensive. Relative and confined, because the
|
|
473
|
+
* value crosses a trust boundary — it is authored by whoever wrote the skill.
|
|
474
|
+
* Sealed, because a descriptor that changes under a pinned selection is exactly
|
|
475
|
+
* the staleness the receipt has to be able to name. Scalar, because nested YAML
|
|
476
|
+
* would be a second frontmatter dialect for one field. And a locator LOCATES: it
|
|
477
|
+
* fixes no binding, creates no alias and grants no identity — resolving it only
|
|
478
|
+
* tells you which contract the skill claims to satisfy, a claim the loader then
|
|
479
|
+
* has to verify.
|
|
480
|
+
*/
|
|
481
|
+
export const CAPABILITY_DESCRIPTOR_METADATA_KEY = "workline-capability-descriptor";
|
|
482
|
+
const LOCATOR_RE = new RegExp(`^(.+)#sha256=(${CAPABILITY_GRAMMAR.digest})$`);
|
|
483
|
+
export function parseDescriptorLocator(raw) {
|
|
484
|
+
const reject = (message, action) => ({
|
|
485
|
+
ok: false,
|
|
486
|
+
code: "CAPABILITY_LOCATOR_INVALID",
|
|
487
|
+
message,
|
|
488
|
+
action,
|
|
489
|
+
});
|
|
490
|
+
if (!isNonEmptyString(raw)) {
|
|
491
|
+
return reject(`'${CAPABILITY_DESCRIPTOR_METADATA_KEY}' debe ser un string no vacío`, `escribí '${CAPABILITY_DESCRIPTOR_METADATA_KEY}: "<ruta-relativa>.json#sha256=<64-hex>"'`);
|
|
492
|
+
}
|
|
493
|
+
const match = raw.trim().match(LOCATOR_RE);
|
|
494
|
+
if (match?.[1] === undefined || match[2] === undefined) {
|
|
495
|
+
return reject(`el locator '${raw}' no tiene la forma '<ruta-relativa>.json#sha256=<64-hex>'`, "agregá el sello '#sha256=' con el digest hex en minúsculas de 64 caracteres");
|
|
496
|
+
}
|
|
497
|
+
const safe = checkSafeRelativePath(match[1]);
|
|
498
|
+
if (!safe.ok) {
|
|
499
|
+
return reject(`la ruta del locator '${match[1]}' ${safe.why}`, "usá una ruta relativa dentro del directorio de la skill, sin '..' ni raíz absoluta");
|
|
500
|
+
}
|
|
501
|
+
if (!safe.path.endsWith(".json")) {
|
|
502
|
+
return reject(`la ruta del locator '${safe.path}' no apunta a un archivo .json`, "el descriptor se publica como JSON: apuntá al archivo .json de la skill");
|
|
503
|
+
}
|
|
504
|
+
return { ok: true, locator: { path: safe.path, digest: match[2] } };
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Verify the bytes a locator points at, in the order that matters.
|
|
508
|
+
*
|
|
509
|
+
* Seal first, then shape. Checking the digest before parsing means a descriptor
|
|
510
|
+
* that changed under a pinned selection is rejected as STALE rather than
|
|
511
|
+
* reported as a pile of field errors from a document nobody promised — and a
|
|
512
|
+
* tampered file never reaches the parser at all. The contract version is then
|
|
513
|
+
* settled inside the validator before any other field is read, so compatibility
|
|
514
|
+
* is never inferred from a shape this CLI does not understand.
|
|
515
|
+
*
|
|
516
|
+
* Filesystem access deliberately stays out: whoever read the bytes also owns
|
|
517
|
+
* proving they came from inside the skill's own directory.
|
|
518
|
+
*/
|
|
519
|
+
export function verifyDescriptorPayload(locator, bytes) {
|
|
520
|
+
const actual = createHash("sha256").update(bytes, "utf8").digest("hex");
|
|
521
|
+
if (actual !== locator.digest) {
|
|
522
|
+
return {
|
|
523
|
+
ok: false,
|
|
524
|
+
code: "CAPABILITY_DESCRIPTOR_DIGEST_MISMATCH",
|
|
525
|
+
message: `'${locator.path}' sella ${locator.digest} y sus bytes dan ${actual}`,
|
|
526
|
+
action: "actualizá el digest del locator, o restaurá el descriptor que ese sello describe",
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
let parsed;
|
|
530
|
+
try {
|
|
531
|
+
parsed = JSON.parse(bytes);
|
|
532
|
+
}
|
|
533
|
+
catch {
|
|
534
|
+
return {
|
|
535
|
+
ok: false,
|
|
536
|
+
code: "CAPABILITY_DESCRIPTOR_NOT_JSON",
|
|
537
|
+
message: `'${locator.path}' no es JSON válido`,
|
|
538
|
+
action: "publicá el descriptor como un único objeto JSON",
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
const validation = validateCapabilityDescriptor(parsed, locator.path);
|
|
542
|
+
if (!validation.ok || validation.value === null) {
|
|
543
|
+
const first = validation.failures[0];
|
|
544
|
+
return {
|
|
545
|
+
ok: false,
|
|
546
|
+
code: first?.code ?? "CAPABILITY_DESCRIPTOR_INVALID",
|
|
547
|
+
message: first?.message ?? `'${locator.path}' no cumple el contrato`,
|
|
548
|
+
action: first?.action ?? "corregí el descriptor contra el schema publicado",
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
return { ok: true, descriptor: validation.value };
|
|
552
|
+
}
|
|
553
|
+
//# sourceMappingURL=descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../../src/domain/capability/descriptor.ts"],"names":[],"mappings":"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"}
|