mirror of
https://github.com/khodges42/nightShift.git
synced 2026-06-14 18:18:36 +00:00
What changed:
- Added file_writer stage support in nightshift/config.py:93, nightshift/agents.py:446, and nightshift/pipeline.py:374.
- Added file-block parsing and deterministic patch generation in nightshift/patches.py:65.
- file_writer agents now return complete file blocks:
```file:relative/path.py
<complete file content>
```
NightShift reads current files and generates the unified diff itself.
- Existing patch_validator, patch_normalizer, and patch_apply still run after that.
- Switched tiny-lisp-nightshift/nightshift.yaml:51 to type: file_writer.
- Updated tiny-lisp-nightshift/agents/implementer.md:1 to request file blocks instead of diffs.
- Updated README, tutorial, config reference, and design doc.
Also added tests for parsing file blocks, generating multi-file diffs, validating those diffs, and running a full file_writer -> normalize -> validate pipeline.
Verification: python -m unittest discover -v passes, 101 tests.
194 lines
3.0 KiB
Markdown
194 lines
3.0 KiB
Markdown
# Agent Output: plan
|
|
|
|
Agent: `planner`
|
|
Command: `POST http://localhost:11434/api/generate`
|
|
Exit code: 0
|
|
Duration seconds: 0.942
|
|
Timed out: false
|
|
|
|
## stdout
|
|
|
|
```text
|
|
lookup_requests:
|
|
- tool: read_file
|
|
path: lisp.py
|
|
- tool: read_file
|
|
path: tests/test_lisp.py
|
|
|
|
After context is provided, write a short plan with:
|
|
- files to edit
|
|
- tests to add or update
|
|
- risks
|
|
```
|
|
|
|
## stderr
|
|
|
|
```text
|
|
|
|
```
|
|
|
|
## Prompt
|
|
|
|
```markdown
|
|
# NightShift Agent Input
|
|
|
|
## System Prompt
|
|
|
|
You are the planning agent for NightShift.
|
|
|
|
Create a concise implementation plan for the current task.
|
|
|
|
If you need repository context before planning, output lookup requests exactly like this:
|
|
|
|
lookup_requests:
|
|
- tool: read_file
|
|
path: relative/path.py
|
|
- tool: grep
|
|
path: .
|
|
pattern: search_regex
|
|
|
|
After context is provided, write a short plan with:
|
|
- files to edit
|
|
- tests to add or update
|
|
- risks
|
|
|
|
Do not write code.
|
|
|
|
## Stage
|
|
|
|
- id: plan
|
|
- type: agent
|
|
|
|
## Task
|
|
|
|
- [ ] TASK-001: Parse Lisp expressions
|
|
|
|
Description:
|
|
Implement tokenization and parsing for a tiny Lisp subset.
|
|
|
|
Acceptance Criteria:
|
|
- Parses numbers
|
|
- Parses symbols
|
|
- Parses nested lists
|
|
- Raises useful errors for unbalanced parentheses
|
|
- Includes unit tests
|
|
|
|
## Acceptance Criteria
|
|
|
|
- Parses numbers
|
|
- Parses symbols
|
|
- Parses nested lists
|
|
- Raises useful errors for unbalanced parentheses
|
|
- Includes unit tests
|
|
|
|
## Project Context
|
|
|
|
# Project Context
|
|
|
|
## Task Context
|
|
|
|
# Task Context
|
|
|
|
Task: `TASK-001`
|
|
Title: Parse Lisp expressions
|
|
|
|
## Description
|
|
|
|
Implement tokenization and parsing for a tiny Lisp subset.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- Parses numbers
|
|
- Parses symbols
|
|
- Parses nested lists
|
|
- Raises useful errors for unbalanced parentheses
|
|
- Includes unit tests
|
|
|
|
## Previous Stage Output
|
|
|
|
## repo_lookup_results
|
|
|
|
# Repo Tool Calls
|
|
|
|
## 1. read_file
|
|
|
|
Arguments:
|
|
- path: `lisp_parser.py`
|
|
|
|
Output:
|
|
|
|
```text
|
|
File not found: lisp_parser.py
|
|
```
|
|
|
|
## 2. read_file
|
|
|
|
Arguments:
|
|
- path: `tests/test_lisp_parser.py`
|
|
|
|
Output:
|
|
|
|
```text
|
|
File not found: tests/test_lisp_parser.py
|
|
```
|
|
|
|
## 3. list_files
|
|
|
|
Arguments:
|
|
- path: `.`
|
|
- pattern: `*.py`
|
|
|
|
Output:
|
|
|
|
```text
|
|
lisp.py
|
|
tests/__init__.py
|
|
tests/test_lisp.py
|
|
```
|
|
|
|
## 4. grep
|
|
|
|
Arguments:
|
|
- path: `.`
|
|
- pattern: `def parse\(`
|
|
|
|
Output:
|
|
|
|
```text
|
|
No matches found.
|
|
```
|
|
|
|
## 5. grep
|
|
|
|
Arguments:
|
|
- path: `.`
|
|
- pattern: `class LispParser`
|
|
|
|
Output:
|
|
|
|
```text
|
|
No matches found.
|
|
```
|
|
|
|
## Retry Notes
|
|
|
|
- Repository lookup results have been provided. Write the final plan now; do not request more lookups.
|
|
|
|
## Output Contract
|
|
|
|
Write the requested stage output in concise markdown.
|
|
|
|
If you need repository context before finalizing the plan, include:
|
|
lookup_requests:
|
|
- tool: list_files | read_file | grep
|
|
path: <relative path>
|
|
pattern: <glob for list_files or regex for grep>
|
|
|
|
Use at most 5 lookup requests.
|
|
Do not repeat the same lookup request.
|
|
Prefer read_file for likely-relevant files over many grep variations.
|
|
Do not search .nightshift, .git, virtualenvs, caches, or artifact directories.
|
|
|
|
NightShift will run these read-only lookup tools, save files-inspected.md, and re-run this planner stage with the retrieved context.
|
|
```
|