@c-d-cc/reap 0.15.13 → 0.15.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.
- package/README.ja.md +9 -0
- package/README.ko.md +9 -0
- package/README.md +9 -0
- package/README.zh-CN.md +9 -0
- package/RELEASE_NOTICE.md +12 -0
- package/dist/cli.js +72 -9
- package/dist/templates/hooks/opencode-session-start.js +25 -4
- package/dist/templates/hooks/session-start.cjs +27 -5
- package/package.json +4 -1
package/README.ja.md
CHANGED
|
@@ -23,6 +23,15 @@
|
|
|
23
23
|
|
|
24
24
|
REAPはアプリケーションの設計知識 — Genome(アーキテクチャ、コンベンション、制約)とEnvironment(外部API、インフラ) — を記録し、各世代で目標を設定して実装します。その過程で発見した欠陥はKnowledge Baseにフィードバックされます。世代を重ねるごとに知識が進化し、Source Code(Civilization)が成長します。
|
|
25
25
|
|
|
26
|
+
> **⚠️ v0.16 Breaking Changes予定**
|
|
27
|
+
>
|
|
28
|
+
> - REAPがSelf Evolving Pipelineへ移行
|
|
29
|
+
> - ライフサイクル変更: learning → planning → implementation → validation → completion(Learning stage新規追加、ObjectiveとPlanningをPlanningに統合)
|
|
30
|
+
> - スラッシュコマンド再編: skillマッチング最適化
|
|
31
|
+
> - CLIコマンドがユーザーインターフェースから削除(内部用途のみ)
|
|
32
|
+
>
|
|
33
|
+
> v0.15.xからv0.16.xへの自動アップデートはブロックされます。[リリースノート](https://reap.cc/docs/release-notes)参照。
|
|
34
|
+
|
|
26
35
|
## 目次
|
|
27
36
|
|
|
28
37
|
- [なぜREAPか?](#なぜreapか)
|
package/README.ko.md
CHANGED
|
@@ -23,6 +23,15 @@
|
|
|
23
23
|
|
|
24
24
|
REAP은 Application의 설계 지식 — Genome(아키텍처, 컨벤션, 제약사항)과 Environment(외부 API, 인프라) — 을 기록하고, 각 세대에서 목표를 설정하여 구현합니다. 그 과정에서 발견한 결함은 Knowledge Base에 반영됩니다. 세대를 거듭하며 지식이 진화하고, Source Code(Civilization)가 성장합니다.
|
|
25
25
|
|
|
26
|
+
> **⚠️ v0.16 Breaking Changes 예정**
|
|
27
|
+
>
|
|
28
|
+
> - REAP이 Self Evolving Pipeline으로 전환됩니다
|
|
29
|
+
> - Lifecycle 변경: learning → planning → implementation → validation → completion (Learning stage 신규 추가, Objective와 Planning을 Planning으로 병합)
|
|
30
|
+
> - Slash command 구조 변경: skill 매칭 최적화
|
|
31
|
+
> - CLI 커맨드가 사용자 인터페이스에서 제거 (내부 용도로만 사용)
|
|
32
|
+
>
|
|
33
|
+
> v0.15.x에서 v0.16.x로의 자동 업데이트가 차단됩니다. [릴리스 노트](https://reap.cc/docs/release-notes) 참조.
|
|
34
|
+
|
|
26
35
|
## 목차
|
|
27
36
|
|
|
28
37
|
- [Why REAP?](#why-reap)
|
package/README.md
CHANGED
|
@@ -23,6 +23,15 @@
|
|
|
23
23
|
|
|
24
24
|
REAP captures an application's design knowledge — the Genome (architecture, conventions, constraints) and Environment (external APIs, infrastructure) — then sets objectives for each generation to implement. Defects discovered along the way feed back into the Knowledge Base. As generations accumulate, knowledge evolves and the Source Code (Civilization) grows.
|
|
25
25
|
|
|
26
|
+
> **⚠️ Breaking Changes in v0.16**
|
|
27
|
+
>
|
|
28
|
+
> - REAP transitions to a Self Evolving Pipeline
|
|
29
|
+
> - Lifecycle changed: learning → planning → implementation → validation → completion (new Learning stage, Objective + Planning merged)
|
|
30
|
+
> - Slash commands restructured for optimal skill matching
|
|
31
|
+
> - CLI commands removed from user-facing interface (internal use only)
|
|
32
|
+
>
|
|
33
|
+
> Automatic updates from v0.15.x → v0.16.x are blocked. See [Release Notes](https://reap.cc/docs/release-notes).
|
|
34
|
+
|
|
26
35
|
## Table of Contents
|
|
27
36
|
|
|
28
37
|
- [Why REAP?](#why-reap)
|
package/README.zh-CN.md
CHANGED
|
@@ -23,6 +23,15 @@
|
|
|
23
23
|
|
|
24
24
|
REAP记录应用程序的设计知识 — Genome(架构、约定、约束)和Environment(外部API、基础设施) — 并在每个世代设定目标进行实现。过程中发现的缺陷反馈到Knowledge Base。随着世代的积累,知识不断进化,Source Code(Civilization)持续成长。
|
|
25
25
|
|
|
26
|
+
> **⚠️ v0.16 Breaking Changes 预告**
|
|
27
|
+
>
|
|
28
|
+
> - REAP转型为Self Evolving Pipeline
|
|
29
|
+
> - 生命周期变更: learning → planning → implementation → validation → completion(新增Learning阶段,Objective和Planning合并为Planning)
|
|
30
|
+
> - 斜杠命令重组: skill匹配优化
|
|
31
|
+
> - CLI命令从用户界面移除(仅供内部使用)
|
|
32
|
+
>
|
|
33
|
+
> v0.15.x到v0.16.x的自动更新将被阻止。参见[发布说明](https://reap.cc/docs/release-notes)。
|
|
34
|
+
|
|
26
35
|
## 目录
|
|
27
36
|
|
|
28
37
|
- [为什么选择REAP?](#为什么选择reap)
|
package/RELEASE_NOTICE.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Release Notices
|
|
2
2
|
|
|
3
|
+
## v0.15.15
|
|
4
|
+
### en
|
|
5
|
+
Added v0.16 breaking change pre-announcement to README.
|
|
6
|
+
### ko
|
|
7
|
+
README에 v0.16 breaking change 사전 고지 추가.
|
|
8
|
+
|
|
9
|
+
## v0.15.14
|
|
10
|
+
### en
|
|
11
|
+
Auto-update guard for breaking changes. New Release Notes docs page with v0.16 pre-announcement.
|
|
12
|
+
### ko
|
|
13
|
+
Breaking change 대비 자동 업데이트 차단 기능 추가. v0.16 사전 고지가 포함된 릴리스 노트 페이지 신규.
|
|
14
|
+
|
|
3
15
|
## v0.15.13
|
|
4
16
|
### en
|
|
5
17
|
Replaced `commander.js` with built-in CLI library. Runtime dependencies: 2 → 1.
|
package/dist/cli.js
CHANGED
|
@@ -8391,7 +8391,7 @@ function checkLatestVersion() {
|
|
|
8391
8391
|
}
|
|
8392
8392
|
}
|
|
8393
8393
|
function getCurrentVersion() {
|
|
8394
|
-
return "0.15.
|
|
8394
|
+
return "0.15.15";
|
|
8395
8395
|
}
|
|
8396
8396
|
function formatVersionLine(current, skipCheck) {
|
|
8397
8397
|
if (skipCheck) {
|
|
@@ -10604,7 +10604,7 @@ async function execute17(paths) {
|
|
|
10604
10604
|
const gm = new GenerationManager(paths);
|
|
10605
10605
|
const state = await gm.current();
|
|
10606
10606
|
const configContent = await readTextFile(paths.config);
|
|
10607
|
-
const installedVersion = "0.15.
|
|
10607
|
+
const installedVersion = "0.15.15";
|
|
10608
10608
|
const autoUpdate = configContent?.match(/autoUpdate:\s*(true|false)/)?.[1] === "true";
|
|
10609
10609
|
const versionDisplay = formatVersionLine(installedVersion, !autoUpdate);
|
|
10610
10610
|
const rawLang = detectLanguage(configContent);
|
|
@@ -12332,7 +12332,7 @@ async function execute30(paths) {
|
|
|
12332
12332
|
const lines = [
|
|
12333
12333
|
`REAP Configuration (${paths.config})`,
|
|
12334
12334
|
"",
|
|
12335
|
-
` version: ${"0.15.
|
|
12335
|
+
` version: ${"0.15.15"} (package)`,
|
|
12336
12336
|
` project: ${config.project}`,
|
|
12337
12337
|
` entryMode: ${config.entryMode}`,
|
|
12338
12338
|
` strict: ${config.strict ?? false}`,
|
|
@@ -12638,7 +12638,7 @@ async function runCommand(command, phase, argv = []) {
|
|
|
12638
12638
|
try {
|
|
12639
12639
|
const config = await ConfigManager.read(paths);
|
|
12640
12640
|
if (config.autoIssueReport) {
|
|
12641
|
-
const version = "0.15.
|
|
12641
|
+
const version = "0.15.15";
|
|
12642
12642
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
12643
12643
|
const title = `[auto] reap run ${command}: ${errMsg.slice(0, 80)}`;
|
|
12644
12644
|
const body = [
|
|
@@ -14959,12 +14959,54 @@ function selfUpgrade() {
|
|
|
14959
14959
|
if (installed === latest) {
|
|
14960
14960
|
return { upgraded: false };
|
|
14961
14961
|
}
|
|
14962
|
+
const minVersion = queryAutoUpdateMinVersion();
|
|
14963
|
+
if (minVersion && !semverGte(installed, minVersion)) {
|
|
14964
|
+
return {
|
|
14965
|
+
upgraded: false,
|
|
14966
|
+
blocked: true,
|
|
14967
|
+
from: installed,
|
|
14968
|
+
to: latest,
|
|
14969
|
+
reason: `Breaking change: v${installed} -> v${latest}. Run '/reap.update' to upgrade manually. See https://reap.cc/docs/release-notes`
|
|
14970
|
+
};
|
|
14971
|
+
}
|
|
14962
14972
|
execSync3("npm update -g @c-d-cc/reap", { encoding: "utf-8", timeout: 60000, stdio: "pipe" });
|
|
14963
14973
|
return { upgraded: true, from: installed, to: latest };
|
|
14964
14974
|
} catch {
|
|
14965
14975
|
return { upgraded: false };
|
|
14966
14976
|
}
|
|
14967
14977
|
}
|
|
14978
|
+
function semverGte(a, b) {
|
|
14979
|
+
const pa = a.split(".").map(Number);
|
|
14980
|
+
const pb = b.split(".").map(Number);
|
|
14981
|
+
for (let i = 0;i < 3; i++) {
|
|
14982
|
+
if ((pa[i] ?? 0) > (pb[i] ?? 0))
|
|
14983
|
+
return true;
|
|
14984
|
+
if ((pa[i] ?? 0) < (pb[i] ?? 0))
|
|
14985
|
+
return false;
|
|
14986
|
+
}
|
|
14987
|
+
return true;
|
|
14988
|
+
}
|
|
14989
|
+
function forceUpgrade(to) {
|
|
14990
|
+
try {
|
|
14991
|
+
const installed = execSync3("reap --version", { encoding: "utf-8", timeout: 5000 }).trim();
|
|
14992
|
+
execSync3(`npm install -g @c-d-cc/reap@${to}`, { encoding: "utf-8", timeout: 60000, stdio: "pipe" });
|
|
14993
|
+
return { upgraded: true, from: installed, to };
|
|
14994
|
+
} catch {
|
|
14995
|
+
return { upgraded: false };
|
|
14996
|
+
}
|
|
14997
|
+
}
|
|
14998
|
+
function queryAutoUpdateMinVersion() {
|
|
14999
|
+
try {
|
|
15000
|
+
const result = execSync3("npm view @c-d-cc/reap reap.autoUpdateMinVersion", {
|
|
15001
|
+
encoding: "utf-8",
|
|
15002
|
+
timeout: 1e4,
|
|
15003
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
15004
|
+
});
|
|
15005
|
+
return result.trim() || null;
|
|
15006
|
+
} catch {
|
|
15007
|
+
return null;
|
|
15008
|
+
}
|
|
15009
|
+
}
|
|
14968
15010
|
async function updateProject(projectRoot, dryRun = false) {
|
|
14969
15011
|
const paths = new ReapPaths(projectRoot);
|
|
14970
15012
|
const result = { updated: [], skipped: [], removed: [] };
|
|
@@ -15259,7 +15301,7 @@ async function getStatus(projectRoot) {
|
|
|
15259
15301
|
const totalCompleted = await mgr.countAllCompleted();
|
|
15260
15302
|
const integrityResult = await checkIntegrity(paths);
|
|
15261
15303
|
return {
|
|
15262
|
-
version: "0.15.
|
|
15304
|
+
version: "0.15.15",
|
|
15263
15305
|
project: config.project,
|
|
15264
15306
|
entryMode: config.entryMode,
|
|
15265
15307
|
lastSyncedGeneration: config.lastSyncedGeneration,
|
|
@@ -15582,7 +15624,7 @@ init_fs();
|
|
|
15582
15624
|
init_version();
|
|
15583
15625
|
init_config();
|
|
15584
15626
|
import { join as join34 } from "path";
|
|
15585
|
-
program.name("reap").description("REAP — Recursive Evolutionary Autonomous Pipeline").version("0.15.
|
|
15627
|
+
program.name("reap").description("REAP — Recursive Evolutionary Autonomous Pipeline").version("0.15.15");
|
|
15586
15628
|
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) => {
|
|
15587
15629
|
try {
|
|
15588
15630
|
const cwd = process.cwd();
|
|
@@ -15639,7 +15681,7 @@ program.command("status").description("Show current project and Generation statu
|
|
|
15639
15681
|
const paths = new ReapPaths(cwd);
|
|
15640
15682
|
const config = await ConfigManager.read(paths);
|
|
15641
15683
|
const skipCheck = config.autoUpdate === false;
|
|
15642
|
-
const installedVersion = "0.15.
|
|
15684
|
+
const installedVersion = "0.15.15";
|
|
15643
15685
|
const versionLine = formatVersionLine(installedVersion, skipCheck);
|
|
15644
15686
|
console.log(`${versionLine} | Project: ${status.project} (${status.entryMode})`);
|
|
15645
15687
|
console.log(`Completed Generations: ${status.totalGenerations}`);
|
|
@@ -15711,8 +15753,29 @@ program.command("fix").description("Diagnose and repair .reap/ directory structu
|
|
|
15711
15753
|
});
|
|
15712
15754
|
program.command("update").description("Upgrade REAP package and sync slash commands, templates, and hooks").option("--dry-run", "Show changes without applying them").action(async (options) => {
|
|
15713
15755
|
try {
|
|
15714
|
-
|
|
15715
|
-
if (upgrade.
|
|
15756
|
+
let upgrade = !options.dryRun ? selfUpgrade() : { upgraded: false };
|
|
15757
|
+
if (upgrade.blocked) {
|
|
15758
|
+
console.log(`
|
|
15759
|
+
⚠ Breaking change detected: v${upgrade.from} → v${upgrade.to}`);
|
|
15760
|
+
console.log(` This update contains breaking changes that may require manual migration.`);
|
|
15761
|
+
console.log(` See release notes: https://reap.cc/docs/release-notes
|
|
15762
|
+
`);
|
|
15763
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
15764
|
+
const answer = await new Promise((resolve) => {
|
|
15765
|
+
rl.question(" Proceed with update? (y/N) ", resolve);
|
|
15766
|
+
});
|
|
15767
|
+
rl.close();
|
|
15768
|
+
if (answer.toLowerCase() === "y" || answer.toLowerCase() === "yes") {
|
|
15769
|
+
upgrade = forceUpgrade(upgrade.to);
|
|
15770
|
+
if (upgrade.upgraded) {
|
|
15771
|
+
console.log(`Upgraded: v${upgrade.from} → v${upgrade.to}`);
|
|
15772
|
+
} else {
|
|
15773
|
+
console.log("Upgrade failed. Try manually: npm install -g @c-d-cc/reap@latest");
|
|
15774
|
+
}
|
|
15775
|
+
} else {
|
|
15776
|
+
console.log("Update skipped.");
|
|
15777
|
+
}
|
|
15778
|
+
} else if (upgrade.upgraded) {
|
|
15716
15779
|
console.log(`Upgraded: v${upgrade.from} → v${upgrade.to}`);
|
|
15717
15780
|
}
|
|
15718
15781
|
const result = await updateProject(process.cwd(), options.dryRun ?? false);
|
|
@@ -5,6 +5,17 @@ const { execSync } = require("child_process");
|
|
|
5
5
|
const fs = require("fs");
|
|
6
6
|
const path = require("path");
|
|
7
7
|
|
|
8
|
+
// Inline semver comparison (no external deps): returns true if a >= b
|
|
9
|
+
function semverGte(a, b) {
|
|
10
|
+
const pa = a.split(".").map(Number);
|
|
11
|
+
const pb = b.split(".").map(Number);
|
|
12
|
+
for (let i = 0; i < 3; i++) {
|
|
13
|
+
if ((pa[i] || 0) > (pb[i] || 0)) return true;
|
|
14
|
+
if ((pa[i] || 0) < (pb[i] || 0)) return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
8
19
|
module.exports = async (ctx) => {
|
|
9
20
|
return {
|
|
10
21
|
"session.start": async ({ trigger }) => {
|
|
@@ -50,9 +61,15 @@ module.exports = async (ctx) => {
|
|
|
50
61
|
const installed = gl.exec("reap --version 2>/dev/null", execOpts);
|
|
51
62
|
const latest = gl.exec("npm view @c-d-cc/reap version 2>/dev/null", execOpts);
|
|
52
63
|
if (installed && latest && installed !== latest) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
64
|
+
// Auto-update guard: check autoUpdateMinVersion
|
|
65
|
+
const minVersion = gl.exec("npm view @c-d-cc/reap reap.autoUpdateMinVersion 2>/dev/null", execOpts);
|
|
66
|
+
if (minVersion && !semverGte(installed, minVersion)) {
|
|
67
|
+
autoUpdateMessage = `[BREAKING] Auto-update blocked: v${installed} -> v${latest} contains breaking changes. Inform the user about this breaking change and ask if they want to update via '/reap.update'. Release notes: https://reap.cc/docs/release-notes`;
|
|
68
|
+
} else {
|
|
69
|
+
execSync("npm update -g @c-d-cc/reap >/dev/null 2>&1", { ...execOpts, stdio: "ignore" });
|
|
70
|
+
execSync("reap update >/dev/null 2>&1", { ...execOpts, stdio: "ignore" });
|
|
71
|
+
autoUpdateMessage = `REAP auto-updated: v${installed} → v${latest}`;
|
|
72
|
+
}
|
|
56
73
|
}
|
|
57
74
|
} catch { /* update check failed, skip */ }
|
|
58
75
|
}
|
|
@@ -109,7 +126,11 @@ module.exports = async (ctx) => {
|
|
|
109
126
|
// Build auto-update section
|
|
110
127
|
let updateSection = "";
|
|
111
128
|
if (autoUpdateMessage) {
|
|
112
|
-
|
|
129
|
+
if (autoUpdateMessage.startsWith("[BREAKING]")) {
|
|
130
|
+
updateSection = `\n\n## Auto-Update (Breaking Change Detected)\n${autoUpdateMessage}\n\nIMPORTANT: On your first response, explain to the user that a new REAP version is available but contains breaking changes. Show them the release notes link and ask for explicit confirmation before they run the manual update command. Do NOT silently skip this.`;
|
|
131
|
+
} else {
|
|
132
|
+
updateSection = `\n\n## Auto-Update\n${autoUpdateMessage}. Tell the user: "${autoUpdateMessage}"`;
|
|
133
|
+
}
|
|
113
134
|
}
|
|
114
135
|
|
|
115
136
|
const context = `<REAP_WORKFLOW>\n${reapGuide}\n\n---\n\n## Genome (Project Knowledge)\n${genomeContent}\n\n---\n\n## Current State\n${generationContext}${staleSection}${strictSection}${updateSection}${langSection}\n\n## Rules\n1. ALL development work MUST follow the REAP lifecycle.\n2. Before writing any code, check if a Generation is active and what stage it is in.\n3. If a Generation is active, use \`${nextCmd}\` to proceed with the current stage.\n4. If no Generation is active, use \`/reap.start\` to start a new one.\n5. Do NOT implement features outside of the REAP lifecycle unless explicitly asked.\n6. Genome is the authoritative knowledge source.\n</REAP_WORKFLOW>`;
|
|
@@ -117,6 +117,17 @@ if (gl.dirExists(userReapCommands)) {
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
// Inline semver comparison (no external deps): returns true if a >= b
|
|
121
|
+
function semverGte(a, b) {
|
|
122
|
+
const pa = a.split('.').map(Number);
|
|
123
|
+
const pb = b.split('.').map(Number);
|
|
124
|
+
for (let i = 0; i < 3; i++) {
|
|
125
|
+
if ((pa[i] || 0) > (pb[i] || 0)) return true;
|
|
126
|
+
if ((pa[i] || 0) < (pb[i] || 0)) return false;
|
|
127
|
+
}
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
|
|
120
131
|
// Step 1: Version check + Auto-update
|
|
121
132
|
log('Checking for updates...');
|
|
122
133
|
let autoUpdateMessage = '';
|
|
@@ -129,10 +140,17 @@ if (installed && installed.includes('+dev')) {
|
|
|
129
140
|
} else if (installed && latest && installed !== latest) {
|
|
130
141
|
const autoUpdate = configContent ? /^autoUpdate:\s*true/m.test(configContent) : false;
|
|
131
142
|
if (autoUpdate) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
143
|
+
// Auto-update guard: check autoUpdateMinVersion before upgrading
|
|
144
|
+
const minVersion = gl.exec('npm view @c-d-cc/reap reap.autoUpdateMinVersion');
|
|
145
|
+
if (minVersion && !semverGte(installed, minVersion)) {
|
|
146
|
+
// Breaking change detected — block auto-update
|
|
147
|
+
autoUpdateMessage = `[BREAKING] Auto-update blocked: v${installed} → v${latest} contains breaking changes. Inform the user about this breaking change and ask if they want to update via '/reap.update'. Release notes: https://reap.cc/docs/release-notes`;
|
|
148
|
+
} else {
|
|
149
|
+
const updated = gl.exec('npm update -g @c-d-cc/reap');
|
|
150
|
+
if (updated !== null) {
|
|
151
|
+
gl.exec('reap update');
|
|
152
|
+
autoUpdateMessage = `REAP auto-updated: v${installed} → v${latest}`;
|
|
153
|
+
}
|
|
136
154
|
}
|
|
137
155
|
} else {
|
|
138
156
|
updateAvailableMessage = `update available: v${installed} → v${latest}`;
|
|
@@ -178,7 +196,11 @@ if (genomeStaleWarning) {
|
|
|
178
196
|
// Build auto-update section
|
|
179
197
|
let updateSection = '';
|
|
180
198
|
if (autoUpdateMessage) {
|
|
181
|
-
|
|
199
|
+
if (autoUpdateMessage.startsWith('[BREAKING]')) {
|
|
200
|
+
updateSection = `\n\n## Auto-Update (Breaking Change Detected)\n${autoUpdateMessage}\n\nIMPORTANT: On your first response, explain to the user that a new REAP version is available but contains breaking changes. Show them the release notes link and ask for explicit confirmation before they run the manual update command. Do NOT silently skip this.`;
|
|
201
|
+
} else {
|
|
202
|
+
updateSection = `\n\n## Auto-Update\n${autoUpdateMessage}. Tell the user: "${autoUpdateMessage}"`;
|
|
203
|
+
}
|
|
182
204
|
}
|
|
183
205
|
|
|
184
206
|
// Build session init display
|
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.15",
|
|
4
4
|
"description": "Recursive Evolutionary Autonomous Pipeline — AI and humans evolve software across generations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,5 +46,8 @@
|
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"yaml": "^2.0.0"
|
|
49
|
+
},
|
|
50
|
+
"reap": {
|
|
51
|
+
"autoUpdateMinVersion": "0.15.0"
|
|
49
52
|
}
|
|
50
53
|
}
|