@handsupmin/gc-tree 0.2.0 → 0.2.1
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.es.md +60 -59
- package/README.ja.md +60 -59
- package/README.ko.md +62 -61
- package/README.md +61 -60
- package/README.zh.md +62 -61
- package/docs/concept.es.md +45 -33
- package/docs/concept.ja.md +41 -29
- package/docs/concept.ko.md +48 -36
- package/docs/concept.md +13 -1
- package/docs/concept.zh.md +48 -36
- package/docs/local-development.es.md +44 -22
- package/docs/local-development.ja.md +40 -18
- package/docs/local-development.ko.md +47 -25
- package/docs/local-development.md +27 -5
- package/docs/local-development.zh.md +27 -5
- package/docs/principles.es.md +39 -26
- package/docs/principles.ja.md +26 -13
- package/docs/principles.ko.md +40 -27
- package/docs/principles.md +15 -2
- package/docs/principles.zh.md +42 -29
- package/docs/usage.es.md +98 -50
- package/docs/usage.ja.md +71 -23
- package/docs/usage.ko.md +100 -52
- package/docs/usage.md +51 -3
- package/docs/usage.zh.md +95 -47
- package/package.json +3 -1
package/docs/concept.zh.md
CHANGED
|
@@ -2,51 +2,63 @@
|
|
|
2
2
|
|
|
3
3
|
[English](concept.md) | [한국어](concept.ko.md) | [简体中文](concept.zh.md) | [日本語](concept.ja.md) | [Español](concept.es.md)
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 概述
|
|
6
6
|
|
|
7
|
-
`gctree`
|
|
7
|
+
`gctree` 是一个为 AI 编程工具设计的轻量级全局上下文层。它将长期上下文保存在任何单一代码仓库之外的显式 Markdown 文档中,支持在 gc-branch 之间切换,并可将每个 gc-branch 的作用范围限制在真正需要它的代码仓库中。
|
|
8
8
|
|
|
9
9
|
## `gctree` 是什么
|
|
10
10
|
|
|
11
|
-
`gctree`
|
|
12
|
-
|
|
11
|
+
`gctree` 是一个用于管理可复用全局上下文的 CLI 工具。
|
|
12
|
+
它专为希望重要上下文能够跨代码仓库、跨会话、跨工具持续存在,同时又不变成隐藏记忆的个人和团队而设计。
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
与其将关键知识分散在提示词文件、仓库本地笔记和临时指令中,`gctree` 为这些知识提供了一个稳定的、以文件为载体的归宿。
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## 它解决了什么问题
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
许多 AI 编程环境最初规模都很小:
|
|
19
19
|
|
|
20
20
|
- 一个 `AGENTS.md`
|
|
21
21
|
- 一个 `CLAUDE.md`
|
|
22
|
-
-
|
|
23
|
-
-
|
|
22
|
+
- 一个仓库本地提示词文件
|
|
23
|
+
- 几条在需要时复制进提示词的笔记
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
这样的方式在一段时间内是可行的。但当真正的工作量到来时,裂缝就开始显现:
|
|
26
26
|
|
|
27
27
|
- 不同产品需要不同的上下文
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
28
|
+
- 客户项目需要清晰的隔离
|
|
29
|
+
- 可复用的指导内容应该存放在任何单一仓库之外
|
|
30
|
+
- 多个工具应该能够读取同一个可信来源
|
|
31
|
+
- 长期上下文应该通过明确的、可审查的流程来变更
|
|
32
|
+
- 一个人可能同时跨多个代码仓库开启多个会话
|
|
33
33
|
|
|
34
|
-
`gctree`
|
|
34
|
+
`gctree` 的存在,就是为了干净地处理这一层问题。
|
|
35
35
|
|
|
36
|
-
##
|
|
36
|
+
## resolve 的工作原理
|
|
37
37
|
|
|
38
|
-
`gctree`
|
|
38
|
+
当工具调用 `gctree resolve --query "..."` 时,gc-tree 会使用支持 Unicode 的关键词匹配,对当前活跃 gc-branch 中的每个文档与查询内容进行评分(韩语、中日韩文字及混合语言查询与英语的处理方式完全相同)。标题匹配的权重是正文匹配的两倍。
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
工具只会收到匹配的文档——包含标题、摘要和摘录——而非完整的知识库。实际上,每次查询注入的上下文约占总量的 4%。只有在摘要不足以满足需求时,工具才会读取完整文档。
|
|
41
|
+
|
|
42
|
+
这种方式在不遮蔽任何内容的前提下保持了较低的 token 消耗。所有上下文仍然是显式的、以文件为载体的,且可供审查。
|
|
43
|
+
|
|
44
|
+
## 提供商支持
|
|
45
|
+
|
|
46
|
+
`gctree` 同时支持 Claude Code 和 Codex。两个提供商使用相同的底层上下文存储。只需 scaffold 一次,两个工具便可从同一个 gc-branch 中执行 resolve、onboard 和上下文更新。
|
|
47
|
+
|
|
48
|
+
## 范围边界
|
|
49
|
+
|
|
50
|
+
`gctree` 有意不做以下事情:
|
|
51
|
+
|
|
52
|
+
- 从需求到提交的交付编排器
|
|
53
|
+
- 隐藏记忆系统
|
|
42
54
|
- 浏览器协作运行时
|
|
43
55
|
- 通用知识库产品
|
|
44
56
|
|
|
45
|
-
|
|
57
|
+
它专注于一件事:管理可复用的全局上下文分支,以及明确的持久化更新。
|
|
46
58
|
|
|
47
59
|
## 文件模型
|
|
48
60
|
|
|
49
|
-
|
|
61
|
+
一个典型的主目录结构如下:
|
|
50
62
|
|
|
51
63
|
```text
|
|
52
64
|
~/.gctree/
|
|
@@ -60,22 +72,22 @@
|
|
|
60
72
|
docs/
|
|
61
73
|
```
|
|
62
74
|
|
|
63
|
-
- `HEAD`
|
|
64
|
-
- `settings.json`
|
|
65
|
-
- `branch-repo-map.json`
|
|
66
|
-
- `branch.json`
|
|
67
|
-
- `index.md`
|
|
68
|
-
- `docs/`
|
|
75
|
+
- `HEAD` 记录后备的活跃 gc-branch。
|
|
76
|
+
- `settings.json` 存储提供商模式、运行时启动时选择的 onboarding 提供商,以及首选的工作流语言。
|
|
77
|
+
- `branch-repo-map.json` 存储每个 gc-branch 包含或排除的代码仓库。
|
|
78
|
+
- `branch.json` 存储轻量级的 gc-branch 元数据。
|
|
79
|
+
- `index.md` 是工具的简洁入口点——保持在 2000 字符以内,以便快速加载而不消耗大量 token 预算。
|
|
80
|
+
- `docs/` 存放作为可信来源的 Markdown 文档。
|
|
69
81
|
|
|
70
|
-
##
|
|
82
|
+
## 仓库感知行为
|
|
71
83
|
|
|
72
|
-
gc-branch
|
|
73
|
-
|
|
84
|
+
gc-branch 不必应用于所有地方。
|
|
85
|
+
如果分支 `A` 只与代码仓库 `B`、`C` 和 `D` 相关,`gctree` 可以将这一关系记录在 `branch-repo-map.json` 中。
|
|
74
86
|
|
|
75
|
-
|
|
87
|
+
当 `gctree resolve` 在另一个代码仓库(例如 `F`)中运行时,它可以:
|
|
76
88
|
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
- 在 `F`
|
|
89
|
+
- 继续一次
|
|
90
|
+
- 始终在 `F` 中使用该 gc-branch
|
|
91
|
+
- 在 `F` 中忽略该 gc-branch
|
|
80
92
|
|
|
81
|
-
|
|
93
|
+
这使得 gc-tree 对于同时跨多个无关代码仓库保持大量并行会话的重度用户来说更加安全。
|
|
@@ -4,24 +4,24 @@
|
|
|
4
4
|
|
|
5
5
|
## Resumen
|
|
6
6
|
|
|
7
|
-
El desarrollo local sigue un flujo estándar de Node.js 20+: instalar dependencias, compilar la CLI, ejecutarla localmente y verificar los cambios con
|
|
7
|
+
El desarrollo local sigue un flujo de trabajo estándar de Node.js 20+: instalar dependencias, compilar la CLI, ejecutarla localmente y verificar los cambios con el conjunto de pruebas existente antes de enviarlos.
|
|
8
8
|
|
|
9
9
|
## Requisitos previos
|
|
10
10
|
|
|
11
11
|
- Node.js 20+
|
|
12
12
|
- npm
|
|
13
|
-
- binarios locales de `codex` y
|
|
13
|
+
- binarios locales de `codex` y/o `claude` si quieres hacer pruebas manuales con los lanzamientos de proveedores
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Configuración
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
npm install
|
|
19
19
|
npm run build
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Ejecutar la CLI localmente
|
|
23
23
|
|
|
24
|
-
### Opción 1: ejecutar
|
|
24
|
+
### Opción 1: ejecutar el punto de entrada compilado directamente
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
node dist/src/cli.js status
|
|
@@ -34,7 +34,7 @@ npm link
|
|
|
34
34
|
gctree status
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
Si cambias archivos TypeScript, vuelve a compilar antes de probar
|
|
37
|
+
Si cambias archivos TypeScript, vuelve a compilar antes de probar la CLI de nuevo.
|
|
38
38
|
|
|
39
39
|
## Verificación
|
|
40
40
|
|
|
@@ -45,33 +45,55 @@ npm run build
|
|
|
45
45
|
npm test
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
### Suite de evaluación
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
Además de las pruebas unitarias, una suite de evaluación mide la calidad de resolve contra fixtures realistas:
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
|
|
52
|
+
```bash
|
|
53
|
+
npm run eval # suite sintética de 5 escenarios (onboarding, resolve, eficiencia de tokens, actualización, aislamiento)
|
|
54
|
+
npm run eval:verbose # lo mismo, con detalle por caso
|
|
55
|
+
npm run eval:multi-repo # prueba de aislamiento entre repositorios usando fixtures de estilo cosmo
|
|
56
|
+
npm run eval:real-docs # recall y precisión contra exportaciones reales de Notion (requiere documentos locales)
|
|
57
|
+
npm run eval:autoresearch # bucle iterativo de mejora de resolve (modifica src/resolve.ts en su lugar)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Líneas base esperadas (ejecuta `npm run eval` para verificar):
|
|
61
|
+
|
|
62
|
+
| Suite | Objetivo |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| Sintética (5 escenarios) | 5/5 PASS, media ≥ 90% |
|
|
65
|
+
| Multi-repo | ≥ 80% en total |
|
|
66
|
+
| Real-docs | Recall ≥ 90%, F1 ≥ 80% |
|
|
67
|
+
|
|
68
|
+
Si modificas `src/resolve.ts`, ejecuta `npm test && npm run eval && npm run eval:real-docs` antes de abrir un PR.
|
|
69
|
+
|
|
70
|
+
## Cobertura de pruebas
|
|
71
|
+
|
|
72
|
+
El conjunto de pruebas unitarias cubre actualmente:
|
|
73
|
+
|
|
74
|
+
- persistencia del modo de proveedor (`claude-code`, `codex`, `both`)
|
|
75
|
+
- persistencia del idioma preferido y aplicación estricta del idioma en los prompts de lanzamiento
|
|
76
|
+
- selección de gc-branch según el repositorio
|
|
77
|
+
- decisiones interactivas de incluir/excluir durante `resolve`
|
|
78
|
+
- actualizaciones del mapa de repositorios de la branch
|
|
79
|
+
- límites del flujo guiado de onboarding/actualización
|
|
58
80
|
|
|
59
|
-
##
|
|
81
|
+
## Verificaciones E2E manuales del proveedor
|
|
60
82
|
|
|
61
|
-
|
|
62
|
-
Si quieres
|
|
83
|
+
Las pruebas automatizadas deshabilitan el lanzamiento del proveedor para poder verificar los planes de lanzamiento sin abrir sesiones reales de Codex o Claude Code.
|
|
84
|
+
Si quieres hacer pruebas con el camino de lanzamiento real, ejecuta uno de estos en un directorio de prueba:
|
|
63
85
|
|
|
64
86
|
```bash
|
|
65
87
|
gctree init --provider codex
|
|
66
88
|
gctree init --provider claude-code
|
|
67
89
|
```
|
|
68
90
|
|
|
69
|
-
Deberías ver
|
|
91
|
+
Deberías ver cómo se abre el proveedor y recibe inmediatamente `$gc-onboard` o `/gc-onboard`.
|
|
70
92
|
|
|
71
93
|
## Estructura del proyecto
|
|
72
94
|
|
|
73
|
-
- `src/` — CLI, almacenamiento de contexto, selección de
|
|
74
|
-
- `tests/` —
|
|
75
|
-
- `skills/` —
|
|
76
|
-
- `scaffolds/` —
|
|
95
|
+
- `src/` — CLI, almacenamiento de contexto, selección de proveedor, mapeo de alcance del repositorio, flujos guiados de onboarding/actualización y lógica de scaffolding
|
|
96
|
+
- `tests/` — pruebas unitarias y scripts de evaluación
|
|
97
|
+
- `skills/` — skills de flujo de trabajo agnósticas a la herramienta (usadas por Claude Code)
|
|
98
|
+
- `scaffolds/` — directorios de marcador de posición; el contenido de los archivos de scaffold se genera programáticamente en `src/scaffold.ts`
|
|
77
99
|
- `docs/` — documentación de concepto, principios, uso y desarrollo
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
[English](local-development.md) | [한국어](local-development.ko.md) | [简体中文](local-development.zh.md) | [日本語](local-development.ja.md) | [Español](local-development.es.md)
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 概要
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
ローカル開発は標準的な Node.js 20+ の流れに沿っています。依存関係をインストールし、CLI をビルドし、ローカルで実行し、変更を送る前に既存のテストスイートで検証します。
|
|
8
8
|
|
|
9
9
|
## 前提条件
|
|
10
10
|
|
|
11
11
|
- Node.js 20+
|
|
12
12
|
- npm
|
|
13
|
-
-
|
|
13
|
+
- プロバイダー起動を手元で試したい場合はローカルの `codex` や `claude` バイナリ
|
|
14
14
|
|
|
15
15
|
## セットアップ
|
|
16
16
|
|
|
@@ -45,33 +45,55 @@ npm run build
|
|
|
45
45
|
npm test
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
### eval スイート
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
ユニットテストに加えて、eval スイートがリアルなフィクスチャに対して resolve の品質を測定します。
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
```bash
|
|
53
|
+
npm run eval # 5 シナリオの合成スイート(オンボーディング、resolve、トークン効率、更新、分離)
|
|
54
|
+
npm run eval:verbose # 同上、ケースごとの詳細付き
|
|
55
|
+
npm run eval:multi-repo # cosmo スタイルのフィクスチャを使ったクロスリポジトリ分離テスト
|
|
56
|
+
npm run eval:real-docs # 実際の Notion エクスポートに対する再現率と適合率(ローカルドキュメントが必要)
|
|
57
|
+
npm run eval:autoresearch # 反復的な resolve 改善ループ(src/resolve.ts をその場で変更します)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
期待されるベースライン(`npm run eval` を実行して確認):
|
|
61
|
+
|
|
62
|
+
| スイート | 目標 |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| 合成(5 シナリオ) | 5/5 PASS、平均 ≥ 90% |
|
|
65
|
+
| マルチリポジトリ | 全体 ≥ 80% |
|
|
66
|
+
| 実ドキュメント | 再現率 ≥ 90%、F1 ≥ 80% |
|
|
67
|
+
|
|
68
|
+
`src/resolve.ts` を変更した場合は、PR を開く前に `npm test && npm run eval && npm run eval:real-docs` を実行してください。
|
|
69
|
+
|
|
70
|
+
## テストカバレッジ
|
|
71
|
+
|
|
72
|
+
現在のユニットテストスイートでは次をカバーしています。
|
|
73
|
+
|
|
74
|
+
- プロバイダーモードの永続化(`claude-code`、`codex`、`both`)
|
|
75
|
+
- 優先言語の永続化と起動プロンプトでの言語強制
|
|
54
76
|
- リポジトリを意識した gc-branch 選択
|
|
55
|
-
- `resolve` 実行中の include / exclude
|
|
77
|
+
- `resolve` 実行中の include / exclude の対話的な決定
|
|
56
78
|
- branch repo map の更新
|
|
57
|
-
-
|
|
79
|
+
- ガイド付きオンボーディング・更新フローの境界条件
|
|
58
80
|
|
|
59
|
-
##
|
|
81
|
+
## プロバイダーの手動 E2E チェック
|
|
60
82
|
|
|
61
|
-
自動テストでは、Codex や Claude Code
|
|
62
|
-
|
|
83
|
+
自動テストでは、Codex や Claude Code のセッションを実際に開かなくても起動計画を検証できるよう、プロバイダー起動を無効化しています。
|
|
84
|
+
本物の起動パスを試したい場合は、使い捨てディレクトリで次のどちらかを実行してください。
|
|
63
85
|
|
|
64
86
|
```bash
|
|
65
87
|
gctree init --provider codex
|
|
66
88
|
gctree init --provider claude-code
|
|
67
89
|
```
|
|
68
90
|
|
|
69
|
-
|
|
91
|
+
正しく動けば、プロバイダーが起動し、すぐに `$gc-onboard` または `/gc-onboard` を受け取るはずです。
|
|
70
92
|
|
|
71
93
|
## プロジェクト構成
|
|
72
94
|
|
|
73
|
-
- `src/` — CLI
|
|
74
|
-
- `tests/` —
|
|
75
|
-
- `skills/` —
|
|
76
|
-
- `scaffolds/` —
|
|
77
|
-
- `docs/` —
|
|
95
|
+
- `src/` — CLI、コンテキストストレージ、プロバイダー選択、repo-scope マッピング、ガイド付きオンボーディング・更新フロー、および scaffolding ロジック
|
|
96
|
+
- `tests/` — ユニットテストと eval スクリプト
|
|
97
|
+
- `skills/` — ツールに依存しないワークフロースキル(Claude Code が使用)
|
|
98
|
+
- `scaffolds/` — プレースホルダーディレクトリ。scaffold ファイルの内容は `src/scaffold.ts` でプログラム的に生成されます
|
|
99
|
+
- `docs/` — コンセプト・原則・使い方・開発ドキュメント
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
## 요약
|
|
6
6
|
|
|
7
|
-
로컬 개발은
|
|
7
|
+
로컬 개발은 표준 Node.js 20+ 워크플로우를 따릅니다: 의존성 설치, CLI 빌드, 로컬 실행, 변경 사항을 내보내기 전에 기존 테스트 스위트로 검증.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## 사전 요구 사항
|
|
10
10
|
|
|
11
11
|
- Node.js 20+
|
|
12
12
|
- npm
|
|
13
|
-
-
|
|
13
|
+
- 프로바이더 실행을 직접 도그푸딩하려면 로컬에 `codex` 및/또는 `claude` 바이너리 필요
|
|
14
14
|
|
|
15
15
|
## 설정
|
|
16
16
|
|
|
@@ -19,59 +19,81 @@ npm install
|
|
|
19
19
|
npm run build
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## CLI 로컬 실행
|
|
23
23
|
|
|
24
|
-
###
|
|
24
|
+
### 옵션 1: 빌드된 엔트리를 직접 실행
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
node dist/src/cli.js status
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
###
|
|
30
|
+
### 옵션 2: CLI를 셸에 링크
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
npm link
|
|
34
34
|
gctree status
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
TypeScript 소스를
|
|
37
|
+
TypeScript 소스를 변경한 경우, CLI를 다시 테스트하기 전에 재빌드하세요.
|
|
38
38
|
|
|
39
39
|
## 검증
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
풀 리퀘스트를 열기 전에 다음을 실행하세요:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
44
|
npm run build
|
|
45
45
|
npm test
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
### 평가 스위트
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
유닛 테스트 외에도, 현실적인 픽스처를 기반으로 resolve 품질을 측정하는 평가 스위트가 있습니다:
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
|
|
52
|
+
```bash
|
|
53
|
+
npm run eval # 5시나리오 합성 스위트 (온보딩, resolve, 토큰 효율성, 업데이트, 격리)
|
|
54
|
+
npm run eval:verbose # 동일, 케이스별 상세 출력
|
|
55
|
+
npm run eval:multi-repo # cosmo 스타일 픽스처를 사용한 크로스 저장소 격리 테스트
|
|
56
|
+
npm run eval:real-docs # 실제 Notion 익스포트에 대한 재현율 및 정밀도 측정 (로컬 문서 필요)
|
|
57
|
+
npm run eval:autoresearch # 반복적 resolve 개선 루프 (src/resolve.ts를 직접 수정함)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
예상 기준선 (`npm run eval` 실행으로 확인):
|
|
61
|
+
|
|
62
|
+
| 스위트 | 목표 |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| 합성 (5 시나리오) | 5/5 PASS, 평균 ≥ 90% |
|
|
65
|
+
| 다중 저장소 | 전체 ≥ 80% |
|
|
66
|
+
| 실제 문서 | 재현율 ≥ 90%, F1 ≥ 80% |
|
|
67
|
+
|
|
68
|
+
`src/resolve.ts`를 수정한 경우, PR을 열기 전에 `npm test && npm run eval && npm run eval:real-docs`를 실행하세요.
|
|
69
|
+
|
|
70
|
+
## 테스트 커버리지
|
|
71
|
+
|
|
72
|
+
유닛 테스트 스위트가 현재 다루는 항목:
|
|
73
|
+
|
|
74
|
+
- 프로바이더 모드 영속성 (`claude-code`, `codex`, `both`)
|
|
75
|
+
- 선호 언어 영속성 및 실행 프롬프트에서의 강력한 언어 적용
|
|
76
|
+
- 저장소 인식 gc-branch 선택
|
|
77
|
+
- `resolve` 중 인터랙티브 포함/제외 결정
|
|
78
|
+
- 브랜치 저장소 맵 업데이트
|
|
79
|
+
- 안내된 온보딩/업데이트 흐름 경계
|
|
58
80
|
|
|
59
|
-
##
|
|
81
|
+
## 수동 프로바이더 E2E 확인
|
|
60
82
|
|
|
61
|
-
|
|
62
|
-
실제
|
|
83
|
+
자동화된 테스트는 실제 Codex나 Claude Code 세션을 열지 않고 실행 계획을 검증할 수 있도록 프로바이더 실행을 비활성화합니다.
|
|
84
|
+
실제 실행 경로를 도그푸딩하려면 임시 디렉토리에서 다음 중 하나를 실행하세요:
|
|
63
85
|
|
|
64
86
|
```bash
|
|
65
87
|
gctree init --provider codex
|
|
66
88
|
gctree init --provider claude-code
|
|
67
89
|
```
|
|
68
90
|
|
|
69
|
-
|
|
91
|
+
프로바이더가 열리고 즉시 `$gc-onboard` 또는 `/gc-onboard`를 받는 것을 확인해야 합니다.
|
|
70
92
|
|
|
71
|
-
## 프로젝트
|
|
93
|
+
## 프로젝트 레이아웃
|
|
72
94
|
|
|
73
|
-
- `src/` — CLI, 컨텍스트 저장소,
|
|
74
|
-
- `tests/` —
|
|
75
|
-
- `skills/` —
|
|
76
|
-
- `scaffolds/` —
|
|
95
|
+
- `src/` — CLI, 컨텍스트 저장소, 프로바이더 선택, 저장소 범위 매핑, 안내된 온보딩/업데이트 흐름, scaffold 로직
|
|
96
|
+
- `tests/` — 유닛 테스트 및 평가 스크립트
|
|
97
|
+
- `skills/` — 도구에 구애받지 않는 워크플로우 스킬 (Claude Code에서 사용)
|
|
98
|
+
- `scaffolds/` — 플레이스홀더 디렉토리; scaffold 파일 내용은 `src/scaffold.ts`에서 프로그래밍 방식으로 생성됨
|
|
77
99
|
- `docs/` — 개념, 원칙, 사용법, 개발 문서
|
|
@@ -45,9 +45,31 @@ npm run build
|
|
|
45
45
|
npm test
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
### Eval suite
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
In addition to the unit tests, an eval suite measures resolve quality against realistic fixtures:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run eval # 5-scenario synthetic suite (onboarding, resolve, token efficiency, update, isolation)
|
|
54
|
+
npm run eval:verbose # same, with per-case detail
|
|
55
|
+
npm run eval:multi-repo # cross-repo isolation test using cosmo-style fixtures
|
|
56
|
+
npm run eval:real-docs # recall and precision against real Notion exports (requires local docs)
|
|
57
|
+
npm run eval:autoresearch # iterative resolve improvement loop (modifies src/resolve.ts in place)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Expected baselines (run `npm run eval` to verify):
|
|
61
|
+
|
|
62
|
+
| Suite | Target |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| Synthetic (5 scenarios) | 5/5 PASS, mean ≥ 90% |
|
|
65
|
+
| Multi-repo | ≥ 80% overall |
|
|
66
|
+
| Real-docs | Recall ≥ 90%, F1 ≥ 80% |
|
|
67
|
+
|
|
68
|
+
If you modify `src/resolve.ts`, run `npm test && npm run eval && npm run eval:real-docs` before opening a PR.
|
|
69
|
+
|
|
70
|
+
## Test coverage
|
|
71
|
+
|
|
72
|
+
The unit test suite currently covers:
|
|
51
73
|
|
|
52
74
|
- provider mode persistence (`claude-code`, `codex`, `both`)
|
|
53
75
|
- preferred language persistence and strong language enforcement in launch prompts
|
|
@@ -71,7 +93,7 @@ You should see the provider open and immediately receive `$gc-onboard` or `/gc-o
|
|
|
71
93
|
## Project layout
|
|
72
94
|
|
|
73
95
|
- `src/` — CLI, context storage, provider selection, repo-scope mapping, guided onboarding/update flows, and scaffolding logic
|
|
74
|
-
- `tests/` —
|
|
75
|
-
- `skills/` — tool-agnostic workflow skills
|
|
76
|
-
- `scaffolds/` —
|
|
96
|
+
- `tests/` — unit tests and eval scripts
|
|
97
|
+
- `skills/` — tool-agnostic workflow skills (used by Claude Code)
|
|
98
|
+
- `scaffolds/` — placeholder directories; scaffold file content is generated programmatically in `src/scaffold.ts`
|
|
77
99
|
- `docs/` — concept, principles, usage, and development documentation
|
|
@@ -45,9 +45,31 @@ npm run build
|
|
|
45
45
|
npm test
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
### 评估套件
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
除单元测试外,还有一套 eval 套件,用于衡量 resolve 在真实场景下的质量:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run eval # 5 场景综合测试(onboarding、resolve、token 效率、update、隔离性)
|
|
54
|
+
npm run eval:verbose # 同上,输出每条用例的详情
|
|
55
|
+
npm run eval:multi-repo # 跨仓库隔离测试,使用 cosmo 风格的 fixtures
|
|
56
|
+
npm run eval:real-docs # 基于真实 Notion 导出文件的 recall 和 precision 测试(需要本地文档)
|
|
57
|
+
npm run eval:autoresearch # 迭代式 resolve 改进循环(会直接修改 src/resolve.ts)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
预期基线(运行 `npm run eval` 可验证):
|
|
61
|
+
|
|
62
|
+
| 套件 | 目标 |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| 综合(5 场景) | 5/5 PASS,均值 ≥ 90% |
|
|
65
|
+
| 多仓库 | 整体 ≥ 80% |
|
|
66
|
+
| 真实文档 | Recall ≥ 90%,F1 ≥ 80% |
|
|
67
|
+
|
|
68
|
+
如果你修改了 `src/resolve.ts`,在发 PR 之前请运行 `npm test && npm run eval && npm run eval:real-docs`。
|
|
69
|
+
|
|
70
|
+
## 测试覆盖范围
|
|
71
|
+
|
|
72
|
+
当前单元测试套件覆盖了以下内容:
|
|
51
73
|
|
|
52
74
|
- provider 模式持久化(`claude-code`、`codex`、`both`)
|
|
53
75
|
- 偏好语言持久化,以及 launch prompt 中的强语言约束
|
|
@@ -71,7 +93,7 @@ gctree init --provider claude-code
|
|
|
71
93
|
## 项目结构
|
|
72
94
|
|
|
73
95
|
- `src/` — CLI、本地上下文存储、provider 选择、repo-scope 映射、带引导的 onboarding / update 流程,以及 scaffolding 逻辑
|
|
74
|
-
- `tests/` —
|
|
75
|
-
- `skills/` —
|
|
76
|
-
- `scaffolds/` —
|
|
96
|
+
- `tests/` — 单元测试与 eval 脚本
|
|
97
|
+
- `skills/` — 与工具无关的工作流技能(供 Claude Code 使用)
|
|
98
|
+
- `scaffolds/` — 占位目录;scaffold 文件内容由 `src/scaffold.ts` 动态生成
|
|
77
99
|
- `docs/` — 概念、原则、使用方式与开发文档
|
package/docs/principles.es.md
CHANGED
|
@@ -4,47 +4,60 @@
|
|
|
4
4
|
|
|
5
5
|
## Resumen
|
|
6
6
|
|
|
7
|
-
`gctree` sigue
|
|
7
|
+
`gctree` sigue un pequeño conjunto de reglas de producto: mantener el contexto consciente de las branches, mantener los documentos fuente con el resumen primero, mantener los índices compactos, hacer el alcance del repositorio explícito, inyectar solo lo relevante y admitir cualquier proveedor que pueda ejecutar comandos de shell.
|
|
8
8
|
|
|
9
|
-
## 1.
|
|
9
|
+
## 1. Mantener el contexto consciente de las branches
|
|
10
10
|
|
|
11
|
-
Una misma máquina
|
|
12
|
-
Por eso `gctree` usa
|
|
11
|
+
Una misma máquina debe poder mantener múltiples árboles de contexto global sin mezclarlos entre sí.
|
|
12
|
+
Por eso `gctree` usa terminología similar a git como `checkout` y `checkout -b`, aunque sigue refiriéndose a la branch activa como **gc-branch** en el texto orientado al usuario.
|
|
13
13
|
|
|
14
|
-
## 2.
|
|
14
|
+
## 2. Mantener el alcance del repositorio explícito
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Una gc-branch no debería afectar silenciosamente a todos los repositorios de la máquina.
|
|
17
17
|
`gctree` usa `branch-repo-map.json` para registrar si un repositorio está:
|
|
18
18
|
|
|
19
|
-
- incluido para
|
|
20
|
-
- excluido para
|
|
21
|
-
-
|
|
19
|
+
- incluido para una gc-branch
|
|
20
|
+
- excluido para una gc-branch
|
|
21
|
+
- aún no mapeado
|
|
22
22
|
|
|
23
|
-
Si `resolve`
|
|
23
|
+
Si se llama a `resolve` desde un repositorio no mapeado, el usuario puede decidir si continuar una vez, usar siempre esa gc-branch allí o ignorarla.
|
|
24
24
|
|
|
25
|
-
## 3.
|
|
25
|
+
## 3. Mantener `index.md` compacto
|
|
26
26
|
|
|
27
|
-
El `index.md` de nivel superior es un índice, no un
|
|
28
|
-
Su
|
|
29
|
-
Debe
|
|
27
|
+
El `index.md` de nivel superior es un índice, no un volcado.
|
|
28
|
+
Su función es ayudar a las herramientas y a las personas a encontrar rápidamente el documento fuente correcto.
|
|
29
|
+
Debe mantenerse por debajo de **2000 caracteres** y orientarse a los enlaces en lugar de duplicar el conocimiento completo de forma inline.
|
|
30
30
|
|
|
31
|
-
## 4.
|
|
31
|
+
## 4. Hacer que los documentos fuente empiecen con el resumen
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
Cada documento markdown que sea fuente de verdad debe incluir una sección `## Summary` cerca del principio.
|
|
34
|
+
Esto le da a las herramientas aguas abajo un camino rápido: leer primero la versión corta y expandir solo cuando realmente se necesite más detalle.
|
|
35
35
|
|
|
36
|
-
## 5.
|
|
36
|
+
## 5. Hacer el onboarding explícito y guiado
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
`gctree init` y `gctree onboard`
|
|
38
|
+
Un usuario no debería tener que escribir a mano JSON de onboarding solo para crear un árbol de contexto útil.
|
|
39
|
+
`gctree init` y `gctree onboard` deben guiar al usuario a través de su proveedor preferido y escribir el contexto resultante en la gc-branch activa.
|
|
40
40
|
|
|
41
|
-
El onboarding solo
|
|
42
|
-
Si
|
|
41
|
+
El onboarding es solo para gc-branches vacías.
|
|
42
|
+
Si una gc-branch ya contiene contexto, el camino correcto es:
|
|
43
43
|
|
|
44
|
-
-
|
|
45
|
-
- o
|
|
44
|
+
- resetear esa gc-branch y hacer onboarding de nuevo
|
|
45
|
+
- o ejecutar una actualización duradera guiada
|
|
46
46
|
|
|
47
|
-
## 6.
|
|
47
|
+
## 6. Mantener las actualizaciones duraderas intencionales
|
|
48
48
|
|
|
49
49
|
El contexto duradero no debería cambiar por accidente ni a través de memoria oculta.
|
|
50
|
-
El flujo de actualización debe ser explícito,
|
|
50
|
+
El flujo de actualización debe ser explícito, impulsado por el proveedor y vinculado a la gc-branch actualmente activa.
|
|
51
|
+
|
|
52
|
+
## 7. Inyectar solo lo relevante
|
|
53
|
+
|
|
54
|
+
Una sesión de herramienta nunca debería recibir la base de conocimiento completa.
|
|
55
|
+
`gctree resolve` puntúa los documentos contra la consulta y devuelve solo los que coinciden — título, resumen y fragmento. El documento completo se lee solo cuando el resumen no es suficiente.
|
|
56
|
+
|
|
57
|
+
En la práctica, esto significa que se inyecta aproximadamente el 4 % del contexto almacenado total por consulta. El 96 % restante permanece en disco, fuera de la ventana de tokens, hasta que se necesite realmente.
|
|
58
|
+
|
|
59
|
+
## 8. Mantenerse agnóstico al proveedor
|
|
60
|
+
|
|
61
|
+
`gctree` almacena el contexto en archivos markdown simples que cualquier herramienta puede leer.
|
|
62
|
+
Claude Code y Codex hacen scaffold contra el mismo almacén subyacente mediante `gctree scaffold`.
|
|
63
|
+
Agregar soporte para un nuevo proveedor significa escribir una nueva plantilla de scaffold — sin cambios en la lógica central de almacenamiento ni de resolve.
|