gitworld / src /shared.js
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/gitworld
6281708 verified
Raw
History Blame Contribute Delete
3.98 kB
export const EVENT_TYPES = Object.freeze({
PLAYER_MOVE: 'player.move',
SELECT_DISTRICT: 'district.selected',
SELECT_FILE: 'file.selected',
SELECT_COLLECTION: 'collection.selected',
SELECT_RECORD: 'record.selected',
OPEN_INSPECTOR: 'inspector.opened',
CLOSE_INSPECTOR: 'inspector.closed',
OPEN_TERMINAL: 'terminal.opened',
CLOSE_TERMINAL: 'terminal.closed',
RUN_COMMAND: 'terminal.command',
USE_TOOL: 'tool.used',
ENTER_DISTRICT: 'district.entered',
TICK: 'world.tick',
AGENT_PROGRESS: 'agent.progress',
CONSTRUCTION: 'construction.updated',
BUILD_STARTED: 'build.started',
BUILD_COMPLETED: 'build.completed',
TEST_STARTED: 'test.started',
TEST_COMPLETED: 'test.completed',
DEPLOYMENT_STARTED: 'deployment.started',
DEPLOYMENT_COMPLETED: 'deployment.completed',
COMMIT: 'repository.commit',
ISSUE: 'repository.issue',
PULL_REQUEST: 'repository.pull_request'
});
export const TOOLBELT = Object.freeze([
{ id: 'terminal', key: '1', icon: '▣', name: 'Terminal Phone', verb: 'Open shell', color: '#69f6cf' },
{ id: 'bash', key: '2', icon: '⚒', name: 'Bash Hammer', verb: 'Run operation', color: '#ffbd69' },
{ id: 'git', key: '3', icon: '◈', name: 'Git Backpack', verb: 'View history', color: '#ff7ac8' },
{ id: 'docker', key: '4', icon: '▦', name: 'Docker Box', verb: 'Open container', color: '#6dafff' },
{ id: 'code', key: '5', icon: '⌘', name: 'Code Tablet', verb: 'Read source', color: '#b79cff' },
{ id: 'ssh', key: '6', icon: '⚿', name: 'SSH Key', verb: 'Unlock gate', color: '#ffdd67' },
{ id: 'database', key: '7', icon: '▤', name: 'Database Vault', verb: 'Inspect data', color: '#9fe870' },
{ id: 'deploy', key: '8', icon: '↗', name: 'Deploy Rocket', verb: 'Launch build', color: '#ff8b62' }
]);
export const EVENT_LABELS = Object.freeze({
[EVENT_TYPES.AGENT_PROGRESS]: 'agent progress',
[EVENT_TYPES.CONSTRUCTION]: 'construction update',
[EVENT_TYPES.BUILD_STARTED]: 'build started',
[EVENT_TYPES.BUILD_COMPLETED]: 'build completed',
[EVENT_TYPES.TEST_STARTED]: 'tests started',
[EVENT_TYPES.TEST_COMPLETED]: 'tests passed',
[EVENT_TYPES.DEPLOYMENT_STARTED]: 'deployment queued',
[EVENT_TYPES.DEPLOYMENT_COMPLETED]: 'deployment complete',
[EVENT_TYPES.COMMIT]: 'commit landed',
[EVENT_TYPES.ISSUE]: 'issue quest',
[EVENT_TYPES.PULL_REQUEST]: 'pull request gate'
});
export const COLLECTIONS = Object.freeze(['files', 'commits', 'issues', 'prs', 'build']);
export const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
export function formatTime(tick) {
const seconds = String((tick * 7) % 60).padStart(2, '0');
const minutes = String(Math.floor(tick * 7 / 60)).padStart(2, '0');
return `00:${minutes}:${seconds}`;
}
export function clone(value) {
return JSON.parse(JSON.stringify(value));
}
export function makeEvent(type, tick, detail = {}) {
return {
id: `${type}-${tick}`,
type,
tick,
at: formatTime(tick),
detail
};
}
export function commandTranscript(command, state) {
const prompt = '$';
const selected = state.selectedFileId || 'README.md';
const lines = {
ls: ['src/', 'tests/', 'docs/', '.github/', 'Cargo.toml', 'README.md'],
'git status': ['On branch main', 'Your branch is up to date with origin/main.', 'working tree clean'],
'git log': ['8f3a9c1 Fix kernel bounds', '2h4d7e2 Add proof sketch', '9ac1bd9 Update docs'],
'cargo test': ['Compiling pax-coder v0.8.2', 'running 142 tests', 'test result: ok. 142 passed; 0 failed'],
'./build.sh': ['[world] assembling repository tower', '[ci] verifying artifacts', 'BUILD #812 completed successfully'],
help: ['Try: ls, git status, git log, cargo test, ./build.sh']
};
const output = lines[command] || [`command not found: ${command}`, 'Try `help` for local commands.'];
return [`${prompt} ${command}`, ...output, `${prompt} _`];
}