Руководство по T3 Code: от небольшого изменения к проверке diff и тестов
На этой странице
T3 Code соединяет установленных на компьютере агентов программирования с интерфейсом проектов, диалогов, разрешений и изменённых файлов. При передаче кода агенту небольшой объём задачи и проверяемые критерии завершения важнее длинного запроса. Эта статья проходит путь исправления числового парсера Retry-After от запроса до проверки diff и тестов.
Речь об официальном проекте T3 Code. Он отличается от T3 Stack, создающего веб-приложения через create-t3-app. Официальный README описывает подключение существующих провайдеров, включая Codex, Claude Code и Cursor. Установка T3 Code и настройка входа и условий подписки/API провайдера — отдельные шаги.
Основа — выпуск v0.1.9, проверенный 12 ноября 2026 года. Пример проверен на macOS с Node.js 24.13.0 и Git; также проверены справка CLI T3 Code и запуск локального сервера. Задача ИИ провайдеру не отправлялась. Приведённое эталонное решение проверено напрямую; это не фактический вывод T3 Code и не измерение производительности модели.
Как T3 Code и провайдер распределяют обязанности?
T3 Code показывает проект и рабочую ветку диалога, выбор провайдера, запросы разрешений и изменения. Подключённый агент читает и изменяет файлы или выполняет команды. Сам факт вызова инструмента не означает, что тесты автоматически запущены и прошли: проверяйте команду и результат.
По руководству по установке установите нужного провайдера и выполните аутентификацию на компьютере, где работает сервер T3 Code. Упражнение начинается с выбора уже подготовленного провайдера. Вставлять учётные данные или API-ключи в запрос не нужно.
Подготовим небольшой Git-проект и падающие тесты
Сохраните три файла в новой папке t3-code-example. Тесты Node не используют внешние пакеты и вызовы API. Из двух форм Retry-After упражнение поддерживает только delay-seconds, целое число секунд. HTTP-date не входит в область и должен возвращать null. Полный синтаксис заголовка приведён в определении Retry-After в RFC 9110.
package.json
{
"name": "t3-code-retry-after-example",
"private": true,
"type": "module",
"engines": { "node": ">=24" },
"scripts": { "test": "node --test retry-after.test.mjs" }
}
retry-after.mjs
export function retryAfterMs(header) {
const seconds = Number.parseInt(header, 10);
return Number.isFinite(seconds) ? seconds * 1000 : null;
}
retry-after.test.mjs
import test from 'node:test';
import assert from 'node:assert/strict';
import { retryAfterMs } from './retry-after.mjs';
const cases = [
['2', 2000],
['0', 0],
[' 2 ', 2000],
['0002', 2000],
['', null],
[' ', null],
[undefined, null],
[null, null],
[2, null],
['0x10', null],
['2x', null],
['-1', null],
['1.5', null],
['1e3', null],
['Infinity', null],
['Wed, 21 Oct 2015 07:28:00 GMT', null],
['9007199254740', 9007199254740000],
['9007199254741', null],
['9007199254740991', null],
];
for (const [input, expected] of cases) {
test(`retryAfterMs(${JSON.stringify(input)})`, () => {
assert.equal(retryAfterMs(input), expected);
});
}
Выполните команды в папке проекта с заранее настроенным автором Git.
git init -b main
git add package.json retry-after.mjs retry-after.test.mjs
git commit -m "Add Retry-After exercise"
npm test
Проверено, что исходный код даёт 11 успешных и 8 неуспешных тестов из 19. Он принимает некоторые строки, начинающиеся с цифр, например parseInt('2x', 10), и неверно обрабатывает отрицательные, дробные и выходящие за безопасный диапазон значения. Красные тесты — исходное состояние упражнения.
Откройте проект и задайте область изменений
Для фиксации версии выполните команду ниже из папки проекта. --host ограничивает доступ локальными соединениями, а --auto-bootstrap-project-from-cwd добавляет текущую папку как проект. При первом запуске могут загрузиться npm-пакет и исполняемый файл.
npm exec --yes --package=t3@0.1.9 -- t3 \
--host 127.0.0.1 --auto-bootstrap-project-from-cwd .
CLI запускает локальный сервер и веб-приложение. Если сервер T3 Code уже используется, откройте проект в существующей среде. Установка настольного приложения и удалённый доступ описаны отдельно в инструкции для этой версии. Здесь фоновая служба и доступ из внешней сети не настраиваются.
Выберите папку проекта и диалог, затем установленного и авторизованного провайдера. Согласно документации диалогов, New worktree создаёт отдельную ветку и рабочую папку. Базовое упражнение предполагает существующий рабочий каталог подготовленного проекта. При выборе новой worktree последующие команды Git и npm также выполняйте там. Сначала проверьте путь и ветку диалога. В области ввода убедитесь, что выбран режим Supervised. Документация разрешений v0.1.9 указывает: исходное значение — Full access, а Supervised запрашивает подтверждение команд и изменений файлов. Разрешённые чтения и другие детали зависят от провайдера.
Отправьте этот запрос:
Сначала проверьте retry-after.mjs и retry-after.test.mjs.
Исправьте retryAfterMs(header) по следующему контракту:
- После удаления пробелов по краям принимайте только неотрицательные целые секунды из цифр ASCII.
- Верните миллисекунды; и секунды, и миллисекунды должны удовлетворять Number.isSafeInteger.
- Для пустого значения, нестрокового типа, отрицательных и дробных чисел, экспоненциальной записи, символов после цифр и значений за безопасным диапазоном верните null.
- HTTP-date не входит в область и должен возвращать null.
- Изменяйте только retry-after.mjs. Не меняйте тесты и package.json.
- Не устанавливайте зависимости, не отправляйте сетевые запросы, не выполняйте коммиты, push и не создавайте PR.
Проверьте через npm test и сообщите причину изменений, фактически выполненные команды и их результаты.
Явно укажите команды, которые выполнить не удалось.
При запросе подтверждения изменения файла или команды убедитесь, что действие необходимо, например изменение нужного файла или npm test. Указание области в запросе не заменяет разрешения инструмента. Здесь агенту не поручается коммит: решение принимаете вы после получения изменений и проверки.
Как убедиться, что «исправление завершено»?
Руководство T3 Code по проверке изменений различает изменённые файлы и diff отдельного хода и сравнение веток. Diff хода показывает только эту работу, поэтому перед слиянием сравните и с базовой веткой. Разверните вызовы тестов в диалоге, чтобы увидеть реальные команду, вывод и статус; их также можно повторить в терминале.
git rev-parse --show-toplevel
git diff --name-only
git diff -- retry-after.mjs
git diff --exit-code -- retry-after.test.mjs package.json
npm test
Должен измениться только retry-after.mjs. Если третья команда выводит изменения или завершается ошибкой, сначала выясните, почему изменились тесты или настройки. Успешный результат за счёт ослабления ожиданий теста не соответствует контракту. Для новых файлов также проверьте git status --short.
Если агент сообщает, что не смог запустить тесты, не считайте их пройденными: выполните npm test самостоятельно. Если ошибки остались, уточните вход, ожидаемое и фактическое значение в следующем запросе. Например: «0 должен давать 0ms, а '2x' — null. Сохраните тесты и снова проверьте оба случая».
Ниже приведена проверенная напрямую эталонная реализация. Сравните её с изменением агента после упражнения. Для запуска поместите этот код в retry-after.mjs в корне проекта.
reference/retry-after.mjs
export function retryAfterMs(header) {
if (typeof header !== 'string') return null;
const value = header.trim();
if (!/^[0-9]+$/.test(value)) return null;
const seconds = Number(value);
const milliseconds = seconds * 1000;
return Number.isSafeInteger(seconds) && Number.isSafeInteger(milliseconds)
? milliseconds
: null;
}
После замены исходного кода эталоном прошли все те же 19 тестов, а исходный файл тестов не изменился. Проверка безопасного диапазона целого числа и установка реального максимума ожидания повтора — разные задачи. Эта функция не выполняет ожидание и не является полным парсером HTTP-date; число повторов и общий бюджет времени реального клиента задаются отдельно.
Чтобы записать работу после проверки diff и тестов, добавьте в коммит только изменённый файл:
git add retry-after.mjs
git commit -m "Validate numeric Retry-After values"
По завершении остановите сервер переднего плана через Ctrl+C в терминале с T3 Code.
Что проверить, если начать не получается?
| Симптом | Первая проверка |
|---|---|
| Провайдер отсутствует или не запускается | Установка и PATH на серверном компьютере и настройки провайдера в Settings |
| Ошибка аутентификации | Аккаунт выбранного провайдера и вход на серверном компьютере |
| Изменения не видны в исходной папке | Использует ли диалог отдельную worktree и совпадает ли путь |
| Diff или функции веток недоступны | Является ли открытая папка Git-репозиторием и верен ли путь проекта |
| Тесты проходят, но изменения выходят за область | Diff и статус Git, включая тесты, настройки и дополнительные файлы |
Официальный README указывает, что проект находится на ранней стадии и может содержать ошибки. После обновления приложения или CLI провайдера небольшой контракт и процедура проверки помогают сравнивать результаты лучше, чем ожидание неизменного ответа на тот же запрос.
Обсуждение