Add claude-code-source-code and claw-code directories

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
chauncygu
2026-03-31 09:24:58 -07:00
parent fb2057a9fc
commit 33d153f5b8
2049 changed files with 522662 additions and 0 deletions

1
claw-code/.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
github: instructkr

2
claw-code/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
__pycache__/
archive/

187
claw-code/README.md Normal file
View File

@@ -0,0 +1,187 @@
# Rewriting Project Claw Code
<p align="center">
<img src="assets/clawd-hero.jpeg" alt="Claw" width="300" />
</p>
<p align="center">
<strong>Better Harness Tools, not merely storing the archive of leaked Claude Code</strong>
</p>
<p align="center">
<a href="https://github.com/sponsors/instructkr"><img src="https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?logo=github&style=for-the-badge" alt="Sponsor on GitHub" /></a>
</p>
> [!IMPORTANT]
> **Rust port is now in progress** on the [`dev/rust`](https://github.com/instructkr/claw-code/tree/dev/rust) branch and is expected to be merged into main today. The Rust implementation aims to deliver a faster, memory-safe harness runtime. Stay tuned — this will be the definitive version of the project.
> If you find this work useful, consider [sponsoring @instructkr on GitHub](https://github.com/sponsors/instructkr) to support continued open-source harness engineering research.
---
## Backstory
At 4 AM on March 31, 2026, I woke up to my phone blowing up with notifications. The Claude Code source had been exposed, and the entire dev community was in a frenzy. My girlfriend in Korea was genuinely worried I might face legal action from Anthropic just for having the code on my machine — so I did what any engineer would do under pressure: I sat down, ported the core features to Python from scratch, and pushed it before the sun came up.
The whole thing was orchestrated end-to-end using [oh-my-codex (OmX)](https://github.com/Yeachan-Heo/oh-my-codex) by [@bellman_ych](https://x.com/bellman_ych) — a workflow layer built on top of OpenAI's Codex ([@OpenAIDevs](https://x.com/OpenAIDevs)). I used `$team` mode for parallel code review and `$ralph` mode for persistent execution loops with architect-level verification. The entire porting session — from reading the original harness structure to producing a working Python tree with tests — was driven through OmX orchestration.
The result is a clean-room Python rewrite that captures the architectural patterns of Claude Code's agent harness without copying any proprietary source. I'm now actively collaborating with [@bellman_ych](https://x.com/bellman_ych) — the creator of OmX himself — to push this further. The basic Python foundation is already in place and functional, but we're just getting started. **Stay tuned — a much more capable version is on the way.**
https://github.com/instructkr/claw-code
![Tweet screenshot](assets/tweet-screenshot.png)
## The Creators Featured in Wall Street Journal For Avid Claude Code Fans
I've been deeply interested in **harness engineering** — studying how agent systems wire tools, orchestrate tasks, and manage runtime context. This isn't a sudden thing. The Wall Street Journal featured my work earlier this month, documenting how I've been one of the most active power users exploring these systems:
> AI startup worker Sigrid Jin, who attended the Seoul dinner, single-handedly used 25 billion of Claude Code tokens last year. At the time, usage limits were looser, allowing early enthusiasts to reach tens of billions of tokens at a very low cost.
>
> Despite his countless hours with Claude Code, Jin isn't faithful to any one AI lab. The tools available have different strengths and weaknesses, he said. Codex is better at reasoning, while Claude Code generates cleaner, more shareable code.
>
> Jin flew to San Francisco in February for Claude Code's first birthday party, where attendees waited in line to compare notes with Cherny. The crowd included a practicing cardiologist from Belgium who had built an app to help patients navigate care, and a California lawyer who made a tool for automating building permit approvals using Claude Code.
>
> "It was basically like a sharing party," Jin said. "There were lawyers, there were doctors, there were dentists. They did not have software engineering backgrounds."
>
> — *The Wall Street Journal*, March 21, 2026, [*"The Trillion Dollar Race to Automate Our Entire Lives"*](https://lnkd.in/gs9td3qd)
![WSJ Feature](assets/wsj-feature.png)
---
## Porting Status
The main source tree is now Python-first.
- `src/` contains the active Python porting workspace
- `tests/` verifies the current Python workspace
- the exposed snapshot is no longer part of the tracked repository state
The current Python workspace is not yet a complete one-to-one replacement for the original system, but the primary implementation surface is now Python.
## Why this rewrite exists
I originally studied the exposed codebase to understand its harness, tool wiring, and agent workflow. After spending more time with the legal and ethical questions—and after reading the essay linked below—I did not want the exposed snapshot itself to remain the main tracked source tree.
This repository now focuses on Python porting work instead.
## Repository Layout
```text
.
├── src/ # Python porting workspace
│ ├── __init__.py
│ ├── commands.py
│ ├── main.py
│ ├── models.py
│ ├── port_manifest.py
│ ├── query_engine.py
│ ├── task.py
│ └── tools.py
├── tests/ # Python verification
├── assets/omx/ # OmX workflow screenshots
├── 2026-03-09-is-legal-the-same-as-legitimate-ai-reimplementation-and-the-erosion-of-copyleft.md
└── README.md
```
## Python Workspace Overview
The new Python `src/` tree currently provides:
- **`port_manifest.py`** — summarizes the current Python workspace structure
- **`models.py`** — dataclasses for subsystems, modules, and backlog state
- **`commands.py`** — Python-side command port metadata
- **`tools.py`** — Python-side tool port metadata
- **`query_engine.py`** — renders a Python porting summary from the active workspace
- **`main.py`** — a CLI entrypoint for manifest and summary output
## Quickstart
Render the Python porting summary:
```bash
python3 -m src.main summary
```
Print the current Python workspace manifest:
```bash
python3 -m src.main manifest
```
List the current Python modules:
```bash
python3 -m src.main subsystems --limit 16
```
Run verification:
```bash
python3 -m unittest discover -s tests -v
```
Run the parity audit against the local ignored archive (when present):
```bash
python3 -m src.main parity-audit
```
Inspect mirrored command/tool inventories:
```bash
python3 -m src.main commands --limit 10
python3 -m src.main tools --limit 10
```
## Current Parity Checkpoint
The port now mirrors the archived root-entry file surface, top-level subsystem names, and command/tool inventories much more closely than before. However, it is **not yet** a full runtime-equivalent replacement for the original TypeScript system; the Python tree still contains fewer executable runtime slices than the archived source.
## Built with `oh-my-codex`
The restructuring and documentation work on this repository was AI-assisted and orchestrated with Yeachan Heo's [oh-my-codex (OmX)](https://github.com/Yeachan-Heo/oh-my-codex), layered on top of Codex.
- **`$team` mode:** used for coordinated parallel review and architectural feedback
- **`$ralph` mode:** used for persistent execution, verification, and completion discipline
- **Codex-driven workflow:** used to turn the main `src/` tree into a Python-first porting workspace
### OmX workflow screenshots
![OmX workflow screenshot 1](assets/omx/omx-readme-review-1.png)
*Ralph/team orchestration view while the README and essay context were being reviewed in terminal panes.*
![OmX workflow screenshot 2](assets/omx/omx-readme-review-2.png)
*Split-pane review and verification flow during the final README wording pass.*
## Community
<p align="center">
<a href="https://instruct.kr/"><img src="assets/instructkr.png" alt="instructkr" width="400" /></a>
</p>
Join the [**instructkr Discord**](https://instruct.kr/) — the best Korean language model community. Come chat about LLMs, harness engineering, agent workflows, and everything in between.
[![Discord](https://img.shields.io/badge/Join%20Discord-instruct.kr-5865F2?logo=discord&style=for-the-badge)](https://instruct.kr/)
## Star History
This repository became **the fastest GitHub repo in history to surpass 30K stars**, reaching the milestone in just a few hours after publication.
<a href="https://star-history.com/#instructkr/claw-code&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=instructkr/claw-code&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=instructkr/claw-code&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=instructkr/claw-code&type=Date" />
</picture>
</a>
![Star History Screenshot](assets/star-history.png)
## Ownership / Affiliation Disclaimer
- This repository does **not** claim ownership of the original Claude Code source material.
- This repository is **not affiliated with, endorsed by, or maintained by Anthropic**.

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 KiB

View File

@@ -0,0 +1,19 @@
from __future__ import annotations
from .query_engine import QueryEnginePort
from .runtime import PortRuntime
class QueryEngineRuntime(QueryEnginePort):
def route(self, prompt: str, limit: int = 5) -> str:
matches = PortRuntime().route_prompt(prompt, limit=limit)
lines = ['# Query Engine Route', '', f'Prompt: {prompt}', '']
if not matches:
lines.append('No mirrored command/tool matches found.')
return '\n'.join(lines)
lines.append('Matches:')
lines.extend(f'- [{match.kind}] {match.name} ({match.score}) — {match.source_hint}' for match in matches)
return '\n'.join(lines)
__all__ = ['QueryEnginePort', 'QueryEngineRuntime']

15
claw-code/src/Tool.py Normal file
View File

@@ -0,0 +1,15 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class ToolDefinition:
name: str
purpose: str
DEFAULT_TOOLS = (
ToolDefinition('port_manifest', 'Summarize the active Python workspace'),
ToolDefinition('query_engine', 'Render a Python-first porting summary'),
)

29
claw-code/src/__init__.py Normal file
View File

@@ -0,0 +1,29 @@
"""Python porting workspace for the Claude Code rewrite effort."""
from .commands import PORTED_COMMANDS, build_command_backlog
from .parity_audit import ParityAuditResult, run_parity_audit
from .port_manifest import PortManifest, build_port_manifest
from .query_engine import QueryEnginePort, TurnResult
from .runtime import PortRuntime, RuntimeSession
from .session_store import StoredSession, load_session, save_session
from .system_init import build_system_init_message
from .tools import PORTED_TOOLS, build_tool_backlog
__all__ = [
'ParityAuditResult',
'PortManifest',
'PortRuntime',
'QueryEnginePort',
'RuntimeSession',
'StoredSession',
'TurnResult',
'PORTED_COMMANDS',
'PORTED_TOOLS',
'build_command_backlog',
'build_port_manifest',
'build_system_init_message',
'build_tool_backlog',
'load_session',
'run_parity_audit',
'save_session',
]

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `assistant` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'assistant.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `bootstrap` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'bootstrap.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,27 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class BootstrapGraph:
stages: tuple[str, ...]
def as_markdown(self) -> str:
lines = ['# Bootstrap Graph', '']
lines.extend(f'- {stage}' for stage in self.stages)
return '\n'.join(lines)
def build_bootstrap_graph() -> BootstrapGraph:
return BootstrapGraph(
stages=(
'top-level prefetch side effects',
'warning handler and environment guards',
'CLI parser and pre-action trust gate',
'setup() + commands/agents parallel load',
'deferred init after trust',
'mode routing: local / remote / ssh / teleport / direct-connect / deep-link',
'query engine submit loop',
)
)

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `bridge` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'bridge.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `buddy` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'buddy.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `cli` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'cli.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,34 @@
from __future__ import annotations
from dataclasses import dataclass
from .commands import get_commands
from .models import PortingModule
@dataclass(frozen=True)
class CommandGraph:
builtins: tuple[PortingModule, ...]
plugin_like: tuple[PortingModule, ...]
skill_like: tuple[PortingModule, ...]
def flattened(self) -> tuple[PortingModule, ...]:
return self.builtins + self.plugin_like + self.skill_like
def as_markdown(self) -> str:
lines = [
'# Command Graph',
'',
f'Builtins: {len(self.builtins)}',
f'Plugin-like commands: {len(self.plugin_like)}',
f'Skill-like commands: {len(self.skill_like)}',
]
return '\n'.join(lines)
def build_command_graph() -> CommandGraph:
commands = get_commands()
builtins = tuple(module for module in commands if 'plugin' not in module.source_hint.lower() and 'skills' not in module.source_hint.lower())
plugin_like = tuple(module for module in commands if 'plugin' in module.source_hint.lower())
skill_like = tuple(module for module in commands if 'skills' in module.source_hint.lower())
return CommandGraph(builtins=builtins, plugin_like=plugin_like, skill_like=skill_like)

90
claw-code/src/commands.py Normal file
View File

@@ -0,0 +1,90 @@
from __future__ import annotations
import json
from dataclasses import dataclass
from functools import lru_cache
from pathlib import Path
from .models import PortingBacklog, PortingModule
SNAPSHOT_PATH = Path(__file__).resolve().parent / 'reference_data' / 'commands_snapshot.json'
@dataclass(frozen=True)
class CommandExecution:
name: str
source_hint: str
prompt: str
handled: bool
message: str
@lru_cache(maxsize=1)
def load_command_snapshot() -> tuple[PortingModule, ...]:
raw_entries = json.loads(SNAPSHOT_PATH.read_text())
return tuple(
PortingModule(
name=entry['name'],
responsibility=entry['responsibility'],
source_hint=entry['source_hint'],
status='mirrored',
)
for entry in raw_entries
)
PORTED_COMMANDS = load_command_snapshot()
@lru_cache(maxsize=1)
def built_in_command_names() -> frozenset[str]:
return frozenset(module.name for module in PORTED_COMMANDS)
def build_command_backlog() -> PortingBacklog:
return PortingBacklog(title='Command surface', modules=list(PORTED_COMMANDS))
def command_names() -> list[str]:
return [module.name for module in PORTED_COMMANDS]
def get_command(name: str) -> PortingModule | None:
needle = name.lower()
for module in PORTED_COMMANDS:
if module.name.lower() == needle:
return module
return None
def get_commands(cwd: str | None = None, include_plugin_commands: bool = True, include_skill_commands: bool = True) -> tuple[PortingModule, ...]:
commands = list(PORTED_COMMANDS)
if not include_plugin_commands:
commands = [module for module in commands if 'plugin' not in module.source_hint.lower()]
if not include_skill_commands:
commands = [module for module in commands if 'skills' not in module.source_hint.lower()]
return tuple(commands)
def find_commands(query: str, limit: int = 20) -> list[PortingModule]:
needle = query.lower()
matches = [module for module in PORTED_COMMANDS if needle in module.name.lower() or needle in module.source_hint.lower()]
return matches[:limit]
def execute_command(name: str, prompt: str = '') -> CommandExecution:
module = get_command(name)
if module is None:
return CommandExecution(name=name, source_hint='', prompt=prompt, handled=False, message=f'Unknown mirrored command: {name}')
action = f"Mirrored command '{module.name}' from {module.source_hint} would handle prompt {prompt!r}."
return CommandExecution(name=module.name, source_hint=module.source_hint, prompt=prompt, handled=True, message=action)
def render_command_index(limit: int = 20, query: str | None = None) -> str:
modules = find_commands(query, limit) if query else list(PORTED_COMMANDS[:limit])
lines = [f'Command entries: {len(PORTED_COMMANDS)}', '']
if query:
lines.append(f'Filtered by: {query}')
lines.append('')
lines.extend(f'- {module.name}{module.source_hint}' for module in modules)
return '\n'.join(lines)

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `components` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'components.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `constants` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'constants.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

47
claw-code/src/context.py Normal file
View File

@@ -0,0 +1,47 @@
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
@dataclass(frozen=True)
class PortContext:
source_root: Path
tests_root: Path
assets_root: Path
archive_root: Path
python_file_count: int
test_file_count: int
asset_file_count: int
archive_available: bool
def build_port_context(base: Path | None = None) -> PortContext:
root = base or Path(__file__).resolve().parent.parent
source_root = root / 'src'
tests_root = root / 'tests'
assets_root = root / 'assets'
archive_root = root / 'archive' / 'claude_code_ts_snapshot' / 'src'
return PortContext(
source_root=source_root,
tests_root=tests_root,
assets_root=assets_root,
archive_root=archive_root,
python_file_count=sum(1 for path in source_root.rglob('*.py') if path.is_file()),
test_file_count=sum(1 for path in tests_root.rglob('*.py') if path.is_file()),
asset_file_count=sum(1 for path in assets_root.rglob('*') if path.is_file()),
archive_available=archive_root.exists(),
)
def render_context(context: PortContext) -> str:
return '\n'.join([
f'Source root: {context.source_root}',
f'Test root: {context.tests_root}',
f'Assets root: {context.assets_root}',
f'Archive root: {context.archive_root}',
f'Python files: {context.python_file_count}',
f'Test files: {context.test_file_count}',
f'Assets: {context.asset_file_count}',
f'Archive available: {context.archive_available}',
])

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `coordinator` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'coordinator.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,8 @@
from __future__ import annotations
from .cost_tracker import CostTracker
def apply_cost_hook(tracker: CostTracker, label: str, units: int) -> CostTracker:
tracker.record(label, units)
return tracker

View File

@@ -0,0 +1,13 @@
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass
class CostTracker:
total_units: int = 0
events: list[str] = field(default_factory=list)
def record(self, label: str, units: int) -> None:
self.total_units += units
self.events.append(f'{label}:{units}')

View File

@@ -0,0 +1,31 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class DeferredInitResult:
trusted: bool
plugin_init: bool
skill_init: bool
mcp_prefetch: bool
session_hooks: bool
def as_lines(self) -> tuple[str, ...]:
return (
f'- plugin_init={self.plugin_init}',
f'- skill_init={self.skill_init}',
f'- mcp_prefetch={self.mcp_prefetch}',
f'- session_hooks={self.session_hooks}',
)
def run_deferred_init(trusted: bool) -> DeferredInitResult:
enabled = bool(trusted)
return DeferredInitResult(
trusted=trusted,
plugin_init=enabled,
skill_init=enabled,
mcp_prefetch=enabled,
session_hooks=enabled,
)

View File

@@ -0,0 +1,15 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class DialogLauncher:
name: str
description: str
DEFAULT_DIALOGS = (
DialogLauncher('summary', 'Launch the Markdown summary view'),
DialogLauncher('parity_audit', 'Launch the parity audit view'),
)

View File

@@ -0,0 +1,21 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class DirectModeReport:
mode: str
target: str
active: bool
def as_text(self) -> str:
return f'mode={self.mode}\ntarget={self.target}\nactive={self.active}'
def run_direct_connect(target: str) -> DirectModeReport:
return DirectModeReport(mode='direct-connect', target=target, active=True)
def run_deep_link(target: str) -> DirectModeReport:
return DirectModeReport(mode='deep-link', target=target, active=True)

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `entrypoints` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'entrypoints.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,51 @@
from __future__ import annotations
from dataclasses import dataclass
from .commands import PORTED_COMMANDS, execute_command
from .tools import PORTED_TOOLS, execute_tool
@dataclass(frozen=True)
class MirroredCommand:
name: str
source_hint: str
def execute(self, prompt: str) -> str:
return execute_command(self.name, prompt).message
@dataclass(frozen=True)
class MirroredTool:
name: str
source_hint: str
def execute(self, payload: str) -> str:
return execute_tool(self.name, payload).message
@dataclass(frozen=True)
class ExecutionRegistry:
commands: tuple[MirroredCommand, ...]
tools: tuple[MirroredTool, ...]
def command(self, name: str) -> MirroredCommand | None:
lowered = name.lower()
for command in self.commands:
if command.name.lower() == lowered:
return command
return None
def tool(self, name: str) -> MirroredTool | None:
lowered = name.lower()
for tool in self.tools:
if tool.name.lower() == lowered:
return tool
return None
def build_execution_registry() -> ExecutionRegistry:
return ExecutionRegistry(
commands=tuple(MirroredCommand(module.name, module.source_hint) for module in PORTED_COMMANDS),
tools=tuple(MirroredTool(module.name, module.source_hint) for module in PORTED_TOOLS),
)

22
claw-code/src/history.py Normal file
View File

@@ -0,0 +1,22 @@
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass(frozen=True)
class HistoryEvent:
title: str
detail: str
@dataclass
class HistoryLog:
events: list[HistoryEvent] = field(default_factory=list)
def add(self, title: str, detail: str) -> None:
self.events.append(HistoryEvent(title=title, detail=detail))
def as_markdown(self) -> str:
lines = ['# Session History', '']
lines.extend(f'- {event.title}: {event.detail}' for event in self.events)
return '\n'.join(lines)

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `hooks` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'hooks.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

6
claw-code/src/ink.py Normal file
View File

@@ -0,0 +1,6 @@
from __future__ import annotations
def render_markdown_panel(text: str) -> str:
border = '=' * 40
return f"{border}\n{text}\n{border}"

View File

@@ -0,0 +1,5 @@
from __future__ import annotations
def bulletize(items: list[str]) -> str:
return '\n'.join(f'- {item}' for item in items)

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `keybindings` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'keybindings.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

213
claw-code/src/main.py Normal file
View File

@@ -0,0 +1,213 @@
from __future__ import annotations
import argparse
from .bootstrap_graph import build_bootstrap_graph
from .command_graph import build_command_graph
from .commands import execute_command, get_command, get_commands, render_command_index
from .direct_modes import run_deep_link, run_direct_connect
from .parity_audit import run_parity_audit
from .permissions import ToolPermissionContext
from .port_manifest import build_port_manifest
from .query_engine import QueryEnginePort
from .remote_runtime import run_remote_mode, run_ssh_mode, run_teleport_mode
from .runtime import PortRuntime
from .session_store import load_session
from .setup import run_setup
from .tool_pool import assemble_tool_pool
from .tools import execute_tool, get_tool, get_tools, render_tool_index
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description='Python porting workspace for the Claude Code rewrite effort')
subparsers = parser.add_subparsers(dest='command', required=True)
subparsers.add_parser('summary', help='render a Markdown summary of the Python porting workspace')
subparsers.add_parser('manifest', help='print the current Python workspace manifest')
subparsers.add_parser('parity-audit', help='compare the Python workspace against the local ignored TypeScript archive when available')
subparsers.add_parser('setup-report', help='render the startup/prefetch setup report')
subparsers.add_parser('command-graph', help='show command graph segmentation')
subparsers.add_parser('tool-pool', help='show assembled tool pool with default settings')
subparsers.add_parser('bootstrap-graph', help='show the mirrored bootstrap/runtime graph stages')
list_parser = subparsers.add_parser('subsystems', help='list the current Python modules in the workspace')
list_parser.add_argument('--limit', type=int, default=32)
commands_parser = subparsers.add_parser('commands', help='list mirrored command entries from the archived snapshot')
commands_parser.add_argument('--limit', type=int, default=20)
commands_parser.add_argument('--query')
commands_parser.add_argument('--no-plugin-commands', action='store_true')
commands_parser.add_argument('--no-skill-commands', action='store_true')
tools_parser = subparsers.add_parser('tools', help='list mirrored tool entries from the archived snapshot')
tools_parser.add_argument('--limit', type=int, default=20)
tools_parser.add_argument('--query')
tools_parser.add_argument('--simple-mode', action='store_true')
tools_parser.add_argument('--no-mcp', action='store_true')
tools_parser.add_argument('--deny-tool', action='append', default=[])
tools_parser.add_argument('--deny-prefix', action='append', default=[])
route_parser = subparsers.add_parser('route', help='route a prompt across mirrored command/tool inventories')
route_parser.add_argument('prompt')
route_parser.add_argument('--limit', type=int, default=5)
bootstrap_parser = subparsers.add_parser('bootstrap', help='build a runtime-style session report from the mirrored inventories')
bootstrap_parser.add_argument('prompt')
bootstrap_parser.add_argument('--limit', type=int, default=5)
loop_parser = subparsers.add_parser('turn-loop', help='run a small stateful turn loop for the mirrored runtime')
loop_parser.add_argument('prompt')
loop_parser.add_argument('--limit', type=int, default=5)
loop_parser.add_argument('--max-turns', type=int, default=3)
loop_parser.add_argument('--structured-output', action='store_true')
flush_parser = subparsers.add_parser('flush-transcript', help='persist and flush a temporary session transcript')
flush_parser.add_argument('prompt')
load_session_parser = subparsers.add_parser('load-session', help='load a previously persisted session')
load_session_parser.add_argument('session_id')
remote_parser = subparsers.add_parser('remote-mode', help='simulate remote-control runtime branching')
remote_parser.add_argument('target')
ssh_parser = subparsers.add_parser('ssh-mode', help='simulate SSH runtime branching')
ssh_parser.add_argument('target')
teleport_parser = subparsers.add_parser('teleport-mode', help='simulate teleport runtime branching')
teleport_parser.add_argument('target')
direct_parser = subparsers.add_parser('direct-connect-mode', help='simulate direct-connect runtime branching')
direct_parser.add_argument('target')
deep_link_parser = subparsers.add_parser('deep-link-mode', help='simulate deep-link runtime branching')
deep_link_parser.add_argument('target')
show_command = subparsers.add_parser('show-command', help='show one mirrored command entry by exact name')
show_command.add_argument('name')
show_tool = subparsers.add_parser('show-tool', help='show one mirrored tool entry by exact name')
show_tool.add_argument('name')
exec_command_parser = subparsers.add_parser('exec-command', help='execute a mirrored command shim by exact name')
exec_command_parser.add_argument('name')
exec_command_parser.add_argument('prompt')
exec_tool_parser = subparsers.add_parser('exec-tool', help='execute a mirrored tool shim by exact name')
exec_tool_parser.add_argument('name')
exec_tool_parser.add_argument('payload')
return parser
def main(argv: list[str] | None = None) -> int:
parser = build_parser()
args = parser.parse_args(argv)
manifest = build_port_manifest()
if args.command == 'summary':
print(QueryEnginePort(manifest).render_summary())
return 0
if args.command == 'manifest':
print(manifest.to_markdown())
return 0
if args.command == 'parity-audit':
print(run_parity_audit().to_markdown())
return 0
if args.command == 'setup-report':
print(run_setup().as_markdown())
return 0
if args.command == 'command-graph':
print(build_command_graph().as_markdown())
return 0
if args.command == 'tool-pool':
print(assemble_tool_pool().as_markdown())
return 0
if args.command == 'bootstrap-graph':
print(build_bootstrap_graph().as_markdown())
return 0
if args.command == 'subsystems':
for subsystem in manifest.top_level_modules[: args.limit]:
print(f'{subsystem.name}\t{subsystem.file_count}\t{subsystem.notes}')
return 0
if args.command == 'commands':
if args.query:
print(render_command_index(limit=args.limit, query=args.query))
else:
commands = get_commands(include_plugin_commands=not args.no_plugin_commands, include_skill_commands=not args.no_skill_commands)
output_lines = [f'Command entries: {len(commands)}', '']
output_lines.extend(f'- {module.name}{module.source_hint}' for module in commands[: args.limit])
print('\n'.join(output_lines))
return 0
if args.command == 'tools':
if args.query:
print(render_tool_index(limit=args.limit, query=args.query))
else:
permission_context = ToolPermissionContext.from_iterables(args.deny_tool, args.deny_prefix)
tools = get_tools(simple_mode=args.simple_mode, include_mcp=not args.no_mcp, permission_context=permission_context)
output_lines = [f'Tool entries: {len(tools)}', '']
output_lines.extend(f'- {module.name}{module.source_hint}' for module in tools[: args.limit])
print('\n'.join(output_lines))
return 0
if args.command == 'route':
matches = PortRuntime().route_prompt(args.prompt, limit=args.limit)
if not matches:
print('No mirrored command/tool matches found.')
return 0
for match in matches:
print(f'{match.kind}\t{match.name}\t{match.score}\t{match.source_hint}')
return 0
if args.command == 'bootstrap':
print(PortRuntime().bootstrap_session(args.prompt, limit=args.limit).as_markdown())
return 0
if args.command == 'turn-loop':
results = PortRuntime().run_turn_loop(args.prompt, limit=args.limit, max_turns=args.max_turns, structured_output=args.structured_output)
for idx, result in enumerate(results, start=1):
print(f'## Turn {idx}')
print(result.output)
print(f'stop_reason={result.stop_reason}')
return 0
if args.command == 'flush-transcript':
engine = QueryEnginePort.from_workspace()
engine.submit_message(args.prompt)
path = engine.persist_session()
print(path)
print(f'flushed={engine.transcript_store.flushed}')
return 0
if args.command == 'load-session':
session = load_session(args.session_id)
print(f'{session.session_id}\n{len(session.messages)} messages\nin={session.input_tokens} out={session.output_tokens}')
return 0
if args.command == 'remote-mode':
print(run_remote_mode(args.target).as_text())
return 0
if args.command == 'ssh-mode':
print(run_ssh_mode(args.target).as_text())
return 0
if args.command == 'teleport-mode':
print(run_teleport_mode(args.target).as_text())
return 0
if args.command == 'direct-connect-mode':
print(run_direct_connect(args.target).as_text())
return 0
if args.command == 'deep-link-mode':
print(run_deep_link(args.target).as_text())
return 0
if args.command == 'show-command':
module = get_command(args.name)
if module is None:
print(f'Command not found: {args.name}')
return 1
print('\n'.join([module.name, module.source_hint, module.responsibility]))
return 0
if args.command == 'show-tool':
module = get_tool(args.name)
if module is None:
print(f'Tool not found: {args.name}')
return 1
print('\n'.join([module.name, module.source_hint, module.responsibility]))
return 0
if args.command == 'exec-command':
result = execute_command(args.name, args.prompt)
print(result.message)
return 0 if result.handled else 1
if args.command == 'exec-tool':
result = execute_tool(args.name, args.payload)
print(result.message)
return 0 if result.handled else 1
parser.error(f'unknown command: {args.command}')
return 2
if __name__ == '__main__':
raise SystemExit(main())

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `memdir` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'memdir.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `migrations` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'migrations.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

49
claw-code/src/models.py Normal file
View File

@@ -0,0 +1,49 @@
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass(frozen=True)
class Subsystem:
name: str
path: str
file_count: int
notes: str
@dataclass(frozen=True)
class PortingModule:
name: str
responsibility: str
source_hint: str
status: str = 'planned'
@dataclass(frozen=True)
class PermissionDenial:
tool_name: str
reason: str
@dataclass(frozen=True)
class UsageSummary:
input_tokens: int = 0
output_tokens: int = 0
def add_turn(self, prompt: str, output: str) -> 'UsageSummary':
return UsageSummary(
input_tokens=self.input_tokens + len(prompt.split()),
output_tokens=self.output_tokens + len(output.split()),
)
@dataclass
class PortingBacklog:
title: str
modules: list[PortingModule] = field(default_factory=list)
def summary_lines(self) -> list[str]:
return [
f'- {module.name} [{module.status}] — {module.responsibility} (from {module.source_hint})'
for module in self.modules
]

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `moreright` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'moreright.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `native-ts` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'native_ts.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `outputStyles` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'outputStyles.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,138 @@
from __future__ import annotations
import json
from dataclasses import dataclass
from pathlib import Path
ARCHIVE_ROOT = Path(__file__).resolve().parent.parent / 'archive' / 'claude_code_ts_snapshot' / 'src'
CURRENT_ROOT = Path(__file__).resolve().parent
REFERENCE_SURFACE_PATH = CURRENT_ROOT / 'reference_data' / 'archive_surface_snapshot.json'
COMMAND_SNAPSHOT_PATH = CURRENT_ROOT / 'reference_data' / 'commands_snapshot.json'
TOOL_SNAPSHOT_PATH = CURRENT_ROOT / 'reference_data' / 'tools_snapshot.json'
ARCHIVE_ROOT_FILES = {
'QueryEngine.ts': 'QueryEngine.py',
'Task.ts': 'task.py',
'Tool.ts': 'Tool.py',
'commands.ts': 'commands.py',
'context.ts': 'context.py',
'cost-tracker.ts': 'cost_tracker.py',
'costHook.ts': 'costHook.py',
'dialogLaunchers.tsx': 'dialogLaunchers.py',
'history.ts': 'history.py',
'ink.ts': 'ink.py',
'interactiveHelpers.tsx': 'interactiveHelpers.py',
'main.tsx': 'main.py',
'projectOnboardingState.ts': 'projectOnboardingState.py',
'query.ts': 'query.py',
'replLauncher.tsx': 'replLauncher.py',
'setup.ts': 'setup.py',
'tasks.ts': 'tasks.py',
'tools.ts': 'tools.py',
}
ARCHIVE_DIR_MAPPINGS = {
'assistant': 'assistant',
'bootstrap': 'bootstrap',
'bridge': 'bridge',
'buddy': 'buddy',
'cli': 'cli',
'commands': 'commands.py',
'components': 'components',
'constants': 'constants',
'context': 'context.py',
'coordinator': 'coordinator',
'entrypoints': 'entrypoints',
'hooks': 'hooks',
'ink': 'ink.py',
'keybindings': 'keybindings',
'memdir': 'memdir',
'migrations': 'migrations',
'moreright': 'moreright',
'native-ts': 'native_ts',
'outputStyles': 'outputStyles',
'plugins': 'plugins',
'query': 'query.py',
'remote': 'remote',
'schemas': 'schemas',
'screens': 'screens',
'server': 'server',
'services': 'services',
'skills': 'skills',
'state': 'state',
'tasks': 'tasks.py',
'tools': 'tools.py',
'types': 'types',
'upstreamproxy': 'upstreamproxy',
'utils': 'utils',
'vim': 'vim',
'voice': 'voice',
}
@dataclass(frozen=True)
class ParityAuditResult:
archive_present: bool
root_file_coverage: tuple[int, int]
directory_coverage: tuple[int, int]
total_file_ratio: tuple[int, int]
command_entry_ratio: tuple[int, int]
tool_entry_ratio: tuple[int, int]
missing_root_targets: tuple[str, ...]
missing_directory_targets: tuple[str, ...]
def to_markdown(self) -> str:
lines = ['# Parity Audit']
if not self.archive_present:
lines.append('Local archive unavailable; parity audit cannot compare against the original snapshot.')
return '\n'.join(lines)
lines.extend([
'',
f'Root file coverage: **{self.root_file_coverage[0]}/{self.root_file_coverage[1]}**',
f'Directory coverage: **{self.directory_coverage[0]}/{self.directory_coverage[1]}**',
f'Total Python files vs archived TS-like files: **{self.total_file_ratio[0]}/{self.total_file_ratio[1]}**',
f'Command entry coverage: **{self.command_entry_ratio[0]}/{self.command_entry_ratio[1]}**',
f'Tool entry coverage: **{self.tool_entry_ratio[0]}/{self.tool_entry_ratio[1]}**',
'',
'Missing root targets:',
])
if self.missing_root_targets:
lines.extend(f'- {item}' for item in self.missing_root_targets)
else:
lines.append('- none')
lines.extend(['', 'Missing directory targets:'])
if self.missing_directory_targets:
lines.extend(f'- {item}' for item in self.missing_directory_targets)
else:
lines.append('- none')
return '\n'.join(lines)
def _reference_surface() -> dict[str, object]:
return json.loads(REFERENCE_SURFACE_PATH.read_text())
def _snapshot_count(path: Path) -> int:
return len(json.loads(path.read_text()))
def run_parity_audit() -> ParityAuditResult:
current_entries = {path.name for path in CURRENT_ROOT.iterdir()}
root_hits = [target for target in ARCHIVE_ROOT_FILES.values() if target in current_entries]
dir_hits = [target for target in ARCHIVE_DIR_MAPPINGS.values() if target in current_entries]
missing_roots = tuple(target for target in ARCHIVE_ROOT_FILES.values() if target not in current_entries)
missing_dirs = tuple(target for target in ARCHIVE_DIR_MAPPINGS.values() if target not in current_entries)
current_python_files = sum(1 for path in CURRENT_ROOT.rglob('*.py') if path.is_file())
reference = _reference_surface()
return ParityAuditResult(
archive_present=ARCHIVE_ROOT.exists(),
root_file_coverage=(len(root_hits), len(ARCHIVE_ROOT_FILES)),
directory_coverage=(len(dir_hits), len(ARCHIVE_DIR_MAPPINGS)),
total_file_ratio=(current_python_files, int(reference['total_ts_like_files'])),
command_entry_ratio=(_snapshot_count(COMMAND_SNAPSHOT_PATH), int(reference['command_entry_count'])),
tool_entry_ratio=(_snapshot_count(TOOL_SNAPSHOT_PATH), int(reference['tool_entry_count'])),
missing_root_targets=missing_roots,
missing_directory_targets=missing_dirs,
)

View File

@@ -0,0 +1,20 @@
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass(frozen=True)
class ToolPermissionContext:
deny_names: frozenset[str] = field(default_factory=frozenset)
deny_prefixes: tuple[str, ...] = ()
@classmethod
def from_iterables(cls, deny_names: list[str] | None = None, deny_prefixes: list[str] | None = None) -> 'ToolPermissionContext':
return cls(
deny_names=frozenset(name.lower() for name in (deny_names or [])),
deny_prefixes=tuple(prefix.lower() for prefix in (deny_prefixes or [])),
)
def blocks(self, tool_name: str) -> bool:
lowered = tool_name.lower()
return lowered in self.deny_names or any(lowered.startswith(prefix) for prefix in self.deny_prefixes)

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `plugins` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'plugins.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,52 @@
from __future__ import annotations
from collections import Counter
from dataclasses import dataclass
from pathlib import Path
from .models import Subsystem
DEFAULT_SRC_ROOT = Path(__file__).resolve().parent
@dataclass(frozen=True)
class PortManifest:
src_root: Path
total_python_files: int
top_level_modules: tuple[Subsystem, ...]
def to_markdown(self) -> str:
lines = [
f'Port root: `{self.src_root}`',
f'Total Python files: **{self.total_python_files}**',
'',
'Top-level Python modules:',
]
for module in self.top_level_modules:
lines.append(f'- `{module.name}` ({module.file_count} files) — {module.notes}')
return '\n'.join(lines)
def build_port_manifest(src_root: Path | None = None) -> PortManifest:
root = src_root or DEFAULT_SRC_ROOT
files = [path for path in root.rglob('*.py') if path.is_file()]
counter = Counter(
path.relative_to(root).parts[0] if len(path.relative_to(root).parts) > 1 else path.name
for path in files
if path.name != '__pycache__'
)
notes = {
'__init__.py': 'package export surface',
'main.py': 'CLI entrypoint',
'port_manifest.py': 'workspace manifest generation',
'query_engine.py': 'port orchestration summary layer',
'commands.py': 'command backlog metadata',
'tools.py': 'tool backlog metadata',
'models.py': 'shared dataclasses',
'task.py': 'task-level planning structures',
}
modules = tuple(
Subsystem(name=name, path=f'src/{name}', file_count=count, notes=notes.get(name, 'Python port support module'))
for name, count in counter.most_common()
)
return PortManifest(src_root=root, total_python_files=len(files), top_level_modules=modules)

23
claw-code/src/prefetch.py Normal file
View File

@@ -0,0 +1,23 @@
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
@dataclass(frozen=True)
class PrefetchResult:
name: str
started: bool
detail: str
def start_mdm_raw_read() -> PrefetchResult:
return PrefetchResult('mdm_raw_read', True, 'Simulated MDM raw-read prefetch for workspace bootstrap')
def start_keychain_prefetch() -> PrefetchResult:
return PrefetchResult('keychain_prefetch', True, 'Simulated keychain prefetch for trusted startup path')
def start_project_scan(root: Path) -> PrefetchResult:
return PrefetchResult('project_scan', True, f'Scanned project root {root}')

View File

@@ -0,0 +1,10 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass
class ProjectOnboardingState:
has_readme: bool
has_tests: bool
python_first: bool = True

13
claw-code/src/query.py Normal file
View File

@@ -0,0 +1,13 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class QueryRequest:
prompt: str
@dataclass(frozen=True)
class QueryResponse:
text: str

View File

@@ -0,0 +1,193 @@
from __future__ import annotations
import json
from dataclasses import dataclass, field
from uuid import uuid4
from .commands import build_command_backlog
from .models import PermissionDenial, UsageSummary
from .port_manifest import PortManifest, build_port_manifest
from .session_store import StoredSession, load_session, save_session
from .tools import build_tool_backlog
from .transcript import TranscriptStore
@dataclass(frozen=True)
class QueryEngineConfig:
max_turns: int = 8
max_budget_tokens: int = 2000
compact_after_turns: int = 12
structured_output: bool = False
structured_retry_limit: int = 2
@dataclass(frozen=True)
class TurnResult:
prompt: str
output: str
matched_commands: tuple[str, ...]
matched_tools: tuple[str, ...]
permission_denials: tuple[PermissionDenial, ...]
usage: UsageSummary
stop_reason: str
@dataclass
class QueryEnginePort:
manifest: PortManifest
config: QueryEngineConfig = field(default_factory=QueryEngineConfig)
session_id: str = field(default_factory=lambda: uuid4().hex)
mutable_messages: list[str] = field(default_factory=list)
permission_denials: list[PermissionDenial] = field(default_factory=list)
total_usage: UsageSummary = field(default_factory=UsageSummary)
transcript_store: TranscriptStore = field(default_factory=TranscriptStore)
@classmethod
def from_workspace(cls) -> 'QueryEnginePort':
return cls(manifest=build_port_manifest())
@classmethod
def from_saved_session(cls, session_id: str) -> 'QueryEnginePort':
stored = load_session(session_id)
transcript = TranscriptStore(entries=list(stored.messages), flushed=True)
return cls(
manifest=build_port_manifest(),
session_id=stored.session_id,
mutable_messages=list(stored.messages),
total_usage=UsageSummary(stored.input_tokens, stored.output_tokens),
transcript_store=transcript,
)
def submit_message(
self,
prompt: str,
matched_commands: tuple[str, ...] = (),
matched_tools: tuple[str, ...] = (),
denied_tools: tuple[PermissionDenial, ...] = (),
) -> TurnResult:
if len(self.mutable_messages) >= self.config.max_turns:
output = f'Max turns reached before processing prompt: {prompt}'
return TurnResult(
prompt=prompt,
output=output,
matched_commands=matched_commands,
matched_tools=matched_tools,
permission_denials=denied_tools,
usage=self.total_usage,
stop_reason='max_turns_reached',
)
summary_lines = [
f'Prompt: {prompt}',
f'Matched commands: {", ".join(matched_commands) if matched_commands else "none"}',
f'Matched tools: {", ".join(matched_tools) if matched_tools else "none"}',
f'Permission denials: {len(denied_tools)}',
]
output = self._format_output(summary_lines)
projected_usage = self.total_usage.add_turn(prompt, output)
stop_reason = 'completed'
if projected_usage.input_tokens + projected_usage.output_tokens > self.config.max_budget_tokens:
stop_reason = 'max_budget_reached'
self.mutable_messages.append(prompt)
self.transcript_store.append(prompt)
self.permission_denials.extend(denied_tools)
self.total_usage = projected_usage
self.compact_messages_if_needed()
return TurnResult(
prompt=prompt,
output=output,
matched_commands=matched_commands,
matched_tools=matched_tools,
permission_denials=denied_tools,
usage=self.total_usage,
stop_reason=stop_reason,
)
def stream_submit_message(
self,
prompt: str,
matched_commands: tuple[str, ...] = (),
matched_tools: tuple[str, ...] = (),
denied_tools: tuple[PermissionDenial, ...] = (),
):
yield {'type': 'message_start', 'session_id': self.session_id, 'prompt': prompt}
if matched_commands:
yield {'type': 'command_match', 'commands': matched_commands}
if matched_tools:
yield {'type': 'tool_match', 'tools': matched_tools}
if denied_tools:
yield {'type': 'permission_denial', 'denials': [denial.tool_name for denial in denied_tools]}
result = self.submit_message(prompt, matched_commands, matched_tools, denied_tools)
yield {'type': 'message_delta', 'text': result.output}
yield {
'type': 'message_stop',
'usage': {'input_tokens': result.usage.input_tokens, 'output_tokens': result.usage.output_tokens},
'stop_reason': result.stop_reason,
'transcript_size': len(self.transcript_store.entries),
}
def compact_messages_if_needed(self) -> None:
if len(self.mutable_messages) > self.config.compact_after_turns:
self.mutable_messages[:] = self.mutable_messages[-self.config.compact_after_turns :]
self.transcript_store.compact(self.config.compact_after_turns)
def replay_user_messages(self) -> tuple[str, ...]:
return self.transcript_store.replay()
def flush_transcript(self) -> None:
self.transcript_store.flush()
def persist_session(self) -> str:
self.flush_transcript()
path = save_session(
StoredSession(
session_id=self.session_id,
messages=tuple(self.mutable_messages),
input_tokens=self.total_usage.input_tokens,
output_tokens=self.total_usage.output_tokens,
)
)
return str(path)
def _format_output(self, summary_lines: list[str]) -> str:
if self.config.structured_output:
payload = {
'summary': summary_lines,
'session_id': self.session_id,
}
return self._render_structured_output(payload)
return '\n'.join(summary_lines)
def _render_structured_output(self, payload: dict[str, object]) -> str:
last_error: Exception | None = None
for _ in range(self.config.structured_retry_limit):
try:
return json.dumps(payload, indent=2)
except (TypeError, ValueError) as exc: # pragma: no cover - defensive branch
last_error = exc
payload = {'summary': ['structured output retry'], 'session_id': self.session_id}
raise RuntimeError('structured output rendering failed') from last_error
def render_summary(self) -> str:
command_backlog = build_command_backlog()
tool_backlog = build_tool_backlog()
sections = [
'# Python Porting Workspace Summary',
'',
self.manifest.to_markdown(),
'',
f'Command surface: {len(command_backlog.modules)} mirrored entries',
*command_backlog.summary_lines()[:10],
'',
f'Tool surface: {len(tool_backlog.modules)} mirrored entries',
*tool_backlog.summary_lines()[:10],
'',
f'Session id: {self.session_id}',
f'Conversation turns stored: {len(self.mutable_messages)}',
f'Permission denials tracked: {len(self.permission_denials)}',
f'Usage totals: in={self.total_usage.input_tokens} out={self.total_usage.output_tokens}',
f'Max turns: {self.config.max_turns}',
f'Max budget tokens: {self.config.max_budget_tokens}',
f'Transcript flushed: {self.transcript_store.flushed}',
]
return '\n'.join(sections)

View File

@@ -0,0 +1 @@
"""Tracked snapshot metadata extracted from the local TypeScript archive."""

View File

@@ -0,0 +1,63 @@
{
"archive_root": "archive/claude_code_ts_snapshot/src",
"root_files": [
"QueryEngine.ts",
"Task.ts",
"Tool.ts",
"commands.ts",
"context.ts",
"cost-tracker.ts",
"costHook.ts",
"dialogLaunchers.tsx",
"history.ts",
"ink.ts",
"interactiveHelpers.tsx",
"main.tsx",
"projectOnboardingState.ts",
"query.ts",
"replLauncher.tsx",
"setup.ts",
"tasks.ts",
"tools.ts"
],
"root_dirs": [
"assistant",
"bootstrap",
"bridge",
"buddy",
"cli",
"commands",
"components",
"constants",
"context",
"coordinator",
"entrypoints",
"hooks",
"ink",
"keybindings",
"memdir",
"migrations",
"moreright",
"native-ts",
"outputStyles",
"plugins",
"query",
"remote",
"schemas",
"screens",
"server",
"services",
"skills",
"state",
"tasks",
"tools",
"types",
"upstreamproxy",
"utils",
"vim",
"voice"
],
"total_ts_like_files": 1902,
"command_entry_count": 207,
"tool_entry_count": 184
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
{
"archive_name": "assistant",
"package_name": "assistant",
"module_count": 1,
"sample_files": [
"assistant/sessionHistory.ts"
]
}

View File

@@ -0,0 +1,8 @@
{
"archive_name": "bootstrap",
"package_name": "bootstrap",
"module_count": 1,
"sample_files": [
"bootstrap/state.ts"
]
}

View File

@@ -0,0 +1,32 @@
{
"archive_name": "bridge",
"package_name": "bridge",
"module_count": 31,
"sample_files": [
"bridge/bridgeApi.ts",
"bridge/bridgeConfig.ts",
"bridge/bridgeDebug.ts",
"bridge/bridgeEnabled.ts",
"bridge/bridgeMain.ts",
"bridge/bridgeMessaging.ts",
"bridge/bridgePermissionCallbacks.ts",
"bridge/bridgePointer.ts",
"bridge/bridgeStatusUtil.ts",
"bridge/bridgeUI.ts",
"bridge/capacityWake.ts",
"bridge/codeSessionApi.ts",
"bridge/createSession.ts",
"bridge/debugUtils.ts",
"bridge/envLessBridgeConfig.ts",
"bridge/flushGate.ts",
"bridge/inboundAttachments.ts",
"bridge/inboundMessages.ts",
"bridge/initReplBridge.ts",
"bridge/jwtUtils.ts",
"bridge/pollConfig.ts",
"bridge/pollConfigDefaults.ts",
"bridge/remoteBridgeCore.ts",
"bridge/replBridge.ts",
"bridge/replBridgeHandle.ts"
]
}

View File

@@ -0,0 +1,13 @@
{
"archive_name": "buddy",
"package_name": "buddy",
"module_count": 6,
"sample_files": [
"buddy/CompanionSprite.tsx",
"buddy/companion.ts",
"buddy/prompt.ts",
"buddy/sprites.ts",
"buddy/types.ts",
"buddy/useBuddyNotification.tsx"
]
}

View File

@@ -0,0 +1,26 @@
{
"archive_name": "cli",
"package_name": "cli",
"module_count": 19,
"sample_files": [
"cli/exit.ts",
"cli/handlers/agents.ts",
"cli/handlers/auth.ts",
"cli/handlers/autoMode.ts",
"cli/handlers/mcp.tsx",
"cli/handlers/plugins.ts",
"cli/handlers/util.tsx",
"cli/ndjsonSafeStringify.ts",
"cli/print.ts",
"cli/remoteIO.ts",
"cli/structuredIO.ts",
"cli/transports/HybridTransport.ts",
"cli/transports/SSETransport.ts",
"cli/transports/SerialBatchEventUploader.ts",
"cli/transports/WebSocketTransport.ts",
"cli/transports/WorkerStateUploader.ts",
"cli/transports/ccrClient.ts",
"cli/transports/transportUtils.ts",
"cli/update.ts"
]
}

View File

@@ -0,0 +1,32 @@
{
"archive_name": "components",
"package_name": "components",
"module_count": 389,
"sample_files": [
"components/AgentProgressLine.tsx",
"components/App.tsx",
"components/ApproveApiKey.tsx",
"components/AutoModeOptInDialog.tsx",
"components/AutoUpdater.tsx",
"components/AutoUpdaterWrapper.tsx",
"components/AwsAuthStatusBox.tsx",
"components/BaseTextInput.tsx",
"components/BashModeProgress.tsx",
"components/BridgeDialog.tsx",
"components/BypassPermissionsModeDialog.tsx",
"components/ChannelDowngradeDialog.tsx",
"components/ClaudeCodeHint/PluginHintMenu.tsx",
"components/ClaudeInChromeOnboarding.tsx",
"components/ClaudeMdExternalIncludesDialog.tsx",
"components/ClickableImageRef.tsx",
"components/CompactSummary.tsx",
"components/ConfigurableShortcutHint.tsx",
"components/ConsoleOAuthFlow.tsx",
"components/ContextSuggestions.tsx",
"components/ContextVisualization.tsx",
"components/CoordinatorAgentStatus.tsx",
"components/CostThresholdDialog.tsx",
"components/CtrlOToExpand.tsx",
"components/CustomSelect/SelectMulti.tsx"
]
}

View File

@@ -0,0 +1,28 @@
{
"archive_name": "constants",
"package_name": "constants",
"module_count": 21,
"sample_files": [
"constants/apiLimits.ts",
"constants/betas.ts",
"constants/common.ts",
"constants/cyberRiskInstruction.ts",
"constants/errorIds.ts",
"constants/figures.ts",
"constants/files.ts",
"constants/github-app.ts",
"constants/keys.ts",
"constants/messages.ts",
"constants/oauth.ts",
"constants/outputStyles.ts",
"constants/product.ts",
"constants/prompts.ts",
"constants/spinnerVerbs.ts",
"constants/system.ts",
"constants/systemPromptSections.ts",
"constants/toolLimits.ts",
"constants/tools.ts",
"constants/turnCompletionVerbs.ts",
"constants/xml.ts"
]
}

View File

@@ -0,0 +1,8 @@
{
"archive_name": "coordinator",
"package_name": "coordinator",
"module_count": 1,
"sample_files": [
"coordinator/coordinatorMode.ts"
]
}

View File

@@ -0,0 +1,15 @@
{
"archive_name": "entrypoints",
"package_name": "entrypoints",
"module_count": 8,
"sample_files": [
"entrypoints/agentSdkTypes.ts",
"entrypoints/cli.tsx",
"entrypoints/init.ts",
"entrypoints/mcp.ts",
"entrypoints/sandboxTypes.ts",
"entrypoints/sdk/controlSchemas.ts",
"entrypoints/sdk/coreSchemas.ts",
"entrypoints/sdk/coreTypes.ts"
]
}

View File

@@ -0,0 +1,32 @@
{
"archive_name": "hooks",
"package_name": "hooks",
"module_count": 104,
"sample_files": [
"hooks/fileSuggestions.ts",
"hooks/notifs/useAutoModeUnavailableNotification.ts",
"hooks/notifs/useCanSwitchToExistingSubscription.tsx",
"hooks/notifs/useDeprecationWarningNotification.tsx",
"hooks/notifs/useFastModeNotification.tsx",
"hooks/notifs/useIDEStatusIndicator.tsx",
"hooks/notifs/useInstallMessages.tsx",
"hooks/notifs/useLspInitializationNotification.tsx",
"hooks/notifs/useMcpConnectivityStatus.tsx",
"hooks/notifs/useModelMigrationNotifications.tsx",
"hooks/notifs/useNpmDeprecationNotification.tsx",
"hooks/notifs/usePluginAutoupdateNotification.tsx",
"hooks/notifs/usePluginInstallationStatus.tsx",
"hooks/notifs/useRateLimitWarningNotification.tsx",
"hooks/notifs/useSettingsErrors.tsx",
"hooks/notifs/useStartupNotification.ts",
"hooks/notifs/useTeammateShutdownNotification.ts",
"hooks/renderPlaceholder.ts",
"hooks/toolPermission/PermissionContext.ts",
"hooks/toolPermission/handlers/coordinatorHandler.ts",
"hooks/toolPermission/handlers/interactiveHandler.ts",
"hooks/toolPermission/handlers/swarmWorkerHandler.ts",
"hooks/toolPermission/permissionLogging.ts",
"hooks/unifiedSuggestions.ts",
"hooks/useAfterFirstRender.ts"
]
}

View File

@@ -0,0 +1,21 @@
{
"archive_name": "keybindings",
"package_name": "keybindings",
"module_count": 14,
"sample_files": [
"keybindings/KeybindingContext.tsx",
"keybindings/KeybindingProviderSetup.tsx",
"keybindings/defaultBindings.ts",
"keybindings/loadUserBindings.ts",
"keybindings/match.ts",
"keybindings/parser.ts",
"keybindings/reservedShortcuts.ts",
"keybindings/resolver.ts",
"keybindings/schema.ts",
"keybindings/shortcutFormat.ts",
"keybindings/template.ts",
"keybindings/useKeybinding.ts",
"keybindings/useShortcutDisplay.ts",
"keybindings/validate.ts"
]
}

View File

@@ -0,0 +1,15 @@
{
"archive_name": "memdir",
"package_name": "memdir",
"module_count": 8,
"sample_files": [
"memdir/findRelevantMemories.ts",
"memdir/memdir.ts",
"memdir/memoryAge.ts",
"memdir/memoryScan.ts",
"memdir/memoryTypes.ts",
"memdir/paths.ts",
"memdir/teamMemPaths.ts",
"memdir/teamMemPrompts.ts"
]
}

View File

@@ -0,0 +1,18 @@
{
"archive_name": "migrations",
"package_name": "migrations",
"module_count": 11,
"sample_files": [
"migrations/migrateAutoUpdatesToSettings.ts",
"migrations/migrateBypassPermissionsAcceptedToSettings.ts",
"migrations/migrateEnableAllProjectMcpServersToSettings.ts",
"migrations/migrateFennecToOpus.ts",
"migrations/migrateLegacyOpusToCurrent.ts",
"migrations/migrateOpusToOpus1m.ts",
"migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts",
"migrations/migrateSonnet1mToSonnet45.ts",
"migrations/migrateSonnet45ToSonnet46.ts",
"migrations/resetAutoModeOptInForDefaultOffer.ts",
"migrations/resetProToOpusDefault.ts"
]
}

View File

@@ -0,0 +1,8 @@
{
"archive_name": "moreright",
"package_name": "moreright",
"module_count": 1,
"sample_files": [
"moreright/useMoreRight.tsx"
]
}

View File

@@ -0,0 +1,11 @@
{
"archive_name": "native-ts",
"package_name": "native_ts",
"module_count": 4,
"sample_files": [
"native-ts/color-diff/index.ts",
"native-ts/file-index/index.ts",
"native-ts/yoga-layout/enums.ts",
"native-ts/yoga-layout/index.ts"
]
}

View File

@@ -0,0 +1,8 @@
{
"archive_name": "outputStyles",
"package_name": "outputStyles",
"module_count": 1,
"sample_files": [
"outputStyles/loadOutputStylesDir.ts"
]
}

View File

@@ -0,0 +1,9 @@
{
"archive_name": "plugins",
"package_name": "plugins",
"module_count": 2,
"sample_files": [
"plugins/builtinPlugins.ts",
"plugins/bundled/index.ts"
]
}

View File

@@ -0,0 +1,11 @@
{
"archive_name": "remote",
"package_name": "remote",
"module_count": 4,
"sample_files": [
"remote/RemoteSessionManager.ts",
"remote/SessionsWebSocket.ts",
"remote/remotePermissionBridge.ts",
"remote/sdkMessageAdapter.ts"
]
}

View File

@@ -0,0 +1,8 @@
{
"archive_name": "schemas",
"package_name": "schemas",
"module_count": 1,
"sample_files": [
"schemas/hooks.ts"
]
}

View File

@@ -0,0 +1,10 @@
{
"archive_name": "screens",
"package_name": "screens",
"module_count": 3,
"sample_files": [
"screens/Doctor.tsx",
"screens/REPL.tsx",
"screens/ResumeConversation.tsx"
]
}

View File

@@ -0,0 +1,10 @@
{
"archive_name": "server",
"package_name": "server",
"module_count": 3,
"sample_files": [
"server/createDirectConnectSession.ts",
"server/directConnectManager.ts",
"server/types.ts"
]
}

View File

@@ -0,0 +1,32 @@
{
"archive_name": "services",
"package_name": "services",
"module_count": 130,
"sample_files": [
"services/AgentSummary/agentSummary.ts",
"services/MagicDocs/magicDocs.ts",
"services/MagicDocs/prompts.ts",
"services/PromptSuggestion/promptSuggestion.ts",
"services/PromptSuggestion/speculation.ts",
"services/SessionMemory/prompts.ts",
"services/SessionMemory/sessionMemory.ts",
"services/SessionMemory/sessionMemoryUtils.ts",
"services/analytics/config.ts",
"services/analytics/datadog.ts",
"services/analytics/firstPartyEventLogger.ts",
"services/analytics/firstPartyEventLoggingExporter.ts",
"services/analytics/growthbook.ts",
"services/analytics/index.ts",
"services/analytics/metadata.ts",
"services/analytics/sink.ts",
"services/analytics/sinkKillswitch.ts",
"services/api/adminRequests.ts",
"services/api/bootstrap.ts",
"services/api/claude.ts",
"services/api/client.ts",
"services/api/dumpPrompts.ts",
"services/api/emptyUsage.ts",
"services/api/errorUtils.ts",
"services/api/errors.ts"
]
}

View File

@@ -0,0 +1,27 @@
{
"archive_name": "skills",
"package_name": "skills",
"module_count": 20,
"sample_files": [
"skills/bundled/batch.ts",
"skills/bundled/claudeApi.ts",
"skills/bundled/claudeApiContent.ts",
"skills/bundled/claudeInChrome.ts",
"skills/bundled/debug.ts",
"skills/bundled/index.ts",
"skills/bundled/keybindings.ts",
"skills/bundled/loop.ts",
"skills/bundled/loremIpsum.ts",
"skills/bundled/remember.ts",
"skills/bundled/scheduleRemoteAgents.ts",
"skills/bundled/simplify.ts",
"skills/bundled/skillify.ts",
"skills/bundled/stuck.ts",
"skills/bundled/updateConfig.ts",
"skills/bundled/verify.ts",
"skills/bundled/verifyContent.ts",
"skills/bundledSkills.ts",
"skills/loadSkillsDir.ts",
"skills/mcpSkillBuilders.ts"
]
}

View File

@@ -0,0 +1,13 @@
{
"archive_name": "state",
"package_name": "state",
"module_count": 6,
"sample_files": [
"state/AppState.tsx",
"state/AppStateStore.ts",
"state/onChangeAppState.ts",
"state/selectors.ts",
"state/store.ts",
"state/teammateViewHelpers.ts"
]
}

View File

@@ -0,0 +1,18 @@
{
"archive_name": "types",
"package_name": "types",
"module_count": 11,
"sample_files": [
"types/command.ts",
"types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts",
"types/generated/events_mono/common/v1/auth.ts",
"types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts",
"types/generated/google/protobuf/timestamp.ts",
"types/hooks.ts",
"types/ids.ts",
"types/logs.ts",
"types/permissions.ts",
"types/plugin.ts",
"types/textInputTypes.ts"
]
}

View File

@@ -0,0 +1,9 @@
{
"archive_name": "upstreamproxy",
"package_name": "upstreamproxy",
"module_count": 2,
"sample_files": [
"upstreamproxy/relay.ts",
"upstreamproxy/upstreamproxy.ts"
]
}

View File

@@ -0,0 +1,32 @@
{
"archive_name": "utils",
"package_name": "utils",
"module_count": 564,
"sample_files": [
"utils/CircularBuffer.ts",
"utils/Cursor.ts",
"utils/QueryGuard.ts",
"utils/Shell.ts",
"utils/ShellCommand.ts",
"utils/abortController.ts",
"utils/activityManager.ts",
"utils/advisor.ts",
"utils/agentContext.ts",
"utils/agentId.ts",
"utils/agentSwarmsEnabled.ts",
"utils/agenticSessionSearch.ts",
"utils/analyzeContext.ts",
"utils/ansiToPng.ts",
"utils/ansiToSvg.ts",
"utils/api.ts",
"utils/apiPreconnect.ts",
"utils/appleTerminalBackup.ts",
"utils/argumentSubstitution.ts",
"utils/array.ts",
"utils/asciicast.ts",
"utils/attachments.ts",
"utils/attribution.ts",
"utils/auth.ts",
"utils/authFileDescriptor.ts"
]
}

View File

@@ -0,0 +1,12 @@
{
"archive_name": "vim",
"package_name": "vim",
"module_count": 5,
"sample_files": [
"vim/motions.ts",
"vim/operators.ts",
"vim/textObjects.ts",
"vim/transitions.ts",
"vim/types.ts"
]
}

View File

@@ -0,0 +1,8 @@
{
"archive_name": "voice",
"package_name": "voice",
"module_count": 1,
"sample_files": [
"voice/voiceModeEnabled.ts"
]
}

View File

@@ -0,0 +1,922 @@
[
{
"name": "AgentTool",
"source_hint": "tools/AgentTool/AgentTool.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/AgentTool.tsx"
},
{
"name": "UI",
"source_hint": "tools/AgentTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/UI.tsx"
},
{
"name": "agentColorManager",
"source_hint": "tools/AgentTool/agentColorManager.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/agentColorManager.ts"
},
{
"name": "agentDisplay",
"source_hint": "tools/AgentTool/agentDisplay.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/agentDisplay.ts"
},
{
"name": "agentMemory",
"source_hint": "tools/AgentTool/agentMemory.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/agentMemory.ts"
},
{
"name": "agentMemorySnapshot",
"source_hint": "tools/AgentTool/agentMemorySnapshot.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/agentMemorySnapshot.ts"
},
{
"name": "agentToolUtils",
"source_hint": "tools/AgentTool/agentToolUtils.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/agentToolUtils.ts"
},
{
"name": "claudeCodeGuideAgent",
"source_hint": "tools/AgentTool/built-in/claudeCodeGuideAgent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/built-in/claudeCodeGuideAgent.ts"
},
{
"name": "exploreAgent",
"source_hint": "tools/AgentTool/built-in/exploreAgent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/built-in/exploreAgent.ts"
},
{
"name": "generalPurposeAgent",
"source_hint": "tools/AgentTool/built-in/generalPurposeAgent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/built-in/generalPurposeAgent.ts"
},
{
"name": "planAgent",
"source_hint": "tools/AgentTool/built-in/planAgent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/built-in/planAgent.ts"
},
{
"name": "statuslineSetup",
"source_hint": "tools/AgentTool/built-in/statuslineSetup.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/built-in/statuslineSetup.ts"
},
{
"name": "verificationAgent",
"source_hint": "tools/AgentTool/built-in/verificationAgent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/built-in/verificationAgent.ts"
},
{
"name": "builtInAgents",
"source_hint": "tools/AgentTool/builtInAgents.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/builtInAgents.ts"
},
{
"name": "constants",
"source_hint": "tools/AgentTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/constants.ts"
},
{
"name": "forkSubagent",
"source_hint": "tools/AgentTool/forkSubagent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/forkSubagent.ts"
},
{
"name": "loadAgentsDir",
"source_hint": "tools/AgentTool/loadAgentsDir.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/loadAgentsDir.ts"
},
{
"name": "prompt",
"source_hint": "tools/AgentTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/prompt.ts"
},
{
"name": "resumeAgent",
"source_hint": "tools/AgentTool/resumeAgent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/resumeAgent.ts"
},
{
"name": "runAgent",
"source_hint": "tools/AgentTool/runAgent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AgentTool/runAgent.ts"
},
{
"name": "AskUserQuestionTool",
"source_hint": "tools/AskUserQuestionTool/AskUserQuestionTool.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AskUserQuestionTool/AskUserQuestionTool.tsx"
},
{
"name": "prompt",
"source_hint": "tools/AskUserQuestionTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/AskUserQuestionTool/prompt.ts"
},
{
"name": "BashTool",
"source_hint": "tools/BashTool/BashTool.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/BashTool.tsx"
},
{
"name": "BashToolResultMessage",
"source_hint": "tools/BashTool/BashToolResultMessage.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/BashToolResultMessage.tsx"
},
{
"name": "UI",
"source_hint": "tools/BashTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/UI.tsx"
},
{
"name": "bashCommandHelpers",
"source_hint": "tools/BashTool/bashCommandHelpers.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/bashCommandHelpers.ts"
},
{
"name": "bashPermissions",
"source_hint": "tools/BashTool/bashPermissions.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/bashPermissions.ts"
},
{
"name": "bashSecurity",
"source_hint": "tools/BashTool/bashSecurity.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/bashSecurity.ts"
},
{
"name": "commandSemantics",
"source_hint": "tools/BashTool/commandSemantics.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/commandSemantics.ts"
},
{
"name": "commentLabel",
"source_hint": "tools/BashTool/commentLabel.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/commentLabel.ts"
},
{
"name": "destructiveCommandWarning",
"source_hint": "tools/BashTool/destructiveCommandWarning.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/destructiveCommandWarning.ts"
},
{
"name": "modeValidation",
"source_hint": "tools/BashTool/modeValidation.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/modeValidation.ts"
},
{
"name": "pathValidation",
"source_hint": "tools/BashTool/pathValidation.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/pathValidation.ts"
},
{
"name": "prompt",
"source_hint": "tools/BashTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/prompt.ts"
},
{
"name": "readOnlyValidation",
"source_hint": "tools/BashTool/readOnlyValidation.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/readOnlyValidation.ts"
},
{
"name": "sedEditParser",
"source_hint": "tools/BashTool/sedEditParser.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/sedEditParser.ts"
},
{
"name": "sedValidation",
"source_hint": "tools/BashTool/sedValidation.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/sedValidation.ts"
},
{
"name": "shouldUseSandbox",
"source_hint": "tools/BashTool/shouldUseSandbox.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/shouldUseSandbox.ts"
},
{
"name": "toolName",
"source_hint": "tools/BashTool/toolName.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/toolName.ts"
},
{
"name": "utils",
"source_hint": "tools/BashTool/utils.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BashTool/utils.ts"
},
{
"name": "BriefTool",
"source_hint": "tools/BriefTool/BriefTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BriefTool/BriefTool.ts"
},
{
"name": "UI",
"source_hint": "tools/BriefTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BriefTool/UI.tsx"
},
{
"name": "attachments",
"source_hint": "tools/BriefTool/attachments.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BriefTool/attachments.ts"
},
{
"name": "prompt",
"source_hint": "tools/BriefTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BriefTool/prompt.ts"
},
{
"name": "upload",
"source_hint": "tools/BriefTool/upload.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/BriefTool/upload.ts"
},
{
"name": "ConfigTool",
"source_hint": "tools/ConfigTool/ConfigTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ConfigTool/ConfigTool.ts"
},
{
"name": "UI",
"source_hint": "tools/ConfigTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ConfigTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/ConfigTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ConfigTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/ConfigTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ConfigTool/prompt.ts"
},
{
"name": "supportedSettings",
"source_hint": "tools/ConfigTool/supportedSettings.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ConfigTool/supportedSettings.ts"
},
{
"name": "EnterPlanModeTool",
"source_hint": "tools/EnterPlanModeTool/EnterPlanModeTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/EnterPlanModeTool/EnterPlanModeTool.ts"
},
{
"name": "UI",
"source_hint": "tools/EnterPlanModeTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/EnterPlanModeTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/EnterPlanModeTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/EnterPlanModeTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/EnterPlanModeTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/EnterPlanModeTool/prompt.ts"
},
{
"name": "EnterWorktreeTool",
"source_hint": "tools/EnterWorktreeTool/EnterWorktreeTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/EnterWorktreeTool/EnterWorktreeTool.ts"
},
{
"name": "UI",
"source_hint": "tools/EnterWorktreeTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/EnterWorktreeTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/EnterWorktreeTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/EnterWorktreeTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/EnterWorktreeTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/EnterWorktreeTool/prompt.ts"
},
{
"name": "ExitPlanModeV2Tool",
"source_hint": "tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts"
},
{
"name": "UI",
"source_hint": "tools/ExitPlanModeTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ExitPlanModeTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/ExitPlanModeTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ExitPlanModeTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/ExitPlanModeTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ExitPlanModeTool/prompt.ts"
},
{
"name": "ExitWorktreeTool",
"source_hint": "tools/ExitWorktreeTool/ExitWorktreeTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ExitWorktreeTool/ExitWorktreeTool.ts"
},
{
"name": "UI",
"source_hint": "tools/ExitWorktreeTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ExitWorktreeTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/ExitWorktreeTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ExitWorktreeTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/ExitWorktreeTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ExitWorktreeTool/prompt.ts"
},
{
"name": "FileEditTool",
"source_hint": "tools/FileEditTool/FileEditTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileEditTool/FileEditTool.ts"
},
{
"name": "UI",
"source_hint": "tools/FileEditTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileEditTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/FileEditTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileEditTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/FileEditTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileEditTool/prompt.ts"
},
{
"name": "types",
"source_hint": "tools/FileEditTool/types.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileEditTool/types.ts"
},
{
"name": "utils",
"source_hint": "tools/FileEditTool/utils.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileEditTool/utils.ts"
},
{
"name": "FileReadTool",
"source_hint": "tools/FileReadTool/FileReadTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileReadTool/FileReadTool.ts"
},
{
"name": "UI",
"source_hint": "tools/FileReadTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileReadTool/UI.tsx"
},
{
"name": "imageProcessor",
"source_hint": "tools/FileReadTool/imageProcessor.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileReadTool/imageProcessor.ts"
},
{
"name": "limits",
"source_hint": "tools/FileReadTool/limits.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileReadTool/limits.ts"
},
{
"name": "prompt",
"source_hint": "tools/FileReadTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileReadTool/prompt.ts"
},
{
"name": "FileWriteTool",
"source_hint": "tools/FileWriteTool/FileWriteTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileWriteTool/FileWriteTool.ts"
},
{
"name": "UI",
"source_hint": "tools/FileWriteTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileWriteTool/UI.tsx"
},
{
"name": "prompt",
"source_hint": "tools/FileWriteTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/FileWriteTool/prompt.ts"
},
{
"name": "GlobTool",
"source_hint": "tools/GlobTool/GlobTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/GlobTool/GlobTool.ts"
},
{
"name": "UI",
"source_hint": "tools/GlobTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/GlobTool/UI.tsx"
},
{
"name": "prompt",
"source_hint": "tools/GlobTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/GlobTool/prompt.ts"
},
{
"name": "GrepTool",
"source_hint": "tools/GrepTool/GrepTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/GrepTool/GrepTool.ts"
},
{
"name": "UI",
"source_hint": "tools/GrepTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/GrepTool/UI.tsx"
},
{
"name": "prompt",
"source_hint": "tools/GrepTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/GrepTool/prompt.ts"
},
{
"name": "LSPTool",
"source_hint": "tools/LSPTool/LSPTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/LSPTool/LSPTool.ts"
},
{
"name": "UI",
"source_hint": "tools/LSPTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/LSPTool/UI.tsx"
},
{
"name": "formatters",
"source_hint": "tools/LSPTool/formatters.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/LSPTool/formatters.ts"
},
{
"name": "prompt",
"source_hint": "tools/LSPTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/LSPTool/prompt.ts"
},
{
"name": "schemas",
"source_hint": "tools/LSPTool/schemas.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/LSPTool/schemas.ts"
},
{
"name": "symbolContext",
"source_hint": "tools/LSPTool/symbolContext.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/LSPTool/symbolContext.ts"
},
{
"name": "ListMcpResourcesTool",
"source_hint": "tools/ListMcpResourcesTool/ListMcpResourcesTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ListMcpResourcesTool/ListMcpResourcesTool.ts"
},
{
"name": "UI",
"source_hint": "tools/ListMcpResourcesTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ListMcpResourcesTool/UI.tsx"
},
{
"name": "prompt",
"source_hint": "tools/ListMcpResourcesTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ListMcpResourcesTool/prompt.ts"
},
{
"name": "MCPTool",
"source_hint": "tools/MCPTool/MCPTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/MCPTool/MCPTool.ts"
},
{
"name": "UI",
"source_hint": "tools/MCPTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/MCPTool/UI.tsx"
},
{
"name": "classifyForCollapse",
"source_hint": "tools/MCPTool/classifyForCollapse.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/MCPTool/classifyForCollapse.ts"
},
{
"name": "prompt",
"source_hint": "tools/MCPTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/MCPTool/prompt.ts"
},
{
"name": "McpAuthTool",
"source_hint": "tools/McpAuthTool/McpAuthTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/McpAuthTool/McpAuthTool.ts"
},
{
"name": "NotebookEditTool",
"source_hint": "tools/NotebookEditTool/NotebookEditTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/NotebookEditTool/NotebookEditTool.ts"
},
{
"name": "UI",
"source_hint": "tools/NotebookEditTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/NotebookEditTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/NotebookEditTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/NotebookEditTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/NotebookEditTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/NotebookEditTool/prompt.ts"
},
{
"name": "PowerShellTool",
"source_hint": "tools/PowerShellTool/PowerShellTool.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/PowerShellTool.tsx"
},
{
"name": "UI",
"source_hint": "tools/PowerShellTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/UI.tsx"
},
{
"name": "clmTypes",
"source_hint": "tools/PowerShellTool/clmTypes.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/clmTypes.ts"
},
{
"name": "commandSemantics",
"source_hint": "tools/PowerShellTool/commandSemantics.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/commandSemantics.ts"
},
{
"name": "commonParameters",
"source_hint": "tools/PowerShellTool/commonParameters.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/commonParameters.ts"
},
{
"name": "destructiveCommandWarning",
"source_hint": "tools/PowerShellTool/destructiveCommandWarning.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/destructiveCommandWarning.ts"
},
{
"name": "gitSafety",
"source_hint": "tools/PowerShellTool/gitSafety.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/gitSafety.ts"
},
{
"name": "modeValidation",
"source_hint": "tools/PowerShellTool/modeValidation.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/modeValidation.ts"
},
{
"name": "pathValidation",
"source_hint": "tools/PowerShellTool/pathValidation.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/pathValidation.ts"
},
{
"name": "powershellPermissions",
"source_hint": "tools/PowerShellTool/powershellPermissions.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/powershellPermissions.ts"
},
{
"name": "powershellSecurity",
"source_hint": "tools/PowerShellTool/powershellSecurity.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/powershellSecurity.ts"
},
{
"name": "prompt",
"source_hint": "tools/PowerShellTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/prompt.ts"
},
{
"name": "readOnlyValidation",
"source_hint": "tools/PowerShellTool/readOnlyValidation.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/readOnlyValidation.ts"
},
{
"name": "toolName",
"source_hint": "tools/PowerShellTool/toolName.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/PowerShellTool/toolName.ts"
},
{
"name": "constants",
"source_hint": "tools/REPLTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/REPLTool/constants.ts"
},
{
"name": "primitiveTools",
"source_hint": "tools/REPLTool/primitiveTools.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/REPLTool/primitiveTools.ts"
},
{
"name": "ReadMcpResourceTool",
"source_hint": "tools/ReadMcpResourceTool/ReadMcpResourceTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ReadMcpResourceTool/ReadMcpResourceTool.ts"
},
{
"name": "UI",
"source_hint": "tools/ReadMcpResourceTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ReadMcpResourceTool/UI.tsx"
},
{
"name": "prompt",
"source_hint": "tools/ReadMcpResourceTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ReadMcpResourceTool/prompt.ts"
},
{
"name": "RemoteTriggerTool",
"source_hint": "tools/RemoteTriggerTool/RemoteTriggerTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/RemoteTriggerTool/RemoteTriggerTool.ts"
},
{
"name": "UI",
"source_hint": "tools/RemoteTriggerTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/RemoteTriggerTool/UI.tsx"
},
{
"name": "prompt",
"source_hint": "tools/RemoteTriggerTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/RemoteTriggerTool/prompt.ts"
},
{
"name": "CronCreateTool",
"source_hint": "tools/ScheduleCronTool/CronCreateTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ScheduleCronTool/CronCreateTool.ts"
},
{
"name": "CronDeleteTool",
"source_hint": "tools/ScheduleCronTool/CronDeleteTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ScheduleCronTool/CronDeleteTool.ts"
},
{
"name": "CronListTool",
"source_hint": "tools/ScheduleCronTool/CronListTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ScheduleCronTool/CronListTool.ts"
},
{
"name": "UI",
"source_hint": "tools/ScheduleCronTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ScheduleCronTool/UI.tsx"
},
{
"name": "prompt",
"source_hint": "tools/ScheduleCronTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ScheduleCronTool/prompt.ts"
},
{
"name": "SendMessageTool",
"source_hint": "tools/SendMessageTool/SendMessageTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SendMessageTool/SendMessageTool.ts"
},
{
"name": "UI",
"source_hint": "tools/SendMessageTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SendMessageTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/SendMessageTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SendMessageTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/SendMessageTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SendMessageTool/prompt.ts"
},
{
"name": "SkillTool",
"source_hint": "tools/SkillTool/SkillTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SkillTool/SkillTool.ts"
},
{
"name": "UI",
"source_hint": "tools/SkillTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SkillTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/SkillTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SkillTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/SkillTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SkillTool/prompt.ts"
},
{
"name": "prompt",
"source_hint": "tools/SleepTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SleepTool/prompt.ts"
},
{
"name": "SyntheticOutputTool",
"source_hint": "tools/SyntheticOutputTool/SyntheticOutputTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/SyntheticOutputTool/SyntheticOutputTool.ts"
},
{
"name": "TaskCreateTool",
"source_hint": "tools/TaskCreateTool/TaskCreateTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskCreateTool/TaskCreateTool.ts"
},
{
"name": "constants",
"source_hint": "tools/TaskCreateTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskCreateTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/TaskCreateTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskCreateTool/prompt.ts"
},
{
"name": "TaskGetTool",
"source_hint": "tools/TaskGetTool/TaskGetTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskGetTool/TaskGetTool.ts"
},
{
"name": "constants",
"source_hint": "tools/TaskGetTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskGetTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/TaskGetTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskGetTool/prompt.ts"
},
{
"name": "TaskListTool",
"source_hint": "tools/TaskListTool/TaskListTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskListTool/TaskListTool.ts"
},
{
"name": "constants",
"source_hint": "tools/TaskListTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskListTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/TaskListTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskListTool/prompt.ts"
},
{
"name": "TaskOutputTool",
"source_hint": "tools/TaskOutputTool/TaskOutputTool.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskOutputTool/TaskOutputTool.tsx"
},
{
"name": "constants",
"source_hint": "tools/TaskOutputTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskOutputTool/constants.ts"
},
{
"name": "TaskStopTool",
"source_hint": "tools/TaskStopTool/TaskStopTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskStopTool/TaskStopTool.ts"
},
{
"name": "UI",
"source_hint": "tools/TaskStopTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskStopTool/UI.tsx"
},
{
"name": "prompt",
"source_hint": "tools/TaskStopTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskStopTool/prompt.ts"
},
{
"name": "TaskUpdateTool",
"source_hint": "tools/TaskUpdateTool/TaskUpdateTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskUpdateTool/TaskUpdateTool.ts"
},
{
"name": "constants",
"source_hint": "tools/TaskUpdateTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskUpdateTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/TaskUpdateTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TaskUpdateTool/prompt.ts"
},
{
"name": "TeamCreateTool",
"source_hint": "tools/TeamCreateTool/TeamCreateTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TeamCreateTool/TeamCreateTool.ts"
},
{
"name": "UI",
"source_hint": "tools/TeamCreateTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TeamCreateTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/TeamCreateTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TeamCreateTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/TeamCreateTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TeamCreateTool/prompt.ts"
},
{
"name": "TeamDeleteTool",
"source_hint": "tools/TeamDeleteTool/TeamDeleteTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TeamDeleteTool/TeamDeleteTool.ts"
},
{
"name": "UI",
"source_hint": "tools/TeamDeleteTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TeamDeleteTool/UI.tsx"
},
{
"name": "constants",
"source_hint": "tools/TeamDeleteTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TeamDeleteTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/TeamDeleteTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TeamDeleteTool/prompt.ts"
},
{
"name": "TodoWriteTool",
"source_hint": "tools/TodoWriteTool/TodoWriteTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TodoWriteTool/TodoWriteTool.ts"
},
{
"name": "constants",
"source_hint": "tools/TodoWriteTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TodoWriteTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/TodoWriteTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/TodoWriteTool/prompt.ts"
},
{
"name": "ToolSearchTool",
"source_hint": "tools/ToolSearchTool/ToolSearchTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ToolSearchTool/ToolSearchTool.ts"
},
{
"name": "constants",
"source_hint": "tools/ToolSearchTool/constants.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ToolSearchTool/constants.ts"
},
{
"name": "prompt",
"source_hint": "tools/ToolSearchTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/ToolSearchTool/prompt.ts"
},
{
"name": "UI",
"source_hint": "tools/WebFetchTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/WebFetchTool/UI.tsx"
},
{
"name": "WebFetchTool",
"source_hint": "tools/WebFetchTool/WebFetchTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/WebFetchTool/WebFetchTool.ts"
},
{
"name": "preapproved",
"source_hint": "tools/WebFetchTool/preapproved.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/WebFetchTool/preapproved.ts"
},
{
"name": "prompt",
"source_hint": "tools/WebFetchTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/WebFetchTool/prompt.ts"
},
{
"name": "utils",
"source_hint": "tools/WebFetchTool/utils.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/WebFetchTool/utils.ts"
},
{
"name": "UI",
"source_hint": "tools/WebSearchTool/UI.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/WebSearchTool/UI.tsx"
},
{
"name": "WebSearchTool",
"source_hint": "tools/WebSearchTool/WebSearchTool.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/WebSearchTool/WebSearchTool.ts"
},
{
"name": "prompt",
"source_hint": "tools/WebSearchTool/prompt.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/WebSearchTool/prompt.ts"
},
{
"name": "gitOperationTracking",
"source_hint": "tools/shared/gitOperationTracking.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/shared/gitOperationTracking.ts"
},
{
"name": "spawnMultiAgent",
"source_hint": "tools/shared/spawnMultiAgent.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/shared/spawnMultiAgent.ts"
},
{
"name": "TestingPermissionTool",
"source_hint": "tools/testing/TestingPermissionTool.tsx",
"responsibility": "Tool module mirrored from archived TypeScript path tools/testing/TestingPermissionTool.tsx"
},
{
"name": "utils",
"source_hint": "tools/utils.ts",
"responsibility": "Tool module mirrored from archived TypeScript path tools/utils.ts"
}
]

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `remote` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'remote.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,25 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class RuntimeModeReport:
mode: str
connected: bool
detail: str
def as_text(self) -> str:
return f'mode={self.mode}\nconnected={self.connected}\ndetail={self.detail}'
def run_remote_mode(target: str) -> RuntimeModeReport:
return RuntimeModeReport('remote', True, f'Remote control placeholder prepared for {target}')
def run_ssh_mode(target: str) -> RuntimeModeReport:
return RuntimeModeReport('ssh', True, f'SSH proxy placeholder prepared for {target}')
def run_teleport_mode(target: str) -> RuntimeModeReport:
return RuntimeModeReport('teleport', True, f'Teleport resume/create placeholder prepared for {target}')

View File

@@ -0,0 +1,5 @@
from __future__ import annotations
def build_repl_banner() -> str:
return 'Python porting REPL is not interactive yet; use `python3 -m src.main summary` instead.'

192
claw-code/src/runtime.py Normal file
View File

@@ -0,0 +1,192 @@
from __future__ import annotations
from dataclasses import dataclass
from .commands import PORTED_COMMANDS
from .context import PortContext, build_port_context, render_context
from .history import HistoryLog
from .models import PermissionDenial, PortingModule
from .query_engine import QueryEngineConfig, QueryEnginePort, TurnResult
from .setup import SetupReport, WorkspaceSetup, run_setup
from .system_init import build_system_init_message
from .tools import PORTED_TOOLS
from .execution_registry import build_execution_registry
@dataclass(frozen=True)
class RoutedMatch:
kind: str
name: str
source_hint: str
score: int
@dataclass
class RuntimeSession:
prompt: str
context: PortContext
setup: WorkspaceSetup
setup_report: SetupReport
system_init_message: str
history: HistoryLog
routed_matches: list[RoutedMatch]
turn_result: TurnResult
command_execution_messages: tuple[str, ...]
tool_execution_messages: tuple[str, ...]
stream_events: tuple[dict[str, object], ...]
persisted_session_path: str
def as_markdown(self) -> str:
lines = [
'# Runtime Session',
'',
f'Prompt: {self.prompt}',
'',
'## Context',
render_context(self.context),
'',
'## Setup',
f'- Python: {self.setup.python_version} ({self.setup.implementation})',
f'- Platform: {self.setup.platform_name}',
f'- Test command: {self.setup.test_command}',
'',
'## Startup Steps',
*(f'- {step}' for step in self.setup.startup_steps()),
'',
'## System Init',
self.system_init_message,
'',
'## Routed Matches',
]
if self.routed_matches:
lines.extend(
f'- [{match.kind}] {match.name} ({match.score}) — {match.source_hint}'
for match in self.routed_matches
)
else:
lines.append('- none')
lines.extend([
'',
'## Command Execution',
*(self.command_execution_messages or ('none',)),
'',
'## Tool Execution',
*(self.tool_execution_messages or ('none',)),
'',
'## Stream Events',
*(f"- {event['type']}: {event}" for event in self.stream_events),
'',
'## Turn Result',
self.turn_result.output,
'',
f'Persisted session path: {self.persisted_session_path}',
'',
self.history.as_markdown(),
])
return '\n'.join(lines)
class PortRuntime:
def route_prompt(self, prompt: str, limit: int = 5) -> list[RoutedMatch]:
tokens = {token.lower() for token in prompt.replace('/', ' ').replace('-', ' ').split() if token}
by_kind = {
'command': self._collect_matches(tokens, PORTED_COMMANDS, 'command'),
'tool': self._collect_matches(tokens, PORTED_TOOLS, 'tool'),
}
selected: list[RoutedMatch] = []
for kind in ('command', 'tool'):
if by_kind[kind]:
selected.append(by_kind[kind].pop(0))
leftovers = sorted(
[match for matches in by_kind.values() for match in matches],
key=lambda item: (-item.score, item.kind, item.name),
)
selected.extend(leftovers[: max(0, limit - len(selected))])
return selected[:limit]
def bootstrap_session(self, prompt: str, limit: int = 5) -> RuntimeSession:
context = build_port_context()
setup_report = run_setup(trusted=True)
setup = setup_report.setup
history = HistoryLog()
engine = QueryEnginePort.from_workspace()
history.add('context', f'python_files={context.python_file_count}, archive_available={context.archive_available}')
history.add('registry', f'commands={len(PORTED_COMMANDS)}, tools={len(PORTED_TOOLS)}')
matches = self.route_prompt(prompt, limit=limit)
registry = build_execution_registry()
command_execs = tuple(registry.command(match.name).execute(prompt) for match in matches if match.kind == 'command' and registry.command(match.name))
tool_execs = tuple(registry.tool(match.name).execute(prompt) for match in matches if match.kind == 'tool' and registry.tool(match.name))
denials = tuple(self._infer_permission_denials(matches))
stream_events = tuple(engine.stream_submit_message(
prompt,
matched_commands=tuple(match.name for match in matches if match.kind == 'command'),
matched_tools=tuple(match.name for match in matches if match.kind == 'tool'),
denied_tools=denials,
))
turn_result = engine.submit_message(
prompt,
matched_commands=tuple(match.name for match in matches if match.kind == 'command'),
matched_tools=tuple(match.name for match in matches if match.kind == 'tool'),
denied_tools=denials,
)
persisted_session_path = engine.persist_session()
history.add('routing', f'matches={len(matches)} for prompt={prompt!r}')
history.add('execution', f'command_execs={len(command_execs)} tool_execs={len(tool_execs)}')
history.add('turn', f'commands={len(turn_result.matched_commands)} tools={len(turn_result.matched_tools)} denials={len(turn_result.permission_denials)} stop={turn_result.stop_reason}')
history.add('session_store', persisted_session_path)
return RuntimeSession(
prompt=prompt,
context=context,
setup=setup,
setup_report=setup_report,
system_init_message=build_system_init_message(trusted=True),
history=history,
routed_matches=matches,
turn_result=turn_result,
command_execution_messages=command_execs,
tool_execution_messages=tool_execs,
stream_events=stream_events,
persisted_session_path=persisted_session_path,
)
def run_turn_loop(self, prompt: str, limit: int = 5, max_turns: int = 3, structured_output: bool = False) -> list[TurnResult]:
engine = QueryEnginePort.from_workspace()
engine.config = QueryEngineConfig(max_turns=max_turns, structured_output=structured_output)
matches = self.route_prompt(prompt, limit=limit)
command_names = tuple(match.name for match in matches if match.kind == 'command')
tool_names = tuple(match.name for match in matches if match.kind == 'tool')
results: list[TurnResult] = []
for turn in range(max_turns):
turn_prompt = prompt if turn == 0 else f'{prompt} [turn {turn + 1}]'
result = engine.submit_message(turn_prompt, command_names, tool_names, ())
results.append(result)
if result.stop_reason != 'completed':
break
return results
def _infer_permission_denials(self, matches: list[RoutedMatch]) -> list[PermissionDenial]:
denials: list[PermissionDenial] = []
for match in matches:
if match.kind == 'tool' and 'bash' in match.name.lower():
denials.append(PermissionDenial(tool_name=match.name, reason='destructive shell execution remains gated in the Python port'))
return denials
def _collect_matches(self, tokens: set[str], modules: tuple[PortingModule, ...], kind: str) -> list[RoutedMatch]:
matches: list[RoutedMatch] = []
for module in modules:
score = self._score(tokens, module)
if score > 0:
matches.append(RoutedMatch(kind=kind, name=module.name, source_hint=module.source_hint, score=score))
matches.sort(key=lambda item: (-item.score, item.name))
return matches
@staticmethod
def _score(tokens: set[str], module: PortingModule) -> int:
haystacks = [module.name.lower(), module.source_hint.lower(), module.responsibility.lower()]
score = 0
for token in tokens:
if any(token in haystack for haystack in haystacks):
score += 1
return score

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `schemas` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'schemas.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `screens` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'screens.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `server` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'server.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `services` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'services.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,35 @@
from __future__ import annotations
import json
from dataclasses import asdict, dataclass
from pathlib import Path
@dataclass(frozen=True)
class StoredSession:
session_id: str
messages: tuple[str, ...]
input_tokens: int
output_tokens: int
DEFAULT_SESSION_DIR = Path('.port_sessions')
def save_session(session: StoredSession, directory: Path | None = None) -> Path:
target_dir = directory or DEFAULT_SESSION_DIR
target_dir.mkdir(parents=True, exist_ok=True)
path = target_dir / f'{session.session_id}.json'
path.write_text(json.dumps(asdict(session), indent=2))
return path
def load_session(session_id: str, directory: Path | None = None) -> StoredSession:
target_dir = directory or DEFAULT_SESSION_DIR
data = json.loads((target_dir / f'{session_id}.json').read_text())
return StoredSession(
session_id=data['session_id'],
messages=tuple(data['messages']),
input_tokens=data['input_tokens'],
output_tokens=data['output_tokens'],
)

77
claw-code/src/setup.py Normal file
View File

@@ -0,0 +1,77 @@
from __future__ import annotations
import platform
import sys
from dataclasses import dataclass
from pathlib import Path
from .deferred_init import DeferredInitResult, run_deferred_init
from .prefetch import PrefetchResult, start_keychain_prefetch, start_mdm_raw_read, start_project_scan
@dataclass(frozen=True)
class WorkspaceSetup:
python_version: str
implementation: str
platform_name: str
test_command: str = 'python3 -m unittest discover -s tests -v'
def startup_steps(self) -> tuple[str, ...]:
return (
'start top-level prefetch side effects',
'build workspace context',
'load mirrored command snapshot',
'load mirrored tool snapshot',
'prepare parity audit hooks',
'apply trust-gated deferred init',
)
@dataclass(frozen=True)
class SetupReport:
setup: WorkspaceSetup
prefetches: tuple[PrefetchResult, ...]
deferred_init: DeferredInitResult
trusted: bool
cwd: Path
def as_markdown(self) -> str:
lines = [
'# Setup Report',
'',
f'- Python: {self.setup.python_version} ({self.setup.implementation})',
f'- Platform: {self.setup.platform_name}',
f'- Trusted mode: {self.trusted}',
f'- CWD: {self.cwd}',
'',
'Prefetches:',
*(f'- {prefetch.name}: {prefetch.detail}' for prefetch in self.prefetches),
'',
'Deferred init:',
*self.deferred_init.as_lines(),
]
return '\n'.join(lines)
def build_workspace_setup() -> WorkspaceSetup:
return WorkspaceSetup(
python_version='.'.join(str(part) for part in sys.version_info[:3]),
implementation=platform.python_implementation(),
platform_name=platform.platform(),
)
def run_setup(cwd: Path | None = None, trusted: bool = True) -> SetupReport:
root = cwd or Path(__file__).resolve().parent.parent
prefetches = [
start_mdm_raw_read(),
start_keychain_prefetch(),
start_project_scan(root),
]
return SetupReport(
setup=build_workspace_setup(),
prefetches=tuple(prefetches),
deferred_init=run_deferred_init(trusted=trusted),
trusted=trusted,
cwd=root,
)

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `skills` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'skills.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,16 @@
"""Python package placeholder for the archived `state` subsystem."""
from __future__ import annotations
import json
from pathlib import Path
SNAPSHOT_PATH = Path(__file__).resolve().parent.parent / 'reference_data' / 'subsystems' / 'state.json'
_SNAPSHOT = json.loads(SNAPSHOT_PATH.read_text())
ARCHIVE_NAME = _SNAPSHOT['archive_name']
MODULE_COUNT = _SNAPSHOT['module_count']
SAMPLE_FILES = tuple(_SNAPSHOT['sample_files'])
PORTING_NOTE = f"Python placeholder package for '{ARCHIVE_NAME}' with {MODULE_COUNT} archived module references."
__all__ = ['ARCHIVE_NAME', 'MODULE_COUNT', 'PORTING_NOTE', 'SAMPLE_FILES']

View File

@@ -0,0 +1,23 @@
from __future__ import annotations
from .commands import built_in_command_names, get_commands
from .setup import run_setup
from .tools import get_tools
def build_system_init_message(trusted: bool = True) -> str:
setup = run_setup(trusted=trusted)
commands = get_commands()
tools = get_tools()
lines = [
'# System Init',
'',
f'Trusted: {setup.trusted}',
f'Built-in command names: {len(built_in_command_names())}',
f'Loaded command entries: {len(commands)}',
f'Loaded tool entries: {len(tools)}',
'',
'Startup steps:',
*(f'- {step}' for step in setup.setup.startup_steps()),
]
return '\n'.join(lines)

5
claw-code/src/task.py Normal file
View File

@@ -0,0 +1,5 @@
from __future__ import annotations
from .task import PortingTask
__all__ = ['PortingTask']

11
claw-code/src/tasks.py Normal file
View File

@@ -0,0 +1,11 @@
from __future__ import annotations
from .task import PortingTask
def default_tasks() -> list[PortingTask]:
return [
PortingTask('root-module-parity', 'Mirror the root module surface of the archived snapshot'),
PortingTask('directory-parity', 'Mirror top-level subsystem names as Python packages'),
PortingTask('parity-audit', 'Continuously measure parity against the local archive'),
]

Some files were not shown because too many files have changed in this diff Show More