@reposkein/mcp 0.2.7 → 0.4.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 (140) hide show
  1. package/README.md +73 -1
  2. package/binary-digests.json +4 -4
  3. package/dist/SKILL.md +63 -1
  4. package/dist/cli/adr.d.ts +37 -0
  5. package/dist/cli/adr.js +231 -0
  6. package/dist/cli/adr.js.map +1 -0
  7. package/dist/cli/agentAdapters.d.ts +68 -0
  8. package/dist/cli/agentAdapters.js +223 -0
  9. package/dist/cli/agentAdapters.js.map +1 -0
  10. package/dist/cli/ansi.d.ts +24 -0
  11. package/dist/cli/ansi.js +40 -0
  12. package/dist/cli/ansi.js.map +1 -0
  13. package/dist/cli/doctor.d.ts +34 -2
  14. package/dist/cli/doctor.js +53 -5
  15. package/dist/cli/doctor.js.map +1 -1
  16. package/dist/cli/doctorDecisions.d.ts +5 -0
  17. package/dist/cli/doctorDecisions.js +83 -0
  18. package/dist/cli/doctorDecisions.js.map +1 -0
  19. package/dist/cli/doctorFreshness.d.ts +43 -0
  20. package/dist/cli/doctorFreshness.js +111 -0
  21. package/dist/cli/doctorFreshness.js.map +1 -0
  22. package/dist/cli/doctorSummaries.d.ts +2 -0
  23. package/dist/cli/doctorSummaries.js +95 -0
  24. package/dist/cli/doctorSummaries.js.map +1 -0
  25. package/dist/cli/federatedDiscovery.d.ts +16 -0
  26. package/dist/cli/federatedDiscovery.js +75 -0
  27. package/dist/cli/federatedDiscovery.js.map +1 -0
  28. package/dist/cli/init.d.ts +69 -6
  29. package/dist/cli/init.js +194 -28
  30. package/dist/cli/init.js.map +1 -1
  31. package/dist/cli/sourceSlices.d.ts +17 -0
  32. package/dist/cli/sourceSlices.js +59 -0
  33. package/dist/cli/sourceSlices.js.map +1 -0
  34. package/dist/cli/stats.d.ts +29 -0
  35. package/dist/cli/stats.js +180 -0
  36. package/dist/cli/stats.js.map +1 -0
  37. package/dist/cli/view.d.ts +71 -3
  38. package/dist/cli/view.js +147 -12
  39. package/dist/cli/view.js.map +1 -1
  40. package/dist/guard/decisionValidation.d.ts +29 -0
  41. package/dist/guard/decisionValidation.js +51 -0
  42. package/dist/guard/decisionValidation.js.map +1 -0
  43. package/dist/guard/summaryValidation.d.ts +3 -0
  44. package/dist/guard/summaryValidation.js +5 -3
  45. package/dist/guard/summaryValidation.js.map +1 -1
  46. package/dist/index.d.ts +48 -0
  47. package/dist/index.js +355 -78
  48. package/dist/index.js.map +1 -1
  49. package/dist/indexer/decisionsAffected.d.ts +42 -0
  50. package/dist/indexer/decisionsAffected.js +149 -0
  51. package/dist/indexer/decisionsAffected.js.map +1 -0
  52. package/dist/indexer/fetchBinary.d.ts +14 -0
  53. package/dist/indexer/fetchBinary.js +81 -40
  54. package/dist/indexer/fetchBinary.js.map +1 -1
  55. package/dist/indexer/runIndexer.d.ts +3 -2
  56. package/dist/indexer/runIndexer.js +8 -4
  57. package/dist/indexer/runIndexer.js.map +1 -1
  58. package/dist/profile/decisions.d.ts +37 -0
  59. package/dist/profile/decisions.js +112 -0
  60. package/dist/profile/decisions.js.map +1 -0
  61. package/dist/profile/types.d.ts +8 -0
  62. package/dist/store/GraphStore.d.ts +5 -0
  63. package/dist/store/JsonlGraphStore.d.ts +14 -3
  64. package/dist/store/JsonlGraphStore.js +66 -19
  65. package/dist/store/JsonlGraphStore.js.map +1 -1
  66. package/dist/store/decisions.d.ts +131 -0
  67. package/dist/store/decisions.js +321 -0
  68. package/dist/store/decisions.js.map +1 -0
  69. package/dist/store/indexedAt.d.ts +18 -0
  70. package/dist/store/indexedAt.js +56 -0
  71. package/dist/store/indexedAt.js.map +1 -0
  72. package/dist/store/instrumentTool.d.ts +40 -0
  73. package/dist/store/instrumentTool.js +82 -0
  74. package/dist/store/instrumentTool.js.map +1 -0
  75. package/dist/store/repoContextCache.d.ts +15 -0
  76. package/dist/store/repoContextCache.js +26 -0
  77. package/dist/store/repoContextCache.js.map +1 -0
  78. package/dist/store/repoSession.d.ts +63 -0
  79. package/dist/store/repoSession.js +123 -0
  80. package/dist/store/repoSession.js.map +1 -0
  81. package/dist/store/resolveRepoPath.d.ts +31 -0
  82. package/dist/store/resolveRepoPath.js +85 -0
  83. package/dist/store/resolveRepoPath.js.map +1 -0
  84. package/dist/store/sessionLog.d.ts +98 -0
  85. package/dist/store/sessionLog.js +216 -0
  86. package/dist/store/sessionLog.js.map +1 -0
  87. package/dist/store/sessionStats.d.ts +55 -0
  88. package/dist/store/sessionStats.js +140 -0
  89. package/dist/store/sessionStats.js.map +1 -0
  90. package/dist/store/sidecar.d.ts +39 -3
  91. package/dist/store/sidecar.js +89 -5
  92. package/dist/store/sidecar.js.map +1 -1
  93. package/dist/store/summaryShards.d.ts +117 -0
  94. package/dist/store/summaryShards.js +291 -0
  95. package/dist/store/summaryShards.js.map +1 -0
  96. package/dist/store/teamConfig.d.ts +13 -0
  97. package/dist/store/teamConfig.js +49 -0
  98. package/dist/store/teamConfig.js.map +1 -0
  99. package/dist/tools/getContextProfile.d.ts +1 -1
  100. package/dist/tools/getContextProfile.js +9 -1
  101. package/dist/tools/getContextProfile.js.map +1 -1
  102. package/dist/tools/getDecision.d.ts +6 -0
  103. package/dist/tools/getDecision.js +59 -0
  104. package/dist/tools/getDecision.js.map +1 -0
  105. package/dist/tools/impact.d.ts +1 -1
  106. package/dist/tools/impact.js +13 -1
  107. package/dist/tools/impact.js.map +1 -1
  108. package/dist/tools/indexerTools.d.ts +16 -2
  109. package/dist/tools/indexerTools.js +44 -5
  110. package/dist/tools/indexerTools.js.map +1 -1
  111. package/dist/tools/listDecisions.d.ts +19 -0
  112. package/dist/tools/listDecisions.js +93 -0
  113. package/dist/tools/listDecisions.js.map +1 -0
  114. package/dist/tools/reaffirmDecision.d.ts +11 -0
  115. package/dist/tools/reaffirmDecision.js +55 -0
  116. package/dist/tools/reaffirmDecision.js.map +1 -0
  117. package/dist/tools/recordDecision.d.ts +24 -0
  118. package/dist/tools/recordDecision.js +135 -0
  119. package/dist/tools/recordDecision.js.map +1 -0
  120. package/dist/tools/semanticFind.d.ts +9 -2
  121. package/dist/tools/semanticFind.js +44 -2
  122. package/dist/tools/semanticFind.js.map +1 -1
  123. package/dist/tools/setDecisionStatus.d.ts +8 -0
  124. package/dist/tools/setDecisionStatus.js +34 -0
  125. package/dist/tools/setDecisionStatus.js.map +1 -0
  126. package/dist/viz/assets/{graph.worker-CC7BeE-8.js → graph.worker-DkH6-lMU.js} +1 -1
  127. package/dist/viz/assets/index-CxqeGuRS.css +1 -0
  128. package/dist/viz/assets/index-DiNZyrXx.js +9 -0
  129. package/dist/viz/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  130. package/dist/viz/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  131. package/dist/viz/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2 +0 -0
  132. package/dist/viz/assets/r3f-BZY3QR6_.js +336 -0
  133. package/dist/viz/assets/tanstack-CjXr-L-s.js +62 -0
  134. package/dist/viz/assets/three-Cpu5RUEM.js +4116 -0
  135. package/dist/viz/index.html +5 -4
  136. package/package.json +5 -4
  137. package/dist/viz/assets/index-C_8UkiJ8.js +0 -9
  138. package/dist/viz/assets/r3f-Cku1OhB-.js +0 -277
  139. package/dist/viz/assets/tanstack-DyXcNRWk.js +0 -77
  140. package/dist/viz/assets/three-Z8XaLGmf.js +0 -3839
@@ -1,4 +1,5 @@
1
1
  import { type IncomingMessage, type ServerResponse } from "node:http";
2
+ import { type SourceSliceEntry } from "./sourceSlices.js";
2
3
  /** The prebuilt viz/ SPA bundle, copied into the mcp package at build time
3
4
  * (scripts/bundle-viz.mjs copies viz/dist -> mcp/dist/viz). */
4
5
  export declare function vizDistDir(): string;
@@ -7,6 +8,25 @@ export interface ViewOptions {
7
8
  host: string;
8
9
  open: boolean;
9
10
  }
11
+ export interface RepoBakeMeta {
12
+ commitSha: string | null;
13
+ builtAt: string | null;
14
+ repoUrl: string | null;
15
+ /** `[team] pages_url` from `.reposkein/config.toml`, or null when unset.
16
+ * The team's canonical/CI-published constellation link (e.g. a GitHub
17
+ * Pages URL) — distinct from whatever local `view`/export a machine
18
+ * happens to be looking at. Drives the viewer header's "team constellation"
19
+ * link (viz/src/routes/Root.tsx). */
20
+ pagesUrl: string | null;
21
+ }
22
+ /** Best-effort git introspection for the live `view` server: the current HEAD
23
+ * sha + a guessed web URL for `origin` (github.com only; other hosts degrade
24
+ * to null rather than guessing wrong), plus `[team] pages_url` from
25
+ * config.toml. Never throws — any failure (not a repo, no origin, git
26
+ * missing, no config.toml) yields nulls so the affected UI just doesn't
27
+ * render. Computed ONCE at server start (not per-request) since it shells
28
+ * out to git. */
29
+ export declare function resolveServerRepoMeta(repoPath: string): RepoBakeMeta;
10
30
  /** Builds the request handler. Exposed for tests (no listening socket). */
11
31
  export declare function makeViewHandler(repoPath: string, repoId: string): (req: IncomingMessage, res: ServerResponse) => void;
12
32
  /** `reposkein-mcp view [repoPath] [--port N] [--host H] [--no-open]`.
@@ -15,11 +35,54 @@ export declare function makeViewHandler(repoPath: string, repoId: string): (req:
15
35
  export declare function runView(repoPath: string, repoId: string, opts: ViewOptions): Promise<number>;
16
36
  /** Parses `view` CLI args (after the `view` subcommand). When `--export <dir>`
17
37
  * is present, returns `exportDir` set (and the server opts are ignored). */
38
+ /** Metadata baked into a static export, driving the viewer's staleness badge.
39
+ * `builtAt` defaults to bake-time (now) when not given explicitly — it is the
40
+ * one time-derived field: the same repo + commitSha + builtAt always bakes
41
+ * byte-identical output, but builtAt itself is naturally different per run
42
+ * unless the caller pins it (e.g. for a reproducibility test). */
43
+ export interface ExportBakeOptions {
44
+ commitSha?: string | null;
45
+ repoUrl?: string | null;
46
+ builtAt?: string | null;
47
+ /** `[team] pages_url`; defaults to reading `.reposkein/config.toml` at
48
+ * export time when omitted (same source resolveServerRepoMeta uses in
49
+ * server mode) — pass explicitly only to override or pin it. */
50
+ pagesUrl?: string | null;
51
+ /** Bake size-capped per-node source slices (design: optional, flag-gated). */
52
+ withSource?: boolean;
53
+ /** Byte cap for baked source slices; only consulted when withSource is true. */
54
+ sourceMaxBytes?: number;
55
+ /** How many directory levels to scan for nested `.reposkein/` repos. */
56
+ federatedDepth?: number;
57
+ }
18
58
  export declare function parseViewArgs(argv: string[]): {
19
59
  repoPath: string;
20
60
  opts: ViewOptions;
21
61
  exportDir: string | null;
62
+ exportOpts: ExportBakeOptions;
22
63
  };
64
+ /** A federated repo's data inlined into a static export (self-contained: no
65
+ * fetch of nodesUrl/edgesUrl at runtime — the viewer reads federatedText). */
66
+ export interface FederatedBakeEntry {
67
+ repoId: string;
68
+ rootPath: string;
69
+ nodesText: string;
70
+ edgesText: string;
71
+ }
72
+ /** Extra data baked into `graph-data.js` alongside the root repo's JSONL. */
73
+ export interface GraphDataExtra {
74
+ meta?: RepoBakeMeta;
75
+ /** Git-derived file co-change map (same shape /api/temporal returns), or
76
+ * omitted/{} when temporal data is unavailable. */
77
+ cochange?: Record<string, {
78
+ path: string;
79
+ support: number;
80
+ confidence: number;
81
+ }[]>;
82
+ federated?: FederatedBakeEntry[];
83
+ /** node id -> source slice, size-capped (design: optional, flag-gated). */
84
+ sourceSlices?: Record<string, SourceSliceEntry>;
85
+ }
23
86
  /** Builds the contents of `graph-data.js` for a static export: a single
24
87
  * assignment of `window.__REPOSKEIN_GRAPH__` with the manifest + the inlined
25
88
  * JSONL text. The viewer's static-mode path parses this on the main thread.
@@ -27,7 +90,7 @@ export declare function parseViewArgs(argv: string[]): {
27
90
  * Pure (string in → string out) so the baked shape is unit-testable. The
28
91
  * payload is a JSON.stringify'd object assigned in an external .js file (NOT
29
92
  * inline HTML), so `</script>` sequences in the JSONL need no escaping. */
30
- export declare function buildGraphDataJs(repoId: string, nodesText: string, edgesText: string): string;
93
+ export declare function buildGraphDataJs(repoId: string, nodesText: string, edgesText: string, extra?: GraphDataExtra): string;
31
94
  /** Injects `<script src="./graph-data.js"></script>` into `html` BEFORE the
32
95
  * first app bundle `<script ... src=...>` (or before </head> / </body> as a
33
96
  * fallback) so the global is set prior to the app booting. Pure. Idempotent:
@@ -36,5 +99,10 @@ export declare function injectGraphDataScript(html: string): string;
36
99
  /** `reposkein-mcp view --export <outDir> [repoPath]`.
37
100
  * Writes a SELF-CONTAINED static site to `<outDir>`: the viz bundle plus the
38
101
  * repo's graph baked into `graph-data.js`, so it loads with NO server (works
39
- * from file:// and from any static-host subpath). Returns the exit code. */
40
- export declare function runExport(repoPath: string, repoId: string, outDir: string): Promise<number>;
102
+ * from file:// and from any static-host subpath). Returns the exit code.
103
+ *
104
+ * Determinism: given the same repo state + the same {commitSha, repoUrl,
105
+ * builtAt} inputs, the export is byte-identical. `builtAt` is the one
106
+ * time-derived field (defaults to bake-time `new Date().toISOString()` when
107
+ * not passed) — pin it explicitly for a reproducible export. */
108
+ export declare function runExport(repoPath: string, repoId: string, outDir: string, bake?: ExportBakeOptions): Promise<number>;
package/dist/cli/view.js CHANGED
@@ -2,9 +2,12 @@ import { createServer } from "node:http";
2
2
  import { readFileSync, existsSync, statSync, createReadStream, mkdirSync, cpSync, writeFileSync, realpathSync, } from "node:fs";
3
3
  import { join, resolve, normalize, extname } from "node:path";
4
4
  import { gzipSync } from "node:zlib";
5
- import { spawn } from "node:child_process";
5
+ import { spawn, execFileSync } from "node:child_process";
6
6
  import { packageRoot } from "../indexer/fetchBinary.js";
7
+ import { readTeamPagesUrl } from "../store/teamConfig.js";
7
8
  import { getTemporal } from "../temporal/temporal.js";
9
+ import { discoverFederatedRepos } from "./federatedDiscovery.js";
10
+ import { collectSourceSlices } from "./sourceSlices.js";
8
11
  /** The prebuilt viz/ SPA bundle, copied into the mcp package at build time
9
12
  * (scripts/bundle-viz.mjs copies viz/dist -> mcp/dist/viz). */
10
13
  export function vizDistDir() {
@@ -65,7 +68,40 @@ function safeJoin(root, urlPath) {
65
68
  return abs;
66
69
  return null;
67
70
  }
68
- function buildManifest(repoId, repoRoot) {
71
+ /** Best-effort git introspection for the live `view` server: the current HEAD
72
+ * sha + a guessed web URL for `origin` (github.com only; other hosts degrade
73
+ * to null rather than guessing wrong), plus `[team] pages_url` from
74
+ * config.toml. Never throws — any failure (not a repo, no origin, git
75
+ * missing, no config.toml) yields nulls so the affected UI just doesn't
76
+ * render. Computed ONCE at server start (not per-request) since it shells
77
+ * out to git. */
78
+ export function resolveServerRepoMeta(repoPath) {
79
+ const git = (args) => {
80
+ try {
81
+ return execFileSync("git", args, { cwd: repoPath, encoding: "utf8" }).trim() || null;
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ };
87
+ const commitSha = git(["rev-parse", "HEAD"]);
88
+ const remote = git(["remote", "get-url", "origin"]);
89
+ const repoUrl = remote ? githubHttpsUrl(remote) : null;
90
+ const pagesUrl = readTeamPagesUrl(repoPath);
91
+ return { commitSha, builtAt: new Date().toISOString(), repoUrl, pagesUrl };
92
+ }
93
+ /** Normalizes a git remote URL (https or ssh form) to an https://github.com/...
94
+ * web URL. Returns null for non-github.com remotes (no safe guess). */
95
+ function githubHttpsUrl(remote) {
96
+ const httpsMatch = remote.match(/^https:\/\/github\.com\/([^/]+)\/(.+?)(?:\.git)?\/?$/);
97
+ if (httpsMatch)
98
+ return `https://github.com/${httpsMatch[1]}/${httpsMatch[2]}`;
99
+ const sshMatch = remote.match(/^git@github\.com:([^/]+)\/(.+?)(?:\.git)?\/?$/);
100
+ if (sshMatch)
101
+ return `https://github.com/${sshMatch[1]}/${sshMatch[2]}`;
102
+ return null;
103
+ }
104
+ function buildManifest(repoId, repoRoot, meta) {
69
105
  return JSON.stringify({
70
106
  root: {
71
107
  repoId,
@@ -82,6 +118,7 @@ function buildManifest(repoId, repoRoot) {
82
118
  },
83
119
  federated: [], // M1: single repo. Federation deferred to M3.
84
120
  counts: { nodes: 0, edges: 0 }, // counts are advisory; the client re-derives.
121
+ meta,
85
122
  });
86
123
  }
87
124
  /** Max lines a single /api/source request may return (cap, design §P3). */
@@ -119,13 +156,16 @@ export function makeViewHandler(repoPath, repoId) {
119
156
  const edgesPath = join(reposkeinDir, "edges.jsonl");
120
157
  const distDir = vizDistDir();
121
158
  const repoRoot = resolve(repoPath);
159
+ // Computed once (shells out to git) — cheap and stable for the server's
160
+ // lifetime; recomputing per-request would add a git spawn to every load.
161
+ const repoMeta = resolveServerRepoMeta(repoPath);
122
162
  return function handler(req, res) {
123
163
  const rawUrl = req.url ?? "/";
124
164
  const qIdx = rawUrl.indexOf("?");
125
165
  const url = (qIdx === -1 ? rawUrl : rawUrl.slice(0, qIdx)) || "/";
126
166
  // --- API routes ---
127
167
  if (url === "/api/graph") {
128
- sendGzip(res, buildManifest(repoId, repoRoot), "application/json; charset=utf-8");
168
+ sendGzip(res, buildManifest(repoId, repoRoot, repoMeta), "application/json; charset=utf-8");
129
169
  return;
130
170
  }
131
171
  // Read-only source slice (design §P3). Path-guarded by safeJoin (rejects
@@ -245,13 +285,17 @@ export async function runView(repoPath, repoId, opts) {
245
285
  process.on("SIGTERM", shutdown);
246
286
  });
247
287
  }
248
- /** Parses `view` CLI args (after the `view` subcommand). When `--export <dir>`
249
- * is present, returns `exportDir` set (and the server opts are ignored). */
250
288
  export function parseViewArgs(argv) {
251
289
  let port = 4317;
252
290
  let host = "127.0.0.1";
253
291
  let open = true;
254
292
  let exportDir = null;
293
+ let commitSha = null;
294
+ let repoUrl = null;
295
+ let builtAt = null;
296
+ let pagesUrl;
297
+ let withSource = false;
298
+ let sourceMaxBytes;
255
299
  const positional = [];
256
300
  for (let i = 0; i < argv.length; i++) {
257
301
  const a = argv[i];
@@ -269,11 +313,48 @@ export function parseViewArgs(argv) {
269
313
  exportDir = argv[++i] ?? null;
270
314
  else if (a.startsWith("--export="))
271
315
  exportDir = a.slice(9);
316
+ else if (a === "--commit-sha")
317
+ commitSha = argv[++i] ?? null;
318
+ else if (a.startsWith("--commit-sha="))
319
+ commitSha = a.slice(13);
320
+ else if (a === "--repo-url")
321
+ repoUrl = argv[++i] ?? null;
322
+ else if (a.startsWith("--repo-url="))
323
+ repoUrl = a.slice(11);
324
+ else if (a === "--built-at")
325
+ builtAt = argv[++i] ?? null;
326
+ else if (a.startsWith("--built-at="))
327
+ builtAt = a.slice(11);
328
+ else if (a === "--pages-url")
329
+ pagesUrl = argv[++i];
330
+ else if (a.startsWith("--pages-url="))
331
+ pagesUrl = a.slice(12);
332
+ else if (a === "--with-source") {
333
+ withSource = true;
334
+ // Optional numeric byte-cap as the next bare token (e.g. `--with-source 500000`).
335
+ const next = argv[i + 1];
336
+ if (next && /^\d+$/.test(next))
337
+ sourceMaxBytes = parseInt(argv[++i], 10);
338
+ }
339
+ else if (a.startsWith("--with-source=")) {
340
+ withSource = true;
341
+ const v = a.slice(14);
342
+ if (/^\d+$/.test(v))
343
+ sourceMaxBytes = parseInt(v, 10);
344
+ }
272
345
  else if (!a.startsWith("-"))
273
346
  positional.push(a);
274
347
  }
275
348
  const repoPath = positional[0] ?? process.env.REPOSKEIN_REPO_PATH ?? ".";
276
- return { repoPath, opts: { port, host, open }, exportDir };
349
+ const exportOpts = {
350
+ commitSha: commitSha ?? process.env.REPOSKEIN_COMMIT_SHA ?? null,
351
+ repoUrl: repoUrl ?? process.env.REPOSKEIN_REPO_URL ?? null,
352
+ builtAt,
353
+ pagesUrl: pagesUrl ?? process.env.REPOSKEIN_PAGES_URL, // undefined -> runExport reads config.toml itself
354
+ withSource,
355
+ sourceMaxBytes,
356
+ };
357
+ return { repoPath, opts: { port, host, open }, exportDir, exportOpts };
277
358
  }
278
359
  /** Builds the contents of `graph-data.js` for a static export: a single
279
360
  * assignment of `window.__REPOSKEIN_GRAPH__` with the manifest + the inlined
@@ -282,7 +363,8 @@ export function parseViewArgs(argv) {
282
363
  * Pure (string in → string out) so the baked shape is unit-testable. The
283
364
  * payload is a JSON.stringify'd object assigned in an external .js file (NOT
284
365
  * inline HTML), so `</script>` sequences in the JSONL need no escaping. */
285
- export function buildGraphDataJs(repoId, nodesText, edgesText) {
366
+ export function buildGraphDataJs(repoId, nodesText, edgesText, extra = {}) {
367
+ const federated = extra.federated ?? [];
286
368
  // Static export bakes a single repo (no federation) and intentionally OMITS
287
369
  // repoRoot — the export is shared/hosted, so a local absolute path is both
288
370
  // meaningless and a leak; server-only features degrade in the viewer.
@@ -295,11 +377,26 @@ export function buildGraphDataJs(repoId, nodesText, edgesText) {
295
377
  nodesUrl: "/api/jsonl/nodes.jsonl",
296
378
  edgesUrl: "/api/jsonl/edges.jsonl",
297
379
  },
298
- federated: [],
380
+ // federated[] entries carry no fetchable URLs in a static export — the
381
+ // actual text is inlined below (federatedText), read entirely offline.
382
+ federated: federated.map((f) => ({
383
+ repoId: f.repoId,
384
+ rootPath: f.rootPath,
385
+ nodesUrl: "",
386
+ edgesUrl: "",
387
+ })),
299
388
  counts: { nodes: 0, edges: 0 },
300
389
  },
301
390
  nodesText,
302
391
  edgesText,
392
+ federatedText: federated.map((f) => ({
393
+ repoId: f.repoId,
394
+ nodesText: f.nodesText,
395
+ edgesText: f.edgesText,
396
+ })),
397
+ meta: extra.meta ?? { commitSha: null, builtAt: null, repoUrl: null, pagesUrl: null },
398
+ cochange: extra.cochange ?? {},
399
+ ...(extra.sourceSlices ? { sourceSlices: extra.sourceSlices } : {}),
303
400
  };
304
401
  return `window.__REPOSKEIN_GRAPH__ = ${JSON.stringify(payload)};\n`;
305
402
  }
@@ -325,8 +422,13 @@ export function injectGraphDataScript(html) {
325
422
  /** `reposkein-mcp view --export <outDir> [repoPath]`.
326
423
  * Writes a SELF-CONTAINED static site to `<outDir>`: the viz bundle plus the
327
424
  * repo's graph baked into `graph-data.js`, so it loads with NO server (works
328
- * from file:// and from any static-host subpath). Returns the exit code. */
329
- export async function runExport(repoPath, repoId, outDir) {
425
+ * from file:// and from any static-host subpath). Returns the exit code.
426
+ *
427
+ * Determinism: given the same repo state + the same {commitSha, repoUrl,
428
+ * builtAt} inputs, the export is byte-identical. `builtAt` is the one
429
+ * time-derived field (defaults to bake-time `new Date().toISOString()` when
430
+ * not passed) — pin it explicitly for a reproducible export. */
431
+ export async function runExport(repoPath, repoId, outDir, bake = {}) {
330
432
  const reposkeinDir = join(repoPath, ".reposkein");
331
433
  const nodesPath = join(reposkeinDir, "nodes.jsonl");
332
434
  const edgesPath = join(reposkeinDir, "edges.jsonl");
@@ -346,10 +448,41 @@ export async function runExport(repoPath, repoId, outDir) {
346
448
  // 1) Copy the prebuilt viz bundle into the output directory.
347
449
  mkdirSync(absOut, { recursive: true });
348
450
  cpSync(distDir, absOut, { recursive: true });
349
- // 2) Bake the repo graph into graph-data.js.
451
+ // 2) Bake the repo graph + metadata + temporal + federation into graph-data.js.
350
452
  const nodesText = readFileSync(nodesPath, "utf8");
351
453
  const edgesText = existsSync(edgesPath) ? readFileSync(edgesPath, "utf8") : "";
352
- writeFileSync(join(absOut, "graph-data.js"), buildGraphDataJs(repoId, nodesText, edgesText), "utf8");
454
+ const meta = {
455
+ commitSha: bake.commitSha ?? null,
456
+ repoUrl: bake.repoUrl ?? null,
457
+ builtAt: bake.builtAt ?? new Date().toISOString(),
458
+ pagesUrl: bake.pagesUrl !== undefined ? bake.pagesUrl : readTeamPagesUrl(repoPath),
459
+ };
460
+ // Temporal co-change data: the SAME code path /api/temporal uses, called
461
+ // once at export time so the static viewer's coupling overlay works
462
+ // offline. Best-effort — degrades to {} on any failure (never blocks the
463
+ // export).
464
+ const temporalResult = await getTemporal(repoPath);
465
+ const cochange = "cochange" in temporalResult ? temporalResult.cochange : {};
466
+ // Federation: nested `.reposkein/` repos discovered under repoPath, inlined
467
+ // in full (self-contained — no network fetch of federated JSONL at runtime).
468
+ const federatedRepos = discoverFederatedRepos(repoPath, bake.federatedDepth ?? 6);
469
+ const federated = [];
470
+ for (const fed of federatedRepos) {
471
+ const fNodes = join(fed.absPath, ".reposkein", "nodes.jsonl");
472
+ const fEdges = join(fed.absPath, ".reposkein", "edges.jsonl");
473
+ if (!existsSync(fNodes))
474
+ continue; // not indexed — skip, don't fail the export
475
+ federated.push({
476
+ repoId: fed.repoId,
477
+ rootPath: fed.rootPath,
478
+ nodesText: readFileSync(fNodes, "utf8"),
479
+ edgesText: existsSync(fEdges) ? readFileSync(fEdges, "utf8") : "",
480
+ });
481
+ }
482
+ const sourceSlices = bake.withSource
483
+ ? collectSourceSlices(repoPath, nodesText, bake.sourceMaxBytes ?? DEFAULT_SOURCE_MAX_BYTES)
484
+ : undefined;
485
+ writeFileSync(join(absOut, "graph-data.js"), buildGraphDataJs(repoId, nodesText, edgesText, { meta, cochange, federated, sourceSlices }), "utf8");
353
486
  // 3) Inject the graph-data.js script into index.html before the app bundle.
354
487
  const indexPath = join(absOut, "index.html");
355
488
  const html = readFileSync(indexPath, "utf8");
@@ -369,4 +502,6 @@ export async function runExport(repoPath, repoId, outDir) {
369
502
  console.error(` open ${join(absOut, "index.html")} or host this folder.`);
370
503
  return 0;
371
504
  }
505
+ /** Default byte cap for baked per-node source slices (--with-source). */
506
+ const DEFAULT_SOURCE_MAX_BYTES = 2_000_000;
372
507
  //# sourceMappingURL=view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/cli/view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/cli/view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /** Write-path guard for decision prose (PRD §3.6 discipline, same rules as
2
+ * summaries): plain text only, control chars stripped, fences/links rejected,
3
+ * per-field caps. Decisions are rationale, not instructions — this bounds the
4
+ * prompt-injection surface of a file that arrives via git pull. */
5
+ export declare const DECISION_FIELD_CAPS: {
6
+ readonly title: 120;
7
+ readonly context: 2000;
8
+ readonly decision: 2000;
9
+ readonly consequences: 2000;
10
+ readonly alternatives: 1000;
11
+ };
12
+ export type DecisionFieldName = keyof typeof DECISION_FIELD_CAPS;
13
+ export interface DecisionProseInput {
14
+ title: string;
15
+ context: string;
16
+ decision: string;
17
+ consequences?: string;
18
+ alternatives?: string;
19
+ }
20
+ export type SanitizeFieldsResult = {
21
+ ok: true;
22
+ value: DecisionProseInput;
23
+ } | {
24
+ ok: false;
25
+ error: string;
26
+ };
27
+ /** Validates + sanitizes every prose field of a decision. Optional fields are
28
+ * dropped when absent; required fields fail loudly. */
29
+ export declare function sanitizeDecisionFields(input: DecisionProseInput): SanitizeFieldsResult;
@@ -0,0 +1,51 @@
1
+ /** Write-path guard for decision prose (PRD §3.6 discipline, same rules as
2
+ * summaries): plain text only, control chars stripped, fences/links rejected,
3
+ * per-field caps. Decisions are rationale, not instructions — this bounds the
4
+ * prompt-injection surface of a file that arrives via git pull. */
5
+ import { CODE_FENCE, CONTROL_CHARS, MD_LINK } from "./summaryValidation.js";
6
+ export const DECISION_FIELD_CAPS = {
7
+ title: 120,
8
+ context: 2000,
9
+ decision: 2000,
10
+ consequences: 2000,
11
+ alternatives: 1000,
12
+ };
13
+ const REQUIRED = ["title", "context", "decision"];
14
+ function sanitizeField(name, input) {
15
+ const trimmed = input.replace(CONTROL_CHARS, "").trim();
16
+ if (trimmed.length === 0) {
17
+ return { ok: false, error: `${name} is empty` };
18
+ }
19
+ if (trimmed.length > DECISION_FIELD_CAPS[name]) {
20
+ return { ok: false, error: `${name} exceeds ${DECISION_FIELD_CAPS[name]} characters` };
21
+ }
22
+ if (CODE_FENCE.test(trimmed)) {
23
+ return { ok: false, error: `${name} must be plain text (no code fences)` };
24
+ }
25
+ if (MD_LINK.test(trimmed)) {
26
+ return { ok: false, error: `${name} must be plain text (no markdown links)` };
27
+ }
28
+ return { ok: true, value: trimmed };
29
+ }
30
+ /** Validates + sanitizes every prose field of a decision. Optional fields are
31
+ * dropped when absent; required fields fail loudly. */
32
+ export function sanitizeDecisionFields(input) {
33
+ const out = { title: "", context: "", decision: "" };
34
+ for (const name of REQUIRED) {
35
+ const r = sanitizeField(name, input[name] ?? "");
36
+ if (!r.ok)
37
+ return r;
38
+ out[name] = r.value;
39
+ }
40
+ for (const name of ["consequences", "alternatives"]) {
41
+ const raw = input[name];
42
+ if (raw === undefined)
43
+ continue;
44
+ const r = sanitizeField(name, raw);
45
+ if (!r.ok)
46
+ return r;
47
+ out[name] = r.value;
48
+ }
49
+ return { ok: true, value: out };
50
+ }
51
+ //# sourceMappingURL=decisionValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionValidation.js","sourceRoot":"","sources":["../../src/guard/decisionValidation.ts"],"names":[],"mappings":"AAAA;;;oEAGoE;AAEpE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE5E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;CACV,CAAC;AAgBX,MAAM,QAAQ,GAAiC,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAEhF,SAAS,aAAa,CAAC,IAAuB,EAAE,KAAa;IAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,YAAY,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,sCAAsC,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,yCAAyC,EAAE,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED;wDACwD;AACxD,MAAM,UAAU,sBAAsB,CAAC,KAAyB;IAC9D,MAAM,GAAG,GAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACzE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,cAAc,CAAU,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChC,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC"}
@@ -5,6 +5,9 @@ export type SanitizeResult = {
5
5
  ok: false;
6
6
  error: string;
7
7
  };
8
+ export declare const CONTROL_CHARS: RegExp;
9
+ export declare const CODE_FENCE: RegExp;
10
+ export declare const MD_LINK: RegExp;
8
11
  /** Validates + sanitizes an agent summary (PRD §3.6): strips control chars,
9
12
  * rejects oversized / non-plain-text input. Summaries are descriptions, not
10
13
  * instructions — this bounds the prompt-injection surface. */
@@ -1,8 +1,10 @@
1
1
  const MAX_LEN = 1000;
2
2
  // Control chars except tab (\t, 0x09), newline (\n, 0x0A), carriage return (\r, 0x0D).
3
- const CONTROL_CHARS = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g;
4
- const CODE_FENCE = /```/;
5
- const MD_LINK = /\[[^\]]*\]\([^)]*\)/;
3
+ // Exported so decisionValidation shares the exact same guard surface — a
4
+ // hardening fix here must apply to both write paths.
5
+ export const CONTROL_CHARS = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g;
6
+ export const CODE_FENCE = /```/;
7
+ export const MD_LINK = /\[[^\]]*\]\([^)]*\)/;
6
8
  const CODE_FENCE_G = /```/g;
7
9
  const MD_LINK_G = /\[([^\]]*)\]\([^)]*\)/g;
8
10
  /** Validates + sanitizes an agent summary (PRD §3.6): strips control chars,
@@ -1 +1 @@
1
- {"version":3,"file":"summaryValidation.js","sourceRoot":"","sources":["../../src/guard/summaryValidation.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,uFAAuF;AACvF,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAC1D,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,MAAM,OAAO,GAAG,qBAAqB,CAAC;AACtC,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C;;+DAE+D;AAC/D,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,OAAO,aAAa,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED;;;;;yEAKyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,GAAG,GAAG,KAAK;SACd,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,IAAI,EAAE,CAAC;IACV,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"summaryValidation.js","sourceRoot":"","sources":["../../src/guard/summaryValidation.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,uFAAuF;AACvF,yEAAyE;AACzE,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,mCAAmC,CAAC;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC;AAChC,MAAM,CAAC,MAAM,OAAO,GAAG,qBAAqB,CAAC;AAC7C,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C;;+DAE+D;AAC/D,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,OAAO,aAAa,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED;;;;;yEAKyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,GAAG,GAAG,KAAK;SACd,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,IAAI,EAAE,CAAC;IACV,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { z } from "zod";
3
+ import type { RepoResolution } from "./store/resolveRepoPath.js";
4
+ /** Structured, actionable message for repo-scoped tool calls when no repo
5
+ * resolved (see `resolveRepoPath`). Names the discovered candidates when
6
+ * resolution failed due to workspace-mode ambiguity, and points at
7
+ * `list_repos` / `select_repo` so the agent can pick one instead of
8
+ * abandoning the tools. */
9
+ export declare function repoRequiredMessage(resolution: RepoResolution): string;
10
+ export declare function repoUnindexedMessage(repoPath: string): string;
3
11
  export declare const getContextProfileInputSchema: {
4
12
  node_id: z.ZodOptional<z.ZodString>;
5
13
  file_path: z.ZodOptional<z.ZodString>;
@@ -7,4 +15,44 @@ export declare const getContextProfileInputSchema: {
7
15
  hops: z.ZodOptional<z.ZodNumber>;
8
16
  federated: z.ZodOptional<z.ZodBoolean>;
9
17
  };
18
+ export declare const recordDecisionInputSchema: {
19
+ title: z.ZodString;
20
+ context: z.ZodString;
21
+ decision: z.ZodString;
22
+ consequences: z.ZodOptional<z.ZodString>;
23
+ alternatives: z.ZodOptional<z.ZodString>;
24
+ status: z.ZodOptional<z.ZodEnum<{
25
+ proposed: "proposed";
26
+ accepted: "accepted";
27
+ }>>;
28
+ anchor_node_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
29
+ anchor_paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
30
+ supersedes: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
+ };
32
+ export declare const setDecisionStatusInputSchema: {
33
+ decision_id: z.ZodString;
34
+ status: z.ZodEnum<{
35
+ accepted: "accepted";
36
+ rejected: "rejected";
37
+ deprecated: "deprecated";
38
+ }>;
39
+ };
40
+ export declare const reaffirmDecisionInputSchema: {
41
+ decision_id: z.ZodString;
42
+ };
43
+ export declare const listDecisionsInputSchema: {
44
+ status: z.ZodOptional<z.ZodEnum<{
45
+ proposed: "proposed";
46
+ accepted: "accepted";
47
+ rejected: "rejected";
48
+ deprecated: "deprecated";
49
+ superseded: "superseded";
50
+ }>>;
51
+ anchor: z.ZodOptional<z.ZodString>;
52
+ q: z.ZodOptional<z.ZodString>;
53
+ limit: z.ZodOptional<z.ZodNumber>;
54
+ };
55
+ export declare const getDecisionInputSchema: {
56
+ decision_id: z.ZodString;
57
+ };
10
58
  export declare function main(): Promise<void>;