Compare commits

..
476 Commits
Author SHA1 Message Date
KRATOS 1663cc25f7 session local-c9: claude-opus-5 — published session 2026-08-24 20:53:18 +05:30
KRATOS 5434d6b1b6 session local-c9: claude-opus-5 — published session 2026-08-24 20:42:17 +05:30
KRATOS f803e8473a session local-c9: claude-opus-5 — published session 2026-08-24 20:05:49 +05:30
KRATOS 0cb8a34075 session local-c9: claude-opus-5 — published session 2026-08-24 18:19:07 +05:30
KRATOS 8378c39e1d session local-c9: claude-opus-5 — published session 2026-08-24 14:28:49 +05:30
KRATOS 1340fa5ae1 session local-c9: claude-opus-5 — published session 2026-08-24 14:28:06 +05:30
KRATOS efaeabdb55 session local-c9: claude-opus-5 — published session 2026-08-24 14:28:01 +05:30
KRATOS 22e79d6fbe session local-c9: claude-opus-5 — published session 2026-08-24 14:27:56 +05:30
KRATOS b65d2f1177 session local-c9: claude-opus-5 — published session 2026-08-24 14:27:51 +05:30
KRATOS eaa1617425 session local-c9: claude-opus-5 — published session 2026-08-24 14:27:45 +05:30
KRATOS 362253b58c session local-c9: claude-opus-5 — published session 2026-08-24 14:27:40 +05:30
KRATOS e74ed3eaf9 session local-c9: claude-opus-5 — published session 2026-08-24 14:27:35 +05:30
KRATOS cff3245568 session local-c9: claude-opus-5 — published session 2026-08-24 14:27:33 +05:30
KRATOS 973c8ca97a session local-c9: claude-opus-5 — published session 2026-08-24 14:27:27 +05:30
KRATOS 652690c1e5 session local-c9: claude-opus-5 — published session 2026-08-24 14:27:23 +05:30
KRATOS ce2e5c79d0 session local-c9: claude-opus-5 — published session 2026-08-24 14:19:56 +05:30
KRATOS 738ab547cb session local-c9: claude-opus-5 — published session 2026-08-24 14:19:24 +05:30
KRATOS bf76da2683 session local-c9: claude-opus-5 — published session 2026-08-24 14:19:19 +05:30
KRATOS f0144b45fc session local-c9: claude-opus-5 — published session 2026-08-24 14:19:16 +05:30
KRATOS 9c5379adf5 session local-c9: claude-opus-5 — published session 2026-08-24 14:19:11 +05:30
KRATOS d466e7a072 session local-c9: claude-opus-5 — published session 2026-08-24 14:19:05 +05:30
KRATOS 159d2fb2a9 session local-c9: claude-opus-5 — published session 2026-08-24 14:18:59 +05:30
KRATOS f7f1f05b0e session local-c9: claude-opus-5 — published session 2026-08-24 14:18:57 +05:30
KRATOS cb32fda724 session local-c9: claude-opus-5 — published session 2026-08-24 14:18:53 +05:30
KRATOS b33b5f2aa8 session local-c9: claude-opus-5 — published session 2026-08-24 14:18:48 +05:30
KRATOS 6ce59e681e session local-c9: claude-opus-5 — published session 2026-08-24 14:18:47 +05:30
KRATOS 0c059f5048 session local-c9: claude-opus-5 — published session 2026-08-24 14:18:42 +05:30
KRATOS f0ba49c66e session local-c9: claude-opus-5 — published session 2026-08-24 14:18:33 +05:30
KRATOS 2a0fa271f2 session local-c9: claude-opus-5 — published session 2026-08-24 14:18:29 +05:30
KRATOS 03079e7f95 session local-c9: claude-opus-5 — published session 2026-08-24 14:14:18 +05:30
KRATOS ad63ce2de3 session local-c9: claude-opus-5 — published session 2026-08-24 14:13:52 +05:30
KRATOS 0f2f6955b1 session local-c9: claude-opus-5 — published session 2026-08-24 14:13:46 +05:30
KRATOS 122f98a07b session local-c9: claude-opus-5 — published session 2026-08-24 14:13:42 +05:30
KRATOS 797e3a26bc session local-c9: claude-opus-5 — published session 2026-08-24 14:13:39 +05:30
KRATOS 2840462c61 session local-c9: claude-opus-5 — published session 2026-08-24 14:13:33 +05:30
KRATOS ff99a5f286 session local-c9: claude-opus-5 — published session 2026-08-24 14:13:29 +05:30
KRATOS 1b6e6a7856 session local-c9: claude-opus-5 — published session 2026-08-24 14:13:25 +05:30
KRATOS 089dbd2e26 session local-c9: claude-opus-5 — published session 2026-08-24 14:13:18 +05:30
KRATOS 13de9d7ce7 session local-c9: claude-opus-5 — published session 2026-08-24 14:13:14 +05:30
KRATOS 838d11d8c1 session local-c9: claude-opus-5 — published session 2026-08-24 14:13:11 +05:30
KRATOS 89483d3fff session local-c9: claude-opus-5 — published session 2026-08-24 14:13:06 +05:30
KRATOS df1b7e007f session local-c9: claude-opus-5 — published session 2026-08-24 14:13:02 +05:30
KRATOS fa72b59619 session local-c9: claude-opus-5 — published session 2026-08-24 14:12:56 +05:30
KRATOS 7b6c9510e3 session local-c9: claude-opus-5 — published session 2026-08-24 14:12:52 +05:30
KRATOS c198560854 session local-c9: claude-opus-5 — published session 2026-08-24 14:09:18 +05:30
KRATOS 467992e17e session local-c9: claude-opus-5 — published session 2026-08-24 13:31:28 +05:30
KRATOS 2a211e9b67 session local-c9: claude-opus-5 — published session 2026-08-24 13:30:58 +05:30
KRATOS 98af8807c0 session local-c9: claude-opus-5 — published session 2026-08-24 13:30:51 +05:30
KRATOS 53a4eb2efc session local-c9: claude-opus-5 — published session 2026-08-24 13:30:47 +05:30
KRATOS d22d485da8 session local-c9: claude-opus-5 — published session 2026-08-24 13:30:43 +05:30
KRATOS 3f96681782 session local-c9: claude-opus-5 — published session 2026-08-24 13:30:37 +05:30
KRATOS 26a07f8632 session local-c9: claude-opus-5 — published session 2026-08-24 13:30:32 +05:30
KRATOS d00e3c87e1 session local-c9: claude-opus-5 — published session 2026-08-24 13:30:29 +05:30
KRATOS 68010f16ec session local-c9: claude-opus-5 — published session 2026-08-24 13:30:23 +05:30
KRATOS 1c74c9b316 session local-c9: claude-opus-5 — published session 2026-08-24 13:30:19 +05:30
KRATOS e3ed3e95a7 session local-c9: claude-opus-5 — published session 2026-08-24 13:29:35 +05:30
KRATOS d96c5a83b0 session local-c9: claude-opus-5 — published session 2026-08-24 13:29:06 +05:30
KRATOS 594aa56405 session local-c9: claude-opus-5 — published session 2026-08-24 13:28:59 +05:30
KRATOS 933c0060b0 session local-c9: claude-opus-5 — published session 2026-08-24 13:28:56 +05:30
KRATOS 21026086c3 session local-c9: claude-opus-5 — published session 2026-08-24 13:28:51 +05:30
KRATOS df466c5f6a session local-c9: claude-opus-5 — published session 2026-08-24 13:28:45 +05:30
KRATOS 85b3c86d5b session local-c9: claude-opus-5 — published session 2026-08-24 13:28:41 +05:30
KRATOS 0e1f25baf4 session local-c9: claude-opus-5 — published session 2026-08-24 11:17:51 +05:30
KRATOS d0f43ab309 session local-c9: claude-opus-5 — published session 2026-08-24 11:17:46 +05:30
KRATOS 93236dc0cb session local-a4: claude-opus-5 — published session 2026-08-21 21:23:45 +05:30
KRATOS 79dbdeed66 session local-a4: claude-opus-5 — published session 2026-08-21 21:18:39 +05:30
KRATOS 857e206443 session local-a4: claude-opus-5 — published session 2026-08-21 21:03:08 +05:30
KRATOS ff077b9c20 session local-13: claude-opus-5 — published session 2026-08-21 13:27:33 +05:30
KRATOS 5ea719f9a8 session local-13: claude-opus-5 — published session 2026-08-21 11:45:31 +05:30
KRATOS 926cd7b4b2 session local-13: claude-opus-5 — published session 2026-08-21 11:45:28 +05:30
KRATOS 957c71f480 session local-13: claude-opus-5 — published session 2026-08-21 11:45:24 +05:30
KRATOS 6dcccf5425 session local-13: claude-opus-5 — published session 2026-08-21 11:45:20 +05:30
KRATOS 8a3a5bc803 session local-13: claude-opus-5 — published session 2026-08-21 11:45:17 +05:30
KRATOS 27e685d885 session local-13: claude-opus-5 — published session 2026-08-21 11:45:12 +05:30
KRATOS fd520cee66 session local-13: claude-opus-5 — published session 2026-08-21 11:45:07 +05:30
KRATOS 7464a23b7a session local-13: claude-opus-5 — published session 2026-08-21 11:45:04 +05:30
KRATOS 9809a062cf session local-13: claude-opus-5 — published session 2026-08-21 11:44:59 +05:30
KRATOS 1a39474738 session local-13: claude-opus-5 — published session 2026-08-21 11:44:53 +05:30
KRATOS 5855e326b2 session local-13: claude-opus-5 — published session 2026-08-21 11:44:52 +05:30
KRATOS ff20f914a1 session local-13: claude-opus-5 — published session 2026-08-21 11:44:48 +05:30
KRATOS 299b012222 session local-13: claude-opus-5 — published session 2026-08-21 11:44:42 +05:30
KRATOS 1237c5669a session local-13: claude-opus-5 — published session 2026-08-21 11:44:37 +05:30
KRATOS 8e18f9f48d session local-13: claude-opus-5 — published session 2026-08-21 11:44:36 +05:30
KRATOS 3c6056e81e session local-13: claude-opus-5 — published session 2026-08-21 11:44:31 +05:30
KRATOS 83a9208edb session local-13: claude-opus-5 — published session 2026-08-21 11:44:25 +05:30
KRATOS 6f230b3431 session local-13: claude-opus-5 — published session 2026-08-21 11:44:24 +05:30
KRATOS 0987f5272a session local-13: claude-opus-5 — published session 2026-08-21 11:44:20 +05:30
KRATOS 321ee665c1 session local-13: claude-opus-5 — published session 2026-08-21 11:44:14 +05:30
KRATOS 446aca17f4 session local-13: claude-opus-5 — published session 2026-08-21 11:44:09 +05:30
KRATOS 0f1b605300 session local-13: claude-opus-5 — published session 2026-08-21 11:44:07 +05:30
KRATOS dd2b6ba03f session local-13: claude-opus-5 — published session 2026-08-21 11:44:01 +05:30
KRATOS faba98ea7e session local-13: claude-opus-5 — published session 2026-08-21 11:43:58 +05:30
KRATOS 0da0388d2f session local-13: claude-opus-5 — published session 2026-08-21 11:43:53 +05:30
KRATOS 5f298c68f2 session local-13: claude-opus-5 — published session 2026-08-21 11:43:49 +05:30
KRATOS c08ba3cef7 session local-13: claude-opus-5 — published session 2026-08-21 11:43:44 +05:30
KRATOS 19b52802c7 session local-13: claude-opus-5 — published session 2026-08-21 11:43:42 +05:30
KRATOS 80a695b596 session local-13: claude-opus-5 — published session 2026-08-21 11:43:38 +05:30
KRATOS aa206fa5a4 session local-13: claude-opus-5 — published session 2026-08-21 11:43:33 +05:30
KRATOS 0cbb45636f session local-13: claude-opus-5 — published session 2026-08-21 11:43:28 +05:30
KRATOS 6ea8e420a4 session local-13: claude-opus-5 — published session 2026-08-21 11:43:26 +05:30
KRATOS a8609b12b9 session local-13: claude-opus-5 — published session 2026-08-21 11:43:19 +05:30
KRATOS b77e820225 session local-13: claude-opus-5 — published session 2026-08-21 11:43:16 +05:30
KRATOS e0e7c2396b session local-13: claude-opus-5 — published session 2026-08-21 11:43:12 +05:30
KRATOS 969e959c5a session local-13: claude-opus-5 — published session 2026-08-21 11:43:06 +05:30
KRATOS f8ee037073 session local-13: claude-opus-5 — published session 2026-08-21 11:43:02 +05:30
KRATOS 2ef7eb3cda session local-13: claude-opus-5 — published session 2026-08-21 11:43:00 +05:30
KRATOS 5660f40de0 session local-13: claude-opus-5 — published session 2026-08-21 11:42:53 +05:30
KRATOS 458f71fd1d session local-13: claude-opus-5 — published session 2026-08-21 11:42:50 +05:30
KRATOS 679e7f8df4 session local-13: claude-opus-5 — published session 2026-08-21 11:42:47 +05:30
KRATOS 4d324265a4 session local-13: claude-opus-5 — published session 2026-08-21 11:42:39 +05:30
KRATOS e01a594d5e session local-13: claude-opus-5 — published session 2026-08-21 11:42:38 +05:30
KRATOS 2e8eaf7112 session local-13: claude-opus-5 — published session 2026-08-21 11:42:34 +05:30
KRATOS be0ef63b20 session local-13: claude-opus-5 — published session 2026-08-21 11:42:28 +05:30
KRATOS c968be278a session local-13: claude-opus-5 — published session 2026-08-21 11:42:24 +05:30
KRATOS ad1249a0e3 session local-13: claude-opus-5 — published session 2026-08-21 11:42:22 +05:30
KRATOS 05ad939eab session local-13: claude-opus-5 — published session 2026-08-21 11:42:16 +05:30
KRATOS 4166cfc03b session local-13: claude-opus-5 — published session 2026-08-21 11:42:12 +05:30
KRATOS 97c3d357c6 session local-13: claude-opus-5 — published session 2026-08-21 11:42:09 +05:30
KRATOS 798423ca95 session local-13: claude-opus-5 — published session 2026-08-21 11:42:05 +05:30
KRATOS 7711eb96d5 session local-13: claude-opus-5 — published session 2026-08-21 11:42:00 +05:30
KRATOS a510789411 session local-13: claude-opus-5 — published session 2026-08-21 11:41:55 +05:30
KRATOS cf56ece043 session local-13: claude-opus-5 — published session 2026-08-21 11:41:53 +05:30
KRATOS 56f2f3d4a5 session local-13: claude-opus-5 — published session 2026-08-21 11:41:44 +05:30
KRATOS 9ef702c184 session local-13: claude-opus-5 — published session 2026-08-21 11:41:44 +05:30
KRATOS c8c94c69ea session local-13: claude-opus-5 — published session 2026-08-21 11:41:44 +05:30
KRATOS 1ffbea6a6a session local-13: claude-opus-5 — published session 2026-08-21 11:41:43 +05:30
KRATOS e48f04a07d session local-13: claude-opus-5 — published session 2026-08-21 11:41:43 +05:30
KRATOS 0c5b71e2e0 session local-13: claude-opus-5 — published session 2026-08-21 11:41:43 +05:30
KRATOS c6e48056e0 session local-13: claude-opus-5 — published session 2026-08-21 11:41:43 +05:30
KRATOS fd42b8b5b6 session local-13: claude-opus-5 — published session 2026-08-21 11:41:42 +05:30
KRATOS e80dabe34b session local-13: claude-opus-5 — published session 2026-08-21 11:41:40 +05:30
KRATOS 4aac44961d session local-13: claude-opus-5 — published session 2026-08-21 11:38:53 +05:30
KRATOS e54d707013 session local-13: claude-opus-5 — published session 2026-08-21 09:37:53 +05:30
KRATOS e541690e7d session local-13: claude-opus-5 — published session 2026-08-21 09:29:23 +05:30
KRATOS 3c97437f9b session local-13: claude-opus-5 — published session 2026-08-21 09:29:20 +05:30
KRATOS abc3d7a848 session local-13: claude-opus-5 — published session 2026-08-21 09:29:14 +05:30
KRATOS 98ee70f7f4 session local-13: claude-opus-5 — published session 2026-08-21 09:29:11 +05:30
KRATOS 94dad89b7c session local-13: claude-opus-5 — published session 2026-08-21 09:29:07 +05:30
KRATOS 355eae789d session local-13: claude-opus-5 — published session 2026-08-21 09:29:01 +05:30
KRATOS 7298d7d3b0 session local-13: claude-opus-5 — published session 2026-08-21 09:28:56 +05:30
KRATOS 81dede85db session local-13: claude-opus-5 — published session 2026-08-21 09:28:51 +05:30
KRATOS ee30c1be2a session local-13: claude-opus-5 — published session 2026-08-21 09:12:15 +05:30
KRATOS 03c06bf8a5 session local-13: claude-opus-5 — published session 2026-08-21 09:12:11 +05:30
KRATOS 82ee2da78f session local-13: claude-opus-5 — published session 2026-08-21 09:12:06 +05:30
KRATOS 295c543f5b session local-13: claude-opus-5 — published session 2026-08-21 09:12:05 +05:30
KRATOS 0ff7f66c05 session local-13: claude-opus-5 — published session 2026-08-21 09:11:59 +05:30
KRATOS d5e1f3bb80 session local-13: claude-opus-5 — published session 2026-08-21 09:11:55 +05:30
KRATOS 47bd0b5e5b session local-8c: claude-opus-5 — published session 2026-08-21 00:20:11 +05:30
KRATOS 8b598eb79f session local-8c: claude-opus-5 — published session 2026-08-21 00:11:09 +05:30
KRATOS 7ce0e9fafc session local-8c: claude-opus-5 — published session 2026-08-20 21:09:31 +05:30
KRATOS 27097c1bf5 session local-8c: claude-opus-5 — published session 2026-08-20 21:06:54 +05:30
KRATOS 5e8d94c068 session local-8c: claude-opus-5 — published session 2026-08-20 20:58:45 +05:30
KRATOS 2d790aaa4f session local-8c: claude-opus-5 — published session 2026-08-20 20:53:40 +05:30
KRATOS 8a6799967f session local-8c: claude-opus-5 — published session 2026-08-20 18:29:07 +05:30
KRATOS ae62e4d7ca session local-8c: claude-opus-5 — published session 2026-08-20 18:28:56 +05:30
KRATOS 4bfa5b0984 session local-8c: claude-opus-5 — published session 2026-08-20 17:17:13 +05:30
KRATOS a1d7ed18f9 session local-76: claude-opus-5 — published session 2026-08-19 18:40:30 +05:30
KRATOS 1d2960cfd3 session local-76: claude-opus-5 — published session 2026-08-19 18:37:28 +05:30
KRATOS dceb83b438 session local-ce: claude-opus-5 — published session 2026-08-19 10:26:14 +05:30
KRATOS 4a4cc6c27e session local-ce: claude-opus-5 — published session 2026-08-19 08:11:49 +05:30
KRATOS 2d4a911086 session local-79: claude-opus-5 — published session 2026-08-18 00:37:15 +05:30
KRATOS aab95fec03 session local-79: claude-opus-5 — published session 2026-08-18 00:29:59 +05:30
KRATOS a0e3f90591 session local-79: claude-opus-5 — published session 2026-08-18 00:22:28 +05:30
KRATOS 46afafc218 session local-ae: claude-opus-5 — published session 2026-08-17 12:03:08 +05:30
KRATOS c59260680c session local-ae: claude-opus-5 — published session 2026-08-17 11:57:18 +05:30
KRATOS 0489541c78 session local-ae: claude-opus-5 — published session 2026-08-17 11:50:54 +05:30
KRATOS 0be8bfdadd session local-ab: claude-opus-5 — published session 2026-08-16 23:04:27 +05:30
KRATOS fcd776c608 session local-ab: claude-opus-5 — published session 2026-08-16 23:03:54 +05:30
KRATOS a9d7056f29 session local-ab: claude-opus-5 — published session 2026-08-16 22:52:05 +05:30
KRATOS 0c9c5b9bd1 session local-ab: claude-opus-5 — published session 2026-08-16 22:49:40 +05:30
KRATOS 1b18f88290 session local-ab: claude-opus-5 — published session 2026-08-16 22:47:48 +05:30
KRATOS d7dd4aeb2d session local-ab: claude-opus-5 — published session 2026-08-16 22:45:01 +05:30
KRATOS d8d11b4884 session local-ab: claude-opus-5 — published session 2026-08-16 20:39:05 +05:30
KRATOS 6a4058324f session local-ab: claude-opus-5 — published session 2026-08-16 20:36:58 +05:30
KRATOS 8f7c20b5d6 session local-ab: claude-opus-5 — published session 2026-08-16 20:22:40 +05:30
KRATOS 75ca43777f session local-ab: claude-opus-5 — published session 2026-08-16 20:20:43 +05:30
KRATOS 6c1aa0b46a session local-ab: claude-opus-5 — published session 2026-08-16 20:04:56 +05:30
KRATOS c2b5c3b238 session local-ab: claude-opus-5 — published session 2026-08-16 20:02:37 +05:30
KRATOS e7e2385522 session local-ab: claude-opus-5 — published session 2026-08-16 20:02:11 +05:30
KRATOS ac4cd4c513 session local-ab: claude-opus-5 — published session 2026-08-16 19:57:02 +05:30
KRATOS 7d7ec95b47 session local-ab: claude-opus-5 — published session 2026-08-16 16:41:36 +05:30
KRATOS a6698d837a session local-ab: claude-opus-5 — published session 2026-08-16 16:38:17 +05:30
KRATOS 02729f4161 session local-ab: claude-opus-5 — published session 2026-08-16 16:36:15 +05:30
KRATOS 976bac14be session local-ab: claude-opus-5 — published session 2026-08-16 16:30:33 +05:30
KRATOS aaad061104 session local-ab: claude-opus-5 — published session 2026-08-16 16:27:28 +05:30
KRATOS a98ef8786c session local-ab: claude-opus-5 — published session 2026-08-16 16:18:22 +05:30
KRATOS 8d3ccbc20a session local-ab: claude-opus-5 — published session 2026-08-16 16:00:02 +05:30
KRATOS f3581f53dc session local-ab: claude-opus-5 — published session 2026-08-16 15:57:33 +05:30
KRATOS 5cfea35cdf session local-ab: claude-opus-5 — published session 2026-08-16 15:47:04 +05:30
KRATOS 482c8da43a session local-ab: claude-opus-5 — published session 2026-08-16 15:08:04 +05:30
KRATOS 8d6340bd8e session local-ab: claude-opus-5 — published session 2026-08-16 15:05:53 +05:30
KRATOS e8b0fefad1 session local-ab: claude-opus-5 — published session 2026-08-16 15:05:43 +05:30
KRATOS 515b41a065 session local-ab: claude-opus-5 — published session 2026-08-16 15:01:33 +05:30
KRATOS c65486c0d5 session local-ab: claude-opus-5 — published session 2026-08-16 14:58:35 +05:30
KRATOS aa2ab465f3 session local-ab: claude-opus-5 — published session 2026-08-16 14:52:13 +05:30
KRATOS 255c3c4fe1 session local-ab: claude-opus-5 — published session 2026-08-16 14:48:03 +05:30
KRATOS d590abc5c7 session local-04: claude-opus-5 — published session 2026-08-16 10:55:21 +05:30
KRATOS dbb050fb1d session local-04: claude-opus-5 — published session 2026-08-16 10:53:27 +05:30
KRATOS ed7d9653b7 session local-de: claude-opus-5 — published session 2026-08-15 21:06:31 +05:30
KRATOS 64fe4ec6c7 session local-de: claude-opus-5 — published session 2026-08-15 21:01:56 +05:30
KRATOS d8933013bb session local-de: claude-opus-5 — published session 2026-08-15 20:58:06 +05:30
KRATOS 676c9a18c0 session local-de: claude-opus-5 — published session 2026-08-15 16:17:04 +05:30
KRATOS 4124870d70 session local-de: claude-opus-5 — published session 2026-08-15 16:16:32 +05:30
KRATOS 3599bf95a3 session local-de: claude-opus-5 — published session 2026-08-15 16:07:04 +05:30
KRATOS d0634cc95c session local-de: claude-opus-5 — published session 2026-08-15 15:58:49 +05:30
KRATOS 0564d9ecea session local-de: claude-opus-5 — published session 2026-08-15 15:58:49 +05:30
KRATOS 1d8d5e8a4e session local-de: claude-opus-5 — published session 2026-08-15 15:58:49 +05:30
KRATOS 2a9e121adf session local-de: claude-opus-5 — published session 2026-08-15 15:58:48 +05:30
KRATOS bc70710caa session local-de: claude-opus-5 — published session 2026-08-15 15:58:45 +05:30
KRATOS 016e5f2c70 session local-de: claude-opus-5 — published session 2026-08-15 15:58:44 +05:30
KRATOS bd8b9dfbfe session local-de: claude-opus-5 — published session 2026-08-15 15:58:43 +05:30
KRATOS 1d78b430cb session local-de: claude-opus-5 — published session 2026-08-15 15:58:43 +05:30
KRATOS f35e957627 session local-de: claude-opus-5 — published session 2026-08-15 15:58:42 +05:30
KRATOS e4eddf0097 session local-de: claude-opus-5 — published session 2026-08-15 15:58:41 +05:30
KRATOS d478ffe5e7 session local-de: claude-opus-5 — published session 2026-08-15 15:58:41 +05:30
KRATOS d14c0df801 session local-de: claude-opus-5 — published session 2026-08-15 15:58:40 +05:30
KRATOS 2bbac5b7c6 session local-de: claude-opus-5 — published session 2026-08-15 15:58:39 +05:30
KRATOS c8828822e4 session local-de: claude-opus-5 — published session 2026-08-15 15:58:38 +05:30
KRATOS 07ceda46b3 session local-de: claude-opus-5 — published session 2026-08-15 15:58:37 +05:30
KRATOS 7e5e0ff5f9 session local-de: claude-opus-5 — published session 2026-08-15 15:58:36 +05:30
KRATOS 4004ce09f3 session local-de: claude-opus-5 — published session 2026-08-15 15:58:33 +05:30
KRATOS ab986b8251 session local-de: claude-opus-5 — published session 2026-08-15 15:58:33 +05:30
KRATOS 8319dfffe5 session local-de: claude-opus-5 — published session 2026-08-15 15:58:31 +05:30
KRATOS f41826b3fe session local-de: claude-opus-5 — published session 2026-08-15 15:58:30 +05:30
KRATOS 5fab7bc01e session local-de: claude-opus-5 — published session 2026-08-15 15:58:30 +05:30
KRATOS bcb05c7aea session local-de: claude-opus-5 — published session 2026-08-15 15:58:30 +05:30
KRATOS cf1fb1a399 session local-de: claude-opus-5 — published session 2026-08-15 15:58:26 +05:30
KRATOS d2dea772ea session local-de: claude-opus-5 — published session 2026-08-15 15:58:24 +05:30
KRATOS ebbab956fa session local-de: claude-opus-5 — published session 2026-08-15 15:58:17 +05:30
KRATOS b3c00588c1 session local-de: claude-opus-5 — published session 2026-08-15 15:58:15 +05:30
KRATOS 20d2c420ff session local-de: claude-opus-5 — published session 2026-08-15 15:58:14 +05:30
KRATOS 4fa9e906dd session local-de: claude-opus-5 — published session 2026-08-15 15:58:13 +05:30
KRATOS 44346dfbce session local-de: claude-opus-5 — published session 2026-08-15 15:58:06 +05:30
KRATOS 6ec5276807 session local-de: claude-opus-5 — published session 2026-08-15 15:58:05 +05:30
KRATOS 4ccdc3ac5f session local-de: claude-opus-5 — published session 2026-08-15 15:58:05 +05:30
KRATOS 34d3c90a7e session local-de: claude-opus-5 — published session 2026-08-15 15:58:02 +05:30
KRATOS 14ce7fe9e5 session local-de: claude-opus-5 — published session 2026-08-15 15:57:55 +05:30
KRATOS 8d741c30c8 session local-de: claude-opus-5 — published session 2026-08-15 15:57:54 +05:30
KRATOS 6e19bb8197 session local-de: claude-opus-5 — published session 2026-08-15 15:57:54 +05:30
KRATOS b42086c13a session local-de: claude-opus-5 — published session 2026-08-15 15:57:53 +05:30
KRATOS 99c7c71590 session local-de: claude-opus-5 — published session 2026-08-15 15:57:49 +05:30
KRATOS 431326de86 session local-de: claude-opus-5 — published session 2026-08-15 15:57:47 +05:30
KRATOS 74519a5195 session local-de: claude-opus-5 — published session 2026-08-15 15:57:43 +05:30
KRATOS b8ef3202e6 session local-de: claude-opus-5 — published session 2026-08-15 15:57:39 +05:30
KRATOS e673da2399 session local-de: claude-opus-5 — published session 2026-08-15 15:57:38 +05:30
KRATOS dcf3fb103f session local-de: claude-opus-5 — published session 2026-08-15 15:57:37 +05:30
KRATOS 4b291b649e session local-de: claude-opus-5 — published session 2026-08-15 15:57:34 +05:30
KRATOS 7748d912e0 session local-de: claude-opus-5 — published session 2026-08-15 15:57:27 +05:30
KRATOS 656fc27f3f session local-de: claude-opus-5 — published session 2026-08-15 15:57:25 +05:30
KRATOS f6054c2626 session local-de: claude-opus-5 — published session 2026-08-15 15:57:24 +05:30
KRATOS 5d122996a2 session local-de: claude-opus-5 — published session 2026-08-15 15:57:24 +05:30
KRATOS 452cfaa3e0 session local-de: claude-opus-5 — published session 2026-08-15 15:57:23 +05:30
KRATOS 8540cb58f3 session local-de: claude-opus-5 — published session 2026-08-15 15:57:22 +05:30
KRATOS 528a6cacc2 session local-de: claude-opus-5 — published session 2026-08-15 15:57:20 +05:30
KRATOS 5a7aff38e3 session local-de: claude-opus-5 — published session 2026-08-15 15:57:13 +05:30
KRATOS 26c3b74d9a session local-de: claude-opus-5 — published session 2026-08-15 15:57:12 +05:30
KRATOS 9d2aa78984 session local-de: claude-opus-5 — published session 2026-08-15 15:57:09 +05:30
KRATOS ca2e1f8f73 session local-de: claude-opus-5 — published session 2026-08-15 15:57:04 +05:30
KRATOS 027b9ed70a session local-de: claude-opus-5 — published session 2026-08-15 15:57:03 +05:30
KRATOS f17b2f35f3 session local-de: claude-opus-5 — published session 2026-08-15 15:57:03 +05:30
KRATOS 30f589ed44 session local-de: claude-opus-5 — published session 2026-08-15 15:56:57 +05:30
KRATOS 869ce1f84d session local-de: claude-opus-5 — published session 2026-08-15 15:56:53 +05:30
KRATOS eda0f569e5 session local-de: claude-opus-5 — published session 2026-08-15 15:56:52 +05:30
KRATOS ee053e4fa6 session local-de: claude-opus-5 — published session 2026-08-15 15:56:48 +05:30
KRATOS 4a235fe241 session local-de: claude-opus-5 — published session 2026-08-15 15:56:45 +05:30
KRATOS eef969b30d session local-de: claude-opus-5 — published session 2026-08-15 15:56:42 +05:30
KRATOS f72bd5d773 session local-de: claude-opus-5 — published session 2026-08-15 15:56:42 +05:30
KRATOS 498fc58a52 session local-de: claude-opus-5 — published session 2026-08-15 15:56:40 +05:30
KRATOS 62dfcd0cbf session local-de: claude-opus-5 — published session 2026-08-15 15:56:38 +05:30
KRATOS 343607d0b8 session local-de: claude-opus-5 — published session 2026-08-15 15:56:36 +05:30
KRATOS 5828a71b1e session local-de: claude-opus-5 — published session 2026-08-15 15:56:35 +05:30
KRATOS 5781f232d7 session local-de: claude-opus-5 — published session 2026-08-15 15:56:34 +05:30
KRATOS 1ba9d47f78 session local-de: claude-opus-5 — published session 2026-08-15 15:56:33 +05:30
KRATOS 346a5bc9cb session local-de: claude-opus-5 — published session 2026-08-15 15:56:31 +05:30
KRATOS b5513522c7 session local-de: claude-opus-5 — published session 2026-08-15 15:56:27 +05:30
KRATOS a666d8f3a0 session local-de: claude-opus-5 — published session 2026-08-15 15:56:26 +05:30
KRATOS 56c5104df9 session local-de: claude-opus-5 — published session 2026-08-15 15:56:22 +05:30
KRATOS dc36ae0be7 session local-de: claude-opus-5 — published session 2026-08-15 15:56:17 +05:30
KRATOS be626a96ee session local-de: claude-opus-5 — published session 2026-08-15 15:56:16 +05:30
KRATOS 5cba0e200a session local-de: claude-opus-5 — published session 2026-08-15 15:56:15 +05:30
KRATOS f575231d2c session local-de: claude-opus-5 — published session 2026-08-15 15:56:14 +05:30
KRATOS f6c032614a session local-de: claude-opus-5 — published session 2026-08-15 15:56:13 +05:30
KRATOS d53903b7c7 session local-de: claude-opus-5 — published session 2026-08-15 15:56:13 +05:30
KRATOS 0dfecaf0b3 session local-de: claude-opus-5 — published session 2026-08-15 15:56:11 +05:30
KRATOS 10f8adb735 session local-de: claude-opus-5 — published session 2026-08-15 15:56:11 +05:30
KRATOS 7292d24738 session local-de: claude-opus-5 — published session 2026-08-15 15:56:06 +05:30
KRATOS 6a58992570 session local-de: claude-opus-5 — published session 2026-08-15 15:56:04 +05:30
KRATOS 9c8d1073ed session local-de: claude-opus-5 — published session 2026-08-15 15:56:02 +05:30
KRATOS ef15310379 session local-de: claude-opus-5 — published session 2026-08-15 15:55:58 +05:30
KRATOS 19a38a06fb session local-de: claude-opus-5 — published session 2026-08-15 15:55:57 +05:30
KRATOS f09f1b69af session local-de: claude-opus-5 — published session 2026-08-15 15:55:54 +05:30
KRATOS a5bc6229bd session local-de: claude-opus-5 — published session 2026-08-15 15:55:53 +05:30
KRATOS 700b8c3fc6 session local-de: claude-opus-5 — published session 2026-08-15 15:55:50 +05:30
KRATOS 39bd7a27d8 session local-de: claude-opus-5 — published session 2026-08-15 15:55:48 +05:30
KRATOS 7a7144cf62 session local-de: claude-opus-5 — published session 2026-08-15 15:55:41 +05:30
KRATOS 3e154dab26 session local-de: claude-opus-5 — published session 2026-08-15 15:55:37 +05:30
KRATOS 51db9fcc99 session local-de: claude-opus-5 — published session 2026-08-15 15:55:34 +05:30
KRATOS ce05474725 session local-de: claude-opus-5 — published session 2026-08-15 15:55:29 +05:30
KRATOS fb0fd62b74 session local-de: claude-opus-5 — published session 2026-08-15 15:55:20 +05:30
KRATOS 798802b9e5 session local-de: claude-opus-5 — published session 2026-08-15 15:55:15 +05:30
KRATOS 0178f4df8e session local-de: claude-opus-5 — published session 2026-08-15 15:55:11 +05:30
KRATOS ac4cf93772 session local-de: claude-opus-5 — published session 2026-08-15 15:55:08 +05:30
KRATOS 1f51067e34 session local-de: claude-opus-5 — published session 2026-08-15 15:54:59 +05:30
KRATOS 6699ea0987 session local-de: claude-opus-5 — published session 2026-08-15 15:54:51 +05:30
KRATOS d799d546db session local-de: claude-opus-5 — published session 2026-08-15 15:54:50 +05:30
KRATOS cc0b3934d2 session local-de: claude-opus-5 — published session 2026-08-15 15:54:49 +05:30
KRATOS 116f064ee5 session local-de: claude-opus-5 — published session 2026-08-15 15:54:48 +05:30
KRATOS d4f13d3547 session local-de: claude-opus-5 — published session 2026-08-15 15:54:46 +05:30
KRATOS 22670503db session local-de: claude-opus-5 — published session 2026-08-15 15:54:37 +05:30
KRATOS cf66e5f471 session local-de: claude-opus-5 — published session 2026-08-15 15:54:36 +05:30
KRATOS 77e41f958e session local-de: claude-opus-5 — published session 2026-08-15 15:54:31 +05:30
KRATOS 299955d98d session local-de: claude-opus-5 — published session 2026-08-15 15:54:30 +05:30
KRATOS 55728e1335 session local-de: claude-opus-5 — published session 2026-08-15 15:54:26 +05:30
KRATOS 2c0d49c5cc session local-de: claude-opus-5 — published session 2026-08-15 15:54:24 +05:30
KRATOS ee3913ce0d session local-de: claude-opus-5 — published session 2026-08-15 15:54:13 +05:30
KRATOS 84b60292f1 session local-de: claude-opus-5 — published session 2026-08-15 15:54:10 +05:30
KRATOS dba56ebe4f session local-de: claude-opus-5 — published session 2026-08-15 15:53:48 +05:30
KRATOS bad458ced9 session local-de: claude-opus-5 — published session 2026-08-15 15:53:42 +05:30
KRATOS d3140c986c session local-de: claude-opus-5 — published session 2026-08-15 15:53:40 +05:30
KRATOS b893d00cd2 session local-de: claude-opus-5 — published session 2026-08-15 15:53:39 +05:30
KRATOS b68b423565 session local-de: claude-opus-5 — published session 2026-08-15 15:53:33 +05:30
KRATOS bd158253a2 session local-de: claude-opus-5 — published session 2026-08-15 15:53:31 +05:30
KRATOS feb9b1c56b session local-de: claude-opus-5 — published session 2026-08-15 15:53:24 +05:30
KRATOS f81ee9b2af session local-de: claude-opus-5 — published session 2026-08-15 15:53:23 +05:30
KRATOS 4390205b7f session local-de: claude-opus-5 — published session 2026-08-15 15:53:22 +05:30
KRATOS 93e1b026b2 session local-de: claude-opus-5 — published session 2026-08-15 15:53:21 +05:30
KRATOS c6e8e5bd8a session local-de: claude-opus-5 — published session 2026-08-15 15:53:20 +05:30
KRATOS 22485db130 session local-de: claude-opus-5 — published session 2026-08-15 15:53:18 +05:30
KRATOS e2b74afcdb session local-de: claude-opus-5 — published session 2026-08-15 15:53:15 +05:30
KRATOS d43c368830 session local-de: claude-opus-5 — published session 2026-08-15 15:53:12 +05:30
KRATOS 4fc8aca8e0 session local-de: claude-opus-5 — published session 2026-08-15 15:53:10 +05:30
KRATOS cb0391bbeb session local-de: claude-opus-5 — published session 2026-08-15 15:53:09 +05:30
KRATOS d11714e1db session local-de: claude-opus-5 — published session 2026-08-15 15:52:59 +05:30
KRATOS a8f08f421a session local-de: claude-opus-5 — published session 2026-08-15 15:52:58 +05:30
KRATOS 177c029a88 session local-de: claude-opus-5 — published session 2026-08-15 15:52:57 +05:30
KRATOS f04d3c0cd8 session local-de: claude-opus-5 — published session 2026-08-15 15:52:49 +05:30
KRATOS f5da40fdb5 session local-de: claude-opus-5 — published session 2026-08-15 15:51:34 +05:30
KRATOS 790bac5eb2 session local-de: claude-opus-5 — published session 2026-08-15 15:51:15 +05:30
KRATOS 9625b3439c session local-de: claude-opus-5 — published session 2026-08-15 15:51:10 +05:30
KRATOS 861458e0d4 session local-de: claude-opus-5 — published session 2026-08-15 15:50:27 +05:30
KRATOS 5733e3c530 session local-de: claude-opus-5 — published session 2026-08-15 15:40:27 +05:30
KRATOS b2d8fd1bee session local-de: claude-opus-5 — published session 2026-08-15 15:36:57 +05:30
KRATOS 7eb8c16b98 session local-de: claude-opus-5 — published session 2026-08-15 15:36:48 +05:30
KRATOS a784253c19 session local-de: claude-opus-5 — published session 2026-08-15 15:36:44 +05:30
KRATOS efeb385ceb session local-de: claude-opus-5 — published session 2026-08-15 15:36:36 +05:30
KRATOS fecb51f069 session local-de: claude-opus-5 — published session 2026-08-15 15:36:25 +05:30
KRATOS 0a3c35e686 session local-de: claude-opus-5 — published session 2026-08-15 15:36:17 +05:30
KRATOS 59e6cea925 session local-de: claude-opus-5 — published session 2026-08-15 15:36:10 +05:30
KRATOS 7c7d6b2d5b session local-de: claude-opus-5 — published session 2026-08-15 15:35:58 +05:30
KRATOS 8ae00c0d78 session local-de: claude-opus-5 — published session 2026-08-15 15:35:49 +05:30
KRATOS d3e7517e19 session local-de: claude-opus-5 — published session 2026-08-15 15:35:42 +05:30
KRATOS 13a1996b01 session local-de: claude-opus-5 — published session 2026-08-15 15:35:34 +05:30
KRATOS 9aef72da30 session local-de: claude-opus-5 — published session 2026-08-15 15:35:21 +05:30
KRATOS c3fb330be8 session local-de: claude-opus-5 — published session 2026-08-15 15:35:14 +05:30
KRATOS 7fe058d3a0 session local-de: claude-opus-5 — published session 2026-08-15 15:35:07 +05:30
KRATOS c359c4040d session local-de: claude-opus-5 — published session 2026-08-15 15:34:57 +05:30
KRATOS 9f60c961db session local-de: claude-opus-5 — published session 2026-08-15 15:34:45 +05:30
KRATOS 70c84b91fd session local-de: claude-opus-5 — published session 2026-08-15 15:34:38 +05:30
KRATOS db0de38120 session local-de: claude-opus-5 — published session 2026-08-15 15:34:30 +05:30
KRATOS af0705ff77 session local-de: claude-opus-5 — published session 2026-08-15 15:34:21 +05:30
KRATOS 3a4856155d session local-de: claude-opus-5 — published session 2026-08-15 15:34:12 +05:30
KRATOS b403dd9215 session local-de: claude-opus-5 — published session 2026-08-15 15:34:02 +05:30
KRATOS 4408a95654 session local-de: claude-opus-5 — published session 2026-08-15 15:33:56 +05:30
KRATOS 5065046072 session local-de: claude-opus-5 — published session 2026-08-15 15:33:45 +05:30
KRATOS f4af0e9a7c session local-de: claude-opus-5 — published session 2026-08-15 15:33:38 +05:30
KRATOS 211fc2d741 session local-de: claude-opus-5 — published session 2026-08-15 15:33:26 +05:30
KRATOS 444fe4c1be session local-de: claude-opus-5 — published session 2026-08-15 15:33:14 +05:30
KRATOS 97457467ee session local-de: claude-opus-5 — published session 2026-08-15 15:32:59 +05:30
KRATOS 64076d935e session local-de: claude-opus-5 — published session 2026-08-15 15:32:45 +05:30
KRATOS a1aeaba4d4 session local-de: claude-opus-5 — published session 2026-08-15 15:32:23 +05:30
KRATOS 435804ec80 session local-de: claude-opus-5 — published session 2026-08-15 15:32:12 +05:30
KRATOS dbc88b08c7 session local-de: claude-opus-5 — published session 2026-08-15 15:31:58 +05:30
KRATOS f3e3502877 session local-de: claude-opus-5 — published session 2026-08-15 15:31:51 +05:30
KRATOS fbdf800830 session local-de: claude-opus-5 — published session 2026-08-15 15:31:51 +05:30
KRATOS 18a67c8435 session local-de: claude-opus-5 — published session 2026-08-15 15:31:38 +05:30
KRATOS 2876a0a98f session local-de: claude-opus-5 — published session 2026-08-15 15:31:30 +05:30
KRATOS 3b63dbc0cb session local-de: claude-opus-5 — published session 2026-08-15 15:31:15 +05:30
KRATOS 5635cde896 session local-de: claude-opus-5 — published session 2026-08-15 15:31:08 +05:30
KRATOS 2a52fb745b session local-de: claude-opus-5 — published session 2026-08-15 15:30:57 +05:30
KRATOS 26e0b018fa session local-de: claude-opus-5 — published session 2026-08-15 15:30:50 +05:30
KRATOS 7961ddcebb session local-de: claude-opus-5 — published session 2026-08-15 15:30:41 +05:30
KRATOS 1c328c4346 session local-de: claude-opus-5 — published session 2026-08-15 15:30:36 +05:30
KRATOS a4e4c51684 session local-de: claude-opus-5 — published session 2026-08-15 15:30:30 +05:30
KRATOS 1918a9c6af session local-de: claude-opus-5 — published session 2026-08-15 15:30:24 +05:30
KRATOS 8e4652dc76 session local-de: claude-opus-5 — published session 2026-08-15 15:30:18 +05:30
KRATOS dfe2976483 session local-de: claude-opus-5 — published session 2026-08-15 15:30:09 +05:30
KRATOS c0c8787e3c session local-de: claude-opus-5 — published session 2026-08-15 15:30:06 +05:30
KRATOS 59c2ba7c62 session local-de: claude-opus-5 — published session 2026-08-15 15:29:53 +05:30
KRATOS a410311b6c session local-de: claude-opus-5 — published session 2026-08-15 15:29:44 +05:30
KRATOS 6471947588 session local-de: claude-opus-5 — published session 2026-08-15 15:29:39 +05:30
KRATOS 7680479db4 session local-de: claude-opus-5 — published session 2026-08-15 15:29:29 +05:30
KRATOS 9dbb46c230 session local-de: claude-opus-5 — published session 2026-08-15 15:29:20 +05:30
KRATOS 411c255f0d session local-de: claude-opus-5 — published session 2026-08-15 15:29:10 +05:30
KRATOS 920410dcab session local-de: claude-opus-5 — published session 2026-08-15 15:28:57 +05:30
KRATOS 4ae71af794 session local-de: claude-opus-5 — published session 2026-08-15 15:28:50 +05:30
KRATOS 0036fc6384 session local-de: claude-opus-5 — published session 2026-08-15 15:28:41 +05:30
KRATOS a637568d79 session local-de: claude-opus-5 — published session 2026-08-15 15:28:33 +05:30
KRATOS d3bd1c3317 session local-de: claude-opus-5 — published session 2026-08-15 15:28:26 +05:30
KRATOS 5a48380d04 session local-de: claude-opus-5 — published session 2026-08-15 15:28:18 +05:30
KRATOS 67a765141c session local-de: claude-opus-5 — published session 2026-08-15 15:28:13 +05:30
KRATOS 927f4c1093 session local-de: claude-opus-5 — published session 2026-08-15 15:28:05 +05:30
KRATOS 14c8f54a6e session local-de: claude-opus-5 — published session 2026-08-15 15:27:59 +05:30
KRATOS ac17900017 session local-de: claude-opus-5 — published session 2026-08-15 15:27:54 +05:30
KRATOS e3625e6183 session local-de: claude-opus-5 — published session 2026-08-15 15:27:46 +05:30
KRATOS 83c9c838c7 session local-de: claude-opus-5 — published session 2026-08-15 15:27:40 +05:30
KRATOS 125790404c session local-de: claude-opus-5 — published session 2026-08-15 15:27:33 +05:30
KRATOS 9e66c3c976 session local-de: claude-opus-5 — published session 2026-08-15 15:27:26 +05:30
KRATOS 5b3bcbd15f session local-de: claude-opus-5 — published session 2026-08-15 15:27:15 +05:30
KRATOS e54478cf73 session local-de: claude-opus-5 — published session 2026-08-15 15:27:05 +05:30
KRATOS 50db365c2f session local-de: claude-opus-5 — published session 2026-08-15 15:26:47 +05:30
KRATOS 82d7e4a57b session local-de: claude-opus-5 — published session 2026-08-15 15:26:36 +05:30
KRATOS 7bcbffe8e3 session local-de: claude-opus-5 — published session 2026-08-15 15:26:24 +05:30
KRATOS eb91ea0ec1 session local-de: claude-opus-5 — published session 2026-08-15 15:26:12 +05:30
KRATOS 9c9ace9314 session local-de: claude-opus-5 — published session 2026-08-15 15:26:01 +05:30
KRATOS 348f5dc131 session local-de: claude-opus-5 — published session 2026-08-15 15:25:49 +05:30
KRATOS 0b7d5f02b1 session local-de: claude-opus-5 — published session 2026-08-15 15:25:40 +05:30
KRATOS 31a68f296c session local-de: claude-opus-5 — published session 2026-08-15 15:25:24 +05:30
KRATOS b22895e4b0 session local-de: claude-opus-5 — published session 2026-08-15 15:25:14 +05:30
KRATOS e95097f6a6 session local-de: claude-opus-5 — published session 2026-08-15 15:24:54 +05:30
KRATOS f52eaebf34 session local-de: claude-opus-5 — published session 2026-08-15 15:24:45 +05:30
KRATOS ae0d6eab31 session local-de: claude-opus-5 — published session 2026-08-15 15:24:35 +05:30
KRATOS 598c3dabb4 session local-de: claude-opus-5 — published session 2026-08-15 15:24:15 +05:30
KRATOS 59559e8f3c session local-de: claude-opus-5 — published session 2026-08-15 15:24:01 +05:30
KRATOS a60563edf7 session local-de: claude-opus-5 — published session 2026-08-15 15:23:46 +05:30
KRATOS 54f58ed7f5 session local-de: claude-opus-5 — published session 2026-08-15 15:23:30 +05:30
KRATOS 974e215d62 session local-de: claude-opus-5 — published session 2026-08-15 15:23:21 +05:30
KRATOS 4f5ad96c7d session local-de: claude-opus-5 — published session 2026-08-15 15:23:07 +05:30
KRATOS 914bce1c40 session local-de: claude-opus-5 — published session 2026-08-15 15:23:01 +05:30
KRATOS b0a90944ea session local-de: claude-opus-5 — published session 2026-08-15 15:22:54 +05:30
KRATOS 2d243908ed session local-de: claude-opus-5 — published session 2026-08-15 15:22:47 +05:30
KRATOS 093eadc229 session local-de: claude-opus-5 — published session 2026-08-15 15:22:40 +05:30
KRATOS ded539d4b9 session local-de: claude-opus-5 — published session 2026-08-15 15:22:32 +05:30
KRATOS ffbb63676e session local-de: claude-opus-5 — published session 2026-08-15 15:22:25 +05:30
KRATOS 62d6dc001d session local-de: claude-opus-5 — published session 2026-08-15 15:22:18 +05:30
KRATOS 426355f4d7 session local-de: claude-opus-5 — published session 2026-08-15 15:22:10 +05:30
KRATOS 30d98ff488 session local-de: claude-opus-5 — published session 2026-08-15 15:22:03 +05:30
KRATOS b57625c535 session local-de: claude-opus-5 — published session 2026-08-15 15:21:56 +05:30
KRATOS 4ec13bb043 session local-de: claude-opus-5 — published session 2026-08-15 15:21:49 +05:30
KRATOS 2e4458a9a0 session local-de: claude-opus-5 — published session 2026-08-15 15:21:41 +05:30
KRATOS cc5eddab8a session local-de: claude-opus-5 — published session 2026-08-15 15:21:36 +05:30
KRATOS b97e533735 session local-de: claude-opus-5 — published session 2026-08-15 15:21:30 +05:30
KRATOS d5aeec742e session local-de: claude-opus-5 — published session 2026-08-15 15:21:24 +05:30
KRATOS 47dac1af84 session local-de: claude-opus-5 — published session 2026-08-15 15:21:18 +05:30
KRATOS 0ab01dc034 session local-de: claude-opus-5 — published session 2026-08-15 15:21:13 +05:30
KRATOS 4e41294bd6 session local-de: claude-opus-5 — published session 2026-08-15 15:21:07 +05:30
KRATOS b8a11a190d session local-de: claude-opus-5 — published session 2026-08-15 15:21:00 +05:30
KRATOS d18846f7b9 session local-de: claude-opus-5 — published session 2026-08-15 15:20:55 +05:30
KRATOS 8f0762eb42 session local-de: claude-opus-5 — published session 2026-08-15 15:20:50 +05:30
KRATOS 29fcdfe9b9 session local-de: claude-opus-5 — published session 2026-08-15 15:20:43 +05:30
KRATOS 1822034212 session local-de: claude-opus-5 — published session 2026-08-15 15:20:38 +05:30
KRATOS e8fa03109c session local-de: claude-opus-5 — published session 2026-08-15 15:20:32 +05:30
KRATOS 33e15f37c2 session local-de: claude-opus-5 — published session 2026-08-15 15:20:26 +05:30
KRATOS 24f4bd5e21 session local-de: claude-opus-5 — published session 2026-08-15 15:20:19 +05:30
KRATOS 417da3d5f3 session local-de: claude-opus-5 — published session 2026-08-15 15:20:13 +05:30
KRATOS ce64f1ac44 session local-de: claude-opus-5 — published session 2026-08-15 15:20:07 +05:30
KRATOS 9cc32f11d9 session local-de: claude-opus-5 — published session 2026-08-15 15:19:59 +05:30
KRATOS 1e7b3f0a68 session local-de: claude-opus-5 — published session 2026-08-15 15:19:54 +05:30
KRATOS 5e63e6c8fe session local-de: claude-opus-5 — published session 2026-08-15 15:19:46 +05:30
KRATOS 8d124c6a03 session local-de: claude-opus-5 — published session 2026-08-15 15:19:39 +05:30
KRATOS 7d44025331 session local-de: claude-opus-5 — published session 2026-08-15 15:19:33 +05:30
KRATOS 8986a874ee session local-de: claude-opus-5 — published session 2026-08-15 15:19:27 +05:30
KRATOS 492cb3e185 session local-de: claude-opus-5 — published session 2026-08-15 15:19:21 +05:30
KRATOS fbee46279a session local-de: claude-opus-5 — published session 2026-08-15 15:19:15 +05:30
KRATOS bccd4d6875 session local-de: claude-opus-5 — published session 2026-08-15 15:19:08 +05:30
KRATOS 79003e9de2 session local-de: claude-opus-5 — published session 2026-08-15 15:19:04 +05:30
KRATOS 82bd37476d session local-de: claude-opus-5 — published session 2026-08-15 15:18:56 +05:30
KRATOS 2b062b8986 session local-de: claude-opus-5 — published session 2026-08-15 15:18:49 +05:30
KRATOS 3de1ca66a3 session local-de: claude-opus-5 — published session 2026-08-15 15:18:41 +05:30
KRATOS e6e25e97e0 session local-de: claude-opus-5 — published session 2026-08-15 15:18:33 +05:30
KRATOS 086d77ff62 session local-de: claude-opus-5 — published session 2026-08-15 15:18:25 +05:30
KRATOS cfabbdba1e session local-de: claude-opus-5 — published session 2026-08-15 15:18:00 +05:30
KRATOS 2a4c92ce1d session local-de: claude-opus-5 — published session 2026-08-15 15:17:48 +05:30
KRATOS b7b5f5b4fa session local-7a: claude-opus-5 — published session 2026-08-15 00:24:13 +05:30
KRATOS 69bd85b376 session local-7a: claude-opus-5 — published session 2026-08-14 21:32:44 +05:30
KRATOS f869315e82 session local-7a: claude-opus-5 — published session 2026-08-14 21:20:11 +05:30
KRATOS cb71ad1c5d session local-7a: claude-opus-5 — published session 2026-08-14 21:20:07 +05:30
72 changed files with 61246 additions and 3981 deletions

No files matched your search

-38
View File
@@ -1,38 +0,0 @@
# dependencies (bun install)
node_modules
# output
out
dist
*.tgz
# code coverage
coverage
*.lcov
# logs
logs
_.log
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# caches
.eslintcache
.cache
*.tsbuildinfo
# IntelliJ based IDEs
.idea
# Finder (MacOS) folder config
.DS_Store
.cursor
zero
-111
View File
@@ -1,111 +0,0 @@
---
description: Use Bun instead of Node.js, npm, pnpm, or vite.
globs: "*.ts, *.tsx, *.html, *.css, *.js, *.jsx, package.json"
alwaysApply: false
---
Default to using Bun instead of Node.js.
- Use `bun <file>` instead of `node <file>` or `ts-node <file>`
- Use `bun test` instead of `jest` or `vitest`
- Use `bun build <file.html|file.ts|file.css>` instead of `webpack` or `esbuild`
- Use `bun install` instead of `npm install` or `yarn install` or `pnpm install`
- Use `bun run <script>` instead of `npm run <script>` or `yarn run <script>` or `pnpm run <script>`
- Use `bunx <package> <command>` instead of `npx <package> <command>`
- Bun automatically loads .env, so don't use dotenv.
## APIs
- `Bun.serve()` supports WebSockets, HTTPS, and routes. Don't use `express`.
- `bun:sqlite` for SQLite. Don't use `better-sqlite3`.
- `Bun.redis` for Redis. Don't use `ioredis`.
- `Bun.sql` for Postgres. Don't use `pg` or `postgres.js`.
- `WebSocket` is built-in. Don't use `ws`.
- Prefer `Bun.file` over `node:fs`'s readFile/writeFile
- Bun.$`ls` instead of execa.
## Testing
Use `bun test` to run tests.
```ts#index.test.ts
import { test, expect } from "bun:test";
test("hello world", () => {
expect(1).toBe(1);
});
```
## Frontend
Use HTML imports with `Bun.serve()`. Don't use `vite`. HTML imports fully support React, CSS, Tailwind.
Server:
```ts#index.ts
import index from "./index.html"
Bun.serve({
routes: {
"/": index,
"/api/users/:id": {
GET: (req) => {
return new Response(JSON.stringify({ id: req.params.id }));
},
},
},
// optional websocket support
websocket: {
open: (ws) => {
ws.send("Hello, world!");
},
message: (ws, message) => {
ws.send(message);
},
close: (ws) => {
// handle close
}
},
development: {
hmr: true,
console: true,
}
})
```
HTML files can import .tsx, .jsx or .js files directly and Bun's bundler will transpile & bundle automatically. `<link>` tags can point to stylesheets and Bun's CSS bundler will bundle.
```html#index.html
<html>
<body>
<h1>Hello, world!</h1>
<script type="module" src="./frontend.tsx"></script>
</body>
</html>
```
With the following `frontend.tsx`:
```tsx#frontend.tsx
import React from "react";
import { createRoot } from "react-dom/client";
// import .css files directly and it works
import './index.css';
const root = createRoot(document.body);
export default function Frontend() {
return <h1>Hello, world!</h1>;
}
root.render(<Frontend />);
```
Then, run index.ts
```sh
bun --hot ./index.ts
```
For more information, read the Bun API docs in `node_modules/bun-types/docs/**.mdx`.
-160
View File
@@ -1,160 +0,0 @@
# Contributing
Thanks for your interest in improving this project.
This project is currently in a controlled development phase. During this period,
most implementation work will be completed by the core team while the application
stabilizes. Community participation is still welcome, especially through bug
reports, feature requests, reproduction details, logs, and discussion on existing
issues.
Please read this policy before opening a pull request. Pull requests that do not
follow it may be closed without review.
## Current Contribution Policy
The project is not accepting unsolicited community pull requests by default while
the application is still reaching a stable baseline.
Community pull requests must be tied to an existing issue that has already been
reviewed and approved by the core team. Approval is shown by the `issue-approved`
label on the related issue.
If a pull request is opened before the related issue has the `issue-approved`
label, the pull request will be closed without review. Maintainers may ask the
author to continue the discussion on the issue instead.
Team members may open pull requests as part of the internal development cycle.
This does not indicate that the same issue is open for community implementation
unless the issue has been explicitly approved for outside contribution.
## How to Contribute
There are three primary ways to contribute:
1. Open a bug report with clear reproduction steps.
2. Open a feature request describing the problem, use case, and expected behavior.
3. Add useful context to an existing issue, such as logs, screenshots, examples,
affected versions, or reproduction cases.
Please search existing issues before opening a new one. Duplicate or low-signal
issues may be closed so maintainers can focus on actionable reports.
## Issue First Requirement
All community pull requests require an approved parent issue.
Before starting implementation work:
1. Open an issue using the appropriate issue template.
2. Describe the bug, feature request, or functional change clearly.
3. Wait for the core team to review the issue.
4. Do not open a pull request unless the issue has the `issue-approved` label.
An approved issue means only that the specific issue has been accepted for work.
It does not approve unrelated future work, future pull requests, or future issues
from the same author. Each issue is reviewed case by case.
## Pull Request Requirements
Before opening a community pull request, make sure all of the following are true:
- The pull request links to an existing issue.
- The linked issue already has the `issue-approved` label.
- The pull request is focused on only that approved issue.
- The pull request explains what changed and why.
- The pull request includes tests or verification notes when appropriate.
- UI changes include screenshots or video when possible.
- The pull request does not include fixes, features, refactors, formatting
changes, or other work outside the approved issue scope unless that expansion
was discussed with and approved by project team members.
Use `Fixes #123`, `Closes #123`, or another clear link in the pull request
description so maintainers can confirm the approved parent issue.
Pull requests that include unrelated changes, broad rewrites, formatting-only
changes, or unapproved feature work may be closed without review. Scope drift
will be rejected or called out for correction before a pull request can be
approved.
## Project Consistency
Pull requests should stay within the project's existing technical direction.
Changes that introduce a new implementation language, shift existing code away
from the core language used by the project, or add a new language/runtime to the
codebase are unlikely to be accepted unless they were discussed and approved by
maintainers before implementation.
The same applies to dependency changes. Pull requests that replace, rebase, or
significantly restructure the project's dependencies without prior discussion are
likely to be rejected. A preference-based explanation such as "this is better" is
not enough. Dependency changes need a clear project benefit, such as fixing a
specific bug, addressing a security issue, improving compatibility, or supporting
an approved feature.
## What We Prioritize
The core team will prioritize:
- Bug reports with clear reproduction steps.
- Functional defects that affect current users.
- Feature requests that align with the project roadmap.
- Requests that explain the user problem and expected behavior.
- Reports with logs, screenshots, test cases, or other concrete evidence.
Most approved implementation work will be completed by team members until the
project reaches a more stable status.
## What We Are Not Prioritizing
The project is not currently prioritizing:
- Unsolicited implementation pull requests.
- Pull requests without an approved parent issue.
- Typo-only changes.
- Formatting-only changes.
- Refactors without a clear functional benefit.
- Large rewrites that were not discussed with maintainers first.
- New features that have not been approved through an issue.
## Submitting a Bug Report
When filing a bug report, please include:
- The version, branch, or commit you are using.
- Your operating system and relevant environment details.
- Steps to reproduce the issue.
- Expected behavior.
- Actual behavior.
- Relevant logs, screenshots, or error messages.
- A minimal reproduction case when possible.
Clear bug reports are the most useful way to help the project during this phase.
## Submitting a Feature Request
When filing a feature request, please include:
- The problem you are trying to solve.
- The behavior or functionality you are requesting.
- Why the request belongs in this project.
- Any alternatives or workarounds you have considered.
- Examples, screenshots, or prior discussion if relevant.
Please do not begin implementation until the issue has been reviewed and marked
with the `issue-approved` label.
## Review Expectations
Maintainers may close issues or pull requests that do not follow these guidelines.
This is not a judgment on the contributor; it is part of keeping the development
cycle focused while the project stabilizes.
If an issue or pull request is closed, the best next step is usually to clarify
the issue, provide more evidence, or wait for the project to reach a more open
contribution phase.
## Getting Help
If you are unsure whether a change is appropriate, open an issue first and ask.
Please keep discussion focused, specific, and respectful of maintainer time.
+40 -10
View File
@@ -1,15 +1,45 @@
# zero
# Origin session history
To install dependencies:
This branch is written automatically by [Origin](https://getorigin.io). It is
**not part of your codebase** — nothing here is built, imported, or deployed. It
records which AI agent wrote the code on the other branches, and the prompt
behind each change.
```bash
bun install
```
You don't need Origin installed to read any of it. Plain `git` is enough.
To run:
## Layout
```bash
bun run index.ts
```
sessions/<session-id>/metadata.json model, cost, tokens, duration, commits
sessions/<session-id>/prompts.md the prompts, in order
sessions/<session-id>/changes.json per-prompt diffs and files touched
This project was created using `bun init` in bun v1.3.11. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
## Reading it
List the sessions:
git ls-tree --name-only origin/origin-sessions:sessions/
Read the prompts behind one:
git show origin/origin-sessions:sessions/<session-id>/prompts.md
## Per-commit attribution (one extra step)
Origin also writes a git note per commit, so `git log` can show you which agent
wrote it and why. Notes live in `refs/notes/origin`, and **`git clone` does not
fetch them** — that's a git default, not an Origin choice. Bring them down once:
git fetch origin refs/notes/origin:refs/notes/origin
Then, with plain git:
git log --show-notes=origin
To keep them arriving on every ordinary `git pull`, add the refspec:
git config --add remote.origin.fetch '+refs/notes/origin:refs/notes/origin-remote'
(That stages them into `refs/notes/origin-remote`. Origin merges the staging ref
into `refs/notes/origin` so your own local notes are never overwritten — mapping
the remote straight onto `refs/notes/origin` with a forced refspec would silently
destroy any note you hadn't pushed yet.)
-396
View File
@@ -1,396 +0,0 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"workspaces": {
"": {
"name": "zero",
"dependencies": {
"@opentui/core": "^0.2.16",
"@opentui/solid": "^0.2.16",
"commander": "^15.0.0",
"execa": "^9.6.1",
"openai": "^6.39.1",
"shiki": "^4.1.0",
"solid-js": "1.9.12",
"zod": "^4.4.3",
},
"devDependencies": {
"@types/bun": "latest",
},
"peerDependencies": {
"typescript": "^5",
},
},
},
"packages": {
"@ampproject/remapping": ["@ampproject/[email protected]", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="],
"@babel/code-frame": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="],
"@babel/compat-data": ["@babel/[email protected]", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="],
"@babel/core": ["@babel/[email protected]", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.6", "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ=="],
"@babel/generator": ["@babel/[email protected]", "", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ=="],
"@babel/helper-annotate-as-pure": ["@babel/[email protected]", "", { "dependencies": { "@babel/types": "^7.29.7" } }, "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw=="],
"@babel/helper-compilation-targets": ["@babel/[email protected]", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="],
"@babel/helper-create-class-features-plugin": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg=="],
"@babel/helper-globals": ["@babel/[email protected]", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="],
"@babel/helper-member-expression-to-functions": ["@babel/[email protected]", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg=="],
"@babel/helper-module-imports": ["@babel/[email protected]", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="],
"@babel/helper-module-transforms": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="],
"@babel/helper-optimise-call-expression": ["@babel/[email protected]", "", { "dependencies": { "@babel/types": "^7.29.7" } }, "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong=="],
"@babel/helper-plugin-utils": ["@babel/[email protected]", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="],
"@babel/helper-replace-supers": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ=="],
"@babel/helper-skip-transparent-expression-wrappers": ["@babel/[email protected]", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ=="],
"@babel/helper-string-parser": ["@babel/[email protected]", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="],
"@babel/helper-validator-identifier": ["@babel/[email protected]", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="],
"@babel/helper-validator-option": ["@babel/[email protected]", "", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="],
"@babel/helpers": ["@babel/[email protected]", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="],
"@babel/parser": ["@babel/[email protected]", "", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": "./bin/babel-parser.js" }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="],
"@babel/plugin-syntax-jsx": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A=="],
"@babel/plugin-syntax-typescript": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA=="],
"@babel/plugin-transform-modules-commonjs": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ=="],
"@babel/plugin-transform-typescript": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/plugin-syntax-typescript": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw=="],
"@babel/preset-typescript": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ=="],
"@babel/template": ["@babel/[email protected]", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="],
"@babel/traverse": ["@babel/[email protected]", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.7", "debug": "^4.3.1" } }, "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw=="],
"@babel/types": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="],
"@jridgewell/gen-mapping": ["@jridgewell/[email protected]", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
"@jridgewell/resolve-uri": ["@jridgewell/[email protected]", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
"@jridgewell/sourcemap-codec": ["@jridgewell/[email protected]", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
"@jridgewell/trace-mapping": ["@jridgewell/[email protected]", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
"@opentui/core": ["@opentui/[email protected]", "", { "dependencies": { "bun-ffi-structs": "0.2.2", "diff": "9.0.0", "marked": "17.0.1", "string-width": "7.2.0", "strip-ansi": "7.1.2", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@opentui/core-darwin-arm64": "0.2.16", "@opentui/core-darwin-x64": "0.2.16", "@opentui/core-linux-arm64": "0.2.16", "@opentui/core-linux-x64": "0.2.16", "@opentui/core-win32-arm64": "0.2.16", "@opentui/core-win32-x64": "0.2.16" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-4vWN15Zc3nsXJlOiHhhpqkBXD+wrNFKxCPtiTiillZYDRre+XsZogVTOOGUDwaBIC23OSxq7imezLmmtShVBEA=="],
"@opentui/core-darwin-arm64": ["@opentui/[email protected]", "", { "os": "darwin", "cpu": "arm64" }, "sha512-aFb2Yp+oqDu3h6VCWi7xpQ9yjpKSQcROzGGfHgqC6Nd3U+uiLfPJBkmiI87iK0opCggCFj5TkKI004050DmGjg=="],
"@opentui/core-darwin-x64": ["@opentui/[email protected]", "", { "os": "darwin", "cpu": "x64" }, "sha512-KimiHE0j7EsTB5P8doW0lr1eH5iZKLPKWQO+tmy1VcdYr/TzqhdHSvGuJXrZvfTFi9/rV57Eq0d7964Ri9O0vQ=="],
"@opentui/core-linux-arm64": ["@opentui/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-4fCwRCfTtUgS/5QcSEkSuBjgQymSOUWXgrXG2ycrf3Swi0QhKDA/pVjwLrUJ6eF+/8mQyQSEV72T8MxMO3M2qg=="],
"@opentui/core-linux-x64": ["@opentui/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-KgQBGjiucw4e7gM+R8qOzHWBFhjCY1IfCrGjW3Wzxv2hKUlL+mPhelaeJwnEqtNxMUdVTYjlwlu3IHxslXMJWQ=="],
"@opentui/core-win32-arm64": ["@opentui/[email protected]", "", { "os": "win32", "cpu": "arm64" }, "sha512-C6WqEI3VkXatXraMgSFXZjEXq0pzURGjRpFAJZYmuVDmpqE57o7E80Np2UkdZ6m5kpJDt4mRyu3krc/P825iNQ=="],
"@opentui/core-win32-x64": ["@opentui/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-kCX3CMTns6DMCFDNTDV4sjmBKyA/iEvzaVhl/jYi4JRIVT2zcy1lo+lhXT5mPgYHmJZu8Uye6j3Zi3c7Z2Me5A=="],
"@opentui/solid": ["@opentui/[email protected]", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.2.16", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.12", "entities": "7.0.1", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.12" } }, "sha512-2Q+v1PPpXXr+sALi9Aj6I5Jvo7xDfbmstYjRLL7lW3Hghh9i7ONQKpt/gyDDRbhSsYrhxKYTNenF9OxgoXkTHg=="],
"@sec-ant/readable-stream": ["@sec-ant/[email protected]", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="],
"@shikijs/core": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/primitive": "4.1.0", "@shikijs/types": "4.1.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-jLJtSJeuFffqX6/inRE1zqU5aFv2hrszvYgq3OjbAgFRZiWv7abKMDdQzYxuSDfmUPQozZvI/kuy6VMTvnvqTQ=="],
"@shikijs/engine-javascript": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/types": "4.1.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-YquhawCUgaBfhsS72e2Y/dI59gCBNPHu3fEO/tvLaXrTssxZrY5ddjtNLTwndrMgPo8b3IscE+xoICDzpTmlFQ=="],
"@shikijs/engine-oniguruma": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/types": "4.1.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-axLpjVs45YBvvINa+dJF+NPW+KtFkNXsFr4SDw2BMj9GdeMnGxVB9PQb2xXlJYovslt/nz6giedAyOANkfc7hg=="],
"@shikijs/langs": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/types": "4.1.0" } }, "sha512-nwOMruEkbgdZfQ/b8CgpNBVOpvG1k0N5tbmgiFeqsan401+x3ILqlzZJowSla4Agmq4hG2Uf2wh5jLTEhR8VSg=="],
"@shikijs/primitive": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/types": "4.1.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-zx2/2Uwj2q9X3KSyYREEhXO23xBw5WUhP4orK2lE4r+t9JGITmEe0JH+wPmJhqHpOT2bRRs6lAL945+LDvOAGw=="],
"@shikijs/themes": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/types": "4.1.0" } }, "sha512-emCcTnUM7yO2wltYbaxm+yLvcCI4+h8XBKc4KmJ7EZUXoSGjcCHifkI//R4OFit9ewpg7H2/9tjOuXrT2v/Knw=="],
"@shikijs/types": ["@shikijs/[email protected]", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3EQWX54fMpniOrDblzAhiwiJwpiTMW6+B9DWyUd9ska483tbayFYuw47UxwuPknI31bKnySfVQ/QW+jFL4rFdA=="],
"@shikijs/vscode-textmate": ["@shikijs/[email protected]", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
"@sindresorhus/merge-streams": ["@sindresorhus/[email protected]", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="],
"@types/bun": ["@types/[email protected]", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
"@types/hast": ["@types/[email protected]", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
"@types/mdast": ["@types/[email protected]", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
"@types/node": ["@types/[email protected]", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="],
"@types/unist": ["@types/[email protected]", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
"@ungap/structured-clone": ["@ungap/[email protected]", "", {}, "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="],
"ansi-regex": ["[email protected]", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
"babel-plugin-jsx-dom-expressions": ["[email protected]", "", { "dependencies": { "@babel/helper-module-imports": "7.18.6", "@babel/plugin-syntax-jsx": "^7.18.6", "@babel/types": "^7.20.7", "html-entities": "2.3.3", "parse5": "^7.1.2" }, "peerDependencies": { "@babel/core": "^7.20.12" } }, "sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ=="],
"babel-plugin-module-resolver": ["[email protected]", "", { "dependencies": { "find-babel-config": "^2.1.1", "glob": "^9.3.3", "pkg-up": "^3.1.0", "reselect": "^4.1.7", "resolve": "^1.22.8" } }, "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg=="],
"babel-preset-solid": ["[email protected]", "", { "dependencies": { "babel-plugin-jsx-dom-expressions": "^0.40.6" }, "peerDependencies": { "@babel/core": "^7.0.0", "solid-js": "^1.9.12" }, "optionalPeers": ["solid-js"] }, "sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg=="],
"balanced-match": ["[email protected]", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
"baseline-browser-mapping": ["[email protected]", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="],
"brace-expansion": ["[email protected]", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="],
"browserslist": ["[email protected]", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="],
"bun-ffi-structs": ["[email protected]", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-N/ZWtyN0piZlrXQT7TO0V+q952orYqkfhXRXM1Hcbb+R3QSiBH4vLnib187Mrs1H7pWIYECAmPeapGYDOMCl+w=="],
"bun-types": ["[email protected]", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
"caniuse-lite": ["[email protected]", "", {}, "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA=="],
"ccount": ["[email protected]", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="],
"character-entities-html4": ["[email protected]", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="],
"character-entities-legacy": ["[email protected]", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="],
"comma-separated-tokens": ["[email protected]", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="],
"commander": ["[email protected]", "", {}, "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg=="],
"convert-source-map": ["[email protected]", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="],
"cross-spawn": ["[email protected]", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
"csstype": ["[email protected]", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
"debug": ["[email protected]", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
"dequal": ["[email protected]", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="],
"devlop": ["[email protected]", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="],
"diff": ["[email protected]", "", {}, "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw=="],
"electron-to-chromium": ["[email protected]", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="],
"emoji-regex": ["[email protected]", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
"entities": ["[email protected]", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="],
"es-errors": ["[email protected]", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
"escalade": ["[email protected]", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
"execa": ["[email protected]", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="],
"figures": ["[email protected]", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="],
"find-babel-config": ["[email protected]", "", { "dependencies": { "json5": "^2.2.3" } }, "sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg=="],
"find-up": ["[email protected]", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="],
"fs.realpath": ["[email protected]", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="],
"function-bind": ["[email protected]", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
"gensync": ["[email protected]", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="],
"get-east-asian-width": ["[email protected]", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="],
"get-stream": ["[email protected]", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="],
"glob": ["[email protected]", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="],
"hasown": ["[email protected]", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="],
"hast-util-to-html": ["[email protected]", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="],
"hast-util-whitespace": ["[email protected]", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="],
"html-entities": ["[email protected]", "", {}, "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="],
"html-void-elements": ["[email protected]", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="],
"human-signals": ["[email protected]", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="],
"is-core-module": ["[email protected]", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="],
"is-plain-obj": ["[email protected]", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="],
"is-stream": ["[email protected]", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="],
"is-unicode-supported": ["[email protected]", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="],
"isexe": ["[email protected]", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
"js-tokens": ["[email protected]", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
"jsesc": ["[email protected]", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="],
"json5": ["[email protected]", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
"locate-path": ["[email protected]", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="],
"lru-cache": ["[email protected]", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
"marked": ["[email protected]", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg=="],
"mdast-util-to-hast": ["[email protected]", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="],
"micromark-util-character": ["[email protected]", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="],
"micromark-util-encode": ["[email protected]", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="],
"micromark-util-sanitize-uri": ["[email protected]", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="],
"micromark-util-symbol": ["[email protected]", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="],
"micromark-util-types": ["[email protected]", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="],
"minimatch": ["[email protected]", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg=="],
"minipass": ["[email protected]", "", {}, "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="],
"ms": ["[email protected]", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
"node-releases": ["[email protected]", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="],
"npm-run-path": ["[email protected]", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="],
"oniguruma-parser": ["[email protected]", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="],
"oniguruma-to-es": ["[email protected]", "", { "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA=="],
"openai": ["[email protected]", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-z3dO9fEWOXBzlXynVb/xZ/tujzUjFWQWn3C0n0mw6Vo0zJTbEkaN4b2cLWjhJ6haJQx8LlREoafHRl+Gu/Hl+A=="],
"p-limit": ["[email protected]", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="],
"p-locate": ["[email protected]", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="],
"p-try": ["[email protected]", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="],
"parse-ms": ["[email protected]", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="],
"parse5": ["[email protected]", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="],
"path-exists": ["[email protected]", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="],
"path-key": ["[email protected]", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
"path-parse": ["[email protected]", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
"path-scurry": ["[email protected]", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
"picocolors": ["[email protected]", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"pkg-up": ["[email protected]", "", { "dependencies": { "find-up": "^3.0.0" } }, "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA=="],
"pretty-ms": ["[email protected]", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="],
"property-information": ["[email protected]", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="],
"regex": ["[email protected]", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="],
"regex-recursion": ["[email protected]", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="],
"regex-utilities": ["[email protected]", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="],
"reselect": ["[email protected]", "", {}, "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ=="],
"resolve": ["[email protected]", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="],
"s-js": ["[email protected]", "", {}, "sha512-RtpOm+cM6O0sHg6IA70wH+UC3FZcND+rccBZpBAHzlUgNO2Bm5BN+FnM8+OBxzXdwpKWFwX11JGF0MFRkhSoIQ=="],
"semver": ["[email protected]", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
"seroval": ["[email protected]", "", {}, "sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw=="],
"seroval-plugins": ["[email protected]", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw=="],
"shebang-command": ["[email protected]", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
"shebang-regex": ["[email protected]", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
"shiki": ["[email protected]", "", { "dependencies": { "@shikijs/core": "4.1.0", "@shikijs/engine-javascript": "4.1.0", "@shikijs/engine-oniguruma": "4.1.0", "@shikijs/langs": "4.1.0", "@shikijs/themes": "4.1.0", "@shikijs/types": "4.1.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-l/ABZPUR5v70jI10EzqfMS/I96vjSGv2y0ihUV+WYFzv0EfvW4s54m0Lg8wCrrL+2IkwBzFTuxkZjPf8b2NX9Q=="],
"signal-exit": ["[email protected]", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
"solid-js": ["[email protected]", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.5.0", "seroval-plugins": "~1.5.0" } }, "sha512-QzKaSJq2/iDrWR1As6MHZQ8fQkdOBf8GReYb7L5iKwMGceg7HxDcaOHk0at66tNgn9U2U7dXo8ZZpLIAmGMzgw=="],
"space-separated-tokens": ["[email protected]", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="],
"string-width": ["[email protected]", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
"stringify-entities": ["[email protected]", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="],
"strip-ansi": ["[email protected]", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="],
"strip-final-newline": ["[email protected]", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="],
"supports-preserve-symlinks-flag": ["[email protected]", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
"trim-lines": ["[email protected]", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="],
"typescript": ["[email protected]", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
"undici-types": ["[email protected]", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="],
"unicorn-magic": ["[email protected]", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="],
"unist-util-is": ["[email protected]", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="],
"unist-util-position": ["[email protected]", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="],
"unist-util-stringify-position": ["[email protected]", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="],
"unist-util-visit": ["[email protected]", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="],
"unist-util-visit-parents": ["[email protected]", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="],
"update-browserslist-db": ["[email protected]", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="],
"vfile": ["[email protected]", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="],
"vfile-message": ["[email protected]", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="],
"web-tree-sitter": ["[email protected]", "", { "peerDependencies": { "@types/emscripten": "^1.40.0" }, "optionalPeers": ["@types/emscripten"] }, "sha512-Y09sF44/13XvgVKgO2cNDw5rGk6s26MgoZPXLESvMXeefBf7i6/73eFurre0IsTW6E14Y0ArIzhUMmjoc7xyzA=="],
"which": ["[email protected]", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
"ws": ["[email protected]", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="],
"yallist": ["[email protected]", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
"yoctocolors": ["[email protected]", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="],
"yoga-layout": ["[email protected]", "", {}, "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ=="],
"zod": ["[email protected]", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
"zwitch": ["[email protected]", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="],
"babel-plugin-jsx-dom-expressions/@babel/helper-module-imports": ["@babel/[email protected]", "", { "dependencies": { "@babel/types": "^7.18.6" } }, "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA=="],
"npm-run-path/path-key": ["[email protected]", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="],
"parse5/entities": ["[email protected]", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
"path-scurry/lru-cache": ["[email protected]", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
"path-scurry/minipass": ["[email protected]", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="],
"string-width/strip-ansi": ["[email protected]", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
}
}
-1
View File
@@ -1 +0,0 @@
console.log("Hello via Bun!");
-30
View File
@@ -1,30 +0,0 @@
{
"name": "zero",
"version": "0.1.0",
"module": "src/index.ts",
"type": "module",
"bin": {
"zero": "src/index.ts"
},
"scripts": {
"dev": "bun --preload @opentui/solid/preload src/index.ts",
"test": "bun test ./tests --timeout 15000",
"build": "bun run scripts/build.ts"
},
"devDependencies": {
"@types/bun": "latest"
},
"peerDependencies": {
"typescript": "^5"
},
"dependencies": {
"@opentui/core": "^0.2.16",
"@opentui/solid": "^0.2.16",
"commander": "^15.0.0",
"execa": "^9.6.1",
"openai": "^6.39.1",
"shiki": "^4.1.0",
"solid-js": "1.9.12",
"zod": "^4.4.3"
}
}
-16
View File
@@ -1,16 +0,0 @@
#!/usr/bin/env bun
import solidPlugin from '@opentui/solid/bun-plugin';
const result = await Bun.build({
entrypoints: ['./src/index.ts'],
target: 'bun',
plugins: [solidPlugin],
outdir: './dist',
});
if (!result.success) {
for (const log of result.logs) {
console.error(log);
}
process.exit(1);
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,38 @@
{
"version": 1,
"sessionId": "local-0484ba5e-0daa-4d59-8baa-aca99415eae4",
"model": "claude-opus-5",
"startedAt": "2026-08-16T03:37:58.452Z",
"endedAt": "2026-08-16T05:25:20.992Z",
"durationMs": 6442527,
"status": "running",
"tokens": {
"total": 76154,
"input": 198,
"output": 75956
},
"cost": {
"usd": 57.9477
},
"toolCalls": 94,
"lines": {
"added": 69,
"removed": 1
},
"filesChanged": [
"/Users/kratos/dev/fx912/internal/agent/guardrails.go",
"/Users/kratos/dev/fx911/internal/sandbox/scope.go",
"internal/sandbox/scope.go",
"internal/sandbox/scope_temp_refcount_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "87a722cbc602589dadd38ed7067071411edf2ca4",
"commitShas": [
"87a722cbc602589dadd38ed7067071411edf2ca4"
]
},
"summary": "Mutation-verified, no race. Let me commit and push:",
"originUrl": "https://getorigin.io/sessions/local-0484ba5e-0daa-4d59-8baa-aca99415eae4"
}
@@ -0,0 +1,181 @@
# Session local-04
**Model:** claude-opus-5
**Started:** 2026-08-16T03:37:58.452Z
**Duration:** 1h 47m
**Cost:** $57.9477
**Tokens:** 76,154
**Status:** running
---
## Prompt 1
git pull and update the lates main
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
829 la ena issue ?
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
sari split panniralam apo
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
ask review to vasanth and anandh
---
## Prompt 5
<local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/max_posture.go`
- `internal/agent/types.go`
- `internal/agent/loop.go`
- `internal/cli/exec.go`
- `internal/tui/view.go`
- `internal/execprofile/max_test.go`
- `internal/execprofile/profile_test.go`
- `internal/agent/max_posture_test.go`
- `internal/cli/exec_max_profile_test.go`
- `internal/tui/max_profile_test.go`
- `internal/config/profiles_disable_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutate.sh`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_syslead.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_staticsys.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutrun.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/probe_arms.py`
---
## Prompt 6
<command-message>effort</command-message>
<command-args></command-args>
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/zeromaxing.go`
- `internal/execprofile/zeromaxing_test.go`
- `internal/cli/exec_zeromaxing_test.go`
- `internal/tui/zeromaxing_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutzm.py`
---
## Prompt 7
<local-command-stdout>Set effort level to max (this session only): Maximum capability with deepest reasoning. May use excessive tokens resulting in long response times or overthinking. Use sparingly for the hardest tasks.</local-command-stdout>
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_task1.py`
---
## Prompt 8
<local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>
**Files changed:**
- `internal/agent/posture_off_identity_test.go`
- `internal/specialist/plan_tool.go`
---
## Prompt 9
<command-message>model</command-message>
<command-args></command-args>
---
## Prompt 10
<local-command-stdout>Set model to Opus 5 (1M context) (default) and saved as your default for new sessions</local-command-stdout>
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut3.py`
---
## Prompt 11
use review skill and review that open prs which is we opened now
---
## Prompt 12
Base directory for this skill: /Users/kratos/.claude/skills/pr-review
# PR Change Verification
Treat review as change investigation, not diff commentary.
```text
understand -> map -> hypothesize -> attack -> observe -> disprove -> verify -> report
```
Find defects outside the visible diff. Prefer a few defensible root causes over many plausible comments. State exactly what was and was not verified.
## Enforce hard boundaries
- Default to read-only review. Do not implement fixes unless the user asks.
- Never merge, close, rebase, force-push, commit, or modify the reviewed branch.
- Never post comments, reviews, labels, or statuses to a forge unless the user explicitly asks for publication in the current request.
- Preserve existing user changes and the worktree. Inspect `git status` before running anything that may write.
- Create generated tests and instrumentation only in a disposable worktree or scratch area. Never present them as author changes.
- Do not change repository conf...
**Files changed:**
- `internal/specialist/plan.go`
- `internal/specialist/plan_exec.go`
- `internal/specialist/plan_test.go`
- `internal/specialist/plan_exec_test.go`
---
## Prompt 13
fix req changes thats all nour prs right ? no need to post reviews fix and commit
**Files changed:**
- `max-verify/stub/main.go`
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,42 @@
{
"version": 1,
"sessionId": "local-13d54317-fe98-4a11-b153-5ce9e41a70c8",
"model": "claude-opus-5",
"startedAt": "2026-08-21T03:04:21.620Z",
"endedAt": "2026-08-21T07:57:32.872Z",
"durationMs": 17591239,
"status": "running",
"tokens": {
"total": 112505,
"input": 256,
"output": 112249
},
"cost": {
"usd": 28.0416
},
"toolCalls": 120,
"lines": {
"added": 284,
"removed": 41
},
"filesChanged": [
"internal/agentsessions/codex.go",
"internal/agentsessions/fixture_corpus_test.go",
"internal/agentsessions/jsonl.go",
"internal/agentsessions/jsonl_test.go",
"internal/agentsessions/translate.go",
"internal/cli/sessions_import.go",
"internal/tui/session.go",
"internal/tui/session_picker_tabs_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "fea5a5656ed734b4f4fb4d7f0e76ece9d0a8bef1",
"commitShas": [
"fea5a5656ed734b4f4fb4d7f0e76ece9d0a8bef1"
]
},
"summary": "All four mutations caught, and `cli` is only the two known pre-existing doctor failures. Full gauntlet and push:",
"originUrl": "https://getorigin.io/sessions/local-13d54317-fe98-4a11-b153-5ce9e41a70c8"
}
@@ -0,0 +1,85 @@
# Session local-13
**Model:** claude-opus-5
**Started:** 2026-08-21T03:04:21.620Z
**Duration:** 4h 53m
**Cost:** $28.0416
**Tokens:** 1,12,505
**Status:** running
---
## Prompt 1
fix req changes 878
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
check status now
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
fixed all change re ?
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
pull the latest main and rebase these prs which is not approved
---
## Prompt 5
878 ku review vanthuruka ?
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/max_posture.go`
- `internal/agent/types.go`
- `internal/agent/loop.go`
- `internal/cli/exec.go`
- `internal/tui/view.go`
- `internal/execprofile/max_test.go`
- `internal/execprofile/profile_test.go`
- `internal/agent/max_posture_test.go`
- `internal/cli/exec_max_profile_test.go`
- `internal/tui/max_profile_test.go`
- `internal/config/profiles_disable_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutate.sh`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_syslead.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_staticsys.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutrun.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/probe_arms.py`
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,36 @@
{
"version": 1,
"sessionId": "local-76c8d781-4473-4b7d-b2a0-fda8a66e26ab",
"model": "claude-opus-5",
"startedAt": "2026-08-19T12:21:18.006Z",
"endedAt": "2026-08-19T13:10:30.023Z",
"durationMs": 2952003,
"status": "running",
"tokens": {
"total": 34463,
"input": 62,
"output": 34401
},
"cost": {
"usd": 18.3912
},
"toolCalls": 26,
"lines": {
"added": 71,
"removed": 10
},
"filesChanged": [
"internal/acp/agent.go",
"internal/acp/agent_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "0777f1261ff192c31eec28b52107e3ee83f05897",
"commitShas": [
"0777f1261ff192c31eec28b52107e3ee83f05897"
]
},
"summary": "All three correct — deleted workspace omitted, relative resolved to absolute, live one listed. Adding the regression:",
"originUrl": "https://getorigin.io/sessions/local-76c8d781-4473-4b7d-b2a0-fda8a66e26ab"
}
@@ -0,0 +1,85 @@
# Session local-76
**Model:** claude-opus-5
**Started:** 2026-08-19T12:21:18.006Z
**Duration:** 49m 12s
**Cost:** $18.3912
**Tokens:** 34,463
**Status:** running
---
## Prompt 1
in pr 908 code rabbit change req fixed ?
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
Leave it. Reply on the PR that the behaviour is verified working, note the coverage gap, and preserve the approvals. #908 stays merge-ready.
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
916 rereview
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
yes port vedict also
---
## Prompt 5
check reviews came ?
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/max_posture.go`
- `internal/agent/types.go`
- `internal/agent/loop.go`
- `internal/cli/exec.go`
- `internal/tui/view.go`
- `internal/execprofile/max_test.go`
- `internal/execprofile/profile_test.go`
- `internal/agent/max_posture_test.go`
- `internal/cli/exec_max_profile_test.go`
- `internal/tui/max_profile_test.go`
- `internal/config/profiles_disable_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutate.sh`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_syslead.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_staticsys.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutrun.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/probe_arms.py`
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,37 @@
{
"version": 1,
"sessionId": "local-79d7a0bc-5717-480b-b23f-a3f0831e75f5",
"model": "claude-opus-5",
"startedAt": "2026-08-17T18:14:28.203Z",
"endedAt": "2026-08-17T19:07:15.045Z",
"durationMs": 3166827,
"status": "running",
"tokens": {
"total": 75749,
"input": 170,
"output": 75579
},
"cost": {
"usd": 32.3155
},
"toolCalls": 81,
"lines": {
"added": 200,
"removed": 2
},
"filesChanged": [
"/Users/kratos/.claude/projects/-Users-kratos-dev-zero/memory/pr-review-loop.md",
"internal/acp/agent.go",
"internal/acp/agent_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "ca7074e4e50a4bc23b8d51f8f0ffe2e946beb5eb",
"commitShas": [
"ca7074e4e50a4bc23b8d51f8f0ffe2e946beb5eb"
]
},
"summary": "All three symptoms reproduce exactly as he described — including list returning 0, the \"invisible\" failure. Now his third finding, the wire contract:",
"originUrl": "https://getorigin.io/sessions/local-79d7a0bc-5717-480b-b23f-a3f0831e75f5"
}
@@ -0,0 +1,106 @@
# Session local-79
**Model:** claude-opus-5
**Started:** 2026-08-17T18:14:28.203Z
**Duration:** 52m 46s
**Cost:** $32.3155
**Tokens:** 75,749
**Status:** running
---
## Prompt 1
if any change req then fix and ask rereview including coderabbit
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
829 la review ketkatha
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
review pr 916
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
Base directory for this skill: /Users/kratos/.claude/skills/zero
# Working in Gitlawb/zero
Zero is a Go terminal coding agent: ~86 packages under `internal/`, ~166k non-test
lines, ~155k test lines. Almost nothing is greenfield. The two most common ways to
waste effort here are building something that already exists, and opening a PR
that gets closed on scope rather than on merit.
`AGENTS.md` and `CONTRIBUTING.md` in the repo root are authoritative. This skill is
the operational layer on top of them; where they disagree, they win.
## Pick your mode
| Task | Read |
|---|---|
| Fixing a bug, adding a feature, any code change | This file, then `references/packages.md` |
| Reviewing a PR, diff, patch, or branch | This file, then **`references/pr-review.md`** |
| Auditing, bug hunting, security sweep | This file, then **`references/audit.md`** |
| Working on sandbox, permissions, processes, credentials, config, provider I/O | Also **`references/invariants.md`** |
Sections 1–6 below ap...
---
## Prompt 5
fix req changes of coderabbit ai and also add the pr 914 also in the list
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/max_posture.go`
- `internal/agent/types.go`
- `internal/agent/loop.go`
- `internal/cli/exec.go`
- `internal/tui/view.go`
- `internal/execprofile/max_test.go`
- `internal/execprofile/profile_test.go`
- `internal/agent/max_posture_test.go`
- `internal/cli/exec_max_profile_test.go`
- `internal/tui/max_profile_test.go`
- `internal/config/profiles_disable_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutate.sh`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_syslead.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_staticsys.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutrun.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/probe_arms.py`
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,46 @@
{
"version": 1,
"sessionId": "local-7a41bc1c-43aa-4d25-92da-cdb6d00893ad",
"model": "claude-opus-5",
"startedAt": "2026-08-14T15:48:46.047Z",
"endedAt": "2026-08-14T18:54:13.673Z",
"durationMs": 11127611,
"status": "running",
"tokens": {
"total": 51657,
"input": 194,
"output": 51463
},
"cost": {
"usd": 33.4265
},
"toolCalls": 96,
"lines": {
"added": 1470,
"removed": 0
},
"filesChanged": [
"m/internal/memory/memory.go",
"m/internal/tools/memory.go",
"m/internal/memory/escape_test.go",
"m/internal/memory/memory_test.go",
"r/internal/memory/memory.go",
"r/internal/tools/memory.go",
"r/internal/memory/memory_test.go",
"internal/memory/escape_test.go",
"internal/memory/memory.go",
"internal/memory/memory_test.go",
"internal/tools/memory.go",
"internal/tools/memory_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "70201710fae00e69282d48fa886c2fa6b852d73e",
"commitShas": [
"70201710fae00e69282d48fa886c2fa6b852d73e"
]
},
"summary": "Let me tidy the stray blank lines a linter left, then run the full gauntlet:",
"originUrl": "https://getorigin.io/sessions/local-7a41bc1c-43aa-4d25-92da-cdb6d00893ad"
}
@@ -0,0 +1,28 @@
# Session local-7a
**Model:** claude-opus-5
**Started:** 2026-08-14T15:48:46.047Z
**Duration:** 3h 5m
**Cost:** $33.4265
**Tokens:** 51,657
**Status:** running
---
## Prompt 1
check req changes for 897
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,38 @@
{
"version": 1,
"sessionId": "local-8cd239ca-4faa-46df-a895-aba4d6a6383b",
"model": "claude-opus-5",
"startedAt": "2026-08-20T11:38:03.907Z",
"endedAt": "2026-08-20T18:50:11.250Z",
"durationMs": 25927328,
"status": "running",
"tokens": {
"total": 155868,
"input": 372,
"output": 155496
},
"cost": {
"usd": 57.8077
},
"toolCalls": 172,
"lines": {
"added": 109,
"removed": 20
},
"filesChanged": [
"/Users/kratos/.claude/projects/-Users-kratos-dev-zero/memory/zero-pr-push-remotes.md",
"internal/sandbox/scope_extra_read_test.go",
"internal/sandbox/scope_temp_refcount_test.go",
"internal/sandbox/scope_temporary_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "fbf05668847fe50b93792efb90f5ad1ee4a5b69d",
"commitShas": [
"fbf05668847fe50b93792efb90f5ad1ee4a5b69d"
]
},
"summary": "Local is behind by exactly one commit — the empty \"re-request a review\" commit that we now know never triggered anything. Verifying its tree is identical before moving onto it:",
"originUrl": "https://getorigin.io/sessions/local-8cd239ca-4faa-46df-a895-aba4d6a6383b"
}
@@ -0,0 +1,183 @@
# Session local-8c
**Model:** claude-opus-5
**Started:** 2026-08-20T11:38:03.907Z
**Duration:** 7h 12m
**Cost:** $57.8077
**Tokens:** 1,55,868
**Status:** running
---
## Prompt 1
inum how many pending for review ?
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
code rabbit kita approval vaangu all prs ku ...continue ah follow panniko itha
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
ialready coderabbit reviewed some prs right ?
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
ipo ena pannalam coderabbit review venama ? huiman reviews are enough ah ?
---
## Prompt 5
do empty commit and force a rereview
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/max_posture.go`
- `internal/agent/types.go`
- `internal/agent/loop.go`
- `internal/cli/exec.go`
- `internal/tui/view.go`
- `internal/execprofile/max_test.go`
- `internal/execprofile/profile_test.go`
- `internal/agent/max_posture_test.go`
- `internal/cli/exec_max_profile_test.go`
- `internal/tui/max_profile_test.go`
- `internal/config/profiles_disable_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutate.sh`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_syslead.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_staticsys.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutrun.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/probe_arms.py`
---
## Prompt 6
ipo ena pannalam ?
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/zeromaxing.go`
- `internal/execprofile/zeromaxing_test.go`
- `internal/cli/exec_zeromaxing_test.go`
- `internal/tui/zeromaxing_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutzm.py`
---
## Prompt 7
ask kevin for review and also if need rereview to other humans ask him like anandh and vasanth need 3 reviews right f0r merge
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_task1.py`
---
## Prompt 8
check now
**Files changed:**
- `internal/agent/posture_off_identity_test.go`
- `internal/specialist/plan_tool.go`
---
## Prompt 9
<local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>
---
## Prompt 10
<command-message>effort</command-message>
<command-args></command-args>
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut3.py`
---
## Prompt 11
<local-command-stdout>Set effort level to ultracode (this session only): xhigh + dynamic workflow orchestration</local-command-stdout>
---
## Prompt 12
fix anandh req changes in 912 and 914 make no mistake and ask rereview after fix
**Files changed:**
- `internal/specialist/plan.go`
- `internal/specialist/plan_exec.go`
- `internal/specialist/plan_test.go`
- `internal/specialist/plan_exec_test.go`
---
## Prompt 13
check reviews now and fix that also
**Files changed:**
- `max-verify/stub/main.go`
---
## Prompt 14
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. **Primary Request and Intent:**
The user (KRATOS / gnanam1990) is a collaborator on **Gitlawb/zero**, a ~86-package Go terminal coding agent. Across this session they issued short imperative requests, several in Tamil/Tanglish, managing a set of open PRs:
- **Tracked PR set**: #897 (memory store), #908 (edit preserves reads), #909 (measurements), #911 (sandbox temp refcount), #912 (incompletion detector), #914 (ACP session list/resume), plus **#829** (feat/zeromaxing, later excluded) and **#916** (anandh8x's PR, reviewed by me).
- **Repeated loop**: "check now" / "fix req changes" / "ask rereview" — poll for reviews, fix findings, re-request review.
- **"829 la review ketkatha"** (don't ask for review on #829) → removed reviewers, saved to memory.
- **"review pr 916"** then **"yes port vedict also"** → review anandh8x's P...
---
## Prompt 15
check now
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,39 @@
{
"version": 1,
"sessionId": "local-a43d25c7-1954-4785-a22d-f3e0738d0e0e",
"model": "claude-opus-5",
"startedAt": "2026-08-21T15:21:30.049Z",
"endedAt": "2026-08-21T15:53:45.321Z",
"durationMs": 1935257,
"status": "running",
"tokens": {
"total": 46117,
"input": 94,
"output": 46023
},
"cost": {
"usd": 13.6261
},
"toolCalls": 46,
"lines": {
"added": 192,
"removed": 44
},
"filesChanged": [
"internal/agentsessions/codex.go",
"internal/agentsessions/family1.go",
"internal/agentsessions/fixture_corpus_test.go",
"internal/agentsessions/jsonl.go",
"internal/agentsessions/jsonl_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "08aee3d581ad9ae665c7a9b2359fab7c86a295e4",
"commitShas": [
"08aee3d581ad9ae665c7a9b2359fab7c86a295e4"
]
},
"summary": "Both mutations caught now. Full gauntlet and push:",
"originUrl": "https://getorigin.io/sessions/local-a43d25c7-1954-4785-a22d-f3e0738d0e0e"
}
@@ -0,0 +1,28 @@
# Session local-a4
**Model:** claude-opus-5
**Started:** 2026-08-21T15:21:30.049Z
**Duration:** 32m 15s
**Cost:** $13.6261
**Tokens:** 46,117
**Status:** running
---
## Prompt 1
fixed ?
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,37 @@
{
"version": 1,
"sessionId": "local-abff1ceb-89a0-4779-bf13-17d2552ca680",
"model": "claude-opus-5",
"startedAt": "2026-08-16T06:58:11.927Z",
"endedAt": "2026-08-16T17:34:27.317Z",
"durationMs": 38175374,
"status": "running",
"tokens": {
"total": 311911,
"input": 692,
"output": 311219
},
"cost": {
"usd": 74.162
},
"toolCalls": 338,
"lines": {
"added": 37,
"removed": 12
},
"filesChanged": [
"/Users/kratos/dev/f909/internal/measurements/measurements.go",
"/Users/kratos/dev/f897/internal/memory/memory_test.go",
"internal/memory/escape_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "90fb0f7c22fec3bfa89500cd802c7fb963ca1255",
"commitShas": [
"90fb0f7c22fec3bfa89500cd802c7fb963ca1255"
]
},
"summary": "My **test** is wrong, not the production code. On Windows `linkDir` makes a *junction* — a directory — so `.gitignore` becomes a directory and the write fails with \"is a directory\" instead of `ErrNotPrivate`. It still fails closed; my assertion was just too strict about which error:",
"originUrl": "https://getorigin.io/sessions/local-abff1ceb-89a0-4779-bf13-17d2552ca680"
}
@@ -0,0 +1,163 @@
# Session local-ab
**Model:** claude-opus-5
**Started:** 2026-08-16T06:58:11.927Z
**Duration:** 10h 36m
**Cost:** $74.1620
**Tokens:** 3,11,911
**Status:** running
---
## Prompt 1
ask review
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. **Primary Request and Intent:**
The user (KRATOS / gnanam1990) is a collaborator on **Gitlawb/zero** (a ~86-package Go terminal coding agent). Across this session they issued a series of short imperative requests, several in Tamil/Tanglish:
- **Review PRs**: #808, #890, #902 (twice), #891 — post verdicts (approve or request changes).
- **Fix requested changes** on their own PRs: #878, #829, #897, #908, #909, #911, #912 — repeatedly ("fix req changes", "fix change requested", "fix req changes now").
- **#829 split**: fix reviewer-requested changes and conflicts; later "sari split panniralam apo" (OK let's split it then) → carve independent pieces out of #829.
- **"829 la proper ah fix pannu rebase pannurathuna pannu"** — do it as a proper *rebase*, not a merge (linear history required).
- **"git pull and update the lates m...
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
fix req changes
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
asked rereview ?
---
## Prompt 5
ask rereview
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/max_posture.go`
- `internal/agent/types.go`
- `internal/agent/loop.go`
- `internal/cli/exec.go`
- `internal/tui/view.go`
- `internal/execprofile/max_test.go`
- `internal/execprofile/profile_test.go`
- `internal/agent/max_posture_test.go`
- `internal/cli/exec_max_profile_test.go`
- `internal/tui/max_profile_test.go`
- `internal/config/profiles_disable_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutate.sh`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_syslead.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_staticsys.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutrun.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/probe_arms.py`
---
## Prompt 6
check now
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/zeromaxing.go`
- `internal/execprofile/zeromaxing_test.go`
- `internal/cli/exec_zeromaxing_test.go`
- `internal/tui/zeromaxing_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutzm.py`
---
## Prompt 7
(Re-invocation of /pr-review — the skill instructions were previously loaded; the arguments or dynamic output below are new.)
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_task1.py`
---
## Prompt 8
Base directory for this skill: /Users/kratos/.claude/skills/pr-review
# PR Change Verification
Treat review as change investigation, not diff commentary.
```text
understand -> map -> hypothesize -> attack -> observe -> disprove -> verify -> report
```
Find defects outside the visible diff. Prefer a few defensible root causes over many plausible comments. State exactly what was and was not verified.
## Enforce hard boundaries
- Default to read-only review. Do not implement fixes unless the user asks.
- Never merge, close, rebase, force-push, commit, or modify the reviewed branch.
- Never post comments, reviews, labels, or statuses to a forge unless the user explicitly asks for publication in the current request.
- Preserve existing user changes and the worktree. Inspect `git status` before running anything that may write.
- Create generated tests and instrumentation only in a disposable worktree or scratch area. Never present them as author changes.
- Do not change repository conf...
**Files changed:**
- `internal/agent/posture_off_identity_test.go`
- `internal/specialist/plan_tool.go`
---
## Prompt 9
after that commit and ask rereview
---
## Prompt 10
check now
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut3.py`
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,38 @@
{
"version": 1,
"sessionId": "local-ae96ee8a-310d-4a51-828c-b396548fe4e5",
"model": "claude-opus-5",
"startedAt": "2026-08-17T04:16:16.153Z",
"endedAt": "2026-08-17T06:33:07.915Z",
"durationMs": 8211749,
"status": "running",
"tokens": {
"total": 46492,
"input": 70,
"output": 46422
},
"cost": {
"usd": 10.8442
},
"toolCalls": 33,
"lines": {
"added": 166,
"removed": 7
},
"filesChanged": [
"internal/agent/guardrails.go",
"internal/agent/guardrails_false_admission_test.go",
"internal/memory/escape_test.go",
"internal/memory/memory.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "1b1ce2db07291ccb174109c531c32ef42bb0d36d",
"commitShas": [
"1b1ce2db07291ccb174109c531c32ef42bb0d36d"
]
},
"summary": "anandh8x adds the detail that makes it tractable: **the junction's target is outside the workspace**, so the component exists on disk while the handle reports it absent. That's a discriminator:",
"originUrl": "https://getorigin.io/sessions/local-ae96ee8a-310d-4a51-828c-b396548fe4e5"
}
@@ -0,0 +1,60 @@
# Session local-ae
**Model:** claude-opus-5
**Started:** 2026-08-17T04:16:16.153Z
**Duration:** 2h 16m
**Cost:** $10.8442
**Tokens:** 46,492
**Status:** running
---
## Prompt 1
innum yar review pannanum ?
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
check now
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
[Request interrupted by user for tool use]
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
check now
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,36 @@
{
"version": 1,
"sessionId": "local-c962d762-0e68-4532-a652-e063658c9fb0",
"model": "claude-opus-5",
"startedAt": "2026-08-24T04:40:41.532Z",
"endedAt": "2026-08-24T15:23:18.652Z",
"durationMs": 38557106,
"status": "running",
"tokens": {
"total": 269743,
"input": 540,
"output": 269203
},
"cost": {
"usd": 118.77
},
"toolCalls": 253,
"lines": {
"added": 477,
"removed": 210
},
"filesChanged": [
"internal/measurements/measurements.go",
"internal/measurements/measurements_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "358555135ee1ba85699ef560f646b3656ba65e65",
"commitShas": [
"358555135ee1ba85699ef560f646b3656ba65e65"
]
},
"summary": "All three mutations caught. Committing with an honest account of the two I couldn't close:",
"originUrl": "https://getorigin.io/sessions/local-c962d762-0e68-4532-a652-e063658c9fb0"
}
@@ -0,0 +1,255 @@
# Session local-c9
**Model:** claude-opus-5
**Started:** 2026-08-24T04:40:41.532Z
**Duration:** 10h 42m
**Cost:** $118.7700
**Tokens:** 2,69,743
**Status:** running
---
## Prompt 1
check pr status now
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
<local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
<command-message>effort</command-message>
<command-args></command-args>
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
<local-command-stdout>Set effort level to ultracode (this session only): xhigh + dynamic workflow orchestration</local-command-stdout>
---
## Prompt 5
fix all req changes
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/max_posture.go`
- `internal/agent/types.go`
- `internal/agent/loop.go`
- `internal/cli/exec.go`
- `internal/tui/view.go`
- `internal/execprofile/max_test.go`
- `internal/execprofile/profile_test.go`
- `internal/agent/max_posture_test.go`
- `internal/cli/exec_max_profile_test.go`
- `internal/tui/max_profile_test.go`
- `internal/config/profiles_disable_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutate.sh`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_syslead.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_staticsys.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutrun.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/probe_arms.py`
---
## Prompt 6
<local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/zeromaxing.go`
- `internal/execprofile/zeromaxing_test.go`
- `internal/cli/exec_zeromaxing_test.go`
- `internal/tui/zeromaxing_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutzm.py`
---
## Prompt 7
<command-message>effort</command-message>
<command-args></command-args>
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_task1.py`
---
## Prompt 8
<local-command-stdout>Set effort level to max (this session only): Maximum capability with deepest reasoning. May use excessive tokens resulting in long response times or overthinking. Use sparingly for the hardest tasks.</local-command-stdout>
**Files changed:**
- `internal/agent/posture_off_identity_test.go`
- `internal/specialist/plan_tool.go`
---
## Prompt 9
fixed all req changes ?
---
## Prompt 10
fix remaining
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut3.py`
---
## Prompt 11
closed ?
---
## Prompt 12
yes analyse and guide me which one is best to start merge ..will try to merge one by one
**Files changed:**
- `internal/specialist/plan.go`
- `internal/specialist/plan_exec.go`
- `internal/specialist/plan_test.go`
- `internal/specialist/plan_exec_test.go`
---
## Prompt 13
check the issues and analye and run that specific issue in zero if that issue is real then approve that issue
**Files changed:**
- `max-verify/stub/main.go`
---
## Prompt 14
[Request interrupted by user for tool use]
---
## Prompt 15
pull the issues and check via local run also
---
## Prompt 16
review 932
---
## Prompt 17
Base directory for this skill: /Users/kratos/.claude/skills/zero
# Working in Gitlawb/zero
Zero is a Go terminal coding agent: ~86 packages under `internal/`, ~166k non-test
lines, ~155k test lines. Almost nothing is greenfield. The two most common ways to
waste effort here are building something that already exists, and opening a PR
that gets closed on scope rather than on merit.
`AGENTS.md` and `CONTRIBUTING.md` in the repo root are authoritative. This skill is
the operational layer on top of them; where they disagree, they win.
## Pick your mode
| Task | Read |
|---|---|
| Fixing a bug, adding a feature, any code change | This file, then `references/packages.md` |
| Reviewing a PR, diff, patch, or branch | This file, then **`references/pr-review.md`** |
| Auditing, bug hunting, security sweep | This file, then **`references/audit.md`** |
| Working on sandbox, permissions, processes, credentials, config, provider I/O | Also **`references/invariants.md`** |
Sections 1–6 below ap...
---
## Prompt 18
check other issues allso
---
## Prompt 19
post verdict in anandh pr
---
## Prompt 20
#909 │ — │ none │ CodeRabbit + 1 human │
├──────┼──────────────────────┼──────────────────────────┼──────────────────────┤
│ #897 │ — │ none │ CodeRabbit + 1 human │
├──────┼──────────────────────┼──────────────────────────┼──────────────────────┤
│ #914 │ — │ none │ CodeRabbit + 1 human │
├──────┼──────────────────────┼──────────────────────────┼──────────────────────┤
│ #911 │ — │ CodeRabbit (current) │ unread review first │ ask rereviews anandh vasanth and jatmin
---
## Prompt 21
check status
---
## Prompt 22
ipo ena p[annalam ?
---
## Prompt 23
fixed all right ?
---
## Prompt 24
fix every findings
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,35 @@
{
"version": 1,
"sessionId": "local-ce5b65e0-88bb-4085-aab7-6646f99c46b8",
"model": "claude-opus-5",
"startedAt": "2026-08-19T02:36:47.455Z",
"endedAt": "2026-08-19T04:56:14.389Z",
"durationMs": 8366920,
"status": "running",
"tokens": {
"total": 11890,
"input": 28,
"output": 11862
},
"cost": {
"usd": 14.5112
},
"toolCalls": 13,
"lines": {
"added": 7,
"removed": 1
},
"filesChanged": [
"internal/agent/guardrails_false_admission_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "ae852e5374054c330121f4d8111c192f57f1a538",
"commitShas": [
"ae852e5374054c330121f4d8111c192f57f1a538"
]
},
"summary": "It's about my own invariant test, and it's right: I wrote the reachability check looser than the runtime. The runtime does `HasPrefix(tail, negation)`; my `|| HasPrefix(negation, tail)` would pass an entry that can never match. Fixing:",
"originUrl": "https://getorigin.io/sessions/local-ce5b65e0-88bb-4085-aab7-6646f99c46b8"
}
@@ -0,0 +1,28 @@
# Session local-ce
**Model:** claude-opus-5
**Started:** 2026-08-19T02:36:47.455Z
**Duration:** 2h 19m
**Cost:** $14.5112
**Tokens:** 11,890
**Status:** running
---
## Prompt 1
fix chjange req and ask rereview
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,43 @@
{
"version": 1,
"sessionId": "local-de382f5f-b4c9-4728-bdda-508ea72d3047",
"model": "claude-opus-5",
"startedAt": "2026-08-15T08:11:59.474Z",
"endedAt": "2026-08-15T15:36:31.710Z",
"durationMs": 26672207,
"status": "running",
"tokens": {
"total": 102647,
"input": 328,
"output": 102319
},
"cost": {
"usd": 77.6086
},
"toolCalls": 155,
"lines": {
"added": 1585,
"removed": 0
},
"filesChanged": [
"g/internal/agent/guardrails.go",
"908/internal/tools/file_tracker.go",
"909/internal/measurements/measurements.go",
"897b/internal/tools/memory.go",
"internal/memory/escape_test.go",
"internal/memory/memory.go",
"internal/memory/memory_test.go",
"internal/tools/memory.go",
"internal/tools/memory_test.go"
],
"git": {
"branch": "HEAD",
"headBefore": "ce1c5b229bacc971f1c532882ae6820dcbf5bc12",
"headAfter": "c93f08d0640c83559a6eff6cc9c03baf337c4843",
"commitShas": [
"c93f08d0640c83559a6eff6cc9c03baf337c4843"
]
},
"summary": "All three mutation-verified. Full gauntlet and push:",
"originUrl": "https://getorigin.io/sessions/local-de382f5f-b4c9-4728-bdda-508ea72d3047"
}
@@ -0,0 +1,118 @@
# Session local-de
**Model:** claude-opus-5
**Started:** 2026-08-15T08:11:59.474Z
**Duration:** 7h 24m
**Cost:** $77.6086
**Tokens:** 1,02,647
**Status:** running
---
## Prompt 1
review 902
**Files changed:**
- `swarm-repro/stub/main.go`
- `swarm-repro/cfg/zero/config.json`
- `swarm-repro/extract.py`
- `internal/swarm/tools_test.go`
- `internal/swarm/lifecycle_test.go`
- `internal/swarm/tools.go`
- `internal/swarm/lifecycle.go`
- `swarm-repro/neighbours.sh`
- `swarm-repro/summarize.py`
- `swarm-repro/run.sh`
---
## Prompt 2
pr 829 ah proper ah fix pannu rebase pannurathuna pannu
**Files changed:**
- `internal/providers/providerio/scratch_repro_test.go`
- `internal/providers/providerio/providerio.go`
- `internal/providers/anthropic/provider.go`
- `internal/providers/openai/provider.go`
- `internal/providers/gemini/provider.go`
- `internal/providers/anthropic/keepalive_test.go`
- `internal/providers/openai/keepalive_test.go`
- `internal/providers/gemini/keepalive_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/measure_test.go`
---
## Prompt 3
anandh version update pannitaru pola check panbnu
**Files changed:**
- `internal/specialist/scratch_p6_test.go`
---
## Prompt 4
fix req changes now
---
## Prompt 5
ipo ena pannalam ?
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/max_posture.go`
- `internal/agent/types.go`
- `internal/agent/loop.go`
- `internal/cli/exec.go`
- `internal/tui/view.go`
- `internal/execprofile/max_test.go`
- `internal/execprofile/profile_test.go`
- `internal/agent/max_posture_test.go`
- `internal/cli/exec_max_profile_test.go`
- `internal/tui/max_profile_test.go`
- `internal/config/profiles_disable_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutate.sh`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_syslead.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_staticsys.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutrun.py`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/probe_arms.py`
---
## Prompt 6
athu merge pannurathi owner desition panniruvaru..naama remaining ah split pannalama ?
**Files changed:**
- `internal/execprofile/profile.go`
- `internal/agent/zeromaxing.go`
- `internal/execprofile/zeromaxing_test.go`
- `internal/cli/exec_zeromaxing_test.go`
- `internal/tui/zeromaxing_test.go`
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mutzm.py`
---
## Prompt 7
ask review vasanth and anandh
**Files changed:**
- `/private/tmp/claude-501/-Users-kratos-dev-zero/800b9a35-f8d7-4e39-9f6c-0dd3d8a70e45/scratchpad/mut_task1.py`
---
## Prompt 8
fix change requested
**Files changed:**
- `internal/agent/posture_off_identity_test.go`
- `internal/specialist/plan_tool.go`
---
-209
View File
@@ -1,209 +0,0 @@
import type { Provider } from '../providers/types';
import type { ToolCall, ToolResult } from '../tools/types';
import { toolRegistry } from '../tools';
import { DEFAULT_SYSTEM_PROMPT, PLAN_MODE_SYSTEM_PROMPT } from './prompts';
import { clearPlan, getCurrentPlan, type PlanItem } from '../tools/plan';
import { z } from 'zod';
export interface AgentOptions {
maxTurns?: number;
onText?: (text: string) => void;
onToolCall?: (toolCall: ToolCall) => void;
onToolResult?: (result: ToolResult) => void;
onUsage?: (usage: { promptTokens: number; completionTokens: number }) => void;
onPlanUpdate?: (plan: PlanItem[]) => void;
toolsEnabled?: boolean;
debug?: boolean;
planMode?: boolean;
}
interface PendingToolCall {
id: string;
name: string;
arguments: string;
}
export async function runAgent(
initialPrompt: string,
provider: Provider,
options: AgentOptions = {}
): Promise<string> {
const {
maxTurns = 12,
onText,
onToolCall,
onToolResult,
onUsage,
onPlanUpdate,
toolsEnabled = true,
debug = false,
planMode = false,
} = options;
// Clear any previous plan when starting a new task
clearPlan();
onPlanUpdate?.(getCurrentPlan());
const systemPrompt = planMode ? PLAN_MODE_SYSTEM_PROMPT : DEFAULT_SYSTEM_PROMPT;
const messages: any[] = [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: initialPrompt },
];
const tools = toolRegistry.getAll();
let finalAnswer = '';
for (let turn = 0; turn < maxTurns; turn++) {
const toolDefinitions = (toolsEnabled && tools.length > 0)
? tools.map(t => {
const jsonSchema = z.toJSONSchema(t.parameters, { target: 'draft-7' }) as any;
delete jsonSchema.$schema;
if (jsonSchema.type === 'object' && !('additionalProperties' in jsonSchema)) {
jsonSchema.additionalProperties = false;
}
return {
name: t.name,
description: t.description,
parameters: jsonSchema,
};
})
: [];
let currentText = '';
const toolCallMap = new Map<string, PendingToolCall>();
if (debug) {
const red = '\x1b[31m';
const reset = '\x1b[0m';
const border = '-'.repeat(50);
const toolsList = toolDefinitions.map(t => t.name).join(', ');
const preview = String(messages[messages.length - 1]?.content || '').slice(0, 45);
console.log(`\n${red}+${border}+`);
console.log(`| SENDING TO PROVIDER${' '.repeat(31)}|`);
console.log(`+${border}+`);
console.log(`| Messages: ${messages.length}${' '.repeat(Math.max(0, 40 - String(messages.length).length))}|`);
console.log(`| Tools enabled: ${toolDefinitions.length > 0}${' '.repeat(33)}|`);
console.log(`| Tool count: ${toolDefinitions.length}${' '.repeat(Math.max(0, 38 - String(toolDefinitions.length).length))}|`);
if (toolsList) {
console.log(`| Tools: ${toolsList.slice(0, 42)}${' '.repeat(Math.max(0, 43 - toolsList.length))}|`);
}
console.log(`| Last message: ${preview}${' '.repeat(Math.max(0, 36 - preview.length))}|`);
console.log(`+${border}+${reset}\n`);
}
// Stream the response
for await (const event of provider.streamCompletion(messages, toolDefinitions)) {
if (event.type === 'text') {
currentText += event.content;
if (onText) onText(event.content);
}
if (event.type === 'usage') {
onUsage?.({
promptTokens: event.promptTokens,
completionTokens: event.completionTokens,
});
}
if (event.type === 'tool-call-start') {
toolCallMap.set(event.id, {
id: event.id,
name: event.name,
arguments: '',
});
// Do NOT emit to UI yet — we want the full arguments for proper formatting
}
if (event.type === 'tool-call-delta') {
const existing = toolCallMap.get(event.id);
if (existing) {
existing.arguments += event.argumentsFragment;
}
}
if (event.type === 'tool-call-end') {
// Tool call is now complete (we can execute it later)
}
}
// Convert accumulated tool calls
const assistantToolCalls: ToolCall[] = Array.from(toolCallMap.values()).map(tc => ({
id: tc.id,
name: tc.name,
arguments: tc.arguments,
}));
// Emit complete tool calls to the UI (with full arguments) so the formatter can show the actual command
if (onToolCall) {
for (const tc of assistantToolCalls) {
onToolCall(tc);
}
}
// Add assistant message to history
messages.push({
role: 'assistant',
content: currentText || null,
toolCalls: assistantToolCalls.length > 0 ? assistantToolCalls : undefined,
});
if (assistantToolCalls.length === 0) {
finalAnswer = currentText;
break;
}
// === Execute tools (in parallel) ===
const toolPromises = assistantToolCalls.map(async (tc) => {
const tool = tools.find(t => t.name === tc.name);
let result: string;
if (!tool) {
result = `Error: Unknown tool "${tc.name}".`;
} else {
let parsedArgs: any = {};
try {
parsedArgs = tc.arguments ? JSON.parse(tc.arguments) : {};
} catch (e: any) {
result = `Error: Failed to parse arguments for ${tc.name}: ${e.message}`;
if (onToolResult) onToolResult({ toolCallId: tc.id, result });
return { toolCallId: tc.id, result };
}
try {
result = await tool.execute(parsedArgs);
} catch (e: any) {
result = `Error executing ${tc.name}: ${e.message}`;
}
}
if (onToolResult) {
onToolResult({ toolCallId: tc.id, result });
}
const effects = tool?.onAfterExecute?.(result);
if (effects?.planUpdated) {
onPlanUpdate?.(getCurrentPlan());
}
return { toolCallId: tc.id, result };
});
const toolResults = await Promise.all(toolPromises);
// Feed tool results back into the conversation
for (const tr of toolResults) {
messages.push({
role: 'tool',
content: tr.result,
toolCallId: tr.toolCallId,
});
}
}
return finalAnswer || 'Agent reached maximum number of turns without a final answer.';
}
-66
View File
@@ -1,66 +0,0 @@
export const DEFAULT_SYSTEM_PROMPT = `You are Zero, an expert AI coding assistant running in a terminal.
You are helpful, precise, and careful. Your goal is to help the user understand and modify their codebase effectively.
## Core Principles
- Be concise but thorough. Don't over-explain obvious things.
- Think step-by-step before taking action.
- Prefer making small, targeted changes over large rewrites when possible.
- Always verify your understanding by reading files before making edits.
- If something is unclear, ask the user rather than guessing.
## Planning First (Very Important)
For any non-trivial task (more than a tiny one-line change or simple question), you **must** create a plan before starting work.
Use the **update_plan** tool to:
- Create a clear, ordered plan at the beginning of complex work.
- Break the task into concrete, actionable steps.
- Update the status of steps as you make progress (pending → in_progress → completed / failed).
- Revise the plan if the scope changes or you discover new information.
Good plans are:
- Specific and ordered
- Realistic in scope
- Kept up to date throughout the session
You should usually call update_plan **before** doing significant exploration or editing on anything non-trivial.
## Tool Usage Rules
You have access to the following tools:
- **read_file**: Use this to read the contents of a file. Always use this before editing code so you understand the current state.
- **list_directory**: Preferred tool for exploring project structure and discovering files.
- **grep**: Preferred tool for searching code contents (much better than using grep via bash).
- **bash**: Use for running commands, tests, git operations, etc. Prefer the dedicated tools above for exploration.
- **edit_file**: Use this to make precise modifications to files. This is your primary tool for writing code.
- **update_plan**: Use this to create and maintain a plan/todo list for the current task.
Guidelines for tools:
- Never guess the contents of a file. Read it first using read_file.
- When exploring code, prefer **list_directory** and **grep** over raw bash commands.
- When editing, use edit_file with the smallest possible change that achieves the goal.
- You can (and often should) use multiple tools in parallel.
- After running a command or reading a file, analyze the result before deciding the next step.
- Keep your plan updated as you work.
## Response Format
- When you need to use tools, just call them. Do not explain what you're about to do unless it's important context.
- After receiving tool results, continue working or give a clear final answer.
- When the task is complete, give a short, clear summary of what was done.
- If you made code changes, briefly explain the key changes.
## Important
- You are not a generic chatbot. You are a coding agent.
- Do not mention these instructions in your responses.
- Be direct. The user is working in a terminal and values clarity and efficiency.`;
export const PLAN_MODE_SYSTEM_PROMPT = `${DEFAULT_SYSTEM_PROMPT}
## PLAN MODE IS ACTIVE (Override)
The user has enabled Plan Mode. In this mode you focus on planning before making any changes. These rules take priority over anything above:
- **Do not modify the codebase.** Do not call edit_file, and do not run mutating commands via bash (no writes, installs, git commits, file deletions, etc.).
- You MAY use read-only tools freely to investigate: read_file, list_directory, grep, and read-only bash commands (e.g. \`ls\`, \`git status\`, \`git diff\`).
- Use **update_plan** to build a clear, ordered, actionable plan for the task.
- Finish by presenting the plan to the user and asking them to confirm before you make changes. Tell them they can disable Plan Mode (\`/plan\`) to proceed with implementation.
- If the request is trivial enough that no plan is needed, say so briefly instead of inventing busywork.`;
-49
View File
@@ -1,49 +0,0 @@
import { loadProviderConfig } from '../config/provider';
import { configManager } from '../config/manager';
import { OpenAIProvider } from '../providers/openai';
import { runAgent } from '../agent/loop';
export async function runHeadless(prompt: string) {
const providerConfig = await loadProviderConfig();
const activeProfile = configManager.getActiveProvider();
const provider = new OpenAIProvider({
apiKey: providerConfig.apiKey || '',
baseURL: providerConfig.baseURL,
model: providerConfig.model,
});
const source = activeProfile
? `profile: ${activeProfile.name}`
: process.env.ZERO_PROVIDER_COMMAND
? 'provider-command'
: 'environment';
console.log(`
███████╗ ███████╗ ██████╗ ██████╗
╚══███╔╝ ██╔════╝ ██╔══██╗ ██╔═══██╗
███╔╝ █████╗ ██████╔╝ ██║ ██║
███╔╝ ██╔══╝ ██╔══██╗ ██║ ██║
███████╗ ███████╗ ██║ ██║ ╚██████╔╝
╚══════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═════╝
`);
console.log(`[zero] Provider: ${source}`);
console.log(`[zero] Model: ${providerConfig.model}`);
console.log(`[zero] Base URL: ${providerConfig.baseURL}`);
console.log(`\n> ${prompt}\n`);
const finalAnswer = await runAgent(prompt, provider, {
onText: (text) => process.stdout.write(text),
onToolCall: (tc) => {
console.log(`\n[tool] ${tc.name}(${tc.arguments})`);
},
onToolResult: (result) => {
console.log(`[result] ${result.result.slice(0, 200)}${result.result.length > 200 ? '...' : ''}`);
},
});
if (finalAnswer) {
console.log(`\n\n${finalAnswer}`);
}
}
-124
View File
@@ -1,124 +0,0 @@
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
import { join } from 'path';
import { homedir } from 'os';
import type { ZeroConfig, ProviderProfile } from './types';
const CONFIG_DIR = join(homedir(), '.config', 'zero');
const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
function ensureConfigDir() {
if (!existsSync(CONFIG_DIR)) {
mkdirSync(CONFIG_DIR, { recursive: true });
}
}
function readConfig(): ZeroConfig {
ensureConfigDir();
if (!existsSync(CONFIG_PATH)) {
return { providers: [] };
}
try {
const content = readFileSync(CONFIG_PATH, 'utf-8');
const parsed = JSON.parse(content);
return {
activeProvider: parsed.activeProvider,
providers: parsed.providers ?? [],
};
} catch {
return { providers: [] };
}
}
function writeConfig(config: ZeroConfig) {
ensureConfigDir();
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
}
export class ConfigManager {
private config: ZeroConfig;
constructor() {
this.config = readConfig();
}
getActiveProvider(): ProviderProfile | undefined {
if (!this.config.activeProvider) return undefined;
return this.config.providers.find(p => p.name === this.config.activeProvider);
}
setActiveProvider(name: string): boolean {
const exists = this.config.providers.some(p => p.name === name);
if (!exists) return false;
this.config.activeProvider = name;
writeConfig(this.config);
return true;
}
listProviders(): ProviderProfile[] {
return [...this.config.providers];
}
getProvider(name: string): ProviderProfile | undefined {
return this.config.providers.find(p => p.name === name);
}
addProvider(profile: ProviderProfile): void {
// Remove if exists (update)
this.config.providers = this.config.providers.filter(p => p.name !== profile.name);
this.config.providers.push(profile);
// If this is the first provider, make it active
if (!this.config.activeProvider) {
this.config.activeProvider = profile.name;
}
writeConfig(this.config);
}
removeProvider(name: string): boolean {
const before = this.config.providers.length;
this.config.providers = this.config.providers.filter(p => p.name !== name);
if (this.config.activeProvider === name) {
this.config.activeProvider = this.config.providers[0]?.name;
}
writeConfig(this.config);
return this.config.providers.length < before;
}
// Used by the agent loop
getEffectiveProviderConfig(): {
baseURL: string;
apiKey?: string;
model: string;
} | null {
// Highest priority: provider command (handled elsewhere)
// Then: active profile from config
const active = this.getActiveProvider();
if (active) {
return {
baseURL: active.baseURL,
apiKey: active.apiKey,
model: active.model,
};
}
// Fallback to env vars
if (process.env.OPENAI_BASE_URL || process.env.OPENAI_MODEL) {
return {
baseURL: process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1',
apiKey: process.env.OPENAI_API_KEY,
model: process.env.OPENAI_MODEL || 'gpt-4o',
};
}
return null;
}
}
// Singleton for simplicity
export const configManager = new ConfigManager();
-54
View File
@@ -1,54 +0,0 @@
import { configManager } from './manager';
export interface ProviderConfig {
apiKey?: string;
baseURL: string;
model: string;
}
/**
* Loads the effective provider configuration.
* Priority order:
* 1. ZERO_PROVIDER_COMMAND (external command) - highest
* 2. Active profile from config (set via /provider)
* 3. OPENAI_* environment variables
*/
export async function loadProviderConfig(): Promise<ProviderConfig> {
// 1. Highest priority: external provider command
const providerCommand = process.env.ZERO_PROVIDER_COMMAND;
if (providerCommand) {
const { stdout } = await Bun.$`${providerCommand}`.quiet();
const parsed = JSON.parse(stdout.toString());
return {
apiKey: parsed.api_key,
baseURL: parsed.base_url || 'https://api.openai.com/v1',
model: parsed.model,
};
}
// 2. Active profile from saved config
const fromProfile = configManager.getEffectiveProviderConfig();
if (fromProfile) {
return fromProfile;
}
// 3. Fallback to raw environment variables
const envApiKey = process.env.OPENAI_API_KEY;
const envBaseURL = process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1';
const envModel = process.env.OPENAI_MODEL || 'gpt-4o';
// If we have no API key and no provider command, give a helpful error
if (!envApiKey && !process.env.ZERO_PROVIDER_COMMAND) {
throw new Error(
'No LLM provider configured.\n\n' +
'Please run /provider to add one, or set OPENAI_API_KEY environment variable.'
);
}
return {
apiKey: envApiKey,
baseURL: envBaseURL,
model: envModel,
};
}
-12
View File
@@ -1,12 +0,0 @@
export interface ProviderProfile {
name: string;
baseURL: string;
apiKey?: string;
model: string;
description?: string;
}
export interface ZeroConfig {
activeProvider?: string;
providers: ProviderProfile[];
}
-84
View File
@@ -1,84 +0,0 @@
import { Command } from 'commander';
import { ensureSolidTransformPlugin } from '@opentui/solid/bun-plugin';
import packageJson from '../package.json';
import { runHeadless } from './cli';
import { configManager } from './config/manager';
const program = new Command();
async function startInteractiveTUI() {
ensureSolidTransformPlugin();
const { startTUI } = await import('./tui');
startTUI();
}
program
.name('zero')
.description('A clean terminal AI coding agent')
.version(packageJson.version);
program
.option('-p, --prompt <prompt>', 'Run in headless mode with the given prompt')
.action(async (options) => {
if (options.prompt) {
await runHeadless(options.prompt);
} else {
// Launch the interactive TUI (Grok Build style)
await startInteractiveTUI();
}
});
// Providers subcommand (temporary until we have a nice /provider in the TUI)
const providersCmd = program.command('providers');
providersCmd
.command('list')
.description('List all saved providers')
.action(() => {
const providers = configManager.listProviders();
const active = configManager.getActiveProvider()?.name;
if (providers.length === 0) {
console.log('No providers configured yet.');
console.log('Use the /provider command once the TUI is ready, or edit ~/.config/zero/config.json');
return;
}
console.log('\nSaved Providers:\n');
providers.forEach(p => {
const isActive = p.name === active ? ' (active)' : '';
console.log(` ${p.name}${isActive}`);
console.log(` Model: ${p.model}`);
console.log(` BaseURL: ${p.baseURL}`);
if (p.description) console.log(` Desc: ${p.description}`);
console.log('');
});
});
providersCmd
.command('switch <name>')
.description('Switch the active provider')
.action((name: string) => {
const success = configManager.setActiveProvider(name);
if (success) {
console.log(`Switched to provider: ${name}`);
} else {
console.error(`Provider "${name}" not found.`);
}
});
providersCmd
.command('current')
.description('Show the currently active provider')
.action(() => {
const active = configManager.getActiveProvider();
if (active) {
console.log(`Active provider: ${active.name}`);
console.log(`Model: ${active.model}`);
console.log(`Base URL: ${active.baseURL}`);
} else {
console.log('No active provider set.');
}
});
program.parse();
-234
View File
@@ -1,234 +0,0 @@
import OpenAI from 'openai';
import type { Provider, Message, ToolDefinition, StreamEvent } from './types';
interface OpenAIProviderOptions {
apiKey: string;
baseURL?: string;
model: string;
}
function isUnsupportedStreamOptionsError(error: unknown): boolean {
const candidate = error as {
status?: number;
code?: string;
message?: string;
error?: {
code?: string;
message?: string;
};
};
const statusAllowsRetry = candidate.status === 400 || candidate.status === 422;
const errorText = [
candidate.code,
candidate.message,
candidate.error?.code,
candidate.error?.message,
].filter(Boolean).join(' ').toLowerCase();
return statusAllowsRetry && /stream[ _-]?options?/.test(errorText);
}
export class OpenAIProvider implements Provider {
private client: OpenAI;
private model: string;
constructor({ apiKey, baseURL, model }: OpenAIProviderOptions) {
this.client = new OpenAI({
apiKey,
baseURL: baseURL || 'https://api.openai.com/v1',
});
this.model = model;
}
async *streamCompletion(
messages: Message[],
tools: ToolDefinition[]
): AsyncIterable<StreamEvent> {
const openaiMessages = messages.map((m) => ({
role: m.role,
content: m.content,
tool_calls: m.toolCalls?.map((tc) => ({
id: tc.id,
type: 'function' as const,
function: {
name: tc.name,
arguments: tc.arguments,
},
})),
tool_call_id: m.toolCallId,
}));
const openaiTools = tools.length > 0
? tools.map((t) => ({
type: 'function' as const,
function: {
name: t.name,
description: t.description,
parameters: t.parameters,
},
}))
: undefined;
const createStreamRequest = (includeUsage: boolean) => ({
model: this.model,
messages: openaiMessages as any,
tools: openaiTools,
stream: true as const,
...(includeUsage ? {
stream_options: {
include_usage: true,
},
} : {}),
});
let stream;
try {
stream = await this.client.chat.completions.create(createStreamRequest(true));
} catch (error) {
if (isUnsupportedStreamOptionsError(error)) {
try {
stream = await this.client.chat.completions.create(createStreamRequest(false));
} catch (retryError) {
throw formatProviderCreateError(retryError);
}
} else {
throw formatProviderCreateError(error);
}
}
const toolCallAccumulators = new Map<number, {
id: string;
name: string;
arguments: string;
started: boolean;
}>();
try {
for await (const chunk of stream) {
if ((chunk as any).error) {
const errorData = (chunk as any).error;
throw formatProviderCreateError(errorData);
}
const delta = chunk.choices[0]?.delta;
const finishReason = chunk.choices[0]?.finish_reason;
if (delta?.content) {
yield { type: 'text', content: delta.content };
}
if (delta?.tool_calls) {
for (const tc of delta.tool_calls) {
if (tc.index === undefined) continue;
let acc = toolCallAccumulators.get(tc.index);
if (!acc) {
acc = { id: '', name: '', arguments: '', started: false };
toolCallAccumulators.set(tc.index, acc);
}
// If we already had data at this index and now get a new id,
// the previous tool call is complete.
if (tc.id && acc.id && acc.id !== tc.id) {
if (acc.id) {
yield { type: 'tool-call-end', id: acc.id };
}
acc = { id: '', name: '', arguments: '', started: false };
toolCallAccumulators.set(tc.index, acc);
}
if (tc.id) acc.id = tc.id;
if (tc.function?.name) acc.name = tc.function.name;
if (tc.function?.arguments) {
acc.arguments += tc.function.arguments;
yield {
type: 'tool-call-delta',
id: acc.id || `pending-${tc.index}`,
argumentsFragment: tc.function.arguments,
};
}
// Emit start event the first time we have both id and name
if (acc.id && acc.name && !acc.started) {
yield { type: 'tool-call-start', id: acc.id, name: acc.name };
acc.started = true;
}
}
}
if (chunk.usage) {
yield {
type: 'usage',
promptTokens: chunk.usage.prompt_tokens,
completionTokens: chunk.usage.completion_tokens,
};
}
// If the model signaled it's done with tool calls, close any open ones
if (finishReason === 'tool_calls') {
for (const [_, acc] of toolCallAccumulators) {
if (acc.id) {
yield { type: 'tool-call-end', id: acc.id };
}
}
}
}
// End of stream - close any remaining open tool calls
for (const [_, acc] of toolCallAccumulators) {
if (acc.id) {
yield { type: 'tool-call-end', id: acc.id };
}
}
yield { type: 'done' };
} catch (error) {
throw formatProviderCreateError(error);
}
}
}
function formatProviderCreateError(error: unknown): Error {
const message = getDetailedErrorMessage(error);
const lower = message.toLowerCase();
if (message.includes('401') || lower.includes('invalid') || lower.includes('unauthorized') || lower.includes('api key')) {
return new Error(`Provider authentication error (check your API key): ${message}`);
}
if (lower.includes('rate') || lower.includes('quota')) {
return new Error(`Provider rate limit error: ${message}`);
}
return new Error(`Provider returned error: ${message}`);
}
function getDetailedErrorMessage(error: any): string {
if (!error) return 'Unknown error';
if (error.message && !error.message.includes('Provider returned error')) {
return error.message;
}
if (error.error) {
if (typeof error.error === 'string') return error.error;
if (error.error.message) return error.error.message;
try {
return JSON.stringify(error.error);
} catch {}
}
if (error.response?.data) {
const data = error.response.data;
if (data.error?.message) return data.error.message;
if (typeof data.error === 'string') return data.error;
try {
return JSON.stringify(data);
} catch {}
}
if (error.cause?.message) return error.cause.message;
return error.message || String(error);
}
-33
View File
@@ -1,33 +0,0 @@
export interface Message {
role: 'system' | 'user' | 'assistant' | 'tool';
content: string;
toolCalls?: ToolCall[];
toolCallId?: string;
}
export interface ToolCall {
id: string;
name: string;
arguments: string; // JSON string
}
export interface ToolDefinition {
name: string;
description: string;
parameters: Record<string, unknown>; // JSON Schema
}
export type StreamEvent =
| { type: 'text'; content: string }
| { type: 'tool-call-start'; id: string; name: string }
| { type: 'tool-call-delta'; id: string; argumentsFragment: string }
| { type: 'tool-call-end'; id: string }
| { type: 'usage'; promptTokens: number; completionTokens: number }
| { type: 'done' };
export interface Provider {
streamCompletion(
messages: Message[],
tools: ToolDefinition[]
): AsyncIterable<StreamEvent>;
}
-37
View File
@@ -1,37 +0,0 @@
import { z } from 'zod';
import { execa } from 'execa';
import type { Tool } from './types';
const BashParams = z.object({
command: z.string().min(1),
cwd: z.string().optional(),
});
export const bashTool: Tool = {
name: 'bash',
description: 'Execute a shell command and return the output. Use for running commands, git, tests, etc.',
parameters: BashParams,
async execute(args) {
const { command, cwd } = BashParams.parse(args);
try {
const result = await execa(command, {
cwd: cwd || process.cwd(),
shell: true,
timeout: 120_000, // 2 minutes
});
let output = '';
if (result.stdout) output += `stdout:\n${result.stdout}\n`;
if (result.stderr) output += `stderr:\n${result.stderr}\n`;
if (result.exitCode !== 0) output += `Exit code: ${result.exitCode}`;
return output.trim() || 'Command completed with no output.';
} catch (err: any) {
if (err.timedOut) {
return 'Error: Command timed out after 2 minutes.';
}
return `Error executing command: ${err.message}`;
}
},
};
-33
View File
@@ -1,33 +0,0 @@
import { z } from 'zod';
import { readFile, writeFile } from 'fs/promises';
import type { Tool } from './types';
const EditFileParams = z.object({
path: z.string().min(1),
old_string: z.string().min(1),
new_string: z.string(),
});
export const editFileTool: Tool = {
name: 'edit_file',
description: 'Edit a file by replacing one exact string with another. Use this for precise code changes.',
parameters: EditFileParams,
async execute(args) {
const { path, old_string, new_string } = EditFileParams.parse(args);
try {
const content = await readFile(path, 'utf-8');
if (!content.includes(old_string)) {
return `Error: Could not find the exact string to replace in ${path}.`;
}
const newContent = content.replace(old_string, new_string);
await writeFile(path, newContent, 'utf-8');
return `Successfully edited ${path}.`;
} catch (err: any) {
return `Error editing file ${path}: ${err.message}`;
}
},
};
-94
View File
@@ -1,94 +0,0 @@
import { z } from 'zod';
import { execa } from 'execa';
import type { Tool } from './types';
const GrepParams = z.object({
pattern: z.string().min(1).describe('Regular expression pattern to search for'),
path: z.string().optional().describe('Directory or file to search in. Defaults to current working directory.'),
glob: z.string().optional().describe('Glob pattern to filter files (e.g. "**/*.ts", "*.tsx")'),
output_mode: z.enum(['content', 'files_with_matches', 'count']).optional().default('content'),
'-i': z.boolean().optional().describe('Case insensitive search'),
'-n': z.boolean().optional().default(true).describe('Show line numbers'),
head_limit: z.number().int().min(1).optional().default(50).describe('Maximum number of results to return'),
});
export const grepTool: Tool = {
name: 'grep',
description: `Fast content search using ripgrep (if available) or fallback.
This is the preferred tool for searching code. Use it instead of running grep via bash when possible.
Features:
- Full regex support
- Filter by glob
- Different output modes (content, files_with_matches, count)
- Automatically respects .gitignore`,
parameters: GrepParams,
async execute(args) {
const params = GrepParams.parse(args);
const { pattern, path = '.', glob, output_mode, '-i': caseInsensitive, '-n': showLineNumbers, head_limit } = params;
const cwd = process.cwd();
const targetPath = path === '.' ? cwd : path;
// Try ripgrep first (much faster and better)
try {
const rgArgs = ['--json', '--no-heading', '--with-filename'];
if (caseInsensitive) rgArgs.push('-i');
if (showLineNumbers) rgArgs.push('-n');
if (glob) rgArgs.push('--glob', glob);
rgArgs.push('-m', String(head_limit));
rgArgs.push(pattern, targetPath);
const { stdout } = await execa('rg', rgArgs, {
cwd,
reject: false,
});
if (!stdout) {
return output_mode === 'count' ? '0 matches found' : 'No matches found.';
}
// Parse ripgrep JSON output
const lines = stdout.trim().split('\n');
const results: any[] = [];
for (const line of lines) {
try {
const parsed = JSON.parse(line);
if (parsed.type === 'match') {
results.push(parsed);
}
} catch {}
}
if (results.length === 0) {
return 'No matches found.';
}
if (output_mode === 'count') {
return `${results.length} matches found (limited to first ${head_limit})`;
}
if (output_mode === 'files_with_matches') {
const files = new Set(results.map(r => r.data.path.text));
return Array.from(files).slice(0, head_limit).join('\n');
}
// content mode
const formatted = results.slice(0, head_limit).map((r: any) => {
const file = r.data.path.text;
const lineNum = r.data.line_number;
const text = r.data.lines.text.trim();
return `${file}:${lineNum}: ${text}`;
});
return formatted.join('\n');
} catch (err) {
// Fallback to simple grep if rg not available (not ideal but works)
return `ripgrep (rg) not found. Falling back to basic search is not yet implemented. Please install ripgrep for best results.`;
}
},
};
-19
View File
@@ -1,19 +0,0 @@
import { toolRegistry } from './registry';
import { readFileTool } from './read-file';
import { bashTool } from './bash';
import { editFileTool } from './edit-file';
import { planTool } from './plan';
import { listDirectoryTool } from './list-directory';
import { grepTool } from './grep';
toolRegistry.register(readFileTool);
toolRegistry.register(bashTool);
toolRegistry.register(editFileTool);
toolRegistry.register(planTool);
toolRegistry.register(listDirectoryTool);
toolRegistry.register(grepTool);
export { toolRegistry };
export * from './types';
export { getCurrentPlan, clearPlan } from './plan';
export type { PlanItem } from './plan';
-82
View File
@@ -1,82 +0,0 @@
import { z } from 'zod';
import { readdir, stat } from 'fs/promises';
import { join, relative } from 'path';
import type { Tool } from './types';
const ListDirectoryParams = z.object({
path: z.string().optional().describe('Directory to list. Defaults to current working directory.'),
recursive: z.boolean().optional().default(false).describe('Whether to list recursively'),
max_depth: z.number().int().min(1).max(5).optional().default(2).describe('Max recursion depth when recursive=true'),
});
export const listDirectoryTool: Tool = {
name: 'list_directory',
description: `List files and directories in a given path. Use this when you need to explore the project structure.
This is the preferred tool for understanding the codebase layout before planning or making changes.
- Returns a clean tree-like structure
- Supports recursive listing with depth control
- Ignores common junk directories (.git, node_modules, dist, etc.) by default`,
parameters: ListDirectoryParams,
async execute(args) {
const { path = '.', recursive, max_depth } = ListDirectoryParams.parse(args);
const ignoreDirs = new Set([
'.git', 'node_modules', 'dist', 'build', '.next', '.turbo', 'coverage',
'.cache', 'tmp', 'temp', '.DS_Store',
]);
try {
const root = process.cwd();
const targetPath = join(root, path);
const entries = await listDirRecursive(targetPath, root, 0, recursive ? max_depth : 0, ignoreDirs);
if (entries.length === 0) {
return `Directory is empty: ${path}`;
}
return `Contents of ${path}:\n\n${entries.join('\n')}`;
} catch (err: any) {
return `Error listing directory ${path}: ${err.message}`;
}
},
};
async function listDirRecursive(
currentPath: string,
root: string,
currentDepth: number,
maxDepth: number,
ignoreDirs: Set<string>,
): Promise<string[]> {
const results: string[] = [];
try {
const dirents = await readdir(currentPath, { withFileTypes: true });
for (const dirent of dirents) {
const fullPath = join(currentPath, dirent.name);
const relPath = relative(root, fullPath);
if (dirent.isDirectory()) {
if (ignoreDirs.has(dirent.name)) continue;
const indent = ' '.repeat(currentDepth);
results.push(`${indent}📁 ${dirent.name}/`);
if (currentDepth < maxDepth) {
const children = await listDirRecursive(fullPath, root, currentDepth + 1, maxDepth, ignoreDirs);
results.push(...children);
}
} else {
const indent = ' '.repeat(currentDepth);
results.push(`${indent}📄 ${dirent.name}`);
}
}
} catch (e) {
// ignore permission errors on individual dirs
}
return results;
}
-78
View File
@@ -1,78 +0,0 @@
import { z } from 'zod';
import type { Tool } from './types';
const PlanItemSchema = z.object({
id: z.string().min(1),
content: z.string().min(1),
status: z.enum(['pending', 'in_progress', 'completed', 'failed']),
notes: z.string().optional(),
});
const UpdatePlanParams = z.object({
plan: z.array(PlanItemSchema),
});
type PlanItem = z.infer<typeof PlanItemSchema>;
// In-memory plan storage for the current session
let currentPlan: PlanItem[] = [];
function formatPlan(plan: PlanItem[]): string {
if (plan.length === 0) {
return 'Plan is currently empty.';
}
const statusEmoji: Record<PlanItem['status'], string> = {
pending: '○',
in_progress: '◉',
completed: '✓',
failed: '✕',
};
const lines = plan.map((item, index) => {
const emoji = statusEmoji[item.status];
const notes = item.notes ? `\n Notes: ${item.notes}` : '';
return `${index + 1}. ${emoji} [${item.status}] ${item.content}${notes}`;
});
return 'Current Plan:\n' + lines.join('\n');
}
export const planTool: Tool = {
name: 'update_plan',
description: `Create or update the plan for the current task.
Use this tool proactively for any non-trivial task. This is your primary way to organize work, track progress, and communicate your plan to the user.
When to use:
- At the start of a complex task, create a high-level plan first.
- Before making significant changes, break the work into clear steps.
- After completing a step, update its status.
- If the scope changes, revise the plan.
The plan should be clear, actionable, and ordered. Keep it up to date as you work.`,
parameters: UpdatePlanParams,
async execute(args) {
const { plan } = UpdatePlanParams.parse(args);
currentPlan = plan;
return formatPlan(currentPlan);
},
onAfterExecute() {
return { planUpdated: true };
},
};
// Helper to get the current plan (can be used by other parts of the system later)
export function getCurrentPlan(): PlanItem[] {
return [...currentPlan];
}
// Helper to clear the plan (useful for new conversations)
export function clearPlan() {
currentPlan = [];
}
// Export the schema type for potential future use in the TUI
export type { PlanItem };
-23
View File
@@ -1,23 +0,0 @@
import { z } from 'zod';
import { readFile } from 'fs/promises';
import type { Tool } from './types';
const ReadFileParams = z.object({
path: z.string().min(1),
});
export const readFileTool: Tool = {
name: 'read_file',
description: 'Read the contents of a file from the filesystem.',
parameters: ReadFileParams,
async execute(args) {
const { path } = ReadFileParams.parse(args);
try {
const content = await readFile(path, 'utf-8');
return `File: ${path}\n\n${content}`;
} catch (err: any) {
return `Error reading file ${path}: ${err.message}`;
}
},
};
-27
View File
@@ -1,27 +0,0 @@
import type { Tool } from './types';
export class ToolRegistry {
private tools = new Map<string, Tool>();
register(tool: Tool) {
this.tools.set(tool.name, tool);
}
get(name: string): Tool | undefined {
return this.tools.get(name);
}
getAll(): Tool[] {
return Array.from(this.tools.values());
}
getDefinitionsForProvider() {
return this.getAll().map(tool => ({
name: tool.name,
description: tool.description,
parameters: tool.parameters.shape, // We'll convert properly later
}));
}
}
export const toolRegistry = new ToolRegistry();
-24
View File
@@ -1,24 +0,0 @@
import { z } from 'zod';
export interface ToolExecutionEffects {
planUpdated?: boolean;
}
export interface Tool {
name: string;
description: string;
parameters: z.ZodObject<any>; // Zod schema for validation
execute: (args: any) => Promise<string>; // Returns tool result as string
onAfterExecute?: (result: string) => ToolExecutionEffects | void;
}
export interface ToolCall {
id: string;
name: string;
arguments: string; // raw JSON string from model
}
export interface ToolResult {
toolCallId: string;
result: string;
}
-1407
View File
File diff suppressed because it is too large. Load diff
-71
View File
@@ -1,71 +0,0 @@
import { createHighlighter } from 'shiki';
export type HighlightedToken = {
content: string;
color?: string;
};
export type HighlightedLine = HighlightedToken[];
let highlighterPromise: ReturnType<typeof createHighlighter> | undefined;
const highlightCache = new Map<string, Promise<HighlightedLine[]>>();
function hashCode(input: string) {
let hash = 0;
for (let i = 0; i < input.length; i++) {
hash = ((hash << 5) - hash + input.charCodeAt(i)) | 0;
}
return hash.toString(36);
}
export async function highlightCode(code: string, lang = 'text'): Promise<HighlightedLine[]> {
const cacheKey = `${lang}:${code.length}:${hashCode(code)}`;
const cached = highlightCache.get(cacheKey);
if (cached) return cached;
const promise = tokenizeCode(code, lang);
highlightCache.set(cacheKey, promise);
return promise;
}
async function tokenizeCode(code: string, lang: string): Promise<HighlightedLine[]> {
try {
highlighterPromise ??= createHighlighter({
themes: ['github-dark'],
langs: [
'bash',
'css',
'dockerfile',
'go',
'html',
'javascript',
'json',
'jsx',
'markdown',
'python',
'rust',
'shell',
'sql',
'toml',
'tsx',
'typescript',
'yaml',
],
});
const highlighter = await highlighterPromise;
const result = highlighter.codeToTokens(code, {
lang: (lang || 'text') as any,
theme: 'github-dark',
});
return result.tokens.map((line) =>
line.map((token) => ({
content: token.content,
color: token.color,
})),
);
} catch {
return code.split(/\r?\n/).map((line) => [{ content: line }]);
}
}
-35
View File
@@ -1,35 +0,0 @@
/** @jsxImportSource @opentui/solid */
import { createCliRenderer } from '@opentui/core';
import { render } from '@opentui/solid';
import { App } from './App';
export function startTUI() {
void start();
}
async function start() {
const renderer = await createCliRenderer({
externalOutputMode: 'passthrough',
targetFps: 60,
gatherStats: false,
exitOnCtrlC: false,
useMouse: true,
enableMouseMovement: true,
useKittyKeyboard: {},
openConsoleOnError: false,
});
const exit = () => {
if (!renderer.isDestroyed) {
renderer.setTerminalTitle('');
renderer.destroy();
}
};
process.once('SIGINT', exit);
renderer.once('destroy', () => {
process.off('SIGINT', exit);
});
await render(() => <App onExit={exit} />, renderer);
}
-88
View File
@@ -1,88 +0,0 @@
import { describe, it, expect } from 'bun:test';
import { runAgent } from '../src/agent/loop';
import { DEFAULT_SYSTEM_PROMPT, PLAN_MODE_SYSTEM_PROMPT } from '../src/agent/prompts';
import type { Provider, Message, StreamEvent } from '../src/providers/types';
// A mock provider that records the messages it receives and replays a
// scripted sequence of stream events per turn.
class MockProvider implements Provider {
public received: Message[][] = [];
private turns: StreamEvent[][];
private turn = 0;
constructor(turns: StreamEvent[][]) {
this.turns = turns;
}
async *streamCompletion(messages: Message[]): AsyncIterable<StreamEvent> {
// Snapshot the messages for this turn so tests can inspect the prompt.
this.received.push(messages.map((m) => ({ ...m })));
const events = this.turns[this.turn] ?? [{ type: 'done' as const }];
this.turn++;
for (const ev of events) yield ev;
}
}
describe('runAgent system prompt selection', () => {
it('uses the default system prompt when plan mode is off', async () => {
const provider = new MockProvider([[{ type: 'text', content: 'hi' }]]);
await runAgent('hello', provider, { planMode: false });
expect(provider.received[0]?.[0]?.role).toBe('system');
expect(provider.received[0]?.[0]?.content).toBe(DEFAULT_SYSTEM_PROMPT);
});
it('uses the plan-mode system prompt when plan mode is on', async () => {
const provider = new MockProvider([[{ type: 'text', content: 'hi' }]]);
await runAgent('hello', provider, { planMode: true });
expect(provider.received[0]?.[0]?.content).toBe(PLAN_MODE_SYSTEM_PROMPT);
expect(provider.received[0]?.[0]?.content).toContain('PLAN MODE IS ACTIVE');
});
});
describe('runAgent tool-call flow', () => {
it('executes a tool call and feeds the result back to the model', async () => {
const provider = new MockProvider([
// Turn 1: the model asks to update the plan.
[
{ type: 'tool-call-start', id: 'call_1', name: 'update_plan' },
{
type: 'tool-call-delta',
id: 'call_1',
argumentsFragment: JSON.stringify({
plan: [{ id: '1', content: 'do it', status: 'pending' }],
}),
},
{ type: 'tool-call-end', id: 'call_1' },
],
// Turn 2: the model produces a final answer.
[{ type: 'text', content: 'all done' }],
]);
const toolCalls: string[] = [];
const toolResults: string[] = [];
const answer = await runAgent('make a plan', provider, {
onToolCall: (tc) => toolCalls.push(tc.name),
onToolResult: (r) => toolResults.push(r.result),
});
expect(answer).toBe('all done');
expect(toolCalls).toEqual(['update_plan']);
expect(toolResults[0]).toContain('do it');
// Second turn must include the tool result message fed back in.
const secondTurn = provider.received[1] ?? [];
const toolMsg = secondTurn.find((m) => m.role === 'tool');
expect(toolMsg).toBeDefined();
expect(toolMsg?.content).toContain('do it');
});
it('stops and returns text when the model makes no tool calls', async () => {
const provider = new MockProvider([[{ type: 'text', content: 'just an answer' }]]);
const answer = await runAgent('hi', provider, {});
expect(answer).toBe('just an answer');
expect(provider.received).toHaveLength(1);
});
});
-69
View File
@@ -1,69 +0,0 @@
import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
import { mkdtemp, rm, writeFile, readFile } from 'fs/promises';
import { tmpdir } from 'os';
import { join } from 'path';
import { readFileTool } from '../src/tools/read-file';
import { editFileTool } from '../src/tools/edit-file';
let dir: string;
beforeEach(async () => {
dir = await mkdtemp(join(tmpdir(), 'zero-test-'));
});
afterEach(async () => {
await rm(dir, { recursive: true, force: true });
});
describe('readFileTool', () => {
it('returns the file contents', async () => {
const file = join(dir, 'hello.txt');
await writeFile(file, 'hello world', 'utf-8');
const result = await readFileTool.execute({ path: file });
expect(result).toContain('hello world');
expect(result).toContain(file);
});
it('returns an error message for a missing file', async () => {
const result = await readFileTool.execute({ path: join(dir, 'nope.txt') });
expect(result).toContain('Error reading file');
});
});
describe('editFileTool', () => {
it('replaces an exact string and writes it back', async () => {
const file = join(dir, 'code.ts');
await writeFile(file, 'const a = 1;\nconst b = 2;\n', 'utf-8');
const result = await editFileTool.execute({
path: file,
old_string: 'const a = 1;',
new_string: 'const a = 42;',
});
expect(result).toContain('Successfully edited');
expect(await readFile(file, 'utf-8')).toBe('const a = 42;\nconst b = 2;\n');
});
it('reports when the target string is not found', async () => {
const file = join(dir, 'code.ts');
await writeFile(file, 'const a = 1;\n', 'utf-8');
const result = await editFileTool.execute({
path: file,
old_string: 'does not exist',
new_string: 'whatever',
});
expect(result).toContain('Could not find the exact string');
});
it('only replaces the first occurrence', async () => {
const file = join(dir, 'dup.txt');
await writeFile(file, 'x\nx\n', 'utf-8');
await editFileTool.execute({ path: file, old_string: 'x', new_string: 'y' });
expect(await readFile(file, 'utf-8')).toBe('y\nx\n');
});
});
-117
View File
@@ -1,117 +0,0 @@
import { afterEach, describe, expect, it, mock } from 'bun:test';
const createMock: any = mock(async () => {
throw new Error('create mock not configured');
});
mock.module('openai', () => ({
default: class MockOpenAI {
chat = {
completions: {
create: createMock,
},
};
},
}));
async function* streamFrom(chunks: any[]) {
for (const chunk of chunks) {
yield chunk;
}
}
afterEach(() => {
createMock.mockReset();
});
describe('OpenAIProvider stream options compatibility', () => {
it('requests usage and retries without stream_options when a compatible provider rejects it', async () => {
const { OpenAIProvider } = await import('../src/providers/openai');
const unsupportedStreamOptions = Object.assign(new Error('unknown parameter: stream_options.include_usage'), {
status: 400,
});
createMock
.mockRejectedValueOnce(unsupportedStreamOptions)
.mockResolvedValueOnce(streamFrom([
{
choices: [{ delta: { content: 'hi' }, finish_reason: 'stop' }],
},
]));
const provider = new OpenAIProvider({ apiKey: 'test', model: 'test-model' });
const events = [];
for await (const event of provider.streamCompletion([{ role: 'user', content: 'hello' }], [])) {
events.push(event);
}
expect(createMock).toHaveBeenCalledTimes(2);
expect(createMock.mock.calls[0]?.[0]?.stream_options).toEqual({ include_usage: true });
expect(createMock.mock.calls[1]?.[0]?.stream_options).toBeUndefined();
expect(events).toContainEqual({ type: 'text', content: 'hi' });
});
it('does not retry unrelated unknown-parameter errors', async () => {
const { OpenAIProvider } = await import('../src/providers/openai');
const unsupportedToolChoice = Object.assign(new Error('unknown parameter: tool_choice'), {
status: 400,
});
createMock.mockRejectedValueOnce(unsupportedToolChoice);
const provider = new OpenAIProvider({ apiKey: 'test', model: 'test-model' });
await expect((async () => {
for await (const _event of provider.streamCompletion([{ role: 'user', content: 'hello' }], [])) {
// Drain the stream.
}
})()).rejects.toThrow('unknown parameter: tool_choice');
expect(createMock).toHaveBeenCalledTimes(1);
});
it('categorizes mid-stream authentication errors', async () => {
const { OpenAIProvider } = await import('../src/providers/openai');
createMock.mockResolvedValueOnce(streamFrom([
{
error: {
message: 'Incorrect API key provided',
},
},
]));
const provider = new OpenAIProvider({ apiKey: 'test', model: 'test-model' });
await expect((async () => {
for await (const _event of provider.streamCompletion([{ role: 'user', content: 'hello' }], [])) {
// Drain the stream.
}
})()).rejects.toThrow('Provider authentication error');
});
it('emits usage events from compatible OpenAI streams', async () => {
const { OpenAIProvider } = await import('../src/providers/openai');
createMock.mockResolvedValueOnce(streamFrom([
{
choices: [{ delta: {}, finish_reason: 'stop' }],
usage: {
prompt_tokens: 8,
completion_tokens: 3,
},
},
]));
const provider = new OpenAIProvider({ apiKey: 'test', model: 'test-model' });
const events = [];
for await (const event of provider.streamCompletion([{ role: 'user', content: 'hello' }], [])) {
events.push(event);
}
expect(createMock.mock.calls[0]?.[0]?.stream_options).toEqual({ include_usage: true });
expect(events).toContainEqual({ type: 'usage', promptTokens: 8, completionTokens: 3 });
});
});
-44
View File
@@ -1,44 +0,0 @@
import { describe, it, expect, beforeEach } from 'bun:test';
import { planTool, getCurrentPlan, clearPlan } from '../src/tools/plan';
const samplePlan = [
{ id: '1', content: 'First step', status: 'completed' as const },
{ id: '2', content: 'Second step', status: 'in_progress' as const, notes: 'halfway' },
{ id: '3', content: 'Third step', status: 'pending' as const },
];
describe('planTool', () => {
beforeEach(() => clearPlan());
it('stores the plan and reflects it via getCurrentPlan', async () => {
await planTool.execute({ plan: samplePlan });
expect(getCurrentPlan()).toEqual(samplePlan);
});
it('formats the plan with status markers and notes', async () => {
const output = await planTool.execute({ plan: samplePlan });
expect(output).toContain('1. ✓ [completed] First step');
expect(output).toContain('2. ◉ [in_progress] Second step');
expect(output).toContain('Notes: halfway');
expect(output).toContain('3. ○ [pending] Third step');
});
it('clearPlan empties the stored plan', async () => {
await planTool.execute({ plan: samplePlan });
clearPlan();
expect(getCurrentPlan()).toEqual([]);
});
it('getCurrentPlan returns a copy, not the internal reference', async () => {
await planTool.execute({ plan: samplePlan });
const snapshot = getCurrentPlan();
snapshot.push({ id: 'x', content: 'mutation', status: 'pending' });
expect(getCurrentPlan()).toHaveLength(samplePlan.length);
});
it('rejects invalid status values', async () => {
await expect(
planTool.execute({ plan: [{ id: '1', content: 'bad', status: 'nope' }] })
).rejects.toThrow();
});
});
-49
View File
@@ -1,49 +0,0 @@
import { describe, it, expect } from 'bun:test';
import { z } from 'zod';
import { ToolRegistry } from '../src/tools/registry';
import type { Tool } from '../src/tools/types';
function makeTool(name: string): Tool {
return {
name,
description: `tool ${name}`,
parameters: z.object({ x: z.string() }),
async execute() {
return `ran ${name}`;
},
};
}
describe('ToolRegistry', () => {
it('registers and retrieves a tool by name', () => {
const registry = new ToolRegistry();
const tool = makeTool('alpha');
registry.register(tool);
expect(registry.get('alpha')).toBe(tool);
});
it('returns undefined for an unknown tool', () => {
const registry = new ToolRegistry();
expect(registry.get('missing')).toBeUndefined();
});
it('getAll returns every registered tool', () => {
const registry = new ToolRegistry();
registry.register(makeTool('a'));
registry.register(makeTool('b'));
const names = registry.getAll().map((t) => t.name).sort();
expect(names).toEqual(['a', 'b']);
});
it('re-registering a name overwrites the previous tool', () => {
const registry = new ToolRegistry();
registry.register(makeTool('dup'));
const second = makeTool('dup');
registry.register(second);
expect(registry.getAll()).toHaveLength(1);
expect(registry.get('dup')).toBe(second);
});
});
-27
View File
@@ -1,27 +0,0 @@
import { describe, it, expect } from 'bun:test';
import { z } from 'zod';
import { toolRegistry } from '../src/tools';
// Guards the regression where loop.ts imported a missing `zod-to-json-schema`
// package instead of zod v4's built-in `z.toJSONSchema`.
describe('tool parameter -> JSON Schema conversion', () => {
it('every registered tool converts to a valid object JSON Schema', () => {
const tools = toolRegistry.getAll();
expect(tools.length).toBeGreaterThan(0);
for (const tool of tools) {
const schema = z.toJSONSchema(tool.parameters, { target: 'draft-7' }) as any;
expect(schema.type).toBe('object');
expect(schema.properties).toBeDefined();
}
});
it('produces the shape the agent loop sends to providers', () => {
const planTool = toolRegistry.get('update_plan');
expect(planTool).toBeDefined();
const schema = z.toJSONSchema(planTool!.parameters, { target: 'draft-7' }) as any;
expect(schema.properties.plan.type).toBe('array');
expect(schema.required).toContain('plan');
});
});
-30
View File
@@ -1,30 +0,0 @@
{
"compilerOptions": {
// Environment setup & latest features
"lib": ["ESNext"],
"target": "ESNext",
"module": "Preserve",
"moduleDetection": "force",
"jsx": "preserve",
"jsxImportSource": "@opentui/solid",
"allowJs": true,
// Bundler mode
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"verbatimModuleSyntax": true,
"noEmit": true,
// Best practices
"strict": true,
"skipLibCheck": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
"noImplicitOverride": true,
// Some stricter flags (disabled by default)
"noUnusedLocals": false,
"noUnusedParameters": false,
"noPropertyAccessFromIndexSignature": false
}
}