cuelo 0.9.4 → 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.
Files changed (115) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +7 -7
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  25. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  26. package/.next/server/app/api/agent/[id]/events/route.js +1 -1
  27. package/.next/server/app/api/agent/[id]/route.js +1 -1
  28. package/.next/server/app/api/agent/new/route.js +1 -1
  29. package/.next/server/app/api/agent/running/route.js +1 -1
  30. package/.next/server/app/api/attachments/[id]/transcription/route.js +1 -1
  31. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  32. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  33. package/.next/server/app/api/gpt6/token/route.js +1 -1
  34. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  35. package/.next/server/app/api/live/call/[callId]/route.js +1 -1
  36. package/.next/server/app/api/live/events/route.js +1 -1
  37. package/.next/server/app/api/live/offer/route.js +1 -1
  38. package/.next/server/app/api/live/voices/route.js +1 -1
  39. package/.next/server/app/api/lounge/events/route.js +1 -1
  40. package/.next/server/app/api/lounge/route.js +1 -1
  41. package/.next/server/app/api/project-trust/route.js +1 -1
  42. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  43. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  44. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  45. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  46. package/.next/server/app/api/sessions/route.js +1 -1
  47. package/.next/server/app/api/tool-image/route.js +1 -1
  48. package/.next/server/app/api/update-maintenance/route.js +59 -21
  49. package/.next/server/app/api/updates/route.js +1 -1
  50. package/.next/server/app/index.html +1 -1
  51. package/.next/server/app/index.rsc +4 -4
  52. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  53. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  54. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  55. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  56. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  57. package/.next/server/app/office/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/office-preview.html +1 -1
  60. package/.next/server/app/office-preview.rsc +2 -2
  61. package/.next/server/app/office-preview.segments/_full.segment.rsc +2 -2
  62. package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
  63. package/.next/server/app/office-preview.segments/_index.segment.rsc +2 -2
  64. package/.next/server/app/office-preview.segments/_tree.segment.rsc +1 -1
  65. package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
  66. package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
  67. package/.next/server/app/office.html +1 -1
  68. package/.next/server/app/office.rsc +4 -4
  69. package/.next/server/app/office.segments/_full.segment.rsc +4 -4
  70. package/.next/server/app/office.segments/_head.segment.rsc +1 -1
  71. package/.next/server/app/office.segments/_index.segment.rsc +2 -2
  72. package/.next/server/app/office.segments/_tree.segment.rsc +1 -1
  73. package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +3 -3
  74. package/.next/server/app/office.segments/office.segment.rsc +1 -1
  75. package/.next/server/app/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/recover.html +1 -1
  78. package/.next/server/app/recover.rsc +2 -2
  79. package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
  80. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  82. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  83. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  84. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  85. package/.next/server/app-paths-manifest.json +7 -7
  86. package/.next/server/chunks/1008.js +15 -0
  87. package/.next/server/chunks/5489.js +4 -4
  88. package/.next/server/chunks/5582.js +1 -1
  89. package/.next/server/chunks/6429.js +6 -6
  90. package/.next/server/chunks/7121.js +4 -1
  91. package/.next/server/chunks/7362.js +1 -1
  92. package/.next/server/instrumentation.js +1 -1
  93. package/.next/server/instrumentation.js.nft.json +1 -1
  94. package/.next/server/middleware-build-manifest.js +1 -1
  95. package/.next/server/pages/404.html +1 -1
  96. package/.next/server/pages/500.html +1 -1
  97. package/.next/server/server-reference-manifest.json +1 -1
  98. package/.next/static/chunks/6110-004be57c825af4d9.js +1 -0
  99. package/.next/static/chunks/{9575-08609cfc6c1cf3e1.js → 9575-9eb94dc1e8bcd130.js} +4 -4
  100. package/.next/static/chunks/app/{layout-76b01721b96d2c1a.js → layout-890e772919e033dc.js} +1 -1
  101. package/.next/trace +108 -108
  102. package/.next/trace-build +1 -1
  103. package/README.md +7 -3
  104. package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
  105. package/Tools/OMP_Global_Config/agent/extensions/command-guard/task-guard.ts +35 -14
  106. package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +31 -14
  107. package/Tools/OMP_Global_Config/agent/extensions/lib/prepared-task.ts +4 -3
  108. package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +1 -1
  109. package/Tools/OMP_Global_Config/agent/rules/subagent.md +7 -2
  110. package/Tools/OMP_Global_Config/agent/rules/task-guard.md +1 -0
  111. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +145 -159
  112. package/package.json +1 -1
  113. package/.next/static/chunks/6110-691c0f77641fc07e.js +0 -1
  114. /package/.next/static/{6tGLEaiCe3Wa8PkWKUhB4 → b4yL-hhdDIhd8tZ_DFHIS}/_buildManifest.js +0 -0
  115. /package/.next/static/{6tGLEaiCe3Wa8PkWKUhB4 → 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
  {
@@ -2535,165 +2638,7 @@ function evalRejectionResult(error: unknown): AgentToolResult<EvalToolDetails |
2535
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[];",
2536
2639
  }],
2537
2640
  },
2538
- {
2539
- // 18.3.4는 모든 task schema에 필수 `solutionSpace: "string"` 을 `task` 바로 뒤에 넣었다
2540
- // (types.ts:52-185). per-spawn `model?` 은 그 필수 필드 뒤에 둔다. 의미는 18.3.2와 같다.
2541
- file: "src/task/types.ts",
2542
- marker: `task: "string",
2543
- solutionSpace: "string",
2544
- "model?": "string",`,
2545
- anchor: `export const taskItemSchema = type({
2546
- "name?": "string",
2547
- agent: "string = 'task'",
2548
- task: "string",
2549
- solutionSpace: "string",
2550
- "outputSchema?": outputSchemaInputSchema,
2551
- "schemaMode?": '"permissive" | "strict"',
2552
- "tools?": "string[]",
2553
- "+": "delete",
2554
- });
2555
- const taskItemSchemaIsolated = type({
2556
- "name?": "string",
2557
- agent: "string = 'task'",
2558
- task: "string",
2559
- solutionSpace: "string",
2560
- "outputSchema?": outputSchemaInputSchema,
2561
- "schemaMode?": '"permissive" | "strict"',
2562
- "tools?": "string[]",
2563
- "isolated?": "boolean",
2564
- "+": "delete",
2565
- });`,
2566
- patched: `export const taskItemSchema = type({
2567
- "name?": "string",
2568
- agent: "string = 'task'",
2569
- task: "string",
2570
- solutionSpace: "string",
2571
- "model?": "string",
2572
- "outputSchema?": outputSchemaInputSchema,
2573
- "schemaMode?": '"permissive" | "strict"',
2574
- "tools?": "string[]",
2575
- "+": "delete",
2576
- });
2577
- const taskItemSchemaIsolated = type({
2578
- "name?": "string",
2579
- agent: "string = 'task'",
2580
- task: "string",
2581
- solutionSpace: "string",
2582
- "model?": "string",
2583
- "outputSchema?": outputSchemaInputSchema,
2584
- "schemaMode?": '"permissive" | "strict"',
2585
- "tools?": "string[]",
2586
- "isolated?": "boolean",
2587
- "+": "delete",
2588
- });`,
2589
- alternates: [{
2590
- file: "src/task/types.ts",
2591
- marker: `export const taskItemSchema = type({
2592
- "name?": "string",
2593
- agent: "string = 'task'",
2594
- task: "string",
2595
- solutionSpace: "string",
2596
- "model?": "string | string[]",`,
2597
- anchor: `export const taskItemSchema = type({
2598
- "name?": "string",
2599
- agent: "string = 'task'",
2600
- task: "string",
2601
- solutionSpace: "string",
2602
- "model?": "string | string[]",`,
2603
- patched: `export const taskItemSchema = type({
2604
- "name?": "string",
2605
- agent: "string = 'task'",
2606
- task: "string",
2607
- solutionSpace: "string",
2608
- "model?": "string | string[]",`,
2609
- }],
2610
- },
2611
- {
2612
- file: "src/task/types.ts",
2613
- marker: `export const taskSchema = type({
2614
- "name?": "string",
2615
- agent: "string = 'task'",
2616
- task: "string",
2617
- solutionSpace: "string",
2618
- "model?": "string",`,
2619
- anchor: `export const taskSchema = type({
2620
- "name?": "string",
2621
- agent: "string = 'task'",
2622
- task: "string",
2623
- solutionSpace: "string",
2624
- "outputSchema?": outputSchemaInputSchema,`,
2625
- patched: `export const taskSchema = type({
2626
- "name?": "string",
2627
- agent: "string = 'task'",
2628
- task: "string",
2629
- solutionSpace: "string",
2630
- "model?": "string",
2631
- "outputSchema?": outputSchemaInputSchema,`,
2632
- alternates: [{
2633
- file: "src/task/types.ts",
2634
- marker: `export const taskSchema = type({
2635
- "name?": "string",
2636
- agent: "string = 'task'",
2637
- task: "string",
2638
- solutionSpace: "string",
2639
- "model?": "string | string[]",`,
2640
- anchor: `export const taskSchema = type({
2641
- "name?": "string",
2642
- agent: "string = 'task'",
2643
- task: "string",
2644
- solutionSpace: "string",
2645
- "model?": "string | string[]",`,
2646
- patched: `export const taskSchema = type({
2647
- "name?": "string",
2648
- agent: "string = 'task'",
2649
- task: "string",
2650
- solutionSpace: "string",
2651
- "model?": "string | string[]",`,
2652
- }],
2653
- },
2654
- {
2655
- file: "src/task/types.ts",
2656
- marker: `const taskSchemaNoIsolation = type({
2657
- "name?": "string",
2658
- agent: "string = 'task'",
2659
- task: "string",
2660
- solutionSpace: "string",
2661
- "model?": "string",`,
2662
- anchor: `const taskSchemaNoIsolation = type({
2663
- "name?": "string",
2664
- agent: "string = 'task'",
2665
- task: "string",
2666
- solutionSpace: "string",
2667
- "outputSchema?": outputSchemaInputSchema,`,
2668
- patched: `const taskSchemaNoIsolation = type({
2669
- "name?": "string",
2670
- agent: "string = 'task'",
2671
- task: "string",
2672
- solutionSpace: "string",
2673
- "model?": "string",
2674
- "outputSchema?": outputSchemaInputSchema,`,
2675
- alternates: [{
2676
- file: "src/task/types.ts",
2677
- marker: `const taskSchemaNoIsolation = type({
2678
- "name?": "string",
2679
- agent: "string = 'task'",
2680
- task: "string",
2681
- solutionSpace: "string",
2682
- "model?": "string | string[]",`,
2683
- anchor: `const taskSchemaNoIsolation = type({
2684
- "name?": "string",
2685
- agent: "string = 'task'",
2686
- task: "string",
2687
- solutionSpace: "string",
2688
- "model?": "string | string[]",`,
2689
- patched: `const taskSchemaNoIsolation = type({
2690
- "name?": "string",
2691
- agent: "string = 'task'",
2692
- task: "string",
2693
- solutionSpace: "string",
2694
- "model?": "string | string[]",`,
2695
- }],
2696
- },
2641
+ ...TASK_SCHEMA_MODEL_EDITS,
2697
2642
  {
2698
2643
  file: "src/task/types.ts",
2699
2644
  marker: `"model?": "string",
@@ -3152,6 +3097,45 @@ import { isUnexpectedSocketCloseMessage } from "@oh-my-pi/pi-utils/fetch-retry";
3152
3097
  // Other roots retain their timers and revivers. Release while shared
3153
3098
  // resources are still live; subagent disposal does not tear down roots.`,
3154
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
+ },
3155
3139
  // 18.3.0 RETIRE: `hub wait` 의 생략 ids 미소비 결과 포함·정산 결과 우선(옛 #115·#116).
3156
3140
  // upstream `wait` 가 `undeliveredJobs` 로 같은 일을 실행 중 job 유무와 무관하게 먼저 한다
3157
3141
  // (tools/wait.ts:78-81, async/job-control.ts:44-58). 차이는 isDeliverySuppressed 인
@@ -9889,6 +9873,8 @@ function matchesReplacementCredential(
9889
9873
  anchor: "\t\t\t\t\tconst previewBytes = firstLineExceedsLimit ? (firstLinePreview?.bytes ?? 0) : 0;\n",
9890
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",
9891
9875
  },
9876
+ // agent 생략 보존: 위 per-item model 항목의 앵커가 `agent: "string = 'task'"`를 포함하므로 반드시 그 뒤에 적용한다.
9877
+ ...TASK_AGENT_OPTIONAL_EDITS,
9892
9878
  ];
9893
9879
  // EDITS 문자열의 줄 끝을 LF로 통일한다. 이 파일의 작업 사본이 CRLF여도 core 파일(LF)과
9894
9880
  // 비교·치환이 어긋나지 않는다. core 파일 자체의 줄 끝은 건드리지 않는다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cuelo",
3
- "version": "0.9.4",
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": {