@agentxm/extension-model 0.28.4 → 0.28.5
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/dist/src/unstable/specifications/conformance.d.ts +62 -0
- package/dist/src/unstable/specifications/conformance.js +137 -0
- package/dist/src/unstable/specifications/contract.d.ts +225 -0
- package/dist/src/unstable/specifications/contract.js +115 -0
- package/dist/src/unstable/specifications/decode.d.ts +58 -0
- package/dist/src/unstable/specifications/decode.js +87 -0
- package/dist/src/unstable/specifications/index.d.ts +10 -0
- package/dist/src/unstable/specifications/index.js +10 -0
- package/dist/src/unstable/specifications/shared-goals.d.ts +36 -0
- package/dist/src/unstable/specifications/shared-goals.js +36 -0
- package/package.json +62 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Corpus conformance for executable specifications.
|
|
3
|
+
*
|
|
4
|
+
* A pure check over already-decoded metadata: it establishes that a
|
|
5
|
+
* specification corpus has the contract's form and linkage — vocabulary,
|
|
6
|
+
* identity, goal references, boundary rationale, lineage, and product
|
|
7
|
+
* language. A clean result never establishes that the accepted obligations
|
|
8
|
+
* are the right ones; that judgment stays with set review and the acceptance
|
|
9
|
+
* decision.
|
|
10
|
+
*
|
|
11
|
+
* Both repositories run this check over their own corpus. Shared goal
|
|
12
|
+
* identities come from the installed contract, so a specification that names
|
|
13
|
+
* a shared goal the installed release cohort does not register is a dangling
|
|
14
|
+
* cross-repository reference and fails here.
|
|
15
|
+
*
|
|
16
|
+
* @experimental This API is unstable and may change without notice.
|
|
17
|
+
*/
|
|
18
|
+
import { type ExecutionBinding, type ProductGoalRegistry, type SpecificationMetadata } from "./contract.js";
|
|
19
|
+
export interface ConformanceIssue {
|
|
20
|
+
readonly severity: "error" | "warning";
|
|
21
|
+
/** Repository-relative source the issue is anchored to. */
|
|
22
|
+
readonly source: string;
|
|
23
|
+
readonly message: string;
|
|
24
|
+
}
|
|
25
|
+
export interface CorpusSpecification {
|
|
26
|
+
/** Repository-relative source path of the specification file. */
|
|
27
|
+
readonly source: string;
|
|
28
|
+
readonly metadata: SpecificationMetadata;
|
|
29
|
+
}
|
|
30
|
+
export interface CorpusExecutionBinding {
|
|
31
|
+
/** Repository-relative source path of the boundary execution. */
|
|
32
|
+
readonly source: string;
|
|
33
|
+
readonly binding: ExecutionBinding;
|
|
34
|
+
}
|
|
35
|
+
export interface CorpusInput {
|
|
36
|
+
readonly specifications: readonly CorpusSpecification[];
|
|
37
|
+
/** The repository's local product-goal registry. */
|
|
38
|
+
readonly localGoals: ProductGoalRegistry;
|
|
39
|
+
/** Source path reported for local-registry issues. */
|
|
40
|
+
readonly localGoalsSource: string;
|
|
41
|
+
/** Shared goals from the installed contract. Defaults to `sharedProductGoals`. */
|
|
42
|
+
readonly sharedGoals?: ProductGoalRegistry;
|
|
43
|
+
readonly executionBindings?: readonly CorpusExecutionBinding[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Whether at least one declared method produces runner evidence. A method
|
|
47
|
+
* set made only of unverifiable methods is reported as unverified by the
|
|
48
|
+
* harness, never as passing.
|
|
49
|
+
*/
|
|
50
|
+
export declare const isExecutableMethodSet: (methods: readonly string[]) => boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Lints a title or statement for implementation vocabulary. Specification
|
|
53
|
+
* text describes conditions and observable results; it never names
|
|
54
|
+
* handlers, services, Layers, private functions, or mock interactions.
|
|
55
|
+
*/
|
|
56
|
+
export declare const lintProductLanguage: (text: string) => string | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Checks one corpus for contract form and linkage. Issues are ordered by
|
|
59
|
+
* discovery; callers decide whether warnings block.
|
|
60
|
+
*/
|
|
61
|
+
export declare const checkSpecificationCorpus: (input: CorpusInput) => readonly ConformanceIssue[];
|
|
62
|
+
//# sourceMappingURL=conformance.d.ts.map
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Corpus conformance for executable specifications.
|
|
3
|
+
*
|
|
4
|
+
* A pure check over already-decoded metadata: it establishes that a
|
|
5
|
+
* specification corpus has the contract's form and linkage — vocabulary,
|
|
6
|
+
* identity, goal references, boundary rationale, lineage, and product
|
|
7
|
+
* language. A clean result never establishes that the accepted obligations
|
|
8
|
+
* are the right ones; that judgment stays with set review and the acceptance
|
|
9
|
+
* decision.
|
|
10
|
+
*
|
|
11
|
+
* Both repositories run this check over their own corpus. Shared goal
|
|
12
|
+
* identities come from the installed contract, so a specification that names
|
|
13
|
+
* a shared goal the installed release cohort does not register is a dangling
|
|
14
|
+
* cross-repository reference and fails here.
|
|
15
|
+
*
|
|
16
|
+
* @experimental This API is unstable and may change without notice.
|
|
17
|
+
*/
|
|
18
|
+
import { IDENTITY_SEGMENT_PATTERN, UNVERIFIABLE_SPECIFICATION_METHODS, } from "./contract.js";
|
|
19
|
+
import { sharedProductGoals } from "./shared-goals.js";
|
|
20
|
+
/** Words that identify implementation vocabulary leaking into product language. */
|
|
21
|
+
const IMPLEMENTATION_WORDS = new Set([
|
|
22
|
+
"layer",
|
|
23
|
+
"handler",
|
|
24
|
+
"mock",
|
|
25
|
+
"stub",
|
|
26
|
+
"middleware",
|
|
27
|
+
"refactor",
|
|
28
|
+
]);
|
|
29
|
+
const CAMEL_CASE_TOKEN = /\b[a-z]+[A-Z][A-Za-z]*\b/;
|
|
30
|
+
/**
|
|
31
|
+
* Whether at least one declared method produces runner evidence. A method
|
|
32
|
+
* set made only of unverifiable methods is reported as unverified by the
|
|
33
|
+
* harness, never as passing.
|
|
34
|
+
*/
|
|
35
|
+
export const isExecutableMethodSet = (methods) => methods.some((method) => !UNVERIFIABLE_SPECIFICATION_METHODS.some((entry) => entry === method));
|
|
36
|
+
/**
|
|
37
|
+
* Lints a title or statement for implementation vocabulary. Specification
|
|
38
|
+
* text describes conditions and observable results; it never names
|
|
39
|
+
* handlers, services, Layers, private functions, or mock interactions.
|
|
40
|
+
*/
|
|
41
|
+
export const lintProductLanguage = (text) => {
|
|
42
|
+
if (CAMEL_CASE_TOKEN.test(text)) {
|
|
43
|
+
return `contains an implementation-style camelCase token: "${text}"`;
|
|
44
|
+
}
|
|
45
|
+
for (const word of text.toLowerCase().split(/[^a-z]+/)) {
|
|
46
|
+
if (IMPLEMENTATION_WORDS.has(word)) {
|
|
47
|
+
return `contains implementation vocabulary ("${word}"): "${text}"`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
};
|
|
52
|
+
const error = (source, message) => ({
|
|
53
|
+
severity: "error",
|
|
54
|
+
source,
|
|
55
|
+
message,
|
|
56
|
+
});
|
|
57
|
+
const warning = (source, message) => ({
|
|
58
|
+
severity: "warning",
|
|
59
|
+
source,
|
|
60
|
+
message,
|
|
61
|
+
});
|
|
62
|
+
/**
|
|
63
|
+
* Checks one corpus for contract form and linkage. Issues are ordered by
|
|
64
|
+
* discovery; callers decide whether warnings block.
|
|
65
|
+
*/
|
|
66
|
+
export const checkSpecificationCorpus = (input) => {
|
|
67
|
+
const issues = [];
|
|
68
|
+
const sharedGoals = input.sharedGoals ?? sharedProductGoals;
|
|
69
|
+
for (const id of Object.keys(input.localGoals)) {
|
|
70
|
+
if (!IDENTITY_SEGMENT_PATTERN.test(id)) {
|
|
71
|
+
issues.push(error(input.localGoalsSource, `product-goal id \`${id}\` must be a lowercase kebab identifier`));
|
|
72
|
+
}
|
|
73
|
+
if (Object.hasOwn(sharedGoals, id)) {
|
|
74
|
+
issues.push(error(input.localGoalsSource, `product goal \`${id}\` is a shared goal; reference the shared identity instead of redefining it locally`));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const registeredGoals = new Map();
|
|
78
|
+
for (const registry of [sharedGoals, input.localGoals]) {
|
|
79
|
+
for (const [id, definition] of Object.entries(registry)) {
|
|
80
|
+
registeredGoals.set(id, { status: definition.status ?? "active" });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const byRequirement = new Map();
|
|
84
|
+
for (const specification of input.specifications) {
|
|
85
|
+
const existing = byRequirement.get(specification.metadata.requirement);
|
|
86
|
+
if (existing !== undefined) {
|
|
87
|
+
issues.push(error(specification.source, `duplicate requirement identity \`${specification.metadata.requirement}\` (also declared in ${existing.source})`));
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
byRequirement.set(specification.metadata.requirement, specification);
|
|
91
|
+
}
|
|
92
|
+
const referencedGoals = new Set();
|
|
93
|
+
for (const { source, metadata } of input.specifications) {
|
|
94
|
+
for (const goal of metadata.goals) {
|
|
95
|
+
referencedGoals.add(goal);
|
|
96
|
+
const registered = registeredGoals.get(goal);
|
|
97
|
+
if (registered === undefined) {
|
|
98
|
+
issues.push(error(source, `references unregistered product goal \`${goal}\``));
|
|
99
|
+
}
|
|
100
|
+
else if (registered.status === "retired") {
|
|
101
|
+
issues.push(error(source, `references retired product goal \`${goal}\`; the specification is a retirement candidate`));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
for (const superseded of metadata.supersedes) {
|
|
105
|
+
if (byRequirement.has(superseded)) {
|
|
106
|
+
issues.push(error(source, `supersedes \`${superseded}\`, which is still present in the corpus; retire the predecessor in the same change`));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const titleFinding = lintProductLanguage(metadata.title);
|
|
110
|
+
if (titleFinding !== undefined) {
|
|
111
|
+
issues.push(error(source, `title ${titleFinding}`));
|
|
112
|
+
}
|
|
113
|
+
const statementFinding = lintProductLanguage(metadata.statement);
|
|
114
|
+
if (statementFinding !== undefined) {
|
|
115
|
+
issues.push(error(source, `statement ${statementFinding}`));
|
|
116
|
+
}
|
|
117
|
+
if (!isExecutableMethodSet(metadata.methods)) {
|
|
118
|
+
issues.push(warning(source, `declares only unverifiable methods (${metadata.methods.join(", ")}); the harness reports this specification as unverified`));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const [id, definition] of registeredGoals) {
|
|
122
|
+
if (definition.status === "active" &&
|
|
123
|
+
!referencedGoals.has(id) &&
|
|
124
|
+
input.specifications.length > 0) {
|
|
125
|
+
issues.push(warning(input.localGoalsSource, `active product goal \`${id}\` has no referencing specification (missing coverage or a dead goal)`));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
for (const { source, binding } of input.executionBindings ?? []) {
|
|
129
|
+
for (const requirement of binding.requirements) {
|
|
130
|
+
if (!byRequirement.has(requirement)) {
|
|
131
|
+
issues.push(error(source, `execution binding references unknown requirement \`${requirement}\``));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return issues;
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=conformance.js.map
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared executable-specification contract.
|
|
3
|
+
*
|
|
4
|
+
* One metadata contract, one classification lens, one set of controlled
|
|
5
|
+
* vocabularies, and one shared product-goal registry for every AgentXM
|
|
6
|
+
* specification corpus. Each repository keeps its own specification files,
|
|
7
|
+
* local product goals, and local placement rules; only this contract and the
|
|
8
|
+
* shared goal identities cross the repository boundary.
|
|
9
|
+
*
|
|
10
|
+
* Metadata is data. Every specification file exports one `specification`
|
|
11
|
+
* constant built with `defineSpecification`: a literal object carrying only
|
|
12
|
+
* the cross-method information that discovery, conformance, and reporting
|
|
13
|
+
* need. It never wraps or replaces native test-framework constructs, and
|
|
14
|
+
* catalog tooling reads it statically without executing the specification.
|
|
15
|
+
*
|
|
16
|
+
* @experimental This API is unstable and may change without notice.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* The review lens a specification is classified by. Classification selects
|
|
20
|
+
* the review expertise and quality criteria the obligation most needs; it
|
|
21
|
+
* does not determine priority, acceptance, subject, or verification method.
|
|
22
|
+
*
|
|
23
|
+
* - `functional`: responses, transformations, rules, and observable
|
|
24
|
+
* capabilities;
|
|
25
|
+
* - `quality`: a measurable degree such as performance, reliability,
|
|
26
|
+
* security, or installability, named by `characteristic`;
|
|
27
|
+
* - `constraint`: a genuine restriction on solution, environment,
|
|
28
|
+
* technology, or operation;
|
|
29
|
+
* - `external-conformance`: an obligation adopted from a named law,
|
|
30
|
+
* standard, contract, or interface;
|
|
31
|
+
* - `human-factors`: capabilities and qualities arising from people, tasks,
|
|
32
|
+
* accessibility, ergonomics, or context of use; and
|
|
33
|
+
* - `process`: an obligation on development, delivery, operation, support,
|
|
34
|
+
* migration, or retirement.
|
|
35
|
+
*/
|
|
36
|
+
export type SpecificationClass = "functional" | "quality" | "constraint" | "external-conformance" | "human-factors" | "process";
|
|
37
|
+
export declare const SPECIFICATION_CLASSES: readonly SpecificationClass[];
|
|
38
|
+
/**
|
|
39
|
+
* How a specification participates in the product contract and its reading
|
|
40
|
+
* paths. Experience specifications describe tasks in product language,
|
|
41
|
+
* interface specifications state public machine-consumable contracts, and
|
|
42
|
+
* supporting specifications state subordinate system or engineering
|
|
43
|
+
* obligations.
|
|
44
|
+
*/
|
|
45
|
+
export type SpecificationRole = "experience" | "interface" | "supporting";
|
|
46
|
+
export declare const SPECIFICATION_ROLES: readonly SpecificationRole[];
|
|
47
|
+
/**
|
|
48
|
+
* Whether the obligation is normative. A `candidate` records a proposed
|
|
49
|
+
* obligation with its sources and is never authority; `accepted` records an
|
|
50
|
+
* obligation the declared acceptance authority has explicitly accepted.
|
|
51
|
+
* Execution evidence never changes status.
|
|
52
|
+
*/
|
|
53
|
+
export type SpecificationStatus = "candidate" | "accepted";
|
|
54
|
+
export declare const SPECIFICATION_STATUSES: readonly SpecificationStatus[];
|
|
55
|
+
/**
|
|
56
|
+
* Where the specification's default execution observes the system.
|
|
57
|
+
* Additional boundary-specific executions bind their own evidence to the
|
|
58
|
+
* same requirement identity.
|
|
59
|
+
*/
|
|
60
|
+
export type ExecutionBoundary = "memory" | "process" | "binary" | "packed-artifact" | "installed" | "platform" | "published-artifact" | "deployed" | "repository";
|
|
61
|
+
export declare const EXECUTION_BOUNDARIES: readonly ExecutionBoundary[];
|
|
62
|
+
/** When this specification's evidence is selected by default. */
|
|
63
|
+
export type ExecutionSelection = "per-change" | "platform-matrix" | "scheduled" | "release-candidate" | "post-deployment";
|
|
64
|
+
export declare const EXECUTION_SELECTIONS: readonly ExecutionSelection[];
|
|
65
|
+
/**
|
|
66
|
+
* Known testing methods. The vocabulary is extensible: a method not listed
|
|
67
|
+
* here is accepted when it is a lowercase kebab identifier, so a new or
|
|
68
|
+
* combined method never needs a contract change before use.
|
|
69
|
+
*/
|
|
70
|
+
export declare const KNOWN_SPECIFICATION_METHODS: readonly ["example", "decision-table", "property", "model", "contract", "conformance-matrix", "golden-output", "measurement", "static", "smoke", "manual", "review"];
|
|
71
|
+
export type KnownSpecificationMethod = (typeof KNOWN_SPECIFICATION_METHODS)[number];
|
|
72
|
+
/**
|
|
73
|
+
* Methods whose evidence is produced by a person rather than a runner. A
|
|
74
|
+
* specification whose methods are all unverifiable is reported as unverified
|
|
75
|
+
* by the harness; it is never reported as passing.
|
|
76
|
+
*/
|
|
77
|
+
export declare const UNVERIFIABLE_SPECIFICATION_METHODS: readonly KnownSpecificationMethod[];
|
|
78
|
+
/**
|
|
79
|
+
* Known quality characteristics. Required for `quality`-class specifications
|
|
80
|
+
* and permitted elsewhere; extensible under the same identifier rule as
|
|
81
|
+
* methods.
|
|
82
|
+
*/
|
|
83
|
+
export declare const KNOWN_QUALITY_CHARACTERISTICS: readonly ["installability", "compatibility", "performance", "security", "privacy", "reliability", "availability", "maintainability", "observability", "accessibility", "usability"];
|
|
84
|
+
export type KnownQualityCharacteristic = (typeof KNOWN_QUALITY_CHARACTERISTICS)[number];
|
|
85
|
+
/** Segments of a requirement identity or product-goal identity. */
|
|
86
|
+
export declare const IDENTITY_SEGMENT_PATTERN: RegExp;
|
|
87
|
+
/** A declared blind spot of one specification and the condition that retires it. */
|
|
88
|
+
export interface SpecificationLimitation {
|
|
89
|
+
/** What the specification's evidence cannot establish, in product language. */
|
|
90
|
+
readonly limitation: string;
|
|
91
|
+
/** The observable condition under which this limitation is removed. */
|
|
92
|
+
readonly retirementCondition: string;
|
|
93
|
+
}
|
|
94
|
+
export interface SpecificationMetadata {
|
|
95
|
+
/**
|
|
96
|
+
* Stable requirement identity: lowercase kebab path segments joined by `/`,
|
|
97
|
+
* for example `cli/install/realizes-direct-intent`. Declared here, not
|
|
98
|
+
* derived from the filesystem; repository policy keeps it equal to the
|
|
99
|
+
* file's path under `specifications/`, so moving or renaming a file is an
|
|
100
|
+
* identity change — a requirements decision.
|
|
101
|
+
*/
|
|
102
|
+
readonly requirement: string;
|
|
103
|
+
/** Product-language title, readable without the source. */
|
|
104
|
+
readonly title: string;
|
|
105
|
+
/**
|
|
106
|
+
* The normative statement: obligated subject, condition or trigger, and
|
|
107
|
+
* the required or prohibited outcome, in product language. This sentence
|
|
108
|
+
* is the obligation; native tests are its reportable scenarios.
|
|
109
|
+
*/
|
|
110
|
+
readonly statement: string;
|
|
111
|
+
/** The review lens this specification is classified by. */
|
|
112
|
+
readonly class: SpecificationClass;
|
|
113
|
+
/**
|
|
114
|
+
* The quality characteristic a `quality` specification measures, or the
|
|
115
|
+
* human-factors quality a `human-factors` specification names. Required
|
|
116
|
+
* for `quality`; optional otherwise.
|
|
117
|
+
*/
|
|
118
|
+
readonly characteristic?: string;
|
|
119
|
+
/** The specification's primary role in the product contract. */
|
|
120
|
+
readonly role: SpecificationRole;
|
|
121
|
+
/**
|
|
122
|
+
* Registered product-goal identities this specification supports. Every
|
|
123
|
+
* entry must exist, active, in the shared registry or the repository's
|
|
124
|
+
* local registry.
|
|
125
|
+
*/
|
|
126
|
+
readonly goals: readonly [string, ...string[]];
|
|
127
|
+
/** Whether the obligation is a candidate or accepted authority. */
|
|
128
|
+
readonly status: SpecificationStatus;
|
|
129
|
+
/** Observation boundary of the default execution. Defaults to `memory`. */
|
|
130
|
+
readonly boundary?: ExecutionBoundary;
|
|
131
|
+
/**
|
|
132
|
+
* Why this specification observes a boundary other than memory: the
|
|
133
|
+
* evidence that boundary supplies which an in-memory run cannot. Required
|
|
134
|
+
* whenever `boundary` is not `memory`.
|
|
135
|
+
*/
|
|
136
|
+
readonly boundaryRationale?: string;
|
|
137
|
+
/** Testing methods the specification actually uses. */
|
|
138
|
+
readonly methods: readonly [string, ...string[]];
|
|
139
|
+
/** Default evidence-selection policy. Defaults to `per-change`. */
|
|
140
|
+
readonly selection?: ExecutionSelection;
|
|
141
|
+
/**
|
|
142
|
+
* Sources this obligation was derived from: predecessor requirement
|
|
143
|
+
* identities, prior specification identities, tests that witnessed the
|
|
144
|
+
* behavior, or surfaces that supplied its conditions. Empty when the
|
|
145
|
+
* specification is an original source.
|
|
146
|
+
*/
|
|
147
|
+
readonly derivedFrom: readonly string[];
|
|
148
|
+
/**
|
|
149
|
+
* Identities this specification replaces as authority. A superseded
|
|
150
|
+
* identity is retired in the same change that accepts its successor and
|
|
151
|
+
* must not remain present in the corpus.
|
|
152
|
+
*/
|
|
153
|
+
readonly supersedes: readonly string[];
|
|
154
|
+
/**
|
|
155
|
+
* Conditions the obligation presumes and its evidence does not establish.
|
|
156
|
+
* An empty list records that none were found after review; `"unknown"`
|
|
157
|
+
* records that assumptions have not been assessed.
|
|
158
|
+
*/
|
|
159
|
+
readonly assumptions: readonly string[] | "unknown";
|
|
160
|
+
/**
|
|
161
|
+
* Unresolved questions about the obligation's meaning, scope, or subject.
|
|
162
|
+
* An empty list records that none remain; `"unknown"` records that the
|
|
163
|
+
* specification has not been reviewed for open questions.
|
|
164
|
+
*/
|
|
165
|
+
readonly openQuestions: readonly string[] | "unknown";
|
|
166
|
+
/** Declared blind spots of this specification's evidence. */
|
|
167
|
+
readonly limitations?: readonly [SpecificationLimitation, ...SpecificationLimitation[]];
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Declares one specification's metadata. Identity function: it exists to type
|
|
171
|
+
* the literal and to give discovery a stable syntactic anchor.
|
|
172
|
+
*/
|
|
173
|
+
export declare const defineSpecification: <const M extends SpecificationMetadata>(metadata: M) => M;
|
|
174
|
+
/** One registered product goal. */
|
|
175
|
+
export interface ProductGoalDefinition {
|
|
176
|
+
/** One-sentence statement of the desired outcome this goal names. */
|
|
177
|
+
readonly outcome: string;
|
|
178
|
+
/**
|
|
179
|
+
* Retired goals stay registered so specifications referencing them are
|
|
180
|
+
* flagged as retirement candidates instead of silently orphaned.
|
|
181
|
+
*/
|
|
182
|
+
readonly status?: "active" | "retired";
|
|
183
|
+
}
|
|
184
|
+
export type ProductGoalRegistry = Readonly<Record<string, ProductGoalDefinition>>;
|
|
185
|
+
/**
|
|
186
|
+
* Declares a product-goal registry. Identity function with the same
|
|
187
|
+
* literal-only discipline as `defineSpecification`.
|
|
188
|
+
*/
|
|
189
|
+
export declare const defineProductGoals: <const R extends ProductGoalRegistry>(registry: R) => R;
|
|
190
|
+
/**
|
|
191
|
+
* Binds a boundary-specific execution (for example an end-to-end test file)
|
|
192
|
+
* to the requirement identities it provides evidence for. The execution is
|
|
193
|
+
* evidence, never a second authority: it must not state new requirements.
|
|
194
|
+
*/
|
|
195
|
+
export interface ExecutionBinding {
|
|
196
|
+
/** Requirement identities this execution binds evidence to. */
|
|
197
|
+
readonly requirements: readonly [string, ...string[]];
|
|
198
|
+
/** Observation boundary of this execution. */
|
|
199
|
+
readonly boundary: ExecutionBoundary;
|
|
200
|
+
/**
|
|
201
|
+
* The boundary-specific reason this execution exists beyond the in-memory
|
|
202
|
+
* evidence — required so boundary scenarios never silently duplicate
|
|
203
|
+
* in-memory scenarios.
|
|
204
|
+
*/
|
|
205
|
+
readonly rationale: string;
|
|
206
|
+
}
|
|
207
|
+
/** Declares a boundary-specific execution binding. Identity function. */
|
|
208
|
+
export declare const defineExecutionBinding: <const B extends ExecutionBinding>(binding: B) => B;
|
|
209
|
+
/**
|
|
210
|
+
* One static verification gate whose result is bound to the owning
|
|
211
|
+
* specification's requirement identity. Bound evidence supports the owning
|
|
212
|
+
* specification; it never replaces it and never states a new requirement.
|
|
213
|
+
*/
|
|
214
|
+
export interface BoundEvidenceGate {
|
|
215
|
+
/** The static gate, named by the verification surface that runs it. */
|
|
216
|
+
readonly gate: string;
|
|
217
|
+
/** What the gate verifies for this requirement, in product language. */
|
|
218
|
+
readonly verifies: string;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Declares the static gates bound to a specification as evidence. Exported
|
|
222
|
+
* as `boundEvidence` beside the `specification` constant. Identity function.
|
|
223
|
+
*/
|
|
224
|
+
export declare const defineBoundEvidence: <const E extends readonly [BoundEvidenceGate, ...BoundEvidenceGate[]]>(evidence: E) => E;
|
|
225
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared executable-specification contract.
|
|
3
|
+
*
|
|
4
|
+
* One metadata contract, one classification lens, one set of controlled
|
|
5
|
+
* vocabularies, and one shared product-goal registry for every AgentXM
|
|
6
|
+
* specification corpus. Each repository keeps its own specification files,
|
|
7
|
+
* local product goals, and local placement rules; only this contract and the
|
|
8
|
+
* shared goal identities cross the repository boundary.
|
|
9
|
+
*
|
|
10
|
+
* Metadata is data. Every specification file exports one `specification`
|
|
11
|
+
* constant built with `defineSpecification`: a literal object carrying only
|
|
12
|
+
* the cross-method information that discovery, conformance, and reporting
|
|
13
|
+
* need. It never wraps or replaces native test-framework constructs, and
|
|
14
|
+
* catalog tooling reads it statically without executing the specification.
|
|
15
|
+
*
|
|
16
|
+
* @experimental This API is unstable and may change without notice.
|
|
17
|
+
*/
|
|
18
|
+
export const SPECIFICATION_CLASSES = [
|
|
19
|
+
"functional",
|
|
20
|
+
"quality",
|
|
21
|
+
"constraint",
|
|
22
|
+
"external-conformance",
|
|
23
|
+
"human-factors",
|
|
24
|
+
"process",
|
|
25
|
+
];
|
|
26
|
+
export const SPECIFICATION_ROLES = [
|
|
27
|
+
"experience",
|
|
28
|
+
"interface",
|
|
29
|
+
"supporting",
|
|
30
|
+
];
|
|
31
|
+
export const SPECIFICATION_STATUSES = ["candidate", "accepted"];
|
|
32
|
+
export const EXECUTION_BOUNDARIES = [
|
|
33
|
+
"memory",
|
|
34
|
+
"process",
|
|
35
|
+
"binary",
|
|
36
|
+
"packed-artifact",
|
|
37
|
+
"installed",
|
|
38
|
+
"platform",
|
|
39
|
+
"published-artifact",
|
|
40
|
+
"deployed",
|
|
41
|
+
"repository",
|
|
42
|
+
];
|
|
43
|
+
export const EXECUTION_SELECTIONS = [
|
|
44
|
+
"per-change",
|
|
45
|
+
"platform-matrix",
|
|
46
|
+
"scheduled",
|
|
47
|
+
"release-candidate",
|
|
48
|
+
"post-deployment",
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Known testing methods. The vocabulary is extensible: a method not listed
|
|
52
|
+
* here is accepted when it is a lowercase kebab identifier, so a new or
|
|
53
|
+
* combined method never needs a contract change before use.
|
|
54
|
+
*/
|
|
55
|
+
export const KNOWN_SPECIFICATION_METHODS = [
|
|
56
|
+
"example",
|
|
57
|
+
"decision-table",
|
|
58
|
+
"property",
|
|
59
|
+
"model",
|
|
60
|
+
"contract",
|
|
61
|
+
"conformance-matrix",
|
|
62
|
+
"golden-output",
|
|
63
|
+
"measurement",
|
|
64
|
+
"static",
|
|
65
|
+
"smoke",
|
|
66
|
+
"manual",
|
|
67
|
+
"review",
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Methods whose evidence is produced by a person rather than a runner. A
|
|
71
|
+
* specification whose methods are all unverifiable is reported as unverified
|
|
72
|
+
* by the harness; it is never reported as passing.
|
|
73
|
+
*/
|
|
74
|
+
export const UNVERIFIABLE_SPECIFICATION_METHODS = [
|
|
75
|
+
"manual",
|
|
76
|
+
"review",
|
|
77
|
+
];
|
|
78
|
+
/**
|
|
79
|
+
* Known quality characteristics. Required for `quality`-class specifications
|
|
80
|
+
* and permitted elsewhere; extensible under the same identifier rule as
|
|
81
|
+
* methods.
|
|
82
|
+
*/
|
|
83
|
+
export const KNOWN_QUALITY_CHARACTERISTICS = [
|
|
84
|
+
"installability",
|
|
85
|
+
"compatibility",
|
|
86
|
+
"performance",
|
|
87
|
+
"security",
|
|
88
|
+
"privacy",
|
|
89
|
+
"reliability",
|
|
90
|
+
"availability",
|
|
91
|
+
"maintainability",
|
|
92
|
+
"observability",
|
|
93
|
+
"accessibility",
|
|
94
|
+
"usability",
|
|
95
|
+
];
|
|
96
|
+
/** Segments of a requirement identity or product-goal identity. */
|
|
97
|
+
export const IDENTITY_SEGMENT_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
98
|
+
/**
|
|
99
|
+
* Declares one specification's metadata. Identity function: it exists to type
|
|
100
|
+
* the literal and to give discovery a stable syntactic anchor.
|
|
101
|
+
*/
|
|
102
|
+
export const defineSpecification = (metadata) => metadata;
|
|
103
|
+
/**
|
|
104
|
+
* Declares a product-goal registry. Identity function with the same
|
|
105
|
+
* literal-only discipline as `defineSpecification`.
|
|
106
|
+
*/
|
|
107
|
+
export const defineProductGoals = (registry) => registry;
|
|
108
|
+
/** Declares a boundary-specific execution binding. Identity function. */
|
|
109
|
+
export const defineExecutionBinding = (binding) => binding;
|
|
110
|
+
/**
|
|
111
|
+
* Declares the static gates bound to a specification as evidence. Exported
|
|
112
|
+
* as `boundEvidence` beside the `specification` constant. Identity function.
|
|
113
|
+
*/
|
|
114
|
+
export const defineBoundEvidence = (evidence) => evidence;
|
|
115
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decoders for the shared specification contract.
|
|
3
|
+
*
|
|
4
|
+
* Catalog tooling extracts each literal statically; result adapters read the
|
|
5
|
+
* exported constant at run time. Both decode the unknown value through these
|
|
6
|
+
* schemas so every corpus applies one vocabulary with one set of messages.
|
|
7
|
+
*
|
|
8
|
+
* @experimental This API is unstable and may change without notice.
|
|
9
|
+
*/
|
|
10
|
+
import * as Schema from "effect/Schema";
|
|
11
|
+
import { type ExecutionBinding, type ProductGoalRegistry, type BoundEvidenceGate, type SpecificationMetadata } from "./contract.js";
|
|
12
|
+
export declare const SpecificationMetadataSchema: Schema.Struct<{
|
|
13
|
+
readonly requirement: Schema.String;
|
|
14
|
+
readonly title: Schema.NonEmptyString;
|
|
15
|
+
readonly statement: Schema.NonEmptyString;
|
|
16
|
+
readonly class: Schema.Literals<import("./contract.js").SpecificationClass[]>;
|
|
17
|
+
readonly characteristic: Schema.optionalKey<Schema.String>;
|
|
18
|
+
readonly role: Schema.Literals<import("./contract.js").SpecificationRole[]>;
|
|
19
|
+
readonly goals: Schema.NonEmptyArray<Schema.String>;
|
|
20
|
+
readonly status: Schema.Literals<import("./contract.js").SpecificationStatus[]>;
|
|
21
|
+
readonly boundary: Schema.optionalKey<Schema.Literals<import("./contract.js").ExecutionBoundary[]>>;
|
|
22
|
+
readonly boundaryRationale: Schema.optionalKey<Schema.NonEmptyString>;
|
|
23
|
+
readonly methods: Schema.NonEmptyArray<Schema.String>;
|
|
24
|
+
readonly selection: Schema.optionalKey<Schema.Literals<import("./contract.js").ExecutionSelection[]>>;
|
|
25
|
+
readonly derivedFrom: Schema.$Array<Schema.NonEmptyString>;
|
|
26
|
+
readonly supersedes: Schema.$Array<Schema.NonEmptyString>;
|
|
27
|
+
readonly assumptions: Schema.Union<readonly [Schema.$Array<Schema.NonEmptyString>, Schema.Literal<"unknown">]>;
|
|
28
|
+
readonly openQuestions: Schema.Union<readonly [Schema.$Array<Schema.NonEmptyString>, Schema.Literal<"unknown">]>;
|
|
29
|
+
readonly limitations: Schema.optionalKey<Schema.NonEmptyArray<Schema.Struct<{
|
|
30
|
+
readonly limitation: Schema.NonEmptyString;
|
|
31
|
+
readonly retirementCondition: Schema.NonEmptyString;
|
|
32
|
+
}>>>;
|
|
33
|
+
}>;
|
|
34
|
+
export declare const ProductGoalRegistrySchema: Schema.$Record<Schema.String, Schema.Struct<{
|
|
35
|
+
readonly outcome: Schema.NonEmptyString;
|
|
36
|
+
readonly status: Schema.optionalKey<Schema.Literals<readonly ["active", "retired"]>>;
|
|
37
|
+
}>>;
|
|
38
|
+
export declare const ExecutionBindingSchema: Schema.Struct<{
|
|
39
|
+
readonly requirements: Schema.NonEmptyArray<Schema.String>;
|
|
40
|
+
readonly boundary: Schema.Literals<import("./contract.js").ExecutionBoundary[]>;
|
|
41
|
+
readonly rationale: Schema.NonEmptyString;
|
|
42
|
+
}>;
|
|
43
|
+
export declare const BoundEvidenceSchema: Schema.NonEmptyArray<Schema.Struct<{
|
|
44
|
+
readonly gate: Schema.NonEmptyString;
|
|
45
|
+
readonly verifies: Schema.NonEmptyString;
|
|
46
|
+
}>>;
|
|
47
|
+
export type DecodeResult<T> = {
|
|
48
|
+
readonly ok: true;
|
|
49
|
+
readonly value: T;
|
|
50
|
+
} | {
|
|
51
|
+
readonly ok: false;
|
|
52
|
+
readonly issues: readonly string[];
|
|
53
|
+
};
|
|
54
|
+
export declare const decodeSpecificationMetadata: (value: unknown) => DecodeResult<SpecificationMetadata>;
|
|
55
|
+
export declare const decodeProductGoalRegistry: (value: unknown) => DecodeResult<ProductGoalRegistry>;
|
|
56
|
+
export declare const decodeExecutionBinding: (value: unknown) => DecodeResult<ExecutionBinding>;
|
|
57
|
+
export declare const decodeBoundEvidence: (value: unknown) => DecodeResult<readonly [BoundEvidenceGate, ...BoundEvidenceGate[]]>;
|
|
58
|
+
//# sourceMappingURL=decode.d.ts.map
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decoders for the shared specification contract.
|
|
3
|
+
*
|
|
4
|
+
* Catalog tooling extracts each literal statically; result adapters read the
|
|
5
|
+
* exported constant at run time. Both decode the unknown value through these
|
|
6
|
+
* schemas so every corpus applies one vocabulary with one set of messages.
|
|
7
|
+
*
|
|
8
|
+
* @experimental This API is unstable and may change without notice.
|
|
9
|
+
*/
|
|
10
|
+
import * as Result from "effect/Result";
|
|
11
|
+
import * as Schema from "effect/Schema";
|
|
12
|
+
import { formatSchemaIssuesToLines } from "../schema-issues.js";
|
|
13
|
+
import { EXECUTION_BOUNDARIES, EXECUTION_SELECTIONS, IDENTITY_SEGMENT_PATTERN, SPECIFICATION_CLASSES, SPECIFICATION_ROLES, SPECIFICATION_STATUSES, } from "./contract.js";
|
|
14
|
+
const REQUIREMENT_IDENTITY_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*(\/[a-z0-9]+(-[a-z0-9]+)*)+$/;
|
|
15
|
+
const RequirementIdentitySchema = Schema.String.pipe(Schema.check(Schema.isPattern(REQUIREMENT_IDENTITY_PATTERN, {
|
|
16
|
+
title: "Requirement identity",
|
|
17
|
+
message: "Expected two or more lowercase kebab segments joined by '/'",
|
|
18
|
+
})));
|
|
19
|
+
const IdentifierSchema = Schema.String.pipe(Schema.check(Schema.isPattern(IDENTITY_SEGMENT_PATTERN, {
|
|
20
|
+
title: "Identifier",
|
|
21
|
+
message: "Expected a lowercase kebab identifier",
|
|
22
|
+
})));
|
|
23
|
+
const SpecificationLimitationSchema = Schema.Struct({
|
|
24
|
+
limitation: Schema.NonEmptyString,
|
|
25
|
+
retirementCondition: Schema.NonEmptyString,
|
|
26
|
+
});
|
|
27
|
+
const StatedOrUnknownSchema = Schema.Union([
|
|
28
|
+
Schema.Array(Schema.NonEmptyString),
|
|
29
|
+
Schema.Literal("unknown"),
|
|
30
|
+
]);
|
|
31
|
+
const specificationClasses = SPECIFICATION_CLASSES.map((entry) => entry);
|
|
32
|
+
const specificationRoles = SPECIFICATION_ROLES.map((entry) => entry);
|
|
33
|
+
const specificationStatuses = SPECIFICATION_STATUSES.map((entry) => entry);
|
|
34
|
+
const executionBoundaries = EXECUTION_BOUNDARIES.map((entry) => entry);
|
|
35
|
+
const executionSelections = EXECUTION_SELECTIONS.map((entry) => entry);
|
|
36
|
+
export const SpecificationMetadataSchema = Schema.Struct({
|
|
37
|
+
requirement: RequirementIdentitySchema,
|
|
38
|
+
title: Schema.NonEmptyString,
|
|
39
|
+
statement: Schema.NonEmptyString,
|
|
40
|
+
class: Schema.Literals(specificationClasses),
|
|
41
|
+
characteristic: Schema.optionalKey(IdentifierSchema),
|
|
42
|
+
role: Schema.Literals(specificationRoles),
|
|
43
|
+
goals: Schema.NonEmptyArray(IdentifierSchema),
|
|
44
|
+
status: Schema.Literals(specificationStatuses),
|
|
45
|
+
boundary: Schema.optionalKey(Schema.Literals(executionBoundaries)),
|
|
46
|
+
boundaryRationale: Schema.optionalKey(Schema.NonEmptyString),
|
|
47
|
+
methods: Schema.NonEmptyArray(IdentifierSchema),
|
|
48
|
+
selection: Schema.optionalKey(Schema.Literals(executionSelections)),
|
|
49
|
+
derivedFrom: Schema.Array(Schema.NonEmptyString),
|
|
50
|
+
supersedes: Schema.Array(Schema.NonEmptyString),
|
|
51
|
+
assumptions: StatedOrUnknownSchema,
|
|
52
|
+
openQuestions: StatedOrUnknownSchema,
|
|
53
|
+
limitations: Schema.optionalKey(Schema.NonEmptyArray(SpecificationLimitationSchema)),
|
|
54
|
+
}).pipe(Schema.check(Schema.makeFilter((metadata) => metadata.class === "quality" && metadata.characteristic === undefined
|
|
55
|
+
? "A quality specification must name the characteristic it measures"
|
|
56
|
+
: undefined), Schema.makeFilter((metadata) => (metadata.boundary ?? "memory") !== "memory" && metadata.boundaryRationale === undefined
|
|
57
|
+
? "A specification observed outside memory must state the evidence that boundary supplies"
|
|
58
|
+
: undefined), Schema.makeFilter((metadata) => metadata.supersedes.some((entry) => metadata.supersedes.indexOf(entry) !== metadata.supersedes.lastIndexOf(entry))
|
|
59
|
+
? "supersedes must not repeat an identity"
|
|
60
|
+
: undefined)));
|
|
61
|
+
const ProductGoalDefinitionSchema = Schema.Struct({
|
|
62
|
+
outcome: Schema.NonEmptyString,
|
|
63
|
+
status: Schema.optionalKey(Schema.Literals(["active", "retired"])),
|
|
64
|
+
});
|
|
65
|
+
export const ProductGoalRegistrySchema = Schema.Record(IdentifierSchema, ProductGoalDefinitionSchema);
|
|
66
|
+
export const ExecutionBindingSchema = Schema.Struct({
|
|
67
|
+
requirements: Schema.NonEmptyArray(RequirementIdentitySchema),
|
|
68
|
+
boundary: Schema.Literals(executionBoundaries),
|
|
69
|
+
rationale: Schema.NonEmptyString,
|
|
70
|
+
});
|
|
71
|
+
const BoundEvidenceGateSchema = Schema.Struct({
|
|
72
|
+
gate: Schema.NonEmptyString,
|
|
73
|
+
verifies: Schema.NonEmptyString,
|
|
74
|
+
});
|
|
75
|
+
export const BoundEvidenceSchema = Schema.NonEmptyArray(BoundEvidenceGateSchema);
|
|
76
|
+
const toDecodeResult = (result) => Result.isSuccess(result)
|
|
77
|
+
? { ok: true, value: result.success }
|
|
78
|
+
: { ok: false, issues: formatSchemaIssuesToLines(result.failure.issue) };
|
|
79
|
+
const decodeMetadata = Schema.decodeUnknownResult(SpecificationMetadataSchema);
|
|
80
|
+
const decodeRegistry = Schema.decodeUnknownResult(ProductGoalRegistrySchema);
|
|
81
|
+
const decodeBinding = Schema.decodeUnknownResult(ExecutionBindingSchema);
|
|
82
|
+
const decodeEvidence = Schema.decodeUnknownResult(BoundEvidenceSchema);
|
|
83
|
+
export const decodeSpecificationMetadata = (value) => toDecodeResult(decodeMetadata(value));
|
|
84
|
+
export const decodeProductGoalRegistry = (value) => toDecodeResult(decodeRegistry(value));
|
|
85
|
+
export const decodeExecutionBinding = (value) => toDecodeResult(decodeBinding(value));
|
|
86
|
+
export const decodeBoundEvidence = (value) => toDecodeResult(decodeEvidence(value));
|
|
87
|
+
//# sourceMappingURL=decode.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Area barrel for the shared executable-specification contract.
|
|
3
|
+
*
|
|
4
|
+
* @experimental This API is unstable and may change without notice.
|
|
5
|
+
*/
|
|
6
|
+
export { type BoundEvidenceGate, EXECUTION_BOUNDARIES, EXECUTION_SELECTIONS, type ExecutionBinding, type ExecutionBoundary, type ExecutionSelection, IDENTITY_SEGMENT_PATTERN, KNOWN_QUALITY_CHARACTERISTICS, KNOWN_SPECIFICATION_METHODS, type KnownQualityCharacteristic, type KnownSpecificationMethod, type ProductGoalDefinition, type ProductGoalRegistry, SPECIFICATION_CLASSES, SPECIFICATION_ROLES, SPECIFICATION_STATUSES, type SpecificationClass, type SpecificationLimitation, type SpecificationMetadata, type SpecificationRole, type SpecificationStatus, UNVERIFIABLE_SPECIFICATION_METHODS, defineBoundEvidence, defineExecutionBinding, defineProductGoals, defineSpecification, } from "./contract.js";
|
|
7
|
+
export { BoundEvidenceSchema, ExecutionBindingSchema, ProductGoalRegistrySchema, SpecificationMetadataSchema, decodeBoundEvidence, decodeExecutionBinding, decodeProductGoalRegistry, decodeSpecificationMetadata, type DecodeResult, } from "./decode.js";
|
|
8
|
+
export { type ConformanceIssue, type CorpusExecutionBinding, type CorpusInput, type CorpusSpecification, checkSpecificationCorpus, isExecutableMethodSet, lintProductLanguage, } from "./conformance.js";
|
|
9
|
+
export { type SharedProductGoalId, sharedProductGoals } from "./shared-goals.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Area barrel for the shared executable-specification contract.
|
|
3
|
+
*
|
|
4
|
+
* @experimental This API is unstable and may change without notice.
|
|
5
|
+
*/
|
|
6
|
+
export { EXECUTION_BOUNDARIES, EXECUTION_SELECTIONS, IDENTITY_SEGMENT_PATTERN, KNOWN_QUALITY_CHARACTERISTICS, KNOWN_SPECIFICATION_METHODS, SPECIFICATION_CLASSES, SPECIFICATION_ROLES, SPECIFICATION_STATUSES, UNVERIFIABLE_SPECIFICATION_METHODS, defineBoundEvidence, defineExecutionBinding, defineProductGoals, defineSpecification, } from "./contract.js";
|
|
7
|
+
export { BoundEvidenceSchema, ExecutionBindingSchema, ProductGoalRegistrySchema, SpecificationMetadataSchema, decodeBoundEvidence, decodeExecutionBinding, decodeProductGoalRegistry, decodeSpecificationMetadata, } from "./decode.js";
|
|
8
|
+
export { checkSpecificationCorpus, isExecutableMethodSet, lintProductLanguage, } from "./conformance.js";
|
|
9
|
+
export { sharedProductGoals } from "./shared-goals.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared product goals: outcomes that more than one AgentXM repository
|
|
3
|
+
* serves. Each is registered once, here, with a stable identity; every
|
|
4
|
+
* repository's specification corpus references these identities and keeps
|
|
5
|
+
* repository-specific goals in its own local registry. A local registry must
|
|
6
|
+
* not redefine a shared identity.
|
|
7
|
+
*
|
|
8
|
+
* The registry does not restate, own, or rank the specifications that
|
|
9
|
+
* support a goal. Requirements review walks goals: a retired goal makes its
|
|
10
|
+
* referencing specifications retirement candidates, and an active goal with
|
|
11
|
+
* no referencing specification identifies missing coverage or a dead goal.
|
|
12
|
+
*
|
|
13
|
+
* @experimental This API is unstable and may change without notice.
|
|
14
|
+
*/
|
|
15
|
+
export declare const sharedProductGoals: {
|
|
16
|
+
readonly "extension-adoption": {
|
|
17
|
+
readonly outcome: "People and agents can find, install, update, and remove reusable extensions across coding agents through dependable product surfaces.";
|
|
18
|
+
};
|
|
19
|
+
readonly "trustworthy-distribution": {
|
|
20
|
+
readonly outcome: "Publishing and acquiring extensions preserves integrity, provenance, and immutable accepted resolutions.";
|
|
21
|
+
};
|
|
22
|
+
readonly "machine-automation": {
|
|
23
|
+
readonly outcome: "Machine consumers can drive AgentXM surfaces non-interactively with complete, schema-backed results separated from diagnostics.";
|
|
24
|
+
};
|
|
25
|
+
readonly "knowledge-access": {
|
|
26
|
+
readonly outcome: "People and agents can discover concepts, commands, and contracts from the surface they are already using.";
|
|
27
|
+
};
|
|
28
|
+
readonly "privacy-and-consent": {
|
|
29
|
+
readonly outcome: "Observation of product use stays within the documented data boundary and under the control of the person being observed.";
|
|
30
|
+
};
|
|
31
|
+
readonly "dependable-change-process": {
|
|
32
|
+
readonly outcome: "Changes and releases land through the governed repository process with required evidence and human approval.";
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export type SharedProductGoalId = keyof typeof sharedProductGoals;
|
|
36
|
+
//# sourceMappingURL=shared-goals.d.ts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared product goals: outcomes that more than one AgentXM repository
|
|
3
|
+
* serves. Each is registered once, here, with a stable identity; every
|
|
4
|
+
* repository's specification corpus references these identities and keeps
|
|
5
|
+
* repository-specific goals in its own local registry. A local registry must
|
|
6
|
+
* not redefine a shared identity.
|
|
7
|
+
*
|
|
8
|
+
* The registry does not restate, own, or rank the specifications that
|
|
9
|
+
* support a goal. Requirements review walks goals: a retired goal makes its
|
|
10
|
+
* referencing specifications retirement candidates, and an active goal with
|
|
11
|
+
* no referencing specification identifies missing coverage or a dead goal.
|
|
12
|
+
*
|
|
13
|
+
* @experimental This API is unstable and may change without notice.
|
|
14
|
+
*/
|
|
15
|
+
import { defineProductGoals } from "./contract.js";
|
|
16
|
+
export const sharedProductGoals = defineProductGoals({
|
|
17
|
+
"extension-adoption": {
|
|
18
|
+
outcome: "People and agents can find, install, update, and remove reusable extensions across coding agents through dependable product surfaces.",
|
|
19
|
+
},
|
|
20
|
+
"trustworthy-distribution": {
|
|
21
|
+
outcome: "Publishing and acquiring extensions preserves integrity, provenance, and immutable accepted resolutions.",
|
|
22
|
+
},
|
|
23
|
+
"machine-automation": {
|
|
24
|
+
outcome: "Machine consumers can drive AgentXM surfaces non-interactively with complete, schema-backed results separated from diagnostics.",
|
|
25
|
+
},
|
|
26
|
+
"knowledge-access": {
|
|
27
|
+
outcome: "People and agents can discover concepts, commands, and contracts from the surface they are already using.",
|
|
28
|
+
},
|
|
29
|
+
"privacy-and-consent": {
|
|
30
|
+
outcome: "Observation of product use stays within the documented data boundary and under the control of the person being observed.",
|
|
31
|
+
},
|
|
32
|
+
"dependable-change-process": {
|
|
33
|
+
outcome: "Changes and releases land through the governed repository process with required evidence and human approval.",
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=shared-goals.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentxm/extension-model",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.5",
|
|
4
4
|
"description": "Shared AgentXM extension model: identities, manifests, version constraints, and agent capabilities. Unstable and unsupported — use the axm.sh CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "FSL-1.1-MIT",
|
|
@@ -18,226 +18,287 @@
|
|
|
18
18
|
"exports": {
|
|
19
19
|
"./unstable/agent-capabilities": {
|
|
20
20
|
"types": "./dist/src/unstable/agent-capabilities/index.d.ts",
|
|
21
|
+
"axm-source": "./src/unstable/agent-capabilities/index.ts",
|
|
21
22
|
"default": "./dist/src/unstable/agent-capabilities/index.js"
|
|
22
23
|
},
|
|
23
24
|
"./unstable/agent-capabilities/catalog": {
|
|
24
25
|
"types": "./dist/src/unstable/agent-capabilities/catalog.d.ts",
|
|
26
|
+
"axm-source": "./src/unstable/agent-capabilities/catalog.ts",
|
|
25
27
|
"default": "./dist/src/unstable/agent-capabilities/catalog.js"
|
|
26
28
|
},
|
|
27
29
|
"./unstable/agent-capabilities/derive": {
|
|
28
30
|
"types": "./dist/src/unstable/agent-capabilities/derive.d.ts",
|
|
31
|
+
"axm-source": "./src/unstable/agent-capabilities/derive.ts",
|
|
29
32
|
"default": "./dist/src/unstable/agent-capabilities/derive.js"
|
|
30
33
|
},
|
|
31
34
|
"./unstable/agents/registry": {
|
|
32
35
|
"types": "./dist/src/unstable/agents/registry.d.ts",
|
|
36
|
+
"axm-source": "./src/unstable/agents/registry.ts",
|
|
33
37
|
"default": "./dist/src/unstable/agents/registry.js"
|
|
34
38
|
},
|
|
35
39
|
"./unstable/agents/types": {
|
|
36
40
|
"types": "./dist/src/unstable/agents/types.d.ts",
|
|
41
|
+
"axm-source": "./src/unstable/agents/types.ts",
|
|
37
42
|
"default": "./dist/src/unstable/agents/types.js"
|
|
38
43
|
},
|
|
39
44
|
"./unstable/date-time": {
|
|
40
45
|
"types": "./dist/src/unstable/date-time.d.ts",
|
|
46
|
+
"axm-source": "./src/unstable/date-time.ts",
|
|
41
47
|
"default": "./dist/src/unstable/date-time.js"
|
|
42
48
|
},
|
|
43
49
|
"./unstable/discovery-walk": {
|
|
44
50
|
"types": "./dist/src/unstable/discovery-walk.d.ts",
|
|
51
|
+
"axm-source": "./src/unstable/discovery-walk.ts",
|
|
45
52
|
"default": "./dist/src/unstable/discovery-walk.js"
|
|
46
53
|
},
|
|
47
54
|
"./unstable/extension-types": {
|
|
48
55
|
"types": "./dist/src/unstable/extension-types/index.d.ts",
|
|
56
|
+
"axm-source": "./src/unstable/extension-types/index.ts",
|
|
49
57
|
"default": "./dist/src/unstable/extension-types/index.js"
|
|
50
58
|
},
|
|
51
59
|
"./unstable/extension-types/schema": {
|
|
52
60
|
"types": "./dist/src/unstable/extension-types/schema.d.ts",
|
|
61
|
+
"axm-source": "./src/unstable/extension-types/schema.ts",
|
|
53
62
|
"default": "./dist/src/unstable/extension-types/schema.js"
|
|
54
63
|
},
|
|
55
64
|
"./unstable/extension-types/standards": {
|
|
56
65
|
"types": "./dist/src/unstable/extension-types/standards.d.ts",
|
|
66
|
+
"axm-source": "./src/unstable/extension-types/standards.ts",
|
|
57
67
|
"default": "./dist/src/unstable/extension-types/standards.js"
|
|
58
68
|
},
|
|
59
69
|
"./unstable/extensions": {
|
|
60
70
|
"types": "./dist/src/unstable/extensions/index.d.ts",
|
|
71
|
+
"axm-source": "./src/unstable/extensions/index.ts",
|
|
61
72
|
"default": "./dist/src/unstable/extensions/index.js"
|
|
62
73
|
},
|
|
63
74
|
"./unstable/extensions/common": {
|
|
64
75
|
"types": "./dist/src/unstable/extensions/common.d.ts",
|
|
76
|
+
"axm-source": "./src/unstable/extensions/common.ts",
|
|
65
77
|
"default": "./dist/src/unstable/extensions/common.js"
|
|
66
78
|
},
|
|
67
79
|
"./unstable/extensions/deprecation": {
|
|
68
80
|
"types": "./dist/src/unstable/extensions/deprecation.d.ts",
|
|
81
|
+
"axm-source": "./src/unstable/extensions/deprecation.ts",
|
|
69
82
|
"default": "./dist/src/unstable/extensions/deprecation.js"
|
|
70
83
|
},
|
|
71
84
|
"./unstable/extensions/fqn": {
|
|
72
85
|
"types": "./dist/src/unstable/extensions/fqn.d.ts",
|
|
86
|
+
"axm-source": "./src/unstable/extensions/fqn.ts",
|
|
73
87
|
"default": "./dist/src/unstable/extensions/fqn.js"
|
|
74
88
|
},
|
|
75
89
|
"./unstable/extensions/fqn-pattern": {
|
|
76
90
|
"types": "./dist/src/unstable/extensions/fqn-pattern.d.ts",
|
|
91
|
+
"axm-source": "./src/unstable/extensions/fqn-pattern.ts",
|
|
77
92
|
"default": "./dist/src/unstable/extensions/fqn-pattern.js"
|
|
78
93
|
},
|
|
79
94
|
"./unstable/extensions/handle": {
|
|
80
95
|
"types": "./dist/src/unstable/extensions/handle.d.ts",
|
|
96
|
+
"axm-source": "./src/unstable/extensions/handle.ts",
|
|
81
97
|
"default": "./dist/src/unstable/extensions/handle.js"
|
|
82
98
|
},
|
|
83
99
|
"./unstable/extensions/installable-types": {
|
|
84
100
|
"types": "./dist/src/unstable/extensions/installable-types.d.ts",
|
|
101
|
+
"axm-source": "./src/unstable/extensions/installable-types.ts",
|
|
85
102
|
"default": "./dist/src/unstable/extensions/installable-types.js"
|
|
86
103
|
},
|
|
87
104
|
"./unstable/extensions/license": {
|
|
88
105
|
"types": "./dist/src/unstable/extensions/license.d.ts",
|
|
106
|
+
"axm-source": "./src/unstable/extensions/license.ts",
|
|
89
107
|
"default": "./dist/src/unstable/extensions/license.js"
|
|
90
108
|
},
|
|
91
109
|
"./unstable/extensions/manifest-metadata": {
|
|
92
110
|
"types": "./dist/src/unstable/extensions/manifest-metadata.d.ts",
|
|
111
|
+
"axm-source": "./src/unstable/extensions/manifest-metadata.ts",
|
|
93
112
|
"default": "./dist/src/unstable/extensions/manifest-metadata.js"
|
|
94
113
|
},
|
|
95
114
|
"./unstable/extensions/refs/extension-ref": {
|
|
96
115
|
"types": "./dist/src/unstable/extensions/refs/extension-ref.d.ts",
|
|
116
|
+
"axm-source": "./src/unstable/extensions/refs/extension-ref.ts",
|
|
97
117
|
"default": "./dist/src/unstable/extensions/refs/extension-ref.js"
|
|
98
118
|
},
|
|
99
119
|
"./unstable/extensions/refs/hook": {
|
|
100
120
|
"types": "./dist/src/unstable/extensions/refs/hook.d.ts",
|
|
121
|
+
"axm-source": "./src/unstable/extensions/refs/hook.ts",
|
|
101
122
|
"default": "./dist/src/unstable/extensions/refs/hook.js"
|
|
102
123
|
},
|
|
103
124
|
"./unstable/extensions/refs/knowledge": {
|
|
104
125
|
"types": "./dist/src/unstable/extensions/refs/knowledge.d.ts",
|
|
126
|
+
"axm-source": "./src/unstable/extensions/refs/knowledge.ts",
|
|
105
127
|
"default": "./dist/src/unstable/extensions/refs/knowledge.js"
|
|
106
128
|
},
|
|
107
129
|
"./unstable/extensions/refs/mcp-server": {
|
|
108
130
|
"types": "./dist/src/unstable/extensions/refs/mcp-server.d.ts",
|
|
131
|
+
"axm-source": "./src/unstable/extensions/refs/mcp-server.ts",
|
|
109
132
|
"default": "./dist/src/unstable/extensions/refs/mcp-server.js"
|
|
110
133
|
},
|
|
111
134
|
"./unstable/extensions/refs/pack": {
|
|
112
135
|
"types": "./dist/src/unstable/extensions/refs/pack.d.ts",
|
|
136
|
+
"axm-source": "./src/unstable/extensions/refs/pack.ts",
|
|
113
137
|
"default": "./dist/src/unstable/extensions/refs/pack.js"
|
|
114
138
|
},
|
|
115
139
|
"./unstable/extensions/refs/ref-base": {
|
|
116
140
|
"types": "./dist/src/unstable/extensions/refs/ref-base.d.ts",
|
|
141
|
+
"axm-source": "./src/unstable/extensions/refs/ref-base.ts",
|
|
117
142
|
"default": "./dist/src/unstable/extensions/refs/ref-base.js"
|
|
118
143
|
},
|
|
119
144
|
"./unstable/extensions/refs/rule": {
|
|
120
145
|
"types": "./dist/src/unstable/extensions/refs/rule.d.ts",
|
|
146
|
+
"axm-source": "./src/unstable/extensions/refs/rule.ts",
|
|
121
147
|
"default": "./dist/src/unstable/extensions/refs/rule.js"
|
|
122
148
|
},
|
|
123
149
|
"./unstable/extensions/refs/skill": {
|
|
124
150
|
"types": "./dist/src/unstable/extensions/refs/skill.d.ts",
|
|
151
|
+
"axm-source": "./src/unstable/extensions/refs/skill.ts",
|
|
125
152
|
"default": "./dist/src/unstable/extensions/refs/skill.js"
|
|
126
153
|
},
|
|
127
154
|
"./unstable/extensions/refs/subagent": {
|
|
128
155
|
"types": "./dist/src/unstable/extensions/refs/subagent.d.ts",
|
|
156
|
+
"axm-source": "./src/unstable/extensions/refs/subagent.ts",
|
|
129
157
|
"default": "./dist/src/unstable/extensions/refs/subagent.js"
|
|
130
158
|
},
|
|
131
159
|
"./unstable/extensions/registry-source": {
|
|
132
160
|
"types": "./dist/src/unstable/extensions/registry-source.d.ts",
|
|
161
|
+
"axm-source": "./src/unstable/extensions/registry-source.ts",
|
|
133
162
|
"default": "./dist/src/unstable/extensions/registry-source.js"
|
|
134
163
|
},
|
|
135
164
|
"./unstable/extensions/release-age": {
|
|
136
165
|
"types": "./dist/src/unstable/extensions/release-age.d.ts",
|
|
166
|
+
"axm-source": "./src/unstable/extensions/release-age.ts",
|
|
137
167
|
"default": "./dist/src/unstable/extensions/release-age.js"
|
|
138
168
|
},
|
|
139
169
|
"./unstable/extensions/universal-skills-dir": {
|
|
140
170
|
"types": "./dist/src/unstable/extensions/universal-skills-dir.d.ts",
|
|
171
|
+
"axm-source": "./src/unstable/extensions/universal-skills-dir.ts",
|
|
141
172
|
"default": "./dist/src/unstable/extensions/universal-skills-dir.js"
|
|
142
173
|
},
|
|
143
174
|
"./unstable/hooks/manifest-schema": {
|
|
144
175
|
"types": "./dist/src/unstable/hooks/manifest-schema.d.ts",
|
|
176
|
+
"axm-source": "./src/unstable/hooks/manifest-schema.ts",
|
|
145
177
|
"default": "./dist/src/unstable/hooks/manifest-schema.js"
|
|
146
178
|
},
|
|
147
179
|
"./unstable/knowledge": {
|
|
148
180
|
"types": "./dist/src/unstable/knowledge/index.d.ts",
|
|
181
|
+
"axm-source": "./src/unstable/knowledge/index.ts",
|
|
149
182
|
"default": "./dist/src/unstable/knowledge/index.js"
|
|
150
183
|
},
|
|
151
184
|
"./unstable/knowledge/concept-ref": {
|
|
152
185
|
"types": "./dist/src/unstable/knowledge/concept-ref.d.ts",
|
|
186
|
+
"axm-source": "./src/unstable/knowledge/concept-ref.ts",
|
|
153
187
|
"default": "./dist/src/unstable/knowledge/concept-ref.js"
|
|
154
188
|
},
|
|
155
189
|
"./unstable/knowledge/manifest-schema": {
|
|
156
190
|
"types": "./dist/src/unstable/knowledge/manifest-schema.d.ts",
|
|
191
|
+
"axm-source": "./src/unstable/knowledge/manifest-schema.ts",
|
|
157
192
|
"default": "./dist/src/unstable/knowledge/manifest-schema.js"
|
|
158
193
|
},
|
|
159
194
|
"./unstable/mcps/manifest-schema": {
|
|
160
195
|
"types": "./dist/src/unstable/mcps/manifest-schema.d.ts",
|
|
196
|
+
"axm-source": "./src/unstable/mcps/manifest-schema.ts",
|
|
161
197
|
"default": "./dist/src/unstable/mcps/manifest-schema.js"
|
|
162
198
|
},
|
|
163
199
|
"./unstable/package-urls": {
|
|
164
200
|
"types": "./dist/src/unstable/package-urls/index.d.ts",
|
|
201
|
+
"axm-source": "./src/unstable/package-urls/index.ts",
|
|
165
202
|
"default": "./dist/src/unstable/package-urls/index.js"
|
|
166
203
|
},
|
|
167
204
|
"./unstable/packaging": {
|
|
168
205
|
"types": "./dist/src/unstable/packaging/index.d.ts",
|
|
206
|
+
"axm-source": "./src/unstable/packaging/index.ts",
|
|
169
207
|
"default": "./dist/src/unstable/packaging/index.js"
|
|
170
208
|
},
|
|
171
209
|
"./unstable/packaging/package-type": {
|
|
172
210
|
"types": "./dist/src/unstable/packaging/package-type.d.ts",
|
|
211
|
+
"axm-source": "./src/unstable/packaging/package-type.ts",
|
|
173
212
|
"default": "./dist/src/unstable/packaging/package-type.js"
|
|
174
213
|
},
|
|
175
214
|
"./unstable/packaging/package-url": {
|
|
176
215
|
"types": "./dist/src/unstable/packaging/package-url.d.ts",
|
|
216
|
+
"axm-source": "./src/unstable/packaging/package-url.ts",
|
|
177
217
|
"default": "./dist/src/unstable/packaging/package-url.js"
|
|
178
218
|
},
|
|
179
219
|
"./unstable/packs/manifest-schema": {
|
|
180
220
|
"types": "./dist/src/unstable/packs/manifest-schema.d.ts",
|
|
221
|
+
"axm-source": "./src/unstable/packs/manifest-schema.ts",
|
|
181
222
|
"default": "./dist/src/unstable/packs/manifest-schema.js"
|
|
182
223
|
},
|
|
183
224
|
"./unstable/path-types": {
|
|
184
225
|
"types": "./dist/src/unstable/path-types.d.ts",
|
|
226
|
+
"axm-source": "./src/unstable/path-types.ts",
|
|
185
227
|
"default": "./dist/src/unstable/path-types.js"
|
|
186
228
|
},
|
|
187
229
|
"./unstable/rules/manifest-schema": {
|
|
188
230
|
"types": "./dist/src/unstable/rules/manifest-schema.d.ts",
|
|
231
|
+
"axm-source": "./src/unstable/rules/manifest-schema.ts",
|
|
189
232
|
"default": "./dist/src/unstable/rules/manifest-schema.js"
|
|
190
233
|
},
|
|
191
234
|
"./unstable/schema-issues": {
|
|
192
235
|
"types": "./dist/src/unstable/schema-issues.d.ts",
|
|
236
|
+
"axm-source": "./src/unstable/schema-issues.ts",
|
|
193
237
|
"default": "./dist/src/unstable/schema-issues.js"
|
|
194
238
|
},
|
|
195
239
|
"./unstable/skills/manifest-schema": {
|
|
196
240
|
"types": "./dist/src/unstable/skills/manifest-schema.d.ts",
|
|
241
|
+
"axm-source": "./src/unstable/skills/manifest-schema.ts",
|
|
197
242
|
"default": "./dist/src/unstable/skills/manifest-schema.js"
|
|
198
243
|
},
|
|
199
244
|
"./unstable/sources/forge-grammar": {
|
|
200
245
|
"types": "./dist/src/unstable/sources/forge-grammar.d.ts",
|
|
246
|
+
"axm-source": "./src/unstable/sources/forge-grammar.ts",
|
|
201
247
|
"default": "./dist/src/unstable/sources/forge-grammar.js"
|
|
202
248
|
},
|
|
203
249
|
"./unstable/sources/parser": {
|
|
204
250
|
"types": "./dist/src/unstable/sources/parser.d.ts",
|
|
251
|
+
"axm-source": "./src/unstable/sources/parser.ts",
|
|
205
252
|
"default": "./dist/src/unstable/sources/parser.js"
|
|
206
253
|
},
|
|
207
254
|
"./unstable/sources/printer": {
|
|
208
255
|
"types": "./dist/src/unstable/sources/printer.d.ts",
|
|
256
|
+
"axm-source": "./src/unstable/sources/printer.ts",
|
|
209
257
|
"default": "./dist/src/unstable/sources/printer.js"
|
|
210
258
|
},
|
|
211
259
|
"./unstable/sources/source-hash": {
|
|
212
260
|
"types": "./dist/src/unstable/sources/source-hash.d.ts",
|
|
261
|
+
"axm-source": "./src/unstable/sources/source-hash.ts",
|
|
213
262
|
"default": "./dist/src/unstable/sources/source-hash.js"
|
|
214
263
|
},
|
|
215
264
|
"./unstable/sources/source-host-provider": {
|
|
216
265
|
"types": "./dist/src/unstable/sources/source-host-provider.d.ts",
|
|
266
|
+
"axm-source": "./src/unstable/sources/source-host-provider.ts",
|
|
217
267
|
"default": "./dist/src/unstable/sources/source-host-provider.js"
|
|
218
268
|
},
|
|
219
269
|
"./unstable/sources/types": {
|
|
220
270
|
"types": "./dist/src/unstable/sources/types.d.ts",
|
|
271
|
+
"axm-source": "./src/unstable/sources/types.ts",
|
|
221
272
|
"default": "./dist/src/unstable/sources/types.js"
|
|
222
273
|
},
|
|
223
274
|
"./unstable/sources/workspace": {
|
|
224
275
|
"types": "./dist/src/unstable/sources/workspace.d.ts",
|
|
276
|
+
"axm-source": "./src/unstable/sources/workspace.ts",
|
|
225
277
|
"default": "./dist/src/unstable/sources/workspace.js"
|
|
226
278
|
},
|
|
279
|
+
"./unstable/specifications": {
|
|
280
|
+
"types": "./dist/src/unstable/specifications/index.d.ts",
|
|
281
|
+
"axm-source": "./src/unstable/specifications/index.ts",
|
|
282
|
+
"default": "./dist/src/unstable/specifications/index.js"
|
|
283
|
+
},
|
|
227
284
|
"./unstable/subagents/manifest-schema": {
|
|
228
285
|
"types": "./dist/src/unstable/subagents/manifest-schema.d.ts",
|
|
286
|
+
"axm-source": "./src/unstable/subagents/manifest-schema.ts",
|
|
229
287
|
"default": "./dist/src/unstable/subagents/manifest-schema.js"
|
|
230
288
|
},
|
|
231
289
|
"./unstable/version-constraints": {
|
|
232
290
|
"types": "./dist/src/unstable/version-constraints/version-constraints.d.ts",
|
|
291
|
+
"axm-source": "./src/unstable/version-constraints/version-constraints.ts",
|
|
233
292
|
"default": "./dist/src/unstable/version-constraints/version-constraints.js"
|
|
234
293
|
},
|
|
235
294
|
"./unstable/workspace-files": {
|
|
236
295
|
"types": "./dist/src/unstable/workspace-files.d.ts",
|
|
296
|
+
"axm-source": "./src/unstable/workspace-files.ts",
|
|
237
297
|
"default": "./dist/src/unstable/workspace-files.js"
|
|
238
298
|
},
|
|
239
299
|
"./unstable/workspace-scope": {
|
|
240
300
|
"types": "./dist/src/unstable/workspace-scope.d.ts",
|
|
301
|
+
"axm-source": "./src/unstable/workspace-scope.ts",
|
|
241
302
|
"default": "./dist/src/unstable/workspace-scope.js"
|
|
242
303
|
}
|
|
243
304
|
},
|