turnloop 0.1.8__tar.gz → 0.1.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {turnloop-0.1.8 → turnloop-0.1.9}/PKG-INFO +12 -4
- {turnloop-0.1.8 → turnloop-0.1.9}/README.md +11 -3
- {turnloop-0.1.8 → turnloop-0.1.9}/pyproject.toml +9 -1
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/__init__.py +1 -1
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/agent/system_prompt.py +5 -0
- turnloop-0.1.8/.github/workflows/ci.yml +0 -36
- turnloop-0.1.8/.turnloop/.gitignore +0 -2
- turnloop-0.1.8/.turnloop/settings.local.json +0 -3
- {turnloop-0.1.8 → turnloop-0.1.9}/.gitignore +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/conftest.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/fixtures/anthropic_tool_call.sse +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/fixtures/glm_tool_call.sse +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/fixtures/mcp_echo_server.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_bash.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_compaction.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_config.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_config_screen.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_configio.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_experiments.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_hooks_mcp_commands.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_loop.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_permissions.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_providers.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_skills_install.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_system_prompt_layout.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_tools_files.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_tui.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/tests/test_websearch.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/__main__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/agent/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/agent/factory.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/agent/headless.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/agent/loop.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/agent/subagent.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/cli.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/commands/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/commands/dispatch.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/commands/loader.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/config.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/configio.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/context/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/context/budget.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/context/compaction.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/context/memory.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/core/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/core/events.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/core/ids.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/core/messages.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/core/tokens.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/diagnostics.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/errors.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/bakeoff.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/ceiling-check.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/context-glm.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/context.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/glm-selfhosted.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/groq-free.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/hard-calibration.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/hard-glm.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/loop.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/nvidia-smoke.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/reliability.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/rewrite-calibration.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/configs/smoke.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/graders.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/report.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/runner.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/default.yaml +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/bulky/module_1.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/bulky/module_2.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/bulky/module_3.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/bulky/module_4.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/bulky/module_5.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/bulky/module_6.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/bulky/module_7.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/bulky/module_8.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/circular_import/models.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/circular_import/services.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/circular_import/test_cancel.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/cli_flag/app.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/cross_file_contract/decode.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/cross_file_contract/encode.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/cross_file_contract/test_roundtrip.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/cross_file_contract/test_wire_format.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/empty/.keep +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/failing_test/calc.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/failing_test/test_calc.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/generate_bulky.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/grep_edit/ingest.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/grep_edit/load.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/grep_edit/transform.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/misleading_traceback/checkout.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/misleading_traceback/invoice.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/misleading_traceback/pricing.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/misleading_traceback/test_checkout.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/misleading_traceback/test_invoice.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/needle/inventory.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/needle/pricing.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/needle/shipping.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/regression_trap/test_validators.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/regression_trap/validators.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/rename/billing.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/rename/report.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/rename/test_billing.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/spec/parser.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/spec/test_parser.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/subtle_spec_edge/leaderboard.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/subtle_spec_edge/test_leaderboard.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/util/util.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/hooks/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/hooks/runner.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/mcp/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/mcp/adapter.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/mcp/client.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/permissions/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/permissions/engine.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/permissions/rules.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/anthropic.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/base.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/gemini.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/mock.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/openai_compat.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/pricing.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/registry.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/providers/sse.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/sessions/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/sessions/models.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/sessions/store.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/skills_install.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/ask.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/base.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/bash.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/builtin.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/edit.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/glob.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/grep.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/read.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/runner.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/shell.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/skill.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/task.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/textio.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/todo.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/webfetch.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/websearch.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tools/write.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/app.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/app.tcss +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/bridge.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/config_screen.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/mcp_screen.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/session_screen.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/widgets/__init__.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/widgets/permission.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/widgets/status.py +0 -0
- {turnloop-0.1.8 → turnloop-0.1.9}/turnloop/tui/widgets/transcript.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: turnloop
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: A local-first agentic coding harness: streaming tool loop, permission gating, context compaction, subagents, and any LLM provider.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Pranesh-2005/turnloop
|
|
6
6
|
Author: Pranesh
|
|
@@ -117,7 +117,7 @@ point.
|
|
|
117
117
|
Verify:
|
|
118
118
|
|
|
119
119
|
```bash
|
|
120
|
-
tl --version # turnloop 0.1.
|
|
120
|
+
tl --version # turnloop 0.1.9
|
|
121
121
|
tl doctor # every provider, key presence, shell, context budget
|
|
122
122
|
```
|
|
123
123
|
|
|
@@ -1092,11 +1092,19 @@ in the system prompt and load their body on demand, which on a 65k window is the
|
|
|
1092
1092
|
difference between having skills and not.
|
|
1093
1093
|
|
|
1094
1094
|
The system prompt also documents this layout to the model itself, as `CONFIG_LAYOUT`
|
|
1095
|
-
—
|
|
1095
|
+
— 432 tokens, in the cacheable region, omitted from the `minimal` variant. Without it
|
|
1096
1096
|
the model cannot configure the tool it is running inside: asked to add an MCP server
|
|
1097
1097
|
it invented `.turnloop/turnloop.config.json`, and asked to install a skill it wrote to
|
|
1098
1098
|
`examples/` — both real outputs from live runs. With it, both go to the right place
|
|
1099
|
-
first try.
|
|
1099
|
+
first try.
|
|
1100
|
+
|
|
1101
|
+
It also names `tl skills add` explicitly and tells the model *not* to run the install
|
|
1102
|
+
scripts skill repos publish for other agents. That paragraph was added after watching
|
|
1103
|
+
three separate sessions try `/plugin marketplace add` as a shell command, then
|
|
1104
|
+
`clawhub install`, then `git clone` plus `npm install` plus `npm test` — twenty-six
|
|
1105
|
+
messages ending in "the ponytail skill has been installed", when nothing had been put
|
|
1106
|
+
anywhere turnloop looks. The same request now costs 11,090 tokens and answers
|
|
1107
|
+
`tl skills add DietrichGebert/ponytail`. It includes the literal YAML frontmatter a skill needs, since a skill with
|
|
1100
1108
|
markdown-bold frontmatter instead of YAML used to vanish with no diagnostic; `/skills`
|
|
1101
1109
|
now also reports anything found on disk but rejected, with the reason and path — see
|
|
1102
1110
|
[Bugs worth reading about](#bugs-worth-reading-about).
|
|
@@ -88,7 +88,7 @@ point.
|
|
|
88
88
|
Verify:
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
|
-
tl --version # turnloop 0.1.
|
|
91
|
+
tl --version # turnloop 0.1.9
|
|
92
92
|
tl doctor # every provider, key presence, shell, context budget
|
|
93
93
|
```
|
|
94
94
|
|
|
@@ -1063,11 +1063,19 @@ in the system prompt and load their body on demand, which on a 65k window is the
|
|
|
1063
1063
|
difference between having skills and not.
|
|
1064
1064
|
|
|
1065
1065
|
The system prompt also documents this layout to the model itself, as `CONFIG_LAYOUT`
|
|
1066
|
-
—
|
|
1066
|
+
— 432 tokens, in the cacheable region, omitted from the `minimal` variant. Without it
|
|
1067
1067
|
the model cannot configure the tool it is running inside: asked to add an MCP server
|
|
1068
1068
|
it invented `.turnloop/turnloop.config.json`, and asked to install a skill it wrote to
|
|
1069
1069
|
`examples/` — both real outputs from live runs. With it, both go to the right place
|
|
1070
|
-
first try.
|
|
1070
|
+
first try.
|
|
1071
|
+
|
|
1072
|
+
It also names `tl skills add` explicitly and tells the model *not* to run the install
|
|
1073
|
+
scripts skill repos publish for other agents. That paragraph was added after watching
|
|
1074
|
+
three separate sessions try `/plugin marketplace add` as a shell command, then
|
|
1075
|
+
`clawhub install`, then `git clone` plus `npm install` plus `npm test` — twenty-six
|
|
1076
|
+
messages ending in "the ponytail skill has been installed", when nothing had been put
|
|
1077
|
+
anywhere turnloop looks. The same request now costs 11,090 tokens and answers
|
|
1078
|
+
`tl skills add DietrichGebert/ponytail`. It includes the literal YAML frontmatter a skill needs, since a skill with
|
|
1071
1079
|
markdown-bold frontmatter instead of YAML used to vanish with no diagnostic; `/skills`
|
|
1072
1080
|
now also reports anything found on disk but rejected, with the reason and path — see
|
|
1073
1081
|
[Bugs worth reading about](#bugs-worth-reading-about).
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "turnloop"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.9"
|
|
8
8
|
description = "A local-first agentic coding harness: streaming tool loop, permission gating, context compaction, subagents, and any LLM provider."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -54,6 +54,14 @@ Homepage = "https://github.com/Pranesh-2005/turnloop"
|
|
|
54
54
|
[tool.hatch.build.targets.wheel]
|
|
55
55
|
packages = ["turnloop"]
|
|
56
56
|
|
|
57
|
+
# Without an explicit include, the sdist sweeps up whatever happens to be sitting
|
|
58
|
+
# in the working tree. A stray `git clone` left behind by a failed skill install
|
|
59
|
+
# put 157 of 317 entries — 4.2 MB of an unrelated repository — into the 0.1.8
|
|
60
|
+
# sdist before this was pinned down. An allowlist fails closed: new junk is not
|
|
61
|
+
# published, and a genuinely new top-level path has to be added here on purpose.
|
|
62
|
+
[tool.hatch.build.targets.sdist]
|
|
63
|
+
include = ["turnloop", "tests", "README.md", "pyproject.toml", "LICENSE"]
|
|
64
|
+
|
|
57
65
|
[tool.ruff]
|
|
58
66
|
line-length = 100
|
|
59
67
|
target-version = "py311"
|
|
@@ -114,6 +114,11 @@ Frontmatter is YAML, not markdown, and needs `description` or it is dropped \
|
|
|
114
114
|
name: my-skill
|
|
115
115
|
description: one line the model uses to decide when to load this
|
|
116
116
|
---
|
|
117
|
+
Installing one is the user's job, not yours: `tl skills add <owner/repo>` \
|
|
118
|
+
fetches and validates a SKILL.md, and `tl skills import` adopts skills already \
|
|
119
|
+
on the machine. Skill repos publish install scripts for other agents \
|
|
120
|
+
(`/plugin ...`, `clawhub`, `npm install`) — none of those put anything where \
|
|
121
|
+
turnloop looks, so never run them. Point the user at `tl skills add` instead.
|
|
117
122
|
"""
|
|
118
123
|
|
|
119
124
|
PLAN_MODE = """\
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
name: ci
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main]
|
|
6
|
-
pull_request:
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
test:
|
|
10
|
-
strategy:
|
|
11
|
-
fail-fast: false
|
|
12
|
-
matrix:
|
|
13
|
-
# Windows is not optional here: shell resolution and process-tree kill are
|
|
14
|
-
# platform-specific and are exactly where this project's bugs live.
|
|
15
|
-
os: [ubuntu-latest, windows-latest]
|
|
16
|
-
python: ["3.11", "3.13"]
|
|
17
|
-
runs-on: ${{ matrix.os }}
|
|
18
|
-
steps:
|
|
19
|
-
- uses: actions/checkout@v5
|
|
20
|
-
|
|
21
|
-
- uses: actions/setup-python@v6
|
|
22
|
-
with:
|
|
23
|
-
python-version: ${{ matrix.python }}
|
|
24
|
-
|
|
25
|
-
- run: pip install -e ".[dev]"
|
|
26
|
-
|
|
27
|
-
- name: Tests
|
|
28
|
-
# Network is blocked at the transport layer by conftest, so `not live` is
|
|
29
|
-
# belt and braces rather than the only guard.
|
|
30
|
-
run: pytest -m "not live"
|
|
31
|
-
|
|
32
|
-
- name: Lint
|
|
33
|
-
run: ruff check turnloop tests
|
|
34
|
-
|
|
35
|
-
- name: Types
|
|
36
|
-
run: mypy turnloop
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/circular_import/models.py
RENAMED
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/circular_import/services.py
RENAMED
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/circular_import/test_cancel.py
RENAMED
|
File without changes
|
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/cross_file_contract/decode.py
RENAMED
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/cross_file_contract/encode.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/failing_test/test_calc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/grep_edit/transform.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/regression_trap/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{turnloop-0.1.8 → turnloop-0.1.9}/turnloop/experiments/suite/fixtures/rename/test_billing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|