cuelo 0.9.3 → 0.9.4

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 (77) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -6
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +2 -2
  6. package/.next/required-server-files.json +2 -2
  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/updates/route.js +1 -1
  26. package/.next/server/app/index.html +1 -1
  27. package/.next/server/app/index.rsc +4 -4
  28. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  29. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  30. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  31. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  33. package/.next/server/app/office/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/office-preview.html +1 -1
  36. package/.next/server/app/office-preview.rsc +2 -2
  37. package/.next/server/app/office-preview.segments/_full.segment.rsc +2 -2
  38. package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
  39. package/.next/server/app/office-preview.segments/_index.segment.rsc +2 -2
  40. package/.next/server/app/office-preview.segments/_tree.segment.rsc +1 -1
  41. package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
  42. package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
  43. package/.next/server/app/office.html +1 -1
  44. package/.next/server/app/office.rsc +4 -4
  45. package/.next/server/app/office.segments/_full.segment.rsc +4 -4
  46. package/.next/server/app/office.segments/_head.segment.rsc +1 -1
  47. package/.next/server/app/office.segments/_index.segment.rsc +2 -2
  48. package/.next/server/app/office.segments/_tree.segment.rsc +1 -1
  49. package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +3 -3
  50. package/.next/server/app/office.segments/office.segment.rsc +1 -1
  51. package/.next/server/app/page_client-reference-manifest.js +1 -1
  52. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app/recover.html +1 -1
  54. package/.next/server/app/recover.rsc +2 -2
  55. package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
  56. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  57. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  58. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  59. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  60. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  61. package/.next/server/app-paths-manifest.json +6 -6
  62. package/.next/server/chunks/5489.js +2 -2
  63. package/.next/server/middleware-build-manifest.js +1 -1
  64. package/.next/server/pages/404.html +1 -1
  65. package/.next/server/pages/500.html +1 -1
  66. package/.next/server/server-reference-manifest.json +1 -1
  67. package/.next/static/chunks/{9575-0a61510a174f6087.js → 9575-08609cfc6c1cf3e1.js} +2 -2
  68. package/.next/static/chunks/app/{layout-db3a3e6c0fb3dfb8.js → layout-76b01721b96d2c1a.js} +1 -1
  69. package/.next/trace +108 -108
  70. package/.next/trace-build +1 -1
  71. package/README.md +1 -1
  72. package/Tools/CUELO_Setup/files/btw-server.js +3 -0
  73. package/Tools/CUELO_Setup/files/native-runtime-patch.js +3 -3
  74. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +51 -3
  75. package/package.json +7 -7
  76. /package/.next/static/{2K1doMCGVHZR9NtZw8xYc → 6tGLEaiCe3Wa8PkWKUhB4}/_buildManifest.js +0 -0
  77. /package/.next/static/{2K1doMCGVHZR9NtZw8xYc → 6tGLEaiCe3Wa8PkWKUhB4}/_ssgManifest.js +0 -0
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":118187280,"timestamp":698427,"id":14,"parentId":1,"tags":{},"startTime":1791129992412,"traceId":"9665b821f3c10a8b"},{"name":"run-typescript","duration":20332125,"timestamp":119290683,"id":11025,"parentId":1,"tags":{},"startTime":1791130111005,"traceId":"9665b821f3c10a8b"},{"name":"static-check","duration":4064728,"timestamp":139747321,"id":11028,"parentId":1,"tags":{},"startTime":1791130131461,"traceId":"9665b821f3c10a8b"},{"name":"static-generation","duration":12554300,"timestamp":143924773,"id":11198,"parentId":1,"tags":{},"startTime":1791130135639,"traceId":"9665b821f3c10a8b"},{"name":"collect-build-traces","duration":21422050,"timestamp":143885032,"id":11195,"parentId":1,"tags":{},"startTime":1791130135599,"traceId":"9665b821f3c10a8b"},{"name":"telemetry-flush","duration":80,"timestamp":165311412,"id":11207,"parentId":1,"tags":{},"startTime":1791130157026,"traceId":"9665b821f3c10a8b"},{"name":"next-build","duration":164719991,"timestamp":591775,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1791129992305,"traceId":"9665b821f3c10a8b"}]
1
+ [{"name":"run-webpack","duration":115136424,"timestamp":678029,"id":14,"parentId":1,"tags":{},"startTime":1791135180839,"traceId":"febc2744d0c65baa"},{"name":"run-typescript","duration":21720895,"timestamp":116238110,"id":11025,"parentId":1,"tags":{},"startTime":1791135296400,"traceId":"febc2744d0c65baa"},{"name":"static-check","duration":4345717,"timestamp":138063881,"id":11028,"parentId":1,"tags":{},"startTime":1791135318226,"traceId":"febc2744d0c65baa"},{"name":"static-generation","duration":12288780,"timestamp":142523785,"id":11198,"parentId":1,"tags":{},"startTime":1791135322686,"traceId":"febc2744d0c65baa"},{"name":"collect-build-traces","duration":22080325,"timestamp":142483913,"id":11195,"parentId":1,"tags":{},"startTime":1791135322646,"traceId":"febc2744d0c65baa"},{"name":"telemetry-flush","duration":87,"timestamp":164569114,"id":11207,"parentId":1,"tags":{},"startTime":1791135344731,"traceId":"febc2744d0c65baa"},{"name":"next-build","duration":164014653,"timestamp":554771,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1791135180716,"traceId":"febc2744d0c65baa"}]
package/README.md CHANGED
@@ -16,7 +16,7 @@ Use the same `~/.omp/agent` sessions, credentials and model configuration from t
16
16
 
17
17
  **한국어:** CUELO는 omp(oh-my-pi)를 위한 오픈소스 AI 코딩 에이전트 작업 공간이자 하네스입니다. 웹 앱은 omp SDK를 서버 안에서 실행하고, `omp` CLI와 같은 `~/.omp/agent` 디렉터리를 씁니다. 터미널에서 하던 세션을 브라우저에서 이어 가고, 다시 터미널로 돌아가도 기록·계정·모델 설정을 공유합니다.
18
18
 
19
- 내장 OMP 코어는 **18.6.0**입니다. 추론 강도를 바꾸거나 서브에이전트를 다시 이어도 예비 모델 설정을 유지하며, 별도로 설치한 `omp` CLI의 버전은 웹 업데이트와 독립적입니다.
19
+ 내장 OMP 코어는 **18.6.1**입니다. 추론 강도를 바꾸거나 서브에이전트를 다시 이어도 예비 모델 설정을 유지하며, 별도로 설치한 `omp` CLI의 버전은 웹 업데이트와 독립적입니다.
20
20
 
21
21
  CUELO의 목적은 작업 중 확인한 실패와 막힘을 기억·작업 규칙·실행 절차에 반영해, 사람이 같은 문제를 다시 지적하지 않아도 다음 작업에서 실수를 줄이는 것입니다. 원인을 확인하고 필요한 부분만 바꾸며, 다음 작업에서 적용과 효과를 확인하는 것까지를 지향합니다. 기록을 저장했다는 이유만으로 자동 개선이 끝났다고 보지는 않습니다.
22
22
 
@@ -310,6 +310,9 @@ async function handleAsk(req) {
310
310
  session,
311
311
  {
312
312
  promptText,
313
+ // 웹 사이드챗은 긴 답을 읽는 자리다. 기본 4 KiB 제한은 이미 스트리밍한 답을
314
+ // done에서 잘라 바꿔 버리므로 푼다. 반복 줄 정리는 TUI /btw와 같이 둔다(이슈 #16).
315
+ replyMaxBytes: Infinity,
313
316
  onTextDelta: d => send({ t: 'd', v: d }),
314
317
  signal: req.signal,
315
318
  },
@@ -9,9 +9,9 @@ const MEMORY_RE = /(const phase1Model = await resolveMemoryModel\(\{[^}]*?fallba
9
9
  const MEMORY_DONE = /const phase1Model = await resolveMemoryModel\(\{[^}]*?fallbackRole: "smol"/;
10
10
  const EXPECTED = {
11
11
  name: 'cuelo',
12
- version: '0.9.3',
12
+ version: '0.9.4',
13
13
  distribution: 'cuelo',
14
- coreVersion: '18.6.0',
14
+ coreVersion: '18.6.1',
15
15
  };
16
16
 
17
17
  // OMP core 18.4.12 `src/sdk.ts`: session-scoped AsyncJobManager for a process
@@ -177,7 +177,7 @@ function readNativePackage(target) {
177
177
  throw new Error(`unexpected native package ${packageJson.name}@${packageJson.version}`);
178
178
  }
179
179
  if (!build || build.distribution !== EXPECTED.distribution || build.coreVersion !== EXPECTED.coreVersion) {
180
- throw new Error('native cueloBuild metadata does not match cuelo / core 18.6.0');
180
+ throw new Error('native cueloBuild metadata does not match cuelo / core 18.6.1');
181
181
  }
182
182
  return packageJson;
183
183
  }
@@ -1161,11 +1161,16 @@ export interface IrcBridgeHost {
1161
1161
  * \`suppressRelay\` lets the session finalize a bracketed turn without
1162
1162
  * claiming it answered the parent (see #adoptParentSteerForRunningTurn).
1163
1163
  * \`adoptedRecords\` carries steers that landed after the bracket opened and
1164
- * that this same turn consumed: one finalization answers every source. */
1164
+ * that this same turn consumed: one finalization answers every source.
1165
+ * \`bracket.runningTurn\` marks a bracket opened over a turn that was ALREADY
1166
+ * running (the parent's steer did not wake it), so the monitor must not
1167
+ * treat it as parent-woken work: whether it owns the answer is only known
1168
+ * at settle. */
1165
1169
  setIrcWakeTurnObserver(
1166
1170
  observer:
1167
1171
  | ((
1168
1172
  records: AgentMessage[],
1173
+ bracket?: { runningTurn?: boolean },
1169
1174
  ) =>
1170
1175
  | ((error?: unknown, suppressRelay?: boolean, adoptedRecords?: AgentMessage[]) => void | Promise<void>)
1171
1176
  | undefined)
@@ -1230,7 +1235,9 @@ export interface IrcBridgeHost {
1230
1235
  | ((error?: unknown, suppressRelay?: boolean, adoptedRecords?: AgentMessage[]) => void | Promise<void>)
1231
1236
  | undefined;
1232
1237
  try {
1233
- finish = observer(entries.map(entry => entry.record));
1238
+ // The parent's steer did not wake this turn, and it may still strand:
1239
+ // the monitor must not claim the parent's answer up front.
1240
+ finish = observer(entries.map(entry => entry.record), { runningTurn: true });
1234
1241
  } catch (error) {
1235
1242
  logger.warn("IRC steer continuation observer failed to start", { error: String(error) });
1236
1243
  return;
@@ -1508,6 +1515,7 @@ export interface IrcBridgeHost {
1508
1515
  patched: ` #ircWakeTurnObserver:
1509
1516
  | ((
1510
1517
  records: AgentMessage[],
1518
+ bracket?: { runningTurn?: boolean },
1511
1519
  ) =>
1512
1520
  | ((error?: unknown, suppressRelay?: boolean, adoptedRecords?: AgentMessage[]) => void | Promise<void>)
1513
1521
  | undefined)
@@ -1657,6 +1665,40 @@ export interface IrcBridgeHost {
1657
1665
  patched: ` return async (turnError: unknown, suppressRelay?: boolean, adoptedRecords?: AgentMessage[]) => {
1658
1666
  unsubscribeTurn();`,
1659
1667
  },
1668
+ {
1669
+ // 18.6.1 의 executor.ts attachIrcWakeTurnMonitor 는 부모 레코드가 있는 bracket 이면 job 을 turn 시작에
1670
+ // 미리 등록하고, yield 없이 끝난 turn 도 그 job 을 relay 본문으로 정산한다(부모 wait 가 그 turn 을 기다리게).
1671
+ // 우리 #adoptParentSteerForRunningTurn 은 이미 돌던 turn 에 부모 steer 레코드로 bracket 을 열고, steer 가
1672
+ // 큐에 남으면(stranded) 침묵한다. 선등록이 그 bracket 에도 걸리면 stranded turn 이 job 으로 부모에게 답하고
1673
+ // 이어받은 continuation 이 또 답해 부모가 2건을 받는다. 그래서 관찰자에 입양 표시를 넘기고(아래 두 항목)
1674
+ // 입양 bracket 만 선등록을 건너뛴다: yield 시점 등록과 relay 는 18.6.0 과 같다. 부모가 깨운 wake·continuation
1675
+ // bracket 의 job 전달은 upstream 그대로다(ADAPT). 회귀: core-relay-regression-test.ts [1]·[2].
1676
+ // 이 헤더는 18.6.0 에서도 같은 줄이라 두 판 모두 적용된다(18.6.0 에서 bracket 은 쓰이지 않는다).
1677
+ file: "src/task/executor.ts",
1678
+ marker: "session.setIrcWakeTurnObserver((records, bracket) => {",
1679
+ anchor: "\tsession.setIrcWakeTurnObserver(records => {",
1680
+ patched: "\tsession.setIrcWakeTurnObserver((records, bracket) => {",
1681
+ },
1682
+ {
1683
+ file: "src/task/executor.ts",
1684
+ marker: "if (bracket?.runningTurn !== true && wakeSources(records, id).some(source => source.from === ownerId)) {",
1685
+ anchor: "\t\tif (wakeSources(records, id).some(source => source.from === ownerId)) registerWakeJob();",
1686
+ patched: ` // A bracket opened over a turn that was already running (a parent steer
1687
+ // adopted mid-turn) is not parent-woken work: that turn may leave the steer
1688
+ // queued, and the continuation that consumes it owns the answer. Keep the
1689
+ // yield-time registration for it so a stranded turn stays silent.
1690
+ if (bracket?.runningTurn !== true && wakeSources(records, id).some(source => source.from === ownerId)) {
1691
+ registerWakeJob();
1692
+ }`,
1693
+ // 18.6.0 에는 선등록이 없다(job 은 yield 시점에만). 그 판의 no-op.
1694
+ alternates: [{
1695
+ file: "src/task/executor.ts",
1696
+ excludes: "wakeSources(records, id).some(source => source.from === ownerId)",
1697
+ marker: "\t\t\tonYieldAccepted: registerWakeJob,",
1698
+ anchor: "\t\t\tonYieldAccepted: registerWakeJob,",
1699
+ patched: "\t\t\tonYieldAccepted: registerWakeJob,",
1700
+ }],
1701
+ },
1660
1702
  // relay 본문의 실패/취소 분기는 18.2.1에서 upstream이 가져갔다. `relayWakeTurnOutput`이
1661
1703
  // `error/aborted/abortReason/finalizeError`를 받고 `buildWakeRelayBody`가 성공·실패·취소를
1662
1704
  // 각각의 본문으로 만들며, 호출 자체도 `finally`에서 무조건 일어난다(예전에는
@@ -3074,7 +3116,7 @@ import { isUnexpectedSocketCloseMessage } from "@oh-my-pi/pi-utils/fetch-retry";
3074
3116
  {
3075
3117
  // 2026-10-04 실측: Maker 가 측정 job(bash async)을 띄우고 턴을 끝낸 지 task.agentIdleTtlMs(기본 420000ms)
3076
3118
  // 뒤 park() 가 세션을 dispose 했다. park 는 대기 중인 async 작업을 보지 않아 job 완료 알림이 전달되지 않고
3077
- // 남은 작업도 끊겼다(upstream 18.6.0 도 같다). 커밋 직전 재확인에서 작업이 남아 있으면 dispose 하지 않고
3119
+ // 남은 작업도 끊겼다(upstream 18.6.0·18.6.1 도 같다). 커밋 직전 재확인에서 작업이 남아 있으면 dispose 하지 않고
3078
3120
  // idle 타이머를 다시 건다. job 은 실행 한도, 남은 전달·yield 큐는 idle flush 로 끝나므로 영구 잔류는 없다.
3079
3121
  file: "src/registry/agent-lifecycle.ts",
3080
3122
  marker: "// HANSE: keep sessions with pending async work",
@@ -9101,6 +9143,12 @@ function parentSubagentServiceTiers(
9101
9143
  marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||_Re(i))continue;let a=i.slice(0,-6),',
9102
9144
  anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||_Re(i))continue;let a=i.slice(0,-6),',
9103
9145
  patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||_Re(i))continue;let a=i.slice(0,-6),',
9146
+ }, {
9147
+ // 18.6.1 번들의 같은 upstream 조건(NRe = isAdvisorTranscriptName) no-op. 이름만 바뀌었다.
9148
+ file: "dist/cli.js",
9149
+ marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||NRe(i))continue;let a=i.slice(0,-6),',
9150
+ anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||NRe(i))continue;let a=i.slice(0,-6),',
9151
+ patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||NRe(i))continue;let a=i.slice(0,-6),',
9104
9152
  }],
9105
9153
  },
9106
9154
  // 18.4.5 는 /ratchet 을 새로 넣으면서 `src/ratchet/prelude.ts`(코드)와 `prelude.js`(eval 텍스트 자산)를 같은 stem 으로
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cuelo",
3
- "version": "0.9.3",
3
+ "version": "0.9.4",
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.0"
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.0",
92
- "@oh-my-pi/pi-ai": "18.6.0",
93
- "@oh-my-pi/pi-coding-agent": "18.6.0",
94
- "@oh-my-pi/pi-tui": "18.6.0",
95
- "@oh-my-pi/pi-utils": "18.6.0",
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",