cuelo 0.10.0 → 0.10.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 +9 -9
- 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/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 +9 -9
- package/.next/server/chunks/1008.js +1 -1
- package/.next/server/chunks/5489.js +2 -2
- package/.next/server/chunks/6429.js +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/{9575-6f450839544bc6b3.js → 9575-9196474bb9e5c752.js} +2 -2
- package/.next/static/chunks/app/{layout-d8c1b10303bcd958.js → layout-713017c65de14601.js} +1 -1
- package/.next/trace +108 -108
- package/.next/trace-build +1 -1
- package/README.md +4 -1
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +3 -3
- package/Tools/OMP_Global_Config/agent/RULES.md +4 -0
- package/Tools/OMP_Global_Config/agent/agents/maker.md +12 -6
- package/Tools/OMP_Global_Config/agent/extensions/character-voice.ts +3 -3
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/index.ts +16 -1
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/powershell-syntax.ts +5 -4
- package/Tools/OMP_Global_Config/agent/extensions/draft/markdown.ts +226 -0
- package/Tools/OMP_Global_Config/agent/extensions/draft/ooxml.ts +222 -0
- package/Tools/OMP_Global_Config/agent/extensions/draft/pdf.ts +63 -0
- package/Tools/OMP_Global_Config/agent/extensions/draft/zip.ts +73 -0
- package/Tools/OMP_Global_Config/agent/extensions/draft.ts +211 -0
- package/Tools/OMP_Global_Config/agent/extensions/jev-runtime.ts +1 -1
- package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +16 -47
- package/Tools/OMP_Global_Config/agent/extensions/mcp-selection.ts +32 -8
- package/Tools/OMP_Global_Config/agent/extensions/skim.ts +75 -43
- package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +2 -1
- package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +5 -6
- package/Tools/OMP_Global_Config/agent/rules/omp-harness.md +1 -1
- package/Tools/OMP_Global_Config/agent/rules/subagent.md +18 -14
- package/Tools/OMP_Global_Config/agent/sop/_common.md +4 -4
- package/Tools/OMP_Global_Config/agent/sop/_writer.md +6 -0
- package/Tools/OMP_Global_Config/agent/sop/maker.md +1 -1
- package/Tools/OMP_Global_Config/agent/tools/git-finalizer/index.ts +46 -3
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +182 -0
- package/bin/cuelo.js +5 -0
- package/package.json +7 -7
- /package/.next/static/{MYIe6QFbh4yP3_wc_Fetr → S8tJkE71e2D0DgH4X1s0S}/_buildManifest.js +0 -0
- /package/.next/static/{MYIe6QFbh4yP3_wc_Fetr → S8tJkE71e2D0DgH4X1s0S}/_ssgManifest.js +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
## Common Rules
|
|
2
2
|
|
|
3
|
-
- **
|
|
4
|
-
|
|
5
|
-
model IDs, code, commands, paths,
|
|
6
|
-
|
|
3
|
+
- **The task brief and every follow-up instruction from Main are written in English (user decision
|
|
4
|
+
2026-10-09). Every user-visible progress or final prose you write stays Korean, even though the
|
|
5
|
+
brief is English.** Preserve required structural keys/headings, model IDs, code, commands, paths,
|
|
6
|
+
filenames, API names, and original errors verbatim. Hidden reasoning language is not governed.
|
|
7
7
|
- The brief's allowed boundary — the projects, paths, and ownership it names — is absolute. The
|
|
8
8
|
files it points you at are where the investigation starts, not the limit of what you may read
|
|
9
9
|
or change. Inside that boundary you own the direct cause of the assigned problem even when it
|
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
outside the brief boundary, to production or external processes, or invoking `write_memory` is
|
|
10
10
|
allowed only when the brief names the exact target and action and applicable user approval exists.
|
|
11
11
|
- Use `web_search` to discover current external information, then use `read` on the primary source.
|
|
12
|
+
- When the slice needs a document draft (Markdown, CSV, Excel, Word, PDF report or table), write it
|
|
13
|
+
with `draft(instruction, output, paths?)` first: Gemini Flash writes it (DeepSeek once on
|
|
14
|
+
failure; reference text goes to Google or B.AI) and the tool saves the file inside the cwd.
|
|
15
|
+
Open and review the produced file before you use or hand it over. Code, configuration, rules,
|
|
16
|
+
`HANDOFF.md`, your own `doc/history` record, and exact-line edits are not drafts; keep using
|
|
17
|
+
`edit`/`write` for them.
|
|
12
18
|
- Use `todo` only when the work has three or more steps. If you invoke `checkpoint`, invoke the
|
|
13
19
|
runtime-paired `rewind` before yielding.
|
|
14
20
|
- In that same first investigation, cross-check the brief itself: does changing the assigned
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: maker
|
|
3
3
|
description: Delegated end-to-end implementation agent that investigates, edits, repairs, validates its own slice, and verifies the actual surface it changed.
|
|
4
4
|
model: "@implSonnet"
|
|
5
|
-
tools: [read, bash, edit, write, grep, glob, skim, lsp, eval, generate_image, ast_grep, ast_edit, debug, todo, web_search, checkpoint]
|
|
5
|
+
tools: [read, bash, edit, write, grep, glob, skim, draft, lsp, eval, generate_image, ast_grep, ast_edit, debug, todo, web_search, checkpoint]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
You are the delegated implementation Maker on the default `modelRoles.implSonnet` slot. A delegated slice
|
|
@@ -162,6 +162,46 @@ function parseResult(stdout: string): FinalizerResult | undefined {
|
|
|
162
162
|
return undefined;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
+
/**
|
|
166
|
+
* WSL에서 Windows 드라이브(`/mnt/<드라이브>/`) 위 저장소는 Linux git이 9p로 파일마다 stat해 매우 느리다.
|
|
167
|
+
* 2026-10-08 V: 아카이브(추적 파일 21만여 개)에서 Linux `git status`는 300초를 넘겼고 finalizer 제한 시간(180초)에
|
|
168
|
+
* 걸려 `exit -1`로 끊겼다. 같은 저장소의 Windows `git.exe status`는 2.5초다. 그런 저장소는 Windows PowerShell과
|
|
169
|
+
* Windows git으로 같은 finalizer를 돌리고, 넘기는 경로는 `wslpath -w`로 바꾼다. 해당하지 않으면 undefined다.
|
|
170
|
+
*/
|
|
171
|
+
async function windowsDrivePaths(cwd: string, paths: string[], exec: Exec): Promise<string[] | undefined> {
|
|
172
|
+
if (process.platform !== "linux" || !process.env.WSL_DISTRO_NAME || !/^\/mnt\/[a-z]\//i.test(cwd)) return undefined;
|
|
173
|
+
const converted: string[] = [];
|
|
174
|
+
for (const path of paths) {
|
|
175
|
+
const result = await exec("wslpath", ["-w", path], { cwd });
|
|
176
|
+
if (result.code !== 0 || !result.stdout.trim()) throw new Error(`git_finalize: wslpath -w ${path} 변환 실패: ${(result.stderr || result.stdout).trim()}`);
|
|
177
|
+
converted.push(result.stdout.trim());
|
|
178
|
+
}
|
|
179
|
+
return converted;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* WSL Linux git이 `/mnt/...` 저장소에 만든 linked worktree는 `.git` 파일에 `gitdir: /mnt/e/...` 같은 Linux 경로를 적는다.
|
|
184
|
+
* Windows git은 이 경로를 따라가지 못해 `fatal: not a git repository`로 끝난다(2026-10-09 `.worktrees/dart-cron-order`).
|
|
185
|
+
* 대상 파일에서 위로 올라가 처음 만나는 `.git`이 그런 파일이면 true다. 그때는 느려도 Linux git으로 마감한다.
|
|
186
|
+
*/
|
|
187
|
+
export async function hasPosixGitdirWorktree(cwd: string, files: string[]): Promise<boolean> {
|
|
188
|
+
for (const file of files) {
|
|
189
|
+
let dir = dirname(resolve(cwd, file));
|
|
190
|
+
for (;;) {
|
|
191
|
+
const dotGit = join(dir, ".git");
|
|
192
|
+
const info = await stat(dotGit).catch(() => undefined);
|
|
193
|
+
if (info) {
|
|
194
|
+
if (info.isFile() && /^gitdir:\s*\//m.test(await readFile(dotGit, "utf8"))) return true;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
const parent = dirname(dir);
|
|
198
|
+
if (parent === dir) break;
|
|
199
|
+
dir = parent;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
|
|
165
205
|
const factory: CustomToolFactory = (pi) => ({
|
|
166
206
|
name: "git_finalize",
|
|
167
207
|
label: "Git Finalize",
|
|
@@ -192,10 +232,13 @@ const factory: CustomToolFactory = (pi) => ({
|
|
|
192
232
|
const tempDir = await mkdtemp(join(tmpdir(), "omp-git-finalize-"));
|
|
193
233
|
const requestPath = join(tempDir, "request.json");
|
|
194
234
|
try {
|
|
195
|
-
|
|
235
|
+
const windows = await hasPosixGitdirWorktree(pi.cwd, files)
|
|
236
|
+
? undefined
|
|
237
|
+
: await windowsDrivePaths(pi.cwd, [pi.cwd, scriptPath, requestPath], exec);
|
|
238
|
+
await writeFile(requestPath, JSON.stringify({ cwd: windows?.[0] ?? pi.cwd, files, message }), "utf8");
|
|
196
239
|
const result = await pi.exec(
|
|
197
|
-
process.platform === "win32" ? "powershell.exe" : "pwsh",
|
|
198
|
-
["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", scriptPath, "-Request", requestPath],
|
|
240
|
+
process.platform === "win32" || windows ? "powershell.exe" : "pwsh",
|
|
241
|
+
["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", windows?.[1] ?? scriptPath, "-Request", windows?.[2] ?? requestPath],
|
|
199
242
|
{ cwd: pi.cwd, signal, timeout: 180_000 },
|
|
200
243
|
);
|
|
201
244
|
const parsed = parseResult(result.stdout);
|
|
@@ -90,6 +90,9 @@ const OPUS55_ROW_1851 = OPUS55_ROW_1846.patched.replace('"tps":95.2,', '"tps":93
|
|
|
90
90
|
*/
|
|
91
91
|
const OPUS55_ROW_1870 = OPUS55_ROW_1846.patched.replace('"tps":95.2,', '"tps":97,');
|
|
92
92
|
|
|
93
|
+
// 18.8.4: 측정값만 97→96.2. upstream prefixBinding·binding controls는 그대로라 RETIRE를 유지한다.
|
|
94
|
+
const OPUS55_ROW_1884 = OPUS55_ROW_1846.patched.replace('"tps":95.2,', '"tps":96.2,');
|
|
95
|
+
|
|
93
96
|
/**
|
|
94
97
|
* 18.4.6 후보의 성립 조건: 행 시작부터 `"tps":95.2,`까지. 18.4.6 anchor와 patched가 모두 이 머리로 시작하므로 그 후보가
|
|
95
98
|
* 원래 성립하던 상태(순정 18.4.6·적용본)에서는 늘 참이다. tps 뒤 조각인 marker만 맞는 다른 판의 행(18.7.0 tps 97)을
|
|
@@ -3693,6 +3696,7 @@ export function revivedTaskDepth(ref: { parentId?: string }, registry: AgentRegi
|
|
|
3693
3696
|
{
|
|
3694
3697
|
file: "../pi-ai/src/auth/affinity.ts",
|
|
3695
3698
|
marker: "exactLabel(provider: string, sessionId: string | undefined): string | undefined {",
|
|
3699
|
+
excludes: "this.#overrides.suppressesOAuth(provider, this.isRestricted(provider, sessionId))",
|
|
3696
3700
|
anchor: ` pin(provider: string, sessionId: string, credentialId: number, options?: { restoredAtMs?: number }): boolean {
|
|
3697
3701
|
if (!sessionId || this.#overrides.has(provider)) {
|
|
3698
3702
|
return false;
|
|
@@ -3740,6 +3744,56 @@ export function revivedTaskDepth(ref: { parentId?: string }, registry: AgentRegi
|
|
|
3740
3744
|
const credential = this.get(provider, sessionId);
|
|
3741
3745
|
return credential?.type === "oauth" ? credential.exactLabel : undefined;
|
|
3742
3746
|
}`,
|
|
3747
|
+
// 18.8.4의 OAuth pool 제한은 유지하고 exactLabel만 결합한다.
|
|
3748
|
+
alternates: [{
|
|
3749
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
3750
|
+
requires: "this.#overrides.suppressesOAuth(provider, this.isRestricted(provider, sessionId))",
|
|
3751
|
+
marker: "exactLabel(provider: string, sessionId: string | undefined): string | undefined {",
|
|
3752
|
+
anchor: ` pin(provider: string, sessionId: string, credentialId: number, options?: { restoredAtMs?: number }): boolean {
|
|
3753
|
+
if (!sessionId || this.#overrides.suppressesOAuth(provider, this.isRestricted(provider, sessionId))) {
|
|
3754
|
+
return false;
|
|
3755
|
+
}
|
|
3756
|
+
const stored = this.#pool.entries(provider);
|
|
3757
|
+
const index = stored.findIndex(entry => entry.id === credentialId);
|
|
3758
|
+
const target = stored[index];
|
|
3759
|
+
if (target?.credential.type !== "oauth" || !this.allows(provider, sessionId, target.credential)) return false;
|
|
3760
|
+
const restoredAtMs = options?.restoredAtMs;
|
|
3761
|
+
this.record(provider, sessionId, "oauth", index, restoredAtMs, restoredAtMs === undefined);
|
|
3762
|
+
return true;
|
|
3763
|
+
}`,
|
|
3764
|
+
patched: ` pin(
|
|
3765
|
+
provider: string,
|
|
3766
|
+
sessionId: string,
|
|
3767
|
+
credentialId: number,
|
|
3768
|
+
options?: { restoredAtMs?: number; exactLabel?: string },
|
|
3769
|
+
): boolean {
|
|
3770
|
+
if (!sessionId || this.#overrides.suppressesOAuth(provider, this.isRestricted(provider, sessionId))) {
|
|
3771
|
+
return false;
|
|
3772
|
+
}
|
|
3773
|
+
const stored = this.#pool.entries(provider);
|
|
3774
|
+
const index = stored.findIndex(entry => entry.id === credentialId);
|
|
3775
|
+
const target = stored[index];
|
|
3776
|
+
if (target?.credential.type !== "oauth" || !this.allows(provider, sessionId, target.credential)) return false;
|
|
3777
|
+
const restoredAtMs = options?.restoredAtMs;
|
|
3778
|
+
const exactLabel = options?.exactLabel?.trim() || undefined;
|
|
3779
|
+
this.record(
|
|
3780
|
+
provider,
|
|
3781
|
+
sessionId,
|
|
3782
|
+
"oauth",
|
|
3783
|
+
index,
|
|
3784
|
+
restoredAtMs,
|
|
3785
|
+
restoredAtMs === undefined || exactLabel !== undefined,
|
|
3786
|
+
exactLabel,
|
|
3787
|
+
);
|
|
3788
|
+
return true;
|
|
3789
|
+
}
|
|
3790
|
+
|
|
3791
|
+
/** 검증된 exact summon 라벨이며 일반 warm/explicit pin에는 없다. */
|
|
3792
|
+
exactLabel(provider: string, sessionId: string | undefined): string | undefined {
|
|
3793
|
+
const credential = this.get(provider, sessionId);
|
|
3794
|
+
return credential?.type === "oauth" ? credential.exactLabel : undefined;
|
|
3795
|
+
}`,
|
|
3796
|
+
}],
|
|
3743
3797
|
},
|
|
3744
3798
|
{
|
|
3745
3799
|
// 다른 세션으로 affinity 를 복사할 때(subagent 상속 등) summon 정체성도 같이 넘긴다.
|
|
@@ -4044,6 +4098,7 @@ import { resolveUsedFraction } from "../usage";`,
|
|
|
4044
4098
|
{
|
|
4045
4099
|
file: "../pi-ai/src/auth/affinity.ts",
|
|
4046
4100
|
marker: "\tinherit(sourceSessionId: string, targetSessionId: string, skipProviders?: readonly string[]): number {",
|
|
4101
|
+
excludes: "!this.#permits(provider, targetSessionId, credential.index)",
|
|
4047
4102
|
anchor: ` inherit(sourceSessionId: string, targetSessionId: string): number {
|
|
4048
4103
|
if (!sourceSessionId || !targetSessionId || sourceSessionId === targetSessionId) return 0;
|
|
4049
4104
|
let inherited = 0;
|
|
@@ -4057,6 +4112,30 @@ import { resolveUsedFraction } from "../usage";`,
|
|
|
4057
4112
|
if (skipProviders?.includes(provider)) continue;
|
|
4058
4113
|
const credential = this.get(provider, sourceSessionId);
|
|
4059
4114
|
if (!credential) continue;`,
|
|
4115
|
+
alternates: [{
|
|
4116
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
4117
|
+
requires: "!this.#permits(provider, targetSessionId, credential.index)",
|
|
4118
|
+
marker: "\tinherit(sourceSessionId: string, targetSessionId: string, skipProviders?: readonly string[]): number {",
|
|
4119
|
+
anchor: ` inherit(sourceSessionId: string, targetSessionId: string): number {
|
|
4120
|
+
if (!sourceSessionId || !targetSessionId || sourceSessionId === targetSessionId) return 0;
|
|
4121
|
+
let inherited = 0;
|
|
4122
|
+
for (const provider of this.#pool.providers()) {
|
|
4123
|
+
const credential = this.get(provider, sourceSessionId);
|
|
4124
|
+
if (!credential || !this.#permits(provider, targetSessionId, credential.index)) continue;`,
|
|
4125
|
+
patched: ` inherit(sourceSessionId: string, targetSessionId: string, skipProviders?: readonly string[]): number {
|
|
4126
|
+
if (!sourceSessionId || !targetSessionId || sourceSessionId === targetSessionId) return 0;
|
|
4127
|
+
let inherited = 0;
|
|
4128
|
+
for (const provider of this.#pool.providers()) {
|
|
4129
|
+
if (skipProviders?.includes(provider)) continue;
|
|
4130
|
+
const credential = this.get(provider, sourceSessionId);
|
|
4131
|
+
if (!credential || !this.#permits(provider, targetSessionId, credential.index)) continue;`,
|
|
4132
|
+
}, {
|
|
4133
|
+
// 18.8.5: provider 제외는 SDK에서 upstream include 필터와 결합한다. 구현은 그대로 둔다.
|
|
4134
|
+
file: "../pi-ai/src/auth/affinity.ts",
|
|
4135
|
+
marker: "\t\tinclude?: (provider: string, explicit: boolean) => boolean,\n\t): number {",
|
|
4136
|
+
anchor: "\t\tinclude?: (provider: string, explicit: boolean) => boolean,\n\t): number {",
|
|
4137
|
+
patched: "\t\tinclude?: (provider: string, explicit: boolean) => boolean,\n\t): number {",
|
|
4138
|
+
}],
|
|
4060
4139
|
},
|
|
4061
4140
|
{
|
|
4062
4141
|
file: "../pi-ai/src/auth/types.ts",
|
|
@@ -4064,16 +4143,33 @@ import { resolveUsedFraction } from "../usage";`,
|
|
|
4064
4143
|
anchor: "\tinherit(sourceSessionId: string, targetSessionId: string): number;",
|
|
4065
4144
|
patched: ` /** \`skipProviders\`: providers whose affinity the target must choose fresh instead of copying. */
|
|
4066
4145
|
inherit(sourceSessionId: string, targetSessionId: string, skipProviders?: readonly string[]): number;`,
|
|
4146
|
+
alternates: [{
|
|
4147
|
+
file: "../pi-ai/src/auth/types.ts",
|
|
4148
|
+
marker: "\t\tinclude?: (provider: string, explicit: boolean) => boolean,\n\t): number;",
|
|
4149
|
+
anchor: "\t\tinclude?: (provider: string, explicit: boolean) => boolean,\n\t): number;",
|
|
4150
|
+
patched: "\t\tinclude?: (provider: string, explicit: boolean) => boolean,\n\t): number;",
|
|
4151
|
+
}],
|
|
4067
4152
|
},
|
|
4068
4153
|
{
|
|
4069
4154
|
file: "src/sdk.ts",
|
|
4070
4155
|
marker: "\tcredentialInheritSkipProviders?: readonly string[];",
|
|
4156
|
+
excludes: "oauthAccountPools?: OAuthAccountPools;",
|
|
4071
4157
|
anchor: "\tcredentialSourceSessionId?: string;\n\n\t/** Model to use. Default: from settings, else first available */",
|
|
4072
4158
|
patched: ` credentialSourceSessionId?: string;
|
|
4073
4159
|
/** Providers whose {@link credentialSourceSessionId} affinity is not copied; the child selects them fresh. */
|
|
4074
4160
|
credentialInheritSkipProviders?: readonly string[];
|
|
4075
4161
|
|
|
4076
4162
|
/** Model to use. Default: from settings, else first available */`,
|
|
4163
|
+
alternates: [{
|
|
4164
|
+
file: "src/sdk.ts",
|
|
4165
|
+
requires: "oauthAccountPools?: OAuthAccountPools;",
|
|
4166
|
+
marker: "\tcredentialInheritSkipProviders?: readonly string[];",
|
|
4167
|
+
anchor: "\tcredentialSourceSessionId?: string;\n",
|
|
4168
|
+
patched: ` credentialSourceSessionId?: string;
|
|
4169
|
+
/** 부모 affinity 중 새로 선택할 provider만 제외하며 OAuth pool 제한은 유지한다. */
|
|
4170
|
+
credentialInheritSkipProviders?: readonly string[];
|
|
4171
|
+
`,
|
|
4172
|
+
}],
|
|
4077
4173
|
},
|
|
4078
4174
|
{
|
|
4079
4175
|
file: "src/sdk.ts",
|
|
@@ -4081,6 +4177,12 @@ import { resolveUsedFraction } from "../usage";`,
|
|
|
4081
4177
|
anchor: "\t\tmodelRegistry.authStorage.sessions.inherit(options.credentialSourceSessionId, providerSessionId);",
|
|
4082
4178
|
patched: ` modelRegistry.authStorage.sessions.inherit(
|
|
4083
4179
|
options.credentialSourceSessionId, providerSessionId, options.credentialInheritSkipProviders);`,
|
|
4180
|
+
alternates: [{
|
|
4181
|
+
file: "src/sdk.ts",
|
|
4182
|
+
marker: "!options.credentialInheritSkipProviders?.includes(provider) && (explicit || !ownPins.has(provider))",
|
|
4183
|
+
anchor: "\t\t\t(provider, explicit) => explicit || !ownPins.has(provider),",
|
|
4184
|
+
patched: "\t\t\t(provider, explicit) => !options.credentialInheritSkipProviders?.includes(provider) && (explicit || !ownPins.has(provider)),",
|
|
4185
|
+
}],
|
|
4084
4186
|
},
|
|
4085
4187
|
{
|
|
4086
4188
|
file: "src/task/executor.ts",
|
|
@@ -4099,9 +4201,18 @@ import { resolveUsedFraction } from "../usage";`,
|
|
|
4099
4201
|
// 두 앵커 모두 18.4.4·18.4.5에 정확히 한 번 있고 18.4.4 적용본의 patched 도 그대로 성립한다.
|
|
4100
4202
|
file: "../pi-ai/src/auth/cascade.ts",
|
|
4101
4203
|
marker: "const exactOAuthLabel = this.#deps.affinity.exactLabel(provider, sessionId);",
|
|
4204
|
+
excludes: "let oauthResolved: OAuthResolutionResult | undefined;",
|
|
4102
4205
|
anchor: ` const oauthResolved = await this.#deps.selector.resolveOAuth(provider, sessionId, options);`,
|
|
4103
4206
|
patched: ` const exactOAuthLabel = this.#deps.affinity.exactLabel(provider, sessionId);
|
|
4104
4207
|
const oauthResolved = await this.#deps.selector.resolveOAuth(provider, sessionId, options);`,
|
|
4208
|
+
alternates: [{
|
|
4209
|
+
file: "../pi-ai/src/auth/cascade.ts",
|
|
4210
|
+
requires: "let oauthResolved: OAuthResolutionResult | undefined;",
|
|
4211
|
+
marker: "const exactOAuthLabel = this.#deps.affinity.exactLabel(provider, sessionId);",
|
|
4212
|
+
anchor: "\t\tlet oauthResolved: OAuthResolutionResult | undefined;",
|
|
4213
|
+
// 라벨은 refresh 전에 캡처한다. upstream의 transient catch와 restricted 검사·후속 fallback은 그대로다.
|
|
4214
|
+
patched: "\t\tconst exactOAuthLabel = this.#deps.affinity.exactLabel(provider, sessionId);\n\t\tlet oauthResolved: OAuthResolutionResult | undefined;",
|
|
4215
|
+
}],
|
|
4105
4216
|
},
|
|
4106
4217
|
{
|
|
4107
4218
|
file: "../pi-ai/src/auth/cascade.ts",
|
|
@@ -6009,6 +6120,7 @@ const LOG_FILE = "output.log";
|
|
|
6009
6120
|
// 남긴다. Windows(startArgv)·pipe 경로와 서버 변수가 없던 broker 는 그대로다.
|
|
6010
6121
|
file: "src/launch/broker.ts",
|
|
6011
6122
|
marker: "const dropped = [...brokerDroppedHostEnv]",
|
|
6123
|
+
excludes: "quotePosixArgv",
|
|
6012
6124
|
anchor: ` const argv = [record.spec.application, ...record.spec.args];
|
|
6013
6125
|
const command = \`exec \${argv.map(quoteShellArg).join(" ")}\`;`,
|
|
6014
6126
|
patched: ` // HANSE: CUELO next server env stays out of POSIX PTY services. The native PTY layers its env
|
|
@@ -6021,6 +6133,21 @@ const LOG_FILE = "output.log";
|
|
|
6021
6133
|
...record.spec.args,
|
|
6022
6134
|
];
|
|
6023
6135
|
const command = \`exec \${argv.map(quoteShellArg).join(" ")}\`;`,
|
|
6136
|
+
alternates: [{
|
|
6137
|
+
file: "src/launch/broker.ts",
|
|
6138
|
+
requires: "quotePosixArgv",
|
|
6139
|
+
marker: "const dropped = [...brokerDroppedHostEnv]",
|
|
6140
|
+
anchor: ` const argv = [record.spec.application, ...record.spec.args];
|
|
6141
|
+
const command = \`exec \${quotePosixArgv(argv)}\`;`,
|
|
6142
|
+
patched: ` // PTY가 OS 환경을 다시 상속하므로 서버 변수는 exec 직전에 제거한다. 호출자 override는 남긴다.
|
|
6143
|
+
const dropped = [...brokerDroppedHostEnv].filter(name => !(name in options.env));
|
|
6144
|
+
const argv = [
|
|
6145
|
+
...(dropped.length > 0 ? ["env", ...dropped.flatMap(name => ["-u", name])] : []),
|
|
6146
|
+
record.spec.application,
|
|
6147
|
+
...record.spec.args,
|
|
6148
|
+
];
|
|
6149
|
+
const command = \`exec \${quotePosixArgv(argv)}\`;`,
|
|
6150
|
+
}],
|
|
6024
6151
|
},
|
|
6025
6152
|
{
|
|
6026
6153
|
// 2026-09-29 jevgrep 비교(.omp/jevgrep-comparison/SUMMARY.md §4): jfind 의 비밀 파일 제외는 이름을
|
|
@@ -10080,6 +10207,7 @@ function parentSubagentServiceTiers(
|
|
|
10080
10207
|
{ ...OPUS55_ROW_1846, excludes: OPUS55_ROW_1851, requires: OPUS55_HEAD_1846 },
|
|
10081
10208
|
{ file: "../pi-catalog/src/models.json", marker: OPUS55_ROW_1851, anchor: OPUS55_ROW_1851, patched: OPUS55_ROW_1851 },
|
|
10082
10209
|
{ file: "../pi-catalog/src/models.json", marker: OPUS55_ROW_1870, anchor: OPUS55_ROW_1870, patched: OPUS55_ROW_1870 },
|
|
10210
|
+
{ file: "../pi-catalog/src/models.json", marker: OPUS55_ROW_1884, anchor: OPUS55_ROW_1884, patched: OPUS55_ROW_1884 },
|
|
10083
10211
|
],
|
|
10084
10212
|
},
|
|
10085
10213
|
{
|
|
@@ -10115,6 +10243,24 @@ function parentSubagentServiceTiers(
|
|
|
10115
10243
|
marker: '{"source":"classes/anthropic.kdl:150","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:166",',
|
|
10116
10244
|
anchor: '{"source":"classes/anthropic.kdl:150","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:166",',
|
|
10117
10245
|
patched: '{"source":"classes/anthropic.kdl:150","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:166",',
|
|
10246
|
+
}, {
|
|
10247
|
+
// 18.8.4: upstream Opus prefixBinding 규칙이 kdl:170으로 이동했다. 동일 의미의 no-op.
|
|
10248
|
+
file: "../pi-catalog/src/compat/rules.json",
|
|
10249
|
+
marker: '{"source":"classes/anthropic.kdl:170","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10250
|
+
anchor: '{"source":"classes/anthropic.kdl:170","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10251
|
+
patched: '{"source":"classes/anthropic.kdl:170","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10252
|
+
}, {
|
|
10253
|
+
// 18.8.5: 출처 줄만 이동했으며 prefixBinding 의미는 동일하다.
|
|
10254
|
+
file: "../pi-catalog/src/compat/rules.json",
|
|
10255
|
+
marker: '{"source":"classes/anthropic.kdl:171","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10256
|
+
anchor: '{"source":"classes/anthropic.kdl:171","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10257
|
+
patched: '{"source":"classes/anthropic.kdl:171","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10258
|
+
}, {
|
|
10259
|
+
// 18.8.6: 출처 줄만 kdl:177로 이동했으며 prefixBinding 의미는 동일하다.
|
|
10260
|
+
file: "../pi-catalog/src/compat/rules.json",
|
|
10261
|
+
marker: '{"source":"classes/anthropic.kdl:177","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10262
|
+
anchor: '{"source":"classes/anthropic.kdl:177","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10263
|
+
patched: '{"source":"classes/anthropic.kdl:177","class":"anthropic","family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsForcedToolChoice":false},"thinking":{"prefixBinding":true}}',
|
|
10118
10264
|
}],
|
|
10119
10265
|
},
|
|
10120
10266
|
{
|
|
@@ -10158,6 +10304,24 @@ function parentSubagentServiceTiers(
|
|
|
10158
10304
|
marker: '{"source":"classes/anthropic.kdl:240","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10159
10305
|
anchor: '{"source":"classes/anthropic.kdl:240","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10160
10306
|
patched: '{"source":"classes/anthropic.kdl:240","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10307
|
+
}, {
|
|
10308
|
+
// 18.8.4: upstream binding controls 규칙이 kdl:283으로 이동했다. provider 범위도 동일한 no-op.
|
|
10309
|
+
file: "../pi-catalog/src/compat/rules.json",
|
|
10310
|
+
marker: '{"source":"classes/anthropic.kdl:283","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10311
|
+
anchor: '{"source":"classes/anthropic.kdl:283","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10312
|
+
patched: '{"source":"classes/anthropic.kdl:283","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10313
|
+
}, {
|
|
10314
|
+
// 18.8.5: 출처 줄만 이동했으며 provider·revision 경계도 동일하다.
|
|
10315
|
+
file: "../pi-catalog/src/compat/rules.json",
|
|
10316
|
+
marker: '{"source":"classes/anthropic.kdl:284","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10317
|
+
anchor: '{"source":"classes/anthropic.kdl:284","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10318
|
+
patched: '{"source":"classes/anthropic.kdl:284","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10319
|
+
}, {
|
|
10320
|
+
// 18.8.6: 출처 줄만 kdl:290으로 이동했으며 provider·revision 경계도 동일하다.
|
|
10321
|
+
file: "../pi-catalog/src/compat/rules.json",
|
|
10322
|
+
marker: '{"source":"classes/anthropic.kdl:290","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10323
|
+
anchor: '{"source":"classes/anthropic.kdl:290","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10324
|
+
patched: '{"source":"classes/anthropic.kdl:290","class":"anthropic","providers":["anthropic","cloudflare-ai-gateway"],"family":"opus","revision":[{"op":">=","revision":"5.5.0"},{"op":"<","revision":"6.0.0"}],"wire":{"supportsThinkingBindingControls":true}}',
|
|
10161
10325
|
}],
|
|
10162
10326
|
},
|
|
10163
10327
|
// 위 세 항목과 짝: modelOverrides의 thinking은 buildModel이 규칙으로 채운 thinking을 통째로 덮어써서, override가
|
|
@@ -10409,6 +10573,24 @@ function parentSubagentServiceTiers(
|
|
|
10409
10573
|
marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||oCe(i))continue;let a=i.slice(0,-6),',
|
|
10410
10574
|
anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||oCe(i))continue;let a=i.slice(0,-6),',
|
|
10411
10575
|
patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||oCe(i))continue;let a=i.slice(0,-6),',
|
|
10576
|
+
}, {
|
|
10577
|
+
// 18.8.4 번들의 같은 upstream 조건(cCe = isAdvisorTranscriptName) no-op.
|
|
10578
|
+
file: "dist/cli.js",
|
|
10579
|
+
marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||cCe(i))continue;let a=i.slice(0,-6),',
|
|
10580
|
+
anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||cCe(i))continue;let a=i.slice(0,-6),',
|
|
10581
|
+
patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||cCe(i))continue;let a=i.slice(0,-6),',
|
|
10582
|
+
}, {
|
|
10583
|
+
// 18.8.5: RCe는 같은 isAdvisorTranscriptName 함수다. 새 번들도 upstream 제외를 유지한다.
|
|
10584
|
+
file: "dist/cli.js",
|
|
10585
|
+
marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||RCe(i))continue;let a=i.slice(0,-6),',
|
|
10586
|
+
anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||RCe(i))continue;let a=i.slice(0,-6),',
|
|
10587
|
+
patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||RCe(i))continue;let a=i.slice(0,-6),',
|
|
10588
|
+
}, {
|
|
10589
|
+
// 18.8.6: LCe는 같은 isAdvisorTranscriptName 함수다(`e===NCe||e.startsWith(\`${DCe}.\`)&&e.endsWith(...)`).
|
|
10590
|
+
file: "dist/cli.js",
|
|
10591
|
+
marker: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||LCe(i))continue;let a=i.slice(0,-6),',
|
|
10592
|
+
anchor: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||LCe(i))continue;let a=i.slice(0,-6),',
|
|
10593
|
+
patched: 'if(!i.endsWith(".jsonl")||i.includes(".bak")||LCe(i))continue;let a=i.slice(0,-6),',
|
|
10412
10594
|
}],
|
|
10413
10595
|
},
|
|
10414
10596
|
// 18.4.5 는 /ratchet 을 새로 넣으면서 `src/ratchet/prelude.ts`(코드)와 `prelude.js`(eval 텍스트 자산)를 같은 stem 으로
|
package/bin/cuelo.js
CHANGED
|
@@ -227,6 +227,11 @@ function startServer() {
|
|
|
227
227
|
CUELO_SHELL_ENV_BASELINE: JSON.stringify({ NODE_ENV: process.env.NODE_ENV, PORT: process.env.PORT }),
|
|
228
228
|
}),
|
|
229
229
|
});
|
|
230
|
+
// 서비스 묶음(install.mjs start)이 다른 서비스가 죽어 이 프로세스를 내릴 때 next도 같이 내려간다. 넘기지 않으면 next가
|
|
231
|
+
// 고아로 남아 포트와 출력 파이프를 쥐고, install.mjs가 끝나지 못해 유닛 재시작이 일어나지 않는다(2026-10-08 실측).
|
|
232
|
+
for (const signal of ["SIGINT", "SIGTERM"]) {
|
|
233
|
+
process.on(signal, () => child.kill(signal));
|
|
234
|
+
}
|
|
230
235
|
|
|
231
236
|
child.on("error", (error) => {
|
|
232
237
|
console.error(`Failed to launch CUELO through Bun (${bunPath}): ${error.message}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cuelo",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.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.8.
|
|
33
|
+
"coreVersion": "18.8.6"
|
|
34
34
|
},
|
|
35
35
|
"engines": {
|
|
36
36
|
"node": ">=22.19.0",
|
|
@@ -89,11 +89,11 @@
|
|
|
89
89
|
"test:coverage": "bun test --coverage ./app ./components ./hooks ./lib ./public ./bin ./install.test.mjs"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@oh-my-pi/pi-agent-core": "18.8.
|
|
93
|
-
"@oh-my-pi/pi-ai": "18.8.
|
|
94
|
-
"@oh-my-pi/pi-coding-agent": "18.8.
|
|
95
|
-
"@oh-my-pi/pi-tui": "18.8.
|
|
96
|
-
"@oh-my-pi/pi-utils": "18.8.
|
|
92
|
+
"@oh-my-pi/pi-agent-core": "18.8.6",
|
|
93
|
+
"@oh-my-pi/pi-ai": "18.8.6",
|
|
94
|
+
"@oh-my-pi/pi-coding-agent": "18.8.6",
|
|
95
|
+
"@oh-my-pi/pi-tui": "18.8.6",
|
|
96
|
+
"@oh-my-pi/pi-utils": "18.8.6",
|
|
97
97
|
"@seed-design/css": "2.8.0",
|
|
98
98
|
"@seed-design/react": "2.4.1",
|
|
99
99
|
"@seed-design/tailwind4-theme": "2.4.0",
|
|
File without changes
|
|
File without changes
|