Add claude-code-source-code and claw-code directories
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1
claw-code/.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
github: instructkr
|
||||
2
claw-code/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
__pycache__/
|
||||
archive/
|
||||
187
claw-code/README.md
Normal 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
|
||||
|
||||

|
||||
|
||||
## 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)
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
|
||||

|
||||
|
||||
*Ralph/team orchestration view while the README and essay context were being reviewed in terminal panes.*
|
||||
|
||||

|
||||
|
||||
*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.
|
||||
|
||||
[](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>
|
||||
|
||||

|
||||
|
||||
## 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**.
|
||||
BIN
claw-code/assets/clawd-hero.jpeg
Normal file
|
After Width: | Height: | Size: 233 KiB |
BIN
claw-code/assets/instructkr.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
claw-code/assets/omx/omx-readme-review-1.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
claw-code/assets/omx/omx-readme-review-2.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
claw-code/assets/star-history.png
Normal file
|
After Width: | Height: | Size: 312 KiB |
BIN
claw-code/assets/tweet-screenshot.png
Normal file
|
After Width: | Height: | Size: 812 KiB |
BIN
claw-code/assets/wsj-feature.png
Normal file
|
After Width: | Height: | Size: 873 KiB |
19
claw-code/src/QueryEngine.py
Normal 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
@@ -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
@@ -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',
|
||||
]
|
||||
16
claw-code/src/assistant/__init__.py
Normal 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']
|
||||
16
claw-code/src/bootstrap/__init__.py
Normal 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']
|
||||
27
claw-code/src/bootstrap_graph.py
Normal 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',
|
||||
)
|
||||
)
|
||||
16
claw-code/src/bridge/__init__.py
Normal 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']
|
||||
16
claw-code/src/buddy/__init__.py
Normal 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']
|
||||
16
claw-code/src/cli/__init__.py
Normal 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']
|
||||
34
claw-code/src/command_graph.py
Normal 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
@@ -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)
|
||||
16
claw-code/src/components/__init__.py
Normal 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']
|
||||
16
claw-code/src/constants/__init__.py
Normal 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
@@ -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}',
|
||||
])
|
||||
16
claw-code/src/coordinator/__init__.py
Normal 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']
|
||||
8
claw-code/src/costHook.py
Normal 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
|
||||
13
claw-code/src/cost_tracker.py
Normal 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}')
|
||||
31
claw-code/src/deferred_init.py
Normal 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,
|
||||
)
|
||||
15
claw-code/src/dialogLaunchers.py
Normal 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'),
|
||||
)
|
||||
21
claw-code/src/direct_modes.py
Normal 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)
|
||||
16
claw-code/src/entrypoints/__init__.py
Normal 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']
|
||||
51
claw-code/src/execution_registry.py
Normal 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
@@ -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)
|
||||
16
claw-code/src/hooks/__init__.py
Normal 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
@@ -0,0 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def render_markdown_panel(text: str) -> str:
|
||||
border = '=' * 40
|
||||
return f"{border}\n{text}\n{border}"
|
||||
5
claw-code/src/interactiveHelpers.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def bulletize(items: list[str]) -> str:
|
||||
return '\n'.join(f'- {item}' for item in items)
|
||||
16
claw-code/src/keybindings/__init__.py
Normal 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
@@ -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())
|
||||
16
claw-code/src/memdir/__init__.py
Normal 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']
|
||||
16
claw-code/src/migrations/__init__.py
Normal 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
@@ -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
|
||||
]
|
||||
16
claw-code/src/moreright/__init__.py
Normal 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']
|
||||
16
claw-code/src/native_ts/__init__.py
Normal 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']
|
||||
16
claw-code/src/outputStyles/__init__.py
Normal 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']
|
||||
138
claw-code/src/parity_audit.py
Normal 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,
|
||||
)
|
||||
20
claw-code/src/permissions.py
Normal 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)
|
||||
16
claw-code/src/plugins/__init__.py
Normal 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']
|
||||
52
claw-code/src/port_manifest.py
Normal 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
@@ -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}')
|
||||
10
claw-code/src/projectOnboardingState.py
Normal 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
@@ -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
|
||||
193
claw-code/src/query_engine.py
Normal 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)
|
||||
1
claw-code/src/reference_data/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Tracked snapshot metadata extracted from the local TypeScript archive."""
|
||||
63
claw-code/src/reference_data/archive_surface_snapshot.json
Normal 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
|
||||
}
|
||||
1037
claw-code/src/reference_data/commands_snapshot.json
Normal file
8
claw-code/src/reference_data/subsystems/assistant.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"archive_name": "assistant",
|
||||
"package_name": "assistant",
|
||||
"module_count": 1,
|
||||
"sample_files": [
|
||||
"assistant/sessionHistory.ts"
|
||||
]
|
||||
}
|
||||
8
claw-code/src/reference_data/subsystems/bootstrap.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"archive_name": "bootstrap",
|
||||
"package_name": "bootstrap",
|
||||
"module_count": 1,
|
||||
"sample_files": [
|
||||
"bootstrap/state.ts"
|
||||
]
|
||||
}
|
||||
32
claw-code/src/reference_data/subsystems/bridge.json
Normal 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"
|
||||
]
|
||||
}
|
||||
13
claw-code/src/reference_data/subsystems/buddy.json
Normal 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"
|
||||
]
|
||||
}
|
||||
26
claw-code/src/reference_data/subsystems/cli.json
Normal 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"
|
||||
]
|
||||
}
|
||||
32
claw-code/src/reference_data/subsystems/components.json
Normal 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"
|
||||
]
|
||||
}
|
||||
28
claw-code/src/reference_data/subsystems/constants.json
Normal 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"
|
||||
]
|
||||
}
|
||||
8
claw-code/src/reference_data/subsystems/coordinator.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"archive_name": "coordinator",
|
||||
"package_name": "coordinator",
|
||||
"module_count": 1,
|
||||
"sample_files": [
|
||||
"coordinator/coordinatorMode.ts"
|
||||
]
|
||||
}
|
||||
15
claw-code/src/reference_data/subsystems/entrypoints.json
Normal 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"
|
||||
]
|
||||
}
|
||||
32
claw-code/src/reference_data/subsystems/hooks.json
Normal 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"
|
||||
]
|
||||
}
|
||||
21
claw-code/src/reference_data/subsystems/keybindings.json
Normal 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"
|
||||
]
|
||||
}
|
||||
15
claw-code/src/reference_data/subsystems/memdir.json
Normal 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"
|
||||
]
|
||||
}
|
||||
18
claw-code/src/reference_data/subsystems/migrations.json
Normal 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"
|
||||
]
|
||||
}
|
||||
8
claw-code/src/reference_data/subsystems/moreright.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"archive_name": "moreright",
|
||||
"package_name": "moreright",
|
||||
"module_count": 1,
|
||||
"sample_files": [
|
||||
"moreright/useMoreRight.tsx"
|
||||
]
|
||||
}
|
||||
11
claw-code/src/reference_data/subsystems/native_ts.json
Normal 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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"archive_name": "outputStyles",
|
||||
"package_name": "outputStyles",
|
||||
"module_count": 1,
|
||||
"sample_files": [
|
||||
"outputStyles/loadOutputStylesDir.ts"
|
||||
]
|
||||
}
|
||||
9
claw-code/src/reference_data/subsystems/plugins.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"archive_name": "plugins",
|
||||
"package_name": "plugins",
|
||||
"module_count": 2,
|
||||
"sample_files": [
|
||||
"plugins/builtinPlugins.ts",
|
||||
"plugins/bundled/index.ts"
|
||||
]
|
||||
}
|
||||
11
claw-code/src/reference_data/subsystems/remote.json
Normal 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"
|
||||
]
|
||||
}
|
||||
8
claw-code/src/reference_data/subsystems/schemas.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"archive_name": "schemas",
|
||||
"package_name": "schemas",
|
||||
"module_count": 1,
|
||||
"sample_files": [
|
||||
"schemas/hooks.ts"
|
||||
]
|
||||
}
|
||||
10
claw-code/src/reference_data/subsystems/screens.json
Normal 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"
|
||||
]
|
||||
}
|
||||
10
claw-code/src/reference_data/subsystems/server.json
Normal 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"
|
||||
]
|
||||
}
|
||||
32
claw-code/src/reference_data/subsystems/services.json
Normal 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"
|
||||
]
|
||||
}
|
||||
27
claw-code/src/reference_data/subsystems/skills.json
Normal 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"
|
||||
]
|
||||
}
|
||||
13
claw-code/src/reference_data/subsystems/state.json
Normal 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"
|
||||
]
|
||||
}
|
||||
18
claw-code/src/reference_data/subsystems/types.json
Normal 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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"archive_name": "upstreamproxy",
|
||||
"package_name": "upstreamproxy",
|
||||
"module_count": 2,
|
||||
"sample_files": [
|
||||
"upstreamproxy/relay.ts",
|
||||
"upstreamproxy/upstreamproxy.ts"
|
||||
]
|
||||
}
|
||||
32
claw-code/src/reference_data/subsystems/utils.json
Normal 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"
|
||||
]
|
||||
}
|
||||
12
claw-code/src/reference_data/subsystems/vim.json
Normal 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"
|
||||
]
|
||||
}
|
||||
8
claw-code/src/reference_data/subsystems/voice.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"archive_name": "voice",
|
||||
"package_name": "voice",
|
||||
"module_count": 1,
|
||||
"sample_files": [
|
||||
"voice/voiceModeEnabled.ts"
|
||||
]
|
||||
}
|
||||
922
claw-code/src/reference_data/tools_snapshot.json
Normal 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"
|
||||
}
|
||||
]
|
||||
16
claw-code/src/remote/__init__.py
Normal 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']
|
||||
25
claw-code/src/remote_runtime.py
Normal 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}')
|
||||
5
claw-code/src/replLauncher.py
Normal 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
@@ -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
|
||||
16
claw-code/src/schemas/__init__.py
Normal 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']
|
||||
16
claw-code/src/screens/__init__.py
Normal 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']
|
||||
16
claw-code/src/server/__init__.py
Normal 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']
|
||||
16
claw-code/src/services/__init__.py
Normal 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']
|
||||
35
claw-code/src/session_store.py
Normal 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
@@ -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,
|
||||
)
|
||||
16
claw-code/src/skills/__init__.py
Normal 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']
|
||||
16
claw-code/src/state/__init__.py
Normal 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']
|
||||
23
claw-code/src/system_init.py
Normal 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
@@ -0,0 +1,5 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from .task import PortingTask
|
||||
|
||||
__all__ = ['PortingTask']
|
||||
11
claw-code/src/tasks.py
Normal 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'),
|
||||
]
|
||||