@evo-dev/evodev 0.0.1-alpha.14 → 0.0.1-alpha.15
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.
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"name": "EvoDev"
|
|
5
5
|
},
|
|
6
6
|
"description": "EvoDev Claude Code hook plugins for AI-assisted R&D workflows.",
|
|
7
|
-
"version": "0.0.1-alpha.
|
|
7
|
+
"version": "0.0.1-alpha.15",
|
|
8
8
|
"plugins": [
|
|
9
9
|
{
|
|
10
10
|
"name": "evodev",
|
|
11
11
|
"source": "./packages/plugin",
|
|
12
12
|
"description": "EvoDev hook integration for disciplined AI coding workflows.",
|
|
13
|
-
"version": "0.0.1-alpha.
|
|
13
|
+
"version": "0.0.1-alpha.15",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "EvoDev"
|
|
16
16
|
},
|
package/dist/index.js
CHANGED
|
@@ -25675,6 +25675,7 @@ async function runInit(options = {}) {
|
|
|
25675
25675
|
prompter: options.prompter,
|
|
25676
25676
|
progress: options.progress
|
|
25677
25677
|
});
|
|
25678
|
+
const includedProjects = await resolveInitIncludedProjects(homeDir);
|
|
25678
25679
|
const doctorRan = doctorResult !== null;
|
|
25679
25680
|
const warnings = collectWarnings(syncResult, hookInstallResults, projectRegistrationResults, answers.runDoctor, doctorRan);
|
|
25680
25681
|
emitInitProgress(options.progress, {
|
|
@@ -25697,6 +25698,7 @@ async function runInit(options = {}) {
|
|
|
25697
25698
|
pluginInstallResults,
|
|
25698
25699
|
hookInstallResults,
|
|
25699
25700
|
syncResult,
|
|
25701
|
+
includedProjects,
|
|
25700
25702
|
projectRegistrationResults,
|
|
25701
25703
|
warnings
|
|
25702
25704
|
}));
|
|
@@ -25758,7 +25760,7 @@ function formatInitSummary(input) {
|
|
|
25758
25760
|
...result.warnings.map((warning) => ` ⚠️ ${warning}`),
|
|
25759
25761
|
...result.errors.map((error) => ` ❌ ${error}`)
|
|
25760
25762
|
]) ?? [" - skipped"];
|
|
25761
|
-
const projectLines = formatProjectRegistrationLines(input.projectRegistrationResults);
|
|
25763
|
+
const projectLines = formatProjectRegistrationLines(input.projectRegistrationResults, input.includedProjects ?? []);
|
|
25762
25764
|
const warningLines = formatSummaryWarningLines(input.warnings, input.syncResult);
|
|
25763
25765
|
return [
|
|
25764
25766
|
"EvoDev init result",
|
|
@@ -25843,13 +25845,25 @@ function formatHookInstallLines(results) {
|
|
|
25843
25845
|
...result.warnings.map((warning) => ` ⚠️ ${warning}`)
|
|
25844
25846
|
]);
|
|
25845
25847
|
}
|
|
25846
|
-
function formatProjectRegistrationLines(results) {
|
|
25847
|
-
if (results.length === 0)
|
|
25848
|
-
return [" - no
|
|
25849
|
-
|
|
25850
|
-
|
|
25851
|
-
|
|
25852
|
-
});
|
|
25848
|
+
function formatProjectRegistrationLines(results, includedProjects) {
|
|
25849
|
+
if (includedProjects.length === 0 && results.length === 0) {
|
|
25850
|
+
return [" - no projects included"];
|
|
25851
|
+
}
|
|
25852
|
+
const lines = [];
|
|
25853
|
+
if (includedProjects.length > 0) {
|
|
25854
|
+
lines.push(` Included projects (${includedProjects.length}):`);
|
|
25855
|
+
lines.push(...includedProjects.map((project) => ` ✅ ${project.displayName} (${project.workspaceRoot})`));
|
|
25856
|
+
}
|
|
25857
|
+
if (results.length > 0) {
|
|
25858
|
+
lines.push(` Changes this run (${results.length}):`);
|
|
25859
|
+
lines.push(...results.map((result) => {
|
|
25860
|
+
const icon = result.status === "failed" ? "❌" : "✅";
|
|
25861
|
+
return ` ${icon} ${result.displayName} (${result.projectKey}): ${result.status}`;
|
|
25862
|
+
}));
|
|
25863
|
+
} else {
|
|
25864
|
+
lines.push(" Changes this run: none");
|
|
25865
|
+
}
|
|
25866
|
+
return lines;
|
|
25853
25867
|
}
|
|
25854
25868
|
function formatPluginInstallIcon(status) {
|
|
25855
25869
|
switch (status) {
|
|
@@ -25938,25 +25952,26 @@ function createInteractivePrompter(promptApi = defaultPromptApi) {
|
|
|
25938
25952
|
validate: (choices) => choices.length > 0 || "Select at least one Code Agent."
|
|
25939
25953
|
}));
|
|
25940
25954
|
},
|
|
25941
|
-
async selectProjects(candidates2) {
|
|
25955
|
+
async selectProjects(candidates2, includedProjects = []) {
|
|
25942
25956
|
const recommendedProjectKeys = candidates2.filter((candidate) => candidate.recommended).map((candidate) => candidate.projectKey);
|
|
25957
|
+
const includedCount = includedProjects.length;
|
|
25943
25958
|
const mode = await promptApi.select({
|
|
25944
|
-
message: "How should projects be
|
|
25959
|
+
message: includedCount === 0 ? "How should new Git projects be added to EvoDev progression?" : `${formatIncludedProjectPromptSummary(includedProjects)}. How should new Git projects be added?`,
|
|
25945
25960
|
choices: [
|
|
25946
25961
|
{
|
|
25947
25962
|
value: "recommended",
|
|
25948
|
-
name: `
|
|
25949
|
-
description: "
|
|
25963
|
+
name: `Add all recommended new projects (${recommendedProjectKeys.length})`,
|
|
25964
|
+
description: "Recently used Git projects discovered from Claude Code or Codex activity."
|
|
25950
25965
|
},
|
|
25951
25966
|
{
|
|
25952
25967
|
value: "manual",
|
|
25953
|
-
name: "Choose projects manually",
|
|
25954
|
-
description: "Review
|
|
25968
|
+
name: "Choose new Git projects manually",
|
|
25969
|
+
description: "Review unregistered Git projects and select only what you want to add."
|
|
25955
25970
|
},
|
|
25956
25971
|
{
|
|
25957
25972
|
value: "skip",
|
|
25958
|
-
name: "
|
|
25959
|
-
description: "Do not
|
|
25973
|
+
name: "Keep current projects",
|
|
25974
|
+
description: "Do not add any projects during this init."
|
|
25960
25975
|
}
|
|
25961
25976
|
],
|
|
25962
25977
|
default: "recommended"
|
|
@@ -25968,7 +25983,7 @@ function createInteractivePrompter(promptApi = defaultPromptApi) {
|
|
|
25968
25983
|
return [];
|
|
25969
25984
|
}
|
|
25970
25985
|
const selected = await promptApi.checkbox({
|
|
25971
|
-
message: "Select projects to
|
|
25986
|
+
message: "Select new Git projects to add to EvoDev progression",
|
|
25972
25987
|
choices: createInitProjectChoices(candidates2),
|
|
25973
25988
|
required: false,
|
|
25974
25989
|
pageSize: 15,
|
|
@@ -25979,6 +25994,12 @@ function createInteractivePrompter(promptApi = defaultPromptApi) {
|
|
|
25979
25994
|
}
|
|
25980
25995
|
};
|
|
25981
25996
|
}
|
|
25997
|
+
function formatIncludedProjectPromptSummary(projects2) {
|
|
25998
|
+
const visibleNames = projects2.slice(0, 3).map((project) => project.displayName);
|
|
25999
|
+
const remaining = projects2.length - visibleNames.length;
|
|
26000
|
+
const names = `${visibleNames.join(", ")}${remaining > 0 ? `, +${remaining} more` : ""}`;
|
|
26001
|
+
return `${projects2.length} project${projects2.length === 1 ? " is" : "s are"} already included (${names})`;
|
|
26002
|
+
}
|
|
25982
26003
|
var defaultPromptApi = {
|
|
25983
26004
|
checkbox: dist_default4,
|
|
25984
26005
|
select: dist_default5
|
|
@@ -26002,7 +26023,7 @@ function createCodeAgentChoices(defaultValue) {
|
|
|
26002
26023
|
function createInitProjectChoices(candidates2) {
|
|
26003
26024
|
return candidates2.map((candidate) => ({
|
|
26004
26025
|
value: candidate.projectKey,
|
|
26005
|
-
name: `${candidate.displayName} (
|
|
26026
|
+
name: `${candidate.displayName} (Git)`,
|
|
26006
26027
|
description: `${candidate.workspaceRoot} · ${candidate.recommendationReason}`,
|
|
26007
26028
|
checked: candidate.recommended
|
|
26008
26029
|
}));
|
|
@@ -26046,8 +26067,11 @@ async function resolveInitProjectCandidate(input) {
|
|
|
26046
26067
|
const recentlySeen = Number.isFinite(lastSeenAt) && lastSeenAt >= input.cutoff;
|
|
26047
26068
|
const insideHome = input.homeRoot !== null && isPathWithin(input.homeRoot, workspace.workspaceRoot);
|
|
26048
26069
|
const excludedLocation = workspace.workspaceRoot === parse2(workspace.workspaceRoot).root || workspace.workspaceRoot === input.homeRoot || !insideHome && input.temporaryRoots.some((root) => isPathWithin(root, workspace.workspaceRoot));
|
|
26049
|
-
|
|
26050
|
-
|
|
26070
|
+
if (workspace.workspaceKind !== "git" || excludedLocation) {
|
|
26071
|
+
return null;
|
|
26072
|
+
}
|
|
26073
|
+
const recommended = recentlySeen;
|
|
26074
|
+
const recommendationReason = recommended ? `recommended: Git workspace seen within ${INIT_RECOMMENDED_PROJECT_MAX_AGE_DAYS} days` : `not preselected: not seen within ${INIT_RECOMMENDED_PROJECT_MAX_AGE_DAYS} days`;
|
|
26051
26075
|
return {
|
|
26052
26076
|
projectKey: input.discovered.projectKey,
|
|
26053
26077
|
displayName: input.discovered.displayName,
|
|
@@ -26073,12 +26097,13 @@ async function registerInitProjects(input) {
|
|
|
26073
26097
|
homeDir: input.homeDir,
|
|
26074
26098
|
now: input.now
|
|
26075
26099
|
});
|
|
26100
|
+
const includedProjects = await resolveInitIncludedProjects(input.homeDir);
|
|
26076
26101
|
if (candidates2.length === 0) {
|
|
26077
26102
|
emitInitProgress(input.progress, {
|
|
26078
26103
|
status: "skipped",
|
|
26079
26104
|
current: 6,
|
|
26080
26105
|
label: "Register projects",
|
|
26081
|
-
detail: "no
|
|
26106
|
+
detail: includedProjects.length === 0 ? "no new Git projects discovered" : `${includedProjects.length} already included; no new Git projects`
|
|
26082
26107
|
});
|
|
26083
26108
|
return [];
|
|
26084
26109
|
}
|
|
@@ -26087,7 +26112,7 @@ async function registerInitProjects(input) {
|
|
|
26087
26112
|
selectedProjectKeys = candidates2.filter((candidate) => candidate.recommended).map((candidate) => candidate.projectKey);
|
|
26088
26113
|
} else if (input.prompter?.selectProjects !== undefined) {
|
|
26089
26114
|
await input.progress?.clear?.();
|
|
26090
|
-
selectedProjectKeys = await input.prompter.selectProjects(candidates2);
|
|
26115
|
+
selectedProjectKeys = await input.prompter.selectProjects(candidates2, includedProjects);
|
|
26091
26116
|
}
|
|
26092
26117
|
const candidatesByKey = new Map(candidates2.map((candidate) => [candidate.projectKey, candidate]));
|
|
26093
26118
|
const selectedCandidates = unique2(selectedProjectKeys).map((projectKey) => candidatesByKey.get(projectKey)).filter((candidate) => candidate !== undefined);
|
|
@@ -26138,6 +26163,18 @@ async function registerInitProjects(input) {
|
|
|
26138
26163
|
});
|
|
26139
26164
|
return results;
|
|
26140
26165
|
}
|
|
26166
|
+
async function resolveInitIncludedProjects(homeDir) {
|
|
26167
|
+
const projects2 = await listRegisteredProjects({ homeDir });
|
|
26168
|
+
return projects2.map(toInitIncludedProject);
|
|
26169
|
+
}
|
|
26170
|
+
function toInitIncludedProject(project) {
|
|
26171
|
+
return {
|
|
26172
|
+
projectKey: project.projectKey,
|
|
26173
|
+
displayName: project.displayName,
|
|
26174
|
+
workspaceRoot: project.workspaceRoot,
|
|
26175
|
+
workspaceKind: project.workspaceKind
|
|
26176
|
+
};
|
|
26177
|
+
}
|
|
26141
26178
|
async function resolveTemporaryRoots() {
|
|
26142
26179
|
const roots = await Promise.all([tmpdir(), "/tmp", "/private/tmp", "/var/tmp"].map(canonicalExistingPath));
|
|
26143
26180
|
return unique2(roots.filter((root) => root !== null));
|
|
@@ -39593,7 +39630,7 @@ function getHelpText() {
|
|
|
39593
39630
|
].join(`
|
|
39594
39631
|
`);
|
|
39595
39632
|
}
|
|
39596
|
-
var CLI_VERSION = "0.0.1-alpha.
|
|
39633
|
+
var CLI_VERSION = "0.0.1-alpha.15";
|
|
39597
39634
|
function getVersionText() {
|
|
39598
39635
|
return `evodev ${CLI_VERSION}`;
|
|
39599
39636
|
}
|