@turri-dev/cli 0.0.0-stage → 0.1.1
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.
- package/.pi/themes/turri-dark.json +80 -0
- package/.pi/themes/turri-light.json +82 -0
- package/LICENSE +21 -0
- package/README.md +272 -2
- package/assets/jellyfish/dark-00.png +0 -0
- package/assets/jellyfish/dark-01.png +0 -0
- package/assets/jellyfish/dark-02.png +0 -0
- package/assets/jellyfish/dark-03.png +0 -0
- package/assets/jellyfish/dark-04.png +0 -0
- package/assets/jellyfish/dark-05.png +0 -0
- package/assets/jellyfish/dark-06.png +0 -0
- package/assets/jellyfish/dark-07.png +0 -0
- package/assets/jellyfish/dark-08.png +0 -0
- package/assets/jellyfish/dark-09.png +0 -0
- package/assets/jellyfish/dark-10.png +0 -0
- package/assets/jellyfish/dark-11.png +0 -0
- package/assets/jellyfish/dark-12.png +0 -0
- package/assets/jellyfish/dark-13.png +0 -0
- package/assets/jellyfish/dark-14.png +0 -0
- package/assets/jellyfish/fallback.txt +252 -0
- package/assets/jellyfish/light-00.png +0 -0
- package/assets/jellyfish/light-01.png +0 -0
- package/assets/jellyfish/light-02.png +0 -0
- package/assets/jellyfish/light-03.png +0 -0
- package/assets/jellyfish/light-04.png +0 -0
- package/assets/jellyfish/light-05.png +0 -0
- package/assets/jellyfish/light-06.png +0 -0
- package/assets/jellyfish/light-07.png +0 -0
- package/assets/jellyfish/light-08.png +0 -0
- package/assets/jellyfish/light-09.png +0 -0
- package/assets/jellyfish/light-10.png +0 -0
- package/assets/jellyfish/light-11.png +0 -0
- package/assets/jellyfish/light-12.png +0 -0
- package/assets/jellyfish/light-13.png +0 -0
- package/assets/jellyfish/light-14.png +0 -0
- package/bin/turri.mjs +29 -0
- package/dist/ask.js +149 -0
- package/dist/brand.js +50 -0
- package/dist/btw.js +174 -0
- package/dist/chat-models.js +37 -0
- package/dist/chat-skills.js +18 -0
- package/dist/cli.js +178 -0
- package/dist/config-command.js +197 -0
- package/dist/config-edit.js +367 -0
- package/dist/config.js +489 -0
- package/dist/conform-cli.js +29 -0
- package/dist/cultivate-cli.js +110 -0
- package/dist/drift-cli.js +25 -0
- package/dist/environment.js +70 -0
- package/dist/extension.js +2372 -0
- package/dist/genome.js +301 -0
- package/dist/graph.js +246 -0
- package/dist/identity.js +35 -0
- package/dist/init-config.js +511 -0
- package/dist/judge.js +62 -0
- package/dist/lineage-cli.js +13 -0
- package/dist/loop-cli.js +132 -0
- package/dist/loop-tools.js +225 -0
- package/dist/mature-tools.js +193 -0
- package/dist/model-check.js +117 -0
- package/dist/module-report.js +9 -0
- package/dist/pi-launch.js +31 -0
- package/dist/pi.js +813 -0
- package/dist/plain/check.js +76 -0
- package/dist/plain/concepts.js +213 -0
- package/dist/plain/errors.js +43 -0
- package/dist/plain/files.js +57 -0
- package/dist/plain/highlight.js +195 -0
- package/dist/plain/index.js +15 -0
- package/dist/plain/liquid.js +129 -0
- package/dist/plain/markdown.js +208 -0
- package/dist/plain/parser.js +752 -0
- package/dist/plain/plain.tmLanguage.json +124 -0
- package/dist/plain/spec.js +291 -0
- package/dist/plain/stdlib.js +44 -0
- package/dist/question-dialog.js +125 -0
- package/dist/questioning.js +109 -0
- package/dist/quiet.js +125 -0
- package/dist/regenerate/activity.js +187 -0
- package/dist/regenerate/agent-env.js +190 -0
- package/dist/regenerate/agent-shell.js +114 -0
- package/dist/regenerate/arbiter.js +133 -0
- package/dist/regenerate/audit.js +203 -0
- package/dist/regenerate/cases.js +83 -0
- package/dist/regenerate/change-view.js +102 -0
- package/dist/regenerate/choose-conformance.js +117 -0
- package/dist/regenerate/chunk-plan.js +625 -0
- package/dist/regenerate/codebase.js +75 -0
- package/dist/regenerate/command-check.js +312 -0
- package/dist/regenerate/compaction.js +20 -0
- package/dist/regenerate/confine.js +310 -0
- package/dist/regenerate/conform.js +133 -0
- package/dist/regenerate/conformance-agents.js +955 -0
- package/dist/regenerate/conformance.js +936 -0
- package/dist/regenerate/conversation-writes.js +100 -0
- package/dist/regenerate/credentials.js +88 -0
- package/dist/regenerate/debug-log.js +228 -0
- package/dist/regenerate/debugger.js +90 -0
- package/dist/regenerate/delivery.js +19 -0
- package/dist/regenerate/diagnose-job.js +40 -0
- package/dist/regenerate/diagnose.js +81 -0
- package/dist/regenerate/diff-view.js +240 -0
- package/dist/regenerate/drift.js +194 -0
- package/dist/regenerate/engine.js +118 -0
- package/dist/regenerate/environment-error.js +220 -0
- package/dist/regenerate/job-log.js +102 -0
- package/dist/regenerate/job-panel.js +336 -0
- package/dist/regenerate/jobs-tree.js +300 -0
- package/dist/regenerate/jobs.js +427 -0
- package/dist/regenerate/lanes.js +32 -0
- package/dist/regenerate/lineage.js +384 -0
- package/dist/regenerate/loop.js +1435 -0
- package/dist/regenerate/masking.js +95 -0
- package/dist/regenerate/notes.js +397 -0
- package/dist/regenerate/os-sandbox.js +243 -0
- package/dist/regenerate/paths.js +165 -0
- package/dist/regenerate/plain-palette.js +83 -0
- package/dist/regenerate/prompt.js +704 -0
- package/dist/regenerate/records.js +294 -0
- package/dist/regenerate/regenerate.js +598 -0
- package/dist/regenerate/regression.js +181 -0
- package/dist/regenerate/release.js +262 -0
- package/dist/regenerate/requires.js +241 -0
- package/dist/regenerate/resources.js +164 -0
- package/dist/regenerate/self-check.js +111 -0
- package/dist/regenerate/services.js +155 -0
- package/dist/regenerate/shell.js +319 -0
- package/dist/regenerate/side-panel.js +278 -0
- package/dist/regenerate/spec-map-view.js +574 -0
- package/dist/regenerate/spec-map.js +561 -0
- package/dist/regenerate/spec-steps.js +527 -0
- package/dist/regenerate/state.js +10 -0
- package/dist/regenerate/steer.js +91 -0
- package/dist/regenerate/steering.js +119 -0
- package/dist/regenerate/stop-report.js +161 -0
- package/dist/regenerate/submit-work.js +71 -0
- package/dist/regenerate/test-kinds.js +124 -0
- package/dist/regenerate/test-scripts.js +695 -0
- package/dist/regenerate/testing.js +406 -0
- package/dist/regenerate/transcript-view.js +1 -0
- package/dist/regenerate/unit-gate.js +20 -0
- package/dist/regenerate/unit-review.js +347 -0
- package/dist/regenerate/web.js +256 -0
- package/dist/regenerate/workspace.js +99 -0
- package/dist/regenerate-cli.js +68 -0
- package/dist/release-agent.js +114 -0
- package/dist/release-cli.js +131 -0
- package/dist/release-tools.js +148 -0
- package/dist/review/live.js +165 -0
- package/dist/rules.js +47 -0
- package/dist/self-invocation.js +110 -0
- package/dist/setup.js +245 -0
- package/dist/skill-progress.js +78 -0
- package/dist/skill.js +149 -0
- package/dist/skills.js +74 -0
- package/dist/spec-diff-cli.js +37 -0
- package/dist/spec-tools.js +155 -0
- package/dist/stack.js +158 -0
- package/dist/stacks.js +97 -0
- package/dist/stdlib.js +100 -0
- package/dist/terminal-images.js +46 -0
- package/dist/tools.js +242 -0
- package/dist/validate-cli.js +52 -0
- package/docs/README.md +58 -0
- package/docs/authoring-plain.md +245 -0
- package/docs/config.md +353 -0
- package/docs/deploy.md +109 -0
- package/docs/development.md +75 -0
- package/docs/headless.md +148 -0
- package/docs/images/how-turri-works.svg +50 -0
- package/docs/images/turri-banner.png +0 -0
- package/docs/installation.md +118 -0
- package/docs/parser.md +108 -0
- package/docs/regenerating.md +1116 -0
- package/docs/sandbox.md +233 -0
- package/docs/skills-and-gates.md +254 -0
- package/docs/theming.md +76 -0
- package/docs/using.md +454 -0
- package/genome/rules/bullet-continuation.md +69 -0
- package/genome/rules/concise-specs-examples.md +431 -0
- package/genome/rules/concise-specs-integration-examples.md +270 -0
- package/genome/rules/concise-specs.md +80 -0
- package/genome/rules/definitions.md +107 -0
- package/genome/rules/examples/integration-embedded-testing/run_conformance_tests_java.sh +163 -0
- package/genome/rules/examples/integration-embedded-testing/run_unittests_java.sh +51 -0
- package/genome/rules/exported-concepts.md +39 -0
- package/genome/rules/func-specs.md +129 -0
- package/genome/rules/impl-reqs.md +68 -0
- package/genome/rules/import-modules.md +48 -0
- package/genome/rules/integration-embedded-testing.md +276 -0
- package/genome/rules/integration-embedded.md +171 -0
- package/genome/rules/integration-standalone.md +135 -0
- package/genome/rules/integrations.md +137 -0
- package/genome/rules/linked-resources.md +69 -0
- package/genome/rules/module-structure.md +105 -0
- package/genome/rules/project-model.md +88 -0
- package/genome/rules/required-concepts.md +44 -0
- package/genome/rules/requires-modules.md +80 -0
- package/genome/rules/stdlib.md +73 -0
- package/genome/rules/test-reqs.md +57 -0
- package/genome/skills/add-acceptance-test/SKILL.md +100 -0
- package/genome/skills/add-concept/SKILL.md +71 -0
- package/genome/skills/add-functional-spec/SKILL.md +84 -0
- package/genome/skills/add-functional-specs/SKILL.md +118 -0
- package/genome/skills/add-implementation-requirement/SKILL.md +86 -0
- package/genome/skills/add-resource/SKILL.md +105 -0
- package/genome/skills/add-template/SKILL.md +64 -0
- package/genome/skills/add-test-requirement/SKILL.md +73 -0
- package/genome/skills/analyze-2-func-specs/SKILL.md +101 -0
- package/genome/skills/analyze-func-specs/SKILL.md +123 -0
- package/genome/skills/analyze-if-func-spec-too-complex/SKILL.md +211 -0
- package/genome/skills/break-down-func-spec/SKILL.md +205 -0
- package/genome/skills/brood/SKILL.md +229 -0
- package/genome/skills/brood/references/intent.md +35 -0
- package/genome/skills/brood/references/product.md +101 -0
- package/genome/skills/brood/references/stack.md +61 -0
- package/genome/skills/brood/references/testing.md +56 -0
- package/genome/skills/bud/SKILL.md +148 -0
- package/genome/skills/bud/references/checklist.md +44 -0
- package/genome/skills/bud/references/intent.md +30 -0
- package/genome/skills/check-plain-env/SKILL.md +285 -0
- package/genome/skills/consolidate-concepts/SKILL.md +192 -0
- package/genome/skills/create-import-module/SKILL.md +104 -0
- package/genome/skills/create-requires-module/SKILL.md +109 -0
- package/genome/skills/debug-specs/SKILL.md +188 -0
- package/genome/skills/implement-conformance-testing-script/SKILL.md +238 -0
- package/genome/skills/implement-conformance-testing-script/assets/run_conformance_tests_cypress.ps1 +337 -0
- package/genome/skills/implement-conformance-testing-script/assets/run_conformance_tests_golang.ps1 +111 -0
- package/genome/skills/implement-conformance-testing-script/assets/run_conformance_tests_java.sh +136 -0
- package/genome/skills/implement-conformance-testing-script/assets/run_conformance_tests_python.ps1 +103 -0
- package/genome/skills/implement-conformance-testing-script/assets/run_conformance_tests_python.sh +150 -0
- package/genome/skills/implement-unit-testing-script/SKILL.md +160 -0
- package/genome/skills/implement-unit-testing-script/assets/run_unittests_flutter.ps1 +87 -0
- package/genome/skills/implement-unit-testing-script/assets/run_unittests_golang.ps1 +73 -0
- package/genome/skills/implement-unit-testing-script/assets/run_unittests_java.sh +72 -0
- package/genome/skills/implement-unit-testing-script/assets/run_unittests_python.ps1 +81 -0
- package/genome/skills/implement-unit-testing-script/assets/run_unittests_python.sh +98 -0
- package/genome/skills/implement-unit-testing-script/assets/run_unittests_react.ps1 +87 -0
- package/genome/skills/init-plain-project/SKILL.md +117 -0
- package/genome/skills/init-plain-project/references/checklist.md +30 -0
- package/genome/skills/mature/SKILL.md +126 -0
- package/genome/skills/refactor-module/SKILL.md +196 -0
- package/genome/skills/resolve-section-ownership/SKILL.md +64 -0
- package/genome/skills/resolve-spec-conflict/SKILL.md +96 -0
- package/genome/skills/spawn/SKILL.md +163 -0
- package/package.json +68 -4
- package/stdlib/backend/common.plain +25 -0
- package/stdlib/backend/conformance/common.plain +12 -0
- package/stdlib/backend/conformance/go-gin.plain +9 -0
- package/stdlib/backend/conformance/go-nethttp.plain +9 -0
- package/stdlib/backend/conformance/java-springboot.plain +9 -0
- package/stdlib/backend/conformance/python-django.plain +9 -0
- package/stdlib/backend/conformance/python-fastapi.plain +9 -0
- package/stdlib/backend/conformance/python-flask.plain +9 -0
- package/stdlib/backend/conformance/rust-axum.plain +9 -0
- package/stdlib/backend/conformance/typescript-express.plain +9 -0
- package/stdlib/backend/conformance/typescript-fastify.plain +9 -0
- package/stdlib/backend/conformance/typescript-nestjs.plain +9 -0
- package/stdlib/backend/go-gin.plain +18 -0
- package/stdlib/backend/go-nethttp.plain +18 -0
- package/stdlib/backend/java-springboot.plain +19 -0
- package/stdlib/backend/python-django.plain +19 -0
- package/stdlib/backend/python-fastapi.plain +23 -0
- package/stdlib/backend/python-flask.plain +23 -0
- package/stdlib/backend/rust-axum.plain +17 -0
- package/stdlib/backend/typescript-express.plain +19 -0
- package/stdlib/backend/typescript-fastify.plain +19 -0
- package/stdlib/backend/typescript-nestjs.plain +19 -0
- package/stdlib/cli/common.plain +17 -0
- package/stdlib/cli/conformance/common.plain +11 -0
- package/stdlib/cli/conformance/go-cobra.plain +9 -0
- package/stdlib/cli/conformance/go-flag.plain +9 -0
- package/stdlib/cli/conformance/java-picocli.plain +9 -0
- package/stdlib/cli/conformance/python-argparse.plain +9 -0
- package/stdlib/cli/conformance/python-click.plain +9 -0
- package/stdlib/cli/conformance/python-typer.plain +9 -0
- package/stdlib/cli/conformance/rust-clap.plain +9 -0
- package/stdlib/cli/conformance/typescript-commander.plain +9 -0
- package/stdlib/cli/go-cobra.plain +14 -0
- package/stdlib/cli/go-flag.plain +14 -0
- package/stdlib/cli/java-picocli.plain +15 -0
- package/stdlib/cli/python-argparse.plain +18 -0
- package/stdlib/cli/python-click.plain +16 -0
- package/stdlib/cli/python-typer.plain +16 -0
- package/stdlib/cli/rust-clap.plain +14 -0
- package/stdlib/cli/typescript-commander.plain +17 -0
- package/stdlib/frontend/angular.plain +17 -0
- package/stdlib/frontend/common.plain +17 -0
- package/stdlib/frontend/conformance/angular.plain +5 -0
- package/stdlib/frontend/conformance/common.plain +11 -0
- package/stdlib/frontend/conformance/react-vite.plain +5 -0
- package/stdlib/frontend/conformance/sveltekit-spa.plain +5 -0
- package/stdlib/frontend/conformance/vue-vite.plain +5 -0
- package/stdlib/frontend/react-vite.plain +16 -0
- package/stdlib/frontend/sveltekit-spa.plain +16 -0
- package/stdlib/frontend/vue-vite.plain +16 -0
- package/stdlib/lang/go.plain +13 -0
- package/stdlib/lang/java.plain +12 -0
- package/stdlib/lang/python.plain +18 -0
- package/stdlib/lang/rust.plain +12 -0
- package/stdlib/lang/typescript.plain +13 -0
- package/stdlib/library/common.plain +15 -0
- package/stdlib/library/conformance/common.plain +9 -0
- package/stdlib/library/conformance/go.plain +9 -0
- package/stdlib/library/conformance/java-gradle.plain +9 -0
- package/stdlib/library/conformance/java-maven.plain +9 -0
- package/stdlib/library/conformance/python.plain +9 -0
- package/stdlib/library/conformance/rust.plain +9 -0
- package/stdlib/library/conformance/typescript.plain +9 -0
- package/stdlib/library/go.plain +12 -0
- package/stdlib/library/java-gradle.plain +13 -0
- package/stdlib/library/java-maven.plain +13 -0
- package/stdlib/library/python.plain +13 -0
- package/stdlib/library/rust.plain +12 -0
- package/stdlib/library/typescript.plain +15 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
3
|
+
"name": "turri-dark",
|
|
4
|
+
"vars": {
|
|
5
|
+
"yellow": "#e0ff6e",
|
|
6
|
+
"yellowMuted": "#b9cb69",
|
|
7
|
+
"green": "#79fc96",
|
|
8
|
+
"greenLight": "#c5dcd9",
|
|
9
|
+
"greenDark": "#223936",
|
|
10
|
+
"black": "#0f0f0f",
|
|
11
|
+
"white": "#ffffff",
|
|
12
|
+
"gray": "#808080",
|
|
13
|
+
"grayLight": "#666666",
|
|
14
|
+
"statusError": "#dd5353",
|
|
15
|
+
"statusWarning": "#dc6803"
|
|
16
|
+
},
|
|
17
|
+
"colors": {
|
|
18
|
+
"accent": "yellow",
|
|
19
|
+
"border": "green",
|
|
20
|
+
"borderAccent": "green",
|
|
21
|
+
"borderMuted": "greenDark",
|
|
22
|
+
"success": "green",
|
|
23
|
+
"error": "statusError",
|
|
24
|
+
"warning": "statusWarning",
|
|
25
|
+
"muted": "gray",
|
|
26
|
+
"dim": "grayLight",
|
|
27
|
+
"text": "greenLight",
|
|
28
|
+
"thinkingText": "gray",
|
|
29
|
+
"selectedBg": "greenDark",
|
|
30
|
+
"scrollbarTrack": "greenDark",
|
|
31
|
+
"scrollbarThumb": "green",
|
|
32
|
+
"searchMatchBg": "yellow",
|
|
33
|
+
"searchMatchText": "black",
|
|
34
|
+
"userMessageBg": "",
|
|
35
|
+
"userMessageText": "yellow",
|
|
36
|
+
"customMessageBg": "",
|
|
37
|
+
"customMessageText": "greenLight",
|
|
38
|
+
"customMessageLabel": "yellow",
|
|
39
|
+
"toolPendingBg": "",
|
|
40
|
+
"toolSuccessBg": "",
|
|
41
|
+
"toolErrorBg": "",
|
|
42
|
+
"toolTitle": "yellow",
|
|
43
|
+
"toolOutput": "gray",
|
|
44
|
+
"mdHeading": "yellow",
|
|
45
|
+
"mdLink": "green",
|
|
46
|
+
"mdLinkUrl": "grayLight",
|
|
47
|
+
"mdCode": "yellowMuted",
|
|
48
|
+
"mdCodeBlock": "greenLight",
|
|
49
|
+
"mdCodeBlockBorder": "greenDark",
|
|
50
|
+
"mdQuote": "gray",
|
|
51
|
+
"mdQuoteBorder": "greenDark",
|
|
52
|
+
"mdHr": "grayLight",
|
|
53
|
+
"mdListBullet": "green",
|
|
54
|
+
"toolDiffAdded": "green",
|
|
55
|
+
"toolDiffRemoved": "statusError",
|
|
56
|
+
"toolDiffContext": "gray",
|
|
57
|
+
"syntaxComment": "grayLight",
|
|
58
|
+
"syntaxKeyword": "yellow",
|
|
59
|
+
"syntaxFunction": "green",
|
|
60
|
+
"syntaxVariable": "greenLight",
|
|
61
|
+
"syntaxString": "yellowMuted",
|
|
62
|
+
"syntaxNumber": "statusWarning",
|
|
63
|
+
"syntaxType": "white",
|
|
64
|
+
"syntaxOperator": "gray",
|
|
65
|
+
"syntaxPunctuation": "grayLight",
|
|
66
|
+
"thinkingOff": "grayLight",
|
|
67
|
+
"thinkingMinimal": "gray",
|
|
68
|
+
"thinkingLow": "greenLight",
|
|
69
|
+
"thinkingMedium": "green",
|
|
70
|
+
"thinkingHigh": "yellowMuted",
|
|
71
|
+
"thinkingXhigh": "yellow",
|
|
72
|
+
"thinkingMax": "statusWarning",
|
|
73
|
+
"bashMode": "yellow"
|
|
74
|
+
},
|
|
75
|
+
"export": {
|
|
76
|
+
"pageBg": "#0f0f0f",
|
|
77
|
+
"cardBg": "#121212",
|
|
78
|
+
"infoBg": "#223936"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
3
|
+
"name": "turri-light",
|
|
4
|
+
"vars": {
|
|
5
|
+
"blue": "#0a1fd4",
|
|
6
|
+
"greenLight": "#c5dcd9",
|
|
7
|
+
"greenDark": "#223936",
|
|
8
|
+
"diffGreen": "#1a7f37",
|
|
9
|
+
"black": "#0f0f0f",
|
|
10
|
+
"gray": "#808080",
|
|
11
|
+
"grayLight": "#666666",
|
|
12
|
+
"red": "#d00505",
|
|
13
|
+
"statusErrorLight": "#fee4e2",
|
|
14
|
+
"statusWarningLight": "#fef0c7",
|
|
15
|
+
"statusWarning": "#dc6803",
|
|
16
|
+
"paleGreen": "#eef7f5",
|
|
17
|
+
"paleGray": "#f4f4f2"
|
|
18
|
+
},
|
|
19
|
+
"colors": {
|
|
20
|
+
"accent": "blue",
|
|
21
|
+
"border": "gray",
|
|
22
|
+
"borderAccent": "blue",
|
|
23
|
+
"borderMuted": "greenLight",
|
|
24
|
+
"success": "greenDark",
|
|
25
|
+
"error": "red",
|
|
26
|
+
"warning": "statusWarning",
|
|
27
|
+
"muted": "grayLight",
|
|
28
|
+
"dim": "gray",
|
|
29
|
+
"text": "black",
|
|
30
|
+
"thinkingText": "grayLight",
|
|
31
|
+
"selectedBg": "greenLight",
|
|
32
|
+
"scrollbarTrack": "greenLight",
|
|
33
|
+
"scrollbarThumb": "grayLight",
|
|
34
|
+
"searchMatchBg": "statusWarningLight",
|
|
35
|
+
"searchMatchText": "black",
|
|
36
|
+
"userMessageBg": "paleGray",
|
|
37
|
+
"userMessageText": "black",
|
|
38
|
+
"customMessageBg": "paleGreen",
|
|
39
|
+
"customMessageText": "black",
|
|
40
|
+
"customMessageLabel": "blue",
|
|
41
|
+
"toolPendingBg": "paleGray",
|
|
42
|
+
"toolSuccessBg": "paleGreen",
|
|
43
|
+
"toolErrorBg": "statusErrorLight",
|
|
44
|
+
"toolTitle": "blue",
|
|
45
|
+
"toolOutput": "grayLight",
|
|
46
|
+
"mdHeading": "blue",
|
|
47
|
+
"mdLink": "blue",
|
|
48
|
+
"mdLinkUrl": "grayLight",
|
|
49
|
+
"mdCode": "greenDark",
|
|
50
|
+
"mdCodeBlock": "black",
|
|
51
|
+
"mdCodeBlockBorder": "greenLight",
|
|
52
|
+
"mdQuote": "grayLight",
|
|
53
|
+
"mdQuoteBorder": "greenLight",
|
|
54
|
+
"mdHr": "gray",
|
|
55
|
+
"mdListBullet": "blue",
|
|
56
|
+
"toolDiffAdded": "diffGreen",
|
|
57
|
+
"toolDiffRemoved": "red",
|
|
58
|
+
"toolDiffContext": "grayLight",
|
|
59
|
+
"syntaxComment": "grayLight",
|
|
60
|
+
"syntaxKeyword": "blue",
|
|
61
|
+
"syntaxFunction": "greenDark",
|
|
62
|
+
"syntaxVariable": "black",
|
|
63
|
+
"syntaxString": "greenDark",
|
|
64
|
+
"syntaxNumber": "statusWarning",
|
|
65
|
+
"syntaxType": "blue",
|
|
66
|
+
"syntaxOperator": "gray",
|
|
67
|
+
"syntaxPunctuation": "grayLight",
|
|
68
|
+
"thinkingOff": "gray",
|
|
69
|
+
"thinkingMinimal": "grayLight",
|
|
70
|
+
"thinkingLow": "greenDark",
|
|
71
|
+
"thinkingMedium": "blue",
|
|
72
|
+
"thinkingHigh": "blue",
|
|
73
|
+
"thinkingXhigh": "statusWarning",
|
|
74
|
+
"thinkingMax": "red",
|
|
75
|
+
"bashMode": "blue"
|
|
76
|
+
},
|
|
77
|
+
"export": {
|
|
78
|
+
"pageBg": "#ffffff",
|
|
79
|
+
"cardBg": "#f4f4f2",
|
|
80
|
+
"infoBg": "#eef7f5"
|
|
81
|
+
}
|
|
82
|
+
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Codeplain Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,273 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center"><img src="docs/images/turri-banner.png" alt="turri - coding agent with the power of regenerative software: regenerate, drift, lineage"></p>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<h1 align="center">turri<br>the first coding agent with the power of<br>regenerative software<br> </h1>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://www.npmjs.com/package/@turri-dev/cli"><img src="https://img.shields.io/npm/v/@turri-dev/cli?label=npm" alt="npm version"></a>
|
|
7
|
+
<a href="LICENSE"><img src="https://img.shields.io/npm/l/@turri-dev/cli" alt="MIT licence"></a>
|
|
8
|
+
<a href="https://nodejs.org/en/download"><img src="https://img.shields.io/node/v/@turri-dev/cli" alt="Node version"></a>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
You tell **turri** what the system should do, and **turri** writes it down as [\*\*\*plain](https://plainlang.org/).
|
|
12
|
+
**turri** builds the code from it. From then on \*\*\*plain is the durable source of truth: the code can always be
|
|
13
|
+
regenerated from it, and healed against it, as it changes.
|
|
14
|
+
|
|
15
|
+
**turri** is named after *Turritopsis dohrnii*, the immortal jellyfish that regenerates itself from its young
|
|
16
|
+
form, again and again - as **turri** regenerates the code from \*\*\*plain - see [the name](#the-name).
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
**turri** is built on [pi](https://pi.dev), the coding agent, and runs wherever pi runs: macOS, Linux, WSL; native
|
|
21
|
+
Windows best effort, with Git Bash. You need git, bash and [Node](https://nodejs.org/en/download) 22.19 or newer - a
|
|
22
|
+
Linux distribution's own `nodejs` package is often older. The agents use this machine's toolchains, fenced by a command check and an audit everywhere, and an OS sandbox where the
|
|
23
|
+
OS has one - Seatbelt on macOS, bubblewrap on Linux (`apt install bubblewrap`) - see [installation](docs/installation.md#installation).
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -g @turri-dev/cli # puts `turri` on your PATH
|
|
27
|
+
turri doctor # checks the machine
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
To work on turri itself, run it from a clone instead - see [installation](docs/installation.md#from-a-clone).
|
|
31
|
+
|
|
32
|
+
`doctor` checks for Node 22.19+, bash, the OS sandbox and a model provider for pi; in a project, the toolchains its
|
|
33
|
+
modules need, what its testing scripts run against this machine, and that each model `config.turri.yaml` names
|
|
34
|
+
answers with your credentials. It changes nothing without asking: when a check fails - the OS sandbox does not start,
|
|
35
|
+
say - it says why, and the command for you to run. Run it again whenever something breaks. What each check means:
|
|
36
|
+
[installation](docs/installation.md).
|
|
37
|
+
|
|
38
|
+
Then start it in your project, signed in to your model providers:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
cd ~/my-project
|
|
42
|
+
turri init-config # asks which vendor you use: Anthropic, OpenAI, Google, Amazon Bedrock, or other
|
|
43
|
+
export ANTHROPIC_API_KEY=... # the key it names - or skip it, and type /login in turri once it has started
|
|
44
|
+
turri
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`turri init-config` asks which vendor's models you use and writes the project's `config.turri.yaml` with two of theirs - a
|
|
48
|
+
capable one you talk to, which writes \*\*\*plain and plans the work, and a smaller, cheaper one that writes the code.
|
|
49
|
+
For Anthropic:
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
harness-model: anthropic/claude-opus-5-5:medium # you talk to it: it writes ***plain and plans the work
|
|
53
|
+
coding-model: anthropic/claude-haiku-5-5:low # it writes the code
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
To skip the question, name the vendor - `anthropic`, `openai`, `google`, `amazon-bedrock` (with `--maker` and
|
|
57
|
+
`--region`) or `other`:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
turri init-config --vendor anthropic
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
It then tells you which API key to set - or to type `/login` once **turri** is running instead. **turri** loads the
|
|
64
|
+
`config.turri.yaml` in the folder you start it from.
|
|
65
|
+
Below the two models, the file sets every other setting to its default - change any of them in the file, or from the
|
|
66
|
+
chat with `/turri-config`. Any other model works too: [models](#models).
|
|
67
|
+
|
|
68
|
+
Once `turri` is running, say: *Let's start a new project: a small API where people can register and sign in.*
|
|
69
|
+
|
|
70
|
+
No project of your own yet? Build one of [**the examples**](examples/README.md) with turri, step by step.
|
|
71
|
+
|
|
72
|
+
Rather not install Node and the rest? **turri** also runs in Docker, from one image: [turri in Docker](docker/README.md).
|
|
73
|
+
|
|
74
|
+
Choosing models: [models](#models); what to do next: [use](#use).
|
|
75
|
+
|
|
76
|
+
## Why
|
|
77
|
+
|
|
78
|
+
In the age of coding agents, writing code is getting easy. The hard and important part is
|
|
79
|
+
defining what the system should do. Agents can fix bugs, ask questions and keep getting more
|
|
80
|
+
capable - but they still cannot read your mind. The question is not only whether an agent can
|
|
81
|
+
write the code, but whether it understands what it is building.
|
|
82
|
+
|
|
83
|
+
Code that is patched, prompt after prompt, drifts: every misunderstanding stays in it, and the
|
|
84
|
+
next change is made on top. When the software can always be regenerated from durable information
|
|
85
|
+
instead, that understanding is written down - explicit, reviewable and tested - and it evolves with
|
|
86
|
+
the software rather than against it.
|
|
87
|
+
|
|
88
|
+
## How it differs from ye old coding agent
|
|
89
|
+
|
|
90
|
+
With a coding agent you work on code: you ask for a change, it edits the code, and you review the
|
|
91
|
+
code it wrote.
|
|
92
|
+
|
|
93
|
+
With **turri** you work on \*\*\*plain. You say what the software must do, and **turri** updates \*\*\*plain
|
|
94
|
+
and can always regenerate the code from that. You don't review the code or keep it - you review and
|
|
95
|
+
keep the intent: what the software must do, and what must hold as it changes. \*\*\*plain is the
|
|
96
|
+
durable part. The code is a disposable artefact, rebuilt from it whenever it changes.
|
|
97
|
+
|
|
98
|
+
| | ye old coding agent | **turri** |
|
|
99
|
+
| --- | --- | --- |
|
|
100
|
+
| **What you maintain** | the code, patched prompt after prompt | \*\*\*plain; the code is generated from it and never edited by hand |
|
|
101
|
+
| **Who drives** | the agent picks what to do next | the harness, in a fixed order: one functionality or one change to \*\*\*plain at a time, or a whole module functionality by functionality, in \*\*\*plain's order, each on top of the ones before it |
|
|
102
|
+
| **What counts as done** | the agent writes the code, runs the tests, and decides for itself that it is done | ye old coding agent writes the code; **turri** runs the whole test suite itself, with the project's own testing scripts, and decides deterministically when it is done - every test passes in its own run, or the work goes back |
|
|
103
|
+
| **Tests** | written and changed by whoever writes the code | conformance tests written from \*\*\*plain, black box, and kept apart from your acceptance tests; an agent fixing the code cannot change them |
|
|
104
|
+
| **What the agent sees** | your whole machine | only the prompt the harness writes, its module's folders, and the public web through its search and fetch tools; every command it runs is checked, fenced and audited |
|
|
105
|
+
| **Memory** | one conversation that fills up | a fresh agent for every step, starting from working notes the agents before it left - dated, attributed, and never allowed to override \*\*\*plain |
|
|
106
|
+
| **When it gets stuck** | it keeps trying, or quietly works around the problem | after 20 attempts it stops and tells you what to change in \*\*\*plain - never in the code |
|
|
107
|
+
| **A change** | another patch on top | a change to \*\*\*plain: what it touches is rebuilt, everything built before is tested again, and code that disagrees with \*\*\*plain is healed to match |
|
|
108
|
+
| **History** | whatever you commit | every build, regeneration and repair is a commit; a build interrupted halfway starts again from the last one |
|
|
109
|
+
|
|
110
|
+
## How it works
|
|
111
|
+
|
|
112
|
+
<p align="center"><img src="docs/images/how-turri-works.svg" width="900" alt="How turri works: you describe changes to turri, and turri asks and reports back. turri writes ***plain and reads it; you review it with turri in a review loop. turri regenerates the code from ***plain and tests it against ***plain - an endless loop."></p>
|
|
113
|
+
|
|
114
|
+
1. **Define.** Write \*\*\*plain with **turri**: it interviews you one question at a time and
|
|
115
|
+
writes the `.plain` files, held to the \*\*\*plain authoring rules and reviewed by independent
|
|
116
|
+
judges.
|
|
117
|
+
2. **Generate.** **turri** builds the code one functionality at a time, each on top of the ones
|
|
118
|
+
before it, into `plain_modules/` - and builds each answer in the background while the interview
|
|
119
|
+
goes on.
|
|
120
|
+
3. **Validate.** The harness runs the unit tests, then conformance tests written from \*\*\*plain,
|
|
121
|
+
then everything built so far, and moves on only when all of it passes.
|
|
122
|
+
4. **Regenerate.** To change the system, change its definition. The functionalities whose \*\*\*plain
|
|
123
|
+
changed are rebuilt, and everything built before is tested again.
|
|
124
|
+
|
|
125
|
+
A bug is fixed in \*\*\*plain; a new behaviour goes into \*\*\*plain; and the next regeneration carries
|
|
126
|
+
it. When a build is done, ask to try it: **turri** puts what is built in `dist/<module>` and
|
|
127
|
+
starts it on your machine - an app, and it tells you where to open your browser.
|
|
128
|
+
|
|
129
|
+
\*\*\*plain looks like this.
|
|
130
|
+
|
|
131
|
+
```plain
|
|
132
|
+
***definitions***
|
|
133
|
+
|
|
134
|
+
- :User: is a person with an account: an email address and a password.
|
|
135
|
+
|
|
136
|
+
***implementation reqs***
|
|
137
|
+
|
|
138
|
+
- :Implementation: is written in Python 3.12 with FastAPI.
|
|
139
|
+
|
|
140
|
+
***functional specs***
|
|
141
|
+
|
|
142
|
+
- A new :User: can register with an email address and a password.
|
|
143
|
+
- Registering with an email address already in use fails with status 400.
|
|
144
|
+
|
|
145
|
+
- A registered :User: can sign in and receives a bearer token.
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Each item under `***functional specs***` is one functionality, built on top of the ones before it.
|
|
149
|
+
|
|
150
|
+
**turri** runs as an extension to [pi](https://github.com/earendil-works/pi), so you work with it
|
|
151
|
+
in a conversation, and as a command line for unattended runs.
|
|
152
|
+
|
|
153
|
+
## The name
|
|
154
|
+
|
|
155
|
+
**turri** is short for [*Turritopsis dohrnii*](https://en.wikipedia.org/wiki/Turritopsis_dohrnii), the immortal
|
|
156
|
+
jellyfish, which, when injured or old, turns back into its young self and regenerates - the same jellyfish, from the
|
|
157
|
+
same genes, again and again.
|
|
158
|
+
|
|
159
|
+
That is what regenerative software asks of software, and what **turri** does:
|
|
160
|
+
|
|
161
|
+
| *Turritopsis dohrnii* | **turri** |
|
|
162
|
+
| --- | --- |
|
|
163
|
+
| Its genes are what it is: every generation develops from the same ones. | \*\*\*plain is what the software is: every generation of code is regenerated from it. |
|
|
164
|
+
| Injured or old, it does not patch itself: it goes back to the polyp and regenerates the adult. | Code that has drifted is not patched prompt after prompt: it is regenerated from \*\*\*plain, as much of it as has to be. |
|
|
165
|
+
| Every cell can become another, and it is still the same jellyfish. | Every line of code can be replaced, and it is still the same software - because what it is never lived in the code. |
|
|
166
|
+
| It can do it again and again, for as long as it lives. | The code can be regenerated whenever \*\*\*plain changes or a model gets better, for as long as \*\*\*plain is kept. |
|
|
167
|
+
|
|
168
|
+
So the tools speak its language: **`regenerate`** regenerates the code from \*\*\*plain as it is now - or the functionalities
|
|
169
|
+
you name, though nothing changed, or all of it from scratch - **`drift`** says how far the code has moved from it, and
|
|
170
|
+
**`lineage`** shows every generation of a module and what each was regenerated from.
|
|
171
|
+
|
|
172
|
+
## Models
|
|
173
|
+
|
|
174
|
+
`init-config`'s models are only a starting point. **turri** is built on [pi](https://github.com/earendil-works/pi),
|
|
175
|
+
so any model pi supports works - Anthropic, OpenAI, Google, Amazon Bedrock, OpenRouter, a local one. A model is reached
|
|
176
|
+
as pi reaches it - `/login`, in `turri` as in `pi`, the provider's API key in the environment (`ANTHROPIC_API_KEY`,
|
|
177
|
+
`OPENAI_API_KEY`, `GEMINI_API_KEY`, ...), or a cloud account - and named as pi names it, `provider/model-id`, with
|
|
178
|
+
`:high`, `:low` and so on for how hard it thinks. It uses three: the **harness** model you talk
|
|
179
|
+
to, which writes \*\*\*plain and plans the work - worth a capable one - and the **coding** and
|
|
180
|
+
**judge** models its agents build and judge with, which can be smaller and cheaper, such as GPT-6
|
|
181
|
+
Luna or Gemini 3.1 Flash Lite. `turri --harness-model` and `--coding-model` choose them for a
|
|
182
|
+
session, and pi's `/model` switches the one you talk to as you go; to keep them for the project,
|
|
183
|
+
set them with `/turri-config harness-model`, `/turri-config coding-model` and so on - each role's too, as
|
|
184
|
+
`models.<role>` - or write them in its `config.turri.yaml`:
|
|
185
|
+
|
|
186
|
+
```yaml
|
|
187
|
+
harness-model: anthropic/claude-opus-5-5 # the model you talk to: a capable one
|
|
188
|
+
coding-model: openai/gpt-6-luna # writes the code and the tests: a smaller one will do
|
|
189
|
+
judge-model: google/gemini-3.1-flash-lite # judges the conformance runs
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
One left out is the one before it: judge from coding, coding from harness. Every way to set them:
|
|
193
|
+
[models](docs/config.md#models).
|
|
194
|
+
|
|
195
|
+
## Use
|
|
196
|
+
|
|
197
|
+
In the project where your \*\*\*plain lives:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
cd ~/my-project
|
|
201
|
+
turri
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Then talk to it:
|
|
205
|
+
|
|
206
|
+
> Let's start a new project: a small API where people can register and sign in.
|
|
207
|
+
|
|
208
|
+
It runs the interview skill, asks you about the problem, the stack and the product, writes
|
|
209
|
+
\*\*\*plain, and builds each functionality as it is written. While it works:
|
|
210
|
+
|
|
211
|
+
- the **panel** above the input shows every build - its stage, what its agents are doing, its
|
|
212
|
+
model and cost - and the queue behind it;
|
|
213
|
+
- ask to try it at any time - "let me try it" - and **`release`** puts what is built so far in
|
|
214
|
+
`dist/<module>` and **`activate`** starts it, installing what it needs - nothing to approve;
|
|
215
|
+
- the **side panel** (`ctrl+h`) takes the screen and opens on **regen** (`/regen`) - \*\*\*plain, every item marked planned, working, regenerated, validating, conform or needs you - and `p` turns it to the **pulses** (`/pulses`) - every pulse, running, queued and finished, and what each regenerates; what its agents did is in each pulse's log in `.turri/jobs/`;
|
|
216
|
+
- **`/halt`** halts a pulse, **`/lineage`** shows every generation of a
|
|
217
|
+
module, and the **`drift`** tool says what is left to regenerate;
|
|
218
|
+
- **`/btw <question>`** asks turri something on the side - answered at once, even in the middle of a skill's interview
|
|
219
|
+
(typed as the answer, under "Something else…"), and left out of the conversation;
|
|
220
|
+
- **`/turri-config`** changes any setting of the project's `config.turri.yaml` - the models, review, conformance tests,
|
|
221
|
+
how many pulses at once - and says when it takes effect: now, at your next message, or at the next pulse. No
|
|
222
|
+
restart: `/turri-config review false`, or `/turri-config` alone to pick from the list;
|
|
223
|
+
- **`/stack`** chooses the stack to build with, in a project whose backend and frontend each have their own testing
|
|
224
|
+
scripts in `config.turri.<stack>.yaml` - `/stack backend`, `/stack none` - for the session (`--stack <name>` on the
|
|
225
|
+
command line).
|
|
226
|
+
|
|
227
|
+
Other things to ask for:
|
|
228
|
+
|
|
229
|
+
> Add password reset to \*\*\*plain.
|
|
230
|
+
>
|
|
231
|
+
> Regenerate the whole module, and conform every functionality with conformance tests.
|
|
232
|
+
>
|
|
233
|
+
> Regenerate changes to \*\*\*plain with a faster model.
|
|
234
|
+
|
|
235
|
+
The last one holds for the rest of the session; the model can be chosen separately for changes to
|
|
236
|
+
\*\*\*plain and for functionalities, and a name that fits more than one model is asked about rather
|
|
237
|
+
than guessed.
|
|
238
|
+
|
|
239
|
+
Without a conversation, the same work is on the command line:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
turri validate app.plain # validate ***plain - no model, no API key
|
|
243
|
+
turri drift app.plain # what is left to regenerate - starts nothing
|
|
244
|
+
turri regenerate app.plain # regenerate the code from ***plain: planned into jobs, run until it is done
|
|
245
|
+
turri regenerate app.plain 3 # regenerate functionality 3, changed or not
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
More: [using **turri**](docs/using.md); to render \*\*\*plain overnight, see
|
|
249
|
+
[running unattended](docs/headless.md).
|
|
250
|
+
|
|
251
|
+
## Documentation
|
|
252
|
+
|
|
253
|
+
Start at the [documentation index](docs/README.md), or go straight to a page:
|
|
254
|
+
|
|
255
|
+
| | |
|
|
256
|
+
| --- | --- |
|
|
257
|
+
| [Installation](docs/installation.md) | doctor, what turri needs of this machine, **turri** and `pi`, environment variables |
|
|
258
|
+
| [Examples](examples/README.md) | projects to build with turri step by step: cognio from an empty folder, a CLI, a backend service with conformance tests, a REST API integration |
|
|
259
|
+
| [Using **turri**](docs/using.md) | the conversation, skills, tools, pulses and regen, choosing models, the command line |
|
|
260
|
+
| [The project config](docs/config.md) | `config.turri.yaml` and each stack's `config.turri.<stack>.yaml`: every key, models and their inheritance, conformance, the testing scripts, stacks and choosing one, the old `config.yaml` |
|
|
261
|
+
| [Deploy](docs/deploy.md) | trying what is built: the last commit in `dist/<module>`, started on your machine, nothing installed without asking |
|
|
262
|
+
| [Running unattended](docs/headless.md) | rendering \*\*\*plain overnight or in CI: the command, keeping it running, the results, resuming, rebuilding one functionality |
|
|
263
|
+
| [Authoring \*\*\*plain](docs/authoring-plain.md) | what \*\*\*plain is made of, the authoring rules, the skills that write and fix it, checking it |
|
|
264
|
+
| [Regenerating](docs/regenerating.md) | what each build does and in which order: functionalities, modules, regeneration, changes to \*\*\*plain, conformance and acceptance tests, working notes, what the code is built from |
|
|
265
|
+
| [The sandbox](docs/sandbox.md) | what agents can reach, the walls every command passes, time limits, the web tools |
|
|
266
|
+
| [Skills and gates](docs/skills-and-gates.md) | the gate syntax, what the harness enforces, judges, rules |
|
|
267
|
+
| [The \*\*\*plain parser](docs/parser.md) | the TypeScript port, `turri validate`, fidelity to the reference parser |
|
|
268
|
+
| [Theming](docs/theming.md) | the two brand themes |
|
|
269
|
+
| [Development](docs/development.md) | tests, layout, known edges |
|
|
270
|
+
|
|
271
|
+
## License
|
|
272
|
+
|
|
273
|
+
turri is open source, under the [MIT licence](LICENSE).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|