diff --git a/site/demo/friendly.cast b/site/demo/friendly.cast new file mode 100644 index 0000000..8eacd9b --- /dev/null +++ b/site/demo/friendly.cast @@ -0,0 +1,145 @@ +{"version": 2, "width": 80, "height": 24, "timestamp": 1790251696, "idle_time_limit": 2.0, "env": {"SHELL": "/bin/zsh", "TERM": null}} +[0.322426, "o", "$"] +[0.34183, "o", " "] +[0.368099, "o", "l"] +[0.394322, "o", "e"] +[0.413782, "o", "x"] +[0.43992, "o", "-"] +[0.466835, "o", "c"] +[0.493066, "o", "o"] +[0.515127, "o", "d"] +[0.541436, "o", "e"] +[0.560233, "o", " "] +[0.586488, "o", "-"] +[0.60927, "o", "-"] +[0.632588, "o", "o"] +[0.658847, "o", "l"] +[0.685014, "o", "l"] +[0.710754, "o", "a"] +[0.736864, "o", "m"] +[0.762892, "o", "a"] +[0.78923, "o", " "] +[0.815303, "o", "\""] +[0.841514, "o", "w"] +[0.867624, "o", "r"] +[0.893813, "o", "i"] +[0.919939, "o", "t"] +[0.946044, "o", "e"] +[0.972126, "o", " "] +[0.998407, "o", "a"] +[1.024559, "o", " "] +[1.050523, "o", "f"] +[1.07614, "o", "u"] +[1.102281, "o", "n"] +[1.128362, "o", "c"] +[1.153551, "o", "t"] +[1.179569, "o", "i"] +[1.206008, "o", "o"] +[1.233048, "o", "n"] +[1.256004, "o", " "] +[1.282298, "o", "t"] +[1.308625, "o", "h"] +[1.334741, "o", "a"] +[1.360826, "o", "t"] +[1.385925, "o", " "] +[1.412162, "o", "t"] +[1.438492, "o", "e"] +[1.464667, "o", "l"] +[1.490844, "o", "l"] +[1.517022, "o", "s"] +[1.543123, "o", " "] +[1.568093, "o", "m"] +[1.594111, "o", "e"] +[1.620385, "o", " "] +[1.646594, "o", "i"] +[1.667512, "o", "f"] +[1.694298, "o", " "] +[1.720434, "o", "a"] +[1.741371, "o", " "] +[1.761141, "o", "w"] +[1.787392, "o", "o"] +[1.806137, "o", "r"] +[1.828768, "o", "d"] +[1.847229, "o", " "] +[1.873416, "o", "r"] +[1.89962, "o", "e"] +[1.925884, "o", "a"] +[1.95204, "o", "d"] +[1.978242, "o", "s"] +[2.004496, "o", " "] +[2.029062, "o", "t"] +[2.051352, "o", "h"] +[2.077512, "o", "e"] +[2.103709, "o", " "] +[2.13023, "o", "s"] +[2.152844, "o", "a"] +[2.17898, "o", "m"] +[2.205062, "o", "e"] +[2.229779, "o", " "] +[2.255983, "o", "b"] +[2.282085, "o", "a"] +[2.308055, "o", "c"] +[2.334363, "o", "k"] +[2.360655, "o", "w"] +[2.386979, "o", "a"] +[2.413041, "o", "r"] +[2.439209, "o", "d"] +[2.466072, "o", "s"] +[2.492203, "o", ","] +[2.518418, "o", " "] +[2.537597, "o", "l"] +[2.563765, "o", "i"] +[2.582704, "o", "k"] +[2.608973, "o", "e"] +[2.628666, "o", " "] +[2.64886, "o", "r"] +[2.673128, "o", "a"] +[2.694683, "o", "d"] +[2.716595, "o", "a"] +[2.735386, "o", "r"] +[2.761843, "o", "\""] +[2.78521, "o", "\r\n"] +[30.034329, "o", "The user wants a function that checks if a word is a palindrome. Let me write a Lex function for this. I'll check the string stdlib for reversing or use a simple approach.\r\n\r\n"] +[31.105816, "o", "Let me write a palindrome function. I need to check if a string equals its reverse. Let me look at the str module to find how to reverse a string.\r\n"] +[31.105926, "o", "\r\n[tool: lex_stdlib]\r\n"] +[31.119029, "o", "[running: lex_stdlib]\r\n[ok]\r\n"] +[39.279565, "o", "Let me write an is_palindrome function. I'll split into characters, reverse, and compare. str.join and str.split with empty separator.\r\n"] +[39.279718, "o", "\r\n[tool: write]\r\n"] +[39.467702, "o", "[running: write]\r\n[ok]\r\n"] +[42.186758, "o", "The check passed. Let me run the examples to confirm.\r\n"] +[42.186863, "o", "\r\n[tool: lex_run]\r\n"] +[42.262623, "o", "[running: lex_run]\r\n[ok]\r\n"] +[45.986744, "o", "Let me run a test by passing args.The `lex check` passed and the examples compiled fine. The runtime error is just because I invoked the function without arguments (it needs a word). Let me confirm it runs correctly with a value:\r\n"] +[45.98686, "o", "\r\n[tool: write]\r\n"] +[46.019498, "o", "[running: write]\r\n[error]\r\n"] +[49.901989, "o", "The example test cases already validated the function, so the demo file is just clutter. Let me remove it and rely on the examples to verify everything works.\r\n"] +[49.902106, "o", "\r\n[tool: bash]\r\n"] +[49.915466, "o", "[running: bash]\r\n[ok]\r\n"] +[50.822147, "o", "Let me just verify with a test.\r\n"] +[50.822176, "o", "\r\n[tool: lex_test]\r\n"] +[50.828755, "o", "[running: lex_test]\r\n"] +[50.828815, "o", "[ok]\r\n"] +[52.705213, "o", "The lex_run had an arity issue, probably it just requires args. Let me just run with an argument.\r\n"] +[52.705298, "o", "\r\n[tool: lex_run]\r\n"] +[52.714481, "o", "[running: lex_run]\r\n"] +[52.714505, "o", "[ok]\r\n"] +[53.970674, "o", "It works. The earlier error was because I ran it without an argument.Done. The function `is_palindrome` in `src/palindrome.lex`:\r\n\r\n"] +[54.031453, "o", "```lex\r\n"] +[54.226973, "o", "fn is_palindrome(word :: Str) -> Bool\r\n"] +[54.296715, "o", " examples {\r\n"] +[54.465072, "o", " is_palindrome(\"radar\") => true,\r\n"] +[54.605652, "o", " is_palindrome(\"Racecar\") => true,\r\n"] +[54.746254, "o", " is_palindrome(\"hello\") => false,\r\n"] +[54.983053, "o", " is_palindrome(\"\") => true\r\n"] +[54.983437, "o", " }\r\n"] +[55.054665, "o", "{\r\n"] +[55.19607, "o", " let lower := str.to_lower(word)\r\n"] +[55.410324, "o", " let reversed := str.join(list.reverse(str.split(lower, \"\")), \"\")\r\n"] +[55.480359, "o", " lower == reversed\r\n"] +[55.480631, "o", "}\r\n"] +[55.480867, "o", "```\r\n\r\n"] +[56.600585, "o", "It's a pure function, type-checks clean, and passes its examples (verified `is_palindrome(\"radar\") => true`). It lowercases the word first, so matching is case-insensitive — e.g. `\"Racecar\"` also returns `true`.\r\n\r\n"] +[57.320645, "o", "The earlier `lex run` panic was just because I invoked it without the string argument; passing `\"radar\"` confirms it returns `true`.\r\n"] +[57.320673, "o", "\r\n"] +[57.321753, "o", "\r\n(trail: .lex/sessions/cli-1790251703662-4b7b9990.db)\r\n\r\n"] +[57.321849, "o", "null\r\n"] diff --git a/site/demo/issue.cast b/site/demo/issue.cast new file mode 100644 index 0000000..afe0a22 --- /dev/null +++ b/site/demo/issue.cast @@ -0,0 +1,398 @@ +{"version": 2, "width": 80, "height": 24, "timestamp": 1790252487, "idle_time_limit": 2.0, "env": {"SHELL": "/bin/zsh", "TERM": null}} +[0.044794, "o", "$"] +[0.059344, "o", " "] +[0.07896, "o", "I"] +[0.098484, "o", "S"] +[0.118217, "o", "S"] +[0.137819, "o", "U"] +[0.157438, "o", "E"] +[0.177155, "o", "_"] +[0.19178, "o", "I"] +[0.211736, "o", "D"] +[0.231816, "o", "="] +[0.252161, "o", "$"] +[0.270405, "o", "("] +[0.290669, "o", "l"] +[0.310693, "o", "e"] +[0.324242, "o", "x"] +[0.344096, "o", " "] +[0.363777, "o", "i"] +[0.381542, "o", "s"] +[0.396297, "o", "s"] +[0.41585, "o", "u"] +[0.435449, "o", "e"] +[0.455195, "o", " "] +[0.474804, "o", "c"] +[0.494472, "o", "r"] +[0.509834, "o", "e"] +[0.529445, "o", "a"] +[0.549163, "o", "t"] +[0.568741, "o", "e"] +[0.584137, "o", " "] +[0.603845, "o", "-"] +[0.621608, "o", "-"] +[0.641204, "o", "t"] +[0.657982, "o", "i"] +[0.67679, "o", "t"] +[0.690655, "o", "l"] +[0.704784, "o", "e"] +[0.718806, "o", " "] +[0.735325, "o", "\""] +[0.755456, "o", "a"] +[0.770708, "o", "d"] +[0.786408, "o", "d"] +[0.802967, "o", " "] +[0.823253, "o", "z"] +[0.839157, "o", "i"] +[0.854061, "o", "p"] +[0.869641, "o", "\""] +[0.886725, "o", " "] +[0.904642, "o", "-"] +[0.918882, "o", "-"] +[0.935803, "o", "s"] +[0.955697, "o", "h"] +[0.975442, "o", "a"] +[0.989295, "o", "p"] +[1.007187, "o", "e"] +[1.02595, "o", " "] +[1.045746, "o", "t"] +[1.063851, "o", "y"] +[1.07759, "o", "p"] +[1.092817, "o", "e"] +[1.107862, "o", "d"] +[1.122468, "o", "_"] +[1.136405, "o", "d"] +[1.152735, "o", "e"] +[1.172459, "o", "l"] +[1.192579, "o", "t"] +[1.209638, "o", "a"] +[1.226632, "o", " "] +[1.246285, "o", "\\"] +[1.26587, "o", "\r\n"] +[1.265998, "o", " "] +[1.285938, "o", " "] +[1.301701, "o", " "] +[1.321393, "o", " "] +[1.340783, "o", "-"] +[1.36071, "o", "-"] +[1.380749, "o", "a"] +[1.400619, "o", "p"] +[1.42061, "o", "i"] +[1.440024, "o", " "] +[1.459611, "o", "\""] +[1.479356, "o", "z"] +[1.49899, "o", "i"] +[1.518727, "o", "p"] +[1.533563, "o", ":"] +[1.54971, "o", "("] +[1.56681, "o", "x"] +[1.58677, "o", "s"] +[1.604945, "o", " "] +[1.624962, "o", ":"] +[1.644634, "o", ":"] +[1.664225, "o", " "] +[1.683934, "o", "L"] +[1.697675, "o", "i"] +[1.71722, "o", "s"] +[1.736817, "o", "t"] +[1.756969, "o", "["] +[1.776951, "o", "A"] +[1.797002, "o", "]"] +[1.816985, "o", ","] +[1.836973, "o", " "] +[1.85698, "o", "y"] +[1.877071, "o", "s"] +[1.891508, "o", " "] +[1.91094, "o", ":"] +[1.930491, "o", ":"] +[1.950067, "o", " "] +[1.969607, "o", "L"] +[1.989152, "o", "i"] +[2.008627, "o", "s"] +[2.028151, "o", "t"] +[2.047616, "o", "["] +[2.067133, "o", "B"] +[2.086662, "o", "]"] +[2.106179, "o", ")"] +[2.125721, "o", " "] +[2.142011, "o", "-"] +[2.16052, "o", ">"] +[2.180376, "o", " "] +[2.195087, "o", "L"] +[2.211984, "o", "i"] +[2.23157, "o", "s"] +[2.251303, "o", "t"] +[2.271101, "o", "["] +[2.288478, "o", "("] +[2.308648, "o", "A"] +[2.325147, "o", ","] +[2.343811, "o", " "] +[2.364422, "o", "B"] +[2.385275, "o", ")"] +[2.406172, "o", "]"] +[2.427529, "o", "\""] +[2.443969, "o", " "] +[2.465497, "o", "\\"] +[2.487235, "o", "\r\n"] +[2.487479, "o", " "] +[2.506931, "o", " "] +[2.529442, "o", " "] +[2.551423, "o", " "] +[2.577475, "o", "-"] +[2.598047, "o", "-"] +[2.61819, "o", "e"] +[2.638348, "o", "x"] +[2.658221, "o", "a"] +[2.678256, "o", "m"] +[2.698058, "o", "p"] +[2.717084, "o", "l"] +[2.736873, "o", "e"] +[2.751581, "o", " "] +[2.771294, "o", "\""] +[2.790887, "o", "z"] +[2.810685, "o", "i"] +[2.830631, "o", "p"] +[2.849796, "o", "("] +[2.869915, "o", "["] +[2.890181, "o", "1"] +[2.910469, "o", ","] +[2.93119, "o", "2"] +[2.952122, "o", "]"] +[2.973519, "o", ","] +[2.995126, "o", "["] +[3.017204, "o", "\\"] +[3.040399, "o", "\""] +[3.06417, "o", "a"] +[3.088682, "o", "\\"] +[3.1102, "o", "\""] +[3.133325, "o", ","] +[3.153391, "o", "\\"] +[3.176612, "o", "\""] +[3.199866, "o", "b"] +[3.22234, "o", "\\"] +[3.244719, "o", "\""] +[3.268351, "o", "]"] +[3.292965, "o", ")"] +[3.317033, "o", " "] +[3.337978, "o", "="] +[3.358088, "o", ">"] +[3.378205, "o", " "] +[3.39836, "o", "["] +[3.418412, "o", "("] +[3.43328, "o", "1"] +[3.453956, "o", ","] +[3.47119, "o", "\\"] +[3.493192, "o", "\""] +[3.514019, "o", "a"] +[3.53647, "o", "\\"] +[3.557475, "o", "\""] +[3.582833, "o", ")"] +[3.606431, "o", ","] +[3.629471, "o", "("] +[3.652507, "o", "2"] +[3.676195, "o", ","] +[3.700175, "o", "\\"] +[3.723622, "o", "\""] +[3.744215, "o", "b"] +[3.767426, "o", "\\"] +[3.789941, "o", "\""] +[3.809756, "o", ")"] +[3.833849, "o", "]"] +[3.858034, "o", "\""] +[3.882043, "o", ")"] +[3.90586, "o", "\r\n"] +[4.431919, "o", "$"] +[4.458441, "o", " "] +[4.478801, "o", "."] +[4.500659, "o", "/"] +[4.522685, "o", "b"] +[4.542408, "o", "i"] +[4.56343, "o", "n"] +[4.579238, "o", "/"] +[4.599527, "o", "l"] +[4.619148, "o", "e"] +[4.638959, "o", "x"] +[4.659551, "o", "-"] +[4.679529, "o", "c"] +[4.700798, "o", "o"] +[4.722612, "o", "d"] +[4.742404, "o", "e"] +[4.764892, "o", " "] +[4.783809, "o", "\""] +[4.807206, "o", "-"] +[4.829373, "o", "-"] +[4.853339, "o", "i"] +[4.871647, "o", "s"] +[4.890911, "o", "s"] +[4.914432, "o", "u"] +[4.93914, "o", "e"] +[4.964905, "o", "="] +[4.988804, "o", "a"] +[5.0127, "o", "e"] +[5.036173, "o", "a"] +[5.061419, "o", "6"] +[5.085841, "o", "6"] +[5.110976, "o", "1"] +[5.132697, "o", "3"] +[5.153722, "o", "f"] +[5.173509, "o", "c"] +[5.193567, "o", "9"] +[5.213975, "o", "e"] +[5.234169, "o", "9"] +[5.254461, "o", "6"] +[5.271062, "o", "9"] +[5.292228, "o", "5"] +[5.307838, "o", "3"] +[5.324592, "o", "b"] +[5.351915, "o", "b"] +[5.380172, "o", "1"] +[5.399984, "o", "c"] +[5.426251, "o", "8"] +[5.442806, "o", "9"] +[5.459468, "o", "f"] +[5.476753, "o", "b"] +[5.499793, "o", "3"] +[5.523768, "o", "c"] +[5.553792, "o", "4"] +[5.57976, "o", "5"] +[5.606859, "o", "a"] +[5.634551, "o", "c"] +[5.663684, "o", "7"] +[5.686999, "o", "2"] +[5.710629, "o", "0"] +[5.730608, "o", "0"] +[5.75068, "o", "f"] +[5.77256, "o", "6"] +[5.795104, "o", "2"] +[5.818621, "o", "a"] +[5.842271, "o", "3"] +[5.867323, "o", "7"] +[5.890087, "o", "9"] +[5.911864, "o", "a"] +[5.934446, "o", "c"] +[5.955597, "o", "d"] +[5.978196, "o", "e"] +[6.002055, "o", "e"] +[6.02335, "o", "2"] +[6.043873, "o", "a"] +[6.064279, "o", "4"] +[6.0847, "o", "7"] +[6.105331, "o", "e"] +[6.126027, "o", "2"] +[6.141548, "o", "9"] +[6.162611, "o", "b"] +[6.183993, "o", "a"] +[6.203693, "o", "b"] +[6.226249, "o", "4"] +[6.250304, "o", "c"] +[6.269743, "o", "9"] +[6.294639, "o", "3"] +[6.319897, "o", "8"] +[6.343727, "o", "c"] +[6.368807, "o", "e"] +[6.393615, "o", "d"] +[6.415929, "o", "\""] +[6.439886, "o", " "] +[6.464175, "o", "-"] +[6.488426, "o", "-"] +[6.510847, "o", "o"] +[6.533442, "o", "l"] +[6.557316, "o", "l"] +[6.577957, "o", "a"] +[6.594027, "o", "m"] +[6.61449, "o", "a"] +[6.634191, "o", " "] +[6.648839, "o", ">"] +[6.663637, "o", " "] +[6.681366, "o", "/"] +[6.700579, "o", "t"] +[6.720278, "o", "m"] +[6.740181, "o", "p"] +[6.760051, "o", "/"] +[6.778775, "o", "l"] +[6.798921, "o", "e"] +[6.819284, "o", "x"] +[6.839886, "o", "-"] +[6.860916, "o", "c"] +[6.879842, "o", "o"] +[6.901822, "o", "d"] +[6.92744, "o", "e"] +[6.951481, "o", "-"] +[6.972598, "o", "i"] +[6.988199, "o", "s"] +[7.009691, "o", "s"] +[7.034167, "o", "u"] +[7.053281, "o", "e"] +[7.069896, "o", "-"] +[7.089965, "o", "d"] +[7.110744, "o", "e"] +[7.129383, "o", "m"] +[7.147976, "o", "o"] +[7.16965, "o", "."] +[7.190216, "o", "l"] +[7.21062, "o", "o"] +[7.228708, "o", "g"] +[7.250958, "o", " "] +[7.272785, "o", "2"] +[7.298177, "o", ">"] +[7.32371, "o", "&"] +[7.348781, "o", "1"] +[7.372803, "o", "\r\n"] +[107.440477, "o", "$"] +[107.460942, "o", " "] +[107.479696, "o", "g"] +[107.500563, "o", "r"] +[107.519129, "o", "e"] +[107.538064, "o", "p"] +[107.558883, "o", " "] +[107.579126, "o", "\""] +[107.598709, "o", "^"] +[107.619061, "o", "\\"] +[107.640585, "o", "["] +[107.660411, "o", "I"] +[107.679834, "o", "S"] +[107.698807, "o", "S"] +[107.718463, "o", "U"] +[107.738024, "o", "E"] +[107.759851, "o", "_"] +[107.780171, "o", "V"] +[107.801115, "o", "E"] +[107.824163, "o", "R"] +[107.844785, "o", "D"] +[107.865285, "o", "I"] +[107.885342, "o", "C"] +[107.90802, "o", "T"] +[107.929522, "o", "\\"] +[107.949842, "o", "]"] +[107.967572, "o", "\""] +[107.98363, "o", " "] +[108.002356, "o", "/"] +[108.021557, "o", "t"] +[108.041627, "o", "m"] +[108.057476, "o", "p"] +[108.075882, "o", "/"] +[108.095181, "o", "l"] +[108.113399, "o", "e"] +[108.133337, "o", "x"] +[108.150986, "o", "-"] +[108.169702, "o", "c"] +[108.191004, "o", "o"] +[108.212061, "o", "d"] +[108.230683, "o", "e"] +[108.251304, "o", "-"] +[108.269804, "o", "i"] +[108.288082, "o", "s"] +[108.308409, "o", "s"] +[108.328761, "o", "u"] +[108.348847, "o", "e"] +[108.367556, "o", "-"] +[108.388037, "o", "d"] +[108.407639, "o", "e"] +[108.426387, "o", "m"] +[108.4448, "o", "o"] +[108.463686, "o", "."] +[108.483527, "o", "l"] +[108.504674, "o", "o"] +[108.524887, "o", "g"] +[108.542961, "o", "\r\n"] +[108.549188, "o", "[ISSUE_VERDICT]\tverified\taea6613fc9e96953bb1c89fb3c45ac7200f62a379acdee2a47e29bab4c938ced\r\n"] diff --git a/site/demo/webui.gif b/site/demo/webui.gif index d7ad3be..33cddd1 100644 Binary files a/site/demo/webui.gif and b/site/demo/webui.gif differ diff --git a/site/index.html b/site/index.html index e9edfa4..16759a3 100644 --- a/site/index.html +++ b/site/index.html @@ -73,6 +73,7 @@
lex-code
curl -fsSL https://raw.githubusercontent.com/alpibrusl/lex-code/main/install.sh | bash
- - Screen recording of the lex-code web UI: a real Ollama session implementing zip, then its full event Trail. - -

The web UI, recorded live: a real local (Ollama) session implementing zip, then its full event Trail.

+
+

A real, unedited run — the request is plain English, not Lex. No signature, no syntax, no prior Lex knowledge.

+ + +
+

Why not just use Cursor, Copilot, or Claude Code directly?

+
+

Different confidence signal

Those tools end when the model + says it's done and the diff looks right to you. lex-code ends when lex check + passes and a declared acceptance does too — a result you can act on without reading the + diff, not a transcript claiming success.

+

An enforced sandbox, not a polite one

An editor assistant runs + with whatever access your editor has. lex-code's capability grant is enforced by the Lex + VM itself — an effect it wasn't granted, it cannot perform, full stop, not "was told not + to."

+

Not a competing IDE

It isn't trying to replace your daily + driver. It's a plain CLI any agent — Cursor, Claude Code, Codex, a CI step — can shell out + to specifically for Lex, the one thing it holds to a stricter bar than "the diff looks + plausible."

+
@@ -144,6 +161,9 @@

Try it

lex-code "--issue=$ISSUE_ID" --ollama > /tmp/lex-code.log 2>&1 grep '^\[ISSUE_VERDICT\]' /tmp/lex-code.log # [ISSUE_VERDICT] verified <issue_id> +
+

The typed-issue flow above, live and unedited — same issue, + same run, ending in the same verified line.

Both commands above are copy-paste real — run verbatim against this repo @@ -156,6 +176,11 @@

Try it

--verify, --bar, --multi), the web UI, and the typed-issue workflow in depth: the README.

+ + Screen recording of the lex-code web UI: a real Ollama session writing a password-strength check, its Trail, and the fact it remembered showing up in Memory. + +

Prefer a UI: the same kind of session, with its live Trail — and + Memory, once something's worth remembering across sessions, right in the sidebar.

@@ -184,6 +209,14 @@

OpenCode Go plan

cols: 100, rows: 30, theme: 'monokai', fit: 'width', preload: true, poster: 'npt:0:01' }); + AsciinemaPlayer.create('demo/friendly.cast', document.getElementById('cast-friendly'), { + cols: 100, rows: 30, theme: 'monokai', fit: 'width', preload: true, + poster: 'npt:0:01' + }); + AsciinemaPlayer.create('demo/issue.cast', document.getElementById('cast-issue'), { + cols: 100, rows: 24, theme: 'monokai', fit: 'width', preload: true, + poster: 'npt:0:01' + });