cuelo 0.9.7 → 0.9.9
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +9 -9
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +2 -2
- package/.next/required-server-files.json +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/api/update-maintenance/route.js +11 -2
- package/.next/server/app/api/updates/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office/page_client-reference-manifest.js +1 -1
- package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
- package/.next/server/app/office-preview.html +1 -1
- package/.next/server/app/office-preview.rsc +2 -2
- package/.next/server/app/office-preview.segments/_full.segment.rsc +2 -2
- package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/_index.segment.rsc +2 -2
- package/.next/server/app/office-preview.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
- package/.next/server/app/office.html +1 -1
- package/.next/server/app/office.rsc +4 -4
- package/.next/server/app/office.segments/_full.segment.rsc +4 -4
- package/.next/server/app/office.segments/_head.segment.rsc +1 -1
- package/.next/server/app/office.segments/_index.segment.rsc +2 -2
- package/.next/server/app/office.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/office.segments/office.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recover.html +1 -1
- package/.next/server/app/recover.rsc +2 -2
- package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
- package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
- package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
- package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +9 -9
- package/.next/server/chunks/5489.js +2 -2
- package/.next/server/chunks/6429.js +4 -4
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{9575-fe25836fd76b4655.js → 9575-b31b9593cbe34a48.js} +2 -2
- package/.next/static/chunks/app/{layout-2bf5721b24426873.js → layout-cf8c4438ef794c61.js} +1 -1
- package/.next/trace +108 -108
- package/.next/trace-build +1 -1
- package/README.md +3 -1
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +3 -3
- package/Tools/OMP_Global_Config/agent/RULES.md +2 -1
- package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +3 -2
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +77 -1
- package/package.json +7 -7
- /package/.next/static/{vrwvD7kuXEjDJZtO0Q3iO → GlxyXVhCfvMNLco_6GJ3t}/_buildManifest.js +0 -0
- /package/.next/static/{vrwvD7kuXEjDJZtO0Q3iO → GlxyXVhCfvMNLco_6GJ3t}/_ssgManifest.js +0 -0
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-webpack","duration":
|
|
1
|
+
[{"name":"run-webpack","duration":88108355,"timestamp":535706,"id":14,"parentId":1,"tags":{},"startTime":1791334556965,"traceId":"0579ad7ab312cdbb"},{"name":"run-typescript","duration":15603137,"timestamp":88978219,"id":11084,"parentId":1,"tags":{},"startTime":1791334645408,"traceId":"0579ad7ab312cdbb"},{"name":"static-check","duration":3789976,"timestamp":104662409,"id":11087,"parentId":1,"tags":{},"startTime":1791334661093,"traceId":"0579ad7ab312cdbb"},{"name":"static-generation","duration":9036575,"timestamp":108537921,"id":11259,"parentId":1,"tags":{},"startTime":1791334664968,"traceId":"0579ad7ab312cdbb"},{"name":"collect-build-traces","duration":15239045,"timestamp":108513345,"id":11256,"parentId":1,"tags":{},"startTime":1791334664944,"traceId":"0579ad7ab312cdbb"},{"name":"telemetry-flush","duration":106,"timestamp":123756313,"id":11268,"parentId":1,"tags":{},"startTime":1791334680187,"traceId":"0579ad7ab312cdbb"},{"name":"next-build","duration":123309624,"timestamp":446815,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1791334556876,"traceId":"0579ad7ab312cdbb"}]
|
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ Use the same `~/.omp/agent` sessions, credentials and model configuration from t
|
|
|
16
16
|
|
|
17
17
|
**한국어:** CUELO는 omp(oh-my-pi)를 위한 오픈소스 AI 코딩 에이전트 작업 공간이자 하네스입니다. 웹 앱은 omp SDK를 서버 안에서 실행하고, `omp` CLI와 같은 `~/.omp/agent` 디렉터리를 씁니다. 터미널에서 하던 세션을 브라우저에서 이어 가고, 다시 터미널로 돌아가도 기록·계정·모델 설정을 공유합니다.
|
|
18
18
|
|
|
19
|
-
내장 OMP 코어는 **18.
|
|
19
|
+
내장 OMP 코어는 **18.7.0**입니다. 중단된 턴의 저장·복구와 도구·RPC 안정성을 개선했으며, 별도로 설치한 `omp` CLI의 버전은 웹 업데이트와 독립적입니다. 앱에 포함된 CLI를 `omp` 명령으로 사용하는 설치에서는 웹과 같은 코어를 사용합니다.
|
|
20
20
|
|
|
21
21
|
CUELO의 목적은 작업 중 확인한 실패와 막힘을 기억·작업 규칙·실행 절차에 반영해, 사람이 같은 문제를 다시 지적하지 않아도 다음 작업에서 실수를 줄이는 것입니다. 원인을 확인하고 필요한 부분만 바꾸며, 다음 작업에서 적용과 효과를 확인하는 것까지를 지향합니다. 기록을 저장했다는 이유만으로 자동 개선이 끝났다고 보지는 않습니다.
|
|
22
22
|
|
|
@@ -171,6 +171,8 @@ bun bin/cuelo.js --reset-password # 비밀번호 재설정
|
|
|
171
171
|
|
|
172
172
|
업데이트 대기 화면에서 실패가 확인되더라도 서버가 다시 요청을 받을 수 있고 원래 대화가 확인되면 그 대화로 자동 복귀합니다. 복귀한 화면은 진행 중인 답변이나 이미 끝난 실패 안내를 따라잡으며, 복귀 자체가 명령을 다시 보내지는 않습니다.
|
|
173
173
|
|
|
174
|
+
Windows의 WSL Ubuntu에서 실행 중인 CUELO를 갱신하는 동안에는 WSL 연결을 유지하고, 열려 있는 화면에 세션 정지·준비·패키지 교체·확인 단계를 표시합니다. 서버가 내려가 응답하지 않는 동안에는 마지막으로 확인한 단계를 그대로 표시하고 아직 확인하지 못한 단계로 앞서가지 않으며, 갱신이 끝나면 원래 대화로 돌아옵니다. 새 서버가 실행 중이고 응답하면 갱신 완료 화면에서 멈추지 않고 마칩니다. 서비스가 멈춘 것을 확인한 뒤에만 파일과 프로필을 바꾸고, 실패하면 실행 중이던 버전을 그대로 두거나 이전 버전으로 복구합니다. 복구가 끝난 갱신도 완료로 인식합니다.
|
|
175
|
+
|
|
174
176
|
기존 프로필의 하네스·역할 설정은 앱 업데이트만으로 자동 덮어쓰지 않습니다. `0.6.1`의 설정 전환은 [기존 하네스 갱신](./docs/installation.md#061로-기존-하네스-갱신)을 확인하고, 반영 후 CUELO와 `omp`를 다시 시작하세요.
|
|
175
177
|
|
|
176
178
|
```bash
|
|
@@ -9,9 +9,9 @@ const MEMORY_RE = /(const phase1Model = await resolveMemoryModel\(\{[^}]*?fallba
|
|
|
9
9
|
const MEMORY_DONE = /const phase1Model = await resolveMemoryModel\(\{[^}]*?fallbackRole: "smol"/;
|
|
10
10
|
const EXPECTED = {
|
|
11
11
|
name: 'cuelo',
|
|
12
|
-
version: '0.9.
|
|
12
|
+
version: '0.9.9',
|
|
13
13
|
distribution: 'cuelo',
|
|
14
|
-
coreVersion: '18.
|
|
14
|
+
coreVersion: '18.7.0',
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
// OMP core 18.4.12 `src/sdk.ts`: session-scoped AsyncJobManager for a process
|
|
@@ -177,7 +177,7 @@ function readNativePackage(target) {
|
|
|
177
177
|
throw new Error(`unexpected native package ${packageJson.name}@${packageJson.version}`);
|
|
178
178
|
}
|
|
179
179
|
if (!build || build.distribution !== EXPECTED.distribution || build.coreVersion !== EXPECTED.coreVersion) {
|
|
180
|
-
throw new Error('native cueloBuild metadata does not match cuelo / core 18.
|
|
180
|
+
throw new Error('native cueloBuild metadata does not match cuelo / core 18.7.0');
|
|
181
181
|
}
|
|
182
182
|
return packageJson;
|
|
183
183
|
}
|
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
- 도구·저장소·현재 문맥으로 해결할 수 있는 작업은 확인을 요청하거나 중간 단계에서 멈추지 않고 끝까지 수행한다. 단, 삭제·배포·비용 발생·호환성 파괴는 실행 전에 사용자 승인을 받는다.
|
|
30
30
|
- MCP 설치·등록·인증·권한 변경은 대상과 범위를 설명하고 먼저 사용자 승인을 받는다. 승인 뒤에는 에이전트가 가능한 설치·설정·연결·검증을 끝까지 실행한다. "사용자 승인 필요"를 "사용자가 직접 실행해야 함"으로 바꿔 해석하지 않는다. 사용자 본인 로그인·인증정보 입력·제공자 안전 확인·동의처럼 사람이 필요한 단계만 사용자에게 넘긴다. JEV 추천·필요성 판정은 사용자 승인을 대신하지 않는다.
|
|
31
31
|
- 호스트 OS 시스템 변경(사용자, 2026-10-06): 커널·필터 드라이버, 부팅·System 시작 서비스의 `Start` 값, 네트워크 스택·방화벽·보안/금융 보안 프로그램, 부팅 설정, 시스템 레지스트리는 "꺼 보고 확인" 같은 진단 수단으로 건드리지 않는다. 바꿔야 할 근거가 있으면 실행 전에 대상, 현재 값, 바꿀 값, 예상 영향(네트워크 단절·부팅 실패 가능성), 되돌리는 방법을 설명하고 그 정확한 변경에 대해 사용자 승인을 받는다. "UAC 창이 뜨면 허용해 주세요"는 승인 요청이 아니며 UAC 허용도 승인으로 보지 않는다. 비활성화보다 해당 프로그램의 정식 제거·설정을 먼저 검토하고, 읽기 전용 조회(`reg query`·`sc query`)로 원인을 먼저 좁힌다.
|
|
32
|
-
- 배포 확인(사용자, 2026-09-26·2026-09-29·2026-09-30): 집 PC(hostname `KYS`)와 사무실 PC(hostname은 비공개 배포 표에 있다)는 같은 절차를
|
|
32
|
+
- 배포 확인(사용자, 2026-09-26·2026-09-29·2026-09-30): 집 PC(hostname `KYS`)와 사무실 PC(hostname은 비공개 배포 표에 있다)는 같은 확인 절차를 따르고, 실행 단계만 아래 「KYS 배포」가 다르다. 그 PC의 CUELO 세션이 소스 변경을 검증하고 커밋·push했으면, 그 커밋의 GitHub CI가 끝날 때까지 지켜본 뒤 결과를 보고하고 배포 여부를 묻는다. 사무실은 사용자가 승인하면 같은 revision의 `Tools/CUELO_Setup/deploy-live.ps1`과 `Tools/OMP_Global_Config/verify.ps1 -StrictRuntime`을 실행한다(`Tools/CUELO_Setup/setup.ps1`은 앱 전체 설치기라 이 단계가 아니다). 배포 트랜잭션이 새 서버를 띄우기 전에 `Tools/OMP_Global_Config/setup.ps1 -ProfileOnly`로 미러 프로필을 반영하고, 새 서버 `/api/models`의 역할 selector가 미러 `config.yml` `modelRoles`와 같은지 확인해 receipt `profile`에 남기므로 배포 뒤 ProfileOnly·`CUELO-Restart`를 따로 돌리지 않는다. 역할이 다르거나 관측되지 않으면 deploy-live가 exit 3으로 끝나며 rollback하지 않으니, 안내대로 재시작한 뒤 `/api/models`를 다시 확인한다. 세션 안 배포는 deploy-live가 worker 접수 뒤 반환하므로 재개 뒤 transaction receipt의 `profile.modelRoles.matched`가 `true`인지 직접 확인한다. 배포 없이 프로필만 바꿨으면 ProfileOnly 뒤 서버를 재시작하고 같은 역할 확인을 한다. 라이브 서버는 Settings를 시작 때 한 번만 읽어 파일 변경·touch로는 반영되지 않는다. 실행 전 `hostname`으로 PC를 확인한다. 예약 작업 같은 자동 배포는 두지 않는다. stage·rollback 삭제, 이 두 PC 밖의 배포, CLI 업데이트, 비용이 드는 작업은 따로 승인받는다.
|
|
33
|
+
- KYS 배포(사용자, 2026-10-07): 집 PC는 WSL `Ubuntu-24.04`의 CUELO 하나로 돈다. 위 Windows 단계 대신 재시작을 알리고 WSL에서 `systemd-run --user --unit=cuelo-update-$(date +%s) --collect --setenv=WSL_DISTRO_NAME=Ubuntu-24.04 bash ~/cuelo-run/Tools/CUELO_Setup/wsl/update.sh <revision>`을 실행한다(Windows 세션이면 `wsl.exe -d Ubuntu-24.04 --exec bash -lc '…'`로). 세션 정지·빌드·WSL 프로필 반영·재시작·대기 화면 복귀까지 이 스크립트가 맡는다. `Tools/CUELO_Setup/deploy-live.ps1`과 앱 전체 `setup.ps1`은 지운 Windows 앱을 다시 설치하므로 KYS에서 실행하지 않는다. `verify.ps1 -StrictRuntime`·`setup.ps1 -ProfileOnly`는 Windows 쪽 프로필·런타임을 보므로 KYS 배포의 증거가 아니다. 완료는 최신 `~/.omp/wsl-update/*.log`의 `READY <revision>`, `wsl\launch.ps1 -Status`의 `matched: true`, `node install.mjs health` 4/4, `/api/models?cwd=<세션 cwd>` 역할 selector와 WSL `~/.omp/agent/config.yml` `modelRoles`의 일치로 본다(`cwd`가 없으면 403). exit 2(되돌림)·3(되돌리기 실패)은 배포 실패로 보고한다. 세부 절차와 함정은 `Tools/CUELO_Setup/WSL-SETUP.md` 「운영」에 있다.
|
|
33
34
|
- CI 감시(사용자, 2026-09-28·2026-10-03): 커밋의 CI를 지켜볼 때는 기다릴 워크플로를 이름으로 지정하고(`gh run list --workflow <이름>` 등), 그 run이 끝나는 즉시 결과를 보고한다. 같은 SHA에 걸린 run 전체의 완료를 조건으로 삼지 않는다. CI 성공이 트리거하는 릴리스·배포 run(`workflow_run`)이 몇 초 뒤 같은 SHA로 생겨 CI 완료 보고를 붙잡기 때문이다. 이어 붙는 run은 보고한 뒤 따로 지켜본다. 감시는 `bash`의 `gh run watch <id> --exit-status`나 `gh run list` 직접 조회로 하고, `eval` 커널 안에서 `gh`를 subprocess로 부르는 폴링 루프로 짜지 않는다. 2026-10-03 그런 루프가 빈 출력을 "run 없음"으로 읽어, CI가 끝난 뒤에도 20분 넘게 보고하지 못했다. 직접 짠 폴링은 빈 출력·0이 아닌 exit를 즉시 오류로 끝낸다. 공개 미러 CI는 headSha가 원본 커밋과 다르므로 run 제목으로 찾는다.
|
|
34
35
|
- 구현 방법의 불확실성은 명시 요구·승인된 계약, 실제 호출부와 데이터 흐름, 테스트·재현 결과,
|
|
35
36
|
현재 동작과 문서로 좁힌다. 증거로 방향이 정해지면 근거를 남기고 진행하며 사소한 구현 선택마다
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- source-fingerprint:
|
|
1
|
+
<!-- source-fingerprint: 8d31e15589e1b276 -->
|
|
2
2
|
# Global Rules
|
|
3
3
|
|
|
4
4
|
(Model-facing English copy of the Korean source `RULES.md`.)
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
- Work solvable with tools, the repository, and the current context is carried to completion without asking for confirmation or stopping midway. Exception: get user approval before deletion, deployment, incurring cost, or breaking compatibility.
|
|
15
15
|
- Before installing/registering MCP servers or changing their authentication/permissions, explain the target and scope and get user approval. After approval, the agent carries out the supported installation, configuration, connection, and verification. Do not reinterpret "user approval required" as "the user must execute it manually." Hand over only steps requiring the person, such as personal login, credential entry, or interactive provider safety checks/consent. JEV recommendations or relevance judgments never substitute for user approval.
|
|
16
16
|
- Host OS system changes (user, 2026-10-06): never touch kernel or filter drivers, the `Start` value of boot/System-start services, the network stack, firewall or security/banking-security software, boot configuration, or system registry keys as a diagnostic "disable it and see". When evidence says one must change, first explain the target, current value, new value, expected impact (possible network loss or boot failure), and how to revert, and get user approval for that exact change. "Please allow the UAC prompt" is not an approval request, and allowing UAC is not approval. Consider the program's supported uninstall or settings before disabling anything, and narrow the cause with read-only queries (`reg query`, `sc query`) first.
|
|
17
|
-
- Deploy confirmation (user, 2026-09-26, 2026-09-29 and 2026-09-30): the home PC (hostname `KYS`) and the office PC (its hostname is in the private deploy table) follow the same procedure. Once that PC's CUELO session has verified a source change and committed and pushed it, watch that commit's GitHub CI until it finishes, report the result, and ask whether to deploy.
|
|
17
|
+
- Deploy confirmation (user, 2026-09-26, 2026-09-29 and 2026-09-30): the home PC (hostname `KYS`) and the office PC (its hostname is in the private deploy table) follow the same confirmation procedure; only the execution step differs for KYS (see "KYS deploy" below). Once that PC's CUELO session has verified a source change and committed and pushed it, watch that commit's GitHub CI until it finishes, report the result, and ask whether to deploy. On the office PC, after the user approves, run `Tools/CUELO_Setup/deploy-live.ps1` and `Tools/OMP_Global_Config/verify.ps1 -StrictRuntime` for that same revision (`Tools/CUELO_Setup/setup.ps1` is the full app installer, not this step). The deploy transaction applies the mirror profile with `Tools/OMP_Global_Config/setup.ps1 -ProfileOnly` before starting the new server, then checks that the new server's `/api/models` role selectors match the mirror `config.yml` `modelRoles` and records it in the receipt `profile`, so do not run ProfileOnly or `CUELO-Restart` separately after a deploy. If the roles differ or could not be observed, deploy-live exits 3 without rolling back; restart as its guidance says and check `/api/models` again. An in-session deploy returns once the worker accepts, so after resuming check yourself that the transaction receipt's `profile.modelRoles.matched` is `true`. If only the profile changed without a deploy, restart the server after ProfileOnly and do the same role check. The live server reads Settings once at startup; file changes or a touch do not reload it. Check the PC with `hostname` first. Do not add automatic deployment such as a scheduled task. Deleting stages or rollbacks, deploying to any PC other than these two, updating the CLI, and anything that incurs cost still need separate approval.
|
|
18
|
+
- KYS deploy (user, 2026-10-07): the home PC runs a single WSL CUELO in `Ubuntu-24.04`. Instead of the Windows steps above, announce the restart and run, inside WSL, `systemd-run --user --unit=cuelo-update-$(date +%s) --collect --setenv=WSL_DISTRO_NAME=Ubuntu-24.04 bash ~/cuelo-run/Tools/CUELO_Setup/wsl/update.sh <revision>` (from a Windows session, through `wsl.exe -d Ubuntu-24.04 --exec bash -lc '…'`). The script owns the session drain, the build, the WSL profile update, the restart and the wait-screen return. Never run `Tools/CUELO_Setup/deploy-live.ps1` or the full app `setup.ps1` on KYS: they reinstall the removed Windows app. `verify.ps1 -StrictRuntime` and `setup.ps1 -ProfileOnly` look at the Windows profile and runtime, so they are not evidence for a KYS deploy. It is done when the newest `~/.omp/wsl-update/*.log` ends with `READY <revision>`, `wsl\launch.ps1 -Status` reports `matched: true`, `node install.mjs health` is 4/4, and the `/api/models?cwd=<a session cwd>` role selectors match `modelRoles` in the WSL `~/.omp/agent/config.yml` (without `cwd` the route answers 403). Exit 2 (rolled back) or 3 (rollback failed) is a failed deploy: report it. The full procedure and its traps are in `Tools/CUELO_Setup/WSL-SETUP.md`, section 「운영」.
|
|
18
19
|
- CI watching (user, 2026-09-28 and 2026-10-03): when watching a commit's CI, name the workflow you wait on (`gh run list --workflow <name>` or similar) and report the moment that run finishes. Never use "every run for this SHA is completed" as the condition: a release/deploy run triggered by CI success (`workflow_run`) appears seconds later on the same SHA and holds back the CI report. Watch such follow-on runs separately after reporting. Watch with `gh run watch <id> --exit-status` or a direct `gh run list` in `bash`; never write a polling loop that calls `gh` as a subprocess inside the `eval` kernel. On 2026-10-03 such a loop read empty output as "no run yet" and missed a finished CI for over 20 minutes. Any hand-written poll must fail at once on empty output or a nonzero exit. Public-mirror CI runs carry a different headSha than the source commit, so find them by run title.
|
|
19
20
|
- Narrow implementation uncertainty using explicit requirements and approved contracts, actual callers and data flow, test/reproduction results, and current behavior and docs. Once evidence settles the direction, proceed and record the basis; do not ask for confirmation on every minor implementation choice. Tests, docs, and current behavior are not automatically right; when they conflict with the requirements, check the actual behavior. Escalate to the user only items that change product meaning and cannot be settled by evidence, or that lack authority or external approval; keep doing independently allowed work even if that part is blocked.
|
|
20
21
|
- When a normal implementation choice still needs the user and you ask it with `ask`, give it a valid `recommended` and `autoSelectRecommended: true` so it proceeds with the recommendation after 2 minutes without an answer. Never enable auto-selection for deletion, deployment, cost, account, permission, provider safety, or other high-impact confirmations; wait for the answer. A timed-out auto-selection is not user approval, so never use it as the basis for an action that needs approval.
|
|
@@ -85,6 +85,18 @@ const OPUS55_ROW_18410 = {
|
|
|
85
85
|
*/
|
|
86
86
|
const OPUS55_ROW_1851 = OPUS55_ROW_1846.patched.replace('"tps":95.2,', '"tps":93,');
|
|
87
87
|
|
|
88
|
+
/**
|
|
89
|
+
* #310의 18.7.0 no-op 후보(RETIRE 유지). upstream이 같은 행의 tps만 93→97로 바꿨고 prefixBinding·binding controls는 그대로다.
|
|
90
|
+
*/
|
|
91
|
+
const OPUS55_ROW_1870 = OPUS55_ROW_1846.patched.replace('"tps":95.2,', '"tps":97,');
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* 18.4.6 후보의 성립 조건: 행 시작부터 `"tps":95.2,`까지. 18.4.6 anchor와 patched가 모두 이 머리로 시작하므로 그 후보가
|
|
95
|
+
* 원래 성립하던 상태(순정 18.4.6·적용본)에서는 늘 참이다. tps 뒤 조각인 marker만 맞는 다른 판의 행(18.7.0 tps 97)을
|
|
96
|
+
* 18.4.6 적용본으로 잘못 읽어 --revert가 없는 patched를 찾다 실패하는 일을 막는다. tps가 다시 바뀌어도 같다.
|
|
97
|
+
*/
|
|
98
|
+
const OPUS55_HEAD_1846 = OPUS55_ROW_1846.anchor.slice(0, OPUS55_ROW_1846.anchor.indexOf('"tps":95.2,') + '"tps":95.2,'.length);
|
|
99
|
+
|
|
88
100
|
/**
|
|
89
101
|
* learn topic upsert 적용본. 갱신 때 metadata 의 session_id/cwd 는 최초 저장자로 남고,
|
|
90
102
|
* updated_session_id/updated_cwd/updated_at 이 최신 정정자·시점이며 context 는 최신 이유다.
|
|
@@ -4145,6 +4157,10 @@ import { resolveUsedFraction } from "../usage";`,
|
|
|
4145
4157
|
}],
|
|
4146
4158
|
},
|
|
4147
4159
|
{
|
|
4160
|
+
// 18.7.0: upstream 이 `if (!currentModel) return false;` 바로 뒤에 reserve 승인 범위용 `sessionId` 줄을 넣어
|
|
4161
|
+
// (#usageReserveApproval) 원 앵커가 깨졌다. 두 판 적용본의 marker 가 같으므로 그 두 줄 묶음으로 후보를 가른다.
|
|
4162
|
+
// 18.7.0 후보는 CUELO 블록을 sessionId 줄 뒤에 둬서 가르는 문자열이 적용 뒤에도 남는다(upstream 줄은 그대로).
|
|
4163
|
+
excludes: "\t\tif (!currentModel) return false;\n\t\tconst sessionId = this.#host.sessionManager.getSessionId();\n",
|
|
4148
4164
|
file: "src/session/turn-recovery.ts",
|
|
4149
4165
|
marker: `// Usage preflight for an exact summon evaluates only its selected identity.`,
|
|
4150
4166
|
anchor: ` const currentModel = this.#host.model();
|
|
@@ -4160,6 +4176,26 @@ import { resolveUsedFraction } from "../usage";`,
|
|
|
4160
4176
|
);
|
|
4161
4177
|
const currentSelector = formatRetryFallbackSelector(currentModel, this.#host.thinkingLevel());
|
|
4162
4178
|
let health: ModelUsageHealth;`,
|
|
4179
|
+
alternates: [{
|
|
4180
|
+
file: "src/session/turn-recovery.ts",
|
|
4181
|
+
requires: "\t\tif (!currentModel) return false;\n\t\tconst sessionId = this.#host.sessionManager.getSessionId();\n",
|
|
4182
|
+
marker: `// Usage preflight for an exact summon evaluates only its selected identity.`,
|
|
4183
|
+
anchor: ` const currentModel = this.#host.model();
|
|
4184
|
+
if (!currentModel) return false;
|
|
4185
|
+
const sessionId = this.#host.sessionManager.getSessionId();
|
|
4186
|
+
const currentSelector = formatRetryFallbackSelector(currentModel, this.#host.thinkingLevel());
|
|
4187
|
+
let health: ModelUsageHealth;`,
|
|
4188
|
+
patched: ` const currentModel = this.#host.model();
|
|
4189
|
+
if (!currentModel) return false;
|
|
4190
|
+
const sessionId = this.#host.sessionManager.getSessionId();
|
|
4191
|
+
// Usage preflight for an exact summon evaluates only its selected identity.
|
|
4192
|
+
const exactAccountLabel = this.#host.modelRegistry.authStorage.sessions.exactLabel(
|
|
4193
|
+
currentModel.provider,
|
|
4194
|
+
this.#host.sessionId(),
|
|
4195
|
+
);
|
|
4196
|
+
const currentSelector = formatRetryFallbackSelector(currentModel, this.#host.thinkingLevel());
|
|
4197
|
+
let health: ModelUsageHealth;`,
|
|
4198
|
+
}],
|
|
4163
4199
|
},
|
|
4164
4200
|
{
|
|
4165
4201
|
file: "src/session/turn-recovery.ts",
|
|
@@ -9957,10 +9993,12 @@ function parentSubagentServiceTiers(
|
|
|
9957
9993
|
anchor: OPUS55_ROW_18410.anchor.replace(OPUS55_TPS_18410, OPUS55_TPS_18412),
|
|
9958
9994
|
patched: OPUS55_ROW_18410.patched.replace(OPUS55_TPS_18410, OPUS55_TPS_18412),
|
|
9959
9995
|
// 18.5.1: 위 OPUS55_ROW_1851 no-op(RETIRE). 18.4.6 후보는 그 행이 있으면 성립하지 않는다.
|
|
9996
|
+
// 18.7.0: OPUS55_ROW_1870 no-op(RETIRE 유지). 18.4.6 후보는 자기 행 머리(OPUS55_HEAD_1846)가 있을 때만 성립한다.
|
|
9960
9997
|
alternates: [
|
|
9961
9998
|
OPUS55_ROW_18410,
|
|
9962
|
-
{ ...OPUS55_ROW_1846, excludes: OPUS55_ROW_1851 },
|
|
9999
|
+
{ ...OPUS55_ROW_1846, excludes: OPUS55_ROW_1851, requires: OPUS55_HEAD_1846 },
|
|
9963
10000
|
{ file: "../pi-catalog/src/models.json", marker: OPUS55_ROW_1851, anchor: OPUS55_ROW_1851, patched: OPUS55_ROW_1851 },
|
|
10001
|
+
{ file: "../pi-catalog/src/models.json", marker: OPUS55_ROW_1870, anchor: OPUS55_ROW_1870, patched: OPUS55_ROW_1870 },
|
|
9964
10002
|
],
|
|
9965
10003
|
},
|
|
9966
10004
|
{
|
|
@@ -10153,7 +10191,12 @@ function parentSubagentServiceTiers(
|
|
|
10153
10191
|
this.#autoResolvedLevel = effort;`,
|
|
10154
10192
|
},
|
|
10155
10193
|
{
|
|
10194
|
+
// 18.7.0: upstream 이 setThinkingLevel·cycleThinkingLevel 앞에 `this.#prewalk.releaseHandoff();` 를 넣어(명시 선택이
|
|
10195
|
+
// prewalk handoff 를 소유한다) 원 앵커가 깨졌다. upstream 본문은 그대로 두고 같은 자리에 상한 setter/getter 를 붙인다.
|
|
10196
|
+
// 상한은 선택이 아니라 경계이고 재기동 복원(record:false)도 이 setter 를 타므로 여기에는 releaseHandoff 를 넣지 않는다.
|
|
10197
|
+
// 두 판 적용본의 marker 가 같으므로 upstream 의 두 줄 묶음으로 후보를 가른다.
|
|
10156
10198
|
file: "src/session/agent-session.ts",
|
|
10199
|
+
excludes: "\t\tthis.#prewalk.releaseHandoff();\n\t\tthis.#models.setThinkingLevel(level, persist);",
|
|
10157
10200
|
marker: "\tsetThinkingLevelCeiling(ceiling: Effort | undefined, record: boolean = true): void {\n\t\tthis.#models.setThinkingLevelCeiling(ceiling, record);",
|
|
10158
10201
|
anchor: ` /** Selects the session thinking level and optionally persists it as the default. */
|
|
10159
10202
|
setThinkingLevel(level: ConfiguredThinkingLevel | undefined, persist: boolean = false): void {
|
|
@@ -10175,6 +10218,33 @@ function parentSubagentServiceTiers(
|
|
|
10175
10218
|
return this.#models.thinkingLevelCeiling;
|
|
10176
10219
|
}
|
|
10177
10220
|
`,
|
|
10221
|
+
alternates: [{
|
|
10222
|
+
file: "src/session/agent-session.ts",
|
|
10223
|
+
requires: "\t\tthis.#prewalk.releaseHandoff();\n\t\tthis.#models.setThinkingLevel(level, persist);",
|
|
10224
|
+
marker: "\tsetThinkingLevelCeiling(ceiling: Effort | undefined, record: boolean = true): void {\n\t\tthis.#models.setThinkingLevelCeiling(ceiling, record);",
|
|
10225
|
+
anchor: ` /** Selects the session thinking level and optionally persists it as the default. */
|
|
10226
|
+
setThinkingLevel(level: ConfiguredThinkingLevel | undefined, persist: boolean = false): void {
|
|
10227
|
+
this.#prewalk.releaseHandoff();
|
|
10228
|
+
this.#models.setThinkingLevel(level, persist);
|
|
10229
|
+
}
|
|
10230
|
+
`,
|
|
10231
|
+
patched: ` /** Selects the session thinking level and optionally persists it as the default. */
|
|
10232
|
+
setThinkingLevel(level: ConfiguredThinkingLevel | undefined, persist: boolean = false): void {
|
|
10233
|
+
this.#prewalk.releaseHandoff();
|
|
10234
|
+
this.#models.setThinkingLevel(level, persist);
|
|
10235
|
+
}
|
|
10236
|
+
|
|
10237
|
+
/** CUELO: replaces the user effort ceiling ("auto, but at most X"); a spawn ceiling still bounds it. */
|
|
10238
|
+
setThinkingLevelCeiling(ceiling: Effort | undefined, record: boolean = true): void {
|
|
10239
|
+
this.#models.setThinkingLevelCeiling(ceiling, record);
|
|
10240
|
+
}
|
|
10241
|
+
|
|
10242
|
+
/** CUELO: effective effort ceiling, the lower of the spawn ceiling and the user ceiling. */
|
|
10243
|
+
get thinkingLevelCeiling(): Effort | undefined {
|
|
10244
|
+
return this.#models.thinkingLevelCeiling;
|
|
10245
|
+
}
|
|
10246
|
+
`,
|
|
10247
|
+
}],
|
|
10178
10248
|
},
|
|
10179
10249
|
// HTML export(세션 안 `/export`, CLI `--export`, CUELO 웹 `app/api/sessions/[id]/export`)는 세션 폴더의 `*.jsonl`을
|
|
10180
10250
|
// 전부 subagent 기록으로 싣는다. advisor는 같은 폴더에 `__advisor.jsonl`·`__advisor.<slug>.jsonl`(subagent advisor는
|
|
@@ -10246,6 +10316,12 @@ function parentSubagentServiceTiers(
|
|
|
10246
10316
|
marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||ZRe(i))continue;let a=i.slice(0,-6),',
|
|
10247
10317
|
anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||ZRe(i))continue;let a=i.slice(0,-6),',
|
|
10248
10318
|
patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||ZRe(i))continue;let a=i.slice(0,-6),',
|
|
10319
|
+
}, {
|
|
10320
|
+
// 18.7.0 번들의 같은 upstream 조건(MCe = isAdvisorTranscriptName) no-op. 이름만 바뀌었다.
|
|
10321
|
+
file: "dist/cli.js",
|
|
10322
|
+
marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||MCe(i))continue;let a=i.slice(0,-6),',
|
|
10323
|
+
anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||MCe(i))continue;let a=i.slice(0,-6),',
|
|
10324
|
+
patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||MCe(i))continue;let a=i.slice(0,-6),',
|
|
10249
10325
|
}],
|
|
10250
10326
|
},
|
|
10251
10327
|
// 18.4.5 는 /ratchet 을 새로 넣으면서 `src/ratchet/prelude.ts`(코드)와 `prelude.js`(eval 텍스트 자산)를 같은 stem 으로
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cuelo",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.9",
|
|
4
4
|
"description": "CUELO — open-source AI coding agent workspace and harness for omp (oh-my-pi)",
|
|
5
5
|
"homepage": "https://github.com/gim47656-ship-it/CUELO#readme",
|
|
6
6
|
"repository": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"cueloBuild": {
|
|
32
32
|
"distribution": "cuelo",
|
|
33
|
-
"coreVersion": "18.
|
|
33
|
+
"coreVersion": "18.7.0"
|
|
34
34
|
},
|
|
35
35
|
"engines": {
|
|
36
36
|
"node": ">=22.19.0",
|
|
@@ -89,11 +89,11 @@
|
|
|
89
89
|
"test:coverage": "bun test --coverage ./app ./components ./hooks ./lib ./public ./bin ./install.test.mjs"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@oh-my-pi/pi-agent-core": "18.
|
|
93
|
-
"@oh-my-pi/pi-ai": "18.
|
|
94
|
-
"@oh-my-pi/pi-coding-agent": "18.
|
|
95
|
-
"@oh-my-pi/pi-tui": "18.
|
|
96
|
-
"@oh-my-pi/pi-utils": "18.
|
|
92
|
+
"@oh-my-pi/pi-agent-core": "18.7.0",
|
|
93
|
+
"@oh-my-pi/pi-ai": "18.7.0",
|
|
94
|
+
"@oh-my-pi/pi-coding-agent": "18.7.0",
|
|
95
|
+
"@oh-my-pi/pi-tui": "18.7.0",
|
|
96
|
+
"@oh-my-pi/pi-utils": "18.7.0",
|
|
97
97
|
"@seed-design/css": "2.8.0",
|
|
98
98
|
"@seed-design/react": "2.4.1",
|
|
99
99
|
"@seed-design/tailwind4-theme": "2.4.0",
|
|
File without changes
|
|
File without changes
|