mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 22:35:51 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73130bded3 | ||
|
|
1a1d57057e |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claude-code-best",
|
"name": "claude-code-best",
|
||||||
"version": "1.10.6",
|
"version": "1.10.7",
|
||||||
"description": "Reverse-engineered Anthropic Claude Code CLI — interactive AI coding assistant in the terminal",
|
"description": "Reverse-engineered Anthropic Claude Code CLI — interactive AI coding assistant in the terminal",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"author": "claude-code-best <claude-code-best@proton.me>",
|
"author": "claude-code-best <claude-code-best@proton.me>",
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ function buildAgentContent(params: {
|
|||||||
'',
|
'',
|
||||||
instincts
|
instincts
|
||||||
.flatMap(instinct => instinct.evidence.map(evidence => `- ${evidence}`))
|
.flatMap(instinct => instinct.evidence.map(evidence => `- ${evidence}`))
|
||||||
|
.slice(0, 20)
|
||||||
.join('\n'),
|
.join('\n'),
|
||||||
'',
|
'',
|
||||||
].join('\n')
|
].join('\n')
|
||||||
|
|||||||
@@ -35,15 +35,18 @@ export function createInstinct(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MAX_EVIDENCE_ENTRIES = 10
|
||||||
|
|
||||||
export function normalizeInstinct(instinct: StoredInstinct): StoredInstinct {
|
export function normalizeInstinct(instinct: StoredInstinct): StoredInstinct {
|
||||||
|
const uniqueEvidence = Array.from(new Set(instinct.evidence.filter(Boolean)))
|
||||||
return {
|
return {
|
||||||
...instinct,
|
...instinct,
|
||||||
id: instinct.id || buildInstinctId(instinct.trigger, instinct.action),
|
id: instinct.id || buildInstinctId(instinct.trigger, instinct.action),
|
||||||
confidence: clampConfidence(instinct.confidence),
|
confidence: clampConfidence(instinct.confidence),
|
||||||
evidence: Array.from(new Set(instinct.evidence.filter(Boolean))),
|
evidence: uniqueEvidence.slice(-MAX_EVIDENCE_ENTRIES),
|
||||||
evidenceOutcome: instinct.evidenceOutcome,
|
evidenceOutcome: instinct.evidenceOutcome,
|
||||||
observationIds: instinct.observationIds
|
observationIds: instinct.observationIds
|
||||||
? Array.from(new Set(instinct.observationIds))
|
? Array.from(new Set(instinct.observationIds)).slice(-20)
|
||||||
: undefined,
|
: undefined,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ import {
|
|||||||
import type { LearnedSkillDraft, SkillLearningScope } from './types.js'
|
import type { LearnedSkillDraft, SkillLearningScope } from './types.js'
|
||||||
|
|
||||||
export const DUPLICATE_SKILL_OVERLAP_THRESHOLD = 0.8
|
export const DUPLICATE_SKILL_OVERLAP_THRESHOLD = 0.8
|
||||||
|
const MAX_EVIDENCE_LINES_PER_APPEND = 20
|
||||||
|
const MAX_EVIDENCE_LINES_IN_SKILL = 20
|
||||||
|
const MAX_SKILL_FILE_BYTES = 50_000
|
||||||
|
|
||||||
export type SkillGeneratorOptions = {
|
export type SkillGeneratorOptions = {
|
||||||
cwd?: string
|
cwd?: string
|
||||||
@@ -101,20 +104,41 @@ export async function appendInstinctEvidenceToSkill(
|
|||||||
const existing = await readFile(target.path, 'utf8').catch(
|
const existing = await readFile(target.path, 'utf8').catch(
|
||||||
() => target.content,
|
() => target.content,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Skip if the file already exceeds the size cap
|
||||||
|
if (Buffer.byteLength(existing, 'utf8') >= MAX_SKILL_FILE_BYTES) {
|
||||||
|
return target.path
|
||||||
|
}
|
||||||
|
|
||||||
|
const allEvidence = instincts.flatMap(instinct =>
|
||||||
|
instinct.evidence.map(evidence => `- ${evidence}`),
|
||||||
|
)
|
||||||
|
const evidenceLines = allEvidence.slice(0, MAX_EVIDENCE_LINES_PER_APPEND)
|
||||||
|
if (evidenceLines.length < allEvidence.length) {
|
||||||
|
evidenceLines.push(
|
||||||
|
`- [... ${allEvidence.length - evidenceLines.length} more evidence entries omitted]`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const now = new Date().toISOString()
|
const now = new Date().toISOString()
|
||||||
const block = [
|
const block = [
|
||||||
'',
|
'',
|
||||||
`## Learned evidence (${now})`,
|
`## Learned evidence (${now})`,
|
||||||
'',
|
'',
|
||||||
...instincts.flatMap(instinct =>
|
...evidenceLines,
|
||||||
instinct.evidence.map(evidence => `- ${evidence}`),
|
|
||||||
),
|
|
||||||
'',
|
'',
|
||||||
].join('\n')
|
].join('\n')
|
||||||
const merged = existing.endsWith('\n')
|
const merged = existing.endsWith('\n')
|
||||||
? existing + block
|
? existing + block
|
||||||
: `${existing}\n${block}`
|
: `${existing}\n${block}`
|
||||||
await writeFile(target.path, merged, 'utf8')
|
|
||||||
|
// Final guard: truncate if merged exceeds size cap
|
||||||
|
const finalContent =
|
||||||
|
Buffer.byteLength(merged, 'utf8') > MAX_SKILL_FILE_BYTES
|
||||||
|
? merged.slice(0, MAX_SKILL_FILE_BYTES)
|
||||||
|
: merged
|
||||||
|
|
||||||
|
await writeFile(target.path, finalContent, 'utf8')
|
||||||
clearSkillIndexCache()
|
clearSkillIndexCache()
|
||||||
return target.path
|
return target.path
|
||||||
}
|
}
|
||||||
@@ -191,6 +215,7 @@ function buildSkillContent(params: {
|
|||||||
'',
|
'',
|
||||||
instincts
|
instincts
|
||||||
.flatMap(instinct => instinct.evidence.map(evidence => `- ${evidence}`))
|
.flatMap(instinct => instinct.evidence.map(evidence => `- ${evidence}`))
|
||||||
|
.slice(0, MAX_EVIDENCE_LINES_IN_SKILL)
|
||||||
.join('\n'),
|
.join('\n'),
|
||||||
'',
|
'',
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user