source dump of claude code
at main 39 lines 1.4 kB view raw
1import { getSkillToolCommands } from '../../commands.js' 2import { 3 type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, 4 type AnalyticsMetadata_I_VERIFIED_THIS_IS_PII_TAGGED, 5 logEvent, 6} from '../../services/analytics/index.js' 7import { getCharBudget } from '../../tools/SkillTool/prompt.js' 8 9/** 10 * Logs a tengu_skill_loaded event for each skill available at session startup. 11 * This enables analytics on which skills are available across sessions. 12 */ 13export async function logSkillsLoaded( 14 cwd: string, 15 contextWindowTokens: number, 16): Promise<void> { 17 const skills = await getSkillToolCommands(cwd) 18 const skillBudget = getCharBudget(contextWindowTokens) 19 20 for (const skill of skills) { 21 if (skill.type !== 'prompt') continue 22 23 logEvent('tengu_skill_loaded', { 24 // _PROTO_skill_name routes to the privileged skill_name BQ column. 25 // Unredacted names don't go in additional_metadata. 26 _PROTO_skill_name: 27 skill.name as AnalyticsMetadata_I_VERIFIED_THIS_IS_PII_TAGGED, 28 skill_source: 29 skill.source as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, 30 skill_loaded_from: 31 skill.loadedFrom as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, 32 skill_budget: skillBudget, 33 ...(skill.kind && { 34 skill_kind: 35 skill.kind as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, 36 }), 37 }) 38 } 39}