@erode-app/core 0.6.0-beta.0 → 0.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.
- package/dist/adapters/architecture-adapter.d.ts +2 -6
- package/dist/adapters/architecture-adapter.d.ts.map +1 -1
- package/dist/adapters/architecture-types.d.ts +12 -0
- package/dist/adapters/architecture-types.d.ts.map +1 -1
- package/dist/adapters/base-patcher.d.ts +2 -9
- package/dist/adapters/base-patcher.d.ts.map +1 -1
- package/dist/adapters/base-patcher.js.map +1 -1
- package/dist/adapters/likec4/adapter.d.ts +2 -6
- package/dist/adapters/likec4/adapter.d.ts.map +1 -1
- package/dist/adapters/likec4/adapter.js.map +1 -1
- package/dist/adapters/model-patcher.d.ts +22 -19
- package/dist/adapters/model-patcher.d.ts.map +1 -1
- package/dist/adapters/model-patcher.js.map +1 -1
- package/dist/adapters/structurizr/adapter.d.ts +2 -6
- package/dist/adapters/structurizr/adapter.d.ts.map +1 -1
- package/dist/adapters/structurizr/adapter.js.map +1 -1
- package/dist/analysis/analysis-types.d.ts +27 -37
- package/dist/analysis/analysis-types.d.ts.map +1 -1
- package/dist/analysis/prompt-builder.js +1 -1
- package/dist/analysis/prompt-builder.js.map +1 -1
- package/dist/analysis/prompt-variables.d.ts +4 -8
- package/dist/analysis/prompt-variables.d.ts.map +1 -1
- package/dist/analysis/section-formatters.d.ts +5 -17
- package/dist/analysis/section-formatters.d.ts.map +1 -1
- package/dist/analysis/section-formatters.js.map +1 -1
- package/dist/ci-entry.js +2 -2
- package/dist/ci-entry.js.map +1 -1
- package/dist/errors.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +1 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/output/structured-output.d.ts +4 -11
- package/dist/output/structured-output.d.ts.map +1 -1
- package/dist/output.d.ts +9 -33
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js.map +1 -1
- package/dist/pipelines/analyze.d.ts.map +1 -1
- package/dist/pipelines/analyze.js +29 -112
- package/dist/pipelines/analyze.js.map +1 -1
- package/dist/pipelines/check.d.ts +7 -9
- package/dist/pipelines/check.d.ts.map +1 -1
- package/dist/pipelines/check.js +122 -175
- package/dist/pipelines/check.js.map +1 -1
- package/dist/pipelines/connections.d.ts +6 -14
- package/dist/pipelines/connections.d.ts.map +1 -1
- package/dist/pipelines/connections.js.map +1 -1
- package/dist/pipelines/pipeline-shared.d.ts +57 -0
- package/dist/pipelines/pipeline-shared.d.ts.map +1 -0
- package/dist/pipelines/pipeline-shared.js +117 -0
- package/dist/pipelines/pipeline-shared.js.map +1 -0
- package/dist/pipelines/publish.d.ts +4 -12
- package/dist/pipelines/publish.d.ts.map +1 -1
- package/dist/pipelines/publish.js.map +1 -1
- package/dist/platforms/source-platform.d.ts +11 -12
- package/dist/platforms/source-platform.d.ts.map +1 -1
- package/dist/providers/anthropic/provider.d.ts +2 -6
- package/dist/providers/anthropic/provider.d.ts.map +1 -1
- package/dist/providers/anthropic/provider.js.map +1 -1
- package/dist/providers/base-provider.d.ts +5 -0
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/gemini/provider.d.ts +2 -6
- package/dist/providers/gemini/provider.d.ts.map +1 -1
- package/dist/providers/gemini/provider.js.map +1 -1
- package/dist/providers/openai/provider.d.ts +2 -6
- package/dist/providers/openai/provider.d.ts.map +1 -1
- package/dist/providers/openai/provider.js.map +1 -1
- package/dist/utils/config.d.ts +5 -2
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +12 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/git-diff.d.ts +28 -13
- package/dist/utils/git-diff.d.ts.map +1 -1
- package/dist/utils/git-diff.js +97 -13
- package/dist/utils/git-diff.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/git-diff.js
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { execFileSync } from 'child_process';
|
|
2
2
|
import { ErodeError, ErrorCode } from '../errors.js';
|
|
3
|
+
const STATUS_MAP = {
|
|
4
|
+
A: 'added',
|
|
5
|
+
M: 'modified',
|
|
6
|
+
D: 'removed',
|
|
7
|
+
R: 'renamed',
|
|
8
|
+
C: 'copied',
|
|
9
|
+
};
|
|
10
|
+
function classifyGitError(message) {
|
|
11
|
+
if (/not a git repository/i.test(message))
|
|
12
|
+
return ErrorCode.IO_DIR_NOT_FOUND;
|
|
13
|
+
if (/permission denied/i.test(message))
|
|
14
|
+
return ErrorCode.IO_PERMISSION_DENIED;
|
|
15
|
+
return ErrorCode.IO_EXEC_FAILED;
|
|
16
|
+
}
|
|
3
17
|
function run(args, cwd) {
|
|
4
18
|
try {
|
|
5
19
|
return execFileSync('git', args, {
|
|
@@ -10,7 +24,7 @@ function run(args, cwd) {
|
|
|
10
24
|
}
|
|
11
25
|
catch (error) {
|
|
12
26
|
const message = error instanceof Error ? error.message : String(error);
|
|
13
|
-
throw new ErodeError(`Git command failed: git ${args.join(' ')}`,
|
|
27
|
+
throw new ErodeError(`Git command failed: git ${args.join(' ')}`, classifyGitError(message), `Could not run git command. Make sure you are inside a git repository.\n${message}`);
|
|
14
28
|
}
|
|
15
29
|
}
|
|
16
30
|
/**
|
|
@@ -23,14 +37,7 @@ function parseNameStatus(output) {
|
|
|
23
37
|
return output.split('\n').reduce((acc, line) => {
|
|
24
38
|
const match = /^([AMDRC])\d*\t(?:.+\t)?(.+)$/.exec(line);
|
|
25
39
|
if (match?.[1] && match[2]) {
|
|
26
|
-
|
|
27
|
-
A: 'added',
|
|
28
|
-
M: 'modified',
|
|
29
|
-
D: 'removed',
|
|
30
|
-
R: 'renamed',
|
|
31
|
-
C: 'copied',
|
|
32
|
-
};
|
|
33
|
-
acc.push({ filename: match[2], status: statusMap[match[1]] ?? 'modified' });
|
|
40
|
+
acc.push({ filename: match[2], status: STATUS_MAP[match[1]] ?? 'modified' });
|
|
34
41
|
}
|
|
35
42
|
return acc;
|
|
36
43
|
}, []);
|
|
@@ -53,6 +60,9 @@ function buildDiffArgs(options) {
|
|
|
53
60
|
if (options.branch && options.staged) {
|
|
54
61
|
throw new ErodeError('Cannot use --branch and --staged together', ErrorCode.INPUT_INVALID, 'The --branch and --staged options are mutually exclusive. Use --branch to compare against a branch, or --staged to check only staged changes.');
|
|
55
62
|
}
|
|
63
|
+
if (options.branch?.startsWith('-')) {
|
|
64
|
+
throw new ErodeError('Branch name cannot start with a dash', ErrorCode.INPUT_INVALID, 'Branch names starting with a dash could be interpreted as git flags. Use a valid branch name.');
|
|
65
|
+
}
|
|
56
66
|
if (options.branch)
|
|
57
67
|
return [`${options.branch}...HEAD`];
|
|
58
68
|
if (options.staged)
|
|
@@ -72,15 +82,89 @@ export function generateGitDiff(options = {}) {
|
|
|
72
82
|
stats: parseShortstat(shortstat),
|
|
73
83
|
};
|
|
74
84
|
}
|
|
75
|
-
/**
|
|
76
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Filter a unified diff to include only segments for the given filenames.
|
|
87
|
+
* Splits on `diff --git` headers and reassembles matching segments.
|
|
88
|
+
*/
|
|
89
|
+
export function filterDiffByFiles(diff, files) {
|
|
90
|
+
if (!diff || files.length === 0)
|
|
91
|
+
return '';
|
|
92
|
+
const allowed = new Set(files.map((f) => f.filename));
|
|
93
|
+
const segments = [];
|
|
94
|
+
const marker = 'diff --git ';
|
|
95
|
+
let current = '';
|
|
96
|
+
for (const line of diff.split('\n')) {
|
|
97
|
+
if (line.startsWith(marker)) {
|
|
98
|
+
if (current)
|
|
99
|
+
segments.push(current);
|
|
100
|
+
current = line + '\n';
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
current += line + '\n';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (current)
|
|
107
|
+
segments.push(current);
|
|
108
|
+
return segments
|
|
109
|
+
.filter((seg) => {
|
|
110
|
+
const header = seg.split('\n')[0] ?? '';
|
|
111
|
+
const bIdx = header.lastIndexOf(' b/');
|
|
112
|
+
if (bIdx === -1)
|
|
113
|
+
return false;
|
|
114
|
+
const filename = header.slice(bIdx + 3);
|
|
115
|
+
return allowed.has(filename);
|
|
116
|
+
})
|
|
117
|
+
.join('')
|
|
118
|
+
.trimEnd();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Parse file paths from a unified diff.
|
|
122
|
+
* Looks for `diff --git a/<path> b/<path>` headers.
|
|
123
|
+
*/
|
|
124
|
+
export function parseFilesFromDiff(diff) {
|
|
125
|
+
const files = [];
|
|
126
|
+
const seen = new Set();
|
|
127
|
+
const prefix = 'diff --git a/';
|
|
128
|
+
for (const line of diff.split('\n')) {
|
|
129
|
+
if (!line.startsWith(prefix))
|
|
130
|
+
continue;
|
|
131
|
+
const rest = line.slice(prefix.length);
|
|
132
|
+
const bIdx = rest.lastIndexOf(' b/');
|
|
133
|
+
if (bIdx === -1)
|
|
134
|
+
continue;
|
|
135
|
+
const filename = rest.slice(bIdx + 3);
|
|
136
|
+
if (filename && !seen.has(filename)) {
|
|
137
|
+
seen.add(filename);
|
|
138
|
+
files.push({ filename, status: 'modified' });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return files;
|
|
142
|
+
}
|
|
143
|
+
/** Convert SSH-style git remote URLs to HTTPS, stripping any embedded credentials. */
|
|
144
|
+
export function normalizeToHttps(remote) {
|
|
77
145
|
// git@github.com:owner/repo.git → https://github.com/owner/repo
|
|
78
146
|
const sshMatch = /^git@([^:]+):(.+?)(?:\.git)?$/.exec(remote);
|
|
79
147
|
if (sshMatch?.[1] && sshMatch[2]) {
|
|
80
148
|
return `https://${sshMatch[1]}/${sshMatch[2]}`;
|
|
81
149
|
}
|
|
82
|
-
//
|
|
83
|
-
|
|
150
|
+
// HTTPS — strip credentials and trailing .git
|
|
151
|
+
try {
|
|
152
|
+
const url = new URL(remote);
|
|
153
|
+
url.username = '';
|
|
154
|
+
url.password = '';
|
|
155
|
+
url.pathname = url.pathname.replace(/\.git$/, '');
|
|
156
|
+
return url.toString().replace(/\/$/, '');
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return remote.replace(/\.git$/, '');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** Read the URL of a named git remote (defaults to `origin`). */
|
|
163
|
+
export function getRemoteUrl(remote = 'origin', cwd) {
|
|
164
|
+
if (remote.startsWith('-')) {
|
|
165
|
+
throw new ErodeError('Remote name cannot start with a dash', ErrorCode.INPUT_INVALID, 'Remote names starting with a dash could be interpreted as git flags. Use a valid remote name.');
|
|
166
|
+
}
|
|
167
|
+
return run(['remote', 'get-url', remote], cwd ?? process.cwd());
|
|
84
168
|
}
|
|
85
169
|
/**
|
|
86
170
|
* Parse the repository owner and name from a git remote URL.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../src/utils/git-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../src/utils/git-diff.ts"],"names":[],"mappings":"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"}
|