@abelxiaoxing/cadence 2.0.17 → 2.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +106 -0
- package/README.es.md +106 -0
- package/README.fr.md +106 -0
- package/README.ja.md +127 -0
- package/README.ko.md +124 -0
- package/README.md +64 -709
- package/README.pt-BR.md +106 -0
- package/README.ru.md +107 -0
- package/README.zh-CN.md +106 -0
- package/THIRD_PARTY_NOTICES.md +0 -8
- package/docs/reuse-and-distribution.md +1 -24
- package/docs/service-management.md +8 -0
- package/package.json +9 -1
- package/src/service-host.mjs +34 -27
- package/web/dist/assets/cadence.js +9 -9
- package/web/dist/manifest.json +4 -4
- package/licenses/pi-web-ui-reuse.md +0 -24
package/README.pt-BR.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Cadence
|
|
2
|
+
|
|
3
|
+
[English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Deutsch](README.de.md) · [Français](README.fr.md) · [Español](README.es.md) · [Português (Brasil)](README.pt-BR.md) · [Русский](README.ru.md)
|
|
4
|
+
|
|
5
|
+
O Cadence transforma o [Pi](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) em um espaço de trabalho de tarefas persistente.
|
|
6
|
+
Planeje uma tarefa de código, deixe os subagentes trabalharem nela, execute suas verificações e revise o resultado no terminal do Pi (`/cadence`) ou na interface web do navegador; ambos se conectam ao mesmo serviço em segundo plano.
|
|
7
|
+
|
|
8
|
+
## Por que o Cadence
|
|
9
|
+
|
|
10
|
+
- **O trabalho sobrevive à janela.**
|
|
11
|
+
As tarefas rodam em um serviço em segundo plano: fechar o terminal, sair do Pi ou deixar a aba do navegador apenas desconecta, e qualquer cliente pode se reconectar à mesma execução.
|
|
12
|
+
- **Nada é editado antes de você aprovar.**
|
|
13
|
+
Uma tarefa primeiro analisa em somente leitura e propõe um plano legível; os arquivos mudam apenas depois que você confirma esse plano exato.
|
|
14
|
+
- **Resultados nos quais você pode confiar.**
|
|
15
|
+
A saída dos subagentes, as execuções reais de verificação e a sua própria revisão permanecem separadas: a prosa do modelo ou um "Done" nunca contam como verificação aprovada, e resultados com falha, cancelados e desconhecidos permanecem distintos.
|
|
16
|
+
- **Histórico completo.**
|
|
17
|
+
Cada execução mantém suas mensagens, chamadas de ferramentas e saídas, com busca exata e exportação completa em Markdown/NDJSON; segredos conhecidos são redigidos.
|
|
18
|
+
- **Um link para tudo.**
|
|
19
|
+
A interface web (desktop e celular, inglês e chinês simplificado) também hospeda conversas comuns do Pi e alterna entre projetos, cada um com seu próprio owner e histórico.
|
|
20
|
+
|
|
21
|
+
O Cadence é um assistente confiável, **não uma caixa de areia**: seus agentes editam sua cópia de trabalho diretamente com as ferramentas do host, então use-o apenas em código que você possa revisar e recuperar.
|
|
22
|
+
|
|
23
|
+
## Instalação
|
|
24
|
+
|
|
25
|
+
Você precisa de Node `>=22.19.0` com npm, e do Pi instalado e conectado a um provedor de modelos; o Cadence reutiliza o login e as configurações de modelos do Pi.
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npm install -g @abelxiaoxing/cadence
|
|
29
|
+
cadence server install
|
|
30
|
+
pi install "$(npm root -g)/@abelxiaoxing/cadence"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`cadence server install` registra e inicia um serviço em segundo plano (systemd no Linux, um LaunchAgent no macOS, uma entrada de login no Windows) e imprime um link privado, `http://127.0.0.1:17423/?token=…`.
|
|
34
|
+
O último comando permite que o Pi carregue a mesma cópia para o `/cadence`, então um único upgrade do npm atualiza ambos.
|
|
35
|
+
A porta e o token ficam em `~/.pi/agent/cadence/.env`; qualquer pessoa com o token pode usar seu espaço de trabalho, então mantenha o link privado.
|
|
36
|
+
|
|
37
|
+
## Uso
|
|
38
|
+
|
|
39
|
+
### No navegador
|
|
40
|
+
|
|
41
|
+
1. Abra o link impresso uma vez; o navegador então se lembra de você.
|
|
42
|
+
Se você o perder, `cadence token-link --reveal` o imprime de novo.
|
|
43
|
+
2. Escolha uma pasta de projeto com o botão de pasta no canto inferior direito, e escolha um modelo.
|
|
44
|
+
3. Envie uma mensagem para uma conversa comum, ou comece com `cadence <goal>` (ou selecione Tarefa Cadence) para criar uma tarefa.
|
|
45
|
+
4. Quando a análise propuser um plano, abra **Revisar plano de implementação** e escolha **Confirmar plano e executar**.
|
|
46
|
+
5. Acompanhe os subagentes no dock no canto inferior esquerdo; verificações, alterações e revisão ficam sob **Detalhes da tarefa** à direita.
|
|
47
|
+
|
|
48
|
+
### No terminal
|
|
49
|
+
|
|
50
|
+
No TUI do Pi, digite `/cadence [goal]` e pressione Enter você mesmo; entrada colada ou via script não o abre.
|
|
51
|
+
Escolha um modelo, crie ou abra uma tarefa, edite seu plano e confirme Start; os menus também mostram subagentes, verificações, alterações, revisão e histórico.
|
|
52
|
+
|
|
53
|
+
Cada sessão do Pi também mostra agentes em segundo plano em execução acima da entrada: pressione ↓ em uma entrada vazia para selecionar um e Enter para ler sua transcrição (`CADENCE_AGENT_PANEL=off` oculta o painel).
|
|
54
|
+
|
|
55
|
+
### Mais projetos
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
cadence project open /absolute/project
|
|
59
|
+
cadence project open /absolute/new-project --create
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Cada projeto recebe seu próprio owner, porta e histórico, e o comando imprime seu link privado; o seletor de pastas da interface web abre projetos da mesma maneira.
|
|
63
|
+
Abrir outro projeto nunca interrompe o trabalho no anterior.
|
|
64
|
+
|
|
65
|
+
### Verificações
|
|
66
|
+
|
|
67
|
+
Liste os comandos que verificam seu projeto em `.cadence/assistant/config.json`, e as tarefas podem executá-los como verificações reais antes da revisão:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"schema": "cadence-assistant-checks/1",
|
|
72
|
+
"checks": [{ "name": "Tests", "command": "bun run test", "timeoutMs": 120000 }]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Gerenciar o serviço
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
cadence server status
|
|
80
|
+
cadence server restart # após um upgrade ou uma alteração de .env / models.json
|
|
81
|
+
cadence server stop # permanece registrado e inicia de novo no próximo boot ou login
|
|
82
|
+
cadence server uninstall # executar antes de npm uninstall -g
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Faça upgrade com `npm install -g @abelxiaoxing/cadence@latest`, depois `cadence server restart`.
|
|
86
|
+
Restart, stop e uninstall param o trabalho em execução em ordem, em vez de deixá-lo desconectado.
|
|
87
|
+
Uninstall remove apenas a definição do serviço; projetos, histórico e configurações do Pi permanecem.
|
|
88
|
+
Serviços root e nomeados do Linux, acesso HTTPS remoto e recuperação estão cobertos em [gerenciamento do serviço](docs/service-management.md) e [acesso remoto](docs/remote-access.md).
|
|
89
|
+
|
|
90
|
+
## Desenvolvimento
|
|
91
|
+
|
|
92
|
+
O Pi também pode carregar um checkout local ou um tarball empacotado: adicione seu caminho absoluto ou relativo aos `packages` do Pi, ou experimente `pi -e ./cadence`.
|
|
93
|
+
O Cadence não impõe uma faixa de versões do Pi; fixações de desenvolvimento e tempos de execução testados não são promessas universais de compatibilidade.
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
bun install
|
|
97
|
+
CADENCE_BROWSER_PATH=/absolute/existing/chromium bun run verify
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
As orientações de engenharia são divididas por área sob [engineering/](engineering/); o índice do projeto em [AGENTS.md](AGENTS.md) diz qual arquivo cobre qual código.
|
|
101
|
+
`verify` também precisa de um build oficial do Node, um diretório temporário privado e um Chromium existente; veja [verificação](engineering/verification.md).
|
|
102
|
+
|
|
103
|
+
## Licença
|
|
104
|
+
|
|
105
|
+
O Cadence é MIT.
|
|
106
|
+
Adaptações, fontes e vendors incluídos mantêm suas próprias licenças; veja [reutilização e distribuição](docs/reuse-and-distribution.md) e [avisos de terceiros](THIRD_PARTY_NOTICES.md).
|
package/README.ru.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Cadence
|
|
2
|
+
|
|
3
|
+
[English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Deutsch](README.de.md) · [Français](README.fr.md) · [Español](README.es.md) · [Português (Brasil)](README.pt-BR.md) · [Русский](README.ru.md)
|
|
4
|
+
|
|
5
|
+
Cadence превращает [Pi](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) в постоянное рабочее пространство задач.
|
|
6
|
+
Спланируйте задачу по коду, позвольте субагентам работать над ней, запустите свои проверки и просмотрите результат в терминале Pi (`/cadence`) или в веб-интерфейсе браузера; оба подключаются к одной фоновой службе.
|
|
7
|
+
|
|
8
|
+
## Почему Cadence
|
|
9
|
+
|
|
10
|
+
- **Работа живёт дольше окна.**
|
|
11
|
+
Задачи выполняются в фоновой службе: закрытие терминала, выход из Pi или уход со вкладки браузера лишь отключают подключение, и любой клиент может повторно подключиться к тому же запуску.
|
|
12
|
+
- **Ничего не редактируется до вашего одобрения.**
|
|
13
|
+
Задача сначала анализирует в режиме только для чтения и предлагает читаемый план; файлы меняются только после того, как вы подтвердите именно этот план.
|
|
14
|
+
- **Результатам можно доверять.**
|
|
15
|
+
Вывод субагентов, фактические запуски проверок и ваш собственный обзор остаются разделёнными: текст модели или «Done» никогда не считаются пройденной проверкой, а неудачные, отменённые и неизвестные исходы остаются различимыми.
|
|
16
|
+
- **Полная история.**
|
|
17
|
+
Каждый запуск сохраняет свои сообщения, вызовы инструментов и выводы, с точным поиском и полным экспортом в Markdown/NDJSON; известные секреты скрываются.
|
|
18
|
+
- **Одна ссылка на всё.**
|
|
19
|
+
Веб-интерфейс (десктоп и телефон, английский и упрощённый китайский) также принимает обычные разговоры Pi и переключается между проектами, у каждого из которых свой owner и своя история.
|
|
20
|
+
|
|
21
|
+
Cadence — это доверенный ассистент, **а не песочница**: его агенты редактируют вашу рабочую копию напрямую инструментами хоста, поэтому используйте его только для кода, который вы можете просмотреть и восстановить.
|
|
22
|
+
|
|
23
|
+
## Установка
|
|
24
|
+
|
|
25
|
+
Нужен Node `>=22.19.0` с npm, и установленный Pi, вошедший в учётную запись провайдера моделей; Cadence переиспользует вход и настройки моделей Pi.
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npm install -g @abelxiaoxing/cadence
|
|
29
|
+
cadence server install
|
|
30
|
+
pi install "$(npm root -g)/@abelxiaoxing/cadence"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`cadence server install` регистрирует и запускает фоновую службу (systemd на Linux, LaunchAgent на macOS, элемент автозагрузки на Windows) и печатает приватную ссылку, `http://127.0.0.1:17423/?token=…`.
|
|
34
|
+
Последняя команда позволяет Pi загрузить ту же копию для `/cadence`, так что одно обновление npm обновляет обе.
|
|
35
|
+
Порт и токен хранятся в `~/.pi/agent/cadence/.env`; любой, у кого есть токен, может использовать ваше рабочее пространство, поэтому держите ссылку в секрете.
|
|
36
|
+
|
|
37
|
+
## Использование
|
|
38
|
+
|
|
39
|
+
### В браузере
|
|
40
|
+
|
|
41
|
+
1. Откройте напечатанную ссылку один раз; затем браузер запомнит вас.
|
|
42
|
+
Если вы её потеряете, `cadence token-link --reveal` печатает её снова.
|
|
43
|
+
2. Выберите папку проекта кнопкой папки в правом нижнем углу и выберите модель.
|
|
44
|
+
3. Отправьте сообщение для обычного разговора, или начните его с `cadence <goal>` (или выберите «Задача Cadence»), чтобы создать задачу.
|
|
45
|
+
4. Когда анализ предложит план, откройте **Просмотр плана реализации** и выберите **Подтвердить план и выполнить**.
|
|
46
|
+
5. Следите за субагентами в доке слева внизу; проверки, изменения и обзор находятся под **Детали задачи** справа.
|
|
47
|
+
|
|
48
|
+
### В терминале
|
|
49
|
+
|
|
50
|
+
В TUI Pi введите `/cadence [goal]` сами и нажмите Enter; вставленный или скриптовый ввод не откроет его.
|
|
51
|
+
Выберите модель, создайте или откройте задачу, отредактируйте её план и подтвердите Start; в меню также показываются субагенты, проверки, изменения, обзор и история.
|
|
52
|
+
|
|
53
|
+
Каждый сеанс Pi также показывает работающие фоновые агенты над вводом: нажмите ↓ на пустом вводе, чтобы выбрать один, и Enter, чтобы прочитать его транскрипт (`CADENCE_AGENT_PANEL=off` скрывает панель).
|
|
54
|
+
|
|
55
|
+
### Другие проекты
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
cadence project open /absolute/project
|
|
59
|
+
cadence project open /absolute/new-project --create
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Каждый проект получает своего owner, порт и историю, и команда печатает его приватную ссылку; выборщик папок веб-интерфейса открывает проекты тем же способом.
|
|
63
|
+
Открытие другого проекта никогда не останавливает работу в предыдущем.
|
|
64
|
+
|
|
65
|
+
### Проверки
|
|
66
|
+
|
|
67
|
+
Перечислите команды, которые проверяют ваш проект, в `.cadence/assistant/config.json`, и задачи могут выполнять их как реальные проверки перед обзором:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"schema": "cadence-assistant-checks/1",
|
|
72
|
+
"checks": [{ "name": "Tests", "command": "bun run test", "timeoutMs": 120000 }]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Управление службой
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
cadence server status
|
|
80
|
+
cadence server restart # после обновления или изменения .env / models.json
|
|
81
|
+
cadence server stop # остаётся зарегистрированной и снова запускается при следующей загрузке или входе
|
|
82
|
+
cadence server uninstall # выполнить перед npm uninstall -g
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Обновляйте с помощью `npm install -g @abelxiaoxing/cadence@latest`, затем `cadence server restart`.
|
|
86
|
+
Restart, stop и uninstall останавливают выполняемую работу по порядку, а не оставляют её отключённой.
|
|
87
|
+
Uninstall удаляет только определение службы; проекты, история и настройки Pi остаются.
|
|
88
|
+
Корневые и именованные службы Linux, удалённый HTTPS-доступ и восстановление описаны в [управлении службой](docs/service-management.md) и [удалённом доступе](docs/remote-access.md).
|
|
89
|
+
|
|
90
|
+
## Разработка
|
|
91
|
+
|
|
92
|
+
Pi также может загрузить локальный checkout или упакованный tarball: добавьте его абсолютный или относительный путь в `packages` Pi, или попробуйте `pi -e ./cadence`.
|
|
93
|
+
Cadence не налагает диапазон версий Pi; фиксированные версии разработки и протестированные среды выполнения не являются универсальными обещаниями совместимости.
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
bun install
|
|
97
|
+
CADENCE_BROWSER_PATH=/absolute/existing/chromium bun run verify
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Инженерные указания разделены по областям в [engineering/](engineering/).
|
|
101
|
+
Индекс проекта в [AGENTS.md](AGENTS.md) указывает, какой файл покрывает какой код.
|
|
102
|
+
`verify` также требует официального сборки Node, приватного временного каталога и существующего Chromium, подробности — в [верификация](engineering/verification.md).
|
|
103
|
+
|
|
104
|
+
## Лицензия
|
|
105
|
+
|
|
106
|
+
Cadence распространяется по MIT.
|
|
107
|
+
Включённые адаптации, шрифты и поставщики сохраняют свои собственные лицензии, обратитесь к [повторное использование и распространение](docs/reuse-and-distribution.md) и [уведомления о сторонних компонентах](THIRD_PARTY_NOTICES.md).
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Cadence
|
|
2
|
+
|
|
3
|
+
[English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Deutsch](README.de.md) · [Français](README.fr.md) · [Español](README.es.md) · [Português (Brasil)](README.pt-BR.md) · [Русский](README.ru.md)
|
|
4
|
+
|
|
5
|
+
Cadence 把 [Pi](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) 变成一个持久的任务工作区。
|
|
6
|
+
规划一个代码任务,让子代理去执行,运行你自己的检查,再从 Pi 终端(`/cadence`)或浏览器 WebUI 审阅结果;两者连接到同一个后台服务。
|
|
7
|
+
|
|
8
|
+
## 为什么选择 Cadence
|
|
9
|
+
|
|
10
|
+
- **工作不随窗口结束。**
|
|
11
|
+
任务运行在后台服务中:关闭终端、退出 Pi 或离开浏览器标签页只是断开连接,任一客户端都能重新连接同一次运行。
|
|
12
|
+
- **批准之前不会修改任何文件。**
|
|
13
|
+
任务先只读分析并提出一个可读的计划;只有在你确认那个确切计划之后,文件才会被修改。
|
|
14
|
+
- **结果可信。**
|
|
15
|
+
子代理输出、真实的检查运行和你自己的审阅彼此独立:模型的文字或一句“Done”都不算检查通过,失败、取消和未知结果保持相互区分。
|
|
16
|
+
- **完整历史。**
|
|
17
|
+
每次运行都保留其消息、工具调用和输出,支持精确搜索与完整的 Markdown/NDJSON 导出;已知的秘密会被脱敏。
|
|
18
|
+
- **一个链接涵盖一切。**
|
|
19
|
+
WebUI(桌面和手机,英文与简体中文)还承载普通的 Pi 对话,并可在项目间切换,每个项目都有自己的 owner 和历史。
|
|
20
|
+
|
|
21
|
+
Cadence 是一个受信任的助手,**不是沙箱**:它的代理用宿主工具直接编辑你的工作副本,所以请只在你能够审阅和恢复的代码上使用它。
|
|
22
|
+
|
|
23
|
+
## 安装
|
|
24
|
+
|
|
25
|
+
你需要带 npm 的 Node `>=22.19.0`,以及已安装并登录到模型提供方的 Pi;Cadence 复用 Pi 的登录和模型设置。
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npm install -g @abelxiaoxing/cadence
|
|
29
|
+
cadence server install
|
|
30
|
+
pi install "$(npm root -g)/@abelxiaoxing/cadence"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`cadence server install` 注册并启动一个后台服务(Linux 上是 systemd,macOS 上是 LaunchAgent,Windows 上是登录项),并打印一个私有链接 `http://127.0.0.1:17423/?token=…`。
|
|
34
|
+
最后一条命令让 Pi 加载同一份副本用于 `/cadence`,因此一次 npm 升级就同时更新两者。
|
|
35
|
+
端口和 token 保存在 `~/.pi/agent/cadence/.env`;任何持有 token 的人都可以使用你的工作区,所以请保持链接私密。
|
|
36
|
+
|
|
37
|
+
## 使用
|
|
38
|
+
|
|
39
|
+
### 在浏览器中
|
|
40
|
+
|
|
41
|
+
1. 打开一次打印出的链接;浏览器之后会记住你。
|
|
42
|
+
如果丢失了链接,`cadence token-link --reveal` 会再次打印它。
|
|
43
|
+
2. 用右下角的文件夹按钮选择项目文件夹,并选择模型。
|
|
44
|
+
3. 发送一条消息进行普通对话,或以 `cadence <goal>` 开头(或选择“Cadence 任务”)创建任务。
|
|
45
|
+
4. 当分析提出计划时,打开**查看实施计划**,选择**确认计划并执行**。
|
|
46
|
+
5. 在左下角的 dock 中查看子代理;检查、变更和审阅在右侧的**任务详情**下。
|
|
47
|
+
|
|
48
|
+
### 在终端中
|
|
49
|
+
|
|
50
|
+
在 Pi 的 TUI 里,自己输入 `/cadence [goal]` 并按回车;粘贴或脚本输入不会打开它。
|
|
51
|
+
选择模型,创建或打开任务,编辑其计划并确认 Start;菜单还会显示子代理、检查、变更、审阅和历史。
|
|
52
|
+
|
|
53
|
+
每个 Pi 会话还在输入框上方显示运行中的后台代理:在空输入框上按 ↓ 选择一个,再按 Enter 阅读其记录(`CADENCE_AGENT_PANEL=off` 可隐藏该面板)。
|
|
54
|
+
|
|
55
|
+
### 更多项目
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
cadence project open /absolute/project
|
|
59
|
+
cadence project open /absolute/new-project --create
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
每个项目都有自己的 owner、端口和历史,命令会打印其私有链接;WebUI 的文件夹选择器以相同方式打开项目。
|
|
63
|
+
打开另一个项目永远不会停止之前项目中的工作。
|
|
64
|
+
|
|
65
|
+
### 检查
|
|
66
|
+
|
|
67
|
+
在 `.cadence/assistant/config.json` 中列出验证你项目的命令,任务就可以在审阅前作为真实检查运行它们:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"schema": "cadence-assistant-checks/1",
|
|
72
|
+
"checks": [{ "name": "Tests", "command": "bun run test", "timeoutMs": 120000 }]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 管理服务
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
cadence server status
|
|
80
|
+
cadence server restart # 升级或修改 .env / models.json 之后
|
|
81
|
+
cadence server stop # 保持注册状态,并在下次启动或登录时再次启动
|
|
82
|
+
cadence server uninstall # 在 npm uninstall -g 之前运行
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
用 `npm install -g @abelxiaoxing/cadence@latest` 升级,然后 `cadence server restart`。
|
|
86
|
+
restart、stop 和 uninstall 按顺序停止运行中的工作,而不是留下断开连接的工作。
|
|
87
|
+
uninstall 只删除服务定义;项目、历史和 Pi 设置保留。
|
|
88
|
+
Linux root 与命名服务、远程 HTTPS 访问和恢复见[服务管理](docs/service-management.md)和[远程访问](docs/remote-access.md)。
|
|
89
|
+
|
|
90
|
+
## 开发
|
|
91
|
+
|
|
92
|
+
Pi 也可以加载本地 checkout 或打包的 tarball:把其绝对或相对路径加到 Pi 的 `packages`,或试试 `pi -e ./cadence`。
|
|
93
|
+
Cadence 不指定 Pi 版本范围;开发用的固定版本和已测试运行时不是通用的兼容性承诺。
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
bun install
|
|
97
|
+
CADENCE_BROWSER_PATH=/absolute/existing/chromium bun run verify
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
工程指导按领域拆分在 [engineering/](engineering/) 下;[AGENTS.md](AGENTS.md) 中的项目索引说明了哪个文件覆盖哪部分代码。
|
|
101
|
+
`verify` 还需要官方 Node 构建、私有临时目录和已有的 Chromium;见[验证](engineering/verification.md)。
|
|
102
|
+
|
|
103
|
+
## 许可证
|
|
104
|
+
|
|
105
|
+
Cadence 采用 MIT。
|
|
106
|
+
捆绑的适配代码、字体和厂商保留各自许可证;见[复用与分发](docs/reuse-and-distribution.md)和[第三方声明](THIRD_PARTY_NOTICES.md)。
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -11,14 +11,6 @@ The complete MIT license text of the referenced package is bundled at `licenses/
|
|
|
11
11
|
| FIFO settlement of queued work | gotgenes/pi-packages @ a1ee2255 | packages/pi-subagents (state/queue semantics) |
|
|
12
12
|
| Cancellation cleanup and born-complete disposal | gotgenes/pi-packages @ a1ee2255 | packages/pi-subagents (session lifecycle) |
|
|
13
13
|
|
|
14
|
-
## pi-web-ui workspace and authentication adaptation
|
|
15
|
-
|
|
16
|
-
Cadence directly adapts token digest comparison, cookie encoding/decoding, bootstrap and pre-upgrade authorization patterns from `xing-shuyin/pi-web-ui`, commit `e8bab487af208bc9a1ab60a821652323f598127f`, copyright 2026 xing-shuyin (MIT).
|
|
17
|
-
The source/destination inventory and deliberate security changes are recorded in `provenance/auth-reuse.json`.
|
|
18
|
-
The complete upstream notice is preserved at `licenses/pi-web-ui-MIT.txt`.
|
|
19
|
-
The substantial workspace/navigation/transcript/tool/Markdown/review/search/timeline/responsive/reconciliation adaptations are inventoried in `provenance/webui-reuse.json` and summarized in shipped `docs/reuse-and-distribution.md`.
|
|
20
|
-
The ordinary-chat composer, directory picker, readonly file browser and agent-dock presentation additionally reference pi-web-ui revision `944f556463d6693a3f0cfe375c22680090e85bbe`, under the same retained MIT notice; its subagent/goal/delegate engines and prompt composer are not included.
|
|
21
|
-
|
|
22
14
|
## Bundled browser dependencies, icons and fonts
|
|
23
15
|
|
|
24
16
|
`licenses/bundled-web.txt` preserves the full actual emitted dependency notices, including React/DOM/scheduler, react-icons and Feather, unified/Markdown/HTML utilities, highlight.js, KaTeX and vis-timeline's embedded vendor versions.
|
|
@@ -1,28 +1,5 @@
|
|
|
1
1
|
# Reuse and Distribution
|
|
2
2
|
|
|
3
|
-
## Source families
|
|
4
|
-
|
|
5
|
-
Cadence adapts `xing-shuyin/pi-web-ui@e8bab487af208bc9a1ab60a821652323f598127f`, MIT copyright 2026 xing-shuyin.
|
|
6
|
-
The ordinary-chat composer, folder picker and file/dock presentation additionally reference sibling revision `944f556463d6693a3f0cfe375c22680090e85bbe`; the separate reference hashes are retained alongside the original pins.
|
|
7
|
-
The full original license is `licenses/pi-web-ui-MIT.txt`.
|
|
8
|
-
Repository `provenance/webui-reuse.json` records source/destination hashes and explicit incompatible branches removed; `provenance/auth-reuse.json` records token/cookie adaptation.
|
|
9
|
-
|
|
10
|
-
| Source family | Package adaptation |
|
|
11
|
-
| ------------------------------------ | ------------------------------------------------------------------------ |
|
|
12
|
-
| App, TopBar, panels, layout, drawers | Conversation-first workspace, project/session sidebar and phone drawers |
|
|
13
|
-
| conv-groups, PlanBoard | Active/history task and subagent tree, finite graph and explicit consent |
|
|
14
|
-
| MessageList, Message, ToolCallBlock | Default Markdown transcript, folded metadata and bounded retained detail |
|
|
15
|
-
| Markdown, StreamMarkdown, copy | Sanitized Markdown/math/code, no script/external-image execution |
|
|
16
|
-
| FilePreview, SCM presentation | Readonly observed changes, no Git/file mutation API |
|
|
17
|
-
| GlobalSearchModal, search, deep link | Literal durable search, exact versioned hits and scoped export |
|
|
18
|
-
| Standalone run-trace client | Local vis timeline/filter/replay of observations, never execution |
|
|
19
|
-
| use-chat, message-delta | Shared typed reconciliation, gaps/resync and no mutation replay |
|
|
20
|
-
| Token/cookie and upgrade guards | Cookie-first authenticated HTTP/WS, explicit Host/Origin/CSRF boundaries |
|
|
21
|
-
|
|
22
|
-
No upstream chat/subagent runtime, goal/delegate loop, PTY, plugin loader, browser shell, credentials editor, prompt composer, reconnect replay or task repair ships.
|
|
23
|
-
Cadence owns ordinary conversations separately, using its existing native launcher, exact model/auth resolution and checkout gate; its finite task admission/history contracts remain unchanged.
|
|
24
|
-
Readonly file browsing and explicit independent project opening are new Cadence service operations, not upstream filesystem mutation or global `set_cwd` routes.
|
|
25
|
-
|
|
26
3
|
## Emitted licenses
|
|
27
4
|
|
|
28
5
|
`licenses/bundled-web.txt` contains full original notices with stable labeled boundaries: React/DOM/scheduler; react-icons and the selected Feather family; unified/Markdown/HTML utilities; highlight.js; KaTeX code; vis-timeline and the versions actually embedded by its standalone build.
|
|
@@ -48,7 +25,7 @@ No version bump, dependency install or publication is implied by this redesign.
|
|
|
48
25
|
|
|
49
26
|
## Unified entry without a default workspace
|
|
50
27
|
|
|
51
|
-
`web/src/Workbench.tsx` composes the project selector and existing project UI without importing
|
|
28
|
+
`web/src/Workbench.tsx` composes the project selector and existing project UI without importing the upstream session/execution service.
|
|
52
29
|
The Cadence-owned gateway uses the existing authentication, public codecs, private-files discipline and independently coordinated project owners.
|
|
53
30
|
The no-project entry never initializes an SDK session, manufactures a checkout, creates `~/cadence`, or repairs a missing project directory.
|
|
54
31
|
A technical service-process cwd is not a model/tool workspace.
|
|
@@ -114,6 +114,14 @@ It is a warning rather than part of the info card because Pi's TUI replaces one
|
|
|
114
114
|
`/cadence` names the same command when it finds no owner.
|
|
115
115
|
A machine without a supported user service manager and `CADENCE_AUTOSTART=0` keep both quiet; with `CADENCE_LINGER=0` they suggest `--no-linger`.
|
|
116
116
|
|
|
117
|
+
### One copy for Pi and the service
|
|
118
|
+
|
|
119
|
+
After `npm install -g`, `pi install "$(npm root -g)/@abelxiaoxing/cadence"` records that path and loads it in place, so an npm upgrade updates the service and native `/cadence` together.
|
|
120
|
+
Pi's own package install (`pi install npm:@abelxiaoxing/cadence`) also loads the native client, but its copy puts no `cadence` on `PATH`; register its service with `node ~/.pi/agent/npm/node_modules/@abelxiaoxing/cadence/src/service-cli.mjs server install`.
|
|
121
|
+
Keep one copy: two copies drift apart on upgrade, and a native client refuses an owner whose service contract differs from its own.
|
|
122
|
+
A unit registered by an earlier version's Pi install hook keeps running; `cadence server restart` from the copy you keep rewrites it, and `pi update` no longer restarts it.
|
|
123
|
+
Opening the private link once leaves an HttpOnly cookie in that browser; the address without the token only explains how to get the link.
|
|
124
|
+
|
|
117
125
|
### Port and token
|
|
118
126
|
|
|
119
127
|
The background service reads two lines of the research configuration `~/.pi/agent/cadence/.env`:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abelxiaoxing/cadence",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.18",
|
|
4
4
|
"description": "Shared Pi task workspace: native terminal and WebUI, persistent service, checks and human review.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -58,6 +58,14 @@
|
|
|
58
58
|
"web/dist",
|
|
59
59
|
"docs",
|
|
60
60
|
"README.md",
|
|
61
|
+
"README.de.md",
|
|
62
|
+
"README.es.md",
|
|
63
|
+
"README.fr.md",
|
|
64
|
+
"README.ja.md",
|
|
65
|
+
"README.ko.md",
|
|
66
|
+
"README.pt-BR.md",
|
|
67
|
+
"README.ru.md",
|
|
68
|
+
"README.zh-CN.md",
|
|
61
69
|
"LICENSE",
|
|
62
70
|
"THIRD_PARTY_NOTICES.md",
|
|
63
71
|
"licenses",
|
package/src/service-host.mjs
CHANGED
|
@@ -21038,7 +21038,8 @@ import { createHash as createHash21 } from "node:crypto";
|
|
|
21038
21038
|
import { lstatSync as lstatSync12, readdirSync as readdirSync3, readlinkSync } from "node:fs";
|
|
21039
21039
|
import { join as join19, relative as relative7 } from "node:path";
|
|
21040
21040
|
var admin = (path) => path === ".cadence/assistant/tasks" || path.startsWith(".cadence/assistant/tasks/");
|
|
21041
|
-
|
|
21041
|
+
var GIT_OUTPUT_BYTES = 16 * 1024 * 1024;
|
|
21042
|
+
function captureChanges(root, outputBytes = GIT_OUTPUT_BYTES) {
|
|
21042
21043
|
const deadline = Date.now() + 3000;
|
|
21043
21044
|
const hash3 = createHash21("sha256");
|
|
21044
21045
|
const parts = [];
|
|
@@ -21050,24 +21051,25 @@ function captureChanges(root) {
|
|
|
21050
21051
|
hash3.update(label).update("\x00").update(data2).update("\x00");
|
|
21051
21052
|
};
|
|
21052
21053
|
const git = (args) => {
|
|
21053
|
-
|
|
21054
|
-
|
|
21055
|
-
|
|
21056
|
-
|
|
21057
|
-
|
|
21058
|
-
|
|
21059
|
-
|
|
21060
|
-
|
|
21061
|
-
|
|
21062
|
-
|
|
21063
|
-
|
|
21064
|
-
|
|
21065
|
-
|
|
21066
|
-
|
|
21067
|
-
|
|
21068
|
-
limits.push(`Unavailable/limited Git observation: ${args[0]}`);
|
|
21054
|
+
let outcome;
|
|
21055
|
+
if (Date.now() >= deadline)
|
|
21056
|
+
outcome = "time budget exhausted";
|
|
21057
|
+
else {
|
|
21058
|
+
const result = spawnSync2("git", gitArguments(["-c", "core.quotepath=true", ...args]), {
|
|
21059
|
+
cwd: root,
|
|
21060
|
+
encoding: "buffer",
|
|
21061
|
+
timeout: Math.max(1, deadline - Date.now()),
|
|
21062
|
+
maxBuffer: outputBytes,
|
|
21063
|
+
windowsHide: true,
|
|
21064
|
+
env: gitEnvironment()
|
|
21065
|
+
});
|
|
21066
|
+
if (!result.error && result.status === 0)
|
|
21067
|
+
return { stdout: result.stdout, limited: false };
|
|
21068
|
+
outcome = result.error ? result.error.code ?? "error" : result.signal ? `signal ${result.signal}` : `exit ${result.status}`;
|
|
21069
21069
|
}
|
|
21070
|
-
|
|
21070
|
+
complete = false;
|
|
21071
|
+
limits.push(`Unavailable/limited Git observation: ${args[0]} (${outcome})`);
|
|
21072
|
+
return { stdout: Buffer.from(`[limited: ${outcome}]`), limited: true };
|
|
21071
21073
|
};
|
|
21072
21074
|
const inventory = (name) => {
|
|
21073
21075
|
if (admin(name))
|
|
@@ -21120,7 +21122,7 @@ function captureChanges(root) {
|
|
|
21120
21122
|
":(exclude).cadence/assistant/tasks/**"
|
|
21121
21123
|
];
|
|
21122
21124
|
const head = git(["rev-parse", "--verify", "HEAD"]);
|
|
21123
|
-
add("HEAD", head.stdout
|
|
21125
|
+
add("HEAD", head.stdout);
|
|
21124
21126
|
for (const [label, args] of [
|
|
21125
21127
|
[
|
|
21126
21128
|
"Status (includes pre-existing dirt)",
|
|
@@ -21156,15 +21158,14 @@ function captureChanges(root) {
|
|
|
21156
21158
|
]
|
|
21157
21159
|
]
|
|
21158
21160
|
]) {
|
|
21159
|
-
const
|
|
21160
|
-
const data2 = result.stdout ?? Buffer.alloc(0);
|
|
21161
|
+
const data2 = git([...args]).stdout;
|
|
21161
21162
|
add(label, data2);
|
|
21162
21163
|
parts.push(`## ${label}
|
|
21163
21164
|
${data2.toString("utf8")}`);
|
|
21164
21165
|
}
|
|
21165
21166
|
const index = git(["ls-files", "--stage", "-z", ...pathspec]);
|
|
21166
|
-
add("Index entries", index.stdout
|
|
21167
|
-
for (const entry of
|
|
21167
|
+
add("Index entries", index.stdout);
|
|
21168
|
+
for (const entry of index.stdout.toString("utf8").split("\x00")) {
|
|
21168
21169
|
if (!entry.startsWith("160000 "))
|
|
21169
21170
|
continue;
|
|
21170
21171
|
complete = false;
|
|
@@ -21178,19 +21179,25 @@ ${data2.toString("utf8")}`);
|
|
|
21178
21179
|
...pathspec
|
|
21179
21180
|
]);
|
|
21180
21181
|
parts.push("## Untracked identities (content not automatically sent to model)");
|
|
21181
|
-
|
|
21182
|
-
|
|
21182
|
+
if (untracked.limited)
|
|
21183
|
+
add("Untracked", untracked.stdout);
|
|
21184
|
+
else
|
|
21185
|
+
for (const name of untracked.stdout.toString("utf8").split("\x00").filter(Boolean))
|
|
21186
|
+
inventory(name);
|
|
21183
21187
|
const ignored = git([
|
|
21184
21188
|
"ls-files",
|
|
21185
21189
|
"--others",
|
|
21186
21190
|
"--ignored",
|
|
21187
21191
|
"--exclude-standard",
|
|
21192
|
+
"--directory",
|
|
21193
|
+
"--no-empty-directory",
|
|
21188
21194
|
"-z",
|
|
21189
21195
|
...pathspec
|
|
21190
21196
|
]);
|
|
21191
|
-
if (ignored.stdout
|
|
21197
|
+
if (ignored.stdout.length) {
|
|
21192
21198
|
complete = false;
|
|
21193
|
-
|
|
21199
|
+
if (!ignored.limited)
|
|
21200
|
+
limits.push("Ignored files exist and are not inspected; review coverage is incomplete.");
|
|
21194
21201
|
add("ignored paths", ignored.stdout);
|
|
21195
21202
|
}
|
|
21196
21203
|
parts.push("Administrative .cadence/assistant/tasks records are excluded from business freshness; configuration is not excluded.");
|