@shakibkhatri/idiolect-core 0.0.1 → 0.1.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.
Files changed (47) hide show
  1. package/dist/analyzer-go.js +3 -5
  2. package/dist/analyzer-go.js.map +1 -1
  3. package/dist/analyzer-py.js +3 -5
  4. package/dist/analyzer-py.js.map +1 -1
  5. package/dist/analyzer.d.ts +3 -1
  6. package/dist/analyzer.js +10 -5
  7. package/dist/analyzer.js.map +1 -1
  8. package/dist/baseline.js +3 -2
  9. package/dist/baseline.js.map +1 -1
  10. package/dist/check.d.ts +5 -0
  11. package/dist/check.js +6 -5
  12. package/dist/check.js.map +1 -1
  13. package/dist/collector.d.ts +1 -0
  14. package/dist/collector.js +18 -7
  15. package/dist/collector.js.map +1 -1
  16. package/dist/config.d.ts +21 -0
  17. package/dist/config.js +13 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/index.d.ts +5 -3
  20. package/dist/index.js +5 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/llm.js +46 -29
  23. package/dist/llm.js.map +1 -1
  24. package/dist/metrics.js +1 -0
  25. package/dist/metrics.js.map +1 -1
  26. package/dist/profile.d.ts +10 -0
  27. package/dist/profile.js +16 -2
  28. package/dist/profile.js.map +1 -1
  29. package/dist/render.d.ts +1 -0
  30. package/dist/render.js +55 -9
  31. package/dist/render.js.map +1 -1
  32. package/dist/served.d.ts +8 -0
  33. package/dist/served.js +39 -0
  34. package/dist/served.js.map +1 -0
  35. package/dist/styles.d.ts +41 -0
  36. package/dist/styles.js +77 -0
  37. package/dist/styles.js.map +1 -0
  38. package/dist/unbot.js +2 -2
  39. package/dist/unbot.js.map +1 -1
  40. package/dist/writer.d.ts +4 -3
  41. package/dist/writer.js +14 -5
  42. package/dist/writer.js.map +1 -1
  43. package/package.json +2 -1
  44. package/styles/go-caddy.json +1369 -0
  45. package/styles/kotlin-tivi.json +1506 -0
  46. package/styles/python-httpx.json +1053 -0
  47. package/styles/typescript-vue.json +1474 -0
package/dist/served.js ADDED
@@ -0,0 +1,39 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { ensureRepoDir, loadRepoConfig, loadUserConfig, repoConfigPath } from "./config.js";
4
+ import { loadProfile, profilePath } from "./profile.js";
5
+ import { composeStyles } from "./styles.js";
6
+ const overridesPath = (repo) => join(repo, ".idiolect", "overrides.json");
7
+ /**
8
+ * The profile a repo serves. Shipped styles picked in its config come first, then the profile `profile` names,
9
+ * then the developer's own. Anything but the developer's own is borrowed.
10
+ */
11
+ export async function loadServedProfile(repo) {
12
+ const config = repo ? await loadRepoConfig(repo) : undefined;
13
+ if (config?.styles && Object.values(config.styles).some(Boolean)) {
14
+ const profile = await composeStyles(config.styles);
15
+ const overrides = JSON.parse(await readFile(overridesPath(repo), "utf8").catch(() => "{}"));
16
+ const rules = profile.rules.map((r) => (overrides[r.id] ? { ...r, status: overrides[r.id].status, text: overrides[r.id].text ?? r.text } : r));
17
+ return { ...profile, rules, borrowed: config.borrow };
18
+ }
19
+ const named = config?.profile;
20
+ const user = await loadUserConfig();
21
+ if (!named)
22
+ return user && loadProfile(user.emails[0]);
23
+ const profile = await loadProfile(named);
24
+ if (!profile)
25
+ throw new Error(`no profile ${profilePath(named)}, named by "profile" in ${repoConfigPath(repo)}`);
26
+ // someone else's profile is borrowed: only the kinds the repo asks for, never its project rules
27
+ const own = user?.emails.some((e) => e.toLowerCase() === named.toLowerCase());
28
+ return own ? profile : { ...profile, borrowed: config.borrow };
29
+ }
30
+ /** A shipped style cannot be edited in place, so the decisions made on it in a repo are kept in that repo. */
31
+ export async function saveOverrides(repo, profile) {
32
+ const overrides = {};
33
+ for (const r of profile.rules)
34
+ if (r.status === "approved" || r.status === "rejected" || r.status === "edited")
35
+ overrides[r.id] = { status: r.status, ...(r.status === "edited" ? { text: r.text } : {}) };
36
+ await mkdir(await ensureRepoDir(repo), { recursive: true });
37
+ await writeFile(overridesPath(repo), JSON.stringify(overrides, null, 2) + "\n");
38
+ }
39
+ //# sourceMappingURL=served.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"served.js","sourceRoot":"","sources":["../src/served.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { CommitStats, LanguageStats } from "./analyzer.js";
2
+ import { type Language, type Profile, type Rule } from "./profile.js";
3
+ /** A frozen, reviewed style cut from one scanned profile. Ships in the package, names its source project, holds no emails and no code. */
4
+ export type Style = {
5
+ version: 1;
6
+ id: string;
7
+ title: string;
8
+ summary: string;
9
+ language: Language;
10
+ experimental?: boolean;
11
+ source: {
12
+ project: string;
13
+ license: string;
14
+ commit: string;
15
+ snapshot?: string;
16
+ lines: number;
17
+ };
18
+ stats: LanguageStats;
19
+ commitStats: CommitStats;
20
+ rules: Rule[];
21
+ };
22
+ export declare const STYLES_DIR: string;
23
+ export declare function listStyles(dir?: string): Promise<Style[]>;
24
+ export declare function loadStyle(id: string, dir?: string): Promise<Style>;
25
+ export type BuildOptions = {
26
+ id: string;
27
+ title: string;
28
+ summary: string;
29
+ language: Language;
30
+ project: string;
31
+ license: string;
32
+ experimental?: boolean;
33
+ };
34
+ /**
35
+ * Metric rules go in as measured. A rule the LLM wrote goes in only once a person approved or edited it,
36
+ * because the same code scanned twice yields different LLM rules.
37
+ */
38
+ export declare function buildStyle(profile: Profile, o: BuildOptions): Style;
39
+ export type Picked = Partial<Record<Language | "commits", string>>;
40
+ /** One profile out of the styles a repo picked: each language from its own style, commit rules from one of them. */
41
+ export declare function composeStyles(picked: Picked, dir?: string): Promise<Profile>;
package/dist/styles.js ADDED
@@ -0,0 +1,77 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { ruleKind } from "./profile.js";
5
+ import { monthYear } from "./render.js";
6
+ export const STYLES_DIR = fileURLToPath(new URL("../styles", import.meta.url));
7
+ const LANGUAGE_NAMES = { kotlin: "Kotlin", typescript: "TypeScript", python: "Python", go: "Go" };
8
+ export async function listStyles(dir = STYLES_DIR) {
9
+ const files = (await readdir(dir).catch(() => [])).filter((f) => f.endsWith(".json")).sort();
10
+ return Promise.all(files.map(async (f) => JSON.parse(await readFile(join(dir, f), "utf8"))));
11
+ }
12
+ export async function loadStyle(id, dir = STYLES_DIR) {
13
+ const style = (await listStyles(dir)).find((s) => s.id === id);
14
+ if (!style)
15
+ throw new Error(`no style ${id}, see: idiolect styles`);
16
+ return style;
17
+ }
18
+ /**
19
+ * Metric rules go in as measured. A rule the LLM wrote goes in only once a person approved or edited it,
20
+ * because the same code scanned twice yields different LLM rules.
21
+ */
22
+ export function buildStyle(profile, o) {
23
+ const stats = profile.stats[o.language];
24
+ if (!stats)
25
+ throw new Error(`the profile has no ${o.language} code`);
26
+ const reviewed = (r) => (r.evidence.metric ? r.status === "auto" || r.status === "approved" || r.status === "edited" : r.status === "approved" || r.status === "edited");
27
+ const rules = profile.rules
28
+ .filter((r) => r.scope === "personal" && !r.repo && (r.language === o.language || r.language === "any") && reviewed(r))
29
+ .map((r) => ({
30
+ id: r.id, scope: r.scope, language: r.language, category: r.category, kind: ruleKind(r), text: r.text,
31
+ // the citation stays, the code it points at does not ship
32
+ evidence: { ...(r.evidence.metric ? { metric: r.evidence.metric } : {}), examples: r.evidence.examples.map((e) => ({ file: e.file, line: e.line, snippet: "" })) },
33
+ confidence: r.confidence, status: "auto",
34
+ }));
35
+ const newest = profile.sources.map((s) => s.headDate).filter((d) => !!d).sort().at(-1);
36
+ const head = profile.sources.find((s) => s.headDate === newest) ?? profile.sources[0];
37
+ return {
38
+ version: 1, id: o.id, title: o.title, summary: o.summary, language: o.language, ...(o.experimental ? { experimental: true } : {}),
39
+ source: { project: o.project, license: o.license, commit: head?.head ?? "", ...(newest ? { snapshot: newest } : {}), lines: stats.loc },
40
+ stats, commitStats: profile.commitStats, rules,
41
+ };
42
+ }
43
+ /** One profile out of the styles a repo picked: each language from its own style, commit rules from one of them. */
44
+ export async function composeStyles(picked, dir = STYLES_DIR) {
45
+ const all = await listStyles(dir);
46
+ const find = (id) => {
47
+ const style = all.find((s) => s.id === id);
48
+ if (!style)
49
+ throw new Error(`no style ${id}, see: idiolect styles`);
50
+ return style;
51
+ };
52
+ const languages = Object.entries(picked).filter(([l, id]) => l !== "commits" && id)
53
+ .map(([l, id]) => ({ language: l, style: find(id) }));
54
+ for (const { language, style } of languages)
55
+ if (style.language !== language)
56
+ throw new Error(`style ${style.id} is a ${style.language} style, not ${language}`);
57
+ const owner = picked.commits ? find(picked.commits) : languages[0]?.style;
58
+ if (!owner)
59
+ throw new Error("no styles picked");
60
+ const rules = [...languages.flatMap(({ language, style }) => style.rules.filter((r) => r.language === language)), ...owner.rules.filter((r) => r.language === "any")];
61
+ const used = [...new Map([...languages.map((l) => l.style), owner].map((s) => [s.id, s])).values()];
62
+ // the agent needs the name and the age, where the code lives is in idiolect styles show
63
+ const from = (s) => `${s.title}${s.source.snapshot ? ` (code up to ${monthYear(s.source.snapshot)})` : ""}`;
64
+ const parts = [...languages.map(({ language, style }) => `${LANGUAGE_NAMES[language]} from ${from(style)}`), `commit messages from ${owner.title}`];
65
+ return {
66
+ version: 1,
67
+ developer: { name: used.map((s) => s.title).join(", "), emails: [] },
68
+ generatedAt: used.map((s) => s.source.snapshot ?? "").sort().at(-1) ?? "",
69
+ sources: used.map((s) => ({ repo: s.source.project, head: s.source.commit, headDate: s.source.snapshot, scannedAt: "", commits: s.commitStats.count, linesOwned: s.source.lines, stats: { [s.language]: s.stats }, commitStats: s.commitStats })),
70
+ stats: Object.fromEntries(languages.map(({ language, style }) => [language, style.stats])),
71
+ commitStats: owner.commitStats,
72
+ rules,
73
+ shipped: true,
74
+ provenance: `Learned from open source code: ${parts.join(", ")}.`,
75
+ };
76
+ }
77
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAA0C,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAgBxC,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,MAAM,cAAc,GAA6B,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAE5H,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAG,GAAG,UAAU;IAC/C,MAAM,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzG,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAU,EAAE,GAAG,GAAG,UAAU;IAC1D,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAID;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,CAAe;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAC/K,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;SACtH,GAAG,CAAC,CAAC,CAAC,EAAQ,EAAE,CAAC,CAAC;QACjB,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;QACrG,0DAA0D;QAC1D,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;QAClK,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM;KACzC,CAAC,CAAC,CAAC;IACN,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjI,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE;QACvI,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK;KAC/C,CAAC;AACJ,CAAC;AAID,oHAAoH;AACpH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,GAAG,GAAG,UAAU;IAClE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,MAAM,SAAS,GAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAsC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,EAAE,CAAC;SACtH,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAa,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,KAAK,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,SAAS;QAAE,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,QAAQ,eAAe,QAAQ,EAAE,CAAC,CAAC;IACjK,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IAC1E,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEhD,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;IACtK,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACpG,wFAAwF;IACxF,MAAM,IAAI,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACnH,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,wBAAwB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACpJ,OAAO;QACL,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACpE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QACzE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACjP,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1F,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,KAAK;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,kCAAkC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;KAClE,CAAC;AACJ,CAAC"}
package/dist/unbot.js CHANGED
@@ -4,7 +4,7 @@ import { appliesTo, renderStyleMd } from "./render.js";
4
4
  import { isServed } from "./writer.js";
5
5
  /** Served rules backed only by examples. checkStyle cannot measure these, so the LLM judges them. */
6
6
  export function voiceRules(profile, opts) {
7
- return profile.rules.filter((r) => isServed(r, opts.threshold) && appliesTo(r, opts) && (!r.repo || r.repo === opts.repo) && !r.evidence.metric && r.category !== "commits");
7
+ return profile.rules.filter((r) => isServed(r, opts.threshold, profile.borrowed) && appliesTo(r, opts) && (!r.repo || r.repo === opts.repo) && !r.evidence.metric && r.category !== "commits");
8
8
  }
9
9
  const Found = z.object({ violations: z.array(z.object({
10
10
  rule_id: z.string(), line: z.number().int().describe("1-based line in the code"),
@@ -15,7 +15,7 @@ export async function deepCheck(profile, code, opts, provider) {
15
15
  const rules = voiceRules(profile, opts);
16
16
  if (!rules.length)
17
17
  return [];
18
- const list = rules.map((r) => `- [${r.id}] ${r.text}${r.evidence.examples[0] ? `\n example from their code: ${r.evidence.examples[0].snippet.split("\n").slice(0, 3).join(" ").slice(0, 200)}` : ""}`).join("\n");
18
+ const list = rules.map((r) => `- [${r.id}] ${r.text}${r.evidence.examples[0]?.snippet ? `\n example from their code: ${r.evidence.examples[0].snippet.split("\n").slice(0, 3).join(" ").slice(0, 200)}` : ""}`).join("\n");
19
19
  const out = await provider.complete({
20
20
  system: `You lint code against one developer's voice rules. Each rule has an id. Report only clear violations of the listed rules, with the 1-based line number. Do not invent rules, do not judge correctness, do not report style the rules do not mention. Return JSON.\n\n# Rules\n${list}`,
21
21
  user: numbered(code), schema: Found,
package/dist/unbot.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"unbot.js","sourceRoot":"","sources":["../src/unbot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unbot.js","sourceRoot":"","sources":["../src/unbot.ts"],"names":[],"mappings":"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"}
package/dist/writer.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import type { LlmProvider } from "./llm.js";
2
- import type { Profile, Rule } from "./profile.js";
2
+ import { type Profile, type Rule, type RuleKind } from "./profile.js";
3
3
  import type { Samples } from "./sampler.js";
4
4
  export type WriteOptions = {
5
5
  minSampleSize: number;
6
6
  confidenceThreshold: number;
7
7
  repo?: string;
8
8
  };
9
- export declare const SYSTEM_PROMPT = "You write a coding style profile for one developer. AI coding agents will read it before writing code for them.\nYou receive: metrics computed from the developer's own code, rules already derived from those metrics, and samples of the developer's functions, comments and commit messages.\nWrite additional rules that capture how this developer writes: naming habits, comment voice and content, structure, error handling, framework idioms, commit message style.\nRules:\n- Do not repeat or rephrase the metric rules you are given.\n- Every rule must be backed by one to three example samples, cited by their exact file and line as given. A rule you cannot cite does not exist.\n- Only state what the samples show. No generic best practices, nothing you would say about any developer.\n- Rule text is one or two sentences, imperative, written as an instruction to an agent. Quote a short pattern from the samples when it helps.\n- Prefer a few specific rules over many vague ones. Ten to twenty rules is typical.\n- scope is \"personal\" when the habit would hold in any codebase this developer works in: voice, phrasing, structure, error handling style, how they name and comment.\n scope is \"project\" when the rule depends on this codebase: its domain vocabulary, product or company names, specific libraries, wrappers, tokens, ticket formats, stakeholder names, team commit conventions. Project rules are only shown inside this repo, so be strict: anything naming a project-specific symbol, product or person is \"project\".\n- You may be given personal rules already learned from the developer's other repos. Never rewrite or duplicate one. If the samples show the same habit, put its id in \"confirms\" instead. Only write a new rule for a habit not already covered.\n- confidence is 0 to 1: how consistently the samples show the habit.\n- id is lowercase dotted, like kotlin.comments.explain-why or any.commits.mention-screen. language is the language the samples are in, or \"any\" for commits and habits that hold across languages.\nReturn JSON only.";
9
+ export declare const SYSTEM_PROMPT = "You write a coding style profile for one developer. AI coding agents will read it before writing code for them.\nYou receive: metrics computed from the developer's own code, rules already derived from those metrics, and samples of the developer's functions, comments and commit messages.\nWrite additional rules that capture how this developer writes: naming habits, comment voice and content, structure, error handling, framework idioms, commit message style.\nRules:\n- Do not repeat or rephrase the metric rules you are given.\n- Every rule must be backed by one to three example samples, cited by their exact file and line as given. A rule you cannot cite does not exist.\n- Only state what the samples show. No generic best practices, nothing you would say about any developer.\n- Rule text is one or two sentences, imperative, written as an instruction to an agent. Quote a short pattern from the samples when it helps.\n- Your own wording uses plain punctuation: commas, periods, colons and the plain hyphen. No em dashes, no arrows, no emoji. A pattern quoted from the samples stays exactly as the developer wrote it.\n- Write at most twelve rules, at most three per category. Pick the habits that show in most of the samples, not the ones that show in a few.\n- Never write a rule that would make an agent add a comment, doc block or structure the samples mostly lack. Describe how the developer writes when they do write, never where to add more.\n- scope is \"personal\" when the habit would hold in any codebase this developer works in: voice, phrasing, structure, error handling style, how they name and comment.\n scope is \"project\" when the rule depends on this codebase: its domain vocabulary, product or company names, specific libraries, wrappers, tokens, ticket formats, stakeholder names, team commit conventions. Project rules are only shown inside this repo, so be strict: anything naming a project-specific symbol, product or person is \"project\".\n- kind is \"voice\" for habits that do not depend on the language version: naming, comment and commit phrasing, how much to write, how code is split up.\n kind is \"layout\" for what a formatter decides: indentation, line breaks, trailing commas, semicolons, quotes, brace placement.\n kind is \"idiom\" for the choice of a language feature, API or library: when over if, runCatching over try, arrow functions over declarations, a framework pattern.\n- You may be given personal rules already learned from the developer's other repos. Never rewrite or duplicate one. If the samples show the same habit, put its id in \"confirms\" instead. Only write a new rule for a habit not already covered.\n- confidence is 0 to 1: the share of relevant samples that show the habit. 0.9 means nearly every relevant sample does it, 0.6 means some do.\n- id is lowercase dotted, like kotlin.comments.explain-why or any.commits.mention-screen. language is the language the samples are in, or \"any\" for commits and habits that hold across languages.\nReturn JSON only.";
10
10
  export declare function buildPrompt(profile: Profile, samples: Samples, baseline: Rule[], existing?: Rule[]): {
11
11
  system: string;
12
12
  user: string;
@@ -15,4 +15,5 @@ export declare function buildPrompt(profile: Profile, samples: Samples, baseline
15
15
  export declare function writeRules(profile: Profile, samples: Samples, provider: LlmProvider | undefined, opts: WriteOptions): Promise<Rule[]>;
16
16
  /** Keeps the user's decisions across rescans. Approved text that changed becomes pending, edited text wins, rejected stays rejected. */
17
17
  export declare function reconcile(previous: Rule[], fresh: Rule[]): Rule[];
18
- export declare const isServed: (r: Rule, threshold: number) => boolean;
18
+ /** From a borrowed profile only the asked-for kinds are served and never a project rule. A rule the developer approved or edited is served whatever its kind. */
19
+ export declare const isServed: (r: Rule, threshold: number, borrowed?: RuleKind[]) => boolean;
package/dist/writer.js CHANGED
@@ -1,12 +1,14 @@
1
1
  import { z } from "zod";
2
2
  import { baselineRules } from "./baseline.js";
3
3
  import { COMMIT_METRICS, METRICS } from "./metrics.js";
4
+ import { ruleKind } from "./profile.js";
4
5
  const LlmRules = z.object({
5
6
  rules: z.array(z.object({
6
7
  id: z.string().regex(/^[a-z0-9.-]+$/),
7
8
  scope: z.enum(["personal", "project"]),
8
9
  language: z.enum(["kotlin", "typescript", "python", "go", "any"]),
9
10
  category: z.enum(["naming", "comments", "structure", "errors", "framework", "commits", "avoid"]),
11
+ kind: z.enum(["voice", "layout", "idiom"]),
10
12
  text: z.string().min(10).max(400),
11
13
  examples: z.array(z.object({ file: z.string(), line: z.number().int() })).min(1).max(3),
12
14
  confidence: z.number().min(0).max(1),
@@ -21,11 +23,16 @@ Rules:
21
23
  - Every rule must be backed by one to three example samples, cited by their exact file and line as given. A rule you cannot cite does not exist.
22
24
  - Only state what the samples show. No generic best practices, nothing you would say about any developer.
23
25
  - Rule text is one or two sentences, imperative, written as an instruction to an agent. Quote a short pattern from the samples when it helps.
24
- - Prefer a few specific rules over many vague ones. Ten to twenty rules is typical.
26
+ - Your own wording uses plain punctuation: commas, periods, colons and the plain hyphen. No em dashes, no arrows, no emoji. A pattern quoted from the samples stays exactly as the developer wrote it.
27
+ - Write at most twelve rules, at most three per category. Pick the habits that show in most of the samples, not the ones that show in a few.
28
+ - Never write a rule that would make an agent add a comment, doc block or structure the samples mostly lack. Describe how the developer writes when they do write, never where to add more.
25
29
  - scope is "personal" when the habit would hold in any codebase this developer works in: voice, phrasing, structure, error handling style, how they name and comment.
26
30
  scope is "project" when the rule depends on this codebase: its domain vocabulary, product or company names, specific libraries, wrappers, tokens, ticket formats, stakeholder names, team commit conventions. Project rules are only shown inside this repo, so be strict: anything naming a project-specific symbol, product or person is "project".
31
+ - kind is "voice" for habits that do not depend on the language version: naming, comment and commit phrasing, how much to write, how code is split up.
32
+ kind is "layout" for what a formatter decides: indentation, line breaks, trailing commas, semicolons, quotes, brace placement.
33
+ kind is "idiom" for the choice of a language feature, API or library: when over if, runCatching over try, arrow functions over declarations, a framework pattern.
27
34
  - You may be given personal rules already learned from the developer's other repos. Never rewrite or duplicate one. If the samples show the same habit, put its id in "confirms" instead. Only write a new rule for a habit not already covered.
28
- - confidence is 0 to 1: how consistently the samples show the habit.
35
+ - confidence is 0 to 1: the share of relevant samples that show the habit. 0.9 means nearly every relevant sample does it, 0.6 means some do.
29
36
  - id is lowercase dotted, like kotlin.comments.explain-why or any.commits.mention-screen. language is the language the samples are in, or "any" for commits and habits that hold across languages.
30
37
  Return JSON only.`;
31
38
  export function buildPrompt(profile, samples, baseline, existing = []) {
@@ -86,7 +93,7 @@ export async function writeRules(profile, samples, provider, opts) {
86
93
  if (ids.has(id))
87
94
  continue;
88
95
  ids.add(id);
89
- fresh.push({ id, scope: "personal", language: r.language, category: r.category, text: r.text, evidence: { examples }, confidence: Math.round(r.confidence * 100) / 100, status: "auto", learnedIn: opts.repo, ...(r.scope === "project" && opts.repo ? { repo: opts.repo } : {}) });
96
+ fresh.push({ id, scope: "personal", language: r.language, category: r.category, kind: r.kind, text: r.text, evidence: { examples }, confidence: Math.round(r.confidence * 100) / 100, status: "auto", learnedIn: opts.repo, ...(r.scope === "project" && opts.repo ? { repo: opts.repo } : {}) });
90
97
  }
91
98
  }
92
99
  return reconcile(profile.rules, fresh);
@@ -103,11 +110,13 @@ export function reconcile(previous, fresh) {
103
110
  if (p.status === "rejected")
104
111
  return { ...r, status: "rejected" };
105
112
  if (p.status === "approved")
106
- return p.text === r.text ? { ...r, status: "approved" } : { ...r, status: "pending" };
113
+ return p.text === r.text ? { ...r, status: "approved" } : { ...r, status: "pending", previousText: p.text };
107
114
  if (p.status === "pending")
108
115
  return { ...r, status: "pending" };
109
116
  return r;
110
117
  });
111
118
  }
112
- export const isServed = (r, threshold) => (r.status === "auto" || r.status === "approved" || r.status === "edited") && r.confidence >= threshold;
119
+ /** From a borrowed profile only the asked-for kinds are served and never a project rule. A rule the developer approved or edited is served whatever its kind. */
120
+ export const isServed = (r, threshold, borrowed) => (r.status === "auto" || r.status === "approved" || r.status === "edited") && r.confidence >= threshold
121
+ && (!borrowed || (!r.repo && (r.status !== "auto" || borrowed.includes(ruleKind(r)))));
113
122
  //# sourceMappingURL=writer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shakibkhatri/idiolect-core",
3
- "version": "0.0.1",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,6 +13,7 @@
13
13
  "dist",
14
14
  "grammars",
15
15
  "data",
16
+ "styles",
16
17
  "!dist/**/*.test.*"
17
18
  ],
18
19
  "license": "MIT",