@awebai/oats 0.22.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/LICENSE +21 -0
- package/README.md +380 -0
- package/bin/oats.mjs +3294 -0
- package/capabilities/oats-authoring/oats.json +12 -0
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +297 -0
- package/capabilities/oats-aweb/injects/aweb.md +55 -0
- package/capabilities/oats-aweb/oats.json +47 -0
- package/capabilities/oats-aweb/package.json +20 -0
- package/capabilities/oats-jira/bin/oats-jira.mjs +40 -0
- package/capabilities/oats-jira/injects/jira.md +10 -0
- package/capabilities/oats-jira/oats.json +22 -0
- package/capabilities/oats-jira/package.json +25 -0
- package/capabilities/oats-jira/skills/jira-tasks/SKILL.md +176 -0
- package/capabilities/oats-linear/README.md +234 -0
- package/capabilities/oats-linear/bin/oats-linear-hook.mjs +32 -0
- package/capabilities/oats-linear/bin/oats-linear.mjs +344 -0
- package/capabilities/oats-linear/injects/linear.md +8 -0
- package/capabilities/oats-linear/oats.json +24 -0
- package/capabilities/oats-linear/package.json +29 -0
- package/capabilities/oats-linear/skills/linear-tasks/SKILL.md +217 -0
- package/capabilities/oats-linear/test/oats-linear.test.mjs +168 -0
- package/capabilities/oats-okf/agents/memory-harvest.md +25 -0
- package/capabilities/oats-okf/bin/oats-okf.mjs +283 -0
- package/capabilities/oats-okf/injects/okf.md +62 -0
- package/capabilities/oats-okf/oats.json +20 -0
- package/capabilities/oats-okf/package.json +22 -0
- package/capabilities/oats-okf/skills/memory-harvest/SKILL.md +100 -0
- package/capabilities/oats-okf/skills/okf/SKILL.md +107 -0
- package/capabilities/oats-okf/skills/okf/scripts/okf-validate.mjs +123 -0
- package/capabilities/oats-review/agents/reviewer/AGENTS.md +53 -0
- package/capabilities/oats-review/agents/reviewer/soul.yaml +6 -0
- package/capabilities/oats-review/injects/review.md +68 -0
- package/capabilities/oats-review/oats.json +10 -0
- package/capabilities/oats-review/skills/code-review/SKILL.md +44 -0
- package/capabilities/oats-review/skills/security-review/SKILL.md +59 -0
- package/docs/capabilities.md +505 -0
- package/docs/capability-manifest.schema.json +223 -0
- package/docs/configuration.md +482 -0
- package/docs/conventions.md +73 -0
- package/docs/design/desktop-ux-plan.md +362 -0
- package/docs/design/package-engine-contract.md +813 -0
- package/docs/design/package-runtime-api.md +414 -0
- package/docs/desktop-cli-api.md +89 -0
- package/docs/desktop-succession.md +51 -0
- package/docs/desktop.md +187 -0
- package/docs/implementation.md +282 -0
- package/docs/integrations.md +123 -0
- package/docs/knowledge-theory.md +97 -0
- package/docs/knowledge.md +139 -0
- package/docs/layers.md +110 -0
- package/docs/migration-from-oas.md +122 -0
- package/docs/oats-config.schema.json +140 -0
- package/docs/oats-lock.schema.json +175 -0
- package/docs/oats-package.schema.json +129 -0
- package/docs/packages.md +442 -0
- package/docs/release-lane.md +132 -0
- package/docs/release-notes/v0.18.2.md +79 -0
- package/docs/release-notes/v0.18.3.md +63 -0
- package/docs/release-notes/v0.18.4.md +65 -0
- package/docs/release-notes/v0.18.5.md +66 -0
- package/docs/release-notes/v0.18.6.md +87 -0
- package/docs/release-notes/v0.19.0.md +186 -0
- package/docs/release-notes/v0.19.1.md +24 -0
- package/docs/release-notes/v0.19.2.md +32 -0
- package/docs/release-notes/v0.19.3.md +16 -0
- package/docs/release-notes/v0.19.4.md +12 -0
- package/docs/release-notes/v0.20.0.md +89 -0
- package/docs/release-notes/v0.22.0.md +180 -0
- package/docs/souls-and-instances.md +344 -0
- package/injects/framework-workspace.md +7 -0
- package/injects/instance-boundary.md +43 -0
- package/injects/local-soul.md +19 -0
- package/injects/oats.md +11 -0
- package/injects/work-attached.md +16 -0
- package/injects/work-checkout.md +12 -0
- package/injects/work-workspace.md +22 -0
- package/injects/work-worktree.md +13 -0
- package/lib/core.mjs +6792 -0
- package/lib/packages.mjs +1375 -0
- package/lib/tmux-config.mjs +35 -0
- package/package-catalog.json +44 -0
- package/package.json +55 -0
- package/packages/record/README.md +151 -0
- package/packages/record/bin/capture.mjs +256 -0
- package/packages/record/bin/recall.mjs +102 -0
- package/packages/record/bin/setup.mjs +281 -0
- package/packages/record/bin/turn-record.mjs +47 -0
- package/packages/record/docs/turn-record-sot.md +350 -0
- package/packages/record/lib/canonical.mjs +151 -0
- package/packages/record/lib/capture-aw.mjs +179 -0
- package/packages/record/lib/capture-cc.mjs +322 -0
- package/packages/record/lib/formats.mjs +296 -0
- package/packages/record/lib/ignore.mjs +155 -0
- package/packages/record/lib/index-db.mjs +524 -0
- package/packages/record/lib/project-aweb.mjs +251 -0
- package/packages/record/lib/segments.mjs +186 -0
- package/packages/record/lib/store.mjs +447 -0
- package/packages/record/lib/tags.mjs +114 -0
- package/packages/record/package.json +45 -0
- package/packages/record/test/vectors/README.md +34 -0
- package/packages/record/test/vectors/aweb-projection-v1.json +231 -0
- package/packages/record/test/vectors/journal-merge-v1.json +261 -0
- package/packages/record/test/vectors/turn-id-v1.json +152 -0
- package/packages/record/test/vectors/validate.mjs +391 -0
- package/skills/integration-authoring/SKILL.md +76 -0
- package/skills/oats/SKILL.md +151 -0
- package/skills/oats-config/SKILL.md +162 -0
- package/skills/oats-getting-started/SKILL.md +159 -0
- package/skills/oats-packages/SKILL.md +180 -0
- package/skills/oats-support/SKILL.md +79 -0
- package/skills/skill-craft/SKILL.md +109 -0
- package/skills/soul-craft/SKILL.md +109 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://oats.dev/schemas/oats-lock.schema.json",
|
|
4
|
+
"title": "OATS lockfile (oats-lock.json)",
|
|
5
|
+
"description": "Scope-local lockfile. lockfileVersion 2 records BOTH levels of the capability-materialization model: `packages` locks the transport unit (exact source + commit + selected root + payload integrity + package-identity dependencies) and `capabilities` locks the installed entity (the materialized artifact under .agents/capabilities/installed/<id>/, its provider package, its dedicated manifest path inside that package, its artifact integrity, and its executable trust). Both maps are REQUIRED. lockfileVersion 1 (per-capability marketplace locks) remains readable and usable and converts only through explicit migration. The earlier transitional package-root spelling of lockfileVersion 2 — package rows carrying `capabilities`/`trustedCapabilities`/`depsIntegrity`, and/or no top-level capability map — is UNSUPPORTED: it is rejected as an invalid lock, never converted and never partially interpreted. A lock never advances silently on restore.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"lockfileVersion"
|
|
9
|
+
],
|
|
10
|
+
"oneOf": [
|
|
11
|
+
{
|
|
12
|
+
"title": "lockfileVersion 2 — package provenance + materialized capability identity",
|
|
13
|
+
"type": "object",
|
|
14
|
+
"required": [
|
|
15
|
+
"lockfileVersion",
|
|
16
|
+
"packages",
|
|
17
|
+
"capabilities"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"lockfileVersion": {
|
|
21
|
+
"const": 2
|
|
22
|
+
},
|
|
23
|
+
"packages": {
|
|
24
|
+
"description": "Map of package identity → exact provenance of the transport unit for the full dependency closure at this scope. A package row proves WHERE the bytes came from; it does not describe an installed directory, because there is no persistent package store. Which capabilities a package supplies is read off the `capabilities` map's `package` back-reference, so the two levels can never disagree — a package row carrying a capability list, a trust list, or a dependency-closure digest is the unsupported transitional shape.",
|
|
25
|
+
"type": "object",
|
|
26
|
+
"propertyNames": {
|
|
27
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
28
|
+
},
|
|
29
|
+
"additionalProperties": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"required": [
|
|
32
|
+
"source",
|
|
33
|
+
"path",
|
|
34
|
+
"version",
|
|
35
|
+
"commit",
|
|
36
|
+
"integrity",
|
|
37
|
+
"dependencies"
|
|
38
|
+
],
|
|
39
|
+
"properties": {
|
|
40
|
+
"source": {
|
|
41
|
+
"description": "Normalized acquisition source, in EXACTLY the writer's grammar: git:<url>@<ref>, path:<absolute-dir>, catalog:<id> for an originally bare catalog request, or catalog:<id>@<selector> for an originally explicit selector (the resolved commit is separate; official catalog identity grants no executable trust). It never carries a \"#<path>\" fragment — the selected package root is the entry's own \"path\" field. Parsed strictly: a payload that merely starts with a known scheme but is not valid for that kind (catalog:../evil, path:relative/dir) is an invalid lock, because update and the locked-template reader re-derive a source spec from this string and would reclassify it.",
|
|
42
|
+
"type": "string",
|
|
43
|
+
"pattern": "^(catalog:[a-z0-9][a-z0-9._-]*(@[^#]+)?|path:/[^#]*|git:(https?://|file://|git@|ssh://|git://)[^#]+)$"
|
|
44
|
+
},
|
|
45
|
+
"path": {
|
|
46
|
+
"description": "Canonical, repository-relative path of the SELECTED package root inside the source (the directory carrying oats-package.json). \".\" is the canonical spelling of the source root; git/catalog sources default to \"oats-package\" when the source contract selects nothing; path: sources are exact directories and always record \".\". Never normalized or repaired on read — a non-canonical spelling is an invalid lock. Only `oats update` may change it.",
|
|
47
|
+
"type": "string",
|
|
48
|
+
"pattern": "^(\\.|(?!~)(?![A-Za-z]:[/\\\\])(?!\\.\\.?(/|$))[^/\\\\]+(/(?!\\.\\.?(/|$))[^/\\\\]+)*)$",
|
|
49
|
+
"minLength": 1
|
|
50
|
+
},
|
|
51
|
+
"version": {
|
|
52
|
+
"description": "Version from the locked oats-package.json.",
|
|
53
|
+
"type": "string",
|
|
54
|
+
"minLength": 1
|
|
55
|
+
},
|
|
56
|
+
"commit": {
|
|
57
|
+
"description": "Exact git commit the package was acquired at (40-hex). For path: sources this is the string \"local\".",
|
|
58
|
+
"type": "string",
|
|
59
|
+
"pattern": "^([0-9a-f]{40}|local)$"
|
|
60
|
+
},
|
|
61
|
+
"integrity": {
|
|
62
|
+
"description": "sha256 tree hash of the validated package PAYLOAD (the selected package root as fetched, before capability projection). It proves the exact distribution bytes and is what bare restore re-verifies before reprojecting. Materialized node_modules are excluded here — a capability's runtime closure is part of its own materialized artifact integrity.",
|
|
63
|
+
"type": "string",
|
|
64
|
+
"pattern": "^sha256-[0-9a-f]{64}$"
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"description": "Package identities of direct dependencies, each a key of this lock's packages map. ALWAYS recorded — an empty array when the package has none, so a reader never has to distinguish absent from empty. Package-identity references only, never source strings.",
|
|
68
|
+
"type": "array",
|
|
69
|
+
"items": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
72
|
+
},
|
|
73
|
+
"uniqueItems": true
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"additionalProperties": false
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"capabilities": {
|
|
80
|
+
"description": "Map of capability ID → the materialized installed entity at .agents/capabilities/installed/<id>/. REQUIRED (empty object when the scope locks nothing). Every entry names the package that supplied it; that package MUST be a key of this lock's `packages` map.",
|
|
81
|
+
"type": "object",
|
|
82
|
+
"propertyNames": {
|
|
83
|
+
"minLength": 1
|
|
84
|
+
},
|
|
85
|
+
"additionalProperties": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"required": [
|
|
88
|
+
"version",
|
|
89
|
+
"package",
|
|
90
|
+
"path",
|
|
91
|
+
"integrity",
|
|
92
|
+
"trusted"
|
|
93
|
+
],
|
|
94
|
+
"properties": {
|
|
95
|
+
"version": {
|
|
96
|
+
"description": "Version from the capability's own oats.json (independent of the provider package's version).",
|
|
97
|
+
"type": "string",
|
|
98
|
+
"minLength": 1
|
|
99
|
+
},
|
|
100
|
+
"package": {
|
|
101
|
+
"description": "Identity of the provider package; must be a key of this lock's `packages` map.",
|
|
102
|
+
"type": "string",
|
|
103
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
104
|
+
},
|
|
105
|
+
"path": {
|
|
106
|
+
"description": "Canonical, package-relative path of the capability's DEDICATED root inside the provider package — the directory carrying its oats.json. Records exactly what was projected, so a package that moves a capability root is visible as a change. \".\" occurs only for an already-published legacy package whose capability root is the package root; newly authored packages use dedicated roots such as \"capabilities/<slug>\".",
|
|
107
|
+
"type": "string",
|
|
108
|
+
"pattern": "^(\\.|(?!~)(?![A-Za-z]:[/\\\\])(?!\\.\\.?(/|$))[^/\\\\]+(/(?!\\.\\.?(/|$))[^/\\\\]+)*)$",
|
|
109
|
+
"minLength": 1
|
|
110
|
+
},
|
|
111
|
+
"integrity": {
|
|
112
|
+
"description": "sha256 tree hash of the MATERIALIZED capability artifact — every byte under .agents/capabilities/installed/<id>/, including its generated .oats-installation.json provenance file and its materialized runtime closure (node_modules). This is the only thing executable trust binds to.",
|
|
113
|
+
"type": "string",
|
|
114
|
+
"pattern": "^sha256-[0-9a-f]{64}$"
|
|
115
|
+
},
|
|
116
|
+
"trusted": {
|
|
117
|
+
"description": "Whether this capability's executable surface (commands, hooks, and launch-environment authority) is approved at exactly this artifact integrity. Reset to false whenever the artifact integrity changes. Official catalog identity never grants it; there is no package-level approval.",
|
|
118
|
+
"type": "boolean"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"additionalProperties": false
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"additionalProperties": false
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"title": "lockfileVersion 1 — legacy per-capability marketplace locks (readable and usable; converts only through explicit migration)",
|
|
129
|
+
"type": "object",
|
|
130
|
+
"required": [
|
|
131
|
+
"lockfileVersion",
|
|
132
|
+
"capabilities"
|
|
133
|
+
],
|
|
134
|
+
"properties": {
|
|
135
|
+
"lockfileVersion": {
|
|
136
|
+
"const": 1
|
|
137
|
+
},
|
|
138
|
+
"capabilities": {
|
|
139
|
+
"type": "object",
|
|
140
|
+
"additionalProperties": {
|
|
141
|
+
"type": "object",
|
|
142
|
+
"required": [
|
|
143
|
+
"source",
|
|
144
|
+
"version",
|
|
145
|
+
"integrity"
|
|
146
|
+
],
|
|
147
|
+
"properties": {
|
|
148
|
+
"source": {
|
|
149
|
+
"description": "marketplace:<id>@<version>, git:<url>, or path:<dir>.",
|
|
150
|
+
"type": "string",
|
|
151
|
+
"minLength": 1
|
|
152
|
+
},
|
|
153
|
+
"version": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"minLength": 1
|
|
156
|
+
},
|
|
157
|
+
"commit": {
|
|
158
|
+
"type": "string"
|
|
159
|
+
},
|
|
160
|
+
"integrity": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"pattern": "^sha256-[0-9a-f]{64}$"
|
|
163
|
+
},
|
|
164
|
+
"trustedExecutables": {
|
|
165
|
+
"type": "boolean"
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"additionalProperties": true
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"additionalProperties": false
|
|
173
|
+
}
|
|
174
|
+
]
|
|
175
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://oats.dev/schemas/oats-package.schema.json",
|
|
4
|
+
"title": "OATS distribution package manifest (oats-package.json)",
|
|
5
|
+
"description": "Manifest at a distribution-package root. A package is the source, dependency, integrity, review and atomic-update unit — it is TRANSPORT, not the installed entity. Acquisition stages the package in a temporary transaction directory, validates the whole selected payload, MATERIALIZES each declared capability into .agents/capabilities/installed/<id>/, writes the exact lock, and discards staging; there is no persistent package store. Every package must therefore export at least one capability, and each capability entry must name a DEDICATED capability root whose declared paths and symlinks all resolve inside it, so the materialized artifact is self-contained, independently hashable and independently trustable. Config templates are optional package SOURCE MATERIAL, never installed behavior: `oats install` applies none of them. Install never ambiently loads undeclared files.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"package",
|
|
9
|
+
"version",
|
|
10
|
+
"description",
|
|
11
|
+
"compatibility",
|
|
12
|
+
"capabilities"
|
|
13
|
+
],
|
|
14
|
+
"properties": {
|
|
15
|
+
"package": {
|
|
16
|
+
"description": "Package identity. Namespaced separately from capability IDs; unique at one config scope.",
|
|
17
|
+
"type": "string",
|
|
18
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
19
|
+
},
|
|
20
|
+
"version": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"minLength": 1
|
|
23
|
+
},
|
|
24
|
+
"description": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"minLength": 1
|
|
27
|
+
},
|
|
28
|
+
"compatibility": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"oats": {
|
|
32
|
+
"description": "OATS kernel compatibility floor. Accepted grammar exactly: >=x.y.z, ^x.y.z, or exact x.y.z.",
|
|
33
|
+
"type": "string",
|
|
34
|
+
"pattern": "^(>=|\\^)?\\d+\\.\\d+\\.\\d+$"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"required": [
|
|
38
|
+
"oats"
|
|
39
|
+
],
|
|
40
|
+
"additionalProperties": false
|
|
41
|
+
},
|
|
42
|
+
"capabilities": {
|
|
43
|
+
"description": "Package-relative DEDICATED capability roots, each containing one capability oats.json. At least one is required — config-only and empty packages are rejected. A root of \".\" (the package root itself) is READ COMPATIBILITY for already-published packages only (e.g. oats.authoring@1.0.0, which is capabilities:[\".\"] and ships no templates at all): the compatibility reader accepts it whenever the manifest does not carry `configTemplates`, and rejects it as soon as it does, because a `configTemplates` manifest is unambiguously new. Authoring must never emit \".\"; newly authored packages use conventional roots such as \"capabilities/<slug>\". Paths must not escape the package root after symlink resolution, and everything the capability declares must resolve inside its OWN root — a capability that reaches package-only paths cannot be materialized and is rejected.",
|
|
44
|
+
"type": "array",
|
|
45
|
+
"minItems": 1,
|
|
46
|
+
"items": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"minLength": 1,
|
|
49
|
+
"pattern": "^[^/].*$",
|
|
50
|
+
"not": {
|
|
51
|
+
"pattern": "(^|/)\\.\\.(/|$)"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"uniqueItems": true
|
|
55
|
+
},
|
|
56
|
+
"configTemplates": {
|
|
57
|
+
"description": "Named config TEMPLATES: complete reference oats-config.yaml files an adopter may explicitly adopt with `oats init --package`. A template is a recommended starting point that becomes ordinary local policy on adoption — adopters may change every copied setting, and package updates never rewrite an adopted config. Templates must stay portable: no secret, credential, account, machine path or provider-local ID. Installation applies none of them. This is the canonical spelling; a manifest may not carry both this and the legacy `configs`.",
|
|
58
|
+
"type": "object",
|
|
59
|
+
"propertyNames": {
|
|
60
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
61
|
+
},
|
|
62
|
+
"additionalProperties": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"required": [
|
|
65
|
+
"path"
|
|
66
|
+
],
|
|
67
|
+
"properties": {
|
|
68
|
+
"path": {
|
|
69
|
+
"description": "Package-relative path to the template's oats-config.yaml. CANONICAL LOCATION: it must live under config-templates/ with a nonempty contained file path (e.g. config-templates/default/oats-config.yaml). The deprecated `configs` spelling is exempt so already-published 0.19 tags stay readable. Runtime validation enforces the same rule — see isCanonicalTemplatePath in lib/core.mjs.",
|
|
70
|
+
"type": "string",
|
|
71
|
+
"minLength": 1,
|
|
72
|
+
"pattern": "^config-templates/(?!\\.\\.?(/|$))[^/\\\\][^\\\\]*$",
|
|
73
|
+
"not": {
|
|
74
|
+
"pattern": "(^|/)\\.\\.(/|$)"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"description": {
|
|
78
|
+
"type": "string"
|
|
79
|
+
},
|
|
80
|
+
"default": {
|
|
81
|
+
"description": "At most one template may be marked default; it removes the need for --config at adoption.",
|
|
82
|
+
"type": "boolean"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"additionalProperties": false
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"configs": {
|
|
89
|
+
"description": "DEPRECATED 0.19 spelling of `configTemplates`, readable only so immutable published 0.19 package tags stay consumable. Both spellings normalize to one descriptor shape; the diagnostic `legacySpelling` flag records which was used. It is NOT the discriminator for a \".\" capability root — published legacy packages exist with neither spelling. New authoring must emit `configTemplates`; carrying both spellings is an invalid manifest.",
|
|
90
|
+
"type": "object",
|
|
91
|
+
"propertyNames": {
|
|
92
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
93
|
+
},
|
|
94
|
+
"additionalProperties": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"required": [
|
|
97
|
+
"path"
|
|
98
|
+
],
|
|
99
|
+
"properties": {
|
|
100
|
+
"path": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"minLength": 1,
|
|
103
|
+
"pattern": "^[^/].*$",
|
|
104
|
+
"not": {
|
|
105
|
+
"pattern": "(^|/)\\.\\.(/|$)"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"description": {
|
|
109
|
+
"type": "string"
|
|
110
|
+
},
|
|
111
|
+
"default": {
|
|
112
|
+
"type": "boolean"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"additionalProperties": false
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"dependencies": {
|
|
119
|
+
"description": "Package source specifications (NOT capability IDs): official catalog selectors (e.g. \"oats.okf@v1.4.0\"), git:host/org/repo@ref, raw HTTPS/SSH git URLs with @ref, or local paths. No general semver ranges; the resolved closure is exact-locked.",
|
|
120
|
+
"type": "array",
|
|
121
|
+
"items": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"minLength": 1
|
|
124
|
+
},
|
|
125
|
+
"uniqueItems": true
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"additionalProperties": false
|
|
129
|
+
}
|