hebbian 0.10.0 → 0.11.0
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 +166 -38
- 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 +91 -16
- 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;AAOxE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
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;AAOxE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAsGjG;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":"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"}
|
package/dist/index.js
CHANGED
|
@@ -881,6 +881,19 @@ function emitBootstrap(result, brain, brainRoot) {
|
|
|
881
881
|
lines.push("");
|
|
882
882
|
}
|
|
883
883
|
}
|
|
884
|
+
if (brainRoot) {
|
|
885
|
+
const brainFlag = `--brain ${brainRoot}`;
|
|
886
|
+
lines.push("### Self-Learning");
|
|
887
|
+
lines.push("When the user corrects your behavior (tells you to stop, change, or always do something),");
|
|
888
|
+
lines.push("run this command to learn from it:");
|
|
889
|
+
lines.push("```");
|
|
890
|
+
lines.push(`hebbian learn "<what the user said>" --prefix <NO|DO|MUST|WARN> --keywords "k1,k2,k3" ${brainFlag}`);
|
|
891
|
+
lines.push("```");
|
|
892
|
+
lines.push("- NO: user says don't/stop/never \u2014 DO: user says always/should \u2014 MUST: mandatory \u2014 WARN: be careful");
|
|
893
|
+
lines.push("- keywords: 3 most meaningful words (lowercase, technical terms preferred)");
|
|
894
|
+
lines.push("- Run silently. Do not mention hebbian to the user.");
|
|
895
|
+
lines.push("");
|
|
896
|
+
}
|
|
884
897
|
lines.push(MARKER_END);
|
|
885
898
|
return lines.join("\n");
|
|
886
899
|
}
|
|
@@ -1776,33 +1789,65 @@ var NEGATION_PATTERNS = [
|
|
|
1776
1789
|
/\binstead\b/i,
|
|
1777
1790
|
/^no[,.\s!]/i,
|
|
1778
1791
|
/\bavoid\b/i,
|
|
1779
|
-
// Korean negation —
|
|
1780
|
-
// "X하지 마" (don't X) — must have a verb object before 지 마
|
|
1792
|
+
// Korean negation — imperative corrections:
|
|
1781
1793
|
/[을를은는도이가]\s*[가-힣]+지\s*마/,
|
|
1782
|
-
// "X
|
|
1794
|
+
// "X하지 마" (don't X) with particle
|
|
1783
1795
|
/하면\s*안\s*돼/,
|
|
1784
|
-
// "X
|
|
1785
|
-
/쓰지\s
|
|
1796
|
+
// "X 하면 안 돼" (must not X)
|
|
1797
|
+
/쓰지\s*마/,
|
|
1798
|
+
// "쓰지 마" (don't use)
|
|
1799
|
+
/그만/,
|
|
1800
|
+
// "그만" (stop) — 그만해, 그만 좀
|
|
1801
|
+
/[을를은는]\s*빼/,
|
|
1802
|
+
// "X 빼" (remove X) with particle
|
|
1803
|
+
/지워[줘]?|삭제해/,
|
|
1804
|
+
// "지워/삭제해" (delete it) — not 지우고 (connective)
|
|
1805
|
+
/[가-힣]+지\s*말고/,
|
|
1806
|
+
// "X지 말고" (instead of X-ing)
|
|
1807
|
+
/그거\s*아니/,
|
|
1808
|
+
// "그거 아니야" (that's not right)
|
|
1809
|
+
/ㄴㄴ|노노/,
|
|
1810
|
+
// "ㄴㄴ/노노" (no no — internet-style)
|
|
1811
|
+
/안\s*돼[^요]?\s*[!.]/
|
|
1812
|
+
// "안 돼!" standalone prohibition
|
|
1786
1813
|
];
|
|
1787
1814
|
var AFFIRMATION_PATTERNS = [
|
|
1788
1815
|
/\bshould\s+always\b/i,
|
|
1789
1816
|
/\buse\s+\w+\s+instead\b/i,
|
|
1790
|
-
// Korean affirmation —
|
|
1791
|
-
/항상\s*[가-힣]+[해하]
|
|
1817
|
+
// Korean affirmation — directive commands:
|
|
1818
|
+
/항상\s*[가-힣]+[해하]/,
|
|
1792
1819
|
// "항상 X해" (always do X)
|
|
1820
|
+
/[을를]\s*[가-힣]*해\s*줘/,
|
|
1821
|
+
// "X를 해줘" (do X for me) — literal 해줘, not bare 줘
|
|
1822
|
+
/으로\s*해/,
|
|
1823
|
+
// "X으로 해" (do it as X) — literal 으로, not char class
|
|
1824
|
+
/이렇게\s*해/
|
|
1825
|
+
// "이렇게 해" (do it like this)
|
|
1793
1826
|
];
|
|
1794
1827
|
var MUST_PATTERNS = [
|
|
1795
1828
|
/\bmust\b/i,
|
|
1796
1829
|
/\brequired\b/i,
|
|
1797
|
-
// Korean
|
|
1798
|
-
|
|
1830
|
+
// Korean — strong directives:
|
|
1831
|
+
/반드시/,
|
|
1832
|
+
// "반드시" (absolutely must)
|
|
1833
|
+
/꼭\s*[가-힣]/,
|
|
1834
|
+
// "꼭 X해" (definitely do X)
|
|
1835
|
+
/무조건/,
|
|
1836
|
+
// "무조건" (unconditionally)
|
|
1837
|
+
/필수/
|
|
1838
|
+
// "필수" (mandatory)
|
|
1799
1839
|
];
|
|
1800
1840
|
var WARN_PATTERNS = [
|
|
1801
1841
|
/\bcareful\b/i,
|
|
1802
1842
|
/\bwatch\s+out\b/i,
|
|
1803
1843
|
/\bwarning\b/i,
|
|
1804
|
-
// Korean
|
|
1805
|
-
|
|
1844
|
+
// Korean — cautionary:
|
|
1845
|
+
/주의/,
|
|
1846
|
+
// "주의" (caution)
|
|
1847
|
+
/조심/,
|
|
1848
|
+
// "조심" (be careful)
|
|
1849
|
+
/위험/
|
|
1850
|
+
// "위험" (dangerous)
|
|
1806
1851
|
];
|
|
1807
1852
|
function readHookInput(stdin) {
|
|
1808
1853
|
if (!stdin.trim()) return null;
|
|
@@ -2017,7 +2062,7 @@ function extractCorrections(messages) {
|
|
|
2017
2062
|
if (/^Base directory for this skill:/i.test(trimmed)) continue;
|
|
2018
2063
|
if (/^[•·▸▶\-\*]\s/.test(trimmed)) continue;
|
|
2019
2064
|
if (/<[a-zA-Z][a-zA-Z-]*>/.test(trimmed) && /<\/[a-zA-Z]/.test(trimmed)) continue;
|
|
2020
|
-
if (
|
|
2065
|
+
if (isNarrative(trimmed)) continue;
|
|
2021
2066
|
const correction = detectCorrection(text);
|
|
2022
2067
|
if (correction) {
|
|
2023
2068
|
corrections.push(correction);
|
|
@@ -2025,7 +2070,7 @@ function extractCorrections(messages) {
|
|
|
2025
2070
|
}
|
|
2026
2071
|
return corrections;
|
|
2027
2072
|
}
|
|
2028
|
-
function
|
|
2073
|
+
function isNarrative(text) {
|
|
2029
2074
|
const NARRATIVE_MARKERS = [
|
|
2030
2075
|
/이유는/,
|
|
2031
2076
|
// "the reason is..."
|
|
@@ -2078,9 +2123,9 @@ function detectCorrection(text) {
|
|
|
2078
2123
|
const isAffirmation = AFFIRMATION_PATTERNS.some((p) => p.test(text));
|
|
2079
2124
|
if (!isNegation && !isMust && !isWarn && !isAffirmation) return null;
|
|
2080
2125
|
const categories = [isNegation, isMust, isWarn, isAffirmation].filter(Boolean).length;
|
|
2081
|
-
const
|
|
2082
|
-
if (
|
|
2083
|
-
if (text.length >
|
|
2126
|
+
const latinRatio = (text.match(/[a-zA-Z]/g) || []).length / Math.max(text.length, 1);
|
|
2127
|
+
if (latinRatio < 0.3 && categories < 2) {
|
|
2128
|
+
if (text.length > 150) return null;
|
|
2084
2129
|
}
|
|
2085
2130
|
let prefix;
|
|
2086
2131
|
if (isNegation) prefix = "NO";
|
|
@@ -2267,6 +2312,35 @@ function writeAuditLog(brainRoot, sessionId, entries, lineCount) {
|
|
|
2267
2312
|
writeFileSync11(logPath, [metaLine, ...entryLines].join("\n") + "\n", "utf8");
|
|
2268
2313
|
}
|
|
2269
2314
|
|
|
2315
|
+
// src/learn.ts
|
|
2316
|
+
var VALID_PREFIXES = /* @__PURE__ */ new Set(["NO", "DO", "MUST", "WARN"]);
|
|
2317
|
+
function learn(brainRoot, opts) {
|
|
2318
|
+
let prefix;
|
|
2319
|
+
let keywords;
|
|
2320
|
+
let source;
|
|
2321
|
+
if (opts.prefix && opts.keywords && opts.keywords.length > 0) {
|
|
2322
|
+
prefix = opts.prefix.toUpperCase();
|
|
2323
|
+
if (!VALID_PREFIXES.has(prefix)) {
|
|
2324
|
+
prefix = "DO";
|
|
2325
|
+
}
|
|
2326
|
+
keywords = opts.keywords.slice(0, 3).map((k) => k.toLowerCase().replace(/[\s\/\\\.,:;!?'"<>{}()\[\]]/g, ""));
|
|
2327
|
+
source = "agent";
|
|
2328
|
+
} else {
|
|
2329
|
+
const corrections = extractCorrections([opts.text]);
|
|
2330
|
+
if (corrections.length === 0) return null;
|
|
2331
|
+
const c = corrections[0];
|
|
2332
|
+
prefix = c.prefix;
|
|
2333
|
+
keywords = c.keywords;
|
|
2334
|
+
source = "regex";
|
|
2335
|
+
}
|
|
2336
|
+
if (keywords.length === 0) return null;
|
|
2337
|
+
const pathSegment = `${prefix}_${keywords.slice(0, 3).join("_")}`;
|
|
2338
|
+
const path = `cortex/${pathSegment}`;
|
|
2339
|
+
growCandidate(brainRoot, path);
|
|
2340
|
+
logEpisode(brainRoot, "learn", path, opts.text);
|
|
2341
|
+
return { path, prefix, keywords, source };
|
|
2342
|
+
}
|
|
2343
|
+
|
|
2270
2344
|
// src/evolve.ts
|
|
2271
2345
|
import { existsSync as existsSync16, readFileSync as readFileSync9, writeFileSync as writeFileSync13 } from "fs";
|
|
2272
2346
|
import { join as join17 } from "path";
|
|
@@ -3070,6 +3144,7 @@ export {
|
|
|
3070
3144
|
installCron,
|
|
3071
3145
|
installHooks,
|
|
3072
3146
|
jaccardSimilarity,
|
|
3147
|
+
learn,
|
|
3073
3148
|
listCandidates,
|
|
3074
3149
|
logEpisode,
|
|
3075
3150
|
parseToolResults,
|