cuelo 0.9.3 → 0.9.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 +6 -6
- 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]/events/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/running/route.js +1 -1
- package/.next/server/app/api/attachments/[id]/transcription/route.js +1 -1
- package/.next/server/app/api/gpt6/handles/route.js +1 -1
- package/.next/server/app/api/gpt6/reply/route.js +1 -1
- package/.next/server/app/api/gpt6/token/route.js +1 -1
- package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
- package/.next/server/app/api/live/call/[callId]/route.js +1 -1
- package/.next/server/app/api/live/events/route.js +1 -1
- package/.next/server/app/api/live/offer/route.js +1 -1
- package/.next/server/app/api/live/voices/route.js +1 -1
- package/.next/server/app/api/lounge/events/route.js +1 -1
- package/.next/server/app/api/lounge/route.js +1 -1
- package/.next/server/app/api/project-trust/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/tool-image/route.js +1 -1
- package/.next/server/app/api/update-maintenance/route.js +59 -21
- 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 +6 -6
- package/.next/server/chunks/1008.js +15 -0
- package/.next/server/chunks/5489.js +4 -4
- package/.next/server/chunks/5582.js +1 -1
- package/.next/server/chunks/6429.js +6 -6
- package/.next/server/chunks/7121.js +4 -1
- package/.next/server/chunks/7362.js +1 -1
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- 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/6110-004be57c825af4d9.js +1 -0
- package/.next/static/chunks/{9575-0a61510a174f6087.js → 9575-9eb94dc1e8bcd130.js} +4 -4
- package/.next/static/chunks/app/{layout-db3a3e6c0fb3dfb8.js → layout-890e772919e033dc.js} +1 -1
- package/.next/trace +108 -108
- package/.next/trace-build +1 -1
- package/README.md +8 -4
- package/Tools/CUELO_Setup/files/btw-server.js +3 -0
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +3 -3
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/task-guard.ts +35 -14
- package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +31 -14
- package/Tools/OMP_Global_Config/agent/extensions/lib/prepared-task.ts +4 -3
- package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +1 -1
- package/Tools/OMP_Global_Config/agent/rules/subagent.md +7 -2
- package/Tools/OMP_Global_Config/agent/rules/task-guard.md +1 -0
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +196 -162
- package/package.json +7 -7
- package/.next/static/chunks/6110-691c0f77641fc07e.js +0 -1
- /package/.next/static/{2K1doMCGVHZR9NtZw8xYc → b4yL-hhdDIhd8tZ_DFHIS}/_buildManifest.js +0 -0
- /package/.next/static/{2K1doMCGVHZR9NtZw8xYc → b4yL-hhdDIhd8tZ_DFHIS}/_ssgManifest.js +0 -0
|
@@ -116,6 +116,109 @@ export function currentEmbeddingModel(): string {
|
|
|
116
116
|
}
|
|
117
117
|
`;
|
|
118
118
|
|
|
119
|
+
/**
|
|
120
|
+
* task schema 정적 네 곳(item·isolated item·단일 flat·단일 no-isolation)의 per-spawn `model?` 전달과 optional `agent`.
|
|
121
|
+
* 18.3.4는 모든 schema에 필수 `solutionSpace: "string"` 을 `task` 바로 뒤에 넣었고 `model?` 은 그 뒤에 둔다.
|
|
122
|
+
*
|
|
123
|
+
* `agent: "string = 'task'"` 기본값은 pi-ai validateToolArguments가 extension tool_call 앞에서 채워, hook에는 생략한 호출과
|
|
124
|
+
* 명시한 `task`가 구별되지 않았다. 생략을 undefined로 두면 CUELO guard가 생략만 maker로 해석하고 명시 `task`·scout 등은 계속
|
|
125
|
+
* 거절할 수 있다. core executor는 생략을 이미 처리한다(task/index.ts spawnParamsFor `item.agent?.trim() || defaultAgent`,
|
|
126
|
+
* `spawn.agent ?? defaultAgent`)이므로 다른 프로필의 기본 agent 의미는 그대로다.
|
|
127
|
+
*
|
|
128
|
+
* 두 변경은 같은 줄 묶음에 있으므로 한 항목이 함께 만든다. 각 항목의 marker는 자기 schema header를 포함해 다른 schema의 줄이
|
|
129
|
+
* 이 항목을 이미 적용한 것으로 보이게 하지 않고, 빠진 model 줄은 그 schema에서만 복구된다. 후보는
|
|
130
|
+
* - 기본 후보: model이 없는 순정(18.4 이하)에서 model과 optional agent를 함께 넣는다. 옛 패치가 이미 model을 넣은
|
|
131
|
+
* 기본-agent 상태는 `legacyPatched` 로 optional agent만 얹는다.
|
|
132
|
+
* - alternates: model을 가진 18.5+ upstream(`string | string[]`)에 optional agent만 얹는다.
|
|
133
|
+
* 한 항목이 변환 전체를 가지므로 `--revert` 는 patched를 anchor로 되돌려 순정을 그대로 복원한다.
|
|
134
|
+
*/
|
|
135
|
+
const TASK_SCHEMA_MODEL_EDITS = [
|
|
136
|
+
"export const taskItemSchema = type({",
|
|
137
|
+
"const taskItemSchemaIsolated = type({",
|
|
138
|
+
"export const taskSchema = type({",
|
|
139
|
+
"const taskSchemaNoIsolation = type({",
|
|
140
|
+
].map(header => {
|
|
141
|
+
const body = (agent, model) =>
|
|
142
|
+
[header, '\t"name?": "string",', `\t${agent}`, '\ttask: "string",', '\tsolutionSpace: "string",', ...(model ? [`\t${model}`] : [])].join("\n");
|
|
143
|
+
const DEFAULT_AGENT = "agent: \"string = 'task'\",";
|
|
144
|
+
const OPTIONAL_AGENT = '"agent?": "string",';
|
|
145
|
+
const SINGLE = '"model?": "string",';
|
|
146
|
+
const SINGLE_OR_ARRAY = '"model?": "string | string[]",';
|
|
147
|
+
const output = '\n\t"outputSchema?": outputSchemaInputSchema,';
|
|
148
|
+
return {
|
|
149
|
+
file: "src/task/types.ts",
|
|
150
|
+
marker: body(OPTIONAL_AGENT, SINGLE),
|
|
151
|
+
anchor: body(DEFAULT_AGENT) + output,
|
|
152
|
+
patched: body(OPTIONAL_AGENT, SINGLE) + output,
|
|
153
|
+
legacyPatched: body(DEFAULT_AGENT, SINGLE) + output,
|
|
154
|
+
alternates: [{
|
|
155
|
+
file: "src/task/types.ts",
|
|
156
|
+
marker: body(OPTIONAL_AGENT, SINGLE_OR_ARRAY),
|
|
157
|
+
anchor: body(DEFAULT_AGENT, SINGLE_OR_ARRAY),
|
|
158
|
+
patched: body(OPTIONAL_AGENT, SINGLE_OR_ARRAY),
|
|
159
|
+
}],
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* 위 정적 schema와 같은 이유로 defaultAgent 동적 schema(createTaskSchema)의 agent도 optional로 둔다.
|
|
165
|
+
* 동적 model 항목의 앵커가 `agent,` 를 포함하므로 반드시 그 뒤에 적용한다.
|
|
166
|
+
*/
|
|
167
|
+
const TASK_AGENT_OPTIONAL_EDITS = [
|
|
168
|
+
...[
|
|
169
|
+
["\t\t\tconst item = type.raw({", "\t\t\t\t"],
|
|
170
|
+
["\t\tconst item = type.raw({", "\t\t\t"],
|
|
171
|
+
["\t\treturn type.raw({", "\t\t\t"],
|
|
172
|
+
["\treturn type.raw({", "\t\t"],
|
|
173
|
+
].map(([header, indent]) => ({
|
|
174
|
+
file: "src/task/types.ts",
|
|
175
|
+
marker: `${header}\n${indent}"name?": "string",\n${indent}"agent?": "string",`,
|
|
176
|
+
anchor: `${header}\n${indent}"name?": "string",\n${indent}agent,`,
|
|
177
|
+
patched: `${header}\n${indent}"name?": "string",\n${indent}"agent?": "string",`,
|
|
178
|
+
})),
|
|
179
|
+
{
|
|
180
|
+
// 위 여덟 곳이 더는 쓰지 않는 기본 agent 규칙 helper와 그 정규식·지역 변수를 함께 지운다.
|
|
181
|
+
file: "src/task/types.ts",
|
|
182
|
+
marker: "// CUELO: task schema agent is optional on the wire.",
|
|
183
|
+
anchor: [
|
|
184
|
+
"const TASK_AGENT_NAME_PATTERN = /^[A-Za-z0-9_-]+$/;",
|
|
185
|
+
"const taskSchemaCache = new Map<string, BaseType>();",
|
|
186
|
+
"",
|
|
187
|
+
"function taskAgentSchemaRule(defaultAgent: string): string {",
|
|
188
|
+
"\tconst trimmed = defaultAgent.trim();",
|
|
189
|
+
"\tif (TASK_AGENT_NAME_PATTERN.test(trimmed)) {",
|
|
190
|
+
"\t\treturn `string = '${trimmed}'`;",
|
|
191
|
+
"\t}",
|
|
192
|
+
"\treturn \"string\";",
|
|
193
|
+
"}",
|
|
194
|
+
"",
|
|
195
|
+
"function createTaskSchema(options: {",
|
|
196
|
+
"\tisolationEnabled: boolean;",
|
|
197
|
+
"\tbatchEnabled: boolean;",
|
|
198
|
+
"\tdefaultAgent: string;",
|
|
199
|
+
"\teffortEnabled: boolean;",
|
|
200
|
+
"\tevalToolsEnabled: boolean;",
|
|
201
|
+
"}): BaseType {",
|
|
202
|
+
"\tconst agent = taskAgentSchemaRule(options.defaultAgent);",
|
|
203
|
+
"",
|
|
204
|
+
].join("\n"),
|
|
205
|
+
patched: [
|
|
206
|
+
"// CUELO: task schema agent is optional on the wire. An omitted agent reaches extension hooks as undefined and",
|
|
207
|
+
"// the executor resolves it to the spawn policy's defaultAgent.",
|
|
208
|
+
"const taskSchemaCache = new Map<string, BaseType>();",
|
|
209
|
+
"",
|
|
210
|
+
"function createTaskSchema(options: {",
|
|
211
|
+
"\tisolationEnabled: boolean;",
|
|
212
|
+
"\tbatchEnabled: boolean;",
|
|
213
|
+
"\tdefaultAgent: string;",
|
|
214
|
+
"\teffortEnabled: boolean;",
|
|
215
|
+
"\tevalToolsEnabled: boolean;",
|
|
216
|
+
"}): BaseType {",
|
|
217
|
+
"",
|
|
218
|
+
].join("\n"),
|
|
219
|
+
},
|
|
220
|
+
];
|
|
221
|
+
|
|
119
222
|
/** 각 항목: 원본 앵커를 찾아 patched 로 바꾼다. marker 가 있으면 이미 적용된 것으로 본다. */
|
|
120
223
|
const EDITS = [
|
|
121
224
|
{
|
|
@@ -1161,11 +1264,16 @@ export interface IrcBridgeHost {
|
|
|
1161
1264
|
* \`suppressRelay\` lets the session finalize a bracketed turn without
|
|
1162
1265
|
* claiming it answered the parent (see #adoptParentSteerForRunningTurn).
|
|
1163
1266
|
* \`adoptedRecords\` carries steers that landed after the bracket opened and
|
|
1164
|
-
* that this same turn consumed: one finalization answers every source.
|
|
1267
|
+
* that this same turn consumed: one finalization answers every source.
|
|
1268
|
+
* \`bracket.runningTurn\` marks a bracket opened over a turn that was ALREADY
|
|
1269
|
+
* running (the parent's steer did not wake it), so the monitor must not
|
|
1270
|
+
* treat it as parent-woken work: whether it owns the answer is only known
|
|
1271
|
+
* at settle. */
|
|
1165
1272
|
setIrcWakeTurnObserver(
|
|
1166
1273
|
observer:
|
|
1167
1274
|
| ((
|
|
1168
1275
|
records: AgentMessage[],
|
|
1276
|
+
bracket?: { runningTurn?: boolean },
|
|
1169
1277
|
) =>
|
|
1170
1278
|
| ((error?: unknown, suppressRelay?: boolean, adoptedRecords?: AgentMessage[]) => void | Promise<void>)
|
|
1171
1279
|
| undefined)
|
|
@@ -1230,7 +1338,9 @@ export interface IrcBridgeHost {
|
|
|
1230
1338
|
| ((error?: unknown, suppressRelay?: boolean, adoptedRecords?: AgentMessage[]) => void | Promise<void>)
|
|
1231
1339
|
| undefined;
|
|
1232
1340
|
try {
|
|
1233
|
-
|
|
1341
|
+
// The parent's steer did not wake this turn, and it may still strand:
|
|
1342
|
+
// the monitor must not claim the parent's answer up front.
|
|
1343
|
+
finish = observer(entries.map(entry => entry.record), { runningTurn: true });
|
|
1234
1344
|
} catch (error) {
|
|
1235
1345
|
logger.warn("IRC steer continuation observer failed to start", { error: String(error) });
|
|
1236
1346
|
return;
|
|
@@ -1508,6 +1618,7 @@ export interface IrcBridgeHost {
|
|
|
1508
1618
|
patched: ` #ircWakeTurnObserver:
|
|
1509
1619
|
| ((
|
|
1510
1620
|
records: AgentMessage[],
|
|
1621
|
+
bracket?: { runningTurn?: boolean },
|
|
1511
1622
|
) =>
|
|
1512
1623
|
| ((error?: unknown, suppressRelay?: boolean, adoptedRecords?: AgentMessage[]) => void | Promise<void>)
|
|
1513
1624
|
| undefined)
|
|
@@ -1657,6 +1768,40 @@ export interface IrcBridgeHost {
|
|
|
1657
1768
|
patched: ` return async (turnError: unknown, suppressRelay?: boolean, adoptedRecords?: AgentMessage[]) => {
|
|
1658
1769
|
unsubscribeTurn();`,
|
|
1659
1770
|
},
|
|
1771
|
+
{
|
|
1772
|
+
// 18.6.1 의 executor.ts attachIrcWakeTurnMonitor 는 부모 레코드가 있는 bracket 이면 job 을 turn 시작에
|
|
1773
|
+
// 미리 등록하고, yield 없이 끝난 turn 도 그 job 을 relay 본문으로 정산한다(부모 wait 가 그 turn 을 기다리게).
|
|
1774
|
+
// 우리 #adoptParentSteerForRunningTurn 은 이미 돌던 turn 에 부모 steer 레코드로 bracket 을 열고, steer 가
|
|
1775
|
+
// 큐에 남으면(stranded) 침묵한다. 선등록이 그 bracket 에도 걸리면 stranded turn 이 job 으로 부모에게 답하고
|
|
1776
|
+
// 이어받은 continuation 이 또 답해 부모가 2건을 받는다. 그래서 관찰자에 입양 표시를 넘기고(아래 두 항목)
|
|
1777
|
+
// 입양 bracket 만 선등록을 건너뛴다: yield 시점 등록과 relay 는 18.6.0 과 같다. 부모가 깨운 wake·continuation
|
|
1778
|
+
// bracket 의 job 전달은 upstream 그대로다(ADAPT). 회귀: core-relay-regression-test.ts [1]·[2].
|
|
1779
|
+
// 이 헤더는 18.6.0 에서도 같은 줄이라 두 판 모두 적용된다(18.6.0 에서 bracket 은 쓰이지 않는다).
|
|
1780
|
+
file: "src/task/executor.ts",
|
|
1781
|
+
marker: "session.setIrcWakeTurnObserver((records, bracket) => {",
|
|
1782
|
+
anchor: "\tsession.setIrcWakeTurnObserver(records => {",
|
|
1783
|
+
patched: "\tsession.setIrcWakeTurnObserver((records, bracket) => {",
|
|
1784
|
+
},
|
|
1785
|
+
{
|
|
1786
|
+
file: "src/task/executor.ts",
|
|
1787
|
+
marker: "if (bracket?.runningTurn !== true && wakeSources(records, id).some(source => source.from === ownerId)) {",
|
|
1788
|
+
anchor: "\t\tif (wakeSources(records, id).some(source => source.from === ownerId)) registerWakeJob();",
|
|
1789
|
+
patched: ` // A bracket opened over a turn that was already running (a parent steer
|
|
1790
|
+
// adopted mid-turn) is not parent-woken work: that turn may leave the steer
|
|
1791
|
+
// queued, and the continuation that consumes it owns the answer. Keep the
|
|
1792
|
+
// yield-time registration for it so a stranded turn stays silent.
|
|
1793
|
+
if (bracket?.runningTurn !== true && wakeSources(records, id).some(source => source.from === ownerId)) {
|
|
1794
|
+
registerWakeJob();
|
|
1795
|
+
}`,
|
|
1796
|
+
// 18.6.0 에는 선등록이 없다(job 은 yield 시점에만). 그 판의 no-op.
|
|
1797
|
+
alternates: [{
|
|
1798
|
+
file: "src/task/executor.ts",
|
|
1799
|
+
excludes: "wakeSources(records, id).some(source => source.from === ownerId)",
|
|
1800
|
+
marker: "\t\t\tonYieldAccepted: registerWakeJob,",
|
|
1801
|
+
anchor: "\t\t\tonYieldAccepted: registerWakeJob,",
|
|
1802
|
+
patched: "\t\t\tonYieldAccepted: registerWakeJob,",
|
|
1803
|
+
}],
|
|
1804
|
+
},
|
|
1660
1805
|
// relay 본문의 실패/취소 분기는 18.2.1에서 upstream이 가져갔다. `relayWakeTurnOutput`이
|
|
1661
1806
|
// `error/aborted/abortReason/finalizeError`를 받고 `buildWakeRelayBody`가 성공·실패·취소를
|
|
1662
1807
|
// 각각의 본문으로 만들며, 호출 자체도 `finally`에서 무조건 일어난다(예전에는
|
|
@@ -2493,165 +2638,7 @@ function evalRejectionResult(error: unknown): AgentToolResult<EvalToolDetails |
|
|
|
2493
2638
|
patched: "\t/** Per-spawn thinking effort (flat form): lowest/middle/highest level the resolved model supports. */\n\teffort?: \"lo\" | \"med\" | \"hi\";\n\t/** Per-spawn model selector or ordered selector array; overrides agent and settings preferences. */\n\tmodel?: string | string[];",
|
|
2494
2639
|
}],
|
|
2495
2640
|
},
|
|
2496
|
-
|
|
2497
|
-
// 18.3.4는 모든 task schema에 필수 `solutionSpace: "string"` 을 `task` 바로 뒤에 넣었다
|
|
2498
|
-
// (types.ts:52-185). per-spawn `model?` 은 그 필수 필드 뒤에 둔다. 의미는 18.3.2와 같다.
|
|
2499
|
-
file: "src/task/types.ts",
|
|
2500
|
-
marker: `task: "string",
|
|
2501
|
-
solutionSpace: "string",
|
|
2502
|
-
"model?": "string",`,
|
|
2503
|
-
anchor: `export const taskItemSchema = type({
|
|
2504
|
-
"name?": "string",
|
|
2505
|
-
agent: "string = 'task'",
|
|
2506
|
-
task: "string",
|
|
2507
|
-
solutionSpace: "string",
|
|
2508
|
-
"outputSchema?": outputSchemaInputSchema,
|
|
2509
|
-
"schemaMode?": '"permissive" | "strict"',
|
|
2510
|
-
"tools?": "string[]",
|
|
2511
|
-
"+": "delete",
|
|
2512
|
-
});
|
|
2513
|
-
const taskItemSchemaIsolated = type({
|
|
2514
|
-
"name?": "string",
|
|
2515
|
-
agent: "string = 'task'",
|
|
2516
|
-
task: "string",
|
|
2517
|
-
solutionSpace: "string",
|
|
2518
|
-
"outputSchema?": outputSchemaInputSchema,
|
|
2519
|
-
"schemaMode?": '"permissive" | "strict"',
|
|
2520
|
-
"tools?": "string[]",
|
|
2521
|
-
"isolated?": "boolean",
|
|
2522
|
-
"+": "delete",
|
|
2523
|
-
});`,
|
|
2524
|
-
patched: `export const taskItemSchema = type({
|
|
2525
|
-
"name?": "string",
|
|
2526
|
-
agent: "string = 'task'",
|
|
2527
|
-
task: "string",
|
|
2528
|
-
solutionSpace: "string",
|
|
2529
|
-
"model?": "string",
|
|
2530
|
-
"outputSchema?": outputSchemaInputSchema,
|
|
2531
|
-
"schemaMode?": '"permissive" | "strict"',
|
|
2532
|
-
"tools?": "string[]",
|
|
2533
|
-
"+": "delete",
|
|
2534
|
-
});
|
|
2535
|
-
const taskItemSchemaIsolated = type({
|
|
2536
|
-
"name?": "string",
|
|
2537
|
-
agent: "string = 'task'",
|
|
2538
|
-
task: "string",
|
|
2539
|
-
solutionSpace: "string",
|
|
2540
|
-
"model?": "string",
|
|
2541
|
-
"outputSchema?": outputSchemaInputSchema,
|
|
2542
|
-
"schemaMode?": '"permissive" | "strict"',
|
|
2543
|
-
"tools?": "string[]",
|
|
2544
|
-
"isolated?": "boolean",
|
|
2545
|
-
"+": "delete",
|
|
2546
|
-
});`,
|
|
2547
|
-
alternates: [{
|
|
2548
|
-
file: "src/task/types.ts",
|
|
2549
|
-
marker: `export const taskItemSchema = type({
|
|
2550
|
-
"name?": "string",
|
|
2551
|
-
agent: "string = 'task'",
|
|
2552
|
-
task: "string",
|
|
2553
|
-
solutionSpace: "string",
|
|
2554
|
-
"model?": "string | string[]",`,
|
|
2555
|
-
anchor: `export const taskItemSchema = type({
|
|
2556
|
-
"name?": "string",
|
|
2557
|
-
agent: "string = 'task'",
|
|
2558
|
-
task: "string",
|
|
2559
|
-
solutionSpace: "string",
|
|
2560
|
-
"model?": "string | string[]",`,
|
|
2561
|
-
patched: `export const taskItemSchema = type({
|
|
2562
|
-
"name?": "string",
|
|
2563
|
-
agent: "string = 'task'",
|
|
2564
|
-
task: "string",
|
|
2565
|
-
solutionSpace: "string",
|
|
2566
|
-
"model?": "string | string[]",`,
|
|
2567
|
-
}],
|
|
2568
|
-
},
|
|
2569
|
-
{
|
|
2570
|
-
file: "src/task/types.ts",
|
|
2571
|
-
marker: `export const taskSchema = type({
|
|
2572
|
-
"name?": "string",
|
|
2573
|
-
agent: "string = 'task'",
|
|
2574
|
-
task: "string",
|
|
2575
|
-
solutionSpace: "string",
|
|
2576
|
-
"model?": "string",`,
|
|
2577
|
-
anchor: `export const taskSchema = type({
|
|
2578
|
-
"name?": "string",
|
|
2579
|
-
agent: "string = 'task'",
|
|
2580
|
-
task: "string",
|
|
2581
|
-
solutionSpace: "string",
|
|
2582
|
-
"outputSchema?": outputSchemaInputSchema,`,
|
|
2583
|
-
patched: `export const taskSchema = type({
|
|
2584
|
-
"name?": "string",
|
|
2585
|
-
agent: "string = 'task'",
|
|
2586
|
-
task: "string",
|
|
2587
|
-
solutionSpace: "string",
|
|
2588
|
-
"model?": "string",
|
|
2589
|
-
"outputSchema?": outputSchemaInputSchema,`,
|
|
2590
|
-
alternates: [{
|
|
2591
|
-
file: "src/task/types.ts",
|
|
2592
|
-
marker: `export const taskSchema = type({
|
|
2593
|
-
"name?": "string",
|
|
2594
|
-
agent: "string = 'task'",
|
|
2595
|
-
task: "string",
|
|
2596
|
-
solutionSpace: "string",
|
|
2597
|
-
"model?": "string | string[]",`,
|
|
2598
|
-
anchor: `export const taskSchema = type({
|
|
2599
|
-
"name?": "string",
|
|
2600
|
-
agent: "string = 'task'",
|
|
2601
|
-
task: "string",
|
|
2602
|
-
solutionSpace: "string",
|
|
2603
|
-
"model?": "string | string[]",`,
|
|
2604
|
-
patched: `export const taskSchema = type({
|
|
2605
|
-
"name?": "string",
|
|
2606
|
-
agent: "string = 'task'",
|
|
2607
|
-
task: "string",
|
|
2608
|
-
solutionSpace: "string",
|
|
2609
|
-
"model?": "string | string[]",`,
|
|
2610
|
-
}],
|
|
2611
|
-
},
|
|
2612
|
-
{
|
|
2613
|
-
file: "src/task/types.ts",
|
|
2614
|
-
marker: `const taskSchemaNoIsolation = type({
|
|
2615
|
-
"name?": "string",
|
|
2616
|
-
agent: "string = 'task'",
|
|
2617
|
-
task: "string",
|
|
2618
|
-
solutionSpace: "string",
|
|
2619
|
-
"model?": "string",`,
|
|
2620
|
-
anchor: `const taskSchemaNoIsolation = type({
|
|
2621
|
-
"name?": "string",
|
|
2622
|
-
agent: "string = 'task'",
|
|
2623
|
-
task: "string",
|
|
2624
|
-
solutionSpace: "string",
|
|
2625
|
-
"outputSchema?": outputSchemaInputSchema,`,
|
|
2626
|
-
patched: `const taskSchemaNoIsolation = type({
|
|
2627
|
-
"name?": "string",
|
|
2628
|
-
agent: "string = 'task'",
|
|
2629
|
-
task: "string",
|
|
2630
|
-
solutionSpace: "string",
|
|
2631
|
-
"model?": "string",
|
|
2632
|
-
"outputSchema?": outputSchemaInputSchema,`,
|
|
2633
|
-
alternates: [{
|
|
2634
|
-
file: "src/task/types.ts",
|
|
2635
|
-
marker: `const taskSchemaNoIsolation = type({
|
|
2636
|
-
"name?": "string",
|
|
2637
|
-
agent: "string = 'task'",
|
|
2638
|
-
task: "string",
|
|
2639
|
-
solutionSpace: "string",
|
|
2640
|
-
"model?": "string | string[]",`,
|
|
2641
|
-
anchor: `const taskSchemaNoIsolation = type({
|
|
2642
|
-
"name?": "string",
|
|
2643
|
-
agent: "string = 'task'",
|
|
2644
|
-
task: "string",
|
|
2645
|
-
solutionSpace: "string",
|
|
2646
|
-
"model?": "string | string[]",`,
|
|
2647
|
-
patched: `const taskSchemaNoIsolation = type({
|
|
2648
|
-
"name?": "string",
|
|
2649
|
-
agent: "string = 'task'",
|
|
2650
|
-
task: "string",
|
|
2651
|
-
solutionSpace: "string",
|
|
2652
|
-
"model?": "string | string[]",`,
|
|
2653
|
-
}],
|
|
2654
|
-
},
|
|
2641
|
+
...TASK_SCHEMA_MODEL_EDITS,
|
|
2655
2642
|
{
|
|
2656
2643
|
file: "src/task/types.ts",
|
|
2657
2644
|
marker: `"model?": "string",
|
|
@@ -3074,7 +3061,7 @@ import { isUnexpectedSocketCloseMessage } from "@oh-my-pi/pi-utils/fetch-retry";
|
|
|
3074
3061
|
{
|
|
3075
3062
|
// 2026-10-04 실측: Maker 가 측정 job(bash async)을 띄우고 턴을 끝낸 지 task.agentIdleTtlMs(기본 420000ms)
|
|
3076
3063
|
// 뒤 park() 가 세션을 dispose 했다. park 는 대기 중인 async 작업을 보지 않아 job 완료 알림이 전달되지 않고
|
|
3077
|
-
// 남은 작업도 끊겼다(upstream 18.6.0 도 같다). 커밋 직전 재확인에서 작업이 남아 있으면 dispose 하지 않고
|
|
3064
|
+
// 남은 작업도 끊겼다(upstream 18.6.0·18.6.1 도 같다). 커밋 직전 재확인에서 작업이 남아 있으면 dispose 하지 않고
|
|
3078
3065
|
// idle 타이머를 다시 건다. job 은 실행 한도, 남은 전달·yield 큐는 idle flush 로 끝나므로 영구 잔류는 없다.
|
|
3079
3066
|
file: "src/registry/agent-lifecycle.ts",
|
|
3080
3067
|
marker: "// HANSE: keep sessions with pending async work",
|
|
@@ -3110,6 +3097,45 @@ import { isUnexpectedSocketCloseMessage } from "@oh-my-pi/pi-utils/fetch-retry";
|
|
|
3110
3097
|
// Other roots retain their timers and revivers. Release while shared
|
|
3111
3098
|
// resources are still live; subagent disposal does not tear down roots.`,
|
|
3112
3099
|
},
|
|
3100
|
+
{
|
|
3101
|
+
// 2026-10-05: 재시작 뒤 복원된 child 의 부모는 top-level 별칭(`Main#3` 등)일 수 있다. 부활 factory 는 parentId 가 literal
|
|
3102
|
+
// `Main` 에 닿을 때까지의 단계 수로 taskDepth 를 정해 `Main#3` 직속 child 의 depth 가 하나 늘었다. top-level(kind main)
|
|
3103
|
+
// 에서도 멈추게 해 registry 의 실제 parent 를 그대로 쓴다. literal `Main`·없는 ref·깊은 child 의 기존 동작은 같다.
|
|
3104
|
+
file: "src/task/persisted-revive.ts",
|
|
3105
|
+
marker: "export function revivedTaskDepth(",
|
|
3106
|
+
anchor: `/**
|
|
3107
|
+
* Build the factory the {@link AgentLifecycleManager} uses to cold-revive a`,
|
|
3108
|
+
patched: `/** HANSE: depth of a cold-revived subagent from its persisted parent chain; a top-level (\`main\`) parent ends the climb. */
|
|
3109
|
+
export function revivedTaskDepth(ref: { parentId?: string }, registry: AgentRegistry): number {
|
|
3110
|
+
let taskDepth = 1;
|
|
3111
|
+
let parentId = ref.parentId;
|
|
3112
|
+
const seen = new Set<string>();
|
|
3113
|
+
while (parentId && parentId !== MAIN_AGENT_ID && registry.get(parentId)?.kind !== "main" && !seen.has(parentId)) {
|
|
3114
|
+
seen.add(parentId);
|
|
3115
|
+
taskDepth++;
|
|
3116
|
+
parentId = registry.get(parentId)?.parentId;
|
|
3117
|
+
}
|
|
3118
|
+
return taskDepth;
|
|
3119
|
+
}
|
|
3120
|
+
|
|
3121
|
+
/**
|
|
3122
|
+
* Build the factory the {@link AgentLifecycleManager} uses to cold-revive a`,
|
|
3123
|
+
},
|
|
3124
|
+
{
|
|
3125
|
+
file: "src/task/persisted-revive.ts",
|
|
3126
|
+
marker: "const taskDepth = revivedTaskDepth(ref, registry);",
|
|
3127
|
+
anchor: ` let taskDepth = 1;
|
|
3128
|
+
let parentId = ref.parentId;
|
|
3129
|
+
const seen = new Set<string>();
|
|
3130
|
+
while (parentId && parentId !== MAIN_AGENT_ID && !seen.has(parentId)) {
|
|
3131
|
+
seen.add(parentId);
|
|
3132
|
+
taskDepth++;
|
|
3133
|
+
parentId = registry.get(parentId)?.parentId;
|
|
3134
|
+
}
|
|
3135
|
+
`,
|
|
3136
|
+
patched: ` const taskDepth = revivedTaskDepth(ref, registry);
|
|
3137
|
+
`,
|
|
3138
|
+
},
|
|
3113
3139
|
// 18.3.0 RETIRE: `hub wait` 의 생략 ids 미소비 결과 포함·정산 결과 우선(옛 #115·#116).
|
|
3114
3140
|
// upstream `wait` 가 `undeliveredJobs` 로 같은 일을 실행 중 job 유무와 무관하게 먼저 한다
|
|
3115
3141
|
// (tools/wait.ts:78-81, async/job-control.ts:44-58). 차이는 isDeliverySuppressed 인
|
|
@@ -9101,6 +9127,12 @@ function parentSubagentServiceTiers(
|
|
|
9101
9127
|
marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||_Re(i))continue;let a=i.slice(0,-6),',
|
|
9102
9128
|
anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||_Re(i))continue;let a=i.slice(0,-6),',
|
|
9103
9129
|
patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||_Re(i))continue;let a=i.slice(0,-6),',
|
|
9130
|
+
}, {
|
|
9131
|
+
// 18.6.1 번들의 같은 upstream 조건(NRe = isAdvisorTranscriptName) no-op. 이름만 바뀌었다.
|
|
9132
|
+
file: "dist/cli.js",
|
|
9133
|
+
marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||NRe(i))continue;let a=i.slice(0,-6),',
|
|
9134
|
+
anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||NRe(i))continue;let a=i.slice(0,-6),',
|
|
9135
|
+
patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||NRe(i))continue;let a=i.slice(0,-6),',
|
|
9104
9136
|
}],
|
|
9105
9137
|
},
|
|
9106
9138
|
// 18.4.5 는 /ratchet 을 새로 넣으면서 `src/ratchet/prelude.ts`(코드)와 `prelude.js`(eval 텍스트 자산)를 같은 stem 으로
|
|
@@ -9841,6 +9873,8 @@ function matchesReplacementCredential(
|
|
|
9841
9873
|
anchor: "\t\t\t\t\tconst previewBytes = firstLineExceedsLimit ? (firstLinePreview?.bytes ?? 0) : 0;\n",
|
|
9842
9874
|
patched: "\t\t\t\t\t// CUELO: hashline mode refuses the oversized line outright and delivers none of it, so its\n\t\t\t\t\t// notice must report 0 bytes shown, not the preview it never rendered.\n\t\t\t\t\tconst previewBytes =\n\t\t\t\t\t\tfirstLineExceedsLimit && (rawSelector || !displayMode.hashLines) ? (firstLinePreview?.bytes ?? 0) : 0;\n",
|
|
9843
9875
|
},
|
|
9876
|
+
// agent 생략 보존: 위 per-item model 항목의 앵커가 `agent: "string = 'task'"`를 포함하므로 반드시 그 뒤에 적용한다.
|
|
9877
|
+
...TASK_AGENT_OPTIONAL_EDITS,
|
|
9844
9878
|
];
|
|
9845
9879
|
// EDITS 문자열의 줄 끝을 LF로 통일한다. 이 파일의 작업 사본이 CRLF여도 core 파일(LF)과
|
|
9846
9880
|
// 비교·치환이 어긋나지 않는다. core 파일 자체의 줄 끝은 건드리지 않는다.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cuelo",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.5",
|
|
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.6.
|
|
33
|
+
"coreVersion": "18.6.1"
|
|
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.6.
|
|
92
|
-
"@oh-my-pi/pi-ai": "18.6.
|
|
93
|
-
"@oh-my-pi/pi-coding-agent": "18.6.
|
|
94
|
-
"@oh-my-pi/pi-tui": "18.6.
|
|
95
|
-
"@oh-my-pi/pi-utils": "18.6.
|
|
91
|
+
"@oh-my-pi/pi-agent-core": "18.6.1",
|
|
92
|
+
"@oh-my-pi/pi-ai": "18.6.1",
|
|
93
|
+
"@oh-my-pi/pi-coding-agent": "18.6.1",
|
|
94
|
+
"@oh-my-pi/pi-tui": "18.6.1",
|
|
95
|
+
"@oh-my-pi/pi-utils": "18.6.1",
|
|
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",
|