@tienne/gestalt 0.87.0 → 0.89.0
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/CLAUDE.md +12 -4
- package/README.ko.md +2 -1
- package/README.md +3 -1
- package/dist/bin/gestalt-hook.d.ts +5 -0
- package/dist/bin/gestalt-hook.d.ts.map +1 -0
- package/dist/bin/gestalt-hook.js +51 -0
- package/dist/bin/gestalt-hook.js.map +1 -0
- package/dist/package.json +5 -3
- package/dist/plugin/skills/_shared/proactive-routing.md +1 -0
- package/dist/plugin/skills/architecture/SKILL.md +913 -0
- package/dist/plugin/skills/blast-radius/SKILL.md +11 -1
- package/dist/plugin/skills/diff-radius/SKILL.md +11 -0
- package/dist/schemas/architecture-ir.schema.json +596 -0
- package/dist/schemas/gestalt.schema.json +19 -0
- package/dist/src/architecture/canvas-geometry.d.ts +40 -0
- package/dist/src/architecture/canvas-geometry.d.ts.map +1 -0
- package/dist/src/architecture/canvas-geometry.js +212 -0
- package/dist/src/architecture/canvas-geometry.js.map +1 -0
- package/dist/src/architecture/codeowners.d.ts +16 -0
- package/dist/src/architecture/codeowners.d.ts.map +1 -0
- package/dist/src/architecture/codeowners.js +58 -0
- package/dist/src/architecture/codeowners.js.map +1 -0
- package/dist/src/architecture/compare-layout.d.ts +27 -0
- package/dist/src/architecture/compare-layout.d.ts.map +1 -0
- package/dist/src/architecture/compare-layout.js +72 -0
- package/dist/src/architecture/compare-layout.js.map +1 -0
- package/dist/src/architecture/dataflow-layout.d.ts +29 -0
- package/dist/src/architecture/dataflow-layout.d.ts.map +1 -0
- package/dist/src/architecture/dataflow-layout.js +229 -0
- package/dist/src/architecture/dataflow-layout.js.map +1 -0
- package/dist/src/architecture/doc-fresh.d.ts +31 -0
- package/dist/src/architecture/doc-fresh.d.ts.map +1 -0
- package/dist/src/architecture/doc-fresh.js +84 -0
- package/dist/src/architecture/doc-fresh.js.map +1 -0
- package/dist/src/architecture/doc-link.d.ts +84 -0
- package/dist/src/architecture/doc-link.d.ts.map +1 -0
- package/dist/src/architecture/doc-link.js +396 -0
- package/dist/src/architecture/doc-link.js.map +1 -0
- package/dist/src/architecture/doc-routes.d.ts +39 -0
- package/dist/src/architecture/doc-routes.d.ts.map +1 -0
- package/dist/src/architecture/doc-routes.js +123 -0
- package/dist/src/architecture/doc-routes.js.map +1 -0
- package/dist/src/architecture/doc-scan.d.ts +107 -0
- package/dist/src/architecture/doc-scan.d.ts.map +1 -0
- package/dist/src/architecture/doc-scan.js +617 -0
- package/dist/src/architecture/doc-scan.js.map +1 -0
- package/dist/src/architecture/doc-stale.d.ts +32 -0
- package/dist/src/architecture/doc-stale.d.ts.map +1 -0
- package/dist/src/architecture/doc-stale.js +60 -0
- package/dist/src/architecture/doc-stale.js.map +1 -0
- package/dist/src/architecture/drilldown.d.ts +51 -0
- package/dist/src/architecture/drilldown.d.ts.map +1 -0
- package/dist/src/architecture/drilldown.js +1160 -0
- package/dist/src/architecture/drilldown.js.map +1 -0
- package/dist/src/architecture/endpoint-match.d.ts +43 -0
- package/dist/src/architecture/endpoint-match.d.ts.map +1 -0
- package/dist/src/architecture/endpoint-match.js +133 -0
- package/dist/src/architecture/endpoint-match.js.map +1 -0
- package/dist/src/architecture/flow-layout.d.ts +79 -0
- package/dist/src/architecture/flow-layout.d.ts.map +1 -0
- package/dist/src/architecture/flow-layout.js +519 -0
- package/dist/src/architecture/flow-layout.js.map +1 -0
- package/dist/src/architecture/focus.d.ts +14 -0
- package/dist/src/architecture/focus.d.ts.map +1 -0
- package/dist/src/architecture/focus.js +107 -0
- package/dist/src/architecture/focus.js.map +1 -0
- package/dist/src/architecture/global-context.d.ts +23 -0
- package/dist/src/architecture/global-context.d.ts.map +1 -0
- package/dist/src/architecture/global-context.js +67 -0
- package/dist/src/architecture/global-context.js.map +1 -0
- package/dist/src/architecture/html-client.d.ts +35 -0
- package/dist/src/architecture/html-client.d.ts.map +1 -0
- package/dist/src/architecture/html-client.js +1852 -0
- package/dist/src/architecture/html-client.js.map +1 -0
- package/dist/src/architecture/html-renderer.d.ts +22 -0
- package/dist/src/architecture/html-renderer.d.ts.map +1 -0
- package/dist/src/architecture/html-renderer.js +1290 -0
- package/dist/src/architecture/html-renderer.js.map +1 -0
- package/dist/src/architecture/html-theme.d.ts +25 -0
- package/dist/src/architecture/html-theme.d.ts.map +1 -0
- package/dist/src/architecture/html-theme.js +681 -0
- package/dist/src/architecture/html-theme.js.map +1 -0
- package/dist/src/architecture/index.d.ts +9 -0
- package/dist/src/architecture/index.d.ts.map +1 -0
- package/dist/src/architecture/index.js +9 -0
- package/dist/src/architecture/index.js.map +1 -0
- package/dist/src/architecture/ir-schema.d.ts +1832 -0
- package/dist/src/architecture/ir-schema.d.ts.map +1 -0
- package/dist/src/architecture/ir-schema.js +343 -0
- package/dist/src/architecture/ir-schema.js.map +1 -0
- package/dist/src/architecture/kind-text.d.ts +21 -0
- package/dist/src/architecture/kind-text.d.ts.map +1 -0
- package/dist/src/architecture/kind-text.js +42 -0
- package/dist/src/architecture/kind-text.js.map +1 -0
- package/dist/src/architecture/layout.d.ts +227 -0
- package/dist/src/architecture/layout.d.ts.map +1 -0
- package/dist/src/architecture/layout.js +627 -0
- package/dist/src/architecture/layout.js.map +1 -0
- package/dist/src/architecture/mcp-tool-match.d.ts +49 -0
- package/dist/src/architecture/mcp-tool-match.d.ts.map +1 -0
- package/dist/src/architecture/mcp-tool-match.js +53 -0
- package/dist/src/architecture/mcp-tool-match.js.map +1 -0
- package/dist/src/architecture/merge.d.ts +54 -0
- package/dist/src/architecture/merge.d.ts.map +1 -0
- package/dist/src/architecture/merge.js +681 -0
- package/dist/src/architecture/merge.js.map +1 -0
- package/dist/src/architecture/micro-app.d.ts +20 -0
- package/dist/src/architecture/micro-app.d.ts.map +1 -0
- package/dist/src/architecture/micro-app.js +41 -0
- package/dist/src/architecture/micro-app.js.map +1 -0
- package/dist/src/architecture/name-ref-match.d.ts +43 -0
- package/dist/src/architecture/name-ref-match.d.ts.map +1 -0
- package/dist/src/architecture/name-ref-match.js +127 -0
- package/dist/src/architecture/name-ref-match.js.map +1 -0
- package/dist/src/architecture/packs/data.d.ts +109 -0
- package/dist/src/architecture/packs/data.d.ts.map +1 -0
- package/dist/src/architecture/packs/data.js +64 -0
- package/dist/src/architecture/packs/data.js.map +1 -0
- package/dist/src/architecture/packs/generic.d.ts +47 -0
- package/dist/src/architecture/packs/generic.d.ts.map +1 -0
- package/dist/src/architecture/packs/generic.js +35 -0
- package/dist/src/architecture/packs/generic.js.map +1 -0
- package/dist/src/architecture/packs/harness.d.ts +96 -0
- package/dist/src/architecture/packs/harness.d.ts.map +1 -0
- package/dist/src/architecture/packs/harness.js +66 -0
- package/dist/src/architecture/packs/harness.js.map +1 -0
- package/dist/src/architecture/packs/index.d.ts +840 -0
- package/dist/src/architecture/packs/index.d.ts.map +1 -0
- package/dist/src/architecture/packs/index.js +87 -0
- package/dist/src/architecture/packs/index.js.map +1 -0
- package/dist/src/architecture/packs/infra.d.ts +91 -0
- package/dist/src/architecture/packs/infra.d.ts.map +1 -0
- package/dist/src/architecture/packs/infra.js +57 -0
- package/dist/src/architecture/packs/infra.js.map +1 -0
- package/dist/src/architecture/packs/knowledge.d.ts +72 -0
- package/dist/src/architecture/packs/knowledge.d.ts.map +1 -0
- package/dist/src/architecture/packs/knowledge.js +58 -0
- package/dist/src/architecture/packs/knowledge.js.map +1 -0
- package/dist/src/architecture/packs/process.d.ts +87 -0
- package/dist/src/architecture/packs/process.d.ts.map +1 -0
- package/dist/src/architecture/packs/process.js +52 -0
- package/dist/src/architecture/packs/process.js.map +1 -0
- package/dist/src/architecture/packs/render-classes.d.ts +11 -0
- package/dist/src/architecture/packs/render-classes.d.ts.map +1 -0
- package/dist/src/architecture/packs/render-classes.js +92 -0
- package/dist/src/architecture/packs/render-classes.js.map +1 -0
- package/dist/src/architecture/packs/types.d.ts +66 -0
- package/dist/src/architecture/packs/types.d.ts.map +1 -0
- package/dist/src/architecture/packs/types.js +18 -0
- package/dist/src/architecture/packs/types.js.map +1 -0
- package/dist/src/architecture/packs/web-product.d.ts +348 -0
- package/dist/src/architecture/packs/web-product.d.ts.map +1 -0
- package/dist/src/architecture/packs/web-product.js +226 -0
- package/dist/src/architecture/packs/web-product.js.map +1 -0
- package/dist/src/architecture/sequence-layout.d.ts +50 -0
- package/dist/src/architecture/sequence-layout.d.ts.map +1 -0
- package/dist/src/architecture/sequence-layout.js +140 -0
- package/dist/src/architecture/sequence-layout.js.map +1 -0
- package/dist/src/architecture/service-facts.d.ts +30 -0
- package/dist/src/architecture/service-facts.d.ts.map +1 -0
- package/dist/src/architecture/service-facts.js +88 -0
- package/dist/src/architecture/service-facts.js.map +1 -0
- package/dist/src/architecture/store.d.ts +50 -0
- package/dist/src/architecture/store.d.ts.map +1 -0
- package/dist/src/architecture/store.js +320 -0
- package/dist/src/architecture/store.js.map +1 -0
- package/dist/src/architecture/types.d.ts +400 -0
- package/dist/src/architecture/types.d.ts.map +1 -0
- package/dist/src/architecture/types.js +75 -0
- package/dist/src/architecture/types.js.map +1 -0
- package/dist/src/architecture/validator.d.ts +65 -0
- package/dist/src/architecture/validator.d.ts.map +1 -0
- package/dist/src/architecture/validator.js +1249 -0
- package/dist/src/architecture/validator.js.map +1 -0
- package/dist/src/code-graph/cochange.d.ts +40 -0
- package/dist/src/code-graph/cochange.d.ts.map +1 -1
- package/dist/src/code-graph/cochange.js +88 -3
- package/dist/src/code-graph/cochange.js.map +1 -1
- package/dist/src/code-graph/engine.d.ts +35 -1
- package/dist/src/code-graph/engine.d.ts.map +1 -1
- package/dist/src/code-graph/engine.js +300 -55
- package/dist/src/code-graph/engine.js.map +1 -1
- package/dist/src/code-graph/freshness.d.ts +39 -0
- package/dist/src/code-graph/freshness.d.ts.map +1 -0
- package/dist/src/code-graph/freshness.js +93 -0
- package/dist/src/code-graph/freshness.js.map +1 -0
- package/dist/src/code-graph/hooks/background.d.ts +18 -0
- package/dist/src/code-graph/hooks/background.d.ts.map +1 -0
- package/dist/src/code-graph/hooks/background.js +55 -0
- package/dist/src/code-graph/hooks/background.js.map +1 -0
- package/dist/src/code-graph/hooks/pointers.d.ts +66 -0
- package/dist/src/code-graph/hooks/pointers.d.ts.map +1 -0
- package/dist/src/code-graph/hooks/pointers.js +292 -0
- package/dist/src/code-graph/hooks/pointers.js.map +1 -0
- package/dist/src/code-graph/hooks/rank.d.ts +36 -0
- package/dist/src/code-graph/hooks/rank.d.ts.map +1 -0
- package/dist/src/code-graph/hooks/rank.js +212 -0
- package/dist/src/code-graph/hooks/rank.js.map +1 -0
- package/dist/src/code-graph/hooks/run.d.ts +37 -0
- package/dist/src/code-graph/hooks/run.d.ts.map +1 -0
- package/dist/src/code-graph/hooks/run.js +324 -0
- package/dist/src/code-graph/hooks/run.js.map +1 -0
- package/dist/src/code-graph/hooks/settings.d.ts +11 -0
- package/dist/src/code-graph/hooks/settings.d.ts.map +1 -0
- package/dist/src/code-graph/hooks/settings.js +25 -0
- package/dist/src/code-graph/hooks/settings.js.map +1 -0
- package/dist/src/code-graph/hooks/state.d.ts +20 -0
- package/dist/src/code-graph/hooks/state.d.ts.map +1 -0
- package/dist/src/code-graph/hooks/state.js +73 -0
- package/dist/src/code-graph/hooks/state.js.map +1 -0
- package/dist/src/code-graph/index.d.ts +6 -2
- package/dist/src/code-graph/index.d.ts.map +1 -1
- package/dist/src/code-graph/index.js +3 -1
- package/dist/src/code-graph/index.js.map +1 -1
- package/dist/src/code-graph/ko-text.d.ts +39 -0
- package/dist/src/code-graph/ko-text.d.ts.map +1 -0
- package/dist/src/code-graph/ko-text.js +223 -0
- package/dist/src/code-graph/ko-text.js.map +1 -0
- package/dist/src/code-graph/lock.d.ts +30 -0
- package/dist/src/code-graph/lock.d.ts.map +1 -0
- package/dist/src/code-graph/lock.js +140 -0
- package/dist/src/code-graph/lock.js.map +1 -0
- package/dist/src/code-graph/plugins/typescript-skeleton.d.ts +7 -0
- package/dist/src/code-graph/plugins/typescript-skeleton.d.ts.map +1 -0
- package/dist/src/code-graph/plugins/typescript-skeleton.js +157 -0
- package/dist/src/code-graph/plugins/typescript-skeleton.js.map +1 -0
- package/dist/src/code-graph/plugins/typescript.d.ts.map +1 -1
- package/dist/src/code-graph/plugins/typescript.js +58 -0
- package/dist/src/code-graph/plugins/typescript.js.map +1 -1
- package/dist/src/code-graph/storage.d.ts +85 -0
- package/dist/src/code-graph/storage.d.ts.map +1 -1
- package/dist/src/code-graph/storage.js +318 -3
- package/dist/src/code-graph/storage.js.map +1 -1
- package/dist/src/code-graph/types.d.ts +66 -0
- package/dist/src/code-graph/types.d.ts.map +1 -1
- package/dist/src/core/config.d.ts +33 -0
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +14 -0
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/errors.d.ts +4 -0
- package/dist/src/core/errors.d.ts.map +1 -1
- package/dist/src/core/errors.js +8 -0
- package/dist/src/core/errors.js.map +1 -1
- package/dist/src/core/hooks-env.d.ts +9 -0
- package/dist/src/core/hooks-env.d.ts.map +1 -0
- package/dist/src/core/hooks-env.js +16 -0
- package/dist/src/core/hooks-env.js.map +1 -0
- package/dist/src/mcp/schemas.d.ts +326 -3
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +170 -2
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +28 -4
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/architecture-passthrough.d.ts +9 -0
- package/dist/src/mcp/tools/architecture-passthrough.d.ts.map +1 -0
- package/dist/src/mcp/tools/architecture-passthrough.js +587 -0
- package/dist/src/mcp/tools/architecture-passthrough.js.map +1 -0
- package/dist/src/mcp/tools/code-graph-passthrough.d.ts +6 -1
- package/dist/src/mcp/tools/code-graph-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/code-graph-passthrough.js +95 -6
- package/dist/src/mcp/tools/code-graph-passthrough.js.map +1 -1
- package/dist/src/utils/claude-projects.d.ts +19 -0
- package/dist/src/utils/claude-projects.d.ts.map +1 -0
- package/dist/src/utils/claude-projects.js +157 -0
- package/dist/src/utils/claude-projects.js.map +1 -0
- package/dist/src/utils/read-only-tools.d.ts +19 -0
- package/dist/src/utils/read-only-tools.d.ts.map +1 -0
- package/dist/src/utils/read-only-tools.js +132 -0
- package/dist/src/utils/read-only-tools.js.map +1 -0
- package/package.json +5 -3
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +1 -1
- package/plugin/mcp.json +1 -1
- package/plugin/skills/_shared/proactive-routing.md +1 -0
- package/plugin/skills/architecture/SKILL.md +913 -0
- package/plugin/skills/blast-radius/SKILL.md +11 -1
- package/plugin/skills/diff-radius/SKILL.md +11 -0
- package/schemas/architecture-ir.schema.json +596 -0
- package/schemas/gestalt.schema.json +19 -0
package/CLAUDE.md
CHANGED
|
@@ -12,11 +12,12 @@
|
|
|
12
12
|
- **Review Pipeline**: Code Review 7종 에이전트(보안/성능/품질/프론트엔드/주석/라이팅/하네스) + consensus → 자동 수정 루프
|
|
13
13
|
- **MCP Server**: stdio transport, API 키 없으면 Passthrough 모드 자동 활성화 (Execute는 항상 Passthrough)
|
|
14
14
|
- **Skill System**: SKILL.md 기반 확장, chokidar hot-reload
|
|
15
|
-
- **Code Knowledge Graph**: 정적 분석 → 의존성 그래프 → Blast-Radius 영향 파일 추출, D3 시각화(`ges_graph_visualize`) 지원. git 이력에서 뽑은 co-change(함께 바뀐 파일)를 나란히 실어 import가 원리상 못 보는 관계까지
|
|
15
|
+
- **Code Knowledge Graph**: 정적 분석 → 의존성 그래프 → Blast-Radius 영향 파일 추출, D3 시각화(`ges_graph_visualize`) 지원. git 이력에서 뽑은 co-change(함께 바뀐 파일)를 나란히 실어 import가 원리상 못 보는 관계까지 잡는다. Claude Code 훅으로 세션에 포인터와 영향 범위를 자동으로 넣을 수 있다(기본 꺼짐)
|
|
16
16
|
- **Knowledge Base**: 코드 그래프·도메인 지식을 MD로 내보내고 로컬 임베딩으로 시맨틱 검색
|
|
17
17
|
- **Memory**: 이전 스펙·실행 이력을 `.gestalt/memory.json`에 축적, 신규 인터뷰에 자동 주입
|
|
18
18
|
- **Multi-Provider LLM**: frugal/standard/frontier 티어별로 Anthropic/OpenAI 호환 프로바이더 자유 조합
|
|
19
19
|
- **Local PR**: 에이전트끼리 레포 안에서 PR을 만들고 리뷰하고 머지하는 자리 — 원격에 안 나간다. 워크트리 여럿이 `.gestalt/reviews.db` 하나를 공유한다
|
|
20
|
+
- **Architecture View**: 세션이 코드와 맥락 소스를 탐색해 근거 달린 IR을 쓰면 서버가 검증하고 elkjs 좌표로 단일 HTML을 그린다. 서비스 노드가 있으면 전체에서 서비스, 기능영역, 화면으로 들어가는 드릴다운이 된다. 노드 하나를 고르면 그와 위아래로 이어진 카드만 남기는 포커스도 된다. 서비스 아래에는 손님, 직원, 시스템을 가로줄로 나눠 정상 흐름과 취소나 노쇼 같은 옆 흐름을 함께 그리는 도메인 흐름 레벨을 둘 수 있다. 흐름 그림은 상태 값으로, 기술 그림은 세션이 정한 구간으로 왼쪽에서 오른쪽을 나눈다. 단계 카드에서 기술 그림의 화면과 API로 건너간다. 근거 없는 실선은 거부하고 근거 없는 연결은 미해결 질문으로 돌린다. 따로 돌린 분석 둘을 git remote 기준으로 합쳐 제품끼리 같이 쓰는 게이트웨이와 서버, 저장소를 한 그림에 모을 수도 있다. 합친 그림은 맨 위에 같이 쓰는 카드를, 그 아래로 제품마다 전용 카드를 띠로 나눠 그리고 같이 쓰는 카드 위에 제품 브릭을 꽂는다. 전체보기는 prod 기준이다. 저장은 `.gestalt/architecture/`
|
|
20
21
|
- **Event Store**: better-sqlite3 WAL 모드 이벤트 소싱
|
|
21
22
|
|
|
22
23
|
## Tech Stack
|
|
@@ -50,17 +51,19 @@ pnpm tsx bin/gestalt.ts explain-eval --a plugin/role-agents/explainer/AGENT.md
|
|
|
50
51
|
- `ges_agent`: action=[list|get], name?
|
|
51
52
|
- `ges_status`: sessionId?, sessionType?, cwd?
|
|
52
53
|
- `ges_benchmark`: action=[start|respond|status], scenario?, benchmarkSessionId?, response?
|
|
53
|
-
- `ges_code_graph`: action=[build|blast_radius|diff_radius|query|co_change|stats|db_exists]
|
|
54
|
+
- `ges_code_graph`: action=[build|blast_radius|diff_radius|query|co_change|stats|skeleton|db_exists]
|
|
54
55
|
- `ges_graph_visualize`: repoRoot, port?
|
|
55
56
|
- `ges_generate_kb`: repoRoot?, outputPath?, types?, summarize?
|
|
56
57
|
- `ges_search`: query, k?, kbPath?, types?
|
|
57
58
|
- `ges_sync`: sourcePath?, targetPath
|
|
58
59
|
- `ges_pr`: action=[create|list|get|diff|comment|resolve|review|update|edit|merge|close|checkout|checkout_remove]
|
|
60
|
+
- `ges_architecture`: action=[start|filter_tools|match_endpoints|validate|render|status|merge|scan_docs|link_docs|stale_docs]
|
|
59
61
|
|
|
60
62
|
상세 플로우 → [`docs/mcp-reference.md`](./docs/mcp-reference.md)
|
|
61
63
|
설정 레퍼런스 → [`docs/configuration.md`](./docs/configuration.md)
|
|
62
64
|
코드 그래프 → [`docs/code-graph.md`](./docs/code-graph.md)
|
|
63
65
|
로컬 PR → [`docs/local-pr.md`](./docs/local-pr.md)
|
|
66
|
+
아키텍처 그림 → [`docs/architecture-view.md`](./docs/architecture-view.md)
|
|
64
67
|
|
|
65
68
|
## Role Agent 자동 라우팅
|
|
66
69
|
|
|
@@ -76,6 +79,7 @@ src/execute/ — ExecuteEngine, DAG Validator
|
|
|
76
79
|
src/resilience/ — Stagnation Detector, Lateral Thinking Personas
|
|
77
80
|
src/code-graph/ — CodeGraphEngine, BlastRadius, git 이력 co-change, 언어 플러그인 8개
|
|
78
81
|
src/graph-viz/ — 코드 그래프 D3 시각화 (ges_graph_visualize 백엔드)
|
|
82
|
+
src/architecture/ — 아키텍처 IR 스키마, 근거 검증, 이전 실행 병합, 분석 합치기, elkjs 레이아웃, HTML 렌더 (ges_architecture 백엔드)
|
|
79
83
|
src/local-pr/ — 로컬 PR 도메인 (이벤트 소싱, git 연산, gestalt pr·ges_pr 백엔드)
|
|
80
84
|
src/local-pr-web/ — 로컬 PR 읽기 전용 웹 UI (gestalt pr serve 백엔드)
|
|
81
85
|
src/knowledge-base/— KB 생성·시맨틱 검색·동기화 (ges_generate_kb/ges_search/ges_sync 백엔드)
|
|
@@ -90,12 +94,12 @@ src/skills/ — Skill System 엔진 (SKILL.md 파서·실행기, 최상
|
|
|
90
94
|
src/registry/ — 레지스트리 공통 베이스 클래스
|
|
91
95
|
src/humanize/ — 룰북 읽기 + AI-tell 탐지기 + 윤문 코드 검사 (`gestalt humanize-check` 백엔드)
|
|
92
96
|
src/explain/ — 대상별 설명 품질 검사 (`gestalt explain-check` 백엔드). 판정 구조만 humanize에서 빌려 쓴다
|
|
93
|
-
src/utils/ —
|
|
97
|
+
src/utils/ — 알림, 읽기 전용 도구 이름 걸러내기(read-only-tools), git remote로 ~/.claude/projects 메모리 묶기(claude-projects) 등 공용 유틸
|
|
94
98
|
src/cli/ — commander 기반 CLI
|
|
95
99
|
plugin/ — 배포 자산 전부. Claude Code와 Codex 플러그인이 이 디렉토리 하나를 공유한다
|
|
96
100
|
plugin/role-agents/ — 내장 Role Agent 9개 (architect, frontend-developer, backend-developer, devops-engineer, qa-engineer, designer, product-planner, researcher, technical-writer) + 스킬 지원용 에이전트(jira-writer, slack-messenger, presentation-writer, code-review-writer, code-review-responder, suggestion-verifier, explainer 등) 총 23개 + `_shared/references/` 공유 룰북(author-voice, ai-tell-quick-rules, style-guide, comment-rules, truncation-rules)과 리뷰 절차 문서(rule-path-walk) — 에이전트 아님, 레지스트리가 건너뜀
|
|
97
101
|
plugin/review-agents/ — 내장 Review Agent 7개 (security-reviewer, performance-reviewer, quality-reviewer, frontend-reviewer, comment-reviewer, writing-reviewer, harness-reviewer)
|
|
98
|
-
plugin/skills/ — SKILL.md
|
|
102
|
+
plugin/skills/ — SKILL.md 22개 (interview, spec, execute, dispatch, agent, review, review-reply, review-loop, pr, local-pr, ship, build-graph, blast-radius, diff-radius, architecture, jira-create, slack-send, brief, presentation, explain, solve, setup) + `_shared/` 공유 규칙(스킬 아님, 레지스트리가 건너뜀)
|
|
99
103
|
plugin/agents/ — 파이프라인 에이전트 5개
|
|
100
104
|
plugin/personas/ — Lateral Thinking 페르소나
|
|
101
105
|
```
|
|
@@ -111,6 +115,7 @@ skills → plugin/skills 루트 심링크 — Claude와 Orca가 읽
|
|
|
111
115
|
.grok-plugin/marketplace.json source: "./plugin" ← Grok
|
|
112
116
|
plugin/.codex-plugin/plugin.json "skills": "./skills/"
|
|
113
117
|
plugin/.mcp.json Grok MCP (plugin/mcp.json과 동일)
|
|
118
|
+
hooks/hooks.json Claude 플러그인 훅 (코드 그래프 자동 주입). Claude만 읽는다
|
|
114
119
|
```
|
|
115
120
|
|
|
116
121
|
- Orca는 `plugin.json`을 안 읽는다. 설치 경로 뒤에 `skills`를 하드코딩해 붙이고 그 아래만 훑는다. 루트 `skills` 심링크를 지우면 Orca 채팅의 스킬 피커에서 gestalt 스킬이 하나도 안 뜬다.
|
|
@@ -122,6 +127,9 @@ plugin/.mcp.json Grok MCP (plugin/mcp.json과 동일)
|
|
|
122
127
|
- Codex는 `path`가 가리킨 디렉토리를 통째로 복사한다. 레포 루트를 가리키면 `.git`과 `node_modules`까지 딸려가 1.6GB가 되므로 반드시 `plugin/`으로 좁힌다.
|
|
123
128
|
- Codex는 심링크를 따라가지 않는다. 자산은 실물 파일로 `plugin/` 안에 있어야 한다.
|
|
124
129
|
- `plugin/skills/review/SKILL.md`가 `../../role-agents/`를 참조한다. 스킬과 에이전트를 함께 옮겨야 이 상대 깊이가 유지된다.
|
|
130
|
+
- 훅은 루트 `hooks/hooks.json` 하나만 두고 `plugin.json`에 `hooks` 필드를 넣지 않는다. 문서상 필드와 기본 파일은 merge된다. 같은 파일을 가리키면 실제로는 한 번만 걸리는 걸 확인했지만 그래도 한 곳만 둔다.
|
|
131
|
+
- Codex와 Grok 훅은 지원하지 않는다. 훅 자동 주입은 Claude 전용이다.
|
|
132
|
+
- 훅 런처는 `scripts/code-graph-hook.sh`다. Node 탐색은 `scripts/lib/pick-node.sh`를 `mcp-serve.sh`와 함께 쓴다. 자세한 동작은 [`docs/code-graph.md`](./docs/code-graph.md#claude-code-훅-자동-주입)에 있다.
|
|
125
133
|
- 자산 디렉토리 기본값은 `src/core/config.ts`에 `skillsDir`, `agentsDir`, `roleAgentsDir`, `reviewAgentsDir`, `personasDir` 다섯 개로 있다. 경로를 바꾸면 전부 함께 고친다.
|
|
126
134
|
|
|
127
135
|
### MCP 기동 경로
|
package/README.ko.md
CHANGED
|
@@ -151,7 +151,7 @@ claude plugin install gestalt@gestalt
|
|
|
151
151
|
|
|
152
152
|
| 항목 | 내용 |
|
|
153
153
|
|------|------|
|
|
154
|
-
| **MCP 도구** | `ges_interview`, `ges_generate_spec`, `ges_execute`, `ges_create_agent`, `ges_agent`, `ges_status`, `ges_code_graph`, `ges_graph_visualize`, `ges_benchmark`, `ges_generate_kb`, `ges_search`, `ges_sync`, `ges_pr` — [MCP 레퍼런스](./docs/mcp-reference.md) 참고 |
|
|
154
|
+
| **MCP 도구** | `ges_interview`, `ges_generate_spec`, `ges_execute`, `ges_create_agent`, `ges_agent`, `ges_status`, `ges_code_graph`, `ges_graph_visualize`, `ges_benchmark`, `ges_generate_kb`, `ges_search`, `ges_sync`, `ges_pr`, `ges_architecture` — [MCP 레퍼런스](./docs/mcp-reference.md) 참고 |
|
|
155
155
|
| **슬래시 커맨드** | 워크플로 스킬 — `/interview`, `/spec`, `/execute`, `/review`, `/pr`, `/brief`, `/jira-create`, `/slack-send` 등. 전체 목록은 [스킬](#스킬) |
|
|
156
156
|
| **에이전트** | 파이프라인 에이전트, [Role 에이전트와 Review 에이전트](#6단계--code-review-코드-리뷰) |
|
|
157
157
|
| **CLAUDE.md** | 프로젝트 컨텍스트 및 MCP 사용 가이드 자동 추가 |
|
|
@@ -606,6 +606,7 @@ Claude Code에서는 스킬마다 슬래시 커맨드로 불러요. Codex에서
|
|
|
606
606
|
| `/build-graph` | 코드 지식 그래프만 빌드하거나 다시 빌드해요 |
|
|
607
607
|
| `/blast-radius` | 코드를 고치기 전에 영향받을 파일을 찾아 그 파일만 컨텍스트에 올려요 |
|
|
608
608
|
| `/diff-radius` | 커밋 안 한 변경과 스테이징한 변경이 어디까지 영향을 주는지 봐요 |
|
|
609
|
+
| `/architecture` | 화면에서 DB까지, 또는 배포 경로를 그림으로 그려요. 실선은 전부 코드나 API 명세 근거가 있고 확인 못 한 연결은 점선이나 미해결 질문으로 남아요 |
|
|
609
610
|
| `/review` | PR이나 브랜치, 커밋을 [Review 에이전트](#6단계--code-review-코드-리뷰)로 검토해요. 대상이 PR이면 인라인 코멘트까지 남겨요 |
|
|
610
611
|
| `/review-loop` | 남의 GitHub PR을 리뷰어로 끝까지 따라가요. 리뷰하고 판정을 남긴 뒤 작성자 대응을 기다렸다가 approve가 날 때까지 재리뷰해요 |
|
|
611
612
|
| `/review-reply` | 내 PR에 달린 리뷰 코멘트를 처리해요. 고치고 커밋한 뒤 `code-review-responder`가 쓴 답글을 남겨요 |
|
package/README.md
CHANGED
|
@@ -126,7 +126,7 @@ What you get:
|
|
|
126
126
|
|
|
127
127
|
| Item | Details |
|
|
128
128
|
|------|---------|
|
|
129
|
-
| **MCP Tools** | `ges_interview`, `ges_generate_spec`, `ges_execute`, `ges_create_agent`, `ges_agent`, `ges_status`, `ges_code_graph`, `ges_graph_visualize`, `ges_benchmark`, `ges_generate_kb`, `ges_search`, `ges_sync`, `ges_pr` — see the [MCP reference](./docs/mcp-reference.md) |
|
|
129
|
+
| **MCP Tools** | `ges_interview`, `ges_generate_spec`, `ges_execute`, `ges_create_agent`, `ges_agent`, `ges_status`, `ges_code_graph`, `ges_graph_visualize`, `ges_benchmark`, `ges_generate_kb`, `ges_search`, `ges_sync`, `ges_pr`, `ges_architecture` — see the [MCP reference](./docs/mcp-reference.md) |
|
|
130
130
|
| **Slash Commands** | Workflow skills — `/interview`, `/spec`, `/execute`, `/review`, `/pr`, `/brief`, `/jira-create`, `/slack-send`, and more. Full list in [Skills](#skills) |
|
|
131
131
|
| **Agents** | Pipeline agents, [role agents](#role-agents), and [review agents](#review-agents) |
|
|
132
132
|
| **CLAUDE.md** | Project context and MCP usage guide auto-injected |
|
|
@@ -642,6 +642,7 @@ Each skill is a slash command in Claude Code. In Codex the same skill is `gestal
|
|
|
642
642
|
| `/build-graph` | Build or rebuild the code knowledge graph only |
|
|
643
643
|
| `/blast-radius` | Before changing code, find the files a change would reach and load only those |
|
|
644
644
|
| `/diff-radius` | See how far uncommitted and staged changes reach |
|
|
645
|
+
| `/architecture` | Draw a screen-to-DB or deploy-path architecture view where every solid line cites code or an API spec. Unproven links stay dashed or become open questions |
|
|
645
646
|
| `/review` | Review a PR, branch, or commit with the [review agents](#review-agents), and post inline comments when the target is a PR |
|
|
646
647
|
| `/review-loop` | Follow someone else's GitHub PR as reviewer — review, post a verdict, wait for the author, and re-review until approve |
|
|
647
648
|
| `/review-reply` | Work through review comments on your own PR: fix, commit, and post replies written by `code-review-responder` |
|
|
@@ -968,6 +969,7 @@ Claude Code (you)
|
|
|
968
969
|
- [Configuration Reference](./docs/configuration.md) — full config options
|
|
969
970
|
- [Code Knowledge Graph](./docs/code-graph.md) — static analysis and blast-radius
|
|
970
971
|
- [Local PR](./docs/local-pr.md) — in-repo pull requests for agent-to-agent review
|
|
972
|
+
- [Architecture View](./docs/architecture-view.md) — evidence-backed architecture diagrams
|
|
971
973
|
|
|
972
974
|
---
|
|
973
975
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gestalt-hook.d.ts","sourceRoot":"","sources":["../../bin/gestalt-hook.ts"],"names":[],"mappings":";AAQA,QAAA,MAAS,KAAK,sBAAE,OAAO,sBAAE,GAAG,oBAAgB,CAAC;AAE7C,iBAAe,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAI1C;AAED,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA4BnC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
// Claude Code 플러그인 훅 엔트리. 매 프롬프트마다 뜨는 프로세스라 CLI(bin/gestalt.ts)를
|
|
4
|
+
// 거치지 않는다. commander와 MCP 서버까지 딸려오면 기동만 수백 ms가 든다.
|
|
5
|
+
// 어떤 경로든 exit 0으로 끝낸다. 훅이 실패해도 사용자 턴은 막지 않는다.
|
|
6
|
+
process.env['GESTALT_LOG_LEVEL'] ??= 'warn';
|
|
7
|
+
const [, entry, command, arg] = process.argv;
|
|
8
|
+
async function readStdin() {
|
|
9
|
+
const chunks = [];
|
|
10
|
+
for await (const chunk of process.stdin)
|
|
11
|
+
chunks.push(chunk);
|
|
12
|
+
return Buffer.concat(chunks).toString('utf-8');
|
|
13
|
+
}
|
|
14
|
+
async function main() {
|
|
15
|
+
if (command === 'refresh' || command === 'reindex') {
|
|
16
|
+
// 백그라운드 갱신. 여기서만 엔진을 불러온다. refresh는 훅이 띄운 것이라 훅이 켜져 있어야 돈다.
|
|
17
|
+
// reindex는 MCP 질의가 다시 파싱할 게 많아 넘긴 것이라 훅 설정과 무관하다
|
|
18
|
+
if (!arg)
|
|
19
|
+
return;
|
|
20
|
+
if (command === 'refresh') {
|
|
21
|
+
const { isHooksEnabled } = await import('../src/code-graph/hooks/settings.js');
|
|
22
|
+
if (!isHooksEnabled(arg))
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const { codeGraphEngine } = await import('../src/code-graph/engine.js');
|
|
26
|
+
await codeGraphEngine.refresh(arg);
|
|
27
|
+
codeGraphEngine.close();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const { parseEventArg, runHook, DEADLINE_MS } = await import('../src/code-graph/hooks/run.js');
|
|
31
|
+
const event = parseEventArg(command);
|
|
32
|
+
if (!event)
|
|
33
|
+
return;
|
|
34
|
+
// stdin이 안 닫히거나 비동기 대기가 길어지면 데드라인에서 끊는다.
|
|
35
|
+
// 동기 구간은 이 타이머가 못 끊으므로 runHook이 단계마다 데드라인을 따로 본다
|
|
36
|
+
setTimeout(() => process.exit(0), DEADLINE_MS[event] + 300).unref();
|
|
37
|
+
const { detachedRefreshSpawner } = await import('../src/code-graph/hooks/background.js');
|
|
38
|
+
const out = await runHook(event, await readStdin(), {
|
|
39
|
+
spawnRefresh: entry ? detachedRefreshSpawner(entry) : undefined,
|
|
40
|
+
});
|
|
41
|
+
if (out)
|
|
42
|
+
process.stdout.write(out);
|
|
43
|
+
}
|
|
44
|
+
main()
|
|
45
|
+
.catch((e) => {
|
|
46
|
+
process.stderr.write(`[gestalt] hook failed: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
47
|
+
})
|
|
48
|
+
.finally(() => {
|
|
49
|
+
process.exitCode = 0;
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=gestalt-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gestalt-hook.js","sourceRoot":"","sources":["../../bin/gestalt-hook.ts"],"names":[],"mappings":";;AAEA,iEAAiE;AACjE,mDAAmD;AACnD,8CAA8C;AAE9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,MAAM,CAAC;AAE5C,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE7C,KAAK,UAAU,SAAS;IACtB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,4DAA4D;QAC5D,iDAAiD;QACjD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC;YAC/E,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBAAE,OAAO;QACnC,CAAC;QACD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACxE,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,yCAAyC;IACzC,iDAAiD;IACjD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;IACzF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,SAAS,EAAE,EAAE;QAClD,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;KAChE,CAAC,CAAC;IACH,IAAI,GAAG;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,IAAI,EAAE;KACH,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjG,CAAC,CAAC;KACD,OAAO,CAAC,GAAG,EAAE;IACZ,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tienne/gestalt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.89.0",
|
|
4
4
|
"description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"node": ">=22.0.0"
|
|
18
18
|
},
|
|
19
19
|
"bin": {
|
|
20
|
-
"gestalt": "./dist/bin/gestalt.js"
|
|
20
|
+
"gestalt": "./dist/bin/gestalt.js",
|
|
21
|
+
"gestalt-hook": "./dist/bin/gestalt-hook.js"
|
|
21
22
|
},
|
|
22
23
|
"files": [
|
|
23
24
|
"dist",
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
"scripts": {
|
|
29
30
|
"dev": "tsx bin/gestalt.ts",
|
|
30
31
|
"build": "tsc -p tsconfig.build.json",
|
|
31
|
-
"postbuild": "rm -rf dist/plugin && mkdir -p dist/plugin && cp -r plugin/agents plugin/role-agents plugin/review-agents plugin/personas plugin/skills dist/plugin/ && cp -r schemas dist/ && cp package.json dist/ && chmod +x dist/bin/gestalt.js && pnpm run verify:plugin && pnpm run verify:rules && pnpm run verify:rule-overlap && pnpm run verify:output-style",
|
|
32
|
+
"postbuild": "rm -rf dist/plugin && mkdir -p dist/plugin && cp -r plugin/agents plugin/role-agents plugin/review-agents plugin/personas plugin/skills dist/plugin/ && cp -r schemas dist/ && cp package.json dist/ && chmod +x dist/bin/gestalt.js dist/bin/gestalt-hook.js && pnpm run verify:plugin && pnpm run verify:rules && pnpm run verify:rule-overlap && pnpm run verify:output-style",
|
|
32
33
|
"verify:plugin": "tsx scripts/verify-plugin-assets.ts",
|
|
33
34
|
"prepublishOnly": "pnpm build",
|
|
34
35
|
"test": "vitest run",
|
|
@@ -57,6 +58,7 @@
|
|
|
57
58
|
"chokidar": "^4.0.3",
|
|
58
59
|
"commander": "^13.1.0",
|
|
59
60
|
"dotenv": "^17.3.1",
|
|
61
|
+
"elkjs": "^0.12.0",
|
|
60
62
|
"gray-matter": "^4.0.3",
|
|
61
63
|
"node-notifier": "^10.0.1",
|
|
62
64
|
"node-pty": "^1.1.0",
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
| 슬라이드 Reveal.js 구조·템플릿·비주얼 디자인 자문 | `presentation-designer` |
|
|
50
50
|
| 발표자료·슬라이드·프레젠테이션 제작 요청 ("발표자료 만들어줘", "슬라이드 만들어줘", "피치덱") | `presentation` 스킬 사용 (presentation-writer 콘텐츠 → 승인 단계 → presentation-designer 디자인 → Reveal.js HTML) |
|
|
51
51
|
| 시스템 설계, 아키텍처 리뷰, 설계 패턴 | `architect` |
|
|
52
|
+
| 근거 달린 아키텍처 그림 요청 ("아키텍처 그려줘", "화면에서 DB까지 그려줘", "배포 경로 그려줘") | `architecture` 스킬 사용 (맥락 소스 찾기 → 읽기 전용 걸러내기 → 탐색 → IR validate → 미해결 질문 → render). 설계 리뷰나 자문이면 `architect` |
|
|
52
53
|
| 보안 취약점, 인증/인가, 시크릿 노출 검토 | `security-reviewer` |
|
|
53
54
|
| 성능 병목, N+1, 메모리 누수 분석 | `performance-reviewer` |
|
|
54
55
|
| 코드 가독성, SOLID, 에러 처리 리뷰 | `quality-reviewer` |
|