@iam-brain/opencode-codex-auth 0.1.5 → 0.1.7

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 (41) hide show
  1. package/README.md +15 -1
  2. package/dist/bin/persona-tool.d.ts +3 -0
  3. package/dist/bin/persona-tool.d.ts.map +1 -0
  4. package/dist/bin/persona-tool.js +13 -0
  5. package/dist/bin/persona-tool.js.map +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +51 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/codex-native.d.ts.map +1 -1
  10. package/dist/lib/codex-native.js +34 -7
  11. package/dist/lib/codex-native.js.map +1 -1
  12. package/dist/lib/config.d.ts +2 -1
  13. package/dist/lib/config.d.ts.map +1 -1
  14. package/dist/lib/config.js +142 -4
  15. package/dist/lib/config.js.map +1 -1
  16. package/dist/lib/installer-cli.d.ts.map +1 -1
  17. package/dist/lib/installer-cli.js +5 -1
  18. package/dist/lib/installer-cli.js.map +1 -1
  19. package/dist/lib/persona-tool-cli.d.ts +7 -0
  20. package/dist/lib/persona-tool-cli.d.ts.map +1 -0
  21. package/dist/lib/persona-tool-cli.js +152 -0
  22. package/dist/lib/persona-tool-cli.js.map +1 -0
  23. package/dist/lib/persona-tool.d.ts +29 -0
  24. package/dist/lib/persona-tool.d.ts.map +1 -0
  25. package/dist/lib/persona-tool.js +358 -0
  26. package/dist/lib/persona-tool.js.map +1 -0
  27. package/dist/lib/personalities.d.ts +3 -0
  28. package/dist/lib/personalities.d.ts.map +1 -1
  29. package/dist/lib/personalities.js +19 -19
  30. package/dist/lib/personalities.js.map +1 -1
  31. package/dist/lib/personality-command.d.ts +14 -0
  32. package/dist/lib/personality-command.d.ts.map +1 -0
  33. package/dist/lib/personality-command.js +71 -0
  34. package/dist/lib/personality-command.js.map +1 -0
  35. package/dist/lib/personality-create.d.ts +38 -0
  36. package/dist/lib/personality-create.d.ts.map +1 -0
  37. package/dist/lib/personality-create.js +92 -0
  38. package/dist/lib/personality-create.js.map +1 -0
  39. package/package.json +3 -2
  40. package/schemas/codex-accounts.schema.json +132 -0
  41. package/schemas/codex-config.schema.json +3 -0
@@ -0,0 +1,358 @@
1
+ const STYLE_PROFILES = {
2
+ lean: { minTokens: 250, maxTokens: 450, voiceRuleCount: 4, detailLevel: 1 },
3
+ mid: { minTokens: 500, maxTokens: 800, voiceRuleCount: 6, detailLevel: 2 },
4
+ "friendly-sized": { minTokens: 1100, maxTokens: 1400, voiceRuleCount: 8, detailLevel: 3 }
5
+ };
6
+ const REQUIRED_POLICY_TITLES = [
7
+ "Clarify vs Assume",
8
+ "Disagree / Correct",
9
+ "Momentum",
10
+ "Accuracy",
11
+ "Self-Correction",
12
+ "Verbosity Control",
13
+ "Safety/Refusal"
14
+ ];
15
+ const PROTOCOL_FAILURE_MODES = [
16
+ "over-asking clarifications",
17
+ "overconfidence presented as certainty",
18
+ "stalling instead of progressing",
19
+ "speculation presented as fact",
20
+ "runaway verbosity",
21
+ "failure to self-correct"
22
+ ];
23
+ const SLANG_TERMS = [
24
+ "dude",
25
+ "bro",
26
+ "chief",
27
+ "buddy",
28
+ "fam",
29
+ "yo",
30
+ "lmao",
31
+ "lol",
32
+ "goblin",
33
+ "meme"
34
+ ];
35
+ const GOOFY_TERMS = [
36
+ "chaotic",
37
+ "chaos",
38
+ "goofy",
39
+ "silly",
40
+ "clown",
41
+ "nonsense",
42
+ "absurd",
43
+ "gremlin"
44
+ ];
45
+ const WARMTH_TERMS = ["friendly", "warm", "supportive", "encouraging", "kind", "empathetic"];
46
+ function clamp01(value) {
47
+ if (!Number.isFinite(value))
48
+ return 0;
49
+ if (value < 0)
50
+ return 0;
51
+ if (value > 1)
52
+ return 1;
53
+ return value;
54
+ }
55
+ function sanitizeSourceText(value) {
56
+ return value
57
+ .replace(/\r\n/g, "\n")
58
+ .replace(/\u0000/g, "")
59
+ .trim();
60
+ }
61
+ function estimateTokens(text) {
62
+ return Math.max(1, Math.ceil(text.length / 4));
63
+ }
64
+ function hasEmoji(text) {
65
+ return /\p{Extended_Pictographic}/u.test(text);
66
+ }
67
+ function extractAddressTerms(lower) {
68
+ const terms = ["my dude", "chief", "buddy", "friend", "captain", "boss", "homie", "pal"];
69
+ return terms.filter((term) => lower.includes(term));
70
+ }
71
+ function pickQuotedFragments(source) {
72
+ const matches = source.match(/"([^"\n]{3,60})"/g) ?? [];
73
+ const cleaned = matches
74
+ .map((entry) => entry.replaceAll('"', "").trim())
75
+ .filter((entry) => entry.length >= 3);
76
+ return cleaned.slice(0, 3);
77
+ }
78
+ function extractVoiceSignature(sourceText, fidelity) {
79
+ const source = sanitizeSourceText(sourceText);
80
+ const lower = source.toLowerCase();
81
+ const lines = source.split("\n").map((line) => line.trim()).filter(Boolean);
82
+ const result = [];
83
+ const slangHits = SLANG_TERMS.filter((term) => lower.includes(term));
84
+ if (slangHits.length > 0) {
85
+ result.push(`Uses slang/casual terms (${slangHits.slice(0, 4).join(", ")}).`);
86
+ }
87
+ const goofyHits = GOOFY_TERMS.filter((term) => lower.includes(term));
88
+ if (goofyHits.length > 0) {
89
+ result.push(`Leans into playful or chaotic humor (${goofyHits.slice(0, 4).join(", ")}).`);
90
+ }
91
+ const warmthHits = WARMTH_TERMS.filter((term) => lower.includes(term));
92
+ if (warmthHits.length > 0) {
93
+ result.push(`Maintains warm/supportive framing (${warmthHits.slice(0, 4).join(", ")}).`);
94
+ }
95
+ if (hasEmoji(source)) {
96
+ result.push("Includes emoji as part of tone and emphasis.");
97
+ }
98
+ const exclamationCount = (source.match(/!/g) ?? []).length;
99
+ if (exclamationCount >= 3) {
100
+ result.push("Prefers energetic punctuation and punchy emphasis.");
101
+ }
102
+ const addressTerms = extractAddressTerms(lower);
103
+ if (addressTerms.length > 0) {
104
+ result.push(`Directly addresses the user with recurring motifs (${addressTerms.join(", ")}).`);
105
+ }
106
+ const quoted = pickQuotedFragments(source);
107
+ if (quoted.length > 0) {
108
+ result.push(`Has explicit catchphrase-style fragments: ${quoted.join(" | ")}.`);
109
+ }
110
+ const avgLineLen = lines.length > 0
111
+ ? Math.round(lines.reduce((sum, line) => sum + line.split(/\s+/).length, 0) / lines.length)
112
+ : 0;
113
+ if (avgLineLen > 18) {
114
+ result.push("Uses longer, descriptive phrasing and richer context.");
115
+ }
116
+ else if (avgLineLen > 0) {
117
+ result.push("Uses short-to-medium phrasing with quick cadence.");
118
+ }
119
+ if (result.length === 0) {
120
+ result.push("Use the source voice cadence and vocabulary faithfully without flattening tone.");
121
+ }
122
+ const maxRules = Math.max(4, Math.min(10, Math.round(4 + fidelity * 6)));
123
+ return result.slice(0, maxRules);
124
+ }
125
+ function extractBehavioralIntents(sourceText) {
126
+ const source = sanitizeSourceText(sourceText).toLowerCase();
127
+ const intents = [];
128
+ const mapping = [
129
+ { pattern: /never ask|don't ask|do not ask/, intent: "discourages clarifying questions" },
130
+ { pattern: /always sound sure|never admit uncertainty|always confident/, intent: "demands overconfidence" },
131
+ { pattern: /always hype|always agree|never disagree/, intent: "pushes sycophantic agreement" },
132
+ { pattern: /be concise|short answers|brief only/, intent: "prefers concise responses" },
133
+ { pattern: /be verbose|long explanation|tons of detail/, intent: "pushes high verbosity" },
134
+ { pattern: /chaotic|goofy|meme|silly/, intent: "wants comedic character fidelity" }
135
+ ];
136
+ for (const item of mapping) {
137
+ if (item.pattern.test(source))
138
+ intents.push(item.intent);
139
+ }
140
+ return Array.from(new Set(intents));
141
+ }
142
+ function strictVerb(strictness) {
143
+ if (strictness >= 0.75)
144
+ return "Must";
145
+ if (strictness >= 0.4)
146
+ return "Should";
147
+ return "Prefer to";
148
+ }
149
+ function synthesizeProtocolRules(strictness) {
150
+ const verb = strictVerb(strictness);
151
+ return [
152
+ `Clarify vs Assume: ${verb} ask only when uncertainty materially changes outcome, otherwise state assumptions briefly and proceed.`,
153
+ `Disagree / Correct: ${verb} extend when correct, test when uncertain, and correct clearly when wrong with concrete alternatives.`,
154
+ `Momentum: ${verb} perform useful next actions immediately, then propose verification-oriented next steps.`,
155
+ `Accuracy: ${verb} avoid speculation-as-fact, mark confidence level, and define quick resolution paths for uncertainty.`,
156
+ `Self-Correction: ${verb} acknowledge discovered errors plainly, fix them promptly, and continue without defensive framing.`,
157
+ `Verbosity Control: ${verb} default to concise output and expand only when task complexity justifies more detail.`,
158
+ `Safety/Refusal: ${verb} pause calmly on unsafe requests, explain concern contextually, and offer safer aligned alternatives.`
159
+ ];
160
+ }
161
+ function collectFailureModes(intents) {
162
+ const modes = [...PROTOCOL_FAILURE_MODES];
163
+ if (intents.includes("discourages clarifying questions")) {
164
+ modes.push("missing critical clarification before execution");
165
+ }
166
+ if (intents.includes("demands overconfidence")) {
167
+ modes.push("false certainty under uncertainty");
168
+ }
169
+ if (intents.includes("pushes high verbosity")) {
170
+ modes.push("signal loss from overlong answers");
171
+ }
172
+ return Array.from(new Set(modes));
173
+ }
174
+ function renderDomainSection(domain) {
175
+ if (domain === "coding") {
176
+ return [
177
+ "## Domain Add-ons (coding)",
178
+ "- State assumptions, prerequisites, and environment constraints before irreversible steps.",
179
+ "- Do not hallucinate APIs, package versions, or command outcomes; verify with local evidence.",
180
+ "- Prefer minimal, reversible diffs and provide concrete verification commands (tests/build/lint).",
181
+ ""
182
+ ];
183
+ }
184
+ if (domain === "audit") {
185
+ return [
186
+ "## Domain Add-ons (audit)",
187
+ "- Prioritize findings by severity and include concrete evidence paths.",
188
+ "- Separate confirmed findings from hypotheses and state residual risk clearly.",
189
+ "- Recommend mitigations with rollback-safe sequencing.",
190
+ ""
191
+ ];
192
+ }
193
+ if (domain === "research") {
194
+ return [
195
+ "## Domain Add-ons (research)",
196
+ "- Distinguish observed facts from inferred conclusions.",
197
+ "- Provide concise source-backed summaries and unresolved questions.",
198
+ "- Suggest next probes that reduce uncertainty quickly.",
199
+ ""
200
+ ];
201
+ }
202
+ return [
203
+ "## Domain Add-ons (general)",
204
+ "- Keep plans actionable, testable, and scoped.",
205
+ "- Surface assumptions and constraints when they affect outcomes.",
206
+ "- Maintain momentum with next-step suggestions tied to user goals.",
207
+ ""
208
+ ];
209
+ }
210
+ function buildProtocolInteractionBlock(detailLevel) {
211
+ const lines = [
212
+ "## Interaction Protocol (drift prevention)",
213
+ "1. Observe request and constraints.",
214
+ "2. Decide clarify vs assume using material-impact rule.",
215
+ "3. Execute smallest useful step immediately.",
216
+ "4. Verify outcomes and report confidence.",
217
+ "5. Self-correct fast when new evidence conflicts with prior assumptions."
218
+ ];
219
+ if (detailLevel >= 2) {
220
+ lines.push("6. Keep voice consistent while never weakening accuracy or safety policies.");
221
+ }
222
+ if (detailLevel >= 3) {
223
+ lines.push("7. Re-anchor every few turns: intent, progress, risks, and next verifiable action.");
224
+ lines.push("8. If style and protocol conflict, preserve style externally but obey protocol internally without exception.");
225
+ }
226
+ lines.push("");
227
+ return lines;
228
+ }
229
+ function truncateVoiceRules(voice, targetCount) {
230
+ if (voice.length <= targetCount)
231
+ return voice;
232
+ return voice.slice(0, targetCount);
233
+ }
234
+ function renderMarkdown(input) {
235
+ const profile = STYLE_PROFILES[input.style];
236
+ const strict = strictVerb(input.competenceStrictness);
237
+ const voiceRules = truncateVoiceRules(input.voiceSignature, profile.voiceRuleCount);
238
+ const lines = [
239
+ "# Agent Specification",
240
+ "",
241
+ "## Voice Layer (How you sound)",
242
+ "- Preserve the source voice signature faithfully, including quirky tone and stylistic motifs.",
243
+ ...voiceRules.map((rule) => `- ${rule}`),
244
+ "- Keep phrasing in-character even when the style is silly or intentionally dumb-sounding.",
245
+ "- Voice never overrides protocol correctness, safety, or honesty.",
246
+ ""
247
+ ];
248
+ if (profile.detailLevel >= 2) {
249
+ lines.push("In-character uncertainty example: \"I feel good about this direction, but I'm not fully certain yet — let's verify with a quick check.\"", "");
250
+ }
251
+ lines.push("## Protocol Layer (How you behave)");
252
+ lines.push(...input.protocolRules.map((rule) => `- ${rule}`));
253
+ lines.push(`- Competence override: ${strict} preserve factual integrity and delivery momentum even when voice directives demand pure confidence or nonstop hype.`, "");
254
+ if (input.intents.length > 0) {
255
+ lines.push("## Normalized Behavioral Intents", ...input.intents.map((intent) => `- Detected source intent: ${intent}.`), "");
256
+ }
257
+ lines.push(...renderDomainSection(input.domain));
258
+ lines.push(...buildProtocolInteractionBlock(profile.detailLevel));
259
+ if (profile.detailLevel >= 3) {
260
+ lines.push("## Reinforcement Examples", "- Clarify vs Assume: if a missing requirement changes architecture, ask; if not, proceed with a stated default.", "- Accuracy: label confidence numerically when uncertain and name the fastest verification path.", "- Momentum: after each action, propose the next concrete check to prevent stalls.", "- Self-correction: if a command output contradicts prior assumptions, acknowledge and pivot immediately.", "");
261
+ }
262
+ let markdown = `${lines.join("\n").trim()}\n`;
263
+ const reinforcementPool = [
264
+ "Protocol reinforcement: do useful work first, then ask for only the smallest blocking clarification.",
265
+ "Protocol reinforcement: disagreement is constructive and concrete, never performative or vague.",
266
+ "Protocol reinforcement: uncertainty must be explicit and coupled with a verification plan.",
267
+ "Protocol reinforcement: keep outputs concise unless complexity requires expansion.",
268
+ "Protocol reinforcement: if safety blocks direct execution, provide nearest safe alternative path.",
269
+ "Protocol reinforcement: maintain style consistency without sacrificing correctness.",
270
+ "Protocol reinforcement: assumptions should be short, explicit, and testable.",
271
+ "Protocol reinforcement: close each major response with next-step momentum."
272
+ ];
273
+ let reinforcementIndex = 0;
274
+ while (estimateTokens(markdown) < profile.minTokens && reinforcementIndex < reinforcementPool.length) {
275
+ markdown = `${markdown.trimEnd()}\n${reinforcementPool[reinforcementIndex]}\n`;
276
+ reinforcementIndex += 1;
277
+ }
278
+ const deepReinforcement = [
279
+ "Extended protocol note: If source voice says \"never ask questions,\" reinterpret that as \"avoid unnecessary friction\" while still asking one blocking clarifier when architecture, security, or destructive operations depend on it.",
280
+ "Extended protocol note: If source voice says \"always be confident,\" keep the energetic delivery but label confidence numerically (for example 0.7 confidence) and attach a concrete verification step before final claims.",
281
+ "Extended protocol note: Maintain a short execution loop in long sessions — restate objective, report completed action, report current risk, and propose one verifiable next action to prevent drift.",
282
+ "Extended protocol note: In goofy or meme-heavy voices, preserve slang and metaphor while keeping operational language explicit enough for reproducible execution and debugging.",
283
+ "Extended protocol note: For collaborative resilience, acknowledge user corrections quickly, update assumptions immediately, and continue without defensiveness or unnecessary restarts.",
284
+ "Extended protocol note: When uncertain about external dependencies, avoid hallucinated specifics; prefer evidence-first phrasing and name the exact command or lookup required to resolve uncertainty."
285
+ ];
286
+ let deepAdded = 0;
287
+ if (profile.detailLevel === 3 && estimateTokens(markdown) < profile.minTokens) {
288
+ let deepIndex = 0;
289
+ while (estimateTokens(markdown) < profile.minTokens && deepIndex < deepReinforcement.length) {
290
+ markdown = `${markdown.trimEnd()}\n${deepReinforcement[deepIndex]}\n`;
291
+ deepIndex += 1;
292
+ deepAdded += 1;
293
+ }
294
+ }
295
+ while (estimateTokens(markdown) > profile.maxTokens && reinforcementIndex > 0) {
296
+ reinforcementIndex -= 1;
297
+ const needle = `\n${reinforcementPool[reinforcementIndex]}\n`;
298
+ markdown = markdown.replace(needle, "\n");
299
+ }
300
+ while (estimateTokens(markdown) > profile.maxTokens && deepAdded > 0) {
301
+ deepAdded -= 1;
302
+ const needle = `\n${deepReinforcement[deepAdded]}\n`;
303
+ markdown = markdown.replace(needle, "\n");
304
+ }
305
+ return `${markdown.trimEnd()}\n`;
306
+ }
307
+ function buildDiffSummary(input) {
308
+ const conflicts = input.intents.filter((intent) => intent.includes("overconfidence") || intent.includes("discourages"));
309
+ if (conflicts.length === 0) {
310
+ return `Preserved ${input.voiceSignature.length} voice traits and enforced ${input.protocolRules.length} protocol rules with competence-first behavior.`;
311
+ }
312
+ return `Preserved ${input.voiceSignature.length} voice traits while overriding conflicting directives (${conflicts.join(", ")}) with ${input.protocolRules.length} competence rules.`;
313
+ }
314
+ export function generatePersonaSpec(rawInput) {
315
+ const sourceText = sanitizeSourceText(rawInput.source_text);
316
+ const style = rawInput.target_style;
317
+ const domain = rawInput.domain ?? "general";
318
+ const voiceFidelity = clamp01(rawInput.voice_fidelity);
319
+ const competenceStrictness = clamp01(rawInput.competence_strictness);
320
+ const includeVariants = rawInput.include_variants !== false;
321
+ const voiceSignature = extractVoiceSignature(sourceText, voiceFidelity);
322
+ const intents = extractBehavioralIntents(sourceText);
323
+ const protocolRules = synthesizeProtocolRules(competenceStrictness);
324
+ const failureModes = collectFailureModes(intents);
325
+ const renderForStyle = (targetStyle) => {
326
+ const markdown = renderMarkdown({
327
+ style: targetStyle,
328
+ sourceText,
329
+ voiceSignature,
330
+ protocolRules,
331
+ domain,
332
+ competenceStrictness,
333
+ intents
334
+ });
335
+ return {
336
+ agent_markdown: markdown,
337
+ token_estimate: estimateTokens(markdown)
338
+ };
339
+ };
340
+ const selected = renderForStyle(style);
341
+ const output = {
342
+ agent_markdown: selected.agent_markdown,
343
+ token_estimate: selected.token_estimate,
344
+ voice_signature: voiceSignature,
345
+ protocol_rules: REQUIRED_POLICY_TITLES.map((title, index) => protocolRules[index] ?? title),
346
+ failure_modes_prevented: failureModes,
347
+ diff_summary: buildDiffSummary({ voiceSignature, protocolRules, intents })
348
+ };
349
+ if (includeVariants) {
350
+ output.variants = {
351
+ lean: renderForStyle("lean"),
352
+ mid: renderForStyle("mid"),
353
+ friendly_sized: renderForStyle("friendly-sized")
354
+ };
355
+ }
356
+ return output;
357
+ }
358
+ //# sourceMappingURL=persona-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona-tool.js","sourceRoot":"","sources":["../../lib/persona-tool.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ export declare function isSafePersonalityKey(value: string): boolean;
2
+ export declare function normalizePersonalityKey(value: string): string | undefined;
3
+ export declare function defaultConfigRoot(): string;
1
4
  export declare function resolveCustomPersonalityDescription(personality: string, options?: {
2
5
  projectRoot?: string;
3
6
  configRoot?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"personalities.d.ts","sourceRoot":"","sources":["../../lib/personalities.ts"],"names":[],"mappings":"AAiDA,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACf,GACL,MAAM,GAAG,IAAI,CA0Bf"}
1
+ {"version":3,"file":"personalities.d.ts","sourceRoot":"","sources":["../../lib/personalities.ts"],"names":[],"mappings":"AAMA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKzE;AAwBD,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAED,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACf,GACL,MAAM,GAAG,IAAI,CA8Bf"}
@@ -1,12 +1,11 @@
1
1
  import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- const PERSONALITY_DIR = "Personalities";
5
- const PERSONALITY_CACHE_MARKER = "<!-- opencode personality cache -->";
6
- function isSafePersonalityKey(value) {
4
+ const PERSONALITY_DIRS = ["personalities", "Personalities"];
5
+ export function isSafePersonalityKey(value) {
7
6
  return !value.includes("/") && !value.includes("\\") && !value.includes("..");
8
7
  }
9
- function normalizePersonalityKey(value) {
8
+ export function normalizePersonalityKey(value) {
10
9
  const normalized = value.trim().toLowerCase();
11
10
  if (!normalized)
12
11
  return undefined;
@@ -30,17 +29,14 @@ function resolvePersonalityFile(directory, personality) {
30
29
  function readPersonality(filePath) {
31
30
  try {
32
31
  const raw = fs.readFileSync(filePath, "utf8");
33
- const cleaned = raw.startsWith(PERSONALITY_CACHE_MARKER)
34
- ? raw.slice(PERSONALITY_CACHE_MARKER.length).trimStart()
35
- : raw;
36
- const trimmed = cleaned.trim();
32
+ const trimmed = raw.trim();
37
33
  return trimmed.length > 0 ? trimmed : null;
38
34
  }
39
35
  catch {
40
36
  return null;
41
37
  }
42
38
  }
43
- function defaultConfigRoot() {
39
+ export function defaultConfigRoot() {
44
40
  const xdgRoot = process.env.XDG_CONFIG_HOME?.trim();
45
41
  if (xdgRoot)
46
42
  return path.join(xdgRoot, "opencode");
@@ -52,17 +48,21 @@ export function resolveCustomPersonalityDescription(personality, options = {}) {
52
48
  return null;
53
49
  const projectRoot = options.projectRoot ?? process.cwd();
54
50
  const configRoot = options.configRoot ?? defaultConfigRoot();
55
- const localFile = resolvePersonalityFile(path.join(projectRoot, ".opencode", PERSONALITY_DIR), normalized);
56
- if (localFile) {
57
- const local = readPersonality(localFile);
58
- if (local)
59
- return local;
51
+ for (const directory of PERSONALITY_DIRS) {
52
+ const localFile = resolvePersonalityFile(path.join(projectRoot, ".opencode", directory), normalized);
53
+ if (localFile) {
54
+ const local = readPersonality(localFile);
55
+ if (local)
56
+ return local;
57
+ }
60
58
  }
61
- const globalFile = resolvePersonalityFile(path.join(configRoot, PERSONALITY_DIR), normalized);
62
- if (globalFile) {
63
- const global = readPersonality(globalFile);
64
- if (global)
65
- return global;
59
+ for (const directory of PERSONALITY_DIRS) {
60
+ const globalFile = resolvePersonalityFile(path.join(configRoot, directory), normalized);
61
+ if (globalFile) {
62
+ const global = readPersonality(globalFile);
63
+ if (global)
64
+ return global;
65
+ }
66
66
  }
67
67
  return null;
68
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"personalities.js","sourceRoot":"","sources":["../../lib/personalities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,eAAe,GAAG,eAAe,CAAA;AACvC,MAAM,wBAAwB,GAAG,qCAAqC,CAAA;AAEtE,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC7C,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAA;IACjC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAA;IACvD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAiB,EAAE,WAAmB;IACpE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,GAAG,WAAW,KAAK,CAAA;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAA;QACvE,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAA;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC;YACtD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE;YACxD,CAAC,CAAC,GAAG,CAAA;QACP,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAA;IACnD,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,WAAmB,EACnB,UAGI,EAAE;IAEN,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAA;IACvD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAE5B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAAA;IAE5D,MAAM,SAAS,GAAG,sBAAsB,CACtC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,eAAe,CAAC,EACpD,UAAU,CACX,CAAA;IACD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;QACxC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;IACzB,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CACvC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EACtC,UAAU,CACX,CAAA;IACD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;QAC1C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;IAC3B,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"personalities.js","sourceRoot":"","sources":["../../lib/personalities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare const CREATE_PERSONALITY_COMMAND_FILE = "create-personality.md";
2
+ export type InstallCreatePersonalityCommandInput = {
3
+ commandsDir?: string;
4
+ force?: boolean;
5
+ };
6
+ export type InstallCreatePersonalityCommandResult = {
7
+ commandsDir: string;
8
+ filePath: string;
9
+ created: boolean;
10
+ updated: boolean;
11
+ };
12
+ export declare function defaultOpencodeCommandsDir(env?: Record<string, string | undefined>): string;
13
+ export declare function installCreatePersonalityCommand(input?: InstallCreatePersonalityCommandInput): Promise<InstallCreatePersonalityCommandResult>;
14
+ //# sourceMappingURL=personality-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personality-command.d.ts","sourceRoot":"","sources":["../../lib/personality-command.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,+BAA+B,0BAA0B,CAAA;AAqCtE,MAAM,MAAM,oCAAoC,GAAG;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,qCAAqC,GAAG;IAClD,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,wBAAgB,0BAA0B,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,MAAM,CAMxG;AAED,wBAAsB,+BAA+B,CACnD,KAAK,GAAE,oCAAyC,GAC/C,OAAO,CAAC,qCAAqC,CAAC,CA2BhD"}
@@ -0,0 +1,71 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ export const CREATE_PERSONALITY_COMMAND_FILE = "create-personality.md";
5
+ const CREATE_PERSONALITY_COMMAND_TEMPLATE = `---
6
+ description: Build a custom coding personality and save it with the create-personality tool.
7
+ ---
8
+ You are helping the user define a custom coding personality for OpenCode Codex Auth.
9
+
10
+ Reference style:
11
+ - friendly: collaborative, warm, clear, supportive.
12
+ - pragmatic: direct, concise, implementation-focused, low-fluff.
13
+
14
+ Workflow:
15
+ 1. Ask focused questions one at a time until you have enough detail:
16
+ - name/key (short, lowercase slug)
17
+ - source personality text (or core excerpts)
18
+ - inspiration source (person, document, character, or style)
19
+ - tone and communication style
20
+ - collaboration preferences while coding
21
+ - coding style preferences
22
+ - hard guardrails and avoidances
23
+ - short example phrases (optional)
24
+ 2. Keep the personality rooted in coding-assistant behavior:
25
+ - terminal-first coding work
26
+ - safety and correctness
27
+ - clear, actionable communication
28
+ 3. When ready, call the tool \`create-personality\` with structured fields.
29
+ - Prefer the structured source route:
30
+ - \`name\`, \`sourceText\`, \`targetStyle\`, \`voiceFidelity\`, \`competenceStrictness\`, \`domain\`
31
+ - Then persist file with \`scope\` and \`overwrite\` as needed.
32
+ 4. Confirm the resulting key + path, then show how to activate:
33
+ - set \`global.personality\` in \`codex-config.json\`
34
+ - or set \`perModel.<model>.personality\`
35
+
36
+ Initial user context (if any):
37
+ $ARGUMENTS
38
+ `;
39
+ export function defaultOpencodeCommandsDir(env = process.env) {
40
+ const xdgRoot = env.XDG_CONFIG_HOME?.trim();
41
+ if (xdgRoot) {
42
+ return path.join(xdgRoot, "opencode", "commands");
43
+ }
44
+ return path.join(os.homedir(), ".config", "opencode", "commands");
45
+ }
46
+ export async function installCreatePersonalityCommand(input = {}) {
47
+ const commandsDir = input.commandsDir ?? defaultOpencodeCommandsDir();
48
+ const filePath = path.join(commandsDir, CREATE_PERSONALITY_COMMAND_FILE);
49
+ let existingContent;
50
+ try {
51
+ existingContent = await fs.readFile(filePath, "utf8");
52
+ }
53
+ catch {
54
+ // continue to write new file
55
+ }
56
+ if (existingContent !== undefined && input.force !== true) {
57
+ return { commandsDir, filePath, created: false, updated: false };
58
+ }
59
+ if (existingContent !== undefined && existingContent === CREATE_PERSONALITY_COMMAND_TEMPLATE) {
60
+ return { commandsDir, filePath, created: false, updated: false };
61
+ }
62
+ await fs.mkdir(commandsDir, { recursive: true });
63
+ await fs.writeFile(filePath, CREATE_PERSONALITY_COMMAND_TEMPLATE, { encoding: "utf8", mode: 0o600 });
64
+ return {
65
+ commandsDir,
66
+ filePath,
67
+ created: existingContent === undefined,
68
+ updated: existingContent !== undefined
69
+ };
70
+ }
71
+ //# sourceMappingURL=personality-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personality-command.js","sourceRoot":"","sources":["../../lib/personality-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,CAAC,MAAM,+BAA+B,GAAG,uBAAuB,CAAA;AAEtE,MAAM,mCAAmC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC3C,CAAA;AAcD,MAAM,UAAU,0BAA0B,CAAC,MAA0C,OAAO,CAAC,GAAG;IAC9F,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAA;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,QAA8C,EAAE;IAEhD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,0BAA0B,EAAE,CAAA;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAA;IACxE,IAAI,eAAmC,CAAA;IAEvC,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IAED,IAAI,eAAe,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAClE,CAAC;IAED,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,mCAAmC,EAAE,CAAC;QAC7F,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAClE,CAAC;IAED,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,mCAAmC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACpG,OAAO;QACL,WAAW;QACX,QAAQ;QACR,OAAO,EAAE,eAAe,KAAK,SAAS;QACtC,OAAO,EAAE,eAAe,KAAK,SAAS;KACvC,CAAA;AACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ export type PersonalityScope = "global" | "project";
2
+ export type CreatePersonalityInput = {
3
+ name: string;
4
+ scope?: PersonalityScope;
5
+ projectRoot?: string;
6
+ configRoot?: string;
7
+ inspiration?: string;
8
+ tone?: string;
9
+ collaborationStyle?: string;
10
+ codeStyle?: string;
11
+ constraints?: string;
12
+ examples?: string;
13
+ markdown?: string;
14
+ overwrite?: boolean;
15
+ };
16
+ export type CreatePersonalityResult = {
17
+ key: string;
18
+ filePath: string;
19
+ scope: PersonalityScope;
20
+ created: boolean;
21
+ };
22
+ export declare function renderPersonalityMarkdown(input: {
23
+ key: string;
24
+ inspiration?: string;
25
+ tone?: string;
26
+ collaborationStyle?: string;
27
+ codeStyle?: string;
28
+ constraints?: string;
29
+ examples?: string;
30
+ }): string;
31
+ export declare function resolvePersonalityFilePath(input: {
32
+ key: string;
33
+ scope: PersonalityScope;
34
+ projectRoot?: string;
35
+ configRoot?: string;
36
+ }): string;
37
+ export declare function createPersonalityFile(input: CreatePersonalityInput): Promise<CreatePersonalityResult>;
38
+ //# sourceMappingURL=personality-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personality-create.d.ts","sourceRoot":"","sources":["../../lib/personality-create.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEnD,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,gBAAgB,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAuBD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GAAG,MAAM,CA2BT;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,gBAAgB,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,GAAG,MAAM,CAMT;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAuC3G"}