@sirius-mcp/mcp 1.5.2 → 1.7.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 +19 -4
- package/dist/adapters/fs/structure.d.ts.map +1 -1
- package/dist/adapters/fs/structure.js +16 -0
- package/dist/adapters/fs/structure.js.map +1 -1
- package/dist/adapters/mcp/crawl.js +1 -1
- package/dist/adapters/mcp/crawl.js.map +1 -1
- package/dist/adapters/mcp/get.js +1 -1
- package/dist/adapters/mcp/get.js.map +1 -1
- package/dist/adapters/mcp/index.d.ts +2 -0
- package/dist/adapters/mcp/index.d.ts.map +1 -1
- package/dist/adapters/mcp/index.js +5 -1
- package/dist/adapters/mcp/index.js.map +1 -1
- package/dist/adapters/mcp/init.js +1 -1
- package/dist/adapters/mcp/init.js.map +1 -1
- package/dist/adapters/mcp/list.js +1 -1
- package/dist/adapters/mcp/list.js.map +1 -1
- package/dist/adapters/mcp/query-counter.d.ts +17 -0
- package/dist/adapters/mcp/query-counter.d.ts.map +1 -0
- package/dist/adapters/mcp/query-counter.js +30 -0
- package/dist/adapters/mcp/query-counter.js.map +1 -0
- package/dist/adapters/mcp/reindex.js +1 -1
- package/dist/adapters/mcp/reindex.js.map +1 -1
- package/dist/adapters/mcp/resources.d.ts +4 -1
- package/dist/adapters/mcp/resources.d.ts.map +1 -1
- package/dist/adapters/mcp/resources.js +50 -1
- package/dist/adapters/mcp/resources.js.map +1 -1
- package/dist/adapters/mcp/search.js +1 -1
- package/dist/adapters/mcp/search.js.map +1 -1
- package/dist/adapters/mcp/upsert.js +1 -1
- package/dist/adapters/mcp/upsert.js.map +1 -1
- package/dist/adapters/update/check.d.ts +27 -0
- package/dist/adapters/update/check.d.ts.map +1 -1
- package/dist/adapters/update/check.js +40 -2
- package/dist/adapters/update/check.js.map +1 -1
- package/dist/app/crawl.js +3 -0
- package/dist/app/crawl.js.map +1 -1
- package/dist/app/drift.d.ts +61 -0
- package/dist/app/drift.d.ts.map +1 -0
- package/dist/app/drift.js +193 -0
- package/dist/app/drift.js.map +1 -0
- package/dist/app/list.d.ts +2 -2
- package/dist/app/precedence-contract.d.ts +14 -0
- package/dist/app/precedence-contract.d.ts.map +1 -0
- package/dist/app/precedence-contract.js +51 -0
- package/dist/app/precedence-contract.js.map +1 -0
- package/dist/app/upsert.d.ts +14 -2
- package/dist/app/upsert.d.ts.map +1 -1
- package/dist/domain/source-adapter.d.ts +1 -0
- package/dist/domain/source-adapter.d.ts.map +1 -1
- package/dist/domain/source-adapter.js.map +1 -1
- package/dist/domain/staleness.d.ts +30 -0
- package/dist/domain/staleness.d.ts.map +1 -0
- package/dist/domain/staleness.js +71 -0
- package/dist/domain/staleness.js.map +1 -0
- package/dist/errors.d.ts +30 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +88 -16
- package/dist/errors.js.map +1 -1
- package/dist/installer/cli-parser.d.ts.map +1 -1
- package/dist/installer/cli-parser.js +19 -5
- package/dist/installer/cli-parser.js.map +1 -1
- package/dist/installer/cli.d.ts.map +1 -1
- package/dist/installer/cli.js +73 -37
- package/dist/installer/cli.js.map +1 -1
- package/dist/installer/contract-seed.d.ts +6 -0
- package/dist/installer/contract-seed.d.ts.map +1 -0
- package/dist/installer/contract-seed.js +140 -0
- package/dist/installer/contract-seed.js.map +1 -0
- package/dist/installer/dispatch.d.ts.map +1 -1
- package/dist/installer/dispatch.js +3 -1
- package/dist/installer/dispatch.js.map +1 -1
- package/dist/installer/drift-command.d.ts +15 -0
- package/dist/installer/drift-command.d.ts.map +1 -0
- package/dist/installer/drift-command.js +78 -0
- package/dist/installer/drift-command.js.map +1 -0
- package/dist/installer/index.d.ts +4 -0
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +34 -5
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/instruction-targets.d.ts +33 -0
- package/dist/installer/instruction-targets.d.ts.map +1 -0
- package/dist/installer/instruction-targets.js +199 -0
- package/dist/installer/instruction-targets.js.map +1 -0
- package/dist/installer/precedence.d.ts +59 -0
- package/dist/installer/precedence.d.ts.map +1 -0
- package/dist/installer/precedence.js +218 -0
- package/dist/installer/precedence.js.map +1 -0
- package/dist/installer/snippet-context.d.ts +49 -0
- package/dist/installer/snippet-context.d.ts.map +1 -0
- package/dist/installer/snippet-context.js +93 -0
- package/dist/installer/snippet-context.js.map +1 -0
- package/dist/installer/snippet-engine.d.ts +21 -0
- package/dist/installer/snippet-engine.d.ts.map +1 -0
- package/dist/installer/snippet-engine.js +122 -0
- package/dist/installer/snippet-engine.js.map +1 -0
- package/dist/installer/snippet-exec.d.ts +4 -0
- package/dist/installer/snippet-exec.d.ts.map +1 -0
- package/dist/installer/snippet-exec.js +105 -0
- package/dist/installer/snippet-exec.js.map +1 -0
- package/dist/installer/snippet-offer.d.ts +21 -0
- package/dist/installer/snippet-offer.d.ts.map +1 -0
- package/dist/installer/snippet-offer.js +108 -0
- package/dist/installer/snippet-offer.js.map +1 -0
- package/dist/installer/snippet-report.d.ts +14 -0
- package/dist/installer/snippet-report.d.ts.map +1 -0
- package/dist/installer/snippet-report.js +217 -0
- package/dist/installer/snippet-report.js.map +1 -0
- package/dist/installer/snippet.d.ts +4 -0
- package/dist/installer/snippet.d.ts.map +1 -0
- package/dist/installer/snippet.js +158 -0
- package/dist/installer/snippet.js.map +1 -0
- package/dist/installer/tui-render.d.ts +3 -0
- package/dist/installer/tui-render.d.ts.map +1 -0
- package/dist/installer/tui-render.js +31 -0
- package/dist/installer/tui-render.js.map +1 -0
- package/dist/installer/tui.d.ts +5 -3
- package/dist/installer/tui.d.ts.map +1 -1
- package/dist/installer/tui.js +7 -24
- package/dist/installer/tui.js.map +1 -1
- package/dist/installer/types.d.ts +42 -2
- package/dist/installer/types.d.ts.map +1 -1
- package/dist/installer/types.js.map +1 -1
- package/dist/installer/version.d.ts +2 -0
- package/dist/installer/version.d.ts.map +1 -0
- package/dist/installer/version.js +18 -0
- package/dist/installer/version.js.map +1 -0
- package/dist/schemas/document.d.ts +24 -2
- package/dist/schemas/document.d.ts.map +1 -1
- package/dist/schemas/document.js +52 -0
- package/dist/schemas/document.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import readline from "node:readline";
|
|
4
|
+
import {} from "./types.js";
|
|
5
|
+
import { resolveTargetEnvironment } from "./targets.js";
|
|
6
|
+
import { loadProjectConfig, configLoadError } from "../app/loadProjectConfig.js";
|
|
7
|
+
import { createDocumentExclusive, documentPath } from "../adapters/fs/structure.js";
|
|
8
|
+
import { CONTRACT_ID, CONTRACT_TYPE } from "./precedence.js";
|
|
9
|
+
import { buildPrecedenceContractMarkdown } from "./contract-seed.js";
|
|
10
|
+
import { resolveInstructionTarget } from "./instruction-targets.js";
|
|
11
|
+
import { buildContractContext, contractMissingRefusal, flagConflict, normalizeLanguage, notInitializedRefusal, resolveMode, selectedEntries, todayIso, } from "./snippet-context.js";
|
|
12
|
+
import { emitAbortReport, emitRefusal, emitRemoveWithoutContract, emitStatus, finishReport, outcomeRows, precedenceRefusal, } from "./snippet-report.js";
|
|
13
|
+
import { executeGroup } from "./snippet-exec.js";
|
|
14
|
+
async function readFileOrNullAsync(filePath) {
|
|
15
|
+
try {
|
|
16
|
+
return await fs.promises.readFile(filePath, "utf8");
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
if (err.code === "ENOENT")
|
|
20
|
+
return null;
|
|
21
|
+
throw err;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function bootstrapSnippet(options, root) {
|
|
25
|
+
const conflict = flagConflict(options);
|
|
26
|
+
if (conflict)
|
|
27
|
+
return { kind: "refusal", refusal: conflict };
|
|
28
|
+
const config = await loadProjectConfig(root);
|
|
29
|
+
if (config.kind !== "ok") {
|
|
30
|
+
const refusal = config.kind === "missing" ? notInitializedRefusal() : configLoadError(config);
|
|
31
|
+
return { kind: "refusal", refusal };
|
|
32
|
+
}
|
|
33
|
+
const language = normalizeLanguage(config.config.language);
|
|
34
|
+
const contractFile = documentPath(root, CONTRACT_TYPE, CONTRACT_ID);
|
|
35
|
+
let raw = await readFileOrNullAsync(contractFile);
|
|
36
|
+
if (resolveMode(options) === "generate" && raw === null) {
|
|
37
|
+
await seedContractToleratingRace(root, language);
|
|
38
|
+
raw = await readFileOrNullAsync(contractFile);
|
|
39
|
+
}
|
|
40
|
+
if (raw === null) {
|
|
41
|
+
if (resolveMode(options) === "remove")
|
|
42
|
+
return { kind: "ready-no-contract" };
|
|
43
|
+
return { kind: "refusal", refusal: contractMissingRefusal() };
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
return { kind: "ready", ctx: buildContractContext(contractFile, language, raw) };
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
return { kind: "refusal", refusal: precedenceRefusal(err) };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function seedContractToleratingRace(root, language) {
|
|
53
|
+
try {
|
|
54
|
+
await createDocumentExclusive(root, CONTRACT_TYPE, CONTRACT_ID, buildPrecedenceContractMarkdown(language, todayIso()));
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
if (err.code !== "EEXIST")
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export async function runSnippetCommand(options, io) {
|
|
62
|
+
const root = io.cwd ?? io.env?.cwd ?? process.cwd();
|
|
63
|
+
const boot = await bootstrapSnippet(options, root);
|
|
64
|
+
if (boot.kind === "refusal") {
|
|
65
|
+
emitRefusal(io, options, boot.refusal);
|
|
66
|
+
return 1;
|
|
67
|
+
}
|
|
68
|
+
const env = io.env ?? { ...resolveTargetEnvironment(), cwd: root };
|
|
69
|
+
const mode = resolveMode(options);
|
|
70
|
+
if (mode === "status") {
|
|
71
|
+
if (boot.kind === "ready-no-contract") {
|
|
72
|
+
emitRefusal(io, options, contractMissingRefusal());
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
return emitStatus(options, io, boot.ctx, env, root);
|
|
76
|
+
}
|
|
77
|
+
if (boot.kind === "ready-no-contract") {
|
|
78
|
+
return emitRemoveWithoutContract(options, io, env, root);
|
|
79
|
+
}
|
|
80
|
+
return emitMutation(options, io, boot.ctx, env, root);
|
|
81
|
+
}
|
|
82
|
+
function groupKey(absPath) {
|
|
83
|
+
const resolved = path.resolve(absPath);
|
|
84
|
+
return process.platform === "win32" ? resolved.toLowerCase() : resolved;
|
|
85
|
+
}
|
|
86
|
+
function buildGroups(options, env, root) {
|
|
87
|
+
const groups = [];
|
|
88
|
+
const byKey = new Map();
|
|
89
|
+
const uncovered = new Map();
|
|
90
|
+
for (const { id, target } of selectedEntries(options)) {
|
|
91
|
+
if (!target) {
|
|
92
|
+
uncovered.set(id, {
|
|
93
|
+
targetId: id,
|
|
94
|
+
displayName: id,
|
|
95
|
+
category: "cli",
|
|
96
|
+
format: "JSON",
|
|
97
|
+
targetPath: "",
|
|
98
|
+
action: "SKIPPED",
|
|
99
|
+
message: `Unknown target id '${id}'.`,
|
|
100
|
+
reason: "unknown-target",
|
|
101
|
+
});
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const resolved = resolveInstructionTarget(target, options.scope, env, root);
|
|
105
|
+
if (!resolved.covered || resolved.file === undefined) {
|
|
106
|
+
uncovered.set(id, {
|
|
107
|
+
targetId: id,
|
|
108
|
+
displayName: target.displayName,
|
|
109
|
+
category: target.category,
|
|
110
|
+
format: target.format,
|
|
111
|
+
targetPath: resolved.declaredPath ?? "",
|
|
112
|
+
action: "SKIPPED",
|
|
113
|
+
message: resolved.skipReason ?? "Out of snippet coverage.",
|
|
114
|
+
reason: resolved.skipReason,
|
|
115
|
+
});
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const key = groupKey(resolved.file.absPath);
|
|
119
|
+
const existing = byKey.get(key);
|
|
120
|
+
if (existing) {
|
|
121
|
+
existing.targets.push(target);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const group = { key, absPath: resolved.file.absPath, targets: [target] };
|
|
125
|
+
byKey.set(key, group);
|
|
126
|
+
groups.push(group);
|
|
127
|
+
}
|
|
128
|
+
return { groups, uncovered };
|
|
129
|
+
}
|
|
130
|
+
async function emitMutation(options, io, ctx, env, root) {
|
|
131
|
+
if (options.scope === "global" && !options.dryRun && !options.yes) {
|
|
132
|
+
const confirmed = await confirmGlobalScope();
|
|
133
|
+
if (!confirmed) {
|
|
134
|
+
return emitAbortReport(options, io, "Global scope not confirmed (--yes or interactive confirmation required).");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const { groups, uncovered } = buildGroups(options, env, root);
|
|
138
|
+
const rows = [];
|
|
139
|
+
for (const group of groups) {
|
|
140
|
+
const outcome = await executeGroup(group, resolveMode(options), options, ctx, env);
|
|
141
|
+
rows.push(...outcomeRows(group, outcome));
|
|
142
|
+
}
|
|
143
|
+
rows.push(...uncovered.values());
|
|
144
|
+
return finishReport(options, io, env, rows);
|
|
145
|
+
}
|
|
146
|
+
async function confirmGlobalScope() {
|
|
147
|
+
if (!process.stdin.isTTY || !process.stderr.isTTY)
|
|
148
|
+
return false;
|
|
149
|
+
process.stderr.write("[sirius] Global scope writes user-level instruction files (e.g. ~/.claude/CLAUDE.md). Continue? [y/N] ");
|
|
150
|
+
return new Promise((resolve) => {
|
|
151
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
152
|
+
rl.question("", (answer) => {
|
|
153
|
+
rl.close();
|
|
154
|
+
resolve(/^y(es)?$/i.test(answer.trim()));
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=snippet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../src/installer/snippet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-render.d.ts","sourceRoot":"","sources":["../../src/installer/tui-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAS9C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAsBlE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {} from "./types.js";
|
|
2
|
+
function color(text, code) {
|
|
3
|
+
if (process.env.NO_COLOR !== undefined) {
|
|
4
|
+
return text;
|
|
5
|
+
}
|
|
6
|
+
return `${code}${text}\x1b[0m`;
|
|
7
|
+
}
|
|
8
|
+
export function renderSummaryScreen(results) {
|
|
9
|
+
const configured = results.filter((r) => r.action === "CONFIGURED" || r.action === "REMOVED");
|
|
10
|
+
const lines = [
|
|
11
|
+
color("┌────────────────────────────────────────────────────────────────────────────┐", "\x1b[90m"),
|
|
12
|
+
color("│ SIRIUS MCP — CONFIGURATION COMPLETE │", "\x1b[1m\x1b[32m"),
|
|
13
|
+
`│ ${configured.length} Clients Configured · All changes saved with atomic backups. │`,
|
|
14
|
+
color("├────────────────────────────────────────────────────────────────────────────┤", "\x1b[90m"),
|
|
15
|
+
"│ │",
|
|
16
|
+
"│ ── Next Steps: Verify Sirius in Your AI Tools ─────────────────────────── │",
|
|
17
|
+
"│ │",
|
|
18
|
+
"│ 1. Cursor IDE (Flagship): │",
|
|
19
|
+
"│ Reload window (Cmd/Ctrl+Shift+P > Reload Window) and prompt: │",
|
|
20
|
+
color('│ ❯ "Check living architecture status with context_list" │', "\x1b[36m"),
|
|
21
|
+
"│ │",
|
|
22
|
+
"│ 2. Devin CLI / Codex CLI: │",
|
|
23
|
+
color('│ ❯ devin "Inspect project context via context_list" │', "\x1b[36m"),
|
|
24
|
+
"│ │",
|
|
25
|
+
"│ ── Living Architecture Web Portal ─────────────────────────────────────── │",
|
|
26
|
+
"│ Inspect graph topology locally at: http://127.0.0.1:4200 │",
|
|
27
|
+
color("└────────────────────────────────────────────────────────────────────────────┘", "\x1b[90m"),
|
|
28
|
+
];
|
|
29
|
+
return lines.join("\n");
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=tui-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-render.js","sourceRoot":"","sources":["../../src/installer/tui-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,YAAY,CAAC;AAE9C,SAAS,KAAK,CAAC,IAAY,EAAE,IAAY;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,IAAI,GAAG,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG;QACZ,KAAK,CAAC,gFAAgF,EAAE,UAAU,CAAC;QACnG,KAAK,CAAC,gFAAgF,EAAE,iBAAiB,CAAC;QAC1G,MAAM,UAAU,CAAC,MAAM,2EAA2E;QAClG,KAAK,CAAC,gFAAgF,EAAE,UAAU,CAAC;QACnG,gFAAgF;QAChF,gFAAgF;QAChF,gFAAgF;QAChF,gFAAgF;QAChF,gFAAgF;QAChF,KAAK,CAAC,gFAAgF,EAAE,UAAU,CAAC;QACnG,gFAAgF;QAChF,gFAAgF;QAChF,KAAK,CAAC,gFAAgF,EAAE,UAAU,CAAC;QACnG,gFAAgF;QAChF,gFAAgF;QAChF,gFAAgF;QAChF,KAAK,CAAC,gFAAgF,EAAE,UAAU,CAAC;KACpG,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/installer/tui.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { type DetectedTarget, type InstallerOptions, type
|
|
1
|
+
import { type DetectedTarget, type InstallerOptions, type TargetScope } from "./types.js";
|
|
2
|
+
export { renderSummaryScreen } from "./tui-render.js";
|
|
2
3
|
export declare function initialSelectionHeuristic(detected: DetectedTarget[]): Set<string>;
|
|
3
4
|
export declare function toggleSelection(selected: Set<string>, id: string): void;
|
|
4
5
|
export declare function toggleCategorySelection(selected: Set<string>, targets: DetectedTarget[], category: "cli" | "ide"): void;
|
|
5
6
|
export declare function renderChecklistScreen(detected: DetectedTarget[], selected: Set<string>, cursorIndex: number, scope: TargetScope, showUndetected: boolean): string;
|
|
6
|
-
export declare function
|
|
7
|
-
|
|
7
|
+
export declare function startInteractiveWizard(initialOptions?: Partial<InstallerOptions>, postInstall?: {
|
|
8
|
+
offerSnippet?: boolean;
|
|
9
|
+
}): Promise<number>;
|
|
8
10
|
//# sourceMappingURL=tui.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/installer/tui.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/installer/tui.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAYpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAQjF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAMvE;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EACrB,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,KAAK,GAAG,KAAK,GACtB,IAAI,CAWN;AA4BD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EAAE,EAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EACrB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,OAAO,GACtB,MAAM,CAwCR;AA4FD,wBAAsB,sBAAsB,CAC1C,cAAc,GAAE,OAAO,CAAC,gBAAgB,CAAM,EAC9C,WAAW,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,OAAO,CAAC,MAAM,CAAC,CA2FjB"}
|
package/dist/installer/tui.js
CHANGED
|
@@ -2,12 +2,14 @@ import readline from "node:readline";
|
|
|
2
2
|
import {} from "./types.js";
|
|
3
3
|
import { detectAllTargets } from "./detector.js";
|
|
4
4
|
import { runInstallerCli } from "./cli.js";
|
|
5
|
+
import { runPostInstallOffer } from "./snippet-offer.js";
|
|
5
6
|
function color(text, code) {
|
|
6
7
|
if (process.env.NO_COLOR !== undefined) {
|
|
7
8
|
return text;
|
|
8
9
|
}
|
|
9
10
|
return `${code}${text}\x1b[0m`;
|
|
10
11
|
}
|
|
12
|
+
export { renderSummaryScreen } from "./tui-render.js";
|
|
11
13
|
export function initialSelectionHeuristic(detected) {
|
|
12
14
|
const set = new Set();
|
|
13
15
|
for (const d of detected) {
|
|
@@ -92,29 +94,6 @@ export function renderChecklistScreen(detected, selected, cursorIndex, scope, sh
|
|
|
92
94
|
lines.push(color("└────────────────────────────────────────────────────────────────────────────┘", "\x1b[90m"));
|
|
93
95
|
return lines.join("\n");
|
|
94
96
|
}
|
|
95
|
-
export function renderSummaryScreen(results) {
|
|
96
|
-
const configured = results.filter((r) => r.action === "CONFIGURED" || r.action === "REMOVED");
|
|
97
|
-
const lines = [
|
|
98
|
-
color("┌────────────────────────────────────────────────────────────────────────────┐", "\x1b[90m"),
|
|
99
|
-
color("│ SIRIUS MCP — CONFIGURATION COMPLETE │", "\x1b[1m\x1b[32m"),
|
|
100
|
-
`│ ${configured.length} Clients Configured · All changes saved with atomic backups. │`,
|
|
101
|
-
color("├────────────────────────────────────────────────────────────────────────────┤", "\x1b[90m"),
|
|
102
|
-
"│ │",
|
|
103
|
-
"│ ── Next Steps: Verify Sirius in Your AI Tools ─────────────────────────── │",
|
|
104
|
-
"│ │",
|
|
105
|
-
"│ 1. Cursor IDE (Flagship): │",
|
|
106
|
-
"│ Reload window (Cmd/Ctrl+Shift+P > Reload Window) and prompt: │",
|
|
107
|
-
color('│ ❯ "Check living architecture status with context_list" │', "\x1b[36m"),
|
|
108
|
-
"│ │",
|
|
109
|
-
"│ 2. Devin CLI / Codex CLI: │",
|
|
110
|
-
color('│ ❯ devin "Inspect project context via context_list" │', "\x1b[36m"),
|
|
111
|
-
"│ │",
|
|
112
|
-
"│ ── Living Architecture Web Portal ─────────────────────────────────────── │",
|
|
113
|
-
"│ Inspect graph topology locally at: http://127.0.0.1:4200 │",
|
|
114
|
-
color("└────────────────────────────────────────────────────────────────────────────┘", "\x1b[90m"),
|
|
115
|
-
];
|
|
116
|
-
return lines.join("\n");
|
|
117
|
-
}
|
|
118
97
|
function updateCursorOnMove(name, str, current, max) {
|
|
119
98
|
if (name === "up" || str === "k") {
|
|
120
99
|
return current > 0 ? current - 1 : max - 1;
|
|
@@ -182,7 +161,7 @@ function processWizardKey(str, key, state, visible) {
|
|
|
182
161
|
}
|
|
183
162
|
return "NOOP";
|
|
184
163
|
}
|
|
185
|
-
export async function startInteractiveWizard(initialOptions = {}) {
|
|
164
|
+
export async function startInteractiveWizard(initialOptions = {}, postInstall = {}) {
|
|
186
165
|
const isTty = Boolean(process.stdin.isTTY && process.stderr.isTTY);
|
|
187
166
|
if (!isTty || process.env.TERM === "dumb") {
|
|
188
167
|
return runInstallerCli({
|
|
@@ -248,6 +227,10 @@ export async function startInteractiveWizard(initialOptions = {}) {
|
|
|
248
227
|
force: false,
|
|
249
228
|
stdio: false,
|
|
250
229
|
});
|
|
230
|
+
if (code === 0 && postInstall.offerSnippet) {
|
|
231
|
+
resolve(await runPostInstallOffer(initialOptions, state.scope, targets, code));
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
251
234
|
resolve(code);
|
|
252
235
|
}
|
|
253
236
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/installer/tui.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/installer/tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,7 @@ export interface DetectedTarget {
|
|
|
38
38
|
scope: TargetScope;
|
|
39
39
|
}
|
|
40
40
|
export interface InstallerOptions {
|
|
41
|
-
subcommand: "install" | "doctor" | "uninstall" | "setup";
|
|
41
|
+
subcommand: "install" | "doctor" | "uninstall" | "setup" | "snippet" | "drift";
|
|
42
42
|
targets?: string[];
|
|
43
43
|
category?: "cli" | "ides" | "all";
|
|
44
44
|
scope: TargetScope;
|
|
@@ -48,8 +48,14 @@ export interface InstallerOptions {
|
|
|
48
48
|
json: boolean;
|
|
49
49
|
force: boolean;
|
|
50
50
|
stdio: boolean;
|
|
51
|
+
/** snippet only: read-only status report (CAP-15). */
|
|
52
|
+
status?: boolean;
|
|
53
|
+
/** snippet only: remove the routing block (CAP-14). */
|
|
54
|
+
remove?: boolean;
|
|
55
|
+
/** drift only: positional tokens that are neither subcommand nor flag. */
|
|
56
|
+
extraArgs?: string[];
|
|
51
57
|
}
|
|
52
|
-
export type PatchAction = "CONFIGURED" | "ALREADY_CONFIGURED" | "SKIPPED" | "FAILED" | "REMOVED";
|
|
58
|
+
export type PatchAction = "CONFIGURED" | "UPDATED" | "ALREADY_CONFIGURED" | "SKIPPED" | "FAILED" | "REMOVED";
|
|
53
59
|
export interface PatchResult {
|
|
54
60
|
targetId: string;
|
|
55
61
|
displayName: string;
|
|
@@ -64,6 +70,18 @@ export interface PatchResult {
|
|
|
64
70
|
code: string;
|
|
65
71
|
details: string;
|
|
66
72
|
};
|
|
73
|
+
/** snippet: why a target was skipped (coverage, detection, abort). */
|
|
74
|
+
reason?: string;
|
|
75
|
+
/** snippet: all target ids served by the block at targetPath (dedupe). */
|
|
76
|
+
servingTargets?: string[];
|
|
77
|
+
/** snippet --status verdict (CAP-15). */
|
|
78
|
+
statusVerdict?: string;
|
|
79
|
+
/** snippet: version parsed from the installed start marker. */
|
|
80
|
+
installedVersion?: number | null;
|
|
81
|
+
/** snippet: version of the contract the run compared against. */
|
|
82
|
+
contractVersion?: number | null;
|
|
83
|
+
/** snippet: true when the instruction file was created by this run. */
|
|
84
|
+
createdFile?: boolean;
|
|
67
85
|
}
|
|
68
86
|
export interface SiriusInstallerReport {
|
|
69
87
|
version: string;
|
|
@@ -75,11 +93,33 @@ export interface SiriusInstallerReport {
|
|
|
75
93
|
summary: {
|
|
76
94
|
totalScanned: number;
|
|
77
95
|
configured: number;
|
|
96
|
+
/** snippet only: in-place marker-interval replacements. */
|
|
97
|
+
updated?: number;
|
|
98
|
+
/** snippet counts ALREADY_CONFIGURED rows here too. */
|
|
78
99
|
skipped: number;
|
|
79
100
|
failed: number;
|
|
80
101
|
};
|
|
81
102
|
targets: PatchResult[];
|
|
82
103
|
}
|
|
104
|
+
export interface SnippetStatusSummary {
|
|
105
|
+
totalScanned: number;
|
|
106
|
+
upToDate: number;
|
|
107
|
+
outdated: number;
|
|
108
|
+
absent: number;
|
|
109
|
+
corrupted: number;
|
|
110
|
+
notCovered: number;
|
|
111
|
+
failed: number;
|
|
112
|
+
}
|
|
113
|
+
export interface SnippetStatusReport {
|
|
114
|
+
version: string;
|
|
115
|
+
timestamp: string;
|
|
116
|
+
platform: "darwin" | "win32" | "linux";
|
|
117
|
+
arch: string;
|
|
118
|
+
scope: TargetScope;
|
|
119
|
+
contractVersion: number;
|
|
120
|
+
summary: SnippetStatusSummary;
|
|
121
|
+
targets: PatchResult[];
|
|
122
|
+
}
|
|
83
123
|
export interface PatcherContext {
|
|
84
124
|
targetId: string;
|
|
85
125
|
patcherType: PatcherType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/installer/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;AAC3C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AACjD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtF,MAAM,MAAM,WAAW,GACnB,0BAA0B,GAC1B,oBAAoB,GACpB,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,YAAY,EAAE,WAAW,CAAC;IAC1B,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,KAAK,mBAAmB,CAAC;IAC5E,WAAW,EAAE,WAAW,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/installer/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/installer/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/installer/types.ts"],"names":[],"mappings":"AAuJA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAU;IACxC,GAAG,EAAE,iBAAiB;CACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/installer/version.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,IAAI,MAAM,CAgB1C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
let fallbackWarned = false;
|
|
3
|
+
export function readServerVersion() {
|
|
4
|
+
try {
|
|
5
|
+
const pkg = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8"));
|
|
6
|
+
if (pkg.version)
|
|
7
|
+
return pkg.version;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
// fall through to the warning + fallback below
|
|
11
|
+
}
|
|
12
|
+
if (!fallbackWarned) {
|
|
13
|
+
fallbackWarned = true;
|
|
14
|
+
process.stderr.write("[sirius] warning: could not read package.json version; falling back to 0.0.0.\n");
|
|
15
|
+
}
|
|
16
|
+
return "0.0.0";
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/installer/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC7C,CAAC;QAC1B,IAAI,GAAG,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -6,6 +6,16 @@ export type DocumentType = (typeof DocumentTypes)[number];
|
|
|
6
6
|
export type DocumentStatus = (typeof DocumentStatuses)[number];
|
|
7
7
|
export declare const ID_SLUG_REGEX: RegExp;
|
|
8
8
|
export declare const ISO_DATE_REGEX: RegExp;
|
|
9
|
+
export declare const STALE_AFTER_REGEX: RegExp;
|
|
10
|
+
export interface DurationComponents {
|
|
11
|
+
years: number;
|
|
12
|
+
months: number;
|
|
13
|
+
weeks: number;
|
|
14
|
+
days: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function durationComponents(value: string): DurationComponents | null;
|
|
17
|
+
export declare function isValidStaleAfterDuration(value: string): boolean;
|
|
18
|
+
export declare function isIsoCalendarDate(value: string): boolean;
|
|
9
19
|
export declare const RelatedRef: z.ZodObject<{
|
|
10
20
|
id: z.ZodString;
|
|
11
21
|
type: z.ZodOptional<z.ZodEnum<["feature", "business-rule", "decision", "component", "architecture"]>>;
|
|
@@ -42,10 +52,14 @@ export declare const DocumentFrontmatter: z.ZodObject<{
|
|
|
42
52
|
code_refs: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>, string[] | undefined, string[] | null | undefined>;
|
|
43
53
|
tags: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>, string[] | undefined, string[] | null | undefined>;
|
|
44
54
|
summary: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodString>>, string | undefined, string | null | undefined>;
|
|
55
|
+
stale_after: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodString, string, string>>>, string | undefined, string | null | undefined>;
|
|
56
|
+
sources: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>, string[] | undefined, string[] | null | undefined>;
|
|
57
|
+
generated: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodBoolean>>, boolean | undefined, boolean | null | undefined>;
|
|
58
|
+
verified: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodString, string, string>>>, string | undefined, string | null | undefined>;
|
|
45
59
|
}, "strip", z.ZodTypeAny, {
|
|
60
|
+
status: "draft" | "active" | "deprecated" | "superseded";
|
|
46
61
|
id: string;
|
|
47
62
|
type: "feature" | "business-rule" | "decision" | "component" | "architecture";
|
|
48
|
-
status: "draft" | "active" | "deprecated" | "superseded";
|
|
49
63
|
title: string;
|
|
50
64
|
updated: string;
|
|
51
65
|
related?: {
|
|
@@ -55,10 +69,14 @@ export declare const DocumentFrontmatter: z.ZodObject<{
|
|
|
55
69
|
code_refs?: string[] | undefined;
|
|
56
70
|
tags?: string[] | undefined;
|
|
57
71
|
summary?: string | undefined;
|
|
72
|
+
stale_after?: string | undefined;
|
|
73
|
+
sources?: string[] | undefined;
|
|
74
|
+
generated?: boolean | undefined;
|
|
75
|
+
verified?: string | undefined;
|
|
58
76
|
}, {
|
|
77
|
+
status: "draft" | "active" | "deprecated" | "superseded";
|
|
59
78
|
id: string;
|
|
60
79
|
type: "feature" | "business-rule" | "decision" | "component" | "architecture";
|
|
61
|
-
status: "draft" | "active" | "deprecated" | "superseded";
|
|
62
80
|
title: string;
|
|
63
81
|
updated: string;
|
|
64
82
|
related?: {
|
|
@@ -68,6 +86,10 @@ export declare const DocumentFrontmatter: z.ZodObject<{
|
|
|
68
86
|
code_refs?: string[] | null | undefined;
|
|
69
87
|
tags?: string[] | null | undefined;
|
|
70
88
|
summary?: string | null | undefined;
|
|
89
|
+
stale_after?: string | null | undefined;
|
|
90
|
+
sources?: string[] | null | undefined;
|
|
91
|
+
generated?: boolean | null | undefined;
|
|
92
|
+
verified?: string | null | undefined;
|
|
71
93
|
}>;
|
|
72
94
|
export type DocumentFrontmatter = z.infer<typeof DocumentFrontmatter>;
|
|
73
95
|
export interface DocumentParseResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/schemas/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEvD,eAAO,MAAM,aAAa,gFAMhB,CAAC;AAEX,eAAO,MAAM,gBAAgB,0DAKnB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,eAAO,MAAM,aAAa,QAAiB,CAAC;AAC5C,eAAO,MAAM,cAAc,QAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/schemas/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEvD,eAAO,MAAM,aAAa,gFAMhB,CAAC;AAEX,eAAO,MAAM,gBAAgB,0DAKnB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,eAAO,MAAM,aAAa,QAAiB,CAAC;AAC5C,eAAO,MAAM,cAAc,QAAwB,CAAC;AACpD,eAAO,MAAM,iBAAiB,QAA0C,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAW3E;AAMD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAShE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAcxD;AAED,eAAO,MAAM,UAAU;;;;;;;;;EAGrB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsC9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,mBAAmB,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CA2CpF;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAcpF;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAErF;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,mBAAmB,EAChC,IAAI,EAAE,MAAM,GACX,MAAM,CAGR"}
|
package/dist/schemas/document.js
CHANGED
|
@@ -16,6 +16,45 @@ export const DocumentStatuses = [
|
|
|
16
16
|
];
|
|
17
17
|
export const ID_SLUG_REGEX = /^[a-z0-9-]+$/;
|
|
18
18
|
export const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
|
|
19
|
+
export const STALE_AFTER_REGEX = /^P(?=\d)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?$/;
|
|
20
|
+
const MAX_STALE_AFTER_DAYS = 100_000 * 365.25;
|
|
21
|
+
export function durationComponents(value) {
|
|
22
|
+
const match = STALE_AFTER_REGEX.exec(value);
|
|
23
|
+
if (!match) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
years: durationValue(match[1]),
|
|
28
|
+
months: durationValue(match[2]),
|
|
29
|
+
weeks: durationValue(match[3]),
|
|
30
|
+
days: durationValue(match[4]),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function durationValue(component) {
|
|
34
|
+
return component === undefined ? 0 : Number.parseInt(component.slice(0, -1), 10);
|
|
35
|
+
}
|
|
36
|
+
export function isValidStaleAfterDuration(value) {
|
|
37
|
+
const parts = durationComponents(value);
|
|
38
|
+
if (!parts) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const totalDays = parts.years * 365.25 + parts.months * 30.4375 + parts.weeks * 7 + parts.days;
|
|
42
|
+
const hasNonZeroComponent = parts.years > 0 || parts.months > 0 || parts.weeks > 0 || parts.days > 0;
|
|
43
|
+
return hasNonZeroComponent && totalDays <= MAX_STALE_AFTER_DAYS;
|
|
44
|
+
}
|
|
45
|
+
export function isIsoCalendarDate(value) {
|
|
46
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value);
|
|
47
|
+
if (!match) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const year = Number(match[1]);
|
|
51
|
+
const monthIndex = Number(match[2]) - 1;
|
|
52
|
+
const day = Number(match[3]);
|
|
53
|
+
const date = new Date(Date.UTC(year, monthIndex, day));
|
|
54
|
+
return (date.getUTCFullYear() === year &&
|
|
55
|
+
date.getUTCMonth() === monthIndex &&
|
|
56
|
+
date.getUTCDate() === day);
|
|
57
|
+
}
|
|
19
58
|
export const RelatedRef = z.object({
|
|
20
59
|
id: z.string().min(1, "related id is required"),
|
|
21
60
|
type: z.enum(DocumentTypes).optional(),
|
|
@@ -39,6 +78,19 @@ export const DocumentFrontmatter = z.object({
|
|
|
39
78
|
code_refs: z.array(z.string().min(1)).nullish().transform((v) => v ?? undefined),
|
|
40
79
|
tags: z.array(z.string().min(1)).nullish().transform((v) => v ?? undefined),
|
|
41
80
|
summary: z.string().nullish().transform((v) => (v === null || v === undefined || v === "") ? undefined : v),
|
|
81
|
+
stale_after: z
|
|
82
|
+
.string()
|
|
83
|
+
.refine(isValidStaleAfterDuration, "stale_after must be an ISO 8601 duration like P30D, P6M or P1Y2M3D (at least one non-zero component)")
|
|
84
|
+
.nullish()
|
|
85
|
+
.transform((v) => v ?? undefined),
|
|
86
|
+
sources: z.array(z.string().min(1)).nullish().transform((v) => v ?? undefined),
|
|
87
|
+
generated: z.boolean().nullish().transform((v) => v ?? undefined),
|
|
88
|
+
verified: z
|
|
89
|
+
.string()
|
|
90
|
+
.regex(ISO_DATE_REGEX, "verified must be an ISO 8601 date (YYYY-MM-DD)")
|
|
91
|
+
.refine(isIsoCalendarDate, "verified must be a real calendar date (2026-02-31 style dates are rejected)")
|
|
92
|
+
.nullish()
|
|
93
|
+
.transform((v) => v ?? undefined),
|
|
42
94
|
});
|
|
43
95
|
const FRONTMATTER_DELIMITER = /^---\r?\n/;
|
|
44
96
|
export function parseDocumentMarkdown(content) {
|