hebbian 0.10.0 → 0.11.1
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/README.md +33 -30
- package/dist/bin/hebbian.js +288 -136
- package/dist/bin/hebbian.js.map +1 -1
- package/dist/digest.d.ts.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/emit.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +116 -20
- package/dist/index.js.map +1 -1
- package/dist/learn.d.ts +17 -0
- package/dist/learn.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/digest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,YAAY;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,cAAc;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACpG,CAAC;IACF,aAAa,CAAC,EAAE;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,YAAY;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,cAAc;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACpG,CAAC;IACF,aAAa,CAAC,EAAE;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB;AA0DD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYjG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CA2F5G;AAsDD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,EAAE,CAGtE;AAqCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAoB1E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EACxF,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,GAC7C,WAAW,GAAG,IAAI,CA8BpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EACxF,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,GAC7C,WAAW,GAAG,IAAI,CAiCpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CA0C5E"}
|
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAwKxE"}
|
package/dist/emit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAU,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAU,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAQxE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAmIjG;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAuDzE;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgDtD;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmBpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAY9F;AAoCD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAiCvE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export type { HookStatus } from './hooks';
|
|
|
27
27
|
export { digestTranscript, extractCorrections, readHookInput, parseToolResults, detectToolFailure, detectRetryPatterns } from './digest';
|
|
28
28
|
export type { DigestResult, ExtractedCorrection, ToolFailure } from './digest';
|
|
29
29
|
export { resolveBrainRoot, resolveAgentBrain, resolveSharedBrain } from './constants';
|
|
30
|
+
export { learn } from './learn';
|
|
31
|
+
export type { LearnOptions, LearnResult } from './learn';
|
|
30
32
|
export { growCandidate, promoteCandidates, listCandidates, toCandidatePath, fromCandidatePath, propagateToShared } from './candidates';
|
|
31
33
|
export type { CandidateInfo, PromoteResult } from './candidates';
|
|
32
34
|
export { runEvolve } from './evolve';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAG3G,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACnF,YAAY,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACzI,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtF,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACvI,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACrG,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC1G,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -617,10 +617,6 @@ import { watch } from "fs";
|
|
|
617
617
|
import { existsSync as existsSync10, readFileSync as readFileSync3, writeFileSync as writeFileSync7, mkdirSync as mkdirSync5 } from "fs";
|
|
618
618
|
import { join as join11, dirname as dirname2 } from "path";
|
|
619
619
|
|
|
620
|
-
// src/candidates.ts
|
|
621
|
-
import { existsSync as existsSync9, mkdirSync as mkdirSync4, readdirSync as readdirSync7, renameSync as renameSync3, rmSync, statSync as statSync3 } from "fs";
|
|
622
|
-
import { join as join10, dirname, relative as relative3 } from "path";
|
|
623
|
-
|
|
624
620
|
// src/episode.ts
|
|
625
621
|
import { readdirSync as readdirSync6, readFileSync as readFileSync2, writeFileSync as writeFileSync6, mkdirSync as mkdirSync3, existsSync as existsSync8 } from "fs";
|
|
626
622
|
import { join as join9 } from "path";
|
|
@@ -685,6 +681,8 @@ function getNextSlot(logDir) {
|
|
|
685
681
|
}
|
|
686
682
|
|
|
687
683
|
// src/candidates.ts
|
|
684
|
+
import { existsSync as existsSync9, mkdirSync as mkdirSync4, readdirSync as readdirSync7, renameSync as renameSync3, rmSync, statSync as statSync3 } from "fs";
|
|
685
|
+
import { join as join10, dirname, relative as relative3 } from "path";
|
|
688
686
|
var CANDIDATE_THRESHOLD = 3;
|
|
689
687
|
var CANDIDATE_DECAY_DAYS = 14;
|
|
690
688
|
var CANDIDATE_SEGMENT = "_candidates";
|
|
@@ -881,6 +879,42 @@ function emitBootstrap(result, brain, brainRoot) {
|
|
|
881
879
|
lines.push("");
|
|
882
880
|
}
|
|
883
881
|
}
|
|
882
|
+
if (brainRoot) {
|
|
883
|
+
const brainFlag = `--brain ${brainRoot}`;
|
|
884
|
+
lines.push("### Self-Learning");
|
|
885
|
+
lines.push("When the user corrects your behavior (tells you to stop, change, or always do something),");
|
|
886
|
+
lines.push("run this command to learn from it:");
|
|
887
|
+
lines.push("```");
|
|
888
|
+
lines.push(`hebbian learn "<what the user said>" --prefix <NO|DO|MUST|WARN> --keywords "k1,k2,k3" ${brainFlag}`);
|
|
889
|
+
lines.push("```");
|
|
890
|
+
lines.push("- NO: user says don't/stop/never \u2014 DO: user says always/should \u2014 MUST: mandatory \u2014 WARN: be careful");
|
|
891
|
+
lines.push("- keywords: 3 most meaningful words (lowercase, technical terms preferred)");
|
|
892
|
+
lines.push("- Run silently. Do not mention hebbian to the user.");
|
|
893
|
+
lines.push("");
|
|
894
|
+
const episodes = readEpisodes(brainRoot);
|
|
895
|
+
const recentEpisodes = episodes.sort((a, b) => b.ts.localeCompare(a.ts)).slice(0, 5);
|
|
896
|
+
if (recentEpisodes.length > 0) {
|
|
897
|
+
lines.push("### Recent Memory");
|
|
898
|
+
for (const ep of recentEpisodes) {
|
|
899
|
+
const typeIcon = ep.type === "learn" ? "\u{1F4DD}" : ep.type === "tool-failure" ? "\u{1F527}" : "\u{1F504}";
|
|
900
|
+
const shortDetail = ep.detail.slice(0, 60).replace(/\n/g, " ");
|
|
901
|
+
lines.push(`- ${typeIcon} ${ep.type}: ${ep.path} \u2014 ${shortDetail}`);
|
|
902
|
+
}
|
|
903
|
+
lines.push("");
|
|
904
|
+
}
|
|
905
|
+
lines.push("### Self-Evolution");
|
|
906
|
+
lines.push("At session start, review Active Rules and Provisional Rules above.");
|
|
907
|
+
lines.push("If a rule seems wrong or outdated:");
|
|
908
|
+
lines.push("```");
|
|
909
|
+
lines.push(`hebbian rollback <neuron-path> ${brainFlag}`);
|
|
910
|
+
lines.push("```");
|
|
911
|
+
lines.push("If a provisional rule has been working well across sessions:");
|
|
912
|
+
lines.push("```");
|
|
913
|
+
lines.push(`hebbian fire <neuron-path> ${brainFlag}`);
|
|
914
|
+
lines.push("```");
|
|
915
|
+
lines.push("Run silently. Trust your judgment \u2014 you are the evaluator.");
|
|
916
|
+
lines.push("");
|
|
917
|
+
}
|
|
884
918
|
lines.push(MARKER_END);
|
|
885
919
|
return lines.join("\n");
|
|
886
920
|
}
|
|
@@ -1776,33 +1810,65 @@ var NEGATION_PATTERNS = [
|
|
|
1776
1810
|
/\binstead\b/i,
|
|
1777
1811
|
/^no[,.\s!]/i,
|
|
1778
1812
|
/\bavoid\b/i,
|
|
1779
|
-
// Korean negation —
|
|
1780
|
-
// "X하지 마" (don't X) — must have a verb object before 지 마
|
|
1813
|
+
// Korean negation — imperative corrections:
|
|
1781
1814
|
/[을를은는도이가]\s*[가-힣]+지\s*마/,
|
|
1782
|
-
// "X
|
|
1815
|
+
// "X하지 마" (don't X) with particle
|
|
1783
1816
|
/하면\s*안\s*돼/,
|
|
1784
|
-
// "X
|
|
1785
|
-
/쓰지\s
|
|
1817
|
+
// "X 하면 안 돼" (must not X)
|
|
1818
|
+
/쓰지\s*마/,
|
|
1819
|
+
// "쓰지 마" (don't use)
|
|
1820
|
+
/그만/,
|
|
1821
|
+
// "그만" (stop) — 그만해, 그만 좀
|
|
1822
|
+
/[을를은는]\s*빼/,
|
|
1823
|
+
// "X 빼" (remove X) with particle
|
|
1824
|
+
/지워[줘]?|삭제해/,
|
|
1825
|
+
// "지워/삭제해" (delete it) — not 지우고 (connective)
|
|
1826
|
+
/[가-힣]+지\s*말고/,
|
|
1827
|
+
// "X지 말고" (instead of X-ing)
|
|
1828
|
+
/그거\s*아니/,
|
|
1829
|
+
// "그거 아니야" (that's not right)
|
|
1830
|
+
/ㄴㄴ|노노/,
|
|
1831
|
+
// "ㄴㄴ/노노" (no no — internet-style)
|
|
1832
|
+
/안\s*돼[^요]?\s*[!.]/
|
|
1833
|
+
// "안 돼!" standalone prohibition
|
|
1786
1834
|
];
|
|
1787
1835
|
var AFFIRMATION_PATTERNS = [
|
|
1788
1836
|
/\bshould\s+always\b/i,
|
|
1789
1837
|
/\buse\s+\w+\s+instead\b/i,
|
|
1790
|
-
// Korean affirmation —
|
|
1791
|
-
/항상\s*[가-힣]+[해하]
|
|
1838
|
+
// Korean affirmation — directive commands:
|
|
1839
|
+
/항상\s*[가-힣]+[해하]/,
|
|
1792
1840
|
// "항상 X해" (always do X)
|
|
1841
|
+
/[을를]\s*[가-힣]*해\s*줘/,
|
|
1842
|
+
// "X를 해줘" (do X for me) — literal 해줘, not bare 줘
|
|
1843
|
+
/으로\s*해/,
|
|
1844
|
+
// "X으로 해" (do it as X) — literal 으로, not char class
|
|
1845
|
+
/이렇게\s*해/
|
|
1846
|
+
// "이렇게 해" (do it like this)
|
|
1793
1847
|
];
|
|
1794
1848
|
var MUST_PATTERNS = [
|
|
1795
1849
|
/\bmust\b/i,
|
|
1796
1850
|
/\brequired\b/i,
|
|
1797
|
-
// Korean
|
|
1798
|
-
|
|
1851
|
+
// Korean — strong directives:
|
|
1852
|
+
/반드시/,
|
|
1853
|
+
// "반드시" (absolutely must)
|
|
1854
|
+
/꼭\s*[가-힣]/,
|
|
1855
|
+
// "꼭 X해" (definitely do X)
|
|
1856
|
+
/무조건/,
|
|
1857
|
+
// "무조건" (unconditionally)
|
|
1858
|
+
/필수/
|
|
1859
|
+
// "필수" (mandatory)
|
|
1799
1860
|
];
|
|
1800
1861
|
var WARN_PATTERNS = [
|
|
1801
1862
|
/\bcareful\b/i,
|
|
1802
1863
|
/\bwatch\s+out\b/i,
|
|
1803
1864
|
/\bwarning\b/i,
|
|
1804
|
-
// Korean
|
|
1805
|
-
|
|
1865
|
+
// Korean — cautionary:
|
|
1866
|
+
/주의/,
|
|
1867
|
+
// "주의" (caution)
|
|
1868
|
+
/조심/,
|
|
1869
|
+
// "조심" (be careful)
|
|
1870
|
+
/위험/
|
|
1871
|
+
// "위험" (dangerous)
|
|
1806
1872
|
];
|
|
1807
1873
|
function readHookInput(stdin) {
|
|
1808
1874
|
if (!stdin.trim()) return null;
|
|
@@ -2017,7 +2083,7 @@ function extractCorrections(messages) {
|
|
|
2017
2083
|
if (/^Base directory for this skill:/i.test(trimmed)) continue;
|
|
2018
2084
|
if (/^[•·▸▶\-\*]\s/.test(trimmed)) continue;
|
|
2019
2085
|
if (/<[a-zA-Z][a-zA-Z-]*>/.test(trimmed) && /<\/[a-zA-Z]/.test(trimmed)) continue;
|
|
2020
|
-
if (
|
|
2086
|
+
if (isNarrative(trimmed)) continue;
|
|
2021
2087
|
const correction = detectCorrection(text);
|
|
2022
2088
|
if (correction) {
|
|
2023
2089
|
corrections.push(correction);
|
|
@@ -2025,7 +2091,7 @@ function extractCorrections(messages) {
|
|
|
2025
2091
|
}
|
|
2026
2092
|
return corrections;
|
|
2027
2093
|
}
|
|
2028
|
-
function
|
|
2094
|
+
function isNarrative(text) {
|
|
2029
2095
|
const NARRATIVE_MARKERS = [
|
|
2030
2096
|
/이유는/,
|
|
2031
2097
|
// "the reason is..."
|
|
@@ -2078,9 +2144,9 @@ function detectCorrection(text) {
|
|
|
2078
2144
|
const isAffirmation = AFFIRMATION_PATTERNS.some((p) => p.test(text));
|
|
2079
2145
|
if (!isNegation && !isMust && !isWarn && !isAffirmation) return null;
|
|
2080
2146
|
const categories = [isNegation, isMust, isWarn, isAffirmation].filter(Boolean).length;
|
|
2081
|
-
const
|
|
2082
|
-
if (
|
|
2083
|
-
if (text.length >
|
|
2147
|
+
const latinRatio = (text.match(/[a-zA-Z]/g) || []).length / Math.max(text.length, 1);
|
|
2148
|
+
if (latinRatio < 0.3 && categories < 2) {
|
|
2149
|
+
if (text.length > 150) return null;
|
|
2084
2150
|
}
|
|
2085
2151
|
let prefix;
|
|
2086
2152
|
if (isNegation) prefix = "NO";
|
|
@@ -2267,6 +2333,35 @@ function writeAuditLog(brainRoot, sessionId, entries, lineCount) {
|
|
|
2267
2333
|
writeFileSync11(logPath, [metaLine, ...entryLines].join("\n") + "\n", "utf8");
|
|
2268
2334
|
}
|
|
2269
2335
|
|
|
2336
|
+
// src/learn.ts
|
|
2337
|
+
var VALID_PREFIXES = /* @__PURE__ */ new Set(["NO", "DO", "MUST", "WARN"]);
|
|
2338
|
+
function learn(brainRoot, opts) {
|
|
2339
|
+
let prefix;
|
|
2340
|
+
let keywords;
|
|
2341
|
+
let source;
|
|
2342
|
+
if (opts.prefix && opts.keywords && opts.keywords.length > 0) {
|
|
2343
|
+
prefix = opts.prefix.toUpperCase();
|
|
2344
|
+
if (!VALID_PREFIXES.has(prefix)) {
|
|
2345
|
+
prefix = "DO";
|
|
2346
|
+
}
|
|
2347
|
+
keywords = opts.keywords.slice(0, 3).map((k) => k.toLowerCase().replace(/[\s\/\\\.,:;!?'"<>{}()\[\]]/g, ""));
|
|
2348
|
+
source = "agent";
|
|
2349
|
+
} else {
|
|
2350
|
+
const corrections = extractCorrections([opts.text]);
|
|
2351
|
+
if (corrections.length === 0) return null;
|
|
2352
|
+
const c = corrections[0];
|
|
2353
|
+
prefix = c.prefix;
|
|
2354
|
+
keywords = c.keywords;
|
|
2355
|
+
source = "regex";
|
|
2356
|
+
}
|
|
2357
|
+
if (keywords.length === 0) return null;
|
|
2358
|
+
const pathSegment = `${prefix}_${keywords.slice(0, 3).join("_")}`;
|
|
2359
|
+
const path = `cortex/${pathSegment}`;
|
|
2360
|
+
growCandidate(brainRoot, path);
|
|
2361
|
+
logEpisode(brainRoot, "learn", path, opts.text);
|
|
2362
|
+
return { path, prefix, keywords, source };
|
|
2363
|
+
}
|
|
2364
|
+
|
|
2270
2365
|
// src/evolve.ts
|
|
2271
2366
|
import { existsSync as existsSync16, readFileSync as readFileSync9, writeFileSync as writeFileSync13 } from "fs";
|
|
2272
2367
|
import { join as join17 } from "path";
|
|
@@ -3070,6 +3165,7 @@ export {
|
|
|
3070
3165
|
installCron,
|
|
3071
3166
|
installHooks,
|
|
3072
3167
|
jaccardSimilarity,
|
|
3168
|
+
learn,
|
|
3073
3169
|
listCandidates,
|
|
3074
3170
|
logEpisode,
|
|
3075
3171
|
parseToolResults,
|