@dot-agent/compiler 0.10.1 → 0.10.2

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/core.cjs CHANGED
@@ -1,13 +1,16 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_zip_core = require("./zip-core-BjnIQMRA.cjs");
3
- exports.aboutmeToJson = require_zip_core.aboutmeToJson;
4
- exports.buildAboutme = require_zip_core.buildAboutme;
5
- exports.buildId = require_zip_core.buildId;
6
- exports.createZip = require_zip_core.createZip;
7
- exports.extractDigest = require_zip_core.extractDigest;
8
- exports.extractFiles = require_zip_core.extractFiles;
9
- exports.extractName = require_zip_core.extractName;
10
- exports.parseAboutme = require_zip_core.parseAboutme;
11
- exports.parseId = require_zip_core.parseId;
12
- exports.validateMagicBytes = require_zip_core.validateMagicBytes;
13
- exports.validateZipBomb = require_zip_core.validateZipBomb;
2
+ const require_namespace = require("./namespace-0cuKn3-s.cjs");
3
+ exports.CONTENT_NAMESPACES = require_namespace.CONTENT_NAMESPACES;
4
+ exports.aboutmeToJson = require_namespace.aboutmeToJson;
5
+ exports.buildAboutme = require_namespace.buildAboutme;
6
+ exports.buildId = require_namespace.buildId;
7
+ exports.classifyContentPath = require_namespace.classifyContentPath;
8
+ exports.createZip = require_namespace.createZip;
9
+ exports.extractDigest = require_namespace.extractDigest;
10
+ exports.extractFiles = require_namespace.extractFiles;
11
+ exports.extractName = require_namespace.extractName;
12
+ exports.isInContentNamespace = require_namespace.isInContentNamespace;
13
+ exports.parseAboutme = require_namespace.parseAboutme;
14
+ exports.parseId = require_namespace.parseId;
15
+ exports.validateMagicBytes = require_namespace.validateMagicBytes;
16
+ exports.validateZipBomb = require_namespace.validateZipBomb;
package/dist/core.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { S as Integrity, a as buildId, b as DescriptionFile, c as parseId, d as parseAboutme, f as AboutMe, g as AnnotatedRef, h as AgentFiles, i as validateZipBomb, l as aboutmeToJson, n as extractFiles, o as extractDigest, p as AgentBundle, r as validateMagicBytes, s as extractName, t as createZip, u as buildAboutme, v as BuildAboutmeOptions, w as LintMessage, x as IdParts, y as Capability } from "./zip-core-BCiH0sUt.cjs";
2
- export { type AboutMe, type AgentBundle, type AgentFiles, type AnnotatedRef, type BuildAboutmeOptions, type Capability, type DescriptionFile, type IdParts, type Integrity, type LintMessage, aboutmeToJson, buildAboutme, buildId, createZip, extractDigest, extractFiles, extractName, parseAboutme, parseId, validateMagicBytes, validateZipBomb };
1
+ import { C as Capability, E as Integrity, O as LintMessage, S as BuildAboutmeOptions, T as IdParts, _ as AgentBundle, a as createZip, b as AnnotatedRef, c as validateZipBomb, d as extractName, f as parseId, g as AboutMe, h as parseAboutme, i as isInContentNamespace, l as buildId, m as buildAboutme, n as ContentNamespace, o as extractFiles, p as aboutmeToJson, r as classifyContentPath, s as validateMagicBytes, t as CONTENT_NAMESPACES, u as extractDigest, w as DescriptionFile, y as AgentFiles } from "./namespace-DsoVSANe.cjs";
2
+ export { type AboutMe, type AgentBundle, type AgentFiles, type AnnotatedRef, type BuildAboutmeOptions, CONTENT_NAMESPACES, type Capability, type ContentNamespace, type DescriptionFile, type IdParts, type Integrity, type LintMessage, aboutmeToJson, buildAboutme, buildId, classifyContentPath, createZip, extractDigest, extractFiles, extractName, isInContentNamespace, parseAboutme, parseId, validateMagicBytes, validateZipBomb };
package/dist/core.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { S as Integrity, a as buildId, b as DescriptionFile, c as parseId, d as parseAboutme, f as AboutMe, g as AnnotatedRef, h as AgentFiles, i as validateZipBomb, l as aboutmeToJson, n as extractFiles, o as extractDigest, p as AgentBundle, r as validateMagicBytes, s as extractName, t as createZip, u as buildAboutme, v as BuildAboutmeOptions, w as LintMessage, x as IdParts, y as Capability } from "./zip-core-BCiH0sUt.mjs";
2
- export { type AboutMe, type AgentBundle, type AgentFiles, type AnnotatedRef, type BuildAboutmeOptions, type Capability, type DescriptionFile, type IdParts, type Integrity, type LintMessage, aboutmeToJson, buildAboutme, buildId, createZip, extractDigest, extractFiles, extractName, parseAboutme, parseId, validateMagicBytes, validateZipBomb };
1
+ import { C as Capability, E as Integrity, O as LintMessage, S as BuildAboutmeOptions, T as IdParts, _ as AgentBundle, a as createZip, b as AnnotatedRef, c as validateZipBomb, d as extractName, f as parseId, g as AboutMe, h as parseAboutme, i as isInContentNamespace, l as buildId, m as buildAboutme, n as ContentNamespace, o as extractFiles, p as aboutmeToJson, r as classifyContentPath, s as validateMagicBytes, t as CONTENT_NAMESPACES, u as extractDigest, w as DescriptionFile, y as AgentFiles } from "./namespace-DsoVSANe.mjs";
2
+ export { type AboutMe, type AgentBundle, type AgentFiles, type AnnotatedRef, type BuildAboutmeOptions, CONTENT_NAMESPACES, type Capability, type ContentNamespace, type DescriptionFile, type IdParts, type Integrity, type LintMessage, aboutmeToJson, buildAboutme, buildId, classifyContentPath, createZip, extractDigest, extractFiles, extractName, isInContentNamespace, parseAboutme, parseId, validateMagicBytes, validateZipBomb };
package/dist/core.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { a as buildId, d as aboutmeToJson, f as buildAboutme, i as validateZipBomb, l as parseId, n as extractFiles, o as extractDigest, p as parseAboutme, r as validateMagicBytes, s as extractName, t as createZip } from "./zip-core-Dw_OgIjV.mjs";
2
- export { aboutmeToJson, buildAboutme, buildId, createZip, extractDigest, extractFiles, extractName, parseAboutme, parseId, validateMagicBytes, validateZipBomb };
1
+ import { a as extractFiles, c as buildId, f as parseId, g as parseAboutme, h as buildAboutme, i as createZip, l as extractDigest, m as aboutmeToJson, n as classifyContentPath, o as validateMagicBytes, r as isInContentNamespace, s as validateZipBomb, t as CONTENT_NAMESPACES, u as extractName } from "./namespace-CjeG5-7u.mjs";
2
+ export { CONTENT_NAMESPACES, aboutmeToJson, buildAboutme, buildId, classifyContentPath, createZip, extractDigest, extractFiles, extractName, isInContentNamespace, parseAboutme, parseId, validateMagicBytes, validateZipBomb };
package/dist/index.cjs CHANGED
@@ -1,12 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_zip_core = require("./zip-core-BjnIQMRA.cjs");
2
+ const require_namespace = require("./namespace-0cuKn3-s.cjs");
3
3
  let module$1 = require("module");
4
4
  let web_tree_sitter = require("web-tree-sitter");
5
5
  let _dot_agent_parser_dsl = require("@dot-agent/parser-dsl");
6
6
  let fs = require("fs");
7
7
  let path = require("path");
8
8
  let jszip = require("jszip");
9
- jszip = require_zip_core.__toESM(jszip, 1);
9
+ jszip = require_namespace.__toESM(jszip, 1);
10
10
  let fs_promises = require("fs/promises");
11
11
  let child_process = require("child_process");
12
12
  let crypto = require("crypto");
@@ -587,11 +587,11 @@ async function readZip(filePath) {
587
587
  }
588
588
  async function validateZipBomb(filePath) {
589
589
  const data = await (0, fs_promises.readFile)(filePath);
590
- require_zip_core.validateZipBomb(await jszip.default.loadAsync(data), data.length);
590
+ require_namespace.validateZipBomb(await jszip.default.loadAsync(data), data.length);
591
591
  return true;
592
592
  }
593
593
  async function validateMagicBytes(filePath) {
594
- require_zip_core.validateMagicBytes(await (0, fs_promises.readFile)(filePath));
594
+ require_namespace.validateMagicBytes(await (0, fs_promises.readFile)(filePath));
595
595
  return true;
596
596
  }
597
597
  async function writeZip(zip, outPath) {
@@ -680,13 +680,13 @@ function recentTagCandidates(limit = 5) {
680
680
  version,
681
681
  label: atIdx === -1 ? tag : `${version} (tag: ${tag})`
682
682
  };
683
- }).filter((c) => require_zip_core.isValidVersion(c.version));
683
+ }).filter((c) => require_namespace.isValidVersion(c.version));
684
684
  }
685
685
  const CUSTOM_VERSION = "__dot-agent-custom-version__";
686
686
  const BARE_VERSION = "__dot-agent-bare-version__";
687
687
  async function resolveVersionInteractive(explicit) {
688
688
  if (explicit) {
689
- if (!require_zip_core.isValidVersion(explicit)) throw new Error(`E019: Invalid version format '${explicit}' — expected vX.Y[.Z][-prerelease] or X.Y[.Z][-prerelease]`);
689
+ if (!require_namespace.isValidVersion(explicit)) throw new Error(`E019: Invalid version format '${explicit}' — expected vX.Y[.Z][-prerelease] or X.Y[.Z][-prerelease]`);
690
690
  return explicit;
691
691
  }
692
692
  if (!process.stdin.isTTY || !process.stdout.isTTY) {
@@ -720,7 +720,7 @@ async function resolveVersionInteractive(explicit) {
720
720
  if (choice === CUSTOM_VERSION) {
721
721
  const typed = await clack.text({
722
722
  message: "Version",
723
- validate: (v) => v && require_zip_core.isValidVersion(v) ? void 0 : "Invalid version format — expected vX.Y[.Z][-prerelease] or X.Y[.Z][-prerelease]"
723
+ validate: (v) => v && require_namespace.isValidVersion(v) ? void 0 : "Invalid version format — expected vX.Y[.Z][-prerelease] or X.Y[.Z][-prerelease]"
724
724
  });
725
725
  if (clack.isCancel(typed)) {
726
726
  clack.cancel("Pack cancelled.");
@@ -818,8 +818,8 @@ function collectFileRefs(stmts, out) {
818
818
  break;
819
819
  }
820
820
  }
821
- function namespaceOf(kind) {
822
- return kind === "guide" ? "guides" : "knowledge";
821
+ function normalizeRefPath(text) {
822
+ return text.replace(/\\/g, "/").replace(/^\.\//, "");
823
823
  }
824
824
  async function collectBehaviorFileRefs(mergedBehaviorText) {
825
825
  await initBehaviorParser();
@@ -853,15 +853,33 @@ async function listContentFiles(dir, ns) {
853
853
  async function findOrphanContentFiles(dir, mergedBehaviorText) {
854
854
  const refs = await collectBehaviorFileRefs(mergedBehaviorText);
855
855
  const referenced = /* @__PURE__ */ new Set();
856
- for (const { kind, text } of refs.values()) referenced.add(`${namespaceOf(kind)}/${text}`);
857
- return [...await listContentFiles(dir, "guides"), ...await listContentFiles(dir, "knowledge")].filter((path$4) => !referenced.has(path$4)).map((path$5) => ({
856
+ const messages = [];
857
+ for (const { kind, text } of refs.values()) {
858
+ const bundlePath = normalizeRefPath(text);
859
+ referenced.add(bundlePath);
860
+ if (isExternalPath(dir, bundlePath) || require_namespace.isInContentNamespace(bundlePath)) continue;
861
+ try {
862
+ await (0, fs_promises.stat)((0, path.join)(dir, bundlePath));
863
+ } catch {
864
+ continue;
865
+ }
866
+ messages.push({
867
+ file: bundlePath,
868
+ line: 1,
869
+ col: 1,
870
+ severity: "warning",
871
+ code: "W016",
872
+ message: `'${kind}' reference '${text}' resolves outside guides/ or knowledge/ — it will be bundled but is unreachable at runtime; move it under knowledge/ (or guides/) and reference it there`
873
+ });
874
+ }
875
+ return [...[...await listContentFiles(dir, "guides"), ...await listContentFiles(dir, "knowledge")].filter((path$4) => !referenced.has(path$4)).map((path$5) => ({
858
876
  file: path$5,
859
877
  line: 1,
860
878
  col: 1,
861
879
  severity: "warning",
862
880
  code: "W015",
863
881
  message: `'${path$5}' is not referenced by any guide or teach statement — it will not be included in the bundle`
864
- }));
882
+ })), ...messages];
865
883
  }
866
884
  async function collectFiles(dir, descriptionFile, mergedBehaviorText, mergeSources, personaFile) {
867
885
  const files = /* @__PURE__ */ new Map();
@@ -881,16 +899,16 @@ async function collectFiles(dir, descriptionFile, mergedBehaviorText, mergeSourc
881
899
  }
882
900
  const refs = await collectBehaviorFileRefs(mergedBehaviorText);
883
901
  for (const { kind, text } of refs.values()) {
884
- if (isExternalPath(dir, text)) throw new Error(`E014: '${kind}' path '${text}' is absolute or escapes the agent root`);
885
- const ns = namespaceOf(kind);
886
- const nsPath = `${ns}/${text}`;
902
+ const bundlePath = normalizeRefPath(text);
903
+ if (isExternalPath(dir, bundlePath)) throw new Error(`E014: '${kind}' path '${text}' is absolute or escapes the agent root`);
887
904
  let content;
888
- for (const candidate of [(0, path.join)(dir, ns, text), (0, path.join)(dir, text)]) try {
889
- content = await (0, fs_promises.readFile)(candidate, "utf-8");
890
- break;
891
- } catch {}
892
- if (content === void 0) throw new Error(`E018: '${kind}' file '${text}' referenced in agent.behavior not found in ${dir} — looked for '${nsPath}' and '${text}'`);
893
- files.set(nsPath, content);
905
+ try {
906
+ content = await (0, fs_promises.readFile)((0, path.join)(dir, bundlePath), "utf-8");
907
+ } catch {
908
+ throw new Error(`E018: '${kind}' file '${text}' referenced in agent.behavior not found in ${dir} — looked for '${bundlePath}' relative to the agent root`);
909
+ }
910
+ if (files.has(bundlePath)) throw new Error(`E020: '${kind}' reference '${text}' resolves to '${bundlePath}', which collides with a reserved bundle path (the description file, agent.behavior, a merged behaviors/ file, or the persona) — reference a different path`);
911
+ files.set(bundlePath, content);
894
912
  }
895
913
  return files;
896
914
  }
@@ -926,9 +944,9 @@ async function pack(options = {}) {
926
944
  const warnings = [...lintWarnings, ...await findOrphanContentFiles(dir, mergedText)];
927
945
  const contentForHash = Array.from(allFiles.values()).join("");
928
946
  const sha256 = (0, crypto.createHash)("sha256").update(contentForHash).digest("hex");
929
- const id = require_zip_core.buildId({
947
+ const id = require_namespace.buildId({
930
948
  namespace: df.agent.domain ?? "unknown",
931
- name: require_zip_core.slugify(df.agent.name),
949
+ name: require_namespace.slugify(df.agent.name),
932
950
  version,
933
951
  digest: version ? commit : void 0
934
952
  });
@@ -938,7 +956,7 @@ async function pack(options = {}) {
938
956
  ...typesJson ? { types: ".agent/types.json" } : {},
939
957
  files: ".agent/files.json"
940
958
  };
941
- const aboutme = require_zip_core.buildAboutme({
959
+ const aboutme = require_namespace.buildAboutme({
942
960
  id,
943
961
  name: df.agent.name,
944
962
  description: df.description ?? "",
@@ -947,7 +965,7 @@ async function pack(options = {}) {
947
965
  license: df.agent.license ?? "",
948
966
  persona: df.persona ?? void 0,
949
967
  purpose: "unknown",
950
- compiler: `dot-agent/${require_zip_core.COMPILER_VERSION}`,
968
+ compiler: `dot-agent/${require_namespace.COMPILER_VERSION}`,
951
969
  commit,
952
970
  capabilities: df.capabilities.map((c) => ({
953
971
  id: c.name,
@@ -958,15 +976,15 @@ async function pack(options = {}) {
958
976
  });
959
977
  const zip = new jszip.default();
960
978
  const agentFolder = zip.folder(".agent");
961
- agentFolder.file("aboutme.json", require_zip_core.aboutmeToJson(aboutme));
979
+ agentFolder.file("aboutme.json", require_namespace.aboutmeToJson(aboutme));
962
980
  if (typesJson) agentFolder.file("types.json", typesJson);
963
981
  const filesJson = {
964
982
  description: descriptionFileName,
965
983
  behavior: "agent.behavior",
966
984
  ...df.persona ? { persona: df.persona } : {},
967
985
  behaviors: Array.from(allFiles.keys()).filter((f) => f.startsWith("behaviors/")),
968
- guides: Array.from(allFiles.keys()).filter((f) => f.startsWith("guides/")),
969
- knowledge: Array.from(allFiles.keys()).filter((f) => f.startsWith("knowledge/"))
986
+ guides: Array.from(allFiles.keys()).filter((f) => require_namespace.classifyContentPath(f) === "guides"),
987
+ knowledge: Array.from(allFiles.keys()).filter((f) => require_namespace.classifyContentPath(f) === "knowledge")
970
988
  };
971
989
  agentFolder.file("files.json", JSON.stringify(filesJson, null, 2));
972
990
  for (const [path$7, content] of allFiles) zip.file(path$7, content);
@@ -1007,14 +1025,14 @@ async function bundleFromDir(dir) {
1007
1025
  for (const w of warnings) process.stderr.write(`\x1b[33m⚠\x1b[0m ${w.file}:${w.line}:${w.col} ${w.code} ${w.message}\n`);
1008
1026
  const allFiles = await collectFiles(dir, descriptionFileName, mergedText, mergeSources, df.persona ?? void 0);
1009
1027
  const sha256 = (0, crypto.createHash)("sha256").update(Array.from(allFiles.values()).join("")).digest("hex");
1010
- const id = require_zip_core.buildId({
1028
+ const id = require_namespace.buildId({
1011
1029
  namespace: df.agent.domain ?? "unknown",
1012
- name: require_zip_core.slugify(df.agent.name),
1030
+ name: require_namespace.slugify(df.agent.name),
1013
1031
  version: "dev"
1014
1032
  });
1015
1033
  return {
1016
1034
  id,
1017
- aboutme: require_zip_core.buildAboutme({
1035
+ aboutme: require_namespace.buildAboutme({
1018
1036
  id,
1019
1037
  name: df.agent.name,
1020
1038
  description: df.description ?? "",
@@ -1023,7 +1041,7 @@ async function bundleFromDir(dir) {
1023
1041
  license: df.agent.license ?? "",
1024
1042
  persona: df.persona ?? void 0,
1025
1043
  purpose: "development",
1026
- compiler: `dot-agent/${require_zip_core.COMPILER_VERSION}`,
1044
+ compiler: `dot-agent/${require_namespace.COMPILER_VERSION}`,
1027
1045
  capabilities: df.capabilities.map((c) => ({
1028
1046
  id: c.name,
1029
1047
  description: c.description ?? ""
@@ -1038,11 +1056,11 @@ async function bundleFromDir(dir) {
1038
1056
  description: descriptionText,
1039
1057
  behavior: allFiles.get("agent.behavior") ?? mergedText,
1040
1058
  persona: df.persona ? allFiles.get(df.persona) : void 0,
1041
- guides: Array.from(allFiles.entries()).filter(([p]) => p.startsWith("guides/")).map(([path$1, content]) => ({
1059
+ guides: Array.from(allFiles.entries()).filter(([p]) => require_namespace.classifyContentPath(p) === "guides").map(([path$1, content]) => ({
1042
1060
  path: path$1,
1043
1061
  content
1044
1062
  })),
1045
- knowledge: Array.from(allFiles.entries()).filter(([p]) => p.startsWith("knowledge/")).map(([path$2, content]) => ({
1063
+ knowledge: Array.from(allFiles.entries()).filter(([p]) => require_namespace.classifyContentPath(p) === "knowledge").map(([path$2, content]) => ({
1046
1064
  path: path$2,
1047
1065
  content
1048
1066
  })),
@@ -1054,21 +1072,24 @@ async function bundleFromDir(dir) {
1054
1072
  };
1055
1073
  }
1056
1074
  //#endregion
1057
- exports.aboutmeToJson = require_zip_core.aboutmeToJson;
1058
- exports.buildAboutme = require_zip_core.buildAboutme;
1059
- exports.buildId = require_zip_core.buildId;
1075
+ exports.CONTENT_NAMESPACES = require_namespace.CONTENT_NAMESPACES;
1076
+ exports.aboutmeToJson = require_namespace.aboutmeToJson;
1077
+ exports.buildAboutme = require_namespace.buildAboutme;
1078
+ exports.buildId = require_namespace.buildId;
1060
1079
  exports.bundleFromDir = bundleFromDir;
1080
+ exports.classifyContentPath = require_namespace.classifyContentPath;
1061
1081
  exports.collectFiles = collectFiles;
1062
1082
  exports.consolidate = consolidate;
1063
1083
  exports.createLinter = createLinter;
1064
- exports.createZip = require_zip_core.createZip;
1065
- exports.extractDigest = require_zip_core.extractDigest;
1066
- exports.extractFiles = require_zip_core.extractFiles;
1067
- exports.extractName = require_zip_core.extractName;
1084
+ exports.createZip = require_namespace.createZip;
1085
+ exports.extractDigest = require_namespace.extractDigest;
1086
+ exports.extractFiles = require_namespace.extractFiles;
1087
+ exports.extractName = require_namespace.extractName;
1068
1088
  exports.getBehaviorScxml = getBehaviorScxml;
1069
1089
  exports.getContextNode = getContextNode;
1070
1090
  exports.initBehaviorParser = initBehaviorParser;
1071
1091
  exports.initParsers = initParsers;
1092
+ exports.isInContentNamespace = require_namespace.isInContentNamespace;
1072
1093
  exports.lintBehavior = lintBehavior;
1073
1094
  exports.lintDescription = lintDescription;
1074
1095
  exports.nodeAtOffset = nodeAtOffset;
@@ -1076,10 +1097,10 @@ exports.nodeToRange = nodeToRange;
1076
1097
  exports.nodesOfType = nodesOfType;
1077
1098
  exports.pack = pack;
1078
1099
  exports.parse = parse;
1079
- exports.parseAboutme = require_zip_core.parseAboutme;
1100
+ exports.parseAboutme = require_namespace.parseAboutme;
1080
1101
  exports.parseBehaviorFile = parseBehaviorFile;
1081
1102
  exports.parseDescriptionFile = parseDescriptionFile;
1082
- exports.parseId = require_zip_core.parseId;
1103
+ exports.parseId = require_namespace.parseId;
1083
1104
  exports.parseSync = parseSync;
1084
1105
  exports.positionToOffset = positionToOffset;
1085
1106
  exports.readZip = readZip;