@wrongstack/plugins 0.293.0 → 0.295.1
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 +7 -71
- package/dist/accessibility-auditor/index.d.ts +1 -1
- package/dist/accessibility-auditor/index.d.ts.map +1 -1
- package/dist/accessibility-auditor.js +50 -33
- package/dist/agent-handoff/index.d.ts +1 -1
- package/dist/agent-handoff/index.d.ts.map +1 -1
- package/dist/agent-handoff.js +30 -1
- package/dist/api-compatibility-gate/index.d.ts +1 -1
- package/dist/api-compatibility-gate/index.d.ts.map +1 -1
- package/dist/api-compatibility-gate.js +21 -16
- package/dist/audit/index.d.ts +386 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit.d.ts +1 -0
- package/dist/audit.js +454 -0
- package/dist/auto-doc/index.d.ts +1 -1
- package/dist/auto-doc/index.d.ts.map +1 -1
- package/dist/auto-doc.js +3 -1
- package/dist/auto-escalate/index.d.ts +1 -1
- package/dist/auto-escalate/index.d.ts.map +1 -1
- package/dist/auto-i18n-extractor/index.d.ts +1 -1
- package/dist/auto-i18n-extractor/index.d.ts.map +1 -1
- package/dist/auto-i18n-extractor.js +7 -1
- package/dist/branch-guard/index.d.ts +1 -1
- package/dist/branch-guard/index.d.ts.map +1 -1
- package/dist/branch-guard.js +111 -1
- package/dist/catalog.d.ts +5 -30
- package/dist/catalog.d.ts.map +1 -1
- package/dist/changelog-writer/index.d.ts +1 -1
- package/dist/changelog-writer/index.d.ts.map +1 -1
- package/dist/changelog-writer.js +137 -3
- package/dist/checkpoint/index.d.ts +3 -1
- package/dist/checkpoint/index.d.ts.map +1 -1
- package/dist/checkpoint.js +41 -16
- package/dist/code-metrics/index.d.ts +1 -1
- package/dist/code-metrics/index.d.ts.map +1 -1
- package/dist/code-metrics.js +34 -29
- package/dist/commit-validator/index.d.ts +1 -1
- package/dist/commit-validator/index.d.ts.map +1 -1
- package/dist/commit-validator.js +17 -7
- package/dist/config-validator/index.d.ts +1 -1
- package/dist/config-validator/index.d.ts.map +1 -1
- package/dist/context-pins/index.d.ts +1 -1
- package/dist/context-pins/index.d.ts.map +1 -1
- package/dist/context-pins.js +6 -5
- package/dist/cost-tracker/index.d.ts +1 -1
- package/dist/cost-tracker/index.d.ts.map +1 -1
- package/dist/cost-tracker.js +109 -2
- package/dist/cron/index.d.ts +1 -1
- package/dist/cron/index.d.ts.map +1 -1
- package/dist/cron.js +1 -0
- package/dist/dead-code-detector/index.d.ts +1 -1
- package/dist/dead-code-detector/index.d.ts.map +1 -1
- package/dist/dead-code-detector.js +31 -18
- package/dist/dep-guard/index.d.ts +1 -1
- package/dist/dep-guard/index.d.ts.map +1 -1
- package/dist/dependency-vulnerability-gate/index.d.ts +1 -1
- package/dist/dependency-vulnerability-gate/index.d.ts.map +1 -1
- package/dist/dependency-vulnerability-gate.js +67 -20
- package/dist/diff-summary/index.d.ts +1 -1
- package/dist/diff-summary/index.d.ts.map +1 -1
- package/dist/diff-summary.js +128 -30
- package/dist/doc-sync-guard/index.d.ts +1 -1
- package/dist/doc-sync-guard/index.d.ts.map +1 -1
- package/dist/doc-sync-guard.js +7 -1
- package/dist/duplicate-code-detector/index.d.ts +26 -1
- package/dist/duplicate-code-detector/index.d.ts.map +1 -1
- package/dist/duplicate-code-detector.js +280 -69
- package/dist/error-lens/index.d.ts +1 -1
- package/dist/error-lens/index.d.ts.map +1 -1
- package/dist/factories/index.d.ts +4 -0
- package/dist/factories/index.d.ts.map +1 -0
- package/dist/factories.d.ts +1 -0
- package/dist/factories.js +74 -0
- package/dist/feature-flag-tracker/index.d.ts +1 -1
- package/dist/feature-flag-tracker/index.d.ts.map +1 -1
- package/dist/feature-flag-tracker.js +59 -33
- package/dist/file-watcher/index.d.ts +1 -1
- package/dist/file-watcher/index.d.ts.map +1 -1
- package/dist/file-watcher.js +6 -7
- package/dist/format-on-save/index.d.ts +3 -1
- package/dist/format-on-save/index.d.ts.map +1 -1
- package/dist/format-on-save.js +289 -59
- package/dist/generated-plugin-exports.d.ts +65 -0
- package/dist/generated-plugin-exports.d.ts.map +1 -0
- package/dist/git-autocommit/index.d.ts +1 -1
- package/dist/git-autocommit/index.d.ts.map +1 -1
- package/dist/import-organizer/index.d.ts +1 -1
- package/dist/import-organizer/index.d.ts.map +1 -1
- package/dist/import-organizer.js +141 -20
- package/dist/index.d.ts +4 -183
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18298 -17279
- package/dist/injection-shield/index.d.ts +1 -1
- package/dist/injection-shield/index.d.ts.map +1 -1
- package/dist/interface-contract-guard/index.d.ts +1 -1
- package/dist/interface-contract-guard/index.d.ts.map +1 -1
- package/dist/interface-contract-guard.js +87 -53
- package/dist/knowledge-graph/index.d.ts +1 -1
- package/dist/knowledge-graph/index.d.ts.map +1 -1
- package/dist/knowledge-graph.js +7 -6
- package/dist/license-audit-gate/index.d.ts +1 -1
- package/dist/license-audit-gate/index.d.ts.map +1 -1
- package/dist/lint-gate/index.d.ts +1 -1
- package/dist/lint-gate/index.d.ts.map +1 -1
- package/dist/lint-gate.js +112 -1
- package/dist/llm-cache/index.d.ts +5 -1
- package/dist/llm-cache/index.d.ts.map +1 -1
- package/dist/llm-cache.js +16 -8
- package/dist/loop-breaker/index.d.ts +1 -1
- package/dist/loop-breaker/index.d.ts.map +1 -1
- package/dist/loop-breaker.js +25 -9
- package/dist/manifest/index.d.ts +16 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest.d.ts +1 -0
- package/dist/manifest.js +152 -0
- package/dist/migration-planner/index.d.ts +1 -1
- package/dist/migration-planner/index.d.ts.map +1 -1
- package/dist/migration-planner.js +5 -1
- package/dist/model-router/index.d.ts +1 -1
- package/dist/model-router/index.d.ts.map +1 -1
- package/dist/notify-hub/index.d.ts +1 -1
- package/dist/notify-hub/index.d.ts.map +1 -1
- package/dist/notify-hub/webhook-channel.d.ts +1 -1
- package/dist/notify-hub/webhook-channel.d.ts.map +1 -1
- package/dist/notify-hub.js +41 -4
- package/dist/path-guard/index.d.ts +1 -1
- package/dist/path-guard/index.d.ts.map +1 -1
- package/dist/performance-regression-gate/index.d.ts +1 -1
- package/dist/performance-regression-gate/index.d.ts.map +1 -1
- package/dist/plugin-stack-observer/index.d.ts +1 -1
- package/dist/plugin-stack-observer/index.d.ts.map +1 -1
- package/dist/pr-drafter/index.d.ts +1 -1
- package/dist/pr-drafter/index.d.ts.map +1 -1
- package/dist/pr-drafter.js +28 -29
- package/dist/process-guard/index.d.ts +1 -1
- package/dist/process-guard/index.d.ts.map +1 -1
- package/dist/prompt-firewall/index.d.ts +1 -1
- package/dist/prompt-firewall/index.d.ts.map +1 -1
- package/dist/prompt-firewall.js +140 -11
- package/dist/refactor-suggester/index.d.ts +1 -1
- package/dist/refactor-suggester/index.d.ts.map +1 -1
- package/dist/refactor-suggester.js +148 -33
- package/dist/release-notes-generator/index.d.ts +1 -1
- package/dist/release-notes-generator/index.d.ts.map +1 -1
- package/dist/release-notes-generator.js +29 -22
- package/dist/runtime/bounded-map.d.ts +86 -0
- package/dist/runtime/bounded-map.d.ts.map +1 -0
- package/dist/runtime/credential-patterns.d.ts +42 -0
- package/dist/runtime/credential-patterns.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +18 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/llm.d.ts +1 -1
- package/dist/runtime/llm.d.ts.map +1 -1
- package/dist/runtime/local-bin.d.ts +120 -0
- package/dist/runtime/local-bin.d.ts.map +1 -0
- package/dist/runtime/safe-json.d.ts +25 -0
- package/dist/runtime/safe-json.d.ts.map +1 -0
- package/dist/runtime.js +332 -22
- package/dist/schema-evolution-guard/index.d.ts +1 -1
- package/dist/schema-evolution-guard/index.d.ts.map +1 -1
- package/dist/schema-evolution-guard.js +7 -1
- package/dist/secret-scanner/index.d.ts +1 -1
- package/dist/secret-scanner/index.d.ts.map +1 -1
- package/dist/secret-scanner.js +181 -48
- package/dist/security-hotspot-scanner/index.d.ts +1 -1
- package/dist/security-hotspot-scanner/index.d.ts.map +1 -1
- package/dist/security-hotspot-scanner.js +158 -20
- package/dist/semantic-search-indexer/index.d.ts +1 -1
- package/dist/semantic-search-indexer/index.d.ts.map +1 -1
- package/dist/semantic-search-indexer.js +7 -1
- package/dist/semver-bump/index.d.ts +1 -1
- package/dist/semver-bump/index.d.ts.map +1 -1
- package/dist/semver-bump.js +97 -43
- package/dist/session-recap/index.d.ts +1 -1
- package/dist/session-recap/index.d.ts.map +1 -1
- package/dist/shell-check/index.d.ts +1 -1
- package/dist/shell-check/index.d.ts.map +1 -1
- package/dist/smart-rename/index.d.ts +1 -1
- package/dist/smart-rename/index.d.ts.map +1 -1
- package/dist/spec-linker/index.d.ts +1 -1
- package/dist/spec-linker/index.d.ts.map +1 -1
- package/dist/spec-linker.js +222 -20772
- package/dist/template-engine/index.d.ts +1 -1
- package/dist/template-engine/index.d.ts.map +1 -1
- package/dist/template-engine.js +34 -8
- package/dist/test-coverage-gate/index.d.ts +1 -1
- package/dist/test-coverage-gate/index.d.ts.map +1 -1
- package/dist/test-coverage-gate.js +34 -14
- package/dist/test-flake-detector/index.d.ts +1 -1
- package/dist/test-flake-detector/index.d.ts.map +1 -1
- package/dist/test-flake-detector.js +31 -20
- package/dist/test-generator/index.d.ts +1 -1
- package/dist/test-generator/index.d.ts.map +1 -1
- package/dist/test-runner-gate/index.d.ts +1 -1
- package/dist/test-runner-gate/index.d.ts.map +1 -1
- package/dist/test-runner-gate.js +132 -9
- package/dist/todo-listener/index.d.ts +1 -32
- package/dist/todo-listener/index.d.ts.map +1 -1
- package/dist/todo-listener.js +30 -1
- package/dist/todo-tracker/index.d.ts +1 -1
- package/dist/todo-tracker/index.d.ts.map +1 -1
- package/dist/todo-tracker.js +3 -4
- package/dist/token-budget/index.d.ts +1 -1
- package/dist/token-budget/index.d.ts.map +1 -1
- package/dist/token-throttle/index.d.ts +1 -1
- package/dist/token-throttle/index.d.ts.map +1 -1
- package/dist/token-throttle.js +17 -2
- package/dist/type-gate/index.d.ts +1 -1
- package/dist/type-gate/index.d.ts.map +1 -1
- package/dist/type-gate.js +106 -19
- package/package.json +80 -68
package/dist/loop-breaker.js
CHANGED
|
@@ -34,11 +34,17 @@ var DEFAULTS = {
|
|
|
34
34
|
repeatedErrorBlockAfter: 3,
|
|
35
35
|
ignoreTools: []
|
|
36
36
|
};
|
|
37
|
+
var ignoreToolsSet = new Set(DEFAULTS.ignoreTools);
|
|
37
38
|
function readConfig(raw) {
|
|
38
|
-
if (!raw || typeof raw !== "object")
|
|
39
|
+
if (!raw || typeof raw !== "object") {
|
|
40
|
+
ignoreToolsSet = new Set(DEFAULTS.ignoreTools);
|
|
41
|
+
return { ...DEFAULTS };
|
|
42
|
+
}
|
|
39
43
|
const r = raw;
|
|
40
44
|
const warnAfter = typeof r["warnAfter"] === "number" && r["warnAfter"] >= 2 ? r["warnAfter"] : DEFAULTS.warnAfter;
|
|
41
45
|
const blockAfter = typeof r["blockAfter"] === "number" && r["blockAfter"] > warnAfter ? r["blockAfter"] : Math.max(DEFAULTS.blockAfter, warnAfter + 1);
|
|
46
|
+
const ignoreTools = Array.isArray(r["ignoreTools"]) ? r["ignoreTools"].filter((t) => typeof t === "string") : [];
|
|
47
|
+
ignoreToolsSet = new Set(ignoreTools);
|
|
42
48
|
return {
|
|
43
49
|
enabled: r["enabled"] !== false,
|
|
44
50
|
mode: r["mode"] === "warn" ? "warn" : "block",
|
|
@@ -50,7 +56,7 @@ function readConfig(raw) {
|
|
|
50
56
|
noDiffBlockAfter: typeof r["noDiffBlockAfter"] === "number" && r["noDiffBlockAfter"] >= 0 ? Math.floor(r["noDiffBlockAfter"]) : DEFAULTS.noDiffBlockAfter,
|
|
51
57
|
repeatedErrorWarnAfter: typeof r["repeatedErrorWarnAfter"] === "number" && r["repeatedErrorWarnAfter"] >= 1 ? Math.floor(r["repeatedErrorWarnAfter"]) : DEFAULTS.repeatedErrorWarnAfter,
|
|
52
58
|
repeatedErrorBlockAfter: typeof r["repeatedErrorBlockAfter"] === "number" && r["repeatedErrorBlockAfter"] >= 0 ? Math.floor(r["repeatedErrorBlockAfter"]) : DEFAULTS.repeatedErrorBlockAfter,
|
|
53
|
-
ignoreTools
|
|
59
|
+
ignoreTools
|
|
54
60
|
};
|
|
55
61
|
}
|
|
56
62
|
function canonicalize(value) {
|
|
@@ -60,16 +66,26 @@ function canonicalize(value) {
|
|
|
60
66
|
return String(value);
|
|
61
67
|
}
|
|
62
68
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (value
|
|
69
|
+
var CANONICALIZE_MAX_DEPTH = 12;
|
|
70
|
+
function sortKeys(value, depth = 0, seen = /* @__PURE__ */ new Set()) {
|
|
71
|
+
if (value === null || typeof value !== "object") return value;
|
|
72
|
+
if (seen.has(value)) return "[circular]";
|
|
73
|
+
if (depth >= CANONICALIZE_MAX_DEPTH) {
|
|
74
|
+
return Array.isArray(value) ? `[array:${value.length}]` : "[deep-object]";
|
|
75
|
+
}
|
|
76
|
+
seen.add(value);
|
|
77
|
+
try {
|
|
78
|
+
if (Array.isArray(value)) {
|
|
79
|
+
return value.map((v) => sortKeys(v, depth + 1, seen));
|
|
80
|
+
}
|
|
66
81
|
const out = {};
|
|
67
82
|
for (const key of Object.keys(value).sort()) {
|
|
68
|
-
out[key] = sortKeys(value[key]);
|
|
83
|
+
out[key] = sortKeys(value[key], depth + 1, seen);
|
|
69
84
|
}
|
|
70
85
|
return out;
|
|
86
|
+
} finally {
|
|
87
|
+
seen.delete(value);
|
|
71
88
|
}
|
|
72
|
-
return value;
|
|
73
89
|
}
|
|
74
90
|
function fingerprint(toolName, toolInput) {
|
|
75
91
|
return `${toolName}\0${canonicalize(toolInput)}`;
|
|
@@ -228,7 +244,7 @@ var plugin = {
|
|
|
228
244
|
const hook = (input) => {
|
|
229
245
|
if (!cfg.enabled) return;
|
|
230
246
|
const toolName = input.toolName ?? "unknown";
|
|
231
|
-
if (
|
|
247
|
+
if (ignoreToolsSet.has(toolName)) return;
|
|
232
248
|
state.invocations += 1;
|
|
233
249
|
if (state.pendingBlockReason && cfg.mode === "block") {
|
|
234
250
|
const reason = state.pendingBlockReason;
|
|
@@ -289,7 +305,7 @@ var plugin = {
|
|
|
289
305
|
const postHook = async (input, runtime = { signal: new AbortController().signal }) => {
|
|
290
306
|
if (!cfg.enabled) return;
|
|
291
307
|
const toolName = input.toolName ?? "unknown";
|
|
292
|
-
if (
|
|
308
|
+
if (ignoreToolsSet.has(toolName)) return;
|
|
293
309
|
state.postInvocations += 1;
|
|
294
310
|
if (input.toolResult?.isError) {
|
|
295
311
|
const errorFingerprint = normalizeError(input.toolResult.content);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Metadata that can be consumed without importing plugin implementations. */
|
|
2
|
+
export interface OfficialPluginManifestEntry {
|
|
3
|
+
name: string;
|
|
4
|
+
exportName: string;
|
|
5
|
+
packageSubpath: string;
|
|
6
|
+
sourcePath: string;
|
|
7
|
+
importSpecifier: string;
|
|
8
|
+
audit: {
|
|
9
|
+
risk: 'low' | 'medium' | 'high';
|
|
10
|
+
defaultState: 'active' | 'inactive';
|
|
11
|
+
canDisable: true;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare const OFFICIAL_PLUGIN_MANIFEST: readonly OfficialPluginManifestEntry[];
|
|
15
|
+
export declare const OFFICIAL_PLUGIN_NAME_SET: ReadonlySet<string>;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE;QACL,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QAChC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC;QACpC,UAAU,EAAE,IAAI,CAAC;KAClB,CAAC;CACH;AA0ID,eAAO,MAAM,wBAAwB,EAAE,SAAS,2BAA2B,EAe1E,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './manifest/index.js';
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// src/manifest/index.ts
|
|
2
|
+
var OFFICIAL_PLUGIN_NAMES = [
|
|
3
|
+
"agent-handoff",
|
|
4
|
+
"cost-tracker",
|
|
5
|
+
"file-watcher",
|
|
6
|
+
"git-autocommit",
|
|
7
|
+
"auto-doc",
|
|
8
|
+
"shell-check",
|
|
9
|
+
"cron",
|
|
10
|
+
"template-engine",
|
|
11
|
+
"semver-bump",
|
|
12
|
+
"secret-scanner",
|
|
13
|
+
"todo-tracker",
|
|
14
|
+
"token-budget",
|
|
15
|
+
"lint-gate",
|
|
16
|
+
"branch-guard",
|
|
17
|
+
"diff-summary",
|
|
18
|
+
"commit-validator",
|
|
19
|
+
"format-on-save",
|
|
20
|
+
"test-runner-gate",
|
|
21
|
+
"import-organizer",
|
|
22
|
+
"knowledge-graph",
|
|
23
|
+
"todo-listener",
|
|
24
|
+
"session-recap",
|
|
25
|
+
"spec-linker",
|
|
26
|
+
"loop-breaker",
|
|
27
|
+
"path-guard",
|
|
28
|
+
"process-guard",
|
|
29
|
+
"context-pins",
|
|
30
|
+
"checkpoint",
|
|
31
|
+
"error-lens",
|
|
32
|
+
"dep-guard",
|
|
33
|
+
"config-validator",
|
|
34
|
+
"notify-hub",
|
|
35
|
+
"changelog-writer",
|
|
36
|
+
"injection-shield",
|
|
37
|
+
"llm-cache",
|
|
38
|
+
"model-router",
|
|
39
|
+
"pr-drafter",
|
|
40
|
+
"prompt-firewall",
|
|
41
|
+
"auto-escalate",
|
|
42
|
+
"test-coverage-gate",
|
|
43
|
+
"type-gate",
|
|
44
|
+
"token-throttle",
|
|
45
|
+
"plugin-stack-observer",
|
|
46
|
+
"dead-code-detector",
|
|
47
|
+
"dependency-vulnerability-gate",
|
|
48
|
+
"migration-planner",
|
|
49
|
+
"semantic-search-indexer",
|
|
50
|
+
"auto-i18n-extractor",
|
|
51
|
+
"doc-sync-guard",
|
|
52
|
+
"api-compatibility-gate",
|
|
53
|
+
"performance-regression-gate",
|
|
54
|
+
"test-flake-detector",
|
|
55
|
+
"schema-evolution-guard",
|
|
56
|
+
"license-audit-gate",
|
|
57
|
+
"accessibility-auditor",
|
|
58
|
+
"security-hotspot-scanner",
|
|
59
|
+
"duplicate-code-detector",
|
|
60
|
+
"code-metrics",
|
|
61
|
+
"refactor-suggester",
|
|
62
|
+
"test-generator",
|
|
63
|
+
"release-notes-generator",
|
|
64
|
+
"smart-rename",
|
|
65
|
+
"feature-flag-tracker",
|
|
66
|
+
"interface-contract-guard"
|
|
67
|
+
];
|
|
68
|
+
var MEDIUM_RISK_PLUGINS = /* @__PURE__ */ new Set([
|
|
69
|
+
"agent-handoff",
|
|
70
|
+
"auto-doc",
|
|
71
|
+
"accessibility-auditor",
|
|
72
|
+
"file-watcher",
|
|
73
|
+
"cron",
|
|
74
|
+
"template-engine",
|
|
75
|
+
"token-budget",
|
|
76
|
+
"lint-gate",
|
|
77
|
+
"commit-validator",
|
|
78
|
+
"format-on-save",
|
|
79
|
+
"test-runner-gate",
|
|
80
|
+
"import-organizer",
|
|
81
|
+
"path-guard",
|
|
82
|
+
"checkpoint",
|
|
83
|
+
"dep-guard",
|
|
84
|
+
"api-compatibility-gate",
|
|
85
|
+
"notify-hub",
|
|
86
|
+
"llm-cache",
|
|
87
|
+
"model-router",
|
|
88
|
+
"auto-escalate",
|
|
89
|
+
"token-throttle",
|
|
90
|
+
"test-coverage-gate",
|
|
91
|
+
"test-flake-detector",
|
|
92
|
+
"performance-regression-gate",
|
|
93
|
+
"type-gate",
|
|
94
|
+
"interface-contract-guard",
|
|
95
|
+
"smart-rename"
|
|
96
|
+
]);
|
|
97
|
+
var HIGH_RISK_PLUGINS = /* @__PURE__ */ new Set([
|
|
98
|
+
"git-autocommit",
|
|
99
|
+
"semver-bump",
|
|
100
|
+
"secret-scanner",
|
|
101
|
+
"branch-guard",
|
|
102
|
+
"process-guard",
|
|
103
|
+
"dependency-vulnerability-gate",
|
|
104
|
+
"license-audit-gate",
|
|
105
|
+
"security-hotspot-scanner",
|
|
106
|
+
"schema-evolution-guard",
|
|
107
|
+
"prompt-firewall"
|
|
108
|
+
]);
|
|
109
|
+
var DEFAULT_ACTIVE_PLUGINS = /* @__PURE__ */ new Set([
|
|
110
|
+
"cost-tracker",
|
|
111
|
+
"secret-scanner",
|
|
112
|
+
"todo-tracker",
|
|
113
|
+
"token-budget",
|
|
114
|
+
"diff-summary",
|
|
115
|
+
"knowledge-graph",
|
|
116
|
+
"loop-breaker",
|
|
117
|
+
"process-guard",
|
|
118
|
+
"context-pins",
|
|
119
|
+
"error-lens",
|
|
120
|
+
"dep-guard",
|
|
121
|
+
"config-validator",
|
|
122
|
+
"injection-shield"
|
|
123
|
+
]);
|
|
124
|
+
function auditRisk(name) {
|
|
125
|
+
if (HIGH_RISK_PLUGINS.has(name)) return "high";
|
|
126
|
+
if (MEDIUM_RISK_PLUGINS.has(name)) return "medium";
|
|
127
|
+
return "low";
|
|
128
|
+
}
|
|
129
|
+
function exportName(name) {
|
|
130
|
+
return `${name.replace(/-([a-z0-9])/g, (_, char) => char.toUpperCase())}Plugin`;
|
|
131
|
+
}
|
|
132
|
+
var OFFICIAL_PLUGIN_MANIFEST = Object.freeze(
|
|
133
|
+
OFFICIAL_PLUGIN_NAMES.map(
|
|
134
|
+
(name) => Object.freeze({
|
|
135
|
+
name,
|
|
136
|
+
exportName: exportName(name),
|
|
137
|
+
packageSubpath: `./${name}`,
|
|
138
|
+
sourcePath: `./src/${name}`,
|
|
139
|
+
importSpecifier: `@wrongstack/plugins/${name}`,
|
|
140
|
+
audit: Object.freeze({
|
|
141
|
+
risk: auditRisk(name),
|
|
142
|
+
defaultState: DEFAULT_ACTIVE_PLUGINS.has(name) ? "active" : "inactive",
|
|
143
|
+
canDisable: true
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
)
|
|
147
|
+
);
|
|
148
|
+
var OFFICIAL_PLUGIN_NAME_SET = new Set(OFFICIAL_PLUGIN_NAMES);
|
|
149
|
+
export {
|
|
150
|
+
OFFICIAL_PLUGIN_MANIFEST,
|
|
151
|
+
OFFICIAL_PLUGIN_NAME_SET
|
|
152
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migration-planner/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migration-planner/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAwPrD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACjD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAwED,QAAA,MAAM,MAAM,EAAE,MA+Sb,CAAC;eAEa,MAAM"}
|
|
@@ -50,6 +50,9 @@ async function runOptionalPluginLlm(request) {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
// src/runtime/local-bin.ts
|
|
54
|
+
import { buildWin32CmdShimInvocation, resolveWin32Command } from "@wrongstack/tools/win32";
|
|
55
|
+
|
|
53
56
|
// src/runtime/index.ts
|
|
54
57
|
var MAX_BUFFER_BYTES = 16 * 1024 * 1024;
|
|
55
58
|
function hasLeadingDash(arg) {
|
|
@@ -63,7 +66,8 @@ function withinProjectPath(projectRoot, candidate) {
|
|
|
63
66
|
return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
|
|
64
67
|
}
|
|
65
68
|
function withinProject(p) {
|
|
66
|
-
|
|
69
|
+
const cwd = process.cwd();
|
|
70
|
+
return withinProjectPath(cwd, p) || relative(cwd, p) === ".";
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
// src/migration-planner/index.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model-router/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model-router/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,wBAAwB,CAAC;AAMhE,UAAU,SAAS;IACjB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACf;AA8DD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAgBxE;AAED,6DAA6D;AAC7D,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAQ9F;AAMD,QAAA,MAAM,MAAM,EAAE,MAyKb,CAAC;eAEa,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notify-hub/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notify-hub/index.ts"],"names":[],"mappings":"AAyDA,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAiP7D,QAAA,MAAM,MAAM,EAAE,MAwRb,CAAC;eAEa,MAAM"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @module notify-hub
|
|
15
15
|
* @public
|
|
16
16
|
*/
|
|
17
|
-
import type { NotificationChannel, NotificationMessage, NotificationResult } from '@wrongstack/core';
|
|
17
|
+
import type { NotificationChannel, NotificationMessage, NotificationResult } from '@wrongstack/core/notifications';
|
|
18
18
|
export interface WebhookChannelOptions {
|
|
19
19
|
/** HTTP(S) endpoint that receives JSON POSTs. */
|
|
20
20
|
readonly webhookUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-channel.d.ts","sourceRoot":"","sources":["../../src/notify-hub/webhook-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"webhook-channel.d.ts","sourceRoot":"","sources":["../../src/notify-hub/webhook-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAmBnH,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAChE,iDAAiD;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtD;AAED,qBAAa,0BAA2B,YAAW,mBAAmB;;IACpE,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAiBnC,YAAY,IAAI,EAAE,qBAAqB,EAMtC;IAMK,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6DnE;IAEK,IAAI,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAYjE;IAMD,4DAA4D;IAC5D,YAAY,IAAI,IAAI,CAGnB;IAED,qCAAqC;IACrC,aAAa,IAAI;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAE9D;IAED,gDAAgD;IAChD,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAOA;CACF"}
|
package/dist/notify-hub.js
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
// src/notify-hub/index.ts
|
|
2
2
|
import { lookup } from "node:dns/promises";
|
|
3
3
|
|
|
4
|
+
// src/runtime/local-bin.ts
|
|
5
|
+
import { buildWin32CmdShimInvocation, resolveWin32Command } from "@wrongstack/tools/win32";
|
|
6
|
+
|
|
7
|
+
// src/runtime/safe-json.ts
|
|
8
|
+
var UNSERIALIZABLE = "[unserializable]";
|
|
9
|
+
function safeJsonStringify(value, indent) {
|
|
10
|
+
try {
|
|
11
|
+
const stack = [];
|
|
12
|
+
const out = JSON.stringify(
|
|
13
|
+
value,
|
|
14
|
+
function replacer(_key, val) {
|
|
15
|
+
if (typeof val === "bigint") return `${val.toString()}n`;
|
|
16
|
+
if (val === null || typeof val !== "object") return val;
|
|
17
|
+
while (stack.length > 0 && stack[stack.length - 1] !== this) stack.pop();
|
|
18
|
+
if (stack.includes(val)) return "[circular]";
|
|
19
|
+
stack.push(val);
|
|
20
|
+
return val;
|
|
21
|
+
},
|
|
22
|
+
indent
|
|
23
|
+
);
|
|
24
|
+
return out ?? String(value);
|
|
25
|
+
} catch {
|
|
26
|
+
return UNSERIALIZABLE;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// src/runtime/index.ts
|
|
31
|
+
var MAX_BUFFER_BYTES = 16 * 1024 * 1024;
|
|
32
|
+
|
|
4
33
|
// src/notify-hub/webhook-channel.ts
|
|
5
34
|
function freshCircuit() {
|
|
6
35
|
return { open: false, consecutiveFailures: 0 };
|
|
@@ -202,13 +231,21 @@ async function deliver(event, payload) {
|
|
|
202
231
|
}
|
|
203
232
|
const result = await deliverViaChannel(ch, event, {
|
|
204
233
|
title: typeof payload.title === "string" ? payload.title : event,
|
|
205
|
-
body: typeof payload.message === "string" ? payload.message : typeof payload.error === "string" ? payload.error :
|
|
234
|
+
body: typeof payload.message === "string" ? payload.message : typeof payload.error === "string" ? payload.error : safeJsonStringify(payload),
|
|
206
235
|
level: event === "tool.error" || event === "budget.threshold" ? "warning" : "info",
|
|
207
236
|
source: event,
|
|
208
237
|
metadata: payload
|
|
209
238
|
});
|
|
210
239
|
return result.ok;
|
|
211
240
|
}
|
|
241
|
+
function deliverDetached(event, payload) {
|
|
242
|
+
deliver(event, payload).catch((err) => {
|
|
243
|
+
_pluginLog?.warn("notify-hub: notification delivery failed", {
|
|
244
|
+
event,
|
|
245
|
+
error: err instanceof Error ? err.message : String(err)
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
}
|
|
212
249
|
async function deliverViaChannel(ch, event, msg) {
|
|
213
250
|
const result = await ch.deliver(msg);
|
|
214
251
|
if (result.ok) {
|
|
@@ -317,7 +354,7 @@ var plugin = {
|
|
|
317
354
|
}
|
|
318
355
|
if (active && cfg.events.includes("session.stop")) {
|
|
319
356
|
const stopHook = (input) => {
|
|
320
|
-
|
|
357
|
+
deliverDetached("session.stop", {
|
|
321
358
|
sessionId: input.sessionId ?? null,
|
|
322
359
|
cwd: input.cwd ?? null
|
|
323
360
|
});
|
|
@@ -328,7 +365,7 @@ var plugin = {
|
|
|
328
365
|
const off = api.onPattern("tool.*", (eventName, payload) => {
|
|
329
366
|
if (!/error|failed/.test(eventName)) return;
|
|
330
367
|
const p = payload;
|
|
331
|
-
|
|
368
|
+
deliverDetached("tool.error", {
|
|
332
369
|
tool: p?.tool ?? p?.name ?? "unknown",
|
|
333
370
|
busEvent: eventName,
|
|
334
371
|
error: truncateText(
|
|
@@ -342,7 +379,7 @@ var plugin = {
|
|
|
342
379
|
if (active && cfg.events.includes("budget.threshold")) {
|
|
343
380
|
const off = api.onPattern("budget.*", (eventName, payload) => {
|
|
344
381
|
if (!eventName.includes("threshold")) return;
|
|
345
|
-
|
|
382
|
+
deliverDetached("budget.threshold", { busEvent: eventName, detail: payload });
|
|
346
383
|
});
|
|
347
384
|
state.eventUnsubscribers.push(off);
|
|
348
385
|
}
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
*
|
|
32
32
|
* @public
|
|
33
33
|
*/
|
|
34
|
-
import type { Plugin } from '@wrongstack/core';
|
|
34
|
+
import type { Plugin } from '@wrongstack/core/types';
|
|
35
35
|
/**
|
|
36
36
|
* Compile a glob pattern to a RegExp. Supports `**` (any depth),
|
|
37
37
|
* `*` (within one segment), and `?` (single char). Matching is done
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/path-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/path-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAwErD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAyBvD;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAuB5D;AAMD,QAAA,MAAM,MAAM,EAAE,MA8Kb,CAAC;eAEa,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance-regression-gate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance-regression-gate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAwOrD,QAAA,MAAM,MAAM,EAAE,MA8Mb,CAAC;eAEa,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin-stack-observer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin-stack-observer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAqCrD,QAAA,MAAM,MAAM,EAAE,MAyIb,CAAC;eAoBa,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pr-drafter/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pr-drafter/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,wBAAwB,CAAC;AA4MhE,QAAA,MAAM,MAAM,EAAE,MAyNb,CAAC;eAEa,MAAM"}
|
package/dist/pr-drafter.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/pr-drafter/index.ts
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
4
|
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
5
5
|
var API_VERSION = "^0.1.10";
|
|
6
6
|
var state = {
|
|
@@ -46,34 +46,33 @@ function resolveProjectPath(rawPath, cwd = process.cwd()) {
|
|
|
46
46
|
if (rel === "" || !rel.startsWith("..") && !isAbsolute(rel)) return resolved;
|
|
47
47
|
return null;
|
|
48
48
|
}
|
|
49
|
+
function runGit(args, timeout) {
|
|
50
|
+
return new Promise((resolveOutput) => {
|
|
51
|
+
execFile(
|
|
52
|
+
"git",
|
|
53
|
+
args,
|
|
54
|
+
{
|
|
55
|
+
encoding: "utf8",
|
|
56
|
+
cwd: process.cwd(),
|
|
57
|
+
windowsHide: true,
|
|
58
|
+
timeout,
|
|
59
|
+
maxBuffer: 5 * 1024 * 1024
|
|
60
|
+
},
|
|
61
|
+
(error, stdout) => resolveOutput(error ? null : stdout.trim())
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
49
65
|
function gitBranch() {
|
|
50
|
-
|
|
51
|
-
const out = execFileSync("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
|
|
52
|
-
encoding: "utf-8",
|
|
53
|
-
cwd: process.cwd(),
|
|
54
|
-
stdio: ["pipe", "pipe", "ignore"],
|
|
55
|
-
timeout: 5e3
|
|
56
|
-
});
|
|
57
|
-
return out.trim();
|
|
58
|
-
} catch {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
66
|
+
return runGit(["rev-parse", "--abbrev-ref", "HEAD"], 5e3);
|
|
61
67
|
}
|
|
62
68
|
function gitDiff() {
|
|
63
|
-
|
|
64
|
-
return execFileSync("git", ["diff", "--stat"], {
|
|
65
|
-
encoding: "utf-8",
|
|
66
|
-
cwd: process.cwd(),
|
|
67
|
-
stdio: ["pipe", "pipe", "ignore"],
|
|
68
|
-
timeout: 1e4
|
|
69
|
-
}).trim();
|
|
70
|
-
} catch {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
69
|
+
return runGit(["diff", "--stat"], 1e4);
|
|
73
70
|
}
|
|
74
71
|
async function buildDraft(cfg, llm) {
|
|
75
|
-
const branch =
|
|
76
|
-
|
|
72
|
+
const [branch, diffStat] = await Promise.all([
|
|
73
|
+
gitBranch(),
|
|
74
|
+
cfg.includeDiff ? gitDiff() : Promise.resolve(null)
|
|
75
|
+
]);
|
|
77
76
|
const lines = [];
|
|
78
77
|
lines.push("# PR Draft");
|
|
79
78
|
if (branch) lines.push(`**Branch:** \`${branch}\``);
|
|
@@ -130,8 +129,8 @@ async function writeDraft(cfg, llm) {
|
|
|
130
129
|
}
|
|
131
130
|
const draft = await buildDraft(cfg, llm);
|
|
132
131
|
try {
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
await mkdir(dirname(resolved), { recursive: true });
|
|
133
|
+
await writeFile(resolved, draft.body);
|
|
135
134
|
state.draftsWritten += 1;
|
|
136
135
|
} catch {
|
|
137
136
|
state.draftErrors += 1;
|
|
@@ -257,8 +256,8 @@ var plugin = {
|
|
|
257
256
|
const resolved = resolveProjectPath(cfg.outputPath);
|
|
258
257
|
if (!resolved) return { ok: false, error: "outputPath resolves outside project" };
|
|
259
258
|
try {
|
|
260
|
-
|
|
261
|
-
|
|
259
|
+
await mkdir(dirname(resolved), { recursive: true });
|
|
260
|
+
await writeFile(resolved, draft.body);
|
|
262
261
|
state.draftsWritten += 1;
|
|
263
262
|
return {
|
|
264
263
|
ok: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/process-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/process-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAiDrD,QAAA,MAAM,MAAM,EAAE,MAoKb,CAAC;eAEa,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompt-firewall/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompt-firewall/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,wBAAwB,CAAC;AA2EhE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAcxE;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAWjG;AA0CD,KAAK,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB,CA0B7D;AAgCD,QAAA,MAAM,MAAM,EAAE,MAkNb,CAAC;eAEa,MAAM"}
|