cuelo 0.7.1 → 0.7.2
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 +8 -8
- package/.next/build-manifest.json +3 -3
- 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 +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- 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 +2 -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 +6 -6
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +6 -6
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/.next/server/app/index.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/page.js +18 -18
- 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 +3 -3
- package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
- package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
- package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
- package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
- 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 +8 -8
- package/.next/server/chunks/205.js +1 -1
- package/.next/server/chunks/424.js +1 -1
- package/.next/server/chunks/5582.js +2 -2
- 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-ca001f1e875e854c.js → layout-fc24ec6959a6cba5.js} +1 -1
- package/.next/static/chunks/app/page-11dfb512f246679c.js +22 -0
- package/.next/static/chunks/{webpack-13c58b226bf07c7e.js → webpack-b1a76402d0d0fa1a.js} +1 -1
- package/.next/static/css/27f16a2ddaff39eb.css +1 -0
- package/.next/static/css/88929dd0c6d44c84.css +1 -0
- package/.next/trace +106 -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/OMP_Global_Config/agent/extensions/jev-runtime.ts +22 -11
- package/Tools/OMP_Global_Config/agent/extensions/korean-reply-guard.ts +174 -0
- package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +11 -15
- package/Tools/OMP_Global_Config/agent/rules/verdict.md +3 -0
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +220 -20
- package/package.json +7 -7
- package/.next/static/chunks/app/page-ce1990eb55a57ad6.js +0 -22
- package/.next/static/css/bb6b220f400250d8.css +0 -1
- package/.next/static/css/d0ec5531aef136d6.css +0 -1
- /package/.next/static/{vl7SKOdL2Zksd2mJ3tjOQ → 5vW3pyOv87cK3zk2pchwv}/_buildManifest.js +0 -0
- /package/.next/static/{vl7SKOdL2Zksd2mJ3tjOQ → 5vW3pyOv87cK3zk2pchwv}/_ssgManifest.js +0 -0
|
@@ -53,6 +53,17 @@ function resolveTarget() {
|
|
|
53
53
|
return found ?? seen[seen.length - 1];
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
/**
|
|
57
|
+
* #310(Opus 5.5 Claude API 구운 models.json 행)의 18.4.6 후보. 18.4.10 후보는 이 문자열에서 만든다(EDITS 의
|
|
58
|
+
* pi-catalog models.json 항목 주석). 18.4.6 라이브 적용본이 그대로 applied 여야 하므로 바꾸지 않는다.
|
|
59
|
+
*/
|
|
60
|
+
const OPUS55_ROW_1846 = {
|
|
61
|
+
file: "../pi-catalog/src/models.json",
|
|
62
|
+
marker: '"supportsDisplay":true,"prefixBinding":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":true',
|
|
63
|
+
anchor: '"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","api":"anthropic-messages","provider":"anthropic","baseUrl":"https://api.anthropic.com","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.2,"cacheWrite":5},"contextWindow":1000000,"maxTokens":128000,"int":57.6,"tps":95.2,"thinking":{"mode":"anthropic-adaptive","efforts":["low","medium","high","xhigh","max"],"supportsDisplay":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":false',
|
|
64
|
+
patched: '"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","api":"anthropic-messages","provider":"anthropic","baseUrl":"https://api.anthropic.com","reasoning":true,"input":["text","image"],"cost":{"input":4,"output":20,"cacheRead":0.2,"cacheWrite":5},"contextWindow":1000000,"maxTokens":128000,"int":57.6,"tps":95.2,"thinking":{"mode":"anthropic-adaptive","efforts":["low","medium","high","xhigh","max"],"supportsDisplay":true,"prefixBinding":true},"identity":{"class":"anthropic","family":"opus","revision":"5.5.0"},"requiresGlyphTokenization":true,"tokenizer":"claude-v5","supportsComputerUse":false,"compat":{"officialEndpoint":true,"signingEndpoint":true,"supportsContextManagement":true,"supportsServerCompaction":true,"firstPartyProvider":true,"supportsOutputEffort":true,"disableStrictTools":false,"disableAdaptiveThinking":false,"allowAnthropicHeaderOverrides":false,"supportsEagerToolInputStreaming":true,"supportsLongCacheRetention":true,"supportsMidConversationSystem":true,"supportsTurnScopedSystem":true,"supportsMidConversationToolChanges":true,"supportsPerMessageEffort":true,"supportsThinkingBindingControls":true',
|
|
65
|
+
};
|
|
66
|
+
|
|
56
67
|
/** 각 항목: 원본 앵커를 찾아 patched 로 바꾼다. marker 가 있으면 이미 적용된 것으로 본다. */
|
|
57
68
|
const EDITS = [
|
|
58
69
|
{
|
|
@@ -1587,15 +1598,29 @@ function resolveSubagentRetryFallbackCandidates(
|
|
|
1587
1598
|
{
|
|
1588
1599
|
// 승인 후보로 돌았어도 세션의 첫 model_change 는 요청 selector 를 함께 남겨야
|
|
1589
1600
|
// 한다(코어가 대체한 셀렉터만 남기면 요청과 실제가 구분되지 않는다).
|
|
1601
|
+
// 18.4.10(#14040)은 옵션 빌더 함수를 `sessionSpec: SubagentSessionSpec = { options: { … } }`로 바꿔 한 단계 더
|
|
1602
|
+
// 들여쓴다. 같은 options 객체가 spawn·revive 모두에 쓰이는 점은 그대로다. alternate는 18.4.6 형태다. 두 후보의
|
|
1603
|
+
// marker는 줄 앞 개행과 들여쓰기까지 넣어 서로의 결과에 들어 있지 않게 했다.
|
|
1590
1604
|
file: "src/task/executor.ts",
|
|
1591
|
-
marker: "
|
|
1592
|
-
anchor: `
|
|
1605
|
+
marker: "\n\t\t\t\t\tmodelPatternRequested: modelPatterns.length > 0",
|
|
1606
|
+
anchor: ` modelPatternAuthFallback:
|
|
1607
|
+
model || modelOverride === undefined ? undefined : options.parentActiveModelPattern,`,
|
|
1608
|
+
patched: ` modelPatternAuthFallback:
|
|
1609
|
+
model || modelOverride === undefined ? undefined : options.parentActiveModelPattern,
|
|
1610
|
+
modelPatternAuthFallbackUsed:
|
|
1611
|
+
authFallbackUsed || approvedModelSelection?.substituted === true || undefined,
|
|
1612
|
+
modelPatternRequested: modelPatterns.length > 0 ? modelPatterns.join(", ") : undefined,`,
|
|
1613
|
+
alternates: [{
|
|
1614
|
+
file: "src/task/executor.ts",
|
|
1615
|
+
marker: "\n\t\t\t\tmodelPatternRequested: modelPatterns.length > 0",
|
|
1616
|
+
anchor: ` modelPatternAuthFallback:
|
|
1593
1617
|
model || modelOverride === undefined ? undefined : options.parentActiveModelPattern,`,
|
|
1594
|
-
|
|
1618
|
+
patched: ` modelPatternAuthFallback:
|
|
1595
1619
|
model || modelOverride === undefined ? undefined : options.parentActiveModelPattern,
|
|
1596
1620
|
modelPatternAuthFallbackUsed:
|
|
1597
1621
|
authFallbackUsed || approvedModelSelection?.substituted === true || undefined,
|
|
1598
1622
|
modelPatternRequested: modelPatterns.length > 0 ? modelPatterns.join(", ") : undefined,`,
|
|
1623
|
+
}],
|
|
1599
1624
|
},
|
|
1600
1625
|
{
|
|
1601
1626
|
// 대체된 모델로 시작한 세션을 transcript 에서 구분할 수 있게 남긴다. 요청 selector
|
|
@@ -2996,6 +3021,79 @@ import { isUnexpectedSocketCloseMessage } from "@oh-my-pi/pi-utils/fetch-retry";
|
|
|
2996
3021
|
: {}),
|
|
2997
3022
|
};`,
|
|
2998
3023
|
},
|
|
3024
|
+
// 18.4.9(#14001)는 같은 계정 재기록의 persisted row 쓰기를 건너뛴다(#persistedSticky: type·credentialId·explicit·60초).
|
|
3025
|
+
// 이 비교에 exactLabel이 없으면 같은 계정에서 summon label만 바뀐 pin(일반 명시 pin → exact summon, 또는 그 반대)이
|
|
3026
|
+
// DB 행에 반영되지 않아, 다른 프로세스·재시작이 옛 정체성으로 복원한다(RIN exact pin이 사라져 sibling 회전 가능).
|
|
3027
|
+
// 아래 세 항목이 그 비교·기록·복원에 exactLabel을 넣는다. 검증: core-character-affinity-test.ts [7].
|
|
3028
|
+
// 18.4.6 은 record 마다 행을 다시 쓰므로(dedupe 없음) 할 일이 없다: alternate는 그 판의 매번-쓰기 줄 no-op이다.
|
|
3029
|
+
{
|
|
3030
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
3031
|
+
marker: "a label-only change must rewrite the row",
|
|
3032
|
+
anchor: "\texplicit: boolean;\n\tlastUsedAtMs: number;\n};\n",
|
|
3033
|
+
patched: "\texplicit: boolean;\n\tlastUsedAtMs: number;\n\t/** CUELO: exact summon label stored in the row; a label-only change must rewrite the row. */\n\texactLabel: string | undefined;\n};\n",
|
|
3034
|
+
alternates: [{
|
|
3035
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
3036
|
+
marker: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3037
|
+
anchor: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3038
|
+
patched: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3039
|
+
}],
|
|
3040
|
+
},
|
|
3041
|
+
{
|
|
3042
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
3043
|
+
marker: "\t\t\tpersisted.exactLabel === keptExactLabel &&\n",
|
|
3044
|
+
anchor: ` persisted.explicit === isExplicit &&
|
|
3045
|
+
Math.abs(nowMs - persisted.lastUsedAtMs) < SESSION_STICKY_PERSIST_INTERVAL_MS
|
|
3046
|
+
) {
|
|
3047
|
+
return;
|
|
3048
|
+
}
|
|
3049
|
+
try {
|
|
3050
|
+
this.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);
|
|
3051
|
+
this.#persistedSticky.set(cacheKey, {
|
|
3052
|
+
type,
|
|
3053
|
+
credentialId,
|
|
3054
|
+
explicit: isExplicit,
|
|
3055
|
+
lastUsedAtMs: nowMs,
|
|
3056
|
+
});`,
|
|
3057
|
+
patched: ` persisted.explicit === isExplicit &&
|
|
3058
|
+
persisted.exactLabel === keptExactLabel &&
|
|
3059
|
+
Math.abs(nowMs - persisted.lastUsedAtMs) < SESSION_STICKY_PERSIST_INTERVAL_MS
|
|
3060
|
+
) {
|
|
3061
|
+
return;
|
|
3062
|
+
}
|
|
3063
|
+
try {
|
|
3064
|
+
this.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);
|
|
3065
|
+
this.#persistedSticky.set(cacheKey, {
|
|
3066
|
+
type,
|
|
3067
|
+
credentialId,
|
|
3068
|
+
explicit: isExplicit,
|
|
3069
|
+
lastUsedAtMs: nowMs,
|
|
3070
|
+
exactLabel: keptExactLabel,
|
|
3071
|
+
});`,
|
|
3072
|
+
alternates: [{
|
|
3073
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
3074
|
+
marker: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3075
|
+
anchor: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3076
|
+
patched: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3077
|
+
}],
|
|
3078
|
+
},
|
|
3079
|
+
{
|
|
3080
|
+
// 복원한 행을 dedupe 기준으로 삼을 때도 그 행의 label을 같이 기억한다(바로 위 sessionVal은 위 항목이 trim한 값).
|
|
3081
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
3082
|
+
marker: "\t\t\t\t\t\texactLabel: sessionVal.exactLabel,\n",
|
|
3083
|
+
anchor: ` explicit: val.explicit === true,
|
|
3084
|
+
lastUsedAtMs: val.lastUsedAtMs,
|
|
3085
|
+
});`,
|
|
3086
|
+
patched: ` explicit: val.explicit === true,
|
|
3087
|
+
lastUsedAtMs: val.lastUsedAtMs,
|
|
3088
|
+
exactLabel: sessionVal.exactLabel,
|
|
3089
|
+
});`,
|
|
3090
|
+
alternates: [{
|
|
3091
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
3092
|
+
marker: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3093
|
+
anchor: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3094
|
+
patched: "\t\t\t\t// Expires in 30 days\n\t\t\t\tconst expiresAtSec = Math.floor(nowMs / 1000) + 30 * 24 * 60 * 60;\n\t\t\t\tthis.#store.setCache(cacheKey, JSON.stringify(sessionCredential), expiresAtSec);\n",
|
|
3095
|
+
}],
|
|
3096
|
+
},
|
|
2999
3097
|
{
|
|
3000
3098
|
file: "../pi-ai/src/auth/affinity.ts",
|
|
3001
3099
|
marker: "exactLabel(provider: string, sessionId: string | undefined): string | undefined {",
|
|
@@ -8138,21 +8236,32 @@ function parentSubagentServiceTiers(
|
|
|
8138
8236
|
// controls가 둘 다 참일 때만 나간다(anthropic.ts prefixMismatchBehavior). models.yml은 thinking override의
|
|
8139
8237
|
// prefixBinding을 스키마에서 조용히 버리고 공개 설치에는 없으므로 설정으로 켜지 않는다.
|
|
8140
8238
|
{
|
|
8239
|
+
// 18.4.10(#14019)은 이 행에 prefixBinding을 넣었지만 binding controls는 false로 남긴다. 18.4.10 후보는 binding controls만 켠다.
|
|
8240
|
+
// 그 결과가 18.4.6 적용본과 바이트까지 같으면 두 후보가 함께 applied(ambiguous)이고, 문맥으로도 가를 수 없다(가장 가까운
|
|
8241
|
+
// 18.4.6↔18.4.10 차이가 앵커 앞 53K자·뒤 249K자). 그래서 18.4.10 결과만 `": true"` 공백으로 구분한다. JSON.parse는 이 공백을 무시한다.
|
|
8141
8242
|
file: "../pi-catalog/src/models.json",
|
|
8142
|
-
marker:
|
|
8143
|
-
anchor:
|
|
8144
|
-
patched:
|
|
8145
|
-
|
|
8146
|
-
|
|
8147
|
-
|
|
8148
|
-
//
|
|
8149
|
-
//
|
|
8150
|
-
//
|
|
8243
|
+
marker: OPUS55_ROW_1846.marker.replace('"supportsThinkingBindingControls":true', '"supportsThinkingBindingControls": true'),
|
|
8244
|
+
anchor: OPUS55_ROW_1846.anchor.replace('"supportsDisplay":true}', '"supportsDisplay":true,"prefixBinding":true}'),
|
|
8245
|
+
patched: OPUS55_ROW_1846.patched.replace('"supportsThinkingBindingControls":true', '"supportsThinkingBindingControls": true'),
|
|
8246
|
+
alternates: [OPUS55_ROW_1846],
|
|
8247
|
+
},
|
|
8248
|
+
{
|
|
8249
|
+
// 모든 provider의 Opus 5.5 규칙 계보에 prefixBinding(Sonnet 5.5 규칙과 같은 모양). 18.4.10은 upstream #14019가 kdl:61에
|
|
8250
|
+
// 같은 thinking.prefixBinding을 넣었으므로 할 일이 없다(본 후보: 그 upstream 줄의 no-op). 18.4.6 적용 결과와 18.4.10
|
|
8251
|
+
// 순정의 kdl:61 규칙은 바이트까지 같아서, 두 후보 모두 바로 뒤 Sonnet 5.5 규칙의 source(18.4.6 kdl:70, 18.4.10 kdl:77)까지
|
|
8252
|
+
// 앵커에 넣어 가른다. 그러지 않으면 18.4.10 순정이 18.4.6 후보로 applied가 되고 --revert가 upstream prefixBinding을 지운다.
|
|
8253
|
+
// alternate는 18.4.6(kdl:61)과 18.4.4·18.4.5 공통 kdl:60 앵커다. 18.4.4 적용본은 kdl:60 patched 바로 뒤에 binding
|
|
8254
|
+
// controls 규칙이 붙어 있어 kdl:60 marker가 그대로 성립한다.
|
|
8151
8255
|
file: "../pi-catalog/src/compat/rules.json",
|
|
8152
|
-
marker: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
8153
|
-
anchor: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false}}',
|
|
8154
|
-
patched: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
8256
|
+
marker: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:77",',
|
|
8257
|
+
anchor: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:77",',
|
|
8258
|
+
patched: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:77",',
|
|
8155
8259
|
alternates: [{
|
|
8260
|
+
file: "../pi-catalog/src/compat/rules.json",
|
|
8261
|
+
marker: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:70",',
|
|
8262
|
+
anchor: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false}},{"source":"classes/anthropic.kdl:70",',
|
|
8263
|
+
patched: '{"source":"classes/anthropic.kdl:61","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}},{"source":"classes/anthropic.kdl:70",',
|
|
8264
|
+
}, {
|
|
8156
8265
|
file: "../pi-catalog/src/compat/rules.json",
|
|
8157
8266
|
marker: '{"source":"classes/anthropic.kdl:60","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
8158
8267
|
anchor: '{"source":"classes/anthropic.kdl:60","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false}}',
|
|
@@ -8161,16 +8270,23 @@ function parentSubagentServiceTiers(
|
|
|
8161
8270
|
},
|
|
8162
8271
|
{
|
|
8163
8272
|
// binding controls 규칙은 그 버전의 upstream Sonnet 5.5 binding 규칙 바로 뒤에 같은 provider 범위로 둔다.
|
|
8164
|
-
// 18.4.
|
|
8165
|
-
//
|
|
8273
|
+
// 18.4.10: kdl:139(#13996이 Vertex를 뺀 supportsPerMessageEffort가 같은 Sonnet 규칙에 붙었다. provider 범위는 그대로
|
|
8274
|
+
// anthropic·cloudflare이고 추가하는 Opus 규칙 본문도 같다). alternate 18.4.6: kdl:129, 18.4.5: kdl:128(둘 다 anthropic·cloudflare,
|
|
8275
|
+
// 규칙 본문 동일). alternate 18.4.4:
|
|
8276
|
+
// kdl:106(anthropic·cloudflare·vertex). 18.4.10·18.4.6·18.4.5 후보는 추가 규칙이 같아 marker를 앞 Sonnet 규칙까지 포함한
|
|
8166
8277
|
// patched 전체로 둔다(같은 marker면 둘 다 applied라 ambiguous가 된다). 18.4.4 라이브 적용본은 옛 위치(kdl:60 뒤)에
|
|
8167
8278
|
// 같은 규칙이 있어 그 alternate marker로 applied이다. 그 적용본의 --revert는 patched가 연속으로 없으므로 엔진의
|
|
8168
8279
|
// 백업 경로(~/.omp/core-patch-backup)를 쓴다.
|
|
8169
8280
|
file: "../pi-catalog/src/compat/rules.json",
|
|
8170
|
-
marker: '{"source":"classes/anthropic.kdl:
|
|
8171
|
-
anchor: '{"source":"classes/anthropic.kdl:
|
|
8172
|
-
patched: '{"source":"classes/anthropic.kdl:
|
|
8281
|
+
marker: '{"source":"classes/anthropic.kdl:139","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true,"supportsPerMessageEffort":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
8282
|
+
anchor: '{"source":"classes/anthropic.kdl:139","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true,"supportsPerMessageEffort":true}}',
|
|
8283
|
+
patched: '{"source":"classes/anthropic.kdl:139","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true,"supportsPerMessageEffort":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
8173
8284
|
alternates: [{
|
|
8285
|
+
file: "../pi-catalog/src/compat/rules.json",
|
|
8286
|
+
marker: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
8287
|
+
anchor: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
8288
|
+
patched: '{"source":"classes/anthropic.kdl:129","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
8289
|
+
}, {
|
|
8174
8290
|
file: "../pi-catalog/src/compat/rules.json",
|
|
8175
8291
|
marker: '{"source":"classes/anthropic.kdl:128","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}},{"source":"cuelo:opus-5.5-thinking-binding","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
8176
8292
|
anchor: '{"source":"classes/anthropic.kdl:128","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"sonnet","revision":[{"op":">=","revision":"5.5.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
@@ -8354,6 +8470,14 @@ function parentSubagentServiceTiers(
|
|
|
8354
8470
|
marker: 'import { createRatchetPrelude } from "./ratchet/prelude.ts";',
|
|
8355
8471
|
anchor: 'import { createRatchetPrelude } from "./ratchet/prelude";',
|
|
8356
8472
|
patched: 'import { createRatchetPrelude } from "./ratchet/prelude.ts";',
|
|
8473
|
+
// 18.4.10: upstream #14027/#14029가 모듈을 `ratchet/prelude-definition.ts`로 개명해 같은 stem 충돌이 없어졌다(RETIRE).
|
|
8474
|
+
// 그 upstream import 줄 자체의 no-op이다. 18.4.6(KYS·라이브)은 위 본 후보가 계속 필요하다.
|
|
8475
|
+
alternates: [{
|
|
8476
|
+
file: "src/sdk.ts",
|
|
8477
|
+
marker: 'import { createRatchetPrelude } from "./ratchet/prelude-definition";',
|
|
8478
|
+
anchor: 'import { createRatchetPrelude } from "./ratchet/prelude-definition";',
|
|
8479
|
+
patched: 'import { createRatchetPrelude } from "./ratchet/prelude-definition";',
|
|
8480
|
+
}],
|
|
8357
8481
|
},
|
|
8358
8482
|
// P55. genuine 사용자 steer 가 진행 중 모델 요청을 끝까지 기다리지 않게 한다(사용자 결정: 즉시 반영, 재추론 사용량 감수).
|
|
8359
8483
|
// 2026-10-01 사용자 관측: Astra(xhigh) 4분짜리 추론 요청 중 넣은 steer 가 그 요청이 끝날 때까지(98.8s·169.6s)
|
|
@@ -8697,6 +8821,82 @@ class HarmonyLeakInterruption extends Error {`,
|
|
|
8697
8821
|
anchor: "\t\t\tdurationMs: job.durationMs,\n\t\t\t...(job.meta ? { meta: job.meta } : {}),\n",
|
|
8698
8822
|
patched: "\t\t\tdurationMs: job.durationMs,\n\t\t\t...(job.status ? { status: job.status } : {}),\n\t\t\t...(job.meta ? { meta: job.meta } : {}),\n",
|
|
8699
8823
|
},
|
|
8824
|
+
// 이슈 #10: extension 의 getAsyncJobSnapshot 은 인자를 받지 않고(ExtensionContext 타입·runner·sdk adapter) 기본 recent 5개만
|
|
8825
|
+
// 돌려줘, 같은 owner 의 더 최근 job 5개에 밀린 취소 실행의 종료 근거(같은 실행의 cancelled·endTime)를 볼 수 없었다. options 를
|
|
8826
|
+
// 끝까지 전달하고, `jobIds` 를 준 호출에만 그 id 들의 exact row 를 `jobs` 로 더한다. 기존 owner filter·foreground 제외를 그대로
|
|
8827
|
+
// 쓰고 getJob O(k) 조회라 정렬·전체 복사가 없다. jobIds 가 없으면 반환 형태와 기본 recent 5 는 그대로다.
|
|
8828
|
+
{
|
|
8829
|
+
file: "src/session/agent-session-types.ts",
|
|
8830
|
+
marker: "export interface AsyncJobSnapshotOptions {",
|
|
8831
|
+
anchor: "/** Snapshot of running, recent, and pending-delivery asynchronous jobs. */\nexport interface AsyncJobSnapshot {\n\trunning: AsyncJobSnapshotItem[];\n\trecent: AsyncJobSnapshotItem[];\n\tdelivery: AsyncJobDeliveryState;\n}",
|
|
8832
|
+
patched: "/** Options for an {@link AsyncJobSnapshot} read. */\nexport interface AsyncJobSnapshotOptions {\n\t/** Settled rows listed in `recent`, newest first (default 5). */\n\trecentLimit?: number;\n\t/**\n\t * Exact job ids to look up regardless of the `recent` window. Rows this session owns and lists (same owner\n\t * filter; foreground-backed jobs stay hidden) are returned in `jobs`; unknown, evicted or foreign ids are omitted.\n\t */\n\tjobIds?: readonly string[];\n}\n\n/** Snapshot of running, recent, and pending-delivery asynchronous jobs. */\nexport interface AsyncJobSnapshot {\n\trunning: AsyncJobSnapshotItem[];\n\trecent: AsyncJobSnapshotItem[];\n\tdelivery: AsyncJobDeliveryState;\n\t/** Present only when `jobIds` was requested: the exact rows found for those ids, in request order. */\n\tjobs?: AsyncJobSnapshotItem[];\n}",
|
|
8833
|
+
},
|
|
8834
|
+
{
|
|
8835
|
+
file: "src/session/agent-session.ts",
|
|
8836
|
+
marker: "\tAsyncJobSnapshotOptions,\n\tCommandMetadataChangedListener,",
|
|
8837
|
+
anchor: "\tAsyncJobSnapshot,\n\tCommandMetadataChangedListener,",
|
|
8838
|
+
patched: "\tAsyncJobSnapshot,\n\tAsyncJobSnapshotOptions,\n\tCommandMetadataChangedListener,",
|
|
8839
|
+
},
|
|
8840
|
+
{
|
|
8841
|
+
file: "src/session/agent-session.ts",
|
|
8842
|
+
marker: "\tgetAsyncJobSnapshot(options?: AsyncJobSnapshotOptions): AsyncJobSnapshot | null {",
|
|
8843
|
+
anchor: "\tgetAsyncJobSnapshot(options?: { recentLimit?: number }): AsyncJobSnapshot | null {",
|
|
8844
|
+
patched: "\tgetAsyncJobSnapshot(options?: AsyncJobSnapshotOptions): AsyncJobSnapshot | null {",
|
|
8845
|
+
},
|
|
8846
|
+
{
|
|
8847
|
+
file: "src/session/agent-session.ts",
|
|
8848
|
+
marker: "\t\treturn { running, recent, delivery, jobs };",
|
|
8849
|
+
anchor: "\t\tconst delivery = manager.getDeliveryState(ownerFilter);\n\t\treturn { running, recent, delivery };",
|
|
8850
|
+
patched: "\t\tconst delivery = manager.getDeliveryState(ownerFilter);\n\t\tif (!options?.jobIds) return { running, recent, delivery };\n\t\t// CUELO #10: exact lookup independent of the display-sized recent window, with the same owner and foreground rules.\n\t\tconst jobs = options.jobIds.flatMap(id => {\n\t\t\tconst job = manager.getJob(id);\n\t\t\tif (!job || job.foreground || (ownerFilter && job.ownerId !== ownerFilter.ownerId)) return [];\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: job.id,\n\t\t\t\t\ttype: job.type,\n\t\t\t\t\tstatus: job.status,\n\t\t\t\t\tlabel: job.label,\n\t\t\t\t\tstartTime: job.startTime,\n\t\t\t\t\tendTime: job.endTime,\n\t\t\t\t\tagentId: job.agentId,\n\t\t\t\t},\n\t\t\t];\n\t\t});\n\t\treturn { running, recent, delivery, jobs };",
|
|
8851
|
+
},
|
|
8852
|
+
{
|
|
8853
|
+
file: "src/session/agent-session.ts",
|
|
8854
|
+
marker: "\t\t\tgetAsyncJobSnapshot: options => this.getAsyncJobSnapshot(options),",
|
|
8855
|
+
anchor: "\t\t\tgetAsyncJobSnapshot: () => this.getAsyncJobSnapshot(),",
|
|
8856
|
+
patched: "\t\t\tgetAsyncJobSnapshot: options => this.getAsyncJobSnapshot(options),",
|
|
8857
|
+
},
|
|
8858
|
+
{
|
|
8859
|
+
file: "src/extensibility/extensions/types.ts",
|
|
8860
|
+
marker: "import type { AsyncJobSnapshot, AsyncJobSnapshotOptions, SendUserMessageOptions } from \"../../session/agent-session\";",
|
|
8861
|
+
anchor: "import type { AsyncJobSnapshot, SendUserMessageOptions } from \"../../session/agent-session\";",
|
|
8862
|
+
patched: "import type { AsyncJobSnapshot, AsyncJobSnapshotOptions, SendUserMessageOptions } from \"../../session/agent-session\";",
|
|
8863
|
+
},
|
|
8864
|
+
{
|
|
8865
|
+
file: "src/extensibility/extensions/types.ts",
|
|
8866
|
+
marker: "\tgetAsyncJobSnapshot(options?: AsyncJobSnapshotOptions): AsyncJobSnapshot | null;",
|
|
8867
|
+
anchor: "\t/** Get a read-only snapshot of async jobs owned by this session. */\n\tgetAsyncJobSnapshot(): AsyncJobSnapshot | null;",
|
|
8868
|
+
patched: "\t/** Get a read-only snapshot of async jobs owned by this session; `options.jobIds` adds exact rows for those ids. */\n\tgetAsyncJobSnapshot(options?: AsyncJobSnapshotOptions): AsyncJobSnapshot | null;",
|
|
8869
|
+
},
|
|
8870
|
+
{
|
|
8871
|
+
file: "src/extensibility/extensions/runner.ts",
|
|
8872
|
+
marker: "import type { AsyncJobSnapshot, AsyncJobSnapshotOptions } from \"../../session/agent-session\";",
|
|
8873
|
+
anchor: "import type { AsyncJobSnapshot } from \"../../session/agent-session\";",
|
|
8874
|
+
patched: "import type { AsyncJobSnapshot, AsyncJobSnapshotOptions } from \"../../session/agent-session\";",
|
|
8875
|
+
},
|
|
8876
|
+
{
|
|
8877
|
+
file: "src/extensibility/extensions/runner.ts",
|
|
8878
|
+
marker: "\t#getAsyncJobSnapshotFn: (options?: AsyncJobSnapshotOptions) => AsyncJobSnapshot | null = () => null;",
|
|
8879
|
+
anchor: "\t#getAsyncJobSnapshotFn: () => AsyncJobSnapshot | null = () => null;",
|
|
8880
|
+
patched: "\t#getAsyncJobSnapshotFn: (options?: AsyncJobSnapshotOptions) => AsyncJobSnapshot | null = () => null;",
|
|
8881
|
+
},
|
|
8882
|
+
{
|
|
8883
|
+
file: "src/extensibility/extensions/runner.ts",
|
|
8884
|
+
marker: "\t\tgetAsyncJobSnapshot?: (options?: AsyncJobSnapshotOptions) => AsyncJobSnapshot | null,",
|
|
8885
|
+
anchor: "\t\tgetAsyncJobSnapshot?: () => AsyncJobSnapshot | null,",
|
|
8886
|
+
patched: "\t\tgetAsyncJobSnapshot?: (options?: AsyncJobSnapshotOptions) => AsyncJobSnapshot | null,",
|
|
8887
|
+
},
|
|
8888
|
+
{
|
|
8889
|
+
file: "src/extensibility/extensions/runner.ts",
|
|
8890
|
+
marker: "\t\t\tgetAsyncJobSnapshot: options => this.#getAsyncJobSnapshotFn(options),",
|
|
8891
|
+
anchor: "\t\t\tgetAsyncJobSnapshot: () => this.#getAsyncJobSnapshotFn(),",
|
|
8892
|
+
patched: "\t\t\tgetAsyncJobSnapshot: options => this.#getAsyncJobSnapshotFn(options),",
|
|
8893
|
+
},
|
|
8894
|
+
{
|
|
8895
|
+
file: "src/sdk.ts",
|
|
8896
|
+
marker: "\t\t\toptions => (hasSession ? session.getAsyncJobSnapshot(options) : null),",
|
|
8897
|
+
anchor: "\t\t\t() => (hasSession ? session.getAsyncJobSnapshot() : null),",
|
|
8898
|
+
patched: "\t\t\toptions => (hasSession ? session.getAsyncJobSnapshot(options) : null),",
|
|
8899
|
+
},
|
|
8700
8900
|
];
|
|
8701
8901
|
// EDITS 문자열의 줄 끝을 LF로 통일한다. 이 파일의 작업 사본이 CRLF여도 core 파일(LF)과
|
|
8702
8902
|
// 비교·치환이 어긋나지 않는다. core 파일 자체의 줄 끝은 건드리지 않는다.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cuelo",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
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.4.
|
|
33
|
+
"coreVersion": "18.4.10"
|
|
34
34
|
},
|
|
35
35
|
"engines": {
|
|
36
36
|
"node": ">=22.19.0",
|
|
@@ -88,11 +88,11 @@
|
|
|
88
88
|
"test:coverage": "bun test --coverage ./app ./components ./hooks ./lib ./public ./bin ./install.test.mjs"
|
|
89
89
|
},
|
|
90
90
|
"dependencies": {
|
|
91
|
-
"@oh-my-pi/pi-agent-core": "18.4.
|
|
92
|
-
"@oh-my-pi/pi-ai": "18.4.
|
|
93
|
-
"@oh-my-pi/pi-coding-agent": "18.4.
|
|
94
|
-
"@oh-my-pi/pi-tui": "18.4.
|
|
95
|
-
"@oh-my-pi/pi-utils": "18.4.
|
|
91
|
+
"@oh-my-pi/pi-agent-core": "18.4.10",
|
|
92
|
+
"@oh-my-pi/pi-ai": "18.4.10",
|
|
93
|
+
"@oh-my-pi/pi-coding-agent": "18.4.10",
|
|
94
|
+
"@oh-my-pi/pi-tui": "18.4.10",
|
|
95
|
+
"@oh-my-pi/pi-utils": "18.4.10",
|
|
96
96
|
"@seed-design/css": "2.8.0",
|
|
97
97
|
"@seed-design/react": "2.4.1",
|
|
98
98
|
"@seed-design/tailwind4-theme": "2.4.0",
|