@dot-agent/compiler 0.1.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 +91 -0
- package/dist/chunk-IT25ILTQ.js +180 -0
- package/dist/chunk-IT25ILTQ.js.map +1 -0
- package/dist/core-DLZGpzev.d.cts +161 -0
- package/dist/core-DLZGpzev.d.ts +161 -0
- package/dist/core.cjs +224 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +2 -0
- package/dist/core.d.ts +2 -0
- package/dist/core.js +23 -0
- package/dist/core.js.map +1 -0
- package/dist/index.cjs +1059 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +55 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.js +831 -0
- package/dist/index.js.map +1 -0
- package/package.json +78 -0
package/README.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# @dot-agent/compiler
|
|
2
|
+
|
|
3
|
+
AST parser, linter, graph extractor, and `.agent` packager for the dot-agent DSL.
|
|
4
|
+
|
|
5
|
+
This is **Level 1** of the dot-agent tooling hierarchy (see [`architecture_map.md`](../../architecture_map.md)): it sits between the raw WASM grammars and the higher-level SDK and LSP. Both the CLI and the language server import from this package to guarantee identical diagnostics everywhere.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @dot-agent/compiler
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Quick start
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { lintDescription, lintBehavior, pack } from '@dot-agent/compiler'
|
|
21
|
+
|
|
22
|
+
// Lint a .description source
|
|
23
|
+
const descMsgs = await lintDescription(source, 'agent.description')
|
|
24
|
+
|
|
25
|
+
// Lint a .behavior source
|
|
26
|
+
const behMsgs = await lintBehavior(source, 'agent.behavior')
|
|
27
|
+
|
|
28
|
+
// Package a directory into a .agent ZIP
|
|
29
|
+
const result = await pack({ dir: './my-agent', version: 'v1.0.0' })
|
|
30
|
+
console.log(result.id) // e.g. "health.example.com/Doctor:v1.0.0~a1b2c3d4"
|
|
31
|
+
console.log(result.path) // path to the written .agent file
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Diagnostic messages follow the `LintMessage` shape:
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
{
|
|
38
|
+
file: string // source file label
|
|
39
|
+
line: number // 1-based line
|
|
40
|
+
col: number // 1-based column
|
|
41
|
+
severity: 'error' | 'warning'
|
|
42
|
+
code: string // e.g. 'E004', 'W002'
|
|
43
|
+
message: string // human-readable description
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
See [`docs/reference/lint-codes.md`](docs/reference/lint-codes.md) for the full code table.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Public API
|
|
52
|
+
|
|
53
|
+
| Export | Description |
|
|
54
|
+
|--------|-------------|
|
|
55
|
+
| `initParsers()` | Initialise the WASM tree-sitter parsers (called automatically on first `parse`) |
|
|
56
|
+
| `parse(langId, text, prev?)` | Parse `.description` or `.behavior` source into a tree-sitter `Tree` |
|
|
57
|
+
| `parseSync(langId, text, prev?)` | Synchronous parse — returns `null` if parsers are not yet initialised |
|
|
58
|
+
| `nodesOfType(tree, type)` | Collect all descendant nodes of a given type |
|
|
59
|
+
| `nodeAtOffset(tree, offset)` | Locate the deepest node at a byte offset |
|
|
60
|
+
| `nodeToRange(node)` | Convert a node to an LSP-style `{start, end}` range |
|
|
61
|
+
| `positionToOffset(text, line, char)` | Convert `(line, character)` to a byte offset |
|
|
62
|
+
| `getContextNode(tree, offset)` | Return the best non-error context node at an offset |
|
|
63
|
+
| `lintDescription(text, file?)` | Lint a `.description` source; returns `LintMessage[]` |
|
|
64
|
+
| `lintBehavior(text, file?, docPath?)` | Lint a `.behavior` source; returns `LintMessage[]` |
|
|
65
|
+
| `extractBehaviorGraph(tree)` | Extract states, transitions and entry points from a behavior tree |
|
|
66
|
+
| `parseAboutme(json)` | Deserialise an `aboutme.json` object into `AboutMe` |
|
|
67
|
+
| `buildAboutme(opts)` | Construct an `AboutMe` from build-time options |
|
|
68
|
+
| `aboutmeToJson(aboutme)` | Serialise `AboutMe` back to a plain JSON object |
|
|
69
|
+
| `parseId(id)` | Parse `namespace/name:version~digest` into `IdParts` |
|
|
70
|
+
| `buildId(parts)` | Construct an agent ID string from `IdParts` |
|
|
71
|
+
| `collectFiles(dir)` | Collect agent source files from a directory |
|
|
72
|
+
| `pack(options)` | Full lint → hash → zip pipeline; produces a `.agent` file |
|
|
73
|
+
| `readZip(path)` | Open a `.agent` ZIP from disk |
|
|
74
|
+
| `writeZip(zip, path)` | Write a JSZip instance to disk |
|
|
75
|
+
| `extractFiles(zip, prefixes?)` | Extract file contents from a ZIP as a `Map<string, string>` |
|
|
76
|
+
| `validateZipBomb(zip)` | Guard against decompression bombs |
|
|
77
|
+
|
|
78
|
+
Full type definitions are in `dist/index.d.ts` after building.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Development
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npm install
|
|
86
|
+
npm test # run 91 unit tests with vitest
|
|
87
|
+
npm run build # compile to dist/ with tsup
|
|
88
|
+
npm run typecheck # tsc --noEmit
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Tests live in `tests/`. Each module has a dedicated test file. WASM parsers require `pool: 'forks'` (configured in `vitest.config.ts`) to initialise correctly across test files.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// src/manifest.ts
|
|
2
|
+
function parseAboutme(json) {
|
|
3
|
+
if (!json.schemaVersion) throw new Error("Missing schemaVersion in aboutme.json");
|
|
4
|
+
if (!json.id) throw new Error("Missing id in aboutme.json");
|
|
5
|
+
if (!json.name) throw new Error("Missing name in aboutme.json");
|
|
6
|
+
if (!json.description) throw new Error("Missing description in aboutme.json");
|
|
7
|
+
if (!json.version) throw new Error("Missing version in aboutme.json");
|
|
8
|
+
if (!json.domain) throw new Error("Missing domain in aboutme.json");
|
|
9
|
+
if (!json.persona) throw new Error("Missing persona in aboutme.json");
|
|
10
|
+
if (!json.compiler) throw new Error("Missing compiler in aboutme.json");
|
|
11
|
+
if (!Array.isArray(json.capabilities)) throw new Error("Missing capabilities array in aboutme.json");
|
|
12
|
+
if (!Array.isArray(json.requires)) throw new Error("Missing requires array in aboutme.json");
|
|
13
|
+
if (!json.integrity) throw new Error("Missing integrity in aboutme.json");
|
|
14
|
+
return {
|
|
15
|
+
schemaVersion: json.schemaVersion,
|
|
16
|
+
id: json.id,
|
|
17
|
+
name: json.name,
|
|
18
|
+
description: json.description,
|
|
19
|
+
version: json.version,
|
|
20
|
+
domain: json.domain,
|
|
21
|
+
license: json.license ?? "",
|
|
22
|
+
persona: json.persona,
|
|
23
|
+
purpose: json.purpose ?? "unknown",
|
|
24
|
+
compiler: json.compiler,
|
|
25
|
+
commit: json.commit,
|
|
26
|
+
capabilities: json.capabilities,
|
|
27
|
+
requires: json.requires,
|
|
28
|
+
integrity: json.integrity
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function buildAboutme(opts) {
|
|
32
|
+
return {
|
|
33
|
+
schemaVersion: "dot-agent/1.0",
|
|
34
|
+
id: opts.id,
|
|
35
|
+
name: opts.name,
|
|
36
|
+
description: opts.description,
|
|
37
|
+
version: opts.version,
|
|
38
|
+
domain: opts.domain,
|
|
39
|
+
license: opts.license ?? "",
|
|
40
|
+
persona: opts.persona,
|
|
41
|
+
purpose: opts.purpose ?? "unknown",
|
|
42
|
+
compiler: opts.compiler,
|
|
43
|
+
commit: opts.commit,
|
|
44
|
+
capabilities: opts.capabilities ?? [],
|
|
45
|
+
requires: opts.requires ?? [],
|
|
46
|
+
integrity: opts.integrity
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function aboutmeToJson(aboutme) {
|
|
50
|
+
return JSON.stringify(aboutme, null, 2);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// src/id.ts
|
|
54
|
+
var KNOWN_PLATFORMS = ["github.com", "gitlab.com", "codeberg.org", "sr.ht"];
|
|
55
|
+
function parseNamespaceName(identifier) {
|
|
56
|
+
const atIdx = identifier.indexOf("@");
|
|
57
|
+
if (atIdx !== -1 && (identifier.indexOf("/") === -1 || atIdx < identifier.indexOf("/"))) {
|
|
58
|
+
const slashIdx = identifier.indexOf("/");
|
|
59
|
+
if (slashIdx === -1) {
|
|
60
|
+
throw new Error(`Invalid agent ID: email namespace requires a name after '/' (got '${identifier}')`);
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
namespace: identifier.slice(0, slashIdx),
|
|
64
|
+
name: identifier.slice(slashIdx + 1)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
for (const platform of KNOWN_PLATFORMS) {
|
|
68
|
+
if (identifier.startsWith(platform + "/")) {
|
|
69
|
+
const afterPlatform = identifier.slice(platform.length + 1);
|
|
70
|
+
const slashIdx = afterPlatform.indexOf("/");
|
|
71
|
+
if (slashIdx === -1) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
`Invalid agent ID: '${platform}' namespace requires a user segment and a name (got '${identifier}')`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
namespace: platform + "/" + afterPlatform.slice(0, slashIdx),
|
|
78
|
+
name: afterPlatform.slice(slashIdx + 1)
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const lastSlash = identifier.lastIndexOf("/");
|
|
83
|
+
if (lastSlash === -1) {
|
|
84
|
+
throw new Error(`Invalid agent ID: missing '/' separator in '${identifier}'`);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
namespace: identifier.slice(0, lastSlash),
|
|
88
|
+
name: identifier.slice(lastSlash + 1)
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function parseId(id) {
|
|
92
|
+
if (!id) throw new Error("Invalid agent ID: empty string");
|
|
93
|
+
const colonIdx = id.indexOf(":");
|
|
94
|
+
let identifier;
|
|
95
|
+
let version;
|
|
96
|
+
let digest;
|
|
97
|
+
if (colonIdx === -1) {
|
|
98
|
+
identifier = id;
|
|
99
|
+
} else {
|
|
100
|
+
identifier = id.slice(0, colonIdx);
|
|
101
|
+
const rest = id.slice(colonIdx + 1);
|
|
102
|
+
if (!rest) throw new Error(`Invalid agent ID: empty version after ':' in '${id}'`);
|
|
103
|
+
const tildeIdx = rest.indexOf("~");
|
|
104
|
+
if (tildeIdx === -1) {
|
|
105
|
+
version = rest;
|
|
106
|
+
} else {
|
|
107
|
+
version = rest.slice(0, tildeIdx);
|
|
108
|
+
digest = rest.slice(tildeIdx + 1);
|
|
109
|
+
if (!version) throw new Error(`Invalid agent ID: empty version before '~' in '${id}'`);
|
|
110
|
+
if (!digest) throw new Error(`Invalid agent ID: empty digest after '~' in '${id}'`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const { namespace, name } = parseNamespaceName(identifier);
|
|
114
|
+
if (!namespace) throw new Error(`Invalid agent ID: empty namespace in '${id}'`);
|
|
115
|
+
if (!name) throw new Error(`Invalid agent ID: empty name in '${id}'`);
|
|
116
|
+
return { namespace, name, version, digest };
|
|
117
|
+
}
|
|
118
|
+
function buildId(parts) {
|
|
119
|
+
const { namespace, name, version, digest } = parts;
|
|
120
|
+
if (!namespace || !name) {
|
|
121
|
+
throw new Error("Missing required ID parts: namespace and name");
|
|
122
|
+
}
|
|
123
|
+
if (digest && !version) {
|
|
124
|
+
throw new Error("Invalid ID parts: digest requires version");
|
|
125
|
+
}
|
|
126
|
+
let result = `${namespace}/${name}`;
|
|
127
|
+
if (version) {
|
|
128
|
+
result += `:${version}`;
|
|
129
|
+
if (digest) result += `~${digest}`;
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
function extractDigest(id) {
|
|
134
|
+
try {
|
|
135
|
+
return parseId(id).digest ?? "";
|
|
136
|
+
} catch {
|
|
137
|
+
return "";
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function extractName(id) {
|
|
141
|
+
try {
|
|
142
|
+
return parseId(id).name;
|
|
143
|
+
} catch {
|
|
144
|
+
return "";
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// src/zip-core.ts
|
|
149
|
+
import JSZip from "jszip";
|
|
150
|
+
function createZip() {
|
|
151
|
+
return new JSZip();
|
|
152
|
+
}
|
|
153
|
+
async function extractFiles(zip, filter) {
|
|
154
|
+
const files = /* @__PURE__ */ new Map();
|
|
155
|
+
const promises = [];
|
|
156
|
+
zip.forEach((relativePath, file) => {
|
|
157
|
+
if (file.dir) return;
|
|
158
|
+
if (filter && !filter.some((f) => relativePath.startsWith(f))) return;
|
|
159
|
+
promises.push(
|
|
160
|
+
file.async("text").then((content) => {
|
|
161
|
+
files.set(relativePath, content);
|
|
162
|
+
})
|
|
163
|
+
);
|
|
164
|
+
});
|
|
165
|
+
await Promise.all(promises);
|
|
166
|
+
return files;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export {
|
|
170
|
+
parseAboutme,
|
|
171
|
+
buildAboutme,
|
|
172
|
+
aboutmeToJson,
|
|
173
|
+
parseId,
|
|
174
|
+
buildId,
|
|
175
|
+
extractDigest,
|
|
176
|
+
extractName,
|
|
177
|
+
createZip,
|
|
178
|
+
extractFiles
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=chunk-IT25ILTQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/manifest.ts","../src/id.ts","../src/zip-core.ts"],"sourcesContent":["// Copyright 2026 Danilo Borges\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n\nimport type { AboutMe, BuildAboutmeOptions } from './types.js'\n\nexport function parseAboutme(json: any): AboutMe {\n if (!json.schemaVersion) throw new Error('Missing schemaVersion in aboutme.json')\n if (!json.id) throw new Error('Missing id in aboutme.json')\n if (!json.name) throw new Error('Missing name in aboutme.json')\n if (!json.description) throw new Error('Missing description in aboutme.json')\n if (!json.version) throw new Error('Missing version in aboutme.json')\n if (!json.domain) throw new Error('Missing domain in aboutme.json')\n if (!json.persona) throw new Error('Missing persona in aboutme.json')\n if (!json.compiler) throw new Error('Missing compiler in aboutme.json')\n if (!Array.isArray(json.capabilities)) throw new Error('Missing capabilities array in aboutme.json')\n if (!Array.isArray(json.requires)) throw new Error('Missing requires array in aboutme.json')\n if (!json.integrity) throw new Error('Missing integrity in aboutme.json')\n\n return {\n schemaVersion: json.schemaVersion,\n id: json.id,\n name: json.name,\n description: json.description,\n version: json.version,\n domain: json.domain,\n license: json.license ?? '',\n persona: json.persona,\n purpose: json.purpose ?? 'unknown',\n compiler: json.compiler,\n commit: json.commit,\n capabilities: json.capabilities,\n requires: json.requires,\n integrity: json.integrity,\n }\n}\n\nexport function buildAboutme(opts: BuildAboutmeOptions): AboutMe {\n return {\n schemaVersion: 'dot-agent/1.0',\n id: opts.id,\n name: opts.name,\n description: opts.description,\n version: opts.version,\n domain: opts.domain,\n license: opts.license ?? '',\n persona: opts.persona,\n purpose: opts.purpose ?? 'unknown',\n compiler: opts.compiler,\n commit: opts.commit,\n capabilities: opts.capabilities ?? [],\n requires: opts.requires ?? [],\n integrity: opts.integrity,\n }\n}\n\nexport function aboutmeToJson(aboutme: AboutMe): string {\n return JSON.stringify(aboutme, null, 2)\n}\n","// Copyright 2026 Danilo Borges\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport type { IdParts } from './types.js'\n\n// Code hosting platforms whose namespace format is platform/user rather than plain domain.\n// The list is maintained by the compiler and updated via CLI releases.\nexport const KNOWN_PLATFORMS = ['github.com', 'gitlab.com', 'codeberg.org', 'sr.ht'] as const\n\nfunction parseNamespaceName(identifier: string): { namespace: string; name: string } {\n // Email namespace: @ appears before any /\n const atIdx = identifier.indexOf('@')\n if (atIdx !== -1 && (identifier.indexOf('/') === -1 || atIdx < identifier.indexOf('/'))) {\n const slashIdx = identifier.indexOf('/')\n if (slashIdx === -1) {\n throw new Error(`Invalid agent ID: email namespace requires a name after '/' (got '${identifier}')`)\n }\n return {\n namespace: identifier.slice(0, slashIdx),\n name: identifier.slice(slashIdx + 1),\n }\n }\n\n // Known code-hosting platforms: namespace is platform/user, name is the next segment.\n for (const platform of KNOWN_PLATFORMS) {\n if (identifier.startsWith(platform + '/')) {\n const afterPlatform = identifier.slice(platform.length + 1)\n const slashIdx = afterPlatform.indexOf('/')\n if (slashIdx === -1) {\n throw new Error(\n `Invalid agent ID: '${platform}' namespace requires a user segment and a name (got '${identifier}')`,\n )\n }\n return {\n namespace: platform + '/' + afterPlatform.slice(0, slashIdx),\n name: afterPlatform.slice(slashIdx + 1),\n }\n }\n }\n\n // Domain or reserved keyword (e.g. 'unknown'): last '/' separates namespace from name.\n const lastSlash = identifier.lastIndexOf('/')\n if (lastSlash === -1) {\n throw new Error(`Invalid agent ID: missing '/' separator in '${identifier}'`)\n }\n return {\n namespace: identifier.slice(0, lastSlash),\n name: identifier.slice(lastSlash + 1),\n }\n}\n\nexport function parseId(id: string): IdParts {\n if (!id) throw new Error('Invalid agent ID: empty string')\n\n // Phase 1: split on the first ':' to isolate the identifier from version~digest.\n const colonIdx = id.indexOf(':')\n\n let identifier: string\n let version: string | undefined\n let digest: string | undefined\n\n if (colonIdx === -1) {\n // Form A: namespace/name\n identifier = id\n } else {\n identifier = id.slice(0, colonIdx)\n const rest = id.slice(colonIdx + 1)\n if (!rest) throw new Error(`Invalid agent ID: empty version after ':' in '${id}'`)\n\n // Phase 2: split version~digest\n const tildeIdx = rest.indexOf('~')\n if (tildeIdx === -1) {\n // Form B: namespace/name:version\n version = rest\n } else {\n // Form D: namespace/name:version~digest\n version = rest.slice(0, tildeIdx)\n digest = rest.slice(tildeIdx + 1)\n if (!version) throw new Error(`Invalid agent ID: empty version before '~' in '${id}'`)\n if (!digest) throw new Error(`Invalid agent ID: empty digest after '~' in '${id}'`)\n }\n }\n\n // Phase 3: extract namespace and name from the identifier\n const { namespace, name } = parseNamespaceName(identifier)\n\n if (!namespace) throw new Error(`Invalid agent ID: empty namespace in '${id}'`)\n if (!name) throw new Error(`Invalid agent ID: empty name in '${id}'`)\n\n return { namespace, name, version, digest }\n}\n\nexport function buildId(parts: IdParts): string {\n const { namespace, name, version, digest } = parts\n if (!namespace || !name) {\n throw new Error('Missing required ID parts: namespace and name')\n }\n if (digest && !version) {\n throw new Error('Invalid ID parts: digest requires version')\n }\n let result = `${namespace}/${name}`\n if (version) {\n result += `:${version}`\n if (digest) result += `~${digest}`\n }\n return result\n}\n\nexport function extractDigest(id: string): string {\n try {\n return parseId(id).digest ?? ''\n } catch {\n return ''\n }\n}\n\nexport function extractName(id: string): string {\n try {\n return parseId(id).name\n } catch {\n return ''\n }\n}\n","// Copyright 2026 Danilo Borges\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport JSZip from 'jszip'\n\nexport function createZip(): JSZip {\n return new JSZip()\n}\n\nexport async function extractFiles(zip: JSZip, filter?: string[]): Promise<Map<string, string>> {\n const files = new Map<string, string>()\n const promises: Promise<void>[] = []\n\n zip.forEach((relativePath, file) => {\n if (file.dir) return\n if (filter && !filter.some(f => relativePath.startsWith(f))) return\n promises.push(\n file.async('text').then(content => {\n files.set(relativePath, content)\n })\n )\n })\n\n await Promise.all(promises)\n return files\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import JSZip from 'jszip';
|
|
2
|
+
|
|
3
|
+
type LangId = 'description' | 'behavior';
|
|
4
|
+
interface BehaviorStatement {
|
|
5
|
+
type: string;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
interface StateDef {
|
|
9
|
+
name: string;
|
|
10
|
+
body: BehaviorStatement[];
|
|
11
|
+
}
|
|
12
|
+
interface TriggerDecl {
|
|
13
|
+
event: string;
|
|
14
|
+
body: BehaviorStatement[];
|
|
15
|
+
}
|
|
16
|
+
interface BehaviorFile {
|
|
17
|
+
merges: string[];
|
|
18
|
+
global_triggers: TriggerDecl[];
|
|
19
|
+
states: StateDef[];
|
|
20
|
+
}
|
|
21
|
+
interface OntologyRef {
|
|
22
|
+
uri: string;
|
|
23
|
+
label?: string;
|
|
24
|
+
}
|
|
25
|
+
interface AgentDecl {
|
|
26
|
+
name: string;
|
|
27
|
+
domain?: string;
|
|
28
|
+
license?: string;
|
|
29
|
+
terms?: string;
|
|
30
|
+
privacy?: string;
|
|
31
|
+
}
|
|
32
|
+
interface AnnotatedRef {
|
|
33
|
+
name: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
}
|
|
36
|
+
type PropertyType = {
|
|
37
|
+
kind: 'primitive';
|
|
38
|
+
value: string;
|
|
39
|
+
} | {
|
|
40
|
+
kind: 'reference';
|
|
41
|
+
value: string;
|
|
42
|
+
} | {
|
|
43
|
+
kind: 'array';
|
|
44
|
+
value: PropertyType;
|
|
45
|
+
} | {
|
|
46
|
+
kind: 'enum';
|
|
47
|
+
value: string[];
|
|
48
|
+
};
|
|
49
|
+
interface PropertyDecl {
|
|
50
|
+
name: string;
|
|
51
|
+
type: PropertyType;
|
|
52
|
+
is_optional: boolean;
|
|
53
|
+
description?: string;
|
|
54
|
+
}
|
|
55
|
+
interface TypeDefinition {
|
|
56
|
+
name: string;
|
|
57
|
+
category: OntologyRef;
|
|
58
|
+
concept?: OntologyRef;
|
|
59
|
+
properties: PropertyDecl[];
|
|
60
|
+
}
|
|
61
|
+
interface DescriptionFile {
|
|
62
|
+
agent: AgentDecl;
|
|
63
|
+
description?: string;
|
|
64
|
+
persona?: string;
|
|
65
|
+
behavior?: string;
|
|
66
|
+
requires: AnnotatedRef[];
|
|
67
|
+
input: AnnotatedRef[];
|
|
68
|
+
capabilities: AnnotatedRef[];
|
|
69
|
+
output: AnnotatedRef[];
|
|
70
|
+
types: TypeDefinition[];
|
|
71
|
+
}
|
|
72
|
+
/** Structured diagnostic from the Rust WASM parser. */
|
|
73
|
+
interface ParseDiagnostic {
|
|
74
|
+
severity: 'error' | 'warning' | 'info' | 'hint';
|
|
75
|
+
code: string;
|
|
76
|
+
message: string;
|
|
77
|
+
hint?: string;
|
|
78
|
+
/** [line, col] 1-based, absent when position is unavailable (e.g. serde errors). */
|
|
79
|
+
start?: [number, number];
|
|
80
|
+
end?: [number, number];
|
|
81
|
+
}
|
|
82
|
+
interface LintMessage {
|
|
83
|
+
file: string;
|
|
84
|
+
line: number;
|
|
85
|
+
col: number;
|
|
86
|
+
severity: 'error' | 'warning' | 'info' | 'hint';
|
|
87
|
+
code: string;
|
|
88
|
+
message: string;
|
|
89
|
+
hint?: string;
|
|
90
|
+
}
|
|
91
|
+
interface IdParts {
|
|
92
|
+
namespace: string;
|
|
93
|
+
name: string;
|
|
94
|
+
version?: string;
|
|
95
|
+
digest?: string;
|
|
96
|
+
}
|
|
97
|
+
interface Capability {
|
|
98
|
+
id: string;
|
|
99
|
+
description: string;
|
|
100
|
+
}
|
|
101
|
+
interface Integrity {
|
|
102
|
+
sha256: string;
|
|
103
|
+
types?: string;
|
|
104
|
+
files?: string;
|
|
105
|
+
}
|
|
106
|
+
interface AboutMe {
|
|
107
|
+
schemaVersion: string;
|
|
108
|
+
id: string;
|
|
109
|
+
name: string;
|
|
110
|
+
description: string;
|
|
111
|
+
version: string;
|
|
112
|
+
domain: string;
|
|
113
|
+
license: string;
|
|
114
|
+
persona: string;
|
|
115
|
+
purpose: string;
|
|
116
|
+
compiler: string;
|
|
117
|
+
commit?: string;
|
|
118
|
+
capabilities: Capability[];
|
|
119
|
+
requires: AnnotatedRef[];
|
|
120
|
+
integrity: Integrity;
|
|
121
|
+
}
|
|
122
|
+
interface PackOptions {
|
|
123
|
+
dir?: string;
|
|
124
|
+
out?: string;
|
|
125
|
+
commit?: string;
|
|
126
|
+
version?: string;
|
|
127
|
+
}
|
|
128
|
+
interface PackResult {
|
|
129
|
+
path: string;
|
|
130
|
+
id: string;
|
|
131
|
+
warnings: LintMessage[];
|
|
132
|
+
}
|
|
133
|
+
interface BuildAboutmeOptions {
|
|
134
|
+
id: string;
|
|
135
|
+
name: string;
|
|
136
|
+
description: string;
|
|
137
|
+
version: string;
|
|
138
|
+
domain: string;
|
|
139
|
+
license?: string;
|
|
140
|
+
persona: string;
|
|
141
|
+
purpose?: string;
|
|
142
|
+
compiler: string;
|
|
143
|
+
commit?: string;
|
|
144
|
+
capabilities?: Capability[];
|
|
145
|
+
requires?: AnnotatedRef[];
|
|
146
|
+
integrity: Integrity;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
declare function parseAboutme(json: any): AboutMe;
|
|
150
|
+
declare function buildAboutme(opts: BuildAboutmeOptions): AboutMe;
|
|
151
|
+
declare function aboutmeToJson(aboutme: AboutMe): string;
|
|
152
|
+
|
|
153
|
+
declare function parseId(id: string): IdParts;
|
|
154
|
+
declare function buildId(parts: IdParts): string;
|
|
155
|
+
declare function extractDigest(id: string): string;
|
|
156
|
+
declare function extractName(id: string): string;
|
|
157
|
+
|
|
158
|
+
declare function createZip(): JSZip;
|
|
159
|
+
declare function extractFiles(zip: JSZip, filter?: string[]): Promise<Map<string, string>>;
|
|
160
|
+
|
|
161
|
+
export { type AboutMe as A, type BehaviorFile as B, type Capability as C, type DescriptionFile as D, type IdParts as I, type LangId as L, type OntologyRef as O, type ParseDiagnostic as P, type StateDef as S, type TriggerDecl as T, type LintMessage as a, type PackOptions as b, type PackResult as c, type AgentDecl as d, type AnnotatedRef as e, type BehaviorStatement as f, type BuildAboutmeOptions as g, type Integrity as h, type PropertyDecl as i, type PropertyType as j, type TypeDefinition as k, aboutmeToJson as l, buildAboutme as m, buildId as n, createZip as o, extractDigest as p, extractFiles as q, extractName as r, parseAboutme as s, parseId as t };
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import JSZip from 'jszip';
|
|
2
|
+
|
|
3
|
+
type LangId = 'description' | 'behavior';
|
|
4
|
+
interface BehaviorStatement {
|
|
5
|
+
type: string;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
interface StateDef {
|
|
9
|
+
name: string;
|
|
10
|
+
body: BehaviorStatement[];
|
|
11
|
+
}
|
|
12
|
+
interface TriggerDecl {
|
|
13
|
+
event: string;
|
|
14
|
+
body: BehaviorStatement[];
|
|
15
|
+
}
|
|
16
|
+
interface BehaviorFile {
|
|
17
|
+
merges: string[];
|
|
18
|
+
global_triggers: TriggerDecl[];
|
|
19
|
+
states: StateDef[];
|
|
20
|
+
}
|
|
21
|
+
interface OntologyRef {
|
|
22
|
+
uri: string;
|
|
23
|
+
label?: string;
|
|
24
|
+
}
|
|
25
|
+
interface AgentDecl {
|
|
26
|
+
name: string;
|
|
27
|
+
domain?: string;
|
|
28
|
+
license?: string;
|
|
29
|
+
terms?: string;
|
|
30
|
+
privacy?: string;
|
|
31
|
+
}
|
|
32
|
+
interface AnnotatedRef {
|
|
33
|
+
name: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
}
|
|
36
|
+
type PropertyType = {
|
|
37
|
+
kind: 'primitive';
|
|
38
|
+
value: string;
|
|
39
|
+
} | {
|
|
40
|
+
kind: 'reference';
|
|
41
|
+
value: string;
|
|
42
|
+
} | {
|
|
43
|
+
kind: 'array';
|
|
44
|
+
value: PropertyType;
|
|
45
|
+
} | {
|
|
46
|
+
kind: 'enum';
|
|
47
|
+
value: string[];
|
|
48
|
+
};
|
|
49
|
+
interface PropertyDecl {
|
|
50
|
+
name: string;
|
|
51
|
+
type: PropertyType;
|
|
52
|
+
is_optional: boolean;
|
|
53
|
+
description?: string;
|
|
54
|
+
}
|
|
55
|
+
interface TypeDefinition {
|
|
56
|
+
name: string;
|
|
57
|
+
category: OntologyRef;
|
|
58
|
+
concept?: OntologyRef;
|
|
59
|
+
properties: PropertyDecl[];
|
|
60
|
+
}
|
|
61
|
+
interface DescriptionFile {
|
|
62
|
+
agent: AgentDecl;
|
|
63
|
+
description?: string;
|
|
64
|
+
persona?: string;
|
|
65
|
+
behavior?: string;
|
|
66
|
+
requires: AnnotatedRef[];
|
|
67
|
+
input: AnnotatedRef[];
|
|
68
|
+
capabilities: AnnotatedRef[];
|
|
69
|
+
output: AnnotatedRef[];
|
|
70
|
+
types: TypeDefinition[];
|
|
71
|
+
}
|
|
72
|
+
/** Structured diagnostic from the Rust WASM parser. */
|
|
73
|
+
interface ParseDiagnostic {
|
|
74
|
+
severity: 'error' | 'warning' | 'info' | 'hint';
|
|
75
|
+
code: string;
|
|
76
|
+
message: string;
|
|
77
|
+
hint?: string;
|
|
78
|
+
/** [line, col] 1-based, absent when position is unavailable (e.g. serde errors). */
|
|
79
|
+
start?: [number, number];
|
|
80
|
+
end?: [number, number];
|
|
81
|
+
}
|
|
82
|
+
interface LintMessage {
|
|
83
|
+
file: string;
|
|
84
|
+
line: number;
|
|
85
|
+
col: number;
|
|
86
|
+
severity: 'error' | 'warning' | 'info' | 'hint';
|
|
87
|
+
code: string;
|
|
88
|
+
message: string;
|
|
89
|
+
hint?: string;
|
|
90
|
+
}
|
|
91
|
+
interface IdParts {
|
|
92
|
+
namespace: string;
|
|
93
|
+
name: string;
|
|
94
|
+
version?: string;
|
|
95
|
+
digest?: string;
|
|
96
|
+
}
|
|
97
|
+
interface Capability {
|
|
98
|
+
id: string;
|
|
99
|
+
description: string;
|
|
100
|
+
}
|
|
101
|
+
interface Integrity {
|
|
102
|
+
sha256: string;
|
|
103
|
+
types?: string;
|
|
104
|
+
files?: string;
|
|
105
|
+
}
|
|
106
|
+
interface AboutMe {
|
|
107
|
+
schemaVersion: string;
|
|
108
|
+
id: string;
|
|
109
|
+
name: string;
|
|
110
|
+
description: string;
|
|
111
|
+
version: string;
|
|
112
|
+
domain: string;
|
|
113
|
+
license: string;
|
|
114
|
+
persona: string;
|
|
115
|
+
purpose: string;
|
|
116
|
+
compiler: string;
|
|
117
|
+
commit?: string;
|
|
118
|
+
capabilities: Capability[];
|
|
119
|
+
requires: AnnotatedRef[];
|
|
120
|
+
integrity: Integrity;
|
|
121
|
+
}
|
|
122
|
+
interface PackOptions {
|
|
123
|
+
dir?: string;
|
|
124
|
+
out?: string;
|
|
125
|
+
commit?: string;
|
|
126
|
+
version?: string;
|
|
127
|
+
}
|
|
128
|
+
interface PackResult {
|
|
129
|
+
path: string;
|
|
130
|
+
id: string;
|
|
131
|
+
warnings: LintMessage[];
|
|
132
|
+
}
|
|
133
|
+
interface BuildAboutmeOptions {
|
|
134
|
+
id: string;
|
|
135
|
+
name: string;
|
|
136
|
+
description: string;
|
|
137
|
+
version: string;
|
|
138
|
+
domain: string;
|
|
139
|
+
license?: string;
|
|
140
|
+
persona: string;
|
|
141
|
+
purpose?: string;
|
|
142
|
+
compiler: string;
|
|
143
|
+
commit?: string;
|
|
144
|
+
capabilities?: Capability[];
|
|
145
|
+
requires?: AnnotatedRef[];
|
|
146
|
+
integrity: Integrity;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
declare function parseAboutme(json: any): AboutMe;
|
|
150
|
+
declare function buildAboutme(opts: BuildAboutmeOptions): AboutMe;
|
|
151
|
+
declare function aboutmeToJson(aboutme: AboutMe): string;
|
|
152
|
+
|
|
153
|
+
declare function parseId(id: string): IdParts;
|
|
154
|
+
declare function buildId(parts: IdParts): string;
|
|
155
|
+
declare function extractDigest(id: string): string;
|
|
156
|
+
declare function extractName(id: string): string;
|
|
157
|
+
|
|
158
|
+
declare function createZip(): JSZip;
|
|
159
|
+
declare function extractFiles(zip: JSZip, filter?: string[]): Promise<Map<string, string>>;
|
|
160
|
+
|
|
161
|
+
export { type AboutMe as A, type BehaviorFile as B, type Capability as C, type DescriptionFile as D, type IdParts as I, type LangId as L, type OntologyRef as O, type ParseDiagnostic as P, type StateDef as S, type TriggerDecl as T, type LintMessage as a, type PackOptions as b, type PackResult as c, type AgentDecl as d, type AnnotatedRef as e, type BehaviorStatement as f, type BuildAboutmeOptions as g, type Integrity as h, type PropertyDecl as i, type PropertyType as j, type TypeDefinition as k, aboutmeToJson as l, buildAboutme as m, buildId as n, createZip as o, extractDigest as p, extractFiles as q, extractName as r, parseAboutme as s, parseId as t };
|