cuelo 0.9.2 → 0.9.3
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 +1 -1
- package/.next/required-server-files.json +1 -1
- 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 +6 -6
- package/.next/server/chunks/5489.js +2 -2
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{9575-2bfc351b31f30a41.js → 9575-0a61510a174f6087.js} +2 -2
- package/.next/static/chunks/app/{layout-8ee6fa0157a0b288.js → layout-db3a3e6c0fb3dfb8.js} +1 -1
- package/.next/trace +108 -108
- package/.next/trace-build +1 -1
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
- package/Tools/OMP_Global_Config/agent/RULES.md +2 -2
- package/Tools/OMP_Global_Config/agent/extensions/gitnexus-autosync.ts +333 -0
- package/Tools/OMP_Global_Config/agent/extensions/image-question-router.ts +25 -17
- package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +1 -1
- package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +2 -2
- package/Tools/OMP_Global_Config/agent/rules/subagent.md +5 -5
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +131 -26
- package/package.json +1 -1
- /package/.next/static/{ZY07mKbniJf7UEsQUdUMV → 2K1doMCGVHZR9NtZw8xYc}/_buildManifest.js +0 -0
- /package/.next/static/{ZY07mKbniJf7UEsQUdUMV → 2K1doMCGVHZR9NtZw8xYc}/_ssgManifest.js +0 -0
|
@@ -85,6 +85,37 @@ const OPUS55_ROW_18410 = {
|
|
|
85
85
|
*/
|
|
86
86
|
const OPUS55_ROW_1851 = OPUS55_ROW_1846.patched.replace('"tps":95.2,', '"tps":93,');
|
|
87
87
|
|
|
88
|
+
/**
|
|
89
|
+
* 기억 임베딩 (6) 항목의 본문. 0.9.3 은 recall 이 e5 여부로 dense 하한을 고르게 `usesE5Prefix` 를 export 한다.
|
|
90
|
+
* 0.9.2 적용본(export 없음)은 legacyPatched 로 남겨 같은 항목이 새 판으로 바꾼다.
|
|
91
|
+
*/
|
|
92
|
+
const e5EmbeddingBlock = (exportUsesE5Prefix) => `// HANSE: local embedding fingerprint and e5 prefixes
|
|
93
|
+
const E5_PREFIX_STAMP = "e5-prefix-v1";
|
|
94
|
+
|
|
95
|
+
/** The local fastembed model in use (no injected provider, not an API model), or null. */
|
|
96
|
+
function localEmbeddingModel(): string | null {
|
|
97
|
+
if (resolveEmbeddingProvider(activeEmbeddingOptions()?.provider) !== undefined || providerOverride !== null) return null;
|
|
98
|
+
const model = defaultModel();
|
|
99
|
+
return isApiModel(model) ? null : model;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
${exportUsesE5Prefix ? "export " : ""}function usesE5Prefix(): boolean {
|
|
103
|
+
const model = localEmbeddingModel();
|
|
104
|
+
return model !== null && /(^|[/_-])e5([-_]|$)/i.test(model);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Adds the e5 retrieval prefix for local e5 models; other models embed the text as-is. */
|
|
108
|
+
export function e5Prefixed(kind: "query" | "passage", texts: readonly string[]): readonly string[] {
|
|
109
|
+
return usesE5Prefix() ? texts.map(text => \`\${kind}: \${text}\`) : texts;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function currentEmbeddingModel(): string {
|
|
113
|
+
const model = localEmbeddingModel();
|
|
114
|
+
if (model === null) return defaultModel();
|
|
115
|
+
return \`\${model}#\${fastembedRuntimeInstallPlan().versionKey}\${usesE5Prefix() ? \`#\${E5_PREFIX_STAMP}\` : ""}\`;
|
|
116
|
+
}
|
|
117
|
+
`;
|
|
118
|
+
|
|
88
119
|
/** 각 항목: 원본 앵커를 찾아 patched 로 바꾼다. marker 가 있으면 이미 적용된 것으로 본다. */
|
|
89
120
|
const EDITS = [
|
|
90
121
|
{
|
|
@@ -5887,6 +5918,15 @@ export class LearnTool implements AgentTool<LearnSchema> {`,
|
|
|
5887
5918
|
patched: "unique name; ready requires name; no async/timeout. env adds variables (exported before the command); pty defaults true.",
|
|
5888
5919
|
}],
|
|
5889
5920
|
},
|
|
5921
|
+
{
|
|
5922
|
+
// 2026-10-04 집계: bash 안의 `powershell -Command "...$x..."` 가 command-guard 에 막힌 일이 14일 14건(10-02 이후 12)이다.
|
|
5923
|
+
// 규칙은 RULES·skill 에 있지만 실수는 bash 호출 자리에서 나므로, Windows 에서만 도구 설명에 우회 경로를 적는다.
|
|
5924
|
+
// patched 에 달러 기호를 넣지 않는다: 문자열 replace 가 달러+백틱을 '일치 앞 전체' 로 해석해 파일을 망가뜨렸다.
|
|
5925
|
+
file: "src/prompts/tools/bash.md",
|
|
5926
|
+
marker: "{{#if isWindows}}PowerShell logic:",
|
|
5927
|
+
anchor: "Internal URIs work as paths for builtins/coreutils, redirects, globs.\n",
|
|
5928
|
+
patched: "Internal URIs work as paths for builtins/coreutils, redirects, globs.\n{{#if isWindows}}PowerShell logic: `write` a `.ps1`, then `powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:/abs/path.ps1`; never `-Command` with PowerShell variables (this shell rewrites them). Windows paths: forward slashes.{{/if}}\n",
|
|
5929
|
+
},
|
|
5890
5930
|
{
|
|
5891
5931
|
// 같은 집계: `todo` append 에 phase 를 빠뜨리면 거절됐다(사흘간 9건). phase 가 없으면 아직 안 끝난
|
|
5892
5932
|
// 일이 있는 첫 phase, 없으면 마지막 phase, phase 가 없으면 init 기본 이름에 붙인다.
|
|
@@ -6096,32 +6136,8 @@ function koreanStem(token: string): string {
|
|
|
6096
6136
|
file: "../pi-mnemopi/src/core/embeddings.ts",
|
|
6097
6137
|
marker: "// HANSE: local embedding fingerprint and e5 prefixes",
|
|
6098
6138
|
anchor: "export function currentEmbeddingModel(): string {\n\treturn defaultModel();\n}\n",
|
|
6099
|
-
patched:
|
|
6100
|
-
|
|
6101
|
-
|
|
6102
|
-
/** The local fastembed model in use (no injected provider, not an API model), or null. */
|
|
6103
|
-
function localEmbeddingModel(): string | null {
|
|
6104
|
-
if (resolveEmbeddingProvider(activeEmbeddingOptions()?.provider) !== undefined || providerOverride !== null) return null;
|
|
6105
|
-
const model = defaultModel();
|
|
6106
|
-
return isApiModel(model) ? null : model;
|
|
6107
|
-
}
|
|
6108
|
-
|
|
6109
|
-
function usesE5Prefix(): boolean {
|
|
6110
|
-
const model = localEmbeddingModel();
|
|
6111
|
-
return model !== null && /(^|[/_-])e5([-_]|$)/i.test(model);
|
|
6112
|
-
}
|
|
6113
|
-
|
|
6114
|
-
/** Adds the e5 retrieval prefix for local e5 models; other models embed the text as-is. */
|
|
6115
|
-
export function e5Prefixed(kind: "query" | "passage", texts: readonly string[]): readonly string[] {
|
|
6116
|
-
return usesE5Prefix() ? texts.map(text => \`\${kind}: \${text}\`) : texts;
|
|
6117
|
-
}
|
|
6118
|
-
|
|
6119
|
-
export function currentEmbeddingModel(): string {
|
|
6120
|
-
const model = localEmbeddingModel();
|
|
6121
|
-
if (model === null) return defaultModel();
|
|
6122
|
-
return \`\${model}#\${fastembedRuntimeInstallPlan().versionKey}\${usesE5Prefix() ? \`#\${E5_PREFIX_STAMP}\` : ""}\`;
|
|
6123
|
-
}
|
|
6124
|
-
`,
|
|
6139
|
+
patched: e5EmbeddingBlock(true),
|
|
6140
|
+
legacyPatched: e5EmbeddingBlock(false),
|
|
6125
6141
|
},
|
|
6126
6142
|
{
|
|
6127
6143
|
file: "../pi-mnemopi/src/core/embeddings.ts",
|
|
@@ -6147,6 +6163,95 @@ export function currentEmbeddingModel(): string {
|
|
|
6147
6163
|
anchor: 'import { currentEmbeddingModel, embed } from "../embeddings";\n',
|
|
6148
6164
|
patched: 'import { currentEmbeddingModel, e5Prefixed, embed } from "../embeddings";\n',
|
|
6149
6165
|
},
|
|
6166
|
+
{
|
|
6167
|
+
// (7) SHMR(core/shmr.ts)도 같은 e5 공간을 쓴다. harmonize 는 memory_embeddings 의 저장 벡터(passage: 접두)와
|
|
6168
|
+
// embedBatch 가 새로 만든 벡터를 한 코사인 군집에서 섞는데, embedBatch 만 접두 없이 임베딩해 두 공간이 갈렸다.
|
|
6169
|
+
// 기억·belief 텍스트는 passage: 로, recallBeliefs 의 질의만 query: 로 임베딩한다. 한 호출 안에서 접두를 정해
|
|
6170
|
+
// 실패 시 hash fallback 이 묶음 전체에 걸리는 기존 계약은 그대로다. 이 벡터는 저장하지 않아 stamp 는 그대로다.
|
|
6171
|
+
file: "../pi-mnemopi/src/core/shmr.ts",
|
|
6172
|
+
marker: "// HANSE: shmr e5 prefixes",
|
|
6173
|
+
anchor: "export async function embedBatch(texts: readonly string[]): Promise<Vector[]> {\n\tif (texts.length === 0) return [];\n\tlet matrix: embeddings.EmbeddingMatrix | null = null;\n\ttry {\n\t\tmatrix = await embeddings.embed(texts);\n",
|
|
6174
|
+
patched: `// HANSE: shmr e5 prefixes
|
|
6175
|
+
export async function embedBatch(
|
|
6176
|
+
texts: readonly string[],
|
|
6177
|
+
providerTexts: readonly string[] = embeddings.e5Prefixed("passage", texts),
|
|
6178
|
+
): Promise<Vector[]> {
|
|
6179
|
+
if (texts.length === 0) return [];
|
|
6180
|
+
let matrix: embeddings.EmbeddingMatrix | null = null;
|
|
6181
|
+
try {
|
|
6182
|
+
matrix = await embeddings.embed(providerTexts);
|
|
6183
|
+
`,
|
|
6184
|
+
},
|
|
6185
|
+
{
|
|
6186
|
+
file: "../pi-mnemopi/src/core/shmr.ts",
|
|
6187
|
+
marker: 'embeddings.e5Prefixed("query", [query])',
|
|
6188
|
+
anchor: "\tconst vectors = await embedBatch([query, ...rows.map(row => row.object)]);\n",
|
|
6189
|
+
patched: ` const objects = rows.map(row => row.object);
|
|
6190
|
+
const vectors = await embedBatch(
|
|
6191
|
+
[query, ...objects],
|
|
6192
|
+
[...embeddings.e5Prefixed("query", [query]), ...embeddings.e5Prefixed("passage", objects)],
|
|
6193
|
+
);
|
|
6194
|
+
`,
|
|
6195
|
+
},
|
|
6196
|
+
{
|
|
6197
|
+
// (8) 2026-10-05 후속 측정(재임베딩 복사본, 190문항 + 교차 44 + 대조 70): 한국어 질의에 영어로 저장한 교훈은
|
|
6198
|
+
// dense 점수가 1위와 거의 같은데 어휘 점수가 0.034 대 0.277 로 밀려 hit@8 14.3% 였다. 질의와 기억의 주 문자
|
|
6199
|
+
// (한글/라틴)가 다르면 어휘 겹침이 구조적으로 0 에 가까우므로 working 기억의 어휘 점수에 하한 0.3 을 둔다.
|
|
6200
|
+
// e5 코사인은 0.6~0.9 에 몰려 기존 dense 하한 0.65 가 거의 거르지 못해 e5 일 때만 0.82 로 올린다.
|
|
6201
|
+
// 둘을 함께 쓰면 질문 h1/h8/MRR 58.9/77.8/0.644→64.4/83.3/0.722, 작업 h8 67.8→73.3, 한→영 질문 h8 14.3→47.6.
|
|
6202
|
+
// 무관 질의에도 상위 기억을 채우는 동작은 남는다: 점수 컷은 대조 주입률 1.4% 에서 정답 hit@8 이 77→65 로 떨어져 넣지 않았다.
|
|
6203
|
+
file: "../pi-mnemopi/src/core/beam/recall.ts",
|
|
6204
|
+
marker: "import { embedQuery, usesE5Prefix } from",
|
|
6205
|
+
anchor: 'import { embedQuery } from "../embeddings";\n',
|
|
6206
|
+
patched: 'import { embedQuery, usesE5Prefix } from "../embeddings";\n',
|
|
6207
|
+
},
|
|
6208
|
+
{
|
|
6209
|
+
file: "../pi-mnemopi/src/core/beam/recall.ts",
|
|
6210
|
+
marker: "\t__queryHangulMajority?: boolean;\n",
|
|
6211
|
+
anchor: "\tupdateRecallCounts?: boolean;\n};\n",
|
|
6212
|
+
patched: "\tupdateRecallCounts?: boolean;\n\t// HANSE: cross-script recall (recall() 이 정해 scoreCandidate 에 넘긴다)\n\t__queryHangulMajority?: boolean;\n\t__denseFloor?: number;\n};\n",
|
|
6213
|
+
},
|
|
6214
|
+
{
|
|
6215
|
+
file: "../pi-mnemopi/src/core/beam/recall.ts",
|
|
6216
|
+
marker: "const CROSS_SCRIPT_LEXICAL_FLOOR = 0.3;",
|
|
6217
|
+
anchor: "function scoreCandidate(\n\tcandidate: MemoryCandidate,\n",
|
|
6218
|
+
patched: `// HANSE: cross-script recall
|
|
6219
|
+
const CROSS_SCRIPT_LEXICAL_FLOOR = 0.3;
|
|
6220
|
+
const E5_DENSE_FLOOR = 0.82;
|
|
6221
|
+
|
|
6222
|
+
/** 한글과 라틴 글자 중 한글이 절반 이상이면 true. 둘 다 없으면 false. */
|
|
6223
|
+
function hangulMajority(text: string): boolean {
|
|
6224
|
+
const hangul = text.match(/[\\uac00-\\ud7af]/g)?.length ?? 0;
|
|
6225
|
+
const latin = text.match(/[A-Za-z]/g)?.length ?? 0;
|
|
6226
|
+
return hangul + latin > 0 && hangul / (hangul + latin) >= 0.5;
|
|
6227
|
+
}
|
|
6228
|
+
|
|
6229
|
+
function scoreCandidate(
|
|
6230
|
+
candidate: MemoryCandidate,
|
|
6231
|
+
`,
|
|
6232
|
+
},
|
|
6233
|
+
{
|
|
6234
|
+
file: "../pi-mnemopi/src/core/beam/recall.ts",
|
|
6235
|
+
marker: "// HANSE: cross-script lexical floor and e5 dense floor",
|
|
6236
|
+
anchor: "\tconst lexical = lexicalGroupRelevance(queryGroups, searchableContent);\n\tconst minRel = minimumRelevance(queryTokens);\n\tif (lexical < minRel && candidate.signals.dense < 0.65) return null;\n",
|
|
6237
|
+
patched: ` // HANSE: cross-script lexical floor and e5 dense floor
|
|
6238
|
+
let lexical = lexicalGroupRelevance(queryGroups, searchableContent);
|
|
6239
|
+
if (
|
|
6240
|
+
candidate.tierLabel === "working" &&
|
|
6241
|
+
options.__queryHangulMajority !== undefined &&
|
|
6242
|
+
options.__queryHangulMajority !== hangulMajority(searchableContent)
|
|
6243
|
+
)
|
|
6244
|
+
lexical = Math.max(lexical, CROSS_SCRIPT_LEXICAL_FLOOR);
|
|
6245
|
+
const minRel = minimumRelevance(queryTokens);
|
|
6246
|
+
if (lexical < minRel && candidate.signals.dense < (options.__denseFloor ?? 0.65)) return null;
|
|
6247
|
+
`,
|
|
6248
|
+
},
|
|
6249
|
+
{
|
|
6250
|
+
file: "../pi-mnemopi/src/core/beam/recall.ts",
|
|
6251
|
+
marker: "temporalOptions.__denseFloor = usesE5Prefix()",
|
|
6252
|
+
anchor: "\tconst tokenGroups = expandedTokenGroups(query, useSynonyms);\n\tconst candidates = collectMemoryCandidates(beam, query, topK, temporalOptions);\n",
|
|
6253
|
+
patched: "\tconst tokenGroups = expandedTokenGroups(query, useSynonyms);\n\ttemporalOptions.__queryHangulMajority = hangulMajority(query);\n\ttemporalOptions.__denseFloor = usesE5Prefix() ? E5_DENSE_FLOOR : 0.65;\n\tconst candidates = collectMemoryCandidates(beam, query, topK, temporalOptions);\n",
|
|
6254
|
+
},
|
|
6150
6255
|
{
|
|
6151
6256
|
// 2026-09-29 실측: 기억 임베딩 재구축(모델 변경·중단 뒤 재개)이 128건 묶음을 한꺼번에 worker 에
|
|
6152
6257
|
// 올렸다. worker 는 요청을 하나씩 처리하는데 요청마다 120초 타이머가 보낸 순간부터 흘러,
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|