UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

66 lines (65 loc) • 2.95 kB
export const SHELL_WORD_ROLES = Object.freeze([ "control_prefix", "group", "block", "compound_open", "loop_list_head", "loop_iterates", "loop_condition", "loop_end", "definition", "background", "case_arms", "timer", "scope_open", "scope_close", "scope_switch", "stripped_prefix", "stripped_standalone", "opaque", "rule_reserved", "base_mover", "stack_mover", "stack_editor", ]); const ROWS = [ ["!", "control_prefix", "stripped_prefix", "rule_reserved"], ["if", "control_prefix", "compound_open", "scope_open", "stripped_prefix", "rule_reserved"], ["then", "control_prefix", "stripped_prefix", "rule_reserved"], ["elif", "control_prefix", "scope_switch", "stripped_prefix", "rule_reserved"], ["else", "control_prefix", "scope_switch", "stripped_prefix", "rule_reserved"], ["while", "control_prefix", "compound_open", "loop_condition", "scope_open", "stripped_prefix", "rule_reserved"], ["until", "control_prefix", "compound_open", "loop_condition", "scope_open", "stripped_prefix", "rule_reserved"], ["do", "control_prefix", "stripped_prefix", "rule_reserved"], ["time", "control_prefix", "timer", "rule_reserved"], ["{", "group", "compound_open", "scope_open", "stripped_standalone", "rule_reserved"], ["}", "group", "scope_close", "stripped_standalone", "rule_reserved"], ["for", "block", "compound_open", "loop_list_head", "loop_iterates", "scope_open", "opaque", "rule_reserved"], ["select", "block", "compound_open", "loop_list_head", "scope_open", "opaque", "rule_reserved"], ["case", "block", "compound_open", "case_arms", "scope_open", "opaque", "rule_reserved"], ["esac", "block", "scope_close", "stripped_standalone", "rule_reserved"], ["fi", "block", "scope_close", "stripped_standalone", "rule_reserved"], ["done", "block", "loop_end", "scope_close", "stripped_standalone", "rule_reserved"], ["function", "block", "definition", "opaque", "rule_reserved"], ["coproc", "block", "background", "opaque", "rule_reserved"], ["]]", "block", "stripped_standalone", "rule_reserved"], ["in", "block", "opaque", "rule_reserved"], ["[[", "block", "compound_open", "rule_reserved"], ["((", "rule_reserved"], ["))", "rule_reserved"], ["cd", "base_mover"], ["pushd", "base_mover", "stack_mover"], ["popd", "base_mover", "stack_mover"], ["dirs", "stack_editor"], ]; const PROJECTIONS = new Map(SHELL_WORD_ROLES.map((role) => [role, new Set(ROWS.filter(([, ...roles]) => roles.includes(role)).map(([word]) => word))])); export function shellWordsOf(role) { return PROJECTIONS.get(role); } export function shellWordRolesOf(word) { const row = ROWS.find(([w]) => w === word); return row === undefined ? [] : SHELL_WORD_ROLES.filter((role) => row.includes(role)); } export function shellWordTable() { return ROWS.map(([word]) => word); }