@sirius-mcp/mcp 1.5.2 → 1.6.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 (113) hide show
  1. package/README.md +17 -4
  2. package/dist/adapters/fs/structure.d.ts.map +1 -1
  3. package/dist/adapters/fs/structure.js +16 -0
  4. package/dist/adapters/fs/structure.js.map +1 -1
  5. package/dist/adapters/mcp/crawl.js +1 -1
  6. package/dist/adapters/mcp/crawl.js.map +1 -1
  7. package/dist/adapters/mcp/get.js +1 -1
  8. package/dist/adapters/mcp/get.js.map +1 -1
  9. package/dist/adapters/mcp/index.d.ts +2 -0
  10. package/dist/adapters/mcp/index.d.ts.map +1 -1
  11. package/dist/adapters/mcp/index.js +5 -1
  12. package/dist/adapters/mcp/index.js.map +1 -1
  13. package/dist/adapters/mcp/init.js +1 -1
  14. package/dist/adapters/mcp/init.js.map +1 -1
  15. package/dist/adapters/mcp/list.js +1 -1
  16. package/dist/adapters/mcp/list.js.map +1 -1
  17. package/dist/adapters/mcp/query-counter.d.ts +17 -0
  18. package/dist/adapters/mcp/query-counter.d.ts.map +1 -0
  19. package/dist/adapters/mcp/query-counter.js +30 -0
  20. package/dist/adapters/mcp/query-counter.js.map +1 -0
  21. package/dist/adapters/mcp/reindex.js +1 -1
  22. package/dist/adapters/mcp/reindex.js.map +1 -1
  23. package/dist/adapters/mcp/resources.d.ts +4 -1
  24. package/dist/adapters/mcp/resources.d.ts.map +1 -1
  25. package/dist/adapters/mcp/resources.js +50 -1
  26. package/dist/adapters/mcp/resources.js.map +1 -1
  27. package/dist/adapters/mcp/search.js +1 -1
  28. package/dist/adapters/mcp/search.js.map +1 -1
  29. package/dist/adapters/mcp/upsert.js +1 -1
  30. package/dist/adapters/mcp/upsert.js.map +1 -1
  31. package/dist/adapters/update/check.d.ts +27 -0
  32. package/dist/adapters/update/check.d.ts.map +1 -1
  33. package/dist/adapters/update/check.js +40 -2
  34. package/dist/adapters/update/check.js.map +1 -1
  35. package/dist/app/list.d.ts +2 -2
  36. package/dist/app/precedence-contract.d.ts +14 -0
  37. package/dist/app/precedence-contract.d.ts.map +1 -0
  38. package/dist/app/precedence-contract.js +51 -0
  39. package/dist/app/precedence-contract.js.map +1 -0
  40. package/dist/app/upsert.d.ts +2 -2
  41. package/dist/errors.d.ts +30 -6
  42. package/dist/errors.d.ts.map +1 -1
  43. package/dist/errors.js +88 -16
  44. package/dist/errors.js.map +1 -1
  45. package/dist/installer/cli-parser.d.ts.map +1 -1
  46. package/dist/installer/cli-parser.js +13 -3
  47. package/dist/installer/cli-parser.js.map +1 -1
  48. package/dist/installer/cli.d.ts.map +1 -1
  49. package/dist/installer/cli.js +61 -37
  50. package/dist/installer/cli.js.map +1 -1
  51. package/dist/installer/contract-seed.d.ts +6 -0
  52. package/dist/installer/contract-seed.d.ts.map +1 -0
  53. package/dist/installer/contract-seed.js +140 -0
  54. package/dist/installer/contract-seed.js.map +1 -0
  55. package/dist/installer/dispatch.d.ts.map +1 -1
  56. package/dist/installer/dispatch.js +3 -1
  57. package/dist/installer/dispatch.js.map +1 -1
  58. package/dist/installer/index.d.ts +4 -0
  59. package/dist/installer/index.d.ts.map +1 -1
  60. package/dist/installer/index.js +33 -5
  61. package/dist/installer/index.js.map +1 -1
  62. package/dist/installer/instruction-targets.d.ts +33 -0
  63. package/dist/installer/instruction-targets.d.ts.map +1 -0
  64. package/dist/installer/instruction-targets.js +199 -0
  65. package/dist/installer/instruction-targets.js.map +1 -0
  66. package/dist/installer/precedence.d.ts +59 -0
  67. package/dist/installer/precedence.d.ts.map +1 -0
  68. package/dist/installer/precedence.js +218 -0
  69. package/dist/installer/precedence.js.map +1 -0
  70. package/dist/installer/snippet-context.d.ts +49 -0
  71. package/dist/installer/snippet-context.d.ts.map +1 -0
  72. package/dist/installer/snippet-context.js +93 -0
  73. package/dist/installer/snippet-context.js.map +1 -0
  74. package/dist/installer/snippet-engine.d.ts +21 -0
  75. package/dist/installer/snippet-engine.d.ts.map +1 -0
  76. package/dist/installer/snippet-engine.js +122 -0
  77. package/dist/installer/snippet-engine.js.map +1 -0
  78. package/dist/installer/snippet-exec.d.ts +4 -0
  79. package/dist/installer/snippet-exec.d.ts.map +1 -0
  80. package/dist/installer/snippet-exec.js +105 -0
  81. package/dist/installer/snippet-exec.js.map +1 -0
  82. package/dist/installer/snippet-offer.d.ts +21 -0
  83. package/dist/installer/snippet-offer.d.ts.map +1 -0
  84. package/dist/installer/snippet-offer.js +108 -0
  85. package/dist/installer/snippet-offer.js.map +1 -0
  86. package/dist/installer/snippet-report.d.ts +14 -0
  87. package/dist/installer/snippet-report.d.ts.map +1 -0
  88. package/dist/installer/snippet-report.js +217 -0
  89. package/dist/installer/snippet-report.js.map +1 -0
  90. package/dist/installer/snippet.d.ts +4 -0
  91. package/dist/installer/snippet.d.ts.map +1 -0
  92. package/dist/installer/snippet.js +158 -0
  93. package/dist/installer/snippet.js.map +1 -0
  94. package/dist/installer/tui-render.d.ts +3 -0
  95. package/dist/installer/tui-render.d.ts.map +1 -0
  96. package/dist/installer/tui-render.js +31 -0
  97. package/dist/installer/tui-render.js.map +1 -0
  98. package/dist/installer/tui.d.ts +5 -3
  99. package/dist/installer/tui.d.ts.map +1 -1
  100. package/dist/installer/tui.js +7 -24
  101. package/dist/installer/tui.js.map +1 -1
  102. package/dist/installer/types.d.ts +40 -2
  103. package/dist/installer/types.d.ts.map +1 -1
  104. package/dist/installer/types.js.map +1 -1
  105. package/dist/installer/version.d.ts +2 -0
  106. package/dist/installer/version.d.ts.map +1 -0
  107. package/dist/installer/version.js +18 -0
  108. package/dist/installer/version.js.map +1 -0
  109. package/dist/schemas/document.d.ts +2 -2
  110. package/dist/server.d.ts.map +1 -1
  111. package/dist/server.js +4 -0
  112. package/dist/server.js.map +1 -1
  113. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-context.js","sourceRoot":"","sources":["../../src/installer/snippet-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { PrecedenceError } from "./precedence.js";
2
+ export interface FilePlan {
3
+ readonly action: "CONFIGURED" | "ALREADY_CONFIGURED" | "UPDATED" | "REMOVED";
4
+ readonly nextContent?: string;
5
+ readonly deleteFile?: boolean;
6
+ readonly createdFile?: boolean;
7
+ readonly separatorInserted?: boolean;
8
+ readonly installedVersion: number | null;
9
+ readonly message: string;
10
+ }
11
+ export declare function corruptBlockError(problems: string[], file?: string): PrecedenceError;
12
+ export declare function planGenerate(raw: string | null, expectedBlock: string): FilePlan;
13
+ export declare function planRemove(raw: string): FilePlan;
14
+ export type StatusVerdict = "AUSENTE" | "ATUALIZADO" | "DESATUALIZADO" | "CORROMPIDO";
15
+ export interface StatusReport {
16
+ readonly verdict: StatusVerdict;
17
+ readonly installedVersion: number | null;
18
+ readonly detail: string;
19
+ }
20
+ export declare function planStatus(raw: string | null, expectedBlock: string, expectedDigest: string, contractVersion: number): StatusReport;
21
+ //# sourceMappingURL=snippet-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-engine.d.ts","sourceRoot":"","sources":["../../src/installer/snippet-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,oBAAoB,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAMpF;AAYD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,QAAQ,CAwChF;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CA2BhD;AAED,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,YAAY,GACZ,eAAe,GACf,YAAY,CAAC;AAEjB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,YAAY,CAgBd"}
@@ -0,0 +1,122 @@
1
+ import { locateBlock, appendBlock, replaceBlock, removeBlock, PrecedenceError, } from "./precedence.js";
2
+ export function corruptBlockError(problems, file) {
3
+ return new PrecedenceError("CORRUPT_BLOCK", `Sirius precedence block is corrupt${file ? ` in ${file}` : ""}: ${problems.join("; ")}. Fix or remove the markers, then re-run.`, { problems, ...(file ? { file } : {}) });
4
+ }
5
+ function extractInstalledText(raw, location) {
6
+ return raw
7
+ .slice(location.startIndex ?? 0, location.endIndex ?? 0)
8
+ .replace(/\r?\n$/, "")
9
+ .replace(/\r\n/g, "\n");
10
+ }
11
+ export function planGenerate(raw, expectedBlock) {
12
+ if (raw === null) {
13
+ return {
14
+ action: "CONFIGURED",
15
+ nextContent: `${expectedBlock}\n`,
16
+ createdFile: true,
17
+ installedVersion: null,
18
+ message: "Created instruction file containing only the precedence block.",
19
+ };
20
+ }
21
+ const location = locateBlock(raw);
22
+ if (location.status === "corrupt") {
23
+ throw corruptBlockError(location.problems ?? []);
24
+ }
25
+ if (location.status === "absent") {
26
+ const applied = appendBlock(raw, expectedBlock);
27
+ return {
28
+ action: "CONFIGURED",
29
+ nextContent: applied.nextContent,
30
+ separatorInserted: applied.separatorInserted,
31
+ installedVersion: null,
32
+ message: applied.separatorInserted
33
+ ? "Appended the precedence block at EOF (inserted a newline separator)."
34
+ : "Appended the precedence block at EOF.",
35
+ };
36
+ }
37
+ if (extractInstalledText(raw, location) === expectedBlock) {
38
+ return {
39
+ action: "ALREADY_CONFIGURED",
40
+ installedVersion: location.installedVersion ?? null,
41
+ message: "Block is already current; nothing written.",
42
+ };
43
+ }
44
+ const replaced = replaceBlock(raw, location, expectedBlock);
45
+ return {
46
+ action: "UPDATED",
47
+ nextContent: replaced.nextContent,
48
+ installedVersion: location.installedVersion ?? null,
49
+ message: "Replaced only the marker-delimited interval in place.",
50
+ };
51
+ }
52
+ export function planRemove(raw) {
53
+ const location = locateBlock(raw);
54
+ if (location.status === "corrupt") {
55
+ throw corruptBlockError(location.problems ?? []);
56
+ }
57
+ if (location.status === "absent") {
58
+ return {
59
+ action: "REMOVED",
60
+ installedVersion: null,
61
+ message: "No Sirius precedence block present.",
62
+ };
63
+ }
64
+ const removed = removeBlock(raw, location);
65
+ if (removed.generatorCreated) {
66
+ return {
67
+ action: "REMOVED",
68
+ deleteFile: true,
69
+ installedVersion: location.installedVersion ?? null,
70
+ message: "File created by the generator and block-only; deleting it (file-created-by-generator).",
71
+ };
72
+ }
73
+ return {
74
+ action: "REMOVED",
75
+ nextContent: removed.nextContent,
76
+ installedVersion: location.installedVersion ?? null,
77
+ message: "Removed the precedence block; user content preserved.",
78
+ };
79
+ }
80
+ export function planStatus(raw, expectedBlock, expectedDigest, contractVersion) {
81
+ if (raw === null) {
82
+ return { verdict: "AUSENTE", installedVersion: null, detail: "Instruction file does not exist." };
83
+ }
84
+ const location = locateBlock(raw);
85
+ if (location.status === "corrupt") {
86
+ return {
87
+ verdict: "CORROMPIDO",
88
+ installedVersion: null,
89
+ detail: `Corrupt markers: ${(location.problems ?? []).join("; ")}`,
90
+ };
91
+ }
92
+ if (location.status === "absent") {
93
+ return { verdict: "AUSENTE", installedVersion: null, detail: "No Sirius precedence block." };
94
+ }
95
+ return presentStatus(raw, location, expectedBlock, expectedDigest, contractVersion);
96
+ }
97
+ function presentStatus(raw, location, expectedBlock, expectedDigest, contractVersion) {
98
+ const current = extractInstalledText(raw, location) === expectedBlock &&
99
+ location.installedDigest === expectedDigest;
100
+ if (current) {
101
+ return {
102
+ verdict: "ATUALIZADO",
103
+ installedVersion: location.installedVersion,
104
+ detail: `Block matches contract v${contractVersion}.`,
105
+ };
106
+ }
107
+ return {
108
+ verdict: "DESATUALIZADO",
109
+ installedVersion: location.installedVersion,
110
+ detail: outdatedDetail(location.installedVersion, location.installedDigest, contractVersion),
111
+ };
112
+ }
113
+ function outdatedDetail(installedVersion, installedDigest, contractVersion) {
114
+ if (installedVersion === null || installedDigest === null) {
115
+ return "Installed marker predates versioned format; re-run snippet to update in place.";
116
+ }
117
+ if (installedVersion !== contractVersion) {
118
+ return `Installed v${installedVersion} differs from contract v${contractVersion}.`;
119
+ }
120
+ return "contract-changed-without-version-bump: bump vN in the contract after editing a canonical template.";
121
+ }
122
+ //# sourceMappingURL=snippet-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-engine.js","sourceRoot":"","sources":["../../src/installer/snippet-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type InstallerOptions, type PlatformEnv } from "./types.js";
2
+ import { type GroupOutcome, type SnippetContractContext, type SnippetTargetGroup } from "./snippet-context.js";
3
+ export declare function executeGroup(group: SnippetTargetGroup, mode: "generate" | "remove", options: InstallerOptions, ctx: SnippetContractContext | null, env: PlatformEnv): Promise<GroupOutcome>;
4
+ //# sourceMappingURL=snippet-exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-exec.d.ts","sourceRoot":"","sources":["../../src/installer/snippet-exec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAKrE,OAAO,EAAkB,KAAK,YAAY,EAAE,KAAK,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/H,wBAAsB,YAAY,CAChC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,UAAU,GAAG,QAAQ,EAC3B,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,sBAAsB,GAAG,IAAI,EAClC,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,YAAY,CAAC,CAyBvB"}
@@ -0,0 +1,105 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import {} from "./types.js";
4
+ import { detectTarget } from "./detector.js";
5
+ import { createBackup, atomicWrite } from "./backup.js";
6
+ import { generateUnifiedDiff } from "./diff.js";
7
+ import { PrecedenceError } from "./precedence.js";
8
+ import { readFileOrNull } from "./snippet-context.js";
9
+ import { planGenerate, planRemove } from "./snippet-engine.js";
10
+ export async function executeGroup(group, mode, options, ctx, env) {
11
+ try {
12
+ const detected = await detectTarget(group.targets[0], options.scope, env);
13
+ if (detected.state === "NOT_FOUND") {
14
+ return {
15
+ action: "SKIPPED",
16
+ message: "Client not detected; its instruction files are never written.",
17
+ reason: "client-not-detected",
18
+ };
19
+ }
20
+ const raw = readFileOrNull(group.absPath);
21
+ if (mode === "remove") {
22
+ return await runRemove(group, raw, options);
23
+ }
24
+ if (ctx === null) {
25
+ return {
26
+ action: "SKIPPED",
27
+ message: "Precedence contract unavailable; nothing generated.",
28
+ reason: "precedence-contract-missing",
29
+ };
30
+ }
31
+ return await runGenerate(group, raw, options, ctx);
32
+ }
33
+ catch (err) {
34
+ return failureOutcome(err);
35
+ }
36
+ }
37
+ async function runGenerate(group, raw, options, ctx) {
38
+ const plan = planGenerate(raw, ctx.expectedBlock);
39
+ if (plan.action === "ALREADY_CONFIGURED") {
40
+ return { action: plan.action, message: plan.message, installedVersion: plan.installedVersion };
41
+ }
42
+ const nextContent = plan.nextContent ?? "";
43
+ if (options.dryRun) {
44
+ return {
45
+ action: plan.action,
46
+ message: `[dry-run] ${plan.message}`,
47
+ diff: generateUnifiedDiff(raw ?? "", nextContent, path.basename(group.absPath)),
48
+ createdFile: plan.createdFile,
49
+ };
50
+ }
51
+ let backupPath;
52
+ if (raw !== null && !plan.createdFile) {
53
+ backupPath = (await createBackup(group.absPath)) ?? undefined;
54
+ }
55
+ await atomicWrite(group.absPath, nextContent);
56
+ return {
57
+ action: plan.action,
58
+ message: plan.message,
59
+ backupPath,
60
+ createdFile: plan.createdFile,
61
+ installedVersion: plan.installedVersion,
62
+ };
63
+ }
64
+ async function runRemove(group, raw, options) {
65
+ if (raw === null) {
66
+ return { action: "SKIPPED", message: "Instruction file does not exist." };
67
+ }
68
+ const plan = planRemove(raw);
69
+ if (!plan.deleteFile && plan.nextContent === undefined) {
70
+ return { action: "SKIPPED", message: "No Sirius precedence block present." };
71
+ }
72
+ const preview = plan.deleteFile ? "" : plan.nextContent ?? "";
73
+ if (options.dryRun) {
74
+ return {
75
+ action: "REMOVED",
76
+ message: `[dry-run] ${plan.message}`,
77
+ diff: generateUnifiedDiff(raw, preview, path.basename(group.absPath)),
78
+ };
79
+ }
80
+ const backupPath = (await createBackup(group.absPath)) ?? undefined;
81
+ if (plan.deleteFile) {
82
+ await fs.promises.unlink(group.absPath);
83
+ }
84
+ else {
85
+ await atomicWrite(group.absPath, plan.nextContent ?? "");
86
+ }
87
+ return {
88
+ action: "REMOVED",
89
+ message: plan.message,
90
+ backupPath,
91
+ installedVersion: plan.installedVersion,
92
+ };
93
+ }
94
+ function failureOutcome(err) {
95
+ if (err instanceof PrecedenceError) {
96
+ return {
97
+ action: "FAILED",
98
+ message: err.message,
99
+ error: { code: err.code, details: err.message },
100
+ };
101
+ }
102
+ const message = err instanceof Error ? err.message : String(err);
103
+ return { action: "FAILED", message, error: { code: "SNIPPET_FAILED", details: message } };
104
+ }
105
+ //# sourceMappingURL=snippet-exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-exec.js","sourceRoot":"","sources":["../../src/installer/snippet-exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type InstallerOptions } from "./types.js";
2
+ import type { CliIo } from "./cli.js";
3
+ /**
4
+ * Headless P-1 offer: `sirius setup --yes` accepts the snippet offer and
5
+ * applies it after showing the diff. Without --yes nothing is generated;
6
+ * with --json the offer is skipped to keep stdout a single JSON document;
7
+ * with --dry-run only the diff preview is emitted — nothing is applied.
8
+ */
9
+ export declare function offerSnippetHeadless(base: Partial<InstallerOptions>, io?: CliIo): Promise<number>;
10
+ /**
11
+ * P-1 post-install offer for the interactive wizard: scoped to the wizard's
12
+ * selection; an offer failure never changes the setup exit code.
13
+ */
14
+ export declare function runPostInstallOffer(base: Partial<InstallerOptions>, scope: InstallerOptions["scope"], targets: string[], setupCode: number): Promise<number>;
15
+ /**
16
+ * Interactive P-1 offer at the end of `setup`: shows the diff and asks for
17
+ * apply confirmation in a single step. Without consent nothing is written;
18
+ * a dry-run setup only previews.
19
+ */
20
+ export declare function offerSnippetInteractive(base: Partial<InstallerOptions>, io?: CliIo): Promise<number>;
21
+ //# sourceMappingURL=snippet-offer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-offer.d.ts","sourceRoot":"","sources":["../../src/installer/snippet-offer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAyDtC;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAC/B,EAAE,GAAE,KAAiB,GACpB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAC/B,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAC/B,EAAE,GAAE,KAAiB,GACpB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
@@ -0,0 +1,108 @@
1
+ import readline from "node:readline";
2
+ import {} from "./types.js";
3
+ import { runSnippetCommand } from "./snippet.js";
4
+ const defaultIo = {
5
+ writeStdout: (d) => process.stdout.write(d),
6
+ writeStderr: (d) => process.stderr.write(d),
7
+ };
8
+ function log(message) {
9
+ process.stderr.write(`[sirius] ${message}\n`);
10
+ }
11
+ function snippetOptions(base) {
12
+ return {
13
+ subcommand: "snippet",
14
+ targets: base.targets,
15
+ category: base.category,
16
+ scope: base.scope ?? "workspace",
17
+ all: false,
18
+ yes: true,
19
+ dryRun: base.dryRun ?? false,
20
+ json: false,
21
+ force: false,
22
+ stdio: false,
23
+ };
24
+ }
25
+ function promptYesNo() {
26
+ return new Promise((resolve) => {
27
+ const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
28
+ let settled = false;
29
+ const settle = (value) => {
30
+ if (settled)
31
+ return;
32
+ settled = true;
33
+ rl.close();
34
+ resolve(value);
35
+ };
36
+ rl.on("close", () => settle(false));
37
+ rl.question("", (answer) => {
38
+ settle(/^y(es)?$/i.test(answer.trim()));
39
+ });
40
+ });
41
+ }
42
+ async function previewThenApply(base, io) {
43
+ const previewCode = await runSnippetCommand({ ...snippetOptions(base), dryRun: true }, io);
44
+ if (previewCode !== 0)
45
+ return previewCode;
46
+ if (base.dryRun)
47
+ return 0;
48
+ return runSnippetCommand(snippetOptions(base), io);
49
+ }
50
+ /**
51
+ * Headless P-1 offer: `sirius setup --yes` accepts the snippet offer and
52
+ * applies it after showing the diff. Without --yes nothing is generated;
53
+ * with --json the offer is skipped to keep stdout a single JSON document;
54
+ * with --dry-run only the diff preview is emitted — nothing is applied.
55
+ */
56
+ export async function offerSnippetHeadless(base, io = defaultIo) {
57
+ if (!base.yes || base.json)
58
+ return 0;
59
+ return previewThenApply(base, io);
60
+ }
61
+ /**
62
+ * P-1 post-install offer for the interactive wizard: scoped to the wizard's
63
+ * selection; an offer failure never changes the setup exit code.
64
+ */
65
+ export async function runPostInstallOffer(base, scope, targets, setupCode) {
66
+ if (targets.length === 0)
67
+ return setupCode;
68
+ try {
69
+ const offerCode = await offerSnippetInteractive({
70
+ ...base,
71
+ targets,
72
+ scope,
73
+ });
74
+ if (offerCode !== 0) {
75
+ log(`warning: routing snippet offer failed (exit ${offerCode}); setup result is unchanged.`);
76
+ }
77
+ }
78
+ catch (err) {
79
+ log(`warning: routing snippet offer failed: ${err instanceof Error ? err.message : String(err)}; setup result is unchanged.`);
80
+ }
81
+ return setupCode;
82
+ }
83
+ /**
84
+ * Interactive P-1 offer at the end of `setup`: shows the diff and asks for
85
+ * apply confirmation in a single step. Without consent nothing is written;
86
+ * a dry-run setup only previews.
87
+ */
88
+ export async function offerSnippetInteractive(base, io = defaultIo) {
89
+ process.stderr.write("\nGenerate the Sirius routing snippet now? [y/N] ");
90
+ if (!(await promptYesNo())) {
91
+ log("Skipped. Run 'sirius snippet' anytime.");
92
+ return 0;
93
+ }
94
+ const previewCode = await runSnippetCommand({ ...snippetOptions(base), dryRun: true }, io);
95
+ if (previewCode !== 0)
96
+ return previewCode;
97
+ if (base.dryRun) {
98
+ log("Dry-run setup: preview only, nothing applied.");
99
+ return 0;
100
+ }
101
+ process.stderr.write("\nApply the routing snippet shown above? [y/N] ");
102
+ if (!(await promptYesNo())) {
103
+ log("Nothing written.");
104
+ return 0;
105
+ }
106
+ return runSnippetCommand(snippetOptions(base), io);
107
+ }
108
+ //# sourceMappingURL=snippet-offer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-offer.js","sourceRoot":"","sources":["../../src/installer/snippet-offer.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAyB,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,SAAS,GAAU;IACvB,WAAW,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,WAAW,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF,SAAS,GAAG,CAAC,OAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,IAA+B;IACrD,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW;QAChC,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;QAC5B,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,KAAK;KACb,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAc,EAAE,EAAE;YACjC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,IAA+B,EAC/B,EAAS;IAET,MAAM,WAAW,GAAG,MAAM,iBAAiB,CACzC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EACzC,EAAE,CACH,CAAC;IACF,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAA+B,EAC/B,KAAY,SAAS;IAErB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACrC,OAAO,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA+B,EAC/B,KAAgC,EAChC,OAAiB,EACjB,SAAiB;IAEjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC;YAC9C,GAAG,IAAI;YACP,OAAO;YACP,KAAK;SACN,CAAC,CAAC;QACH,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,GAAG,CAAC,+CAA+C,SAAS,+BAA+B,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAChI,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAA+B,EAC/B,KAAY,SAAS;IAErB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,wCAAwC,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CACzC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EACzC,EAAE,CACH,CAAC;IACF,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,+CAA+C,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACxE,IAAI,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type InstallerOptions, type PatchResult, type PlatformEnv, type SiriusInstallerReport } from "./types.js";
2
+ import { type GroupOutcome, type SnippetContractContext, type SnippetTargetGroup } from "./snippet-context.js";
3
+ import type { CliIo } from "./cli.js";
4
+ import type { McpError } from "../errors.js";
5
+ export declare function precedenceRefusal(err: unknown): McpError;
6
+ export declare function emitRefusal(io: CliIo, options: InstallerOptions, refusal: McpError): void;
7
+ export declare function outcomeRows(group: SnippetTargetGroup, outcome: GroupOutcome): PatchResult[];
8
+ export declare function buildReport(options: InstallerOptions, env: PlatformEnv, rows: PatchResult[]): SiriusInstallerReport;
9
+ export declare function emitReport(report: SiriusInstallerReport, options: InstallerOptions, io: CliIo): void;
10
+ export declare function finishReport(options: InstallerOptions, io: CliIo, env: PlatformEnv, rows: PatchResult[]): number;
11
+ export declare function emitAbortReport(options: InstallerOptions, io: CliIo, message: string): number;
12
+ export declare function emitRemoveWithoutContract(options: InstallerOptions, io: CliIo, env: PlatformEnv, root: string): number;
13
+ export declare function emitStatus(options: InstallerOptions, io: CliIo, ctx: SnippetContractContext, env: PlatformEnv, root: string): Promise<number>;
14
+ //# sourceMappingURL=snippet-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-report.d.ts","sourceRoot":"","sources":["../../src/installer/snippet-report.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAE3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAa7C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAoBxD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI,CAOzF;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,YAAY,GACpB,WAAW,EAAE,CAiBf;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,WAAW,EAAE,GAClB,qBAAqB,CAiBvB;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,KAAK,GACR,IAAI,CAeN;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,WAAW,EAAE,GAClB,MAAM,CAIR;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,MAAM,GACd,MAAM,CAcR;AAcD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,CAKR;AAgCD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,sBAAsB,EAC3B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAgCjB"}