Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
28fb401
feat(web): add workspace file explorer
elkaix Aug 30, 2026
416a04b
fix: validate config and preserve steer provenance
elkaix Aug 30, 2026
0be1e19
docs: correct legacy engine flag scope
elkaix Aug 30, 2026
856b986
feat: add two-model Discussion mode
elkaix Aug 30, 2026
b17fec4
docs: correct doctor validator loading comment
elkaix Aug 30, 2026
da69646
fix(tui): refresh terminal interface design
elkaix Aug 30, 2026
2466102
feat: add Discussion comparison and files view
elkaix Aug 31, 2026
6555231
fix: label sidebar icon actions
elkaix Aug 31, 2026
3b74d77
chore: update GitNexus and CLI development setup
elkaix Aug 31, 2026
94cf944
chore: add agent context and refresh new chat icon
elkaix Aug 31, 2026
1917626
docs: make issue read command executable
elkaix Aug 31, 2026
938bf96
fix(web): reset sidebar seam for Explorer
elkaix Aug 31, 2026
96d20c2
fix: align Expert Talk with accepted protocol
elkaix Aug 31, 2026
6722900
test(tui): verify active tab ANSI colors
elkaix Aug 31, 2026
a8f676b
Merge remote-tracking branch 'origin/main' into pr-clean-264
elkaix Aug 31, 2026
195206f
Merge remote-tracking branch 'origin/fix/config-doctor-steer-provenan…
elkaix Aug 31, 2026
4e91397
Merge remote-tracking branch 'origin/feat/workspace-file-explorer' in…
elkaix Aug 31, 2026
dbe1f09
docs(tui): translate updated design guidance
elkaix Aug 31, 2026
a318976
Merge remote-tracking branch 'origin/feat/tui-design-refresh' into fi…
elkaix Aug 31, 2026
b03396d
Merge remote-tracking branch 'origin/fix/web-icons-and-agent-context'…
elkaix Aug 31, 2026
2bb16d7
Merge remote-tracking branch 'origin/main' into HEAD
elkaix Aug 31, 2026
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .agents/skills/write-tui/DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,13 @@
Select a model (type to search)
Tab toggle provider · ↑↓ navigate · Enter select · Esc cancel ← hint 首项即 Tab 切换
← 空行
All Pythinker Code openai ← tab 条:激活项填充背景(primary 底 + text 字 + bold),其余 textMuted
All Pythinker Code openai ← tab bar: active uses selectionBg + inverseText + bold; others use textMuted
← 空行
❯ ...
```

- tab 条位置:**在 hint 行下方**,且**上下各一空行**(与 hint、与列表都隔开)。
- 激活 tab`chalk.bgHex(colors.primary).hex(colors.text).bold(\` ${label} \`)`;非激活:`chalk.hex(colors.textMuted)`。两者可见宽度一致,切换不抖动。
- Active tab: `chalk.bgHex(colors.selectionBg).hex(colors.inverseText).bold(\` ${label} \`)`; inactive tab: `chalk.hex(colors.textMuted)`. Both have the same visible width.
- 第一个 tab 恒为 `All`(聚合所有 provider);**默认停在 `All`**。仅当显式传 `initialTabId`(如 `/provider` 新增完跳转)才停在指定 provider tab。
- `Tab` / `Shift+Tab` 循环切换;hint 行首项即 `Tab toggle provider`。
- 当前模型在所在 tab 内仍以 `❯` + ` ← current` 标记,切 tab 不丢失定位。
Expand Down
5 changes: 5 additions & 0 deletions .changeset/add-discussion-mode.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": minor
---

Add experimental Expert Talk for automatic two-model analysis, reciprocal review, and fused answers.
5 changes: 5 additions & 0 deletions .changeset/refresh-cli-tui.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Update the terminal interface colors, transcript hierarchy, welcome panel, and workflow progress states.
5 changes: 5 additions & 0 deletions .changeset/refreshed-new-chat-icon.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@pymodel/pythinker-code": patch
---

Use a refreshed New Chat icon across desktop and mobile navigation.
45 changes: 45 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,48 @@ Gate behind flags. Env: `PYTHINKER_CODE_EXPERIMENTAL_<NAME>` toggles one; `PYTHI
- Hard rules that affect almost every task: update the root `AGENTS.md`.
- Rules that only affect a specific directory: update the nearest sub-directory `AGENTS.md`.
- Project-map entries stay at 1–2 sentences; deep package docs live in the package's own `AGENTS.md`.

<!-- gitnexus:start -->
# GitNexus — Code Intelligence

This project is indexed by GitNexus as **pythinker-code** (91454 symbols, 263612 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.

> Index stale? Run `node .gitnexus/run.cjs analyze` from the project root — it auto-selects an available runner. No `.gitnexus/run.cjs` yet? `npx gitnexus analyze` (npm 11 crash → `npm i -g gitnexus`; #1939).

## Always Do

- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
- **MUST run `detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. For regression review, compare against the default branch: `detect_changes({scope: "compare", base_ref: "main"})`.
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
- When exploring unfamiliar code, use `query({search_query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `context({name: "symbolName"})`.
- For security review, `explain({target: "fileOrSymbol"})` lists taint findings (source→sink flows; needs `analyze --pdg`).

## Never Do

- NEVER edit a function, class, or method without first running `impact` on it.
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
- NEVER rename symbols with find-and-replace — use `rename` which understands the call graph.
- NEVER commit changes without running `detect_changes()` to check affected scope.

## Resources

| Resource | Use for |
|----------|---------|
| `gitnexus://repo/pythinker-code/context` | Codebase overview, check index freshness |
| `gitnexus://repo/pythinker-code/clusters` | All functional areas |
| `gitnexus://repo/pythinker-code/processes` | All execution flows |
| `gitnexus://repo/pythinker-code/process/{name}` | Step-by-step execution trace |

## CLI

| Task | Read this skill file |
|------|---------------------|
| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` |
| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` |
| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` |
| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` |
| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` |
| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` |

<!-- gitnexus:end -->
45 changes: 45 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1 +1,46 @@
@AGENTS.md

<!-- gitnexus:start -->
# GitNexus — Code Intelligence

This project is indexed by GitNexus as **pythinker-code** (91454 symbols, 263612 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.

> Index stale? Run `node .gitnexus/run.cjs analyze` from the project root — it auto-selects an available runner. No `.gitnexus/run.cjs` yet? `npx gitnexus analyze` (npm 11 crash → `npm i -g gitnexus`; #1939).

## Always Do

- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
- **MUST run `detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. For regression review, compare against the default branch: `detect_changes({scope: "compare", base_ref: "main"})`.
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
- When exploring unfamiliar code, use `query({search_query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `context({name: "symbolName"})`.
- For security review, `explain({target: "fileOrSymbol"})` lists taint findings (source→sink flows; needs `analyze --pdg`).

## Never Do

- NEVER edit a function, class, or method without first running `impact` on it.
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
- NEVER rename symbols with find-and-replace — use `rename` which understands the call graph.
- NEVER commit changes without running `detect_changes()` to check affected scope.

## Resources

| Resource | Use for |
|----------|---------|
| `gitnexus://repo/pythinker-code/context` | Codebase overview, check index freshness |
| `gitnexus://repo/pythinker-code/clusters` | All functional areas |
| `gitnexus://repo/pythinker-code/processes` | All execution flows |
| `gitnexus://repo/pythinker-code/process/{name}` | Step-by-step execution trace |

## CLI

| Task | Read this skill file |
|------|---------------------|
| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` |
| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` |
| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` |
| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` |
| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` |
| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` |

<!-- gitnexus:end -->
69 changes: 69 additions & 0 deletions CONTEXT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Pythinker Code

Pythinker Code is a provider-agnostic AI coding agent for terminal, browser, desktop, and editor workflows.

## Language

**Expert Talk**:
A structured conversation between two user-selected AI models that returns one fused answer.
_Avoid_: Debate mode, fusion mode

**Expert Talk pair**:
The two ordered configured model IDs saved for future Expert Talk runs.
_Avoid_: Global pair, secondary model

**Configured model ID**:
The stable catalog key that identifies one configured model record and can be stored in an Expert Talk pair.
_Avoid_: Display name, provider model name, loose alias

**Effective model binding**:
The immutable execution identity produced for one Expert Talk role after current catalog and routing validation.
_Avoid_: Selected model, live alias

**Pair collapse**:
An Expert Talk admission failure where two configured selections resolve to the same effective execution target.
_Avoid_: Duplicate model choice

**Expert Talk admission**:
The pre-acceptance validation that resolves and freezes an eligible, distinct pair for one run.
_Avoid_: Provider ping, opening stage

**Fusion Lead**:
The first model in an Expert Talk pair. It participates as an equal expert, then its immutable model binding supplies a fresh inference for fusion.
_Avoid_: Architect, judge, Model 1

**Peer Expert**:
The second model in an Expert Talk pair. It participates as an equal expert in opening and peer review but does not own fusion.
_Avoid_: Secondary model, Model 2

**Expert Talk activation**:
The transient intent to use Expert Talk for the next accepted user turn.
_Avoid_: Expert Talk mode, persistent activation

**Expert Talk run**:
One recorded Expert Talk execution owned by one accepted user turn.
_Avoid_: Resumed run, shared run

**Expert Talk exchange**:
Two independent openings followed by one symmetric peer review between the run-scoped Fusion Lead and Peer Expert.
_Avoid_: Debate, adaptive conversation

**Fused answer**:
The single direct response produced by a fresh Fusion Lead inference after the Expert Talk exchange.
_Avoid_: Verdict, winning answer

**Fusion notes**:
Structured consensus, divergence, uncertainty, and attribution stored with an Expert Talk run but excluded from the normal assistant answer.
_Avoid_: Diagnostic appendix, debate transcript

**Expert Talk stage artifact**:
An immutable complete or partial opening, review, or fusion output owned by one role and stage and kept outside the normal transcript.
_Avoid_: Participant message, hidden memory

**Expert Talk result**:
The versioned successful-run record that contains the fused answer and separate fusion notes.
_Avoid_: Meeting transcript, winning opinion

**Expert Talk retry**:
A new run for the same accepted turn input that reruns admission and every stage without resuming participants or reusing artifacts.
_Avoid_: Resume, fusion-only retry
4 changes: 2 additions & 2 deletions apps/pythinker-code/dist-web/.web-bundle-manifest.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"sourceHash": "f7cf5febcdf56552c8623ab242e49ecff60f2d3bb0a307d139a04c7225217ed1",
"sourceFileCount": 412
"sourceHash": "0a37c819db91d9c13c59e2b4cd1b26e5e6eda54d5dab911b7d233bc3e6a1868a",
"sourceFileCount": 417
}
Loading
Loading