waymark-engine 1.0.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.
Files changed (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +96 -0
  3. package/bin/waymark-ask.mjs +4 -0
  4. package/bin/waymark-chart.mjs +4 -0
  5. package/bin/waymark-discover.mjs +4 -0
  6. package/dist/src/astExtractor.d.ts +45 -0
  7. package/dist/src/astExtractor.js +388 -0
  8. package/dist/src/astExtractor.js.map +1 -0
  9. package/dist/src/capnAdapter.d.ts +16 -0
  10. package/dist/src/capnAdapter.js +149 -0
  11. package/dist/src/capnAdapter.js.map +1 -0
  12. package/dist/src/cli.d.ts +7 -0
  13. package/dist/src/cli.js +149 -0
  14. package/dist/src/cli.js.map +1 -0
  15. package/dist/src/discoveryRouter.d.ts +13 -0
  16. package/dist/src/discoveryRouter.js +137 -0
  17. package/dist/src/discoveryRouter.js.map +1 -0
  18. package/dist/src/index.d.ts +6 -0
  19. package/dist/src/index.js +9 -0
  20. package/dist/src/index.js.map +1 -0
  21. package/dist/src/integrity.d.ts +10 -0
  22. package/dist/src/integrity.js +93 -0
  23. package/dist/src/integrity.js.map +1 -0
  24. package/dist/src/mcp/capnIndex.d.ts +2 -0
  25. package/dist/src/mcp/capnIndex.js +15 -0
  26. package/dist/src/mcp/capnIndex.js.map +1 -0
  27. package/dist/src/mcp/capnTools.d.ts +5 -0
  28. package/dist/src/mcp/capnTools.js +190 -0
  29. package/dist/src/mcp/capnTools.js.map +1 -0
  30. package/dist/src/mcp/server.d.ts +22 -0
  31. package/dist/src/mcp/server.js +241 -0
  32. package/dist/src/mcp/server.js.map +1 -0
  33. package/dist/src/mcp/types.d.ts +80 -0
  34. package/dist/src/mcp/types.js +2 -0
  35. package/dist/src/mcp/types.js.map +1 -0
  36. package/dist/src/paths.d.ts +39 -0
  37. package/dist/src/paths.js +134 -0
  38. package/dist/src/paths.js.map +1 -0
  39. package/dist/src/types.d.ts +44 -0
  40. package/dist/src/types.js +11 -0
  41. package/dist/src/types.js.map +1 -0
  42. package/package.json +61 -0
@@ -0,0 +1,134 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { execFileSync } from "node:child_process";
5
+ import { TextDecoder } from "node:util";
6
+ import { WaymarkError } from "./types.js";
7
+ const decoder = new TextDecoder("utf-8", { fatal: true });
8
+ export function sha256(value) {
9
+ return crypto.createHash("sha256").update(value).digest("hex");
10
+ }
11
+ /**
12
+ * Resolve the repository root: `git rev-parse --show-toplevel` when inside a Git
13
+ * worktree, otherwise the process cwd. The discovery engine itself needs no Git —
14
+ * the fallback keeps the CLI and library usable outside a repository.
15
+ */
16
+ export function repoRoot(cwd = process.cwd()) {
17
+ try {
18
+ const output = execFileSync("git", ["-C", cwd, "rev-parse", "--show-toplevel"], {
19
+ encoding: "buffer",
20
+ stdio: ["ignore", "pipe", "pipe"],
21
+ windowsHide: true,
22
+ timeout: 5000,
23
+ });
24
+ const root = decoder.decode(output).trim();
25
+ if (!root)
26
+ throw new Error("empty Git root");
27
+ return fs.realpathSync.native(root);
28
+ }
29
+ catch {
30
+ return fs.realpathSync.native(cwd);
31
+ }
32
+ }
33
+ function isInside(root, candidate) {
34
+ const relative = path.relative(root, candidate);
35
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
36
+ }
37
+ export function normalizeRelativePath(input) {
38
+ if (typeof input !== "string" || input.length === 0 || input.includes("\0")) {
39
+ throw new WaymarkError("INVALID_PATH", "Path must be a nonempty repository-relative path");
40
+ }
41
+ const slashPath = input.replaceAll("\\", "/");
42
+ if (path.posix.isAbsolute(slashPath) || /^[A-Za-z]:/u.test(slashPath)) {
43
+ throw new WaymarkError("INVALID_PATH", "Absolute paths are not allowed");
44
+ }
45
+ const normalized = path.posix.normalize(slashPath);
46
+ if (normalized === "." || normalized === ".." || normalized.startsWith("../")) {
47
+ throw new WaymarkError("INVALID_PATH", "Path traversal is not allowed");
48
+ }
49
+ return normalized.replace(/^\.\//u, "");
50
+ }
51
+ export function resolveRepositoryFile(root, storedPath) {
52
+ const relative = normalizeRelativePath(storedPath);
53
+ const lexical = path.resolve(root, ...relative.split("/"));
54
+ if (!isInside(root, lexical))
55
+ throw new WaymarkError("INVALID_PATH", "Path escapes repository root");
56
+ let real;
57
+ try {
58
+ real = fs.realpathSync.native(lexical);
59
+ }
60
+ catch {
61
+ throw new WaymarkError("FILE_MISSING", `Referenced file is missing: ${relative}`, 2);
62
+ }
63
+ const realRoot = fs.realpathSync.native(root);
64
+ if (!isInside(realRoot, real))
65
+ throw new WaymarkError("SYMLINK_ESCAPE", "Referenced symlink escapes repository root", 2);
66
+ const stat = fs.statSync(real);
67
+ if (!stat.isFile())
68
+ throw new WaymarkError("NOT_REGULAR_FILE", `Referenced path is not a regular file: ${relative}`, 2);
69
+ return { lexical, real };
70
+ }
71
+ export function readFileBytes(root, storedPath) {
72
+ const file = resolveRepositoryFile(root, storedPath);
73
+ return { path: file.real, bytes: fs.readFileSync(file.real) };
74
+ }
75
+ export function readFileText(root, storedPath) {
76
+ const result = readFileBytes(root, storedPath);
77
+ try {
78
+ return { ...result, text: decoder.decode(result.bytes) };
79
+ }
80
+ catch {
81
+ throw new WaymarkError("INVALID_UTF8", `Referenced file is not valid UTF-8: ${storedPath}`, 2);
82
+ }
83
+ }
84
+ export function normalizedLines(text) {
85
+ return text.replace(/\r\n?/gu, "\n").split("\n");
86
+ }
87
+ export function extractRange(lines, range) {
88
+ if (!Number.isInteger(range.start) || !Number.isInteger(range.end) || range.start < 1 || range.end < range.start || range.end > lines.length) {
89
+ throw new WaymarkError("INVALID_RANGE", `Invalid line range ${range.start}-${range.end}`);
90
+ }
91
+ return lines.slice(range.start - 1, range.end).join("\n");
92
+ }
93
+ export function normalizeSpan(text) {
94
+ const nfc = text.normalize("NFC").replace(/\r\n?/gu, "\n");
95
+ const lines = nfc.split("\n").map((line) => line.replace(/[ \t]+$/u, ""));
96
+ while (lines.length > 0 && lines[0]?.trim() === "")
97
+ lines.shift();
98
+ while (lines.length > 0 && lines[lines.length - 1]?.trim() === "")
99
+ lines.pop();
100
+ return lines.join("\n");
101
+ }
102
+ function tokens(line) {
103
+ return line.match(/[\p{L}\p{N}_]+/gu) ?? [];
104
+ }
105
+ export function structuralSignature(normalized) {
106
+ const lines = normalized.split("\n");
107
+ const first = lines.find((line) => line.trim() !== "") ?? "";
108
+ const last = [...lines].reverse().find((line) => line.trim() !== "") ?? "";
109
+ return {
110
+ firstHash: sha256(first),
111
+ lastHash: sha256(last),
112
+ firstTokensPrefix: tokens(first).slice(0, 10),
113
+ lastTokensPrefix: tokens(last).slice(0, 10),
114
+ };
115
+ }
116
+ /**
117
+ * Anchor a repository-relative file range: full-file hash plus a normalized,
118
+ * relocation-tolerant span hash. This is the tamper-evidence primitive — the
119
+ * same one the in-flight continuity ledger used, kept standalone because it is
120
+ * the cheapest way to pin "this span said X" to a later integrity check.
121
+ */
122
+ export function anchorForRange(root, storedPath, range) {
123
+ const file = readFileText(root, storedPath);
124
+ const lines = normalizedLines(file.text);
125
+ const normalized = normalizeSpan(extractRange(lines, range));
126
+ return {
127
+ fileSha256: sha256(file.bytes),
128
+ normalizedSpanHash: sha256(Buffer.from(normalized, "utf8")),
129
+ normalizedSpanLen: Buffer.byteLength(normalized, "utf8"),
130
+ spanLineCount: range.end - range.start + 1,
131
+ structuralSignature: structuralSignature(normalized),
132
+ };
133
+ }
134
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAkC,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE1D,MAAM,UAAU,MAAM,CAAC,KAAsB;IAC3C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE;YAC9E,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC7C,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,kDAAkD,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,+BAA+B,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,UAAkB;IACpE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IACrG,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,+BAA+B,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,4CAA4C,EAAE,CAAC,CAAC,CAAC;IACzH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,0CAA0C,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IACxH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,UAAkB;IAC5D,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,UAAkB;IAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,uCAAuC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAwB,EAAE,KAAgB;IACrE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7I,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,sBAAsB,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAClE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3E,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7C,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,UAAkB,EAAE,KAAgB;IAO/E,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7D,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3D,iBAAiB,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC;QACxD,aAAa,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;QAC1C,mBAAmB,EAAE,mBAAmB,CAAC,UAAU,CAAC;KACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,44 @@
1
+ export type AdapterProfile = "capn-cli" | "none";
2
+ export type VerificationStatus = "FRESH" | "MOVED" | "STALE";
3
+ export interface LineRange {
4
+ start: number;
5
+ end: number;
6
+ }
7
+ export interface StructuralSignature {
8
+ firstHash: string;
9
+ lastHash: string;
10
+ firstTokensPrefix: string[];
11
+ lastTokensPrefix: string[];
12
+ }
13
+ export interface HopRecord {
14
+ index: number;
15
+ path: string;
16
+ label: string;
17
+ inference: string;
18
+ range: LineRange;
19
+ fileSha256: string;
20
+ normalizedSpanHash: string;
21
+ normalizedSpanLen: number;
22
+ spanLineCount: number;
23
+ structuralSignature: StructuralSignature;
24
+ }
25
+ export interface HopCheck {
26
+ index: number;
27
+ path: string;
28
+ status: VerificationStatus;
29
+ originalRange: LineRange;
30
+ resolvedRange?: LineRange;
31
+ reason?: string;
32
+ currentFileSha256?: string;
33
+ }
34
+ export interface PublicationResult {
35
+ published: boolean;
36
+ adapter: AdapterProfile;
37
+ output: string;
38
+ error?: string;
39
+ }
40
+ export declare class WaymarkError extends Error {
41
+ readonly code: string;
42
+ readonly exitCode: number;
43
+ constructor(code: string, message: string, exitCode?: number);
44
+ }
@@ -0,0 +1,11 @@
1
+ export class WaymarkError extends Error {
2
+ code;
3
+ exitCode;
4
+ constructor(code, message, exitCode = 1) {
5
+ super(message);
6
+ this.name = "WaymarkError";
7
+ this.code = code;
8
+ this.exitCode = exitCode;
9
+ }
10
+ }
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AA8CA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAS;IACb,QAAQ,CAAS;IAE1B,YAAY,IAAY,EAAE,OAAe,EAAE,QAAQ,GAAG,CAAC;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "waymark-engine",
3
+ "version": "1.0.0",
4
+ "description": "Waymark Engine: two-phase symbolic+semantic discovery (Tree-sitter WASM AST + Capn FTS5) for AI coding agents — clean misses instead of guesses.",
5
+ "type": "module",
6
+ "main": "./dist/src/index.js",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/src/index.d.ts",
10
+ "default": "./dist/src/index.js"
11
+ },
12
+ "./cli": "./dist/src/cli.js"
13
+ },
14
+ "bin": {
15
+ "waymark": "./dist/src/cli.js",
16
+ "waymark-ask": "./bin/waymark-ask.mjs",
17
+ "waymark-discover": "./bin/waymark-discover.mjs",
18
+ "waymark-chart": "./bin/waymark-chart.mjs",
19
+ "waymark-mcp": "./dist/src/mcp/capnIndex.js"
20
+ },
21
+ "files": [
22
+ "dist/src",
23
+ "bin",
24
+ "README.md",
25
+ "LICENSE"
26
+ ],
27
+ "engines": {
28
+ "node": ">=22"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/paragon-ux/waymark-engine.git"
33
+ },
34
+ "keywords": [
35
+ "agent",
36
+ "ast",
37
+ "tree-sitter",
38
+ "discovery",
39
+ "code-search",
40
+ "mcp",
41
+ "semantic-search",
42
+ "symbols",
43
+ "llm-tools"
44
+ ],
45
+ "license": "MIT",
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.json",
48
+ "test": "npm run build && node --test \"dist/test/**/*.test.js\"",
49
+ "verify": "npm run build && node --test \"dist/test/**/*.test.js\"",
50
+ "prepublishOnly": "npm run verify"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^22.15.0",
54
+ "capn-hook": "0.2.2",
55
+ "typescript": "^5.8.3"
56
+ },
57
+ "dependencies": {
58
+ "tree-sitter-wasms": "^0.1.13",
59
+ "web-tree-sitter": "0.24.0"
60
+ }
61
+ }