@nanocollective/sentinel 0.1.0-alpha.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 (163) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +66 -0
  3. package/dist/cli.d.ts +12 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +254 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/parse.d.ts +13 -0
  8. package/dist/config/parse.d.ts.map +1 -0
  9. package/dist/config/parse.js +271 -0
  10. package/dist/config/parse.js.map +1 -0
  11. package/dist/config/repo-override.d.ts +13 -0
  12. package/dist/config/repo-override.d.ts.map +1 -0
  13. package/dist/config/repo-override.js +128 -0
  14. package/dist/config/repo-override.js.map +1 -0
  15. package/dist/config/types.d.ts +86 -0
  16. package/dist/config/types.d.ts.map +1 -0
  17. package/dist/config/types.js +8 -0
  18. package/dist/config/types.js.map +1 -0
  19. package/dist/dedup/hash.d.ts +10 -0
  20. package/dist/dedup/hash.d.ts.map +1 -0
  21. package/dist/dedup/hash.js +18 -0
  22. package/dist/dedup/hash.js.map +1 -0
  23. package/dist/dedup/markers.d.ts +13 -0
  24. package/dist/dedup/markers.d.ts.map +1 -0
  25. package/dist/dedup/markers.js +42 -0
  26. package/dist/dedup/markers.js.map +1 -0
  27. package/dist/dedup/plan.d.ts +45 -0
  28. package/dist/dedup/plan.d.ts.map +1 -0
  29. package/dist/dedup/plan.js +83 -0
  30. package/dist/dedup/plan.js.map +1 -0
  31. package/dist/dedup/reconcile.d.ts +29 -0
  32. package/dist/dedup/reconcile.d.ts.map +1 -0
  33. package/dist/dedup/reconcile.js +73 -0
  34. package/dist/dedup/reconcile.js.map +1 -0
  35. package/dist/findings/types.d.ts +53 -0
  36. package/dist/findings/types.d.ts.map +1 -0
  37. package/dist/findings/types.js +28 -0
  38. package/dist/findings/types.js.map +1 -0
  39. package/dist/findings/validate.d.ts +36 -0
  40. package/dist/findings/validate.d.ts.map +1 -0
  41. package/dist/findings/validate.js +178 -0
  42. package/dist/findings/validate.js.map +1 -0
  43. package/dist/index.d.ts +48 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +39 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/init/args.d.ts +20 -0
  48. package/dist/init/args.d.ts.map +1 -0
  49. package/dist/init/args.js +80 -0
  50. package/dist/init/args.js.map +1 -0
  51. package/dist/init/plan.d.ts +9 -0
  52. package/dist/init/plan.d.ts.map +1 -0
  53. package/dist/init/plan.js +17 -0
  54. package/dist/init/plan.js.map +1 -0
  55. package/dist/init/scaffold.d.ts +17 -0
  56. package/dist/init/scaffold.d.ts.map +1 -0
  57. package/dist/init/scaffold.js +27 -0
  58. package/dist/init/scaffold.js.map +1 -0
  59. package/dist/init/templates.d.ts +28 -0
  60. package/dist/init/templates.d.ts.map +1 -0
  61. package/dist/init/templates.js +187 -0
  62. package/dist/init/templates.js.map +1 -0
  63. package/dist/init/types.d.ts +29 -0
  64. package/dist/init/types.d.ts.map +1 -0
  65. package/dist/init/types.js +15 -0
  66. package/dist/init/types.js.map +1 -0
  67. package/dist/issues/body.d.ts +12 -0
  68. package/dist/issues/body.d.ts.map +1 -0
  69. package/dist/issues/body.js +53 -0
  70. package/dist/issues/body.js.map +1 -0
  71. package/dist/issues/file.d.ts +24 -0
  72. package/dist/issues/file.d.ts.map +1 -0
  73. package/dist/issues/file.js +61 -0
  74. package/dist/issues/file.js.map +1 -0
  75. package/dist/issues/gh-client.d.ts +21 -0
  76. package/dist/issues/gh-client.d.ts.map +1 -0
  77. package/dist/issues/gh-client.js +133 -0
  78. package/dist/issues/gh-client.js.map +1 -0
  79. package/dist/issues/types.d.ts +85 -0
  80. package/dist/issues/types.d.ts.map +1 -0
  81. package/dist/issues/types.js +8 -0
  82. package/dist/issues/types.js.map +1 -0
  83. package/dist/orchestrator/audit.d.ts +14 -0
  84. package/dist/orchestrator/audit.d.ts.map +1 -0
  85. package/dist/orchestrator/audit.js +47 -0
  86. package/dist/orchestrator/audit.js.map +1 -0
  87. package/dist/orchestrator/auto-fix.d.ts +31 -0
  88. package/dist/orchestrator/auto-fix.d.ts.map +1 -0
  89. package/dist/orchestrator/auto-fix.js +59 -0
  90. package/dist/orchestrator/auto-fix.js.map +1 -0
  91. package/dist/orchestrator/extract.d.ts +14 -0
  92. package/dist/orchestrator/extract.d.ts.map +1 -0
  93. package/dist/orchestrator/extract.js +70 -0
  94. package/dist/orchestrator/extract.js.map +1 -0
  95. package/dist/orchestrator/nanocoder-runner.d.ts +33 -0
  96. package/dist/orchestrator/nanocoder-runner.d.ts.map +1 -0
  97. package/dist/orchestrator/nanocoder-runner.js +125 -0
  98. package/dist/orchestrator/nanocoder-runner.js.map +1 -0
  99. package/dist/orchestrator/types.d.ts +51 -0
  100. package/dist/orchestrator/types.d.ts.map +1 -0
  101. package/dist/orchestrator/types.js +8 -0
  102. package/dist/orchestrator/types.js.map +1 -0
  103. package/dist/prompt/build.d.ts +14 -0
  104. package/dist/prompt/build.d.ts.map +1 -0
  105. package/dist/prompt/build.js +123 -0
  106. package/dist/prompt/build.js.map +1 -0
  107. package/dist/prompt/types.d.ts +34 -0
  108. package/dist/prompt/types.d.ts.map +1 -0
  109. package/dist/prompt/types.js +8 -0
  110. package/dist/prompt/types.js.map +1 -0
  111. package/dist/rule-packs/dependencies.d.ts +20 -0
  112. package/dist/rule-packs/dependencies.d.ts.map +1 -0
  113. package/dist/rule-packs/dependencies.js +58 -0
  114. package/dist/rule-packs/dependencies.js.map +1 -0
  115. package/dist/rule-packs/glob.d.ts +23 -0
  116. package/dist/rule-packs/glob.d.ts.map +1 -0
  117. package/dist/rule-packs/glob.js +66 -0
  118. package/dist/rule-packs/glob.js.map +1 -0
  119. package/dist/rule-packs/parse.d.ts +21 -0
  120. package/dist/rule-packs/parse.d.ts.map +1 -0
  121. package/dist/rule-packs/parse.js +230 -0
  122. package/dist/rule-packs/parse.js.map +1 -0
  123. package/dist/rule-packs/types.d.ts +55 -0
  124. package/dist/rule-packs/types.d.ts.map +1 -0
  125. package/dist/rule-packs/types.js +10 -0
  126. package/dist/rule-packs/types.js.map +1 -0
  127. package/dist/run/audit.d.ts +20 -0
  128. package/dist/run/audit.d.ts.map +1 -0
  129. package/dist/run/audit.js +28 -0
  130. package/dist/run/audit.js.map +1 -0
  131. package/dist/run/clone.d.ts +23 -0
  132. package/dist/run/clone.d.ts.map +1 -0
  133. package/dist/run/clone.js +51 -0
  134. package/dist/run/clone.js.map +1 -0
  135. package/dist/run/preview.d.ts +34 -0
  136. package/dist/run/preview.d.ts.map +1 -0
  137. package/dist/run/preview.js +68 -0
  138. package/dist/run/preview.js.map +1 -0
  139. package/dist/run/report.d.ts +10 -0
  140. package/dist/run/report.d.ts.map +1 -0
  141. package/dist/run/report.js +73 -0
  142. package/dist/run/report.js.map +1 -0
  143. package/dist/run/run.d.ts +74 -0
  144. package/dist/run/run.d.ts.map +1 -0
  145. package/dist/run/run.js +131 -0
  146. package/dist/run/run.js.map +1 -0
  147. package/dist/run/select.d.ts +14 -0
  148. package/dist/run/select.d.ts.map +1 -0
  149. package/dist/run/select.js +31 -0
  150. package/dist/run/select.js.map +1 -0
  151. package/dist/run/sources.d.ts +11 -0
  152. package/dist/run/sources.d.ts.map +1 -0
  153. package/dist/run/sources.js +106 -0
  154. package/dist/run/sources.js.map +1 -0
  155. package/dist/run/types.d.ts +55 -0
  156. package/dist/run/types.d.ts.map +1 -0
  157. package/dist/run/types.js +7 -0
  158. package/dist/run/types.js.map +1 -0
  159. package/dist/suppression/apply.d.ts +33 -0
  160. package/dist/suppression/apply.d.ts.map +1 -0
  161. package/dist/suppression/apply.js +55 -0
  162. package/dist/suppression/apply.js.map +1 -0
  163. package/package.json +118 -0
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The findings data model. This is a stable contract: rich enough that a
3
+ * future auto-fix surface can consume it without a migration, even though v1
4
+ * only files issues. See docs/findings/index.md.
5
+ */
6
+ /** The four-tier severity scale. Order matters: index encodes rank. */
7
+ export declare const SEVERITIES: readonly ["low", "medium", "high", "critical"];
8
+ export type Severity = (typeof SEVERITIES)[number];
9
+ /** Confidence is tracked separately from severity. */
10
+ export declare const CONFIDENCES: readonly ["low", "medium", "high"];
11
+ export type Confidence = (typeof CONFIDENCES)[number];
12
+ /** A 1-indexed, inclusive line range within a file. */
13
+ export interface LineRange {
14
+ start: number;
15
+ end: number;
16
+ }
17
+ /** A single thing a rule pack flagged. */
18
+ export interface Finding {
19
+ /** The rule pack (and pattern within it) that produced the finding. */
20
+ rule: string;
21
+ /** The affected file, relative to the repository root. */
22
+ file: string;
23
+ /** The line range within that file. */
24
+ lineRange: LineRange;
25
+ /** The finding's category, carried from the pack. */
26
+ category: string;
27
+ /** One of the four severities. */
28
+ severity: Severity;
29
+ /** The model's confidence in the finding. */
30
+ confidence: Confidence;
31
+ /** The relevant code excerpt. */
32
+ offendingSnippet: string;
33
+ /**
34
+ * The human-facing layer the issue body renders. These are model-authored
35
+ * (they cannot be derived from the machine fields) and optional: a finding
36
+ * still validates without them, but a good pack produces them.
37
+ */
38
+ /** A one-line summary of the finding. */
39
+ summary?: string;
40
+ /** Why the finding carries the severity it does. */
41
+ rationale?: string;
42
+ /** What a reviewer should do next. Not a patch — a next step. */
43
+ suggestedNextSteps?: string;
44
+ }
45
+ /** The rank of a severity, 0 (low) to 3 (critical). */
46
+ export declare function severityRank(severity: Severity): number;
47
+ /** Returns true if a finding's severity is at or above the filing threshold. */
48
+ export declare function meetsSeverityThreshold(severity: Severity, threshold: Severity): boolean;
49
+ /** Returns true if the value is one of the allowed severities. */
50
+ export declare function isSeverity(value: unknown): value is Severity;
51
+ /** Returns true if the value is one of the allowed confidences. */
52
+ export declare function isConfidence(value: unknown): value is Confidence;
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../source/findings/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uEAAuE;AACvE,eAAO,MAAM,UAAU,gDAAiD,CAAC;AAEzE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,sDAAsD;AACtD,eAAO,MAAM,WAAW,oCAAqC,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,uDAAuD;AACvD,MAAM,WAAW,SAAS;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,0CAA0C;AAC1C,MAAM,WAAW,OAAO;IACvB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,SAAS,EAAE,SAAS,CAAC;IACrB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,6CAA6C;IAC7C,UAAU,EAAE,UAAU,CAAC;IACvB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEvD;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,QAAQ,GACjB,OAAO,CAET;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAK5D;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAKhE"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The findings data model. This is a stable contract: rich enough that a
3
+ * future auto-fix surface can consume it without a migration, even though v1
4
+ * only files issues. See docs/findings/index.md.
5
+ */
6
+ /** The four-tier severity scale. Order matters: index encodes rank. */
7
+ export const SEVERITIES = ['low', 'medium', 'high', 'critical'];
8
+ /** Confidence is tracked separately from severity. */
9
+ export const CONFIDENCES = ['low', 'medium', 'high'];
10
+ /** The rank of a severity, 0 (low) to 3 (critical). */
11
+ export function severityRank(severity) {
12
+ return SEVERITIES.indexOf(severity);
13
+ }
14
+ /** Returns true if a finding's severity is at or above the filing threshold. */
15
+ export function meetsSeverityThreshold(severity, threshold) {
16
+ return severityRank(severity) >= severityRank(threshold);
17
+ }
18
+ /** Returns true if the value is one of the allowed severities. */
19
+ export function isSeverity(value) {
20
+ return (typeof value === 'string' &&
21
+ SEVERITIES.includes(value));
22
+ }
23
+ /** Returns true if the value is one of the allowed confidences. */
24
+ export function isConfidence(value) {
25
+ return (typeof value === 'string' &&
26
+ CONFIDENCES.includes(value));
27
+ }
28
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../source/findings/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAU,CAAC;AAIzE,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAuC9D,uDAAuD;AACvD,MAAM,UAAU,YAAY,CAAC,QAAkB;IAC9C,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CACrC,QAAkB,EAClB,SAAmB;IAEnB,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;AAC1D,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,UAAU,CAAC,KAAc;IACxC,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACxB,UAAgC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACjD,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,YAAY,CAAC,KAAc;IAC1C,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACxB,WAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAClD,CAAC;AACH,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The findings validator. This is the hard gate the workflow runs against the
3
+ * agent's structured output before anything is filed. It enforces three rules
4
+ * (see docs/workflow/index.md#validation):
5
+ *
6
+ * 1. The output is well-formed JSON.
7
+ * 2. Every finding's severity is within the allowed set.
8
+ * 3. Every finding cites at least one file and a line range.
9
+ *
10
+ * On failure it returns a structured error report, which the auto-fix loop
11
+ * feeds back to the agent for a second attempt.
12
+ */
13
+ import { type Finding } from './types.js';
14
+ /** A single reason a finding (or the whole output) failed validation. */
15
+ export interface ValidationError {
16
+ /** Index of the offending finding, or -1 for a document-level error. */
17
+ index: number;
18
+ /** The field at fault, or 'document' for parse-level errors. */
19
+ field: string;
20
+ /** A human-readable explanation, suitable for the auto-fix prompt. */
21
+ message: string;
22
+ }
23
+ /** The outcome of validating a batch of findings. */
24
+ export interface ValidationResult {
25
+ valid: boolean;
26
+ /** The findings that passed, in input order. */
27
+ findings: Finding[];
28
+ /** Every reason validation failed. Empty when valid. */
29
+ errors: ValidationError[];
30
+ }
31
+ /**
32
+ * Validate the agent's findings output. Accepts either a raw JSON string (which
33
+ * it parses — Rule 1) or an already-parsed array of unknown values.
34
+ */
35
+ export declare function validateFindings(raw: unknown): ValidationResult;
36
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../source/findings/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAEN,KAAK,OAAO,EAKZ,MAAM,YAAY,CAAC;AAEpB,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC/B,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,gDAAgD;IAChD,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,wDAAwD;IACxD,MAAM,EAAE,eAAe,EAAE,CAAC;CAC1B;AAmJD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CA2C/D"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * The findings validator. This is the hard gate the workflow runs against the
3
+ * agent's structured output before anything is filed. It enforces three rules
4
+ * (see docs/workflow/index.md#validation):
5
+ *
6
+ * 1. The output is well-formed JSON.
7
+ * 2. Every finding's severity is within the allowed set.
8
+ * 3. Every finding cites at least one file and a line range.
9
+ *
10
+ * On failure it returns a structured error report, which the auto-fix loop
11
+ * feeds back to the agent for a second attempt.
12
+ */
13
+ import { isConfidence, isSeverity, } from './types.js';
14
+ function isObject(value) {
15
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
16
+ }
17
+ function isNonEmptyString(value) {
18
+ return typeof value === 'string' && value.trim().length > 0;
19
+ }
20
+ function validateLineRange(value, index, errors) {
21
+ if (!isObject(value)) {
22
+ errors.push({
23
+ index,
24
+ field: 'line_range',
25
+ message: 'line_range must be an object with numeric start and end',
26
+ });
27
+ return false;
28
+ }
29
+ const { start, end } = value;
30
+ if (typeof start !== 'number' || typeof end !== 'number') {
31
+ errors.push({
32
+ index,
33
+ field: 'line_range',
34
+ message: 'line_range.start and line_range.end must both be numbers',
35
+ });
36
+ return false;
37
+ }
38
+ if (start < 1 || end < start) {
39
+ errors.push({
40
+ index,
41
+ field: 'line_range',
42
+ message: 'line_range must satisfy 1 <= start <= end',
43
+ });
44
+ return false;
45
+ }
46
+ return true;
47
+ }
48
+ function validateFinding(value, index, errors) {
49
+ if (!isObject(value)) {
50
+ errors.push({
51
+ index,
52
+ field: 'finding',
53
+ message: 'finding must be an object',
54
+ });
55
+ return null;
56
+ }
57
+ const before = errors.length;
58
+ if (!isNonEmptyString(value.rule)) {
59
+ errors.push({
60
+ index,
61
+ field: 'rule',
62
+ message: 'rule must be a non-empty string',
63
+ });
64
+ }
65
+ // Rule 3: every finding cites at least one file...
66
+ if (!isNonEmptyString(value.file)) {
67
+ errors.push({
68
+ index,
69
+ field: 'file',
70
+ message: 'file must be a non-empty string',
71
+ });
72
+ }
73
+ // ...and a line range.
74
+ validateLineRange(value.line_range, index, errors);
75
+ if (!isNonEmptyString(value.category)) {
76
+ errors.push({
77
+ index,
78
+ field: 'category',
79
+ message: 'category must be a non-empty string',
80
+ });
81
+ }
82
+ // Rule 2: severity within the allowed set.
83
+ if (!isSeverity(value.severity)) {
84
+ errors.push({
85
+ index,
86
+ field: 'severity',
87
+ message: 'severity must be one of: low, medium, high, critical',
88
+ });
89
+ }
90
+ if (!isConfidence(value.confidence)) {
91
+ errors.push({
92
+ index,
93
+ field: 'confidence',
94
+ message: 'confidence must be one of: low, medium, high',
95
+ });
96
+ }
97
+ if (!isNonEmptyString(value.offending_snippet)) {
98
+ errors.push({
99
+ index,
100
+ field: 'offending_snippet',
101
+ message: 'offending_snippet must be a non-empty string',
102
+ });
103
+ }
104
+ // Optional human-facing fields: when present, they must be strings.
105
+ for (const key of ['summary', 'rationale', 'suggested_next_steps']) {
106
+ if (value[key] !== undefined && typeof value[key] !== 'string') {
107
+ errors.push({ index, field: key, message: `${key} must be a string` });
108
+ }
109
+ }
110
+ if (errors.length > before) {
111
+ return null;
112
+ }
113
+ const finding = {
114
+ rule: value.rule,
115
+ file: value.file,
116
+ lineRange: value.line_range,
117
+ category: value.category,
118
+ severity: value.severity,
119
+ confidence: value.confidence,
120
+ offendingSnippet: value.offending_snippet,
121
+ };
122
+ if (typeof value.summary === 'string') {
123
+ finding.summary = value.summary;
124
+ }
125
+ if (typeof value.rationale === 'string') {
126
+ finding.rationale = value.rationale;
127
+ }
128
+ if (typeof value.suggested_next_steps === 'string') {
129
+ finding.suggestedNextSteps = value.suggested_next_steps;
130
+ }
131
+ return finding;
132
+ }
133
+ /**
134
+ * Validate the agent's findings output. Accepts either a raw JSON string (which
135
+ * it parses — Rule 1) or an already-parsed array of unknown values.
136
+ */
137
+ export function validateFindings(raw) {
138
+ const errors = [];
139
+ let parsed = raw;
140
+ // Rule 1: well-formed JSON.
141
+ if (typeof raw === 'string') {
142
+ try {
143
+ parsed = JSON.parse(raw);
144
+ }
145
+ catch (error) {
146
+ const message = error instanceof Error ? error.message : String(error);
147
+ return {
148
+ valid: false,
149
+ findings: [],
150
+ errors: [
151
+ { index: -1, field: 'document', message: `invalid JSON: ${message}` },
152
+ ],
153
+ };
154
+ }
155
+ }
156
+ if (!Array.isArray(parsed)) {
157
+ return {
158
+ valid: false,
159
+ findings: [],
160
+ errors: [
161
+ {
162
+ index: -1,
163
+ field: 'document',
164
+ message: 'findings output must be an array',
165
+ },
166
+ ],
167
+ };
168
+ }
169
+ const findings = [];
170
+ for (const [index, entry] of parsed.entries()) {
171
+ const finding = validateFinding(entry, index, errors);
172
+ if (finding) {
173
+ findings.push(finding);
174
+ }
175
+ }
176
+ return { valid: errors.length === 0, findings, errors };
177
+ }
178
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../source/findings/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Public library API for @nanocollective/sentinel.
3
+ *
4
+ * The same package is both the scaffolder (`sentinel init`), the workflow
5
+ * runtime (`sentinel run`), and a library. This module is the library surface.
6
+ */
7
+ export { parseConfig } from './config/parse.js';
8
+ export { parseRepoOverride } from './config/repo-override.js';
9
+ export type { ConfigError, ConfigResult, IssuesConfig, ModelConfig, ModelFallback, RepoOverride, RepoOverrideResult, SentinelConfig, Suppression, Target, } from './config/types.js';
10
+ export { findingHash } from './dedup/hash.js';
11
+ export { readMarker, readMisses, upsertMarker } from './dedup/markers.js';
12
+ export { planReconciliation, type ReconcileOptions, type ReconcilePlan, SUPPRESSION_LABELS, } from './dedup/plan.js';
13
+ export { type ReconcileResult, reconcileFindings, } from './dedup/reconcile.js';
14
+ export type { Confidence, Finding, LineRange, Severity, } from './findings/types.js';
15
+ export { CONFIDENCES, isConfidence, isSeverity, meetsSeverityThreshold, SEVERITIES, severityRank, } from './findings/types.js';
16
+ export type { ValidationError, ValidationResult, } from './findings/validate.js';
17
+ export { validateFindings } from './findings/validate.js';
18
+ export { type ParsedInitArgs, parseInitArgs } from './init/args.js';
19
+ export { planInit } from './init/plan.js';
20
+ export { type ScaffoldResult, scaffold } from './init/scaffold.js';
21
+ export { configReadme, nanocoderConfig, sentinelYaml, starterPack, workflowYaml, } from './init/templates.js';
22
+ export { DEFAULT_INIT_OPTIONS, type InitOptions, type ScaffoldFile, } from './init/types.js';
23
+ export { buildIssueBody, buildIssueTitle } from './issues/body.js';
24
+ export { buildIssueContent, fileFindings, qualifyingFindings, targetRepoFor, } from './issues/file.js';
25
+ export { buildGhCloseArgs, buildGhEditArgs, buildGhIssueArgs, buildGhListArgs, ghIssueClient, parseIssueList, parseIssueUrl, } from './issues/gh-client.js';
26
+ export type { CreatedIssue, CreateIssueParams, ExistingIssue, FiledIssue, FilingContext, FilingError, FilingResult, GitHubClient, IssueContent, IssueQueryClient, ReconcileClient, } from './issues/types.js';
27
+ export { runAudit } from './orchestrator/audit.js';
28
+ export { type AutoFixOptions, type AutoFixResult, buildAutoFixPrompt, runAuditWithAutoFix, } from './orchestrator/auto-fix.js';
29
+ export { extractJsonArray } from './orchestrator/extract.js';
30
+ export { buildNanocoderArgs, buildNanocoderEnv, nanocoderRunner, resolveModelId, } from './orchestrator/nanocoder-runner.js';
31
+ export type { AuditResult, ModelRunner, ModelRunResult, RunnerOptions, } from './orchestrator/types.js';
32
+ export { buildAuditPrompt } from './prompt/build.js';
33
+ export type { PromptInput, PromptResult, SourceFile } from './prompt/types.js';
34
+ export type { DependencyResult } from './rule-packs/dependencies.js';
35
+ export { resolveDependencies } from './rule-packs/dependencies.js';
36
+ export { globToRegExp, matchesAppliesTo, matchesGlob, } from './rule-packs/glob.js';
37
+ export { parseRulePack, splitFrontmatter } from './rule-packs/parse.js';
38
+ export type { AppliesTo, ParseResult, RulePack, RulePackError, RulePackManifest, } from './rule-packs/types.js';
39
+ export { auditPack, type PackAuditContext } from './run/audit.js';
40
+ export { buildCloneArgs, type EnsureTargetsResult } from './run/clone.js';
41
+ export { type DryRunPreview, previewReconciliation, renderPreview, } from './run/preview.js';
42
+ export { countFindings, renderReport } from './run/report.js';
43
+ export { type RunConfigOptions, type RunDeps, type RunLocalDeps, type RunReport, runFromConfig, runLocal, } from './run/run.js';
44
+ export { isEnabledPackPath, unionPatterns } from './run/select.js';
45
+ export { fsPackLoader, fsRepoFiles } from './run/sources.js';
46
+ export type { LoadedPacks, PackLoadError, PackLoader, PackOutcome, RepoFiles, RepoOutcome, RunOutcome, } from './run/types.js';
47
+ export { applyRepoOverride, isSuppressed, matchesSuppression, type OverrideOutcome, } from './suppression/apply.js';
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Public library API for @nanocollective/sentinel.
3
+ *
4
+ * The same package is both the scaffolder (`sentinel init`), the workflow
5
+ * runtime (`sentinel run`), and a library. This module is the library surface.
6
+ */
7
+ export { parseConfig } from './config/parse.js';
8
+ export { parseRepoOverride } from './config/repo-override.js';
9
+ export { findingHash } from './dedup/hash.js';
10
+ export { readMarker, readMisses, upsertMarker } from './dedup/markers.js';
11
+ export { planReconciliation, SUPPRESSION_LABELS, } from './dedup/plan.js';
12
+ export { reconcileFindings, } from './dedup/reconcile.js';
13
+ export { CONFIDENCES, isConfidence, isSeverity, meetsSeverityThreshold, SEVERITIES, severityRank, } from './findings/types.js';
14
+ export { validateFindings } from './findings/validate.js';
15
+ export { parseInitArgs } from './init/args.js';
16
+ export { planInit } from './init/plan.js';
17
+ export { scaffold } from './init/scaffold.js';
18
+ export { configReadme, nanocoderConfig, sentinelYaml, starterPack, workflowYaml, } from './init/templates.js';
19
+ export { DEFAULT_INIT_OPTIONS, } from './init/types.js';
20
+ export { buildIssueBody, buildIssueTitle } from './issues/body.js';
21
+ export { buildIssueContent, fileFindings, qualifyingFindings, targetRepoFor, } from './issues/file.js';
22
+ export { buildGhCloseArgs, buildGhEditArgs, buildGhIssueArgs, buildGhListArgs, ghIssueClient, parseIssueList, parseIssueUrl, } from './issues/gh-client.js';
23
+ export { runAudit } from './orchestrator/audit.js';
24
+ export { buildAutoFixPrompt, runAuditWithAutoFix, } from './orchestrator/auto-fix.js';
25
+ export { extractJsonArray } from './orchestrator/extract.js';
26
+ export { buildNanocoderArgs, buildNanocoderEnv, nanocoderRunner, resolveModelId, } from './orchestrator/nanocoder-runner.js';
27
+ export { buildAuditPrompt } from './prompt/build.js';
28
+ export { resolveDependencies } from './rule-packs/dependencies.js';
29
+ export { globToRegExp, matchesAppliesTo, matchesGlob, } from './rule-packs/glob.js';
30
+ export { parseRulePack, splitFrontmatter } from './rule-packs/parse.js';
31
+ export { auditPack } from './run/audit.js';
32
+ export { buildCloneArgs } from './run/clone.js';
33
+ export { previewReconciliation, renderPreview, } from './run/preview.js';
34
+ export { countFindings, renderReport } from './run/report.js';
35
+ export { runFromConfig, runLocal, } from './run/run.js';
36
+ export { isEnabledPackPath, unionPatterns } from './run/select.js';
37
+ export { fsPackLoader, fsRepoFiles } from './run/sources.js';
38
+ export { applyRepoOverride, isSuppressed, matchesSuppression, } from './suppression/apply.js';
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAa5D,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACxE,OAAO,EACN,kBAAkB,EAGlB,kBAAkB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,iBAAiB,GACjB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EACN,WAAW,EACX,YAAY,EACZ,UAAU,EACV,sBAAsB,EACtB,UAAU,EACV,YAAY,GACZ,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAsB,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAsB,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACN,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,YAAY,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,oBAAoB,GAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACN,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,GACb,MAAM,uBAAuB,CAAC;AAc/B,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAGN,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACN,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,GACd,MAAM,oCAAoC,CAAC;AAO5C,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACN,YAAY,EACZ,gBAAgB,EAChB,WAAW,GACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAQtE,OAAO,EAAC,SAAS,EAAwB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAC,cAAc,EAA2B,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAEN,qBAAqB,EACrB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAKN,aAAa,EACb,QAAQ,GACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,iBAAiB,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAC,YAAY,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAU3D,OAAO,EACN,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,GAElB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Parse the `sentinel init` flags into resolved options. Pure and tested; the
3
+ * interactive prompting for anything omitted lives in the CLI glue.
4
+ */
5
+ import { type InitOptions } from './types.js';
6
+ /** The parsed result of `sentinel init` arguments. */
7
+ export interface ParsedInitArgs {
8
+ options: InitOptions;
9
+ /** Directory to scaffold into. */
10
+ dir: string;
11
+ /** Overwrite existing files. */
12
+ force: boolean;
13
+ /** Run non-interactively, accepting defaults for anything not supplied. */
14
+ yes: boolean;
15
+ /** Validation problems (e.g. an unknown severity). */
16
+ errors: string[];
17
+ }
18
+ /** Parse `sentinel init` argv (excluding the `init` command word). */
19
+ export declare function parseInitArgs(argv: string[]): ParsedInitArgs;
20
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../source/init/args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAuB,KAAK,WAAW,EAAC,MAAM,YAAY,CAAC;AAElE,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,GAAG,EAAE,OAAO,CAAC;IACb,sDAAsD;IACtD,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AA+BD,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CAiD5D"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Parse the `sentinel init` flags into resolved options. Pure and tested; the
3
+ * interactive prompting for anything omitted lives in the CLI glue.
4
+ */
5
+ import { isSeverity } from '../findings/types.js';
6
+ import { DEFAULT_INIT_OPTIONS } from './types.js';
7
+ /** Split `--flag value` and `--flag=value` into a key/value map (+ booleans). */
8
+ function tokenize(argv) {
9
+ const map = new Map();
10
+ for (let i = 0; i < argv.length; i++) {
11
+ const token = argv[i];
12
+ if (!token || !token.startsWith('--')) {
13
+ continue;
14
+ }
15
+ const body = token.slice(2);
16
+ const eq = body.indexOf('=');
17
+ if (eq !== -1) {
18
+ map.set(body.slice(0, eq), body.slice(eq + 1));
19
+ continue;
20
+ }
21
+ const next = argv[i + 1];
22
+ if (next !== undefined && !next.startsWith('--')) {
23
+ map.set(body, next);
24
+ i++;
25
+ }
26
+ else {
27
+ map.set(body, true);
28
+ }
29
+ }
30
+ return map;
31
+ }
32
+ function asString(value) {
33
+ return typeof value === 'string' ? value : undefined;
34
+ }
35
+ /** Parse `sentinel init` argv (excluding the `init` command word). */
36
+ export function parseInitArgs(argv) {
37
+ const flags = tokenize(argv);
38
+ const errors = [];
39
+ const options = { ...DEFAULT_INIT_OPTIONS };
40
+ const provider = asString(flags.get('provider'));
41
+ if (provider) {
42
+ options.provider = provider;
43
+ }
44
+ const model = asString(flags.get('model'));
45
+ if (model) {
46
+ options.model = model;
47
+ }
48
+ const schedule = asString(flags.get('schedule'));
49
+ if (schedule) {
50
+ options.schedule = schedule;
51
+ }
52
+ const label = asString(flags.get('label'));
53
+ if (label) {
54
+ options.label = label;
55
+ }
56
+ const targets = asString(flags.get('targets'));
57
+ if (targets) {
58
+ options.targets = targets
59
+ .split(',')
60
+ .map(target => target.trim())
61
+ .filter(target => target.length > 0);
62
+ }
63
+ const threshold = asString(flags.get('severity-threshold'));
64
+ if (threshold !== undefined) {
65
+ if (isSeverity(threshold)) {
66
+ options.severityThreshold = threshold;
67
+ }
68
+ else {
69
+ errors.push(`unknown severity-threshold "${threshold}" (use low, medium, high, or critical)`);
70
+ }
71
+ }
72
+ return {
73
+ options,
74
+ dir: asString(flags.get('dir')) ?? '.',
75
+ force: flags.get('force') === true || flags.get('force') === 'true',
76
+ yes: flags.get('yes') === true || flags.get('yes') === 'true',
77
+ errors,
78
+ };
79
+ }
80
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../source/init/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The file plan for a scaffold: sentinel.yaml, the scheduled workflow, the
3
+ * disabled starter pack (which also creates rule-packs/), and the config
4
+ * README. Pure — the writer applies it.
5
+ */
6
+ import type { InitOptions, ScaffoldFile } from './types.js';
7
+ /** The ordered set of files `sentinel init` scaffolds. */
8
+ export declare function planInit(options: InitOptions): ScaffoldFile[];
9
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../source/init/plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAE1D,0DAA0D;AAC1D,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,EAAE,CAQ7D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The file plan for a scaffold: sentinel.yaml, the scheduled workflow, the
3
+ * disabled starter pack (which also creates rule-packs/), and the config
4
+ * README. Pure — the writer applies it.
5
+ */
6
+ import { configReadme, nanocoderConfig, sentinelYaml, starterPack, workflowYaml, } from './templates.js';
7
+ /** The ordered set of files `sentinel init` scaffolds. */
8
+ export function planInit(options) {
9
+ return [
10
+ { path: 'sentinel.yaml', content: sentinelYaml(options) },
11
+ { path: 'agents.config.json', content: nanocoderConfig() },
12
+ { path: '.github/workflows/sentinel.yml', content: workflowYaml(options) },
13
+ { path: 'rule-packs/_starter/example.md', content: starterPack() },
14
+ { path: 'README.md', content: configReadme(options) },
15
+ ];
16
+ }
17
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../source/init/plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,YAAY,GACZ,MAAM,gBAAgB,CAAC;AAGxB,0DAA0D;AAC1D,MAAM,UAAU,QAAQ,CAAC,OAAoB;IAC5C,OAAO;QACN,EAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAC;QACvD,EAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,eAAe,EAAE,EAAC;QACxD,EAAC,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAC;QACxE,EAAC,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAC;QAChE,EAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAC;KACnD,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Write the file plan to disk. Refuses to overwrite existing files unless
3
+ * `force` is set, so re-running init never clobbers a user's edited config.
4
+ * Tested against a temp directory.
5
+ */
6
+ import type { InitOptions } from './types.js';
7
+ /** What a scaffold run wrote and what it left alone. */
8
+ export interface ScaffoldResult {
9
+ written: string[];
10
+ skipped: string[];
11
+ }
12
+ /**
13
+ * Scaffold a Sentinel config into `dir`. Existing files are skipped unless
14
+ * `force` is true.
15
+ */
16
+ export declare function scaffold(options: InitOptions, dir: string, force?: boolean): ScaffoldResult;
17
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../source/init/scaffold.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACvB,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,UAAQ,GACX,cAAc,CAehB"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Write the file plan to disk. Refuses to overwrite existing files unless
3
+ * `force` is set, so re-running init never clobbers a user's edited config.
4
+ * Tested against a temp directory.
5
+ */
6
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
7
+ import { dirname, join } from 'node:path';
8
+ import { planInit } from './plan.js';
9
+ /**
10
+ * Scaffold a Sentinel config into `dir`. Existing files are skipped unless
11
+ * `force` is true.
12
+ */
13
+ export function scaffold(options, dir, force = false) {
14
+ const result = { written: [], skipped: [] };
15
+ for (const file of planInit(options)) {
16
+ const fullPath = join(dir, file.path);
17
+ if (existsSync(fullPath) && !force) {
18
+ result.skipped.push(file.path);
19
+ continue;
20
+ }
21
+ mkdirSync(dirname(fullPath), { recursive: true }); // nosemgrep
22
+ writeFileSync(fullPath, file.content); // nosemgrep
23
+ result.written.push(file.path);
24
+ }
25
+ return result;
26
+ }
27
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../source/init/scaffold.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,UAAU,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAC,OAAO,EAAE,IAAI,EAAC,MAAM,WAAW,CAAC;AACxC,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAC;AASnC;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACvB,OAAoB,EACpB,GAAW,EACX,KAAK,GAAG,KAAK;IAEb,MAAM,MAAM,GAAmB,EAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAC,CAAC;IAE1D,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,SAAS;QACV,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,YAAY;QAC7D,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;QACnD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}