@c-d-cc/reap 0.15.6 → 0.15.8
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/RELEASE_NOTICE.md +39 -0
- package/dist/cli.js +46 -106
- package/package.json +2 -2
- package/UPDATE_NOTICE.md +0 -7
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Release Notices
|
|
2
|
+
|
|
3
|
+
## v0.15.8
|
|
4
|
+
### en
|
|
5
|
+
Removed `version` field from config.yml. No more uncommitted changes after `reap update`.
|
|
6
|
+
### ko
|
|
7
|
+
config.yml에서 `version` 필드 제거. `reap update` 후 uncommitted changes 발생 문제 해소.
|
|
8
|
+
|
|
9
|
+
## v0.15.7
|
|
10
|
+
### en
|
|
11
|
+
Renamed UPDATE_NOTICE.md to RELEASE_NOTICE.md. Notice content now inline (no GitHub Discussions dependency).
|
|
12
|
+
### ko
|
|
13
|
+
UPDATE_NOTICE.md를 RELEASE_NOTICE.md로 변경. notice 내용을 파일에 직접 포함 (GitHub Discussions 의존성 제거).
|
|
14
|
+
|
|
15
|
+
## v0.15.6
|
|
16
|
+
### en
|
|
17
|
+
Fixed UPDATE_NOTICE.md missing from npm package.
|
|
18
|
+
### ko
|
|
19
|
+
UPDATE_NOTICE.md가 npm 패키지에 누락된 문제 수정.
|
|
20
|
+
|
|
21
|
+
## v0.15.5
|
|
22
|
+
### en
|
|
23
|
+
Integrity check no longer warns about source-map.md line count.
|
|
24
|
+
### ko
|
|
25
|
+
integrity check에서 source-map.md 줄수 경고 제외.
|
|
26
|
+
|
|
27
|
+
## v0.15.4
|
|
28
|
+
### en
|
|
29
|
+
v0.15.4 — Bug fixes and new `reap make backlog` command.
|
|
30
|
+
- Fixed lineage archiving copying all backlog items instead of consumed only
|
|
31
|
+
- Fixed `reap back` nonce chain breakage
|
|
32
|
+
- Added `reap make backlog` for safe backlog file creation
|
|
33
|
+
- Compression now preserves 20 recent generations (was 3)
|
|
34
|
+
### ko
|
|
35
|
+
v0.15.4 — 버그 수정 및 `reap make backlog` 커맨드 추가.
|
|
36
|
+
- lineage archiving 시 consumed backlog만 복사하도록 수정
|
|
37
|
+
- `reap back` 후 nonce chain 유지되도록 수정
|
|
38
|
+
- `reap make backlog` 커맨드 추가 (안전한 backlog 파일 생성)
|
|
39
|
+
- 압축 보호 개수 3→20으로 확대 (최근 20세대 원본 유지)
|
package/dist/cli.js
CHANGED
|
@@ -9033,6 +9033,10 @@ class ConfigManager {
|
|
|
9033
9033
|
added.push(key);
|
|
9034
9034
|
}
|
|
9035
9035
|
}
|
|
9036
|
+
if (config.version !== undefined) {
|
|
9037
|
+
delete config.version;
|
|
9038
|
+
added.push("version(removed)");
|
|
9039
|
+
}
|
|
9036
9040
|
if (config.lastSyncedCommit !== undefined) {
|
|
9037
9041
|
if (!config.lastSyncedGeneration && config.lastSyncedCommit) {
|
|
9038
9042
|
config.lastSyncedGeneration = "legacy";
|
|
@@ -10226,7 +10230,7 @@ function checkLatestVersion() {
|
|
|
10226
10230
|
}
|
|
10227
10231
|
}
|
|
10228
10232
|
function getCurrentVersion() {
|
|
10229
|
-
return "0.15.
|
|
10233
|
+
return "0.15.8";
|
|
10230
10234
|
}
|
|
10231
10235
|
function formatVersionLine(current, skipCheck) {
|
|
10232
10236
|
if (skipCheck) {
|
|
@@ -12425,7 +12429,7 @@ async function execute17(paths) {
|
|
|
12425
12429
|
const gm = new GenerationManager(paths);
|
|
12426
12430
|
const state = await gm.current();
|
|
12427
12431
|
const configContent = await readTextFile(paths.config);
|
|
12428
|
-
const installedVersion = "0.15.
|
|
12432
|
+
const installedVersion = "0.15.8";
|
|
12429
12433
|
const autoUpdate = configContent?.match(/autoUpdate:\s*(true|false)/)?.[1] === "true";
|
|
12430
12434
|
const versionDisplay = formatVersionLine(installedVersion, !autoUpdate);
|
|
12431
12435
|
const rawLang = detectLanguage(configContent);
|
|
@@ -14174,7 +14178,7 @@ async function execute30(paths) {
|
|
|
14174
14178
|
const lines = [
|
|
14175
14179
|
`REAP Configuration (${paths.config})`,
|
|
14176
14180
|
"",
|
|
14177
|
-
` version: ${
|
|
14181
|
+
` version: ${"0.15.8"} (package)`,
|
|
14178
14182
|
` project: ${config.project}`,
|
|
14179
14183
|
` entryMode: ${config.entryMode}`,
|
|
14180
14184
|
` strict: ${config.strict ?? false}`,
|
|
@@ -14480,7 +14484,7 @@ async function runCommand(command, phase, argv = []) {
|
|
|
14480
14484
|
try {
|
|
14481
14485
|
const config = await ConfigManager.read(paths);
|
|
14482
14486
|
if (config.autoIssueReport) {
|
|
14483
|
-
const version = "0.15.
|
|
14487
|
+
const version = "0.15.8";
|
|
14484
14488
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
14485
14489
|
const title = `[auto] reap run ${command}: ${errMsg.slice(0, 80)}`;
|
|
14486
14490
|
const body = [
|
|
@@ -15362,7 +15366,6 @@ async function initProject(projectRoot, projectName, entryMode, preset, onProgre
|
|
|
15362
15366
|
}
|
|
15363
15367
|
const detectedLanguage = await AgentRegistry.readLanguage();
|
|
15364
15368
|
const config = {
|
|
15365
|
-
version: "0.15.6",
|
|
15366
15369
|
project: projectName,
|
|
15367
15370
|
entryMode,
|
|
15368
15371
|
strict: false,
|
|
@@ -15483,9 +15486,6 @@ async function migrateHooks(dryRun = false) {
|
|
|
15483
15486
|
init_fs();
|
|
15484
15487
|
init_config();
|
|
15485
15488
|
|
|
15486
|
-
// src/core/migrations/index.ts
|
|
15487
|
-
init_config();
|
|
15488
|
-
|
|
15489
15489
|
// src/core/migration.ts
|
|
15490
15490
|
init_fs();
|
|
15491
15491
|
init_generation();
|
|
@@ -15609,8 +15609,6 @@ async function migrateLineage(paths) {
|
|
|
15609
15609
|
|
|
15610
15610
|
// src/core/migrations/0.0.0-to-0.10.0.ts
|
|
15611
15611
|
var migration_0_0_0_to_0_10_0 = {
|
|
15612
|
-
fromVersion: "0.0.0",
|
|
15613
|
-
toVersion: "0.10.0",
|
|
15614
15612
|
description: "Lineage DAG migration — legacy gen-NNN directories to gen-NNN-HASH format",
|
|
15615
15613
|
async check(paths) {
|
|
15616
15614
|
return needsMigration(paths);
|
|
@@ -15632,44 +15630,15 @@ var migration_0_0_0_to_0_10_0 = {
|
|
|
15632
15630
|
var MIGRATIONS = [
|
|
15633
15631
|
migration_0_0_0_to_0_10_0
|
|
15634
15632
|
];
|
|
15635
|
-
function compareSemver(a, b) {
|
|
15636
|
-
const pa = a.split(".").map(Number);
|
|
15637
|
-
const pb = b.split(".").map(Number);
|
|
15638
|
-
for (let i = 0;i < 3; i++) {
|
|
15639
|
-
const na = pa[i] ?? 0;
|
|
15640
|
-
const nb = pb[i] ?? 0;
|
|
15641
|
-
if (na < nb)
|
|
15642
|
-
return -1;
|
|
15643
|
-
if (na > nb)
|
|
15644
|
-
return 1;
|
|
15645
|
-
}
|
|
15646
|
-
return 0;
|
|
15647
|
-
}
|
|
15648
|
-
function normalizeVersion(version) {
|
|
15649
|
-
if (!version)
|
|
15650
|
-
return "0.0.0";
|
|
15651
|
-
if (version === "0.1.0")
|
|
15652
|
-
return "0.0.0";
|
|
15653
|
-
return version.replace(/\+.*$/, "");
|
|
15654
|
-
}
|
|
15655
15633
|
|
|
15656
15634
|
class MigrationRunner {
|
|
15657
|
-
static async run(paths,
|
|
15658
|
-
const config = await ConfigManager.read(paths);
|
|
15659
|
-
const configVersion = normalizeVersion(config.version);
|
|
15660
|
-
const targetVersion = normalizeVersion(currentPackageVersion);
|
|
15635
|
+
static async run(paths, dryRun = false) {
|
|
15661
15636
|
const result = {
|
|
15662
15637
|
migrated: [],
|
|
15663
15638
|
skipped: [],
|
|
15664
|
-
errors: []
|
|
15665
|
-
fromVersion: configVersion,
|
|
15666
|
-
toVersion: targetVersion
|
|
15639
|
+
errors: []
|
|
15667
15640
|
};
|
|
15668
|
-
|
|
15669
|
-
return result;
|
|
15670
|
-
}
|
|
15671
|
-
const applicable = MIGRATIONS.filter((m) => compareSemver(configVersion, m.toVersion) < 0).filter((m) => compareSemver(m.toVersion, targetVersion) <= 0).sort((a, b) => compareSemver(a.toVersion, b.toVersion));
|
|
15672
|
-
for (const migration of applicable) {
|
|
15641
|
+
for (const migration of MIGRATIONS) {
|
|
15673
15642
|
const needs = await migration.check(paths);
|
|
15674
15643
|
if (!needs) {
|
|
15675
15644
|
result.skipped.push(migration.description);
|
|
@@ -15688,10 +15657,6 @@ class MigrationRunner {
|
|
|
15688
15657
|
break;
|
|
15689
15658
|
}
|
|
15690
15659
|
}
|
|
15691
|
-
if (result.errors.length === 0 && !dryRun) {
|
|
15692
|
-
config.version = currentPackageVersion;
|
|
15693
|
-
await ConfigManager.write(paths, config);
|
|
15694
|
-
}
|
|
15695
15660
|
return result;
|
|
15696
15661
|
}
|
|
15697
15662
|
static getMigrations() {
|
|
@@ -15778,9 +15743,6 @@ async function checkConfig(paths, errors, warnings) {
|
|
|
15778
15743
|
errors.push(`config.yml: invalid entryMode "${config.entryMode}" (valid: ${validModes.join(", ")})`);
|
|
15779
15744
|
}
|
|
15780
15745
|
}
|
|
15781
|
-
if (config.version !== undefined && typeof config.version !== "string") {
|
|
15782
|
-
warnings.push("config.yml: 'version' should be a string");
|
|
15783
|
-
}
|
|
15784
15746
|
if (config.strict !== undefined && typeof config.strict !== "boolean" && typeof config.strict !== "object") {
|
|
15785
15747
|
warnings.push("config.yml: 'strict' should be boolean or object");
|
|
15786
15748
|
}
|
|
@@ -16313,8 +16275,7 @@ async function updateProject(projectRoot, dryRun = false) {
|
|
|
16313
16275
|
}
|
|
16314
16276
|
} catch {}
|
|
16315
16277
|
await migrateLegacyFiles(paths, dryRun, result);
|
|
16316
|
-
const
|
|
16317
|
-
const migrationResult = await MigrationRunner.run(paths, currentVersion, dryRun);
|
|
16278
|
+
const migrationResult = await MigrationRunner.run(paths, dryRun);
|
|
16318
16279
|
for (const m of migrationResult.migrated) {
|
|
16319
16280
|
result.updated.push(`[migration] ${m}`);
|
|
16320
16281
|
}
|
|
@@ -16339,8 +16300,8 @@ async function updateProject(projectRoot, dryRun = false) {
|
|
|
16339
16300
|
try {
|
|
16340
16301
|
const { execSync: execSync4 } = await import("child_process");
|
|
16341
16302
|
const errorSummary = migrationResult.errors.join("\\n");
|
|
16342
|
-
const title = `Migration failure
|
|
16343
|
-
const body = `## Migration Error\\n\\
|
|
16303
|
+
const title = `Migration failure during update`;
|
|
16304
|
+
const body = `## Migration Error\\n\\n### Errors\\n\\n${errorSummary}`;
|
|
16344
16305
|
execSync4(`gh issue create --repo c-d-cc/reap --title "${title}" --label "auto-reported,migration" --body "${body}"`, { encoding: "utf-8", timeout: 15000, stdio: "pipe" });
|
|
16345
16306
|
} catch {}
|
|
16346
16307
|
}
|
|
@@ -16402,64 +16363,43 @@ async function removeDirIfExists(dirPath, label, dryRun, result) {
|
|
|
16402
16363
|
import { readFileSync } from "fs";
|
|
16403
16364
|
import { join as join14 } from "path";
|
|
16404
16365
|
var __dirname = "/home/runner/work/reap/reap/src/core";
|
|
16405
|
-
function
|
|
16406
|
-
const lang = language.toLowerCase();
|
|
16407
|
-
const pattern = new RegExp(`^## ${lang}\\s*$`, "im");
|
|
16408
|
-
const match = pattern.exec(body);
|
|
16409
|
-
if (!match)
|
|
16410
|
-
return null;
|
|
16411
|
-
const start = match.index + match[0].length;
|
|
16412
|
-
const rest = body.slice(start);
|
|
16413
|
-
const nextHeader = rest.search(/^## /m);
|
|
16414
|
-
const section = nextHeader === -1 ? rest : rest.slice(0, nextHeader);
|
|
16415
|
-
return section.trim() || null;
|
|
16416
|
-
}
|
|
16417
|
-
function findNoticeUrl(version) {
|
|
16366
|
+
function fetchReleaseNotice(version, language) {
|
|
16418
16367
|
try {
|
|
16419
|
-
const noticePath = join14(__dirname, "../../
|
|
16368
|
+
const noticePath = join14(__dirname, "../../RELEASE_NOTICE.md");
|
|
16420
16369
|
const content = readFileSync(noticePath, "utf-8");
|
|
16421
16370
|
const versionTag = version.startsWith("v") ? version : `v${version}`;
|
|
16422
|
-
const
|
|
16423
|
-
const
|
|
16424
|
-
|
|
16425
|
-
} catch {
|
|
16426
|
-
return null;
|
|
16427
|
-
}
|
|
16428
|
-
}
|
|
16429
|
-
async function fetchDiscussionBody(url) {
|
|
16430
|
-
try {
|
|
16431
|
-
const match = url.match(/discussions\/(\d+)/);
|
|
16432
|
-
if (!match)
|
|
16371
|
+
const versionPattern = new RegExp(`^## ${versionTag.replace(/\./g, "\\.")}\\s*$`, "m");
|
|
16372
|
+
const versionMatch = versionPattern.exec(content);
|
|
16373
|
+
if (!versionMatch)
|
|
16433
16374
|
return null;
|
|
16434
|
-
const
|
|
16435
|
-
|
|
16436
|
-
|
|
16437
|
-
|
|
16438
|
-
|
|
16375
|
+
const start = versionMatch.index + versionMatch[0].length;
|
|
16376
|
+
const rest = content.slice(start);
|
|
16377
|
+
const nextVersion = rest.search(/^## v/m);
|
|
16378
|
+
const section = nextVersion === -1 ? rest : rest.slice(0, nextVersion);
|
|
16379
|
+
const lang = language.toLowerCase();
|
|
16380
|
+
const langPattern = new RegExp(`^### ${lang}\\s*$`, "im");
|
|
16381
|
+
const langMatch = langPattern.exec(section);
|
|
16382
|
+
if (!langMatch) {
|
|
16383
|
+
const trimmed = section.trim();
|
|
16384
|
+
return trimmed ? `
|
|
16385
|
+
--- Release Notes (${versionTag}) ---
|
|
16386
|
+
${trimmed}
|
|
16387
|
+
` : null;
|
|
16388
|
+
}
|
|
16389
|
+
const langStart = langMatch.index + langMatch[0].length;
|
|
16390
|
+
const langRest = section.slice(langStart);
|
|
16391
|
+
const nextLang = langRest.search(/^### /m);
|
|
16392
|
+
const langSection = (nextLang === -1 ? langRest : langRest.slice(0, nextLang)).trim();
|
|
16393
|
+
if (!langSection)
|
|
16439
16394
|
return null;
|
|
16440
|
-
|
|
16441
|
-
|
|
16395
|
+
return `
|
|
16396
|
+
--- Release Notes (${versionTag}) ---
|
|
16397
|
+
${langSection}
|
|
16398
|
+
`;
|
|
16442
16399
|
} catch {
|
|
16443
16400
|
return null;
|
|
16444
16401
|
}
|
|
16445
16402
|
}
|
|
16446
|
-
async function fetchReleaseNotice(version, language) {
|
|
16447
|
-
const url = findNoticeUrl(version);
|
|
16448
|
-
if (!url)
|
|
16449
|
-
return null;
|
|
16450
|
-
const body = await fetchDiscussionBody(url);
|
|
16451
|
-
if (!body)
|
|
16452
|
-
return null;
|
|
16453
|
-
const versionTag = version.startsWith("v") ? version : `v${version}`;
|
|
16454
|
-
const section = extractLanguageSection(body, language);
|
|
16455
|
-
const content = section ?? body;
|
|
16456
|
-
if (!content)
|
|
16457
|
-
return null;
|
|
16458
|
-
return `
|
|
16459
|
-
--- Release Notes (${versionTag}) ---
|
|
16460
|
-
${content}
|
|
16461
|
-
`;
|
|
16462
|
-
}
|
|
16463
16403
|
|
|
16464
16404
|
// src/cli/index.ts
|
|
16465
16405
|
init_version();
|
|
@@ -16476,7 +16416,7 @@ async function getStatus(projectRoot) {
|
|
|
16476
16416
|
const totalCompleted = await mgr.countAllCompleted();
|
|
16477
16417
|
const integrityResult = await checkIntegrity(paths);
|
|
16478
16418
|
return {
|
|
16479
|
-
version:
|
|
16419
|
+
version: "0.15.8",
|
|
16480
16420
|
project: config.project,
|
|
16481
16421
|
entryMode: config.entryMode,
|
|
16482
16422
|
lastSyncedGeneration: config.lastSyncedGeneration,
|
|
@@ -16799,7 +16739,7 @@ init_fs();
|
|
|
16799
16739
|
init_version();
|
|
16800
16740
|
init_config();
|
|
16801
16741
|
import { join as join34 } from "path";
|
|
16802
|
-
program.name("reap").description("REAP — Recursive Evolutionary Autonomous Pipeline").version("0.15.
|
|
16742
|
+
program.name("reap").description("REAP — Recursive Evolutionary Autonomous Pipeline").version("0.15.8");
|
|
16803
16743
|
program.command("init").description("Initialize a new REAP project (Genesis)").argument("[project-name]", "Project name (defaults to current directory name)").option("-m, --mode <mode>", "Entry mode: greenfield, migration, adoption", "greenfield").option("-p, --preset <preset>", "Bootstrap with a genome preset (e.g., bun-hono-react)").action(async (projectName, options) => {
|
|
16804
16744
|
try {
|
|
16805
16745
|
const cwd = process.cwd();
|
|
@@ -16856,7 +16796,7 @@ program.command("status").description("Show current project and Generation statu
|
|
|
16856
16796
|
const paths = new ReapPaths(cwd);
|
|
16857
16797
|
const config = await ConfigManager.read(paths);
|
|
16858
16798
|
const skipCheck = config.autoUpdate === false;
|
|
16859
|
-
const installedVersion = "0.15.
|
|
16799
|
+
const installedVersion = "0.15.8";
|
|
16860
16800
|
const versionLine = formatVersionLine(installedVersion, skipCheck);
|
|
16861
16801
|
console.log(`${versionLine} | Project: ${status.project} (${status.entryMode})`);
|
|
16862
16802
|
console.log(`Completed Generations: ${status.totalGenerations}`);
|
|
@@ -16971,7 +16911,7 @@ Integrity: ✓ OK`);
|
|
|
16971
16911
|
try {
|
|
16972
16912
|
const version = getCurrentVersion();
|
|
16973
16913
|
const lang = await AgentRegistry.readLanguage() ?? "en";
|
|
16974
|
-
const notice =
|
|
16914
|
+
const notice = fetchReleaseNotice(version, lang);
|
|
16975
16915
|
if (notice)
|
|
16976
16916
|
console.log(notice);
|
|
16977
16917
|
} catch {}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@c-d-cc/reap",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.8",
|
|
4
4
|
"description": "Recursive Evolutionary Autonomous Pipeline — AI and humans evolve software across generations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"dist/",
|
|
27
27
|
"scripts/postinstall.cjs",
|
|
28
28
|
"scripts/preinstall.cjs",
|
|
29
|
-
"
|
|
29
|
+
"RELEASE_NOTICE.md"
|
|
30
30
|
],
|
|
31
31
|
"preferGlobal": true,
|
|
32
32
|
"engines": {
|