cuelo 0.6.3 → 0.6.5
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 +3 -3
- 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/agent/[id]/account/route.js +1 -1
- package/.next/server/app/api/agent/[id]/account/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js +2 -2
- package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/running/route.js +1 -1
- package/.next/server/app/api/agent/running/route.js.nft.json +1 -1
- package/.next/server/app/api/gpt6/handles/route.js +1 -1
- package/.next/server/app/api/gpt6/handles/route.js.nft.json +1 -1
- package/.next/server/app/api/gpt6/reply/route.js +1 -1
- package/.next/server/app/api/gpt6/reply/route.js.nft.json +1 -1
- package/.next/server/app/api/gpt6/token/route.js +1 -1
- package/.next/server/app/api/gpt6/token/route.js.nft.json +1 -1
- package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
- package/.next/server/app/api/gpt6/web6-session/route.js.nft.json +1 -1
- package/.next/server/app/api/live/call/[callId]/route.js +1 -1
- package/.next/server/app/api/live/call/[callId]/route.js.nft.json +1 -1
- package/.next/server/app/api/live/events/route.js +2 -2
- package/.next/server/app/api/live/events/route.js.nft.json +1 -1
- package/.next/server/app/api/live/offer/route.js +1 -1
- package/.next/server/app/api/live/offer/route.js.nft.json +1 -1
- package/.next/server/app/api/live/voices/route.js +1 -1
- package/.next/server/app/api/live/voices/route.js.nft.json +1 -1
- package/.next/server/app/api/lounge/events/route.js +2 -2
- package/.next/server/app/api/lounge/events/route.js.nft.json +1 -1
- package/.next/server/app/api/lounge/route.js +1 -1
- package/.next/server/app/api/lounge/route.js.nft.json +1 -1
- package/.next/server/app/api/project-trust/route.js +1 -1
- package/.next/server/app/api/project-trust/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/install/route.js +1 -1
- package/.next/server/app/api/tool-image/route.js +1 -1
- package/.next/server/app/api/tool-image/route.js.nft.json +1 -1
- package/.next/server/app/api/update-maintenance/route.js +3 -3
- package/.next/server/app/api/update-maintenance/route.js.nft.json +1 -1
- 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/page.js +16 -16
- 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 +3 -3
- package/.next/server/chunks/2651.js +1 -1
- package/.next/server/chunks/3707.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/app/{layout-483ef2fa8ff4fe98.js → layout-1f400c6ff9faef10.js} +1 -1
- package/.next/static/chunks/app/page-73ab54909e09eb66.js +22 -0
- package/.next/trace +105 -105
- package/.next/trace-build +1 -1
- package/README.md +6 -2
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +5 -5
- package/Tools/CUELO_Setup/files/usage-server.js +18 -1
- package/Tools/OMP_Global_Config/agent/RULES.md +1 -1
- package/Tools/OMP_Global_Config/agent/agents/maker.md +25 -42
- package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +7 -3
- package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +2 -2
- package/Tools/OMP_Global_Config/agent/sop/_common.md +14 -23
- package/Tools/OMP_Global_Config/agent/sop/_writer.md +10 -18
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +248 -8
- package/package.json +7 -7
- package/.next/static/chunks/app/page-bac6b66a3725ef8b.js +0 -22
- /package/.next/static/{oBwJ3c4Q_HKgoiBl0dxdQ → p4VT4B7cMX4CRW9JBo9-M}/_buildManifest.js +0 -0
- /package/.next/static/{oBwJ3c4Q_HKgoiBl0dxdQ → p4VT4B7cMX4CRW9JBo9-M}/_ssgManifest.js +0 -0
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-webpack","duration":
|
|
1
|
+
[{"name":"run-webpack","duration":132546212,"timestamp":869498,"id":14,"parentId":1,"tags":{},"startTime":1790750979055,"traceId":"68063d30c801f3d8"},{"name":"run-typescript","duration":24630658,"timestamp":133855403,"id":10707,"parentId":1,"tags":{},"startTime":1790751112042,"traceId":"68063d30c801f3d8"},{"name":"static-check","duration":7250946,"timestamp":158664298,"id":10710,"parentId":1,"tags":{},"startTime":1790751136851,"traceId":"68063d30c801f3d8"},{"name":"static-generation","duration":14909292,"timestamp":166093818,"id":10862,"parentId":1,"tags":{},"startTime":1790751144280,"traceId":"68063d30c801f3d8"},{"name":"collect-build-traces","duration":25695134,"timestamp":166009085,"id":10859,"parentId":1,"tags":{},"startTime":1790751144195,"traceId":"68063d30c801f3d8"},{"name":"telemetry-flush","duration":98,"timestamp":191716138,"id":10871,"parentId":1,"tags":{},"startTime":1790751169903,"traceId":"68063d30c801f3d8"},{"name":"next-build","duration":190951823,"timestamp":764436,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1790750978950,"traceId":"68063d30c801f3d8"}]
|
package/README.md
CHANGED
|
@@ -16,6 +16,8 @@ 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.4.4**입니다. 모델 탐색·서비스 등급 처리와 기억 검색 개선을 포함하며, 별도로 설치한 `omp` CLI의 버전은 웹 업데이트와 독립적입니다.
|
|
20
|
+
|
|
19
21
|
CUELO의 목적은 작업 중 확인한 실패와 막힘을 기억·작업 규칙·실행 절차에 반영해, 사람이 같은 문제를 다시 지적하지 않아도 다음 작업에서 실수를 줄이는 것입니다. 원인을 확인하고 필요한 부분만 바꾸며, 다음 작업에서 적용과 효과를 확인하는 것까지를 지향합니다. 기록을 저장했다는 이유만으로 자동 개선이 끝났다고 보지는 않습니다.
|
|
20
22
|
|
|
21
23
|
**Keywords:** AI coding agent · agent harness · multi-agent orchestration · omp · oh-my-pi · model routing · developer tools
|
|
@@ -63,14 +65,16 @@ CUELO의 목적은 작업 중 확인한 실패와 막힘을 기억·작업 규
|
|
|
63
65
|
- 사이드바의 「단톡방」에서 멤버별 참여와 주간 사용량을 보고, 가운데 대화창에서 멘션·답장·반응을 주고받습니다. 방 전체와 멤버별 참여를 따로 켜고 끌 수 있습니다.
|
|
64
66
|
- 작업 화면으로 돌아가도 선택한 세션·작성 중인 초안·진행 중인 작업은 유지됩니다. 단톡방 기록은 작업 대화와 별도로 보관하며, 멤버에게 작업 문맥이나 실행 도구를 전달하지 않습니다.
|
|
65
67
|
- 단톡방의 계정 연결은 작업 세션의 계정을 바꾸지 않습니다. 연결한 계정을 사용할 수 없으면 다른 계정으로 넘어가지 않고 다시 선택하도록 안내합니다.
|
|
66
|
-
-
|
|
68
|
+
- 단톡방에는 낮은 추론 강도(`low`)를 사용하며 작업 세션의 추론 설정은 바꾸지 않습니다. 시간당 호출은 최대 120회, 사용자 메시지 한 건에 대한 응답은 멤버끼리 이어 말하는 발언을 합쳐 최대 6회입니다. 실제 계정 한도 보호도 계속 적용합니다.
|
|
69
|
+
- 사용자 메시지에 답한 뒤에도 멤버끼리 앞 사람 말을 받아 이어 갑니다. 답에서 부른 멤버가 먼저 받고, 부른 멤버가 없으면 가장 오래 말하지 않은 멤버가 받습니다. 답하지 못한 멤버가 있으면 건너뛰고 다음 멤버가 잇습니다.
|
|
70
|
+
- 자동 수다는 직접 켜야 합니다. 켜 두면 조용할 때 멤버끼리 짧게 주고받습니다(속도에 따라 2·4·6회). 작업 중에는 자동 수다를 쉬고, 호출 상한과 사용량 보호를 적용합니다. 「중단」이나 방 끄기로 진행 중 응답을 멈출 수 있습니다.
|
|
67
71
|
- 한국어로 대화하되 짧은 일본어 표현을 쓸 때는 이어지는 말에서 뜻을 보완하도록 안내합니다. 실제 표현은 참여 모델에 따라 달라집니다. SHION은 상담 전용으로 남습니다.
|
|
68
72
|
|
|
69
73
|
**알림과 표현**
|
|
70
74
|
|
|
71
75
|
- 완료·실패·승인 요청·선택 요청 등 상황에 맞는 캐릭터 스티커와 음성으로 알립니다(RIN · MIO · YUKI · ISANA · NOVA · SHION · HIKARI).
|
|
72
76
|
- 브라우저 알림과 PWA 설치를 지원합니다.
|
|
73
|
-
- 교훈 자동 기록을 켠 경우 저장
|
|
77
|
+
- 직접 저장한 교훈·스킬은 해당 턴 끝의 카드에서 확인합니다. 교훈 자동 기록을 켠 경우 자동 저장 알림도 작업 과정을 접어도 대화에 남습니다. 요청에 이름이 없고 필요성도 확인되지 않은 MCP 후보는 보류 안내로 나열하지 않습니다.
|
|
74
78
|
- 한국어가 기본인 인터페이스입니다(영어·중국어 간체도 선택 가능).
|
|
75
79
|
|
|
76
80
|
**omp-web에서 이어받은 기반 기능**
|
|
@@ -9,12 +9,12 @@ 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.6.
|
|
12
|
+
version: '0.6.5',
|
|
13
13
|
distribution: 'cuelo',
|
|
14
|
-
coreVersion: '18.4.
|
|
14
|
+
coreVersion: '18.4.4',
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
// OMP core 18.4.
|
|
17
|
+
// OMP core 18.4.4 `src/sdk.ts`: session-scoped AsyncJobManager for a process
|
|
18
18
|
// that hosts several top-level sessions (CUELO opens one per browser session).
|
|
19
19
|
// Upstream lets only the first top-level session construct a manager; every
|
|
20
20
|
// later one got `asyncJobManager: undefined`, so its `task` calls logged
|
|
@@ -23,7 +23,7 @@ const EXPECTED = {
|
|
|
23
23
|
// fix: it is disposed with its owning session (CUELO idle-shuts sessions
|
|
24
24
|
// after 10 minutes) and would cancel every other session's jobs, and a
|
|
25
25
|
// disposed manager throws on the next register(). Each edit is an exact text
|
|
26
|
-
// anchor of the pristine 18.4.
|
|
26
|
+
// anchor of the pristine 18.4.4 source (also present after core patch) and fails closed when it drifts.
|
|
27
27
|
// `insertBefore` edits keep their anchor (the helper is inserted in front of
|
|
28
28
|
// it), so their anchor count stays 1 after patching.
|
|
29
29
|
const SDK_FILE = path.join('node_modules', '@oh-my-pi', 'pi-coding-agent', 'src', 'sdk.ts');
|
|
@@ -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.4.
|
|
180
|
+
throw new Error('native cueloBuild metadata does not match cuelo / core 18.4.4');
|
|
181
181
|
}
|
|
182
182
|
return packageJson;
|
|
183
183
|
}
|
|
@@ -25,6 +25,11 @@ const OMP = (() => {
|
|
|
25
25
|
})();
|
|
26
26
|
const ORIGIN = 'http://127.0.0.1:' + (Number(process.env.PORT) || 30141);
|
|
27
27
|
const CACHE_MS = 60_000;
|
|
28
|
+
// 만료 뒤 이 나이까지는 직전 스냅샷을 바로 내고 뒤에서 새로 조회한다. 콜드 조회(0.25s~수 초)가
|
|
29
|
+
// maker_route의 2초 잔량 예산을 넘겨 발주 준비가 잔량 없이 끝나던 것을 막는다. 계정 차단 상태는
|
|
30
|
+
// enrich가 매 응답마다 새로 붙이므로 여기 걸리는 것은 provider 한도 수치뿐이고, 각 report의
|
|
31
|
+
// fetchedAt이 나이를 그대로 보여 준다. 무효화(at=0)된 캐시는 이 창과 무관하게 새 조회를 기다린다.
|
|
32
|
+
const STALE_MS = 10 * 60_000;
|
|
28
33
|
const CLI_TIMEOUT_MS = 30_000;
|
|
29
34
|
|
|
30
35
|
let cache = null; // { at, body }. 무효화는 at=0 으로 한다(오류 시 stale 응답을 살려 두려고).
|
|
@@ -78,6 +83,17 @@ function invalidateUsage() {
|
|
|
78
83
|
if (cache) cache.at = 0;
|
|
79
84
|
}
|
|
80
85
|
|
|
86
|
+
/** 신선하면 그대로, STALE_MS 안의 만료분이면 즉시 돌려주고 뒤에서 갱신, 그보다 오래됐거나 무효화됐으면 새 조회를 기다린다. */
|
|
87
|
+
function usageEntry(entry, refresh, now = Date.now()) {
|
|
88
|
+
const age = entry ? now - entry.at : Infinity;
|
|
89
|
+
if (age <= CACHE_MS) return entry;
|
|
90
|
+
if (age <= STALE_MS) {
|
|
91
|
+
refresh().catch(() => { /* 다음 요청이 다시 시도한다. 직전 스냅샷은 그대로 둔다. */ });
|
|
92
|
+
return entry;
|
|
93
|
+
}
|
|
94
|
+
return refresh();
|
|
95
|
+
}
|
|
96
|
+
|
|
81
97
|
const MANUAL_UNTIL_MS = 4102444800000;
|
|
82
98
|
const PRIOR_DEFAULT_BLOCK_SCOPE = 'ompweb:manual-off:prior-default';
|
|
83
99
|
const IDENTITY_KEYS = ['email', 'accountId', 'orgId', 'projectId'];
|
|
@@ -603,7 +619,7 @@ async function buildUsageBody(controls = facade, readUsage) {
|
|
|
603
619
|
if (readUsage) return JSON.stringify(await controls.enrich(await readUsage()));
|
|
604
620
|
let entry = cache;
|
|
605
621
|
try {
|
|
606
|
-
|
|
622
|
+
entry = await usageEntry(cache, fetchUsage);
|
|
607
623
|
} catch {
|
|
608
624
|
if (!entry) {
|
|
609
625
|
if (!localControl) throw controlError(502, 'usage_unavailable');
|
|
@@ -893,4 +909,5 @@ module.exports = {
|
|
|
893
909
|
MANUAL_UNTIL_MS,
|
|
894
910
|
createSampleStore,
|
|
895
911
|
applyDaySlots,
|
|
912
|
+
usageEntry,
|
|
896
913
|
};
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
그 자리에서 멈춰 원인 근거·시도한 것·남은 막힘을 보고한다.
|
|
29
29
|
- 도구·저장소·현재 문맥으로 해결할 수 있는 작업은 확인을 요청하거나 중간 단계에서 멈추지 않고 끝까지 수행한다. 단, 삭제·배포·비용 발생·호환성 파괴는 실행 전에 사용자 승인을 받는다.
|
|
30
30
|
- MCP 설치·등록·인증·권한 변경은 대상과 범위를 설명하고 먼저 사용자 승인을 받는다. 승인 뒤에는 에이전트가 가능한 설치·설정·연결·검증을 끝까지 실행한다. "사용자 승인 필요"를 "사용자가 직접 실행해야 함"으로 바꿔 해석하지 않는다. 사용자 본인 로그인·인증정보 입력·제공자 안전 확인·동의처럼 사람이 필요한 단계만 사용자에게 넘긴다. JEV 추천·필요성 판정은 사용자 승인을 대신하지 않는다.
|
|
31
|
-
- 배포 확인(사용자, 2026-09-26·2026-09-29): 집 PC(hostname `KYS`)의 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 삭제,
|
|
31
|
+
- 배포 확인(사용자, 2026-09-26·2026-09-29·2026-09-30): 집 PC(hostname `KYS`)와 사무실 PC(hostname은 비공개 배포 표에 있다)는 같은 절차를 따른다. 그 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 업데이트, 비용이 드는 작업은 따로 승인받는다.
|
|
32
32
|
- CI 감시(사용자, 2026-09-28): 커밋의 CI를 지켜볼 때는 기다릴 워크플로를 이름으로 지정하고(`gh run list --workflow <이름>` 등), 그 run이 끝나는 즉시 결과를 보고한다. 같은 SHA에 걸린 run 전체의 완료를 조건으로 삼지 않는다. CI 성공이 트리거하는 릴리스·배포 run(`workflow_run`)이 몇 초 뒤 같은 SHA로 생겨 CI 완료 보고를 붙잡기 때문이다. 이어 붙는 run은 보고한 뒤 따로 지켜본다.
|
|
33
33
|
- 구현 방법의 불확실성은 명시 요구·승인된 계약, 실제 호출부와 데이터 흐름, 테스트·재현 결과,
|
|
34
34
|
현재 동작과 문서로 좁힌다. 증거로 방향이 정해지면 근거를 남기고 진행하며 사소한 구현 선택마다
|
|
@@ -6,7 +6,7 @@ thinking-level: medium
|
|
|
6
6
|
tools: [read, bash, edit, write, grep, glob, skim, lsp, eval, generate_image, ast_grep, ast_edit, debug, todo, web_search, checkpoint]
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
<!-- omp-global-config:generated source-hash=
|
|
9
|
+
<!-- omp-global-config:generated source-hash=4e5719c2a636
|
|
10
10
|
이 파일은 patches/build-agents.mjs 가 만든 빌드 산출물이다. 직접 수정하지 마라.
|
|
11
11
|
고칠 곳: agent/sop/maker.md · agent/sop/_writer.md · agent/sop/_common.md
|
|
12
12
|
재생성: node patches/build-agents.mjs 검사: node patches/build-agents.mjs --check
|
|
@@ -53,11 +53,9 @@ is yours end to end.
|
|
|
53
53
|
must stay up. Give that service a name unique to your session - core 18.3.0 stops and replaces a
|
|
54
54
|
live service of the same name regardless of who started it - read it with `read proc://<name>`
|
|
55
55
|
and stop it with `write proc://<name>/kill`. Reuse
|
|
56
|
-
a suitable same-revision build, server, or result first
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
environment and any needed full build, integration, or acceptance check with Main, so request or
|
|
60
|
-
reuse that artifact instead of producing your own, and never close a change with no check at all.
|
|
56
|
+
a suitable same-revision build, server, or result first; an isolated server and a full
|
|
57
|
+
production build are never the default, and when a check needs the common environment or a full
|
|
58
|
+
build, request or reuse Main's artifact instead of producing your own.
|
|
61
59
|
Never hand this validation
|
|
62
60
|
to someone else and never invent a validator handoff. A later failure must be classifiable as
|
|
63
61
|
pre-existing or newly introduced.
|
|
@@ -79,17 +77,13 @@ is yours end to end.
|
|
|
79
77
|
that now covers it, keeping the same finding id — no separate messenger or new reporting stage.
|
|
80
78
|
Never weaken an expectation, relax a fixture, or hide a failure to make validation pass.
|
|
81
79
|
- 관련 Skill을 먼저 읽고 이번 조치에 적용되는 주의사항만 이름·절/locator·위험 요약으로 추린다.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
호출하지 않는다.
|
|
86
|
-
Skill 원문·소스·로그·비밀은 보내지 않는다. 단순 보충·새 근거 없는 동일 질문은 반복하지 않는다.
|
|
87
|
-
검증 약화나 Skill 충돌·적용 불가가 나오면 문제 된 조치만 보류하고 기존 blocker/조향 DM으로
|
|
88
|
-
원문 오류 locator·Skill locator·제안 조치·보존할 수용 조건을 Main에 보낸다. 독립 작업은 계속한다.
|
|
80
|
+
pre-retry advisory를 보충하다가(Common Rules) 검증 약화나 Skill 충돌·적용 불가가 나오면 문제 된
|
|
81
|
+
조치만 보류하고 기존 blocker/조향 DM으로 원문 오류 locator·Skill locator·제안 조치·보존할 수용
|
|
82
|
+
조건을 Main에 보낸다. 독립 작업은 계속한다.
|
|
89
83
|
Jev는 통지할 위험을 찾는 보조 수단이며 검사 생략 승인자가 아니다. 필수 검사 비활성화·기대치
|
|
90
84
|
완화는 Jev가 안전하다고 하거나 응답하지 못해도 Main의 사전 판단 없이 실행하지 않는다.
|
|
91
85
|
환경 오류는 생성물 위치의 모듈 해석·경로·런타임 같은 가벼운 확인으로 먼저 좁힌 뒤 무거운 검사를
|
|
92
|
-
다시 실행한다.
|
|
86
|
+
다시 실행한다.
|
|
93
87
|
- Capture original source, contracts, impact-bearing caller locators, and before/after evidence
|
|
94
88
|
during implementation for the review packet. Hand the confirmed delta and that evidence to Main,
|
|
95
89
|
who owns the mid-flight and final review and assembles it with your command evidence without
|
|
@@ -167,9 +161,9 @@ is yours end to end.
|
|
|
167
161
|
build error. Never put a broken intermediate state on the user's screen. Use the user's browser
|
|
168
162
|
only when their live session is genuinely required, or when Main tells you to hand a FINISHED
|
|
169
163
|
surface over for judgement — do not open it on your own initiative.
|
|
170
|
-
- Run surface checks in the environment Main provides
|
|
171
|
-
|
|
172
|
-
|
|
164
|
+
- Run surface checks in the environment Main provides; create a common isolation environment or
|
|
165
|
+
run a full build yourself only when the brief explicitly delegates that run. When you do launch a
|
|
166
|
+
server (delegated, or no environment exists
|
|
173
167
|
and your slice needs one), start it from the project's own `package.json` script, changing only
|
|
174
168
|
the port. Hand-reassembling the command drops bundler or runtime flags and breaks the whole
|
|
175
169
|
dependency graph. When an existing environment already reflects your revision, confirm its
|
|
@@ -255,8 +249,6 @@ is yours end to end.
|
|
|
255
249
|
- If a git command fails on `index.lock` or a worktree lock, never delete the lock file —
|
|
256
250
|
another agent may be working in the same repository. Re-analyze, wait briefly, and retry at
|
|
257
251
|
most once; if the identical lock failure appears a second time, stop and report it to Main.
|
|
258
|
-
- You have **no verdict authority**. Never report `PASS`/`FAIL` on someone else's work; report
|
|
259
|
-
facts and let the caller judge.
|
|
260
252
|
|
|
261
253
|
## Common Rules
|
|
262
254
|
|
|
@@ -271,13 +263,12 @@ is yours end to end.
|
|
|
271
263
|
the change to named files, that list is the boundary: read access is never write permission,
|
|
272
264
|
and unrelated cleanup, unrelated features, and other owners' files stay untouched.
|
|
273
265
|
- Run only the validation that the brief or role-specific rules authorize. The Maker runs the
|
|
274
|
-
minimum focused checks its own slice needs
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
locators and never repeats the owner's focused check in the same environment.
|
|
266
|
+
minimum focused checks its own slice needs and builds no separate environment; Main owns the
|
|
267
|
+
common isolation environment and any needed full build, integration, or acceptance check, runs
|
|
268
|
+
them once on the frozen revision without editing it, owns the mid-flight and final review from
|
|
269
|
+
the owner's immutable raw artifacts and locators, and never repeats the slice's focused check in
|
|
270
|
+
the same environment or edits a path a live child owns. A slice never closes with no check at
|
|
271
|
+
all. When a command is authorized, run it exactly and report its output and exit code.
|
|
281
272
|
- Resolve ambiguity with evidence first: the explicit requirement, the approved contract, real
|
|
282
273
|
callers and data flow, tests and reproductions, and current behavior with its documentation.
|
|
283
274
|
Once that evidence settles the direction, record the basis and continue; do not stop for
|
|
@@ -302,7 +293,7 @@ is yours end to end.
|
|
|
302
293
|
tools. Read that advisory and supplement only what the runtime cannot observe — applicable Skill
|
|
303
294
|
guidance, approval, and unobservable judgment. Never re-ask the observed parts yourself and never
|
|
304
295
|
make a second batched `judge()` call for them. Send only your
|
|
305
|
-
minimal structured summary, never the raw user/system prompt, source, diff, secret, or raw tool
|
|
296
|
+
minimal structured summary, never the raw user/system prompt, Skill text, source, diff, secret, or raw tool
|
|
306
297
|
output. A probabilistic bool is true at `>= 0.5`. When the cause is the same and no new evidence
|
|
307
298
|
or condition exists, stop the identical retry and re-analyze or report. Otherwise change the next
|
|
308
299
|
action from the new evidence and use the authentication/provider-versus-code result to choose the
|
|
@@ -327,20 +318,14 @@ is yours end to end.
|
|
|
327
318
|
- Rework invalidates only what it touched. Redo the check it invalidates, review the diff, inputs,
|
|
328
319
|
impact-bearing callers, and domain evidence Main marks invalidated, and reuse the unaffected
|
|
329
320
|
source, caller, and raw evidence.
|
|
330
|
-
- Main owns the final orchestration verdict. Never declare it
|
|
321
|
+
- Main owns the final orchestration verdict. Never declare it, and never report `PASS`/`FAIL` on
|
|
322
|
+
someone else's work; report facts and let the caller judge.
|
|
331
323
|
- Automatic result delivery is the default for every async role and job; never send a duplicate
|
|
332
|
-
completion message for a terminal result. You have no `wait` tool
|
|
333
|
-
top-level session only
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
peer message, or owned service exit) with a 30-minute safety cap and never returns empty-handed,
|
|
338
|
-
so there is no ladder or window to count; re-waiting after an unrelated event while the awaited
|
|
339
|
-
target is still unfinished is the normal path. Still banned: re-waiting after the terminal result
|
|
340
|
-
is already in hand, repeated `read proc://` status checks without a changed decision point,
|
|
341
|
-
timer/sleep-based waiting, and a wait with no unfinished target. The canonical values are in
|
|
342
|
-
`harness-policy.json` `mainLane.waitContract`. User steering may interrupt that call; after
|
|
343
|
-
handling it, resume the still-required barrier once. Elapsed time is not failure evidence or
|
|
324
|
+
completion message for a terminal result. You have no `wait` tool (core gives it to the
|
|
325
|
+
top-level session only): results of jobs you launched re-wake your session automatically, so
|
|
326
|
+
keep working and never build a substitute for waiting — no repeated `read proc://` status checks
|
|
327
|
+
without a changed decision point and no timer/sleep-based waiting. Main's barrier semantics are
|
|
328
|
+
`harness-policy.json` `mainLane.waitContract`. Elapsed time is not failure evidence or
|
|
344
329
|
permission to reduce scope or validation.
|
|
345
330
|
- Neither automatic delivery nor Main's `wait` shows progress. While a job you launched or an awaited
|
|
346
331
|
target runs a long external build, install, or test, observe that work directly —
|
|
@@ -376,8 +361,6 @@ is yours end to end.
|
|
|
376
361
|
|
|
377
362
|
## Conversation
|
|
378
363
|
|
|
379
|
-
- Write user-facing prose in Korean. Keep code, commands, filenames, API names, and original error
|
|
380
|
-
messages verbatim.
|
|
381
364
|
- **Every line of prose you emit is Korean, not only the final report.** The one-line narration
|
|
382
365
|
you write while working ("I'll start by reading...", "Now checking X") is rendered straight
|
|
383
366
|
into the user's chat window as your own inline utterance next to your account face, so it is
|
|
@@ -562,12 +562,14 @@ export function registerMakerRouting(pi: ExtensionAPI, deps: RoutingDeps) {
|
|
|
562
562
|
if (retryable.length > 0) {
|
|
563
563
|
// 같은 준비→발주 계약에서 같은 provider의 online 갱신은 한 번만 시작하고,
|
|
564
564
|
// 서로 다른 provider는 함께 시작한다. 새 prepare/reset은 새 map으로 다시 시도한다.
|
|
565
|
+
// refreshProvider는 그 provider의 rate-limit 쿨다운(suppressed selector)을 지우고 정적 모델을
|
|
566
|
+
// 다시 읽으므로, 발견만 다시 하는 refreshDiscoverableProviders를 쓴다(character-voice와 같은 경로).
|
|
565
567
|
const attempt = (provider: string): Promise<string | null> => {
|
|
566
568
|
const shared = attempts?.get(provider);
|
|
567
569
|
if (shared) return shared;
|
|
568
570
|
const started = (async () => {
|
|
569
571
|
try {
|
|
570
|
-
await ctx.modelRegistry.
|
|
572
|
+
await ctx.modelRegistry.refreshDiscoverableProviders([provider], "online");
|
|
571
573
|
return null;
|
|
572
574
|
} catch (error) {
|
|
573
575
|
return `provider 갱신 실패: ${error instanceof Error ? error.message : String(error)}`;
|
|
@@ -640,7 +642,7 @@ export function registerMakerRouting(pi: ExtensionAPI, deps: RoutingDeps) {
|
|
|
640
642
|
}
|
|
641
643
|
};
|
|
642
644
|
|
|
643
|
-
const INSTRUCTION = "Main은 profile·recommendations.uiUxBoundary·placement·history를 보고 후보와 concrete effort를 지정합니다. 등급 NORMAL/HARD와 모델 이름을 구분합니다.
|
|
645
|
+
const INSTRUCTION = "Main은 profile·recommendations.uiUxBoundary·placement·history를 보고 후보와 concrete effort(model selector suffix, 그 후보의 efforts 안)를 지정합니다. 등급 NORMAL/HARD와 모델 이름을 구분합니다. 한도 미관측은 소진이 아닙니다. 기존 NORMAL의 명시적 Opus 선택은 ROUTING_REASON으로 유지하고, 같은 Opus owner와 완료된 비-UI 작업은 재사용합니다. 계정 쿨다운·리셋은 유지합니다. 추천 변경·Jev 불가·기존 owner 대신 새 발주는 ROUTING_REASON 한 줄을 남깁니다. 발주는 context='PREPARED_CONTEXT', task='PREPARED_TASK: <preparedId>'로 원문을 재사용합니다.";
|
|
644
646
|
/** 배치 공통 정보(candidates·quota·instruction)는 한 번만, task별 route는 배열로 돌려준다. */
|
|
645
647
|
async function prepareBatch(context: string, tasks: RouteTask[], ctx: ExtensionContext, signal?: AbortSignal, callId = "") {
|
|
646
648
|
const current = policy();
|
|
@@ -1032,7 +1034,9 @@ export function registerMakerRouting(pi: ExtensionAPI, deps: RoutingDeps) {
|
|
|
1032
1034
|
// core가 위 schema로 검증한 입력이며 SDK generic 경계에서 소실된 타입만 복원한다.
|
|
1033
1035
|
const request = params as { context: string; tasks: RouteTask[] };
|
|
1034
1036
|
const batch = await prepareBatch(request.context, request.tasks, ctx, signal, String(callId ?? ""));
|
|
1035
|
-
|
|
1037
|
+
// 준비 handle(plan)은 발주 identity가 아니므로(routing_verdict는 spawn identity) 모델 문맥에는 싣지 않고 details에만 둔다.
|
|
1038
|
+
const view = { ...batch, routes: batch.routes.map(({ plan: _plan, ...route }) => route) };
|
|
1039
|
+
return { content: [{ type: "text", text: JSON.stringify(view) }], details: batch };
|
|
1036
1040
|
},
|
|
1037
1041
|
});
|
|
1038
1042
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- source-fingerprint:
|
|
1
|
+
<!-- source-fingerprint: a136dd099e511b1d -->
|
|
2
2
|
# Global Rules
|
|
3
3
|
|
|
4
4
|
(Model-facing English copy of the Korean source `RULES.md`.)
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
- Do not repeat the same action under the same conditions. Diagnosis that narrows the cause from observation and changes the next action accordingly is not blind retrying; the same error string alone does not make it the same attempt. If after the first failure there is neither an action to change nor a safe path forward, do not confirm the same failure a second time — stop there and report the cause evidence, what was tried, and the remaining blocker.
|
|
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
|
-
- Deploy confirmation (user, 2026-09-26 and 2026-09-
|
|
16
|
+
- 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. 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.
|
|
17
17
|
- CI watching (user, 2026-09-28): 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.
|
|
18
18
|
- 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.
|
|
19
19
|
- Direct causes found within the approved goal, and regressions your change created, are fixed and verified without the user asking again. Outside the allowed boundary, other owners' files, and cleanup or features unrelated to the original completion criteria remain out of scope; being able to read something is not permission to modify it.
|
|
@@ -11,13 +11,12 @@
|
|
|
11
11
|
the change to named files, that list is the boundary: read access is never write permission,
|
|
12
12
|
and unrelated cleanup, unrelated features, and other owners' files stay untouched.
|
|
13
13
|
- Run only the validation that the brief or role-specific rules authorize. The Maker runs the
|
|
14
|
-
minimum focused checks its own slice needs
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
locators and never repeats the owner's focused check in the same environment.
|
|
14
|
+
minimum focused checks its own slice needs and builds no separate environment; Main owns the
|
|
15
|
+
common isolation environment and any needed full build, integration, or acceptance check, runs
|
|
16
|
+
them once on the frozen revision without editing it, owns the mid-flight and final review from
|
|
17
|
+
the owner's immutable raw artifacts and locators, and never repeats the slice's focused check in
|
|
18
|
+
the same environment or edits a path a live child owns. A slice never closes with no check at
|
|
19
|
+
all. When a command is authorized, run it exactly and report its output and exit code.
|
|
21
20
|
- Resolve ambiguity with evidence first: the explicit requirement, the approved contract, real
|
|
22
21
|
callers and data flow, tests and reproductions, and current behavior with its documentation.
|
|
23
22
|
Once that evidence settles the direction, record the basis and continue; do not stop for
|
|
@@ -42,7 +41,7 @@
|
|
|
42
41
|
tools. Read that advisory and supplement only what the runtime cannot observe — applicable Skill
|
|
43
42
|
guidance, approval, and unobservable judgment. Never re-ask the observed parts yourself and never
|
|
44
43
|
make a second batched `judge()` call for them. Send only your
|
|
45
|
-
minimal structured summary, never the raw user/system prompt, source, diff, secret, or raw tool
|
|
44
|
+
minimal structured summary, never the raw user/system prompt, Skill text, source, diff, secret, or raw tool
|
|
46
45
|
output. A probabilistic bool is true at `>= 0.5`. When the cause is the same and no new evidence
|
|
47
46
|
or condition exists, stop the identical retry and re-analyze or report. Otherwise change the next
|
|
48
47
|
action from the new evidence and use the authentication/provider-versus-code result to choose the
|
|
@@ -67,20 +66,14 @@
|
|
|
67
66
|
- Rework invalidates only what it touched. Redo the check it invalidates, review the diff, inputs,
|
|
68
67
|
impact-bearing callers, and domain evidence Main marks invalidated, and reuse the unaffected
|
|
69
68
|
source, caller, and raw evidence.
|
|
70
|
-
- Main owns the final orchestration verdict. Never declare it
|
|
69
|
+
- Main owns the final orchestration verdict. Never declare it, and never report `PASS`/`FAIL` on
|
|
70
|
+
someone else's work; report facts and let the caller judge.
|
|
71
71
|
- Automatic result delivery is the default for every async role and job; never send a duplicate
|
|
72
|
-
completion message for a terminal result. You have no `wait` tool
|
|
73
|
-
top-level session only
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
peer message, or owned service exit) with a 30-minute safety cap and never returns empty-handed,
|
|
78
|
-
so there is no ladder or window to count; re-waiting after an unrelated event while the awaited
|
|
79
|
-
target is still unfinished is the normal path. Still banned: re-waiting after the terminal result
|
|
80
|
-
is already in hand, repeated `read proc://` status checks without a changed decision point,
|
|
81
|
-
timer/sleep-based waiting, and a wait with no unfinished target. The canonical values are in
|
|
82
|
-
`harness-policy.json` `mainLane.waitContract`. User steering may interrupt that call; after
|
|
83
|
-
handling it, resume the still-required barrier once. Elapsed time is not failure evidence or
|
|
72
|
+
completion message for a terminal result. You have no `wait` tool (core gives it to the
|
|
73
|
+
top-level session only): results of jobs you launched re-wake your session automatically, so
|
|
74
|
+
keep working and never build a substitute for waiting — no repeated `read proc://` status checks
|
|
75
|
+
without a changed decision point and no timer/sleep-based waiting. Main's barrier semantics are
|
|
76
|
+
`harness-policy.json` `mainLane.waitContract`. Elapsed time is not failure evidence or
|
|
84
77
|
permission to reduce scope or validation.
|
|
85
78
|
- Neither automatic delivery nor Main's `wait` shows progress. While a job you launched or an awaited
|
|
86
79
|
target runs a long external build, install, or test, observe that work directly —
|
|
@@ -116,8 +109,6 @@
|
|
|
116
109
|
|
|
117
110
|
## Conversation
|
|
118
111
|
|
|
119
|
-
- Write user-facing prose in Korean. Keep code, commands, filenames, API names, and original error
|
|
120
|
-
messages verbatim.
|
|
121
112
|
- **Every line of prose you emit is Korean, not only the final report.** The one-line narration
|
|
122
113
|
you write while working ("I'll start by reading...", "Now checking X") is rendered straight
|
|
123
114
|
into the user's chat window as your own inline utterance next to your account face, so it is
|
|
@@ -36,11 +36,9 @@
|
|
|
36
36
|
must stay up. Give that service a name unique to your session - core 18.3.0 stops and replaces a
|
|
37
37
|
live service of the same name regardless of who started it - read it with `read proc://<name>`
|
|
38
38
|
and stop it with `write proc://<name>/kill`. Reuse
|
|
39
|
-
a suitable same-revision build, server, or result first
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
environment and any needed full build, integration, or acceptance check with Main, so request or
|
|
43
|
-
reuse that artifact instead of producing your own, and never close a change with no check at all.
|
|
39
|
+
a suitable same-revision build, server, or result first; an isolated server and a full
|
|
40
|
+
production build are never the default, and when a check needs the common environment or a full
|
|
41
|
+
build, request or reuse Main's artifact instead of producing your own.
|
|
44
42
|
Never hand this validation
|
|
45
43
|
to someone else and never invent a validator handoff. A later failure must be classifiable as
|
|
46
44
|
pre-existing or newly introduced.
|
|
@@ -62,17 +60,13 @@
|
|
|
62
60
|
that now covers it, keeping the same finding id — no separate messenger or new reporting stage.
|
|
63
61
|
Never weaken an expectation, relax a fixture, or hide a failure to make validation pass.
|
|
64
62
|
- 관련 Skill을 먼저 읽고 이번 조치에 적용되는 주의사항만 이름·절/locator·위험 요약으로 추린다.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
호출하지 않는다.
|
|
69
|
-
Skill 원문·소스·로그·비밀은 보내지 않는다. 단순 보충·새 근거 없는 동일 질문은 반복하지 않는다.
|
|
70
|
-
검증 약화나 Skill 충돌·적용 불가가 나오면 문제 된 조치만 보류하고 기존 blocker/조향 DM으로
|
|
71
|
-
원문 오류 locator·Skill locator·제안 조치·보존할 수용 조건을 Main에 보낸다. 독립 작업은 계속한다.
|
|
63
|
+
pre-retry advisory를 보충하다가(Common Rules) 검증 약화나 Skill 충돌·적용 불가가 나오면 문제 된
|
|
64
|
+
조치만 보류하고 기존 blocker/조향 DM으로 원문 오류 locator·Skill locator·제안 조치·보존할 수용
|
|
65
|
+
조건을 Main에 보낸다. 독립 작업은 계속한다.
|
|
72
66
|
Jev는 통지할 위험을 찾는 보조 수단이며 검사 생략 승인자가 아니다. 필수 검사 비활성화·기대치
|
|
73
67
|
완화는 Jev가 안전하다고 하거나 응답하지 못해도 Main의 사전 판단 없이 실행하지 않는다.
|
|
74
68
|
환경 오류는 생성물 위치의 모듈 해석·경로·런타임 같은 가벼운 확인으로 먼저 좁힌 뒤 무거운 검사를
|
|
75
|
-
다시 실행한다.
|
|
69
|
+
다시 실행한다.
|
|
76
70
|
- Capture original source, contracts, impact-bearing caller locators, and before/after evidence
|
|
77
71
|
during implementation for the review packet. Hand the confirmed delta and that evidence to Main,
|
|
78
72
|
who owns the mid-flight and final review and assembles it with your command evidence without
|
|
@@ -150,9 +144,9 @@
|
|
|
150
144
|
build error. Never put a broken intermediate state on the user's screen. Use the user's browser
|
|
151
145
|
only when their live session is genuinely required, or when Main tells you to hand a FINISHED
|
|
152
146
|
surface over for judgement — do not open it on your own initiative.
|
|
153
|
-
- Run surface checks in the environment Main provides
|
|
154
|
-
|
|
155
|
-
|
|
147
|
+
- Run surface checks in the environment Main provides; create a common isolation environment or
|
|
148
|
+
run a full build yourself only when the brief explicitly delegates that run. When you do launch a
|
|
149
|
+
server (delegated, or no environment exists
|
|
156
150
|
and your slice needs one), start it from the project's own `package.json` script, changing only
|
|
157
151
|
the port. Hand-reassembling the command drops bundler or runtime flags and breaks the whole
|
|
158
152
|
dependency graph. When an existing environment already reflects your revision, confirm its
|
|
@@ -238,5 +232,3 @@
|
|
|
238
232
|
- If a git command fails on `index.lock` or a worktree lock, never delete the lock file —
|
|
239
233
|
another agent may be working in the same repository. Re-analyze, wait briefly, and retry at
|
|
240
234
|
most once; if the identical lock failure appears a second time, stop and report it to Main.
|
|
241
|
-
- You have **no verdict authority**. Never report `PASS`/`FAIL` on someone else's work; report
|
|
242
|
-
facts and let the caller judge.
|