@sous-io/sous 1.0.14 → 1.0.16
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/dist/bin.js +8 -2
- package/dist/sous.js +60 -56
- package/docs/markdown/commands.md +4 -2
- package/docs/markdown/configuration.md +3 -2
- package/docs/markdown/repositories-authoring.md +5 -0
- package/docs/markdown/repositories-consuming.md +14 -5
- package/docs/markdown/repositories-file-formats.md +1 -1
- package/docs/markdown/repositories-providers.md +8 -0
- package/docs/markdown/repositories-troubleshooting.md +14 -5
- package/docs/markdown/repositories.md +2 -1
- package/package.json +33 -33
- package/recipes/core/sous-skills/sous.recipe.yaml +1 -1
|
@@ -40,8 +40,10 @@ already exists.
|
|
|
40
40
|
- `--timings` prints how long each step of the run took.
|
|
41
41
|
- `--json`, on the commands that print a listing or a report, prints it as JSON instead.
|
|
42
42
|
|
|
43
|
-
Sous
|
|
44
|
-
`--
|
|
43
|
+
Sous reports, at the `debug` level, when a step takes longer than its time budget, so the report shows only
|
|
44
|
+
with `--debug` or `--log-level debug`. It goes to standard error, so it never mixes with `--json` output. Time
|
|
45
|
+
spent waiting for you to answer a question does not count. The `budgets` config key changes a budget, and
|
|
46
|
+
`false` turns its report off.
|
|
45
47
|
|
|
46
48
|
`sous --version` prints the version (`v1.2.3`); add `--verbose` for where it is installed, the platform and
|
|
47
49
|
the Node build.
|
|
@@ -163,8 +163,9 @@ Two more keys settle what plugins do:
|
|
|
163
163
|
the same one stops sous with an error until you choose one:
|
|
164
164
|
`"services": { "replace": { "git.runner": "sous-plugin-fast-git" } }`. Sous then warns on every
|
|
165
165
|
run that the other plugin may not work as expected.
|
|
166
|
-
- `budgets` changes how long a step may take before sous
|
|
167
|
-
`false` turns that
|
|
166
|
+
- `budgets` changes how long a step may take before sous reports that it is slow (at the `debug`
|
|
167
|
+
level, so only with `--debug`); a budget set to `false` turns that report off. `--timings` on any
|
|
168
|
+
command prints how long every step took.
|
|
168
169
|
|
|
169
170
|
`sous plugins show` lists every plugin and what it adds. Recipes may ship plugins too; see
|
|
170
171
|
[where plugins come from](architecture/specifications/S1-engine.md#where-plugins-come-from).
|
|
@@ -276,6 +276,11 @@ says which one to keep. `--ci` implies `--no-bump` and `--yes`, accepting the pl
|
|
|
276
276
|
but it deliberately does not imply `--push`, so what a workflow pushes stays visible in the workflow file. Under
|
|
277
277
|
either, a recipe whose files changed without a bump is an error naming its manifest and the colliding tag.
|
|
278
278
|
|
|
279
|
+
`--push` pushes the branch to `origin`, plus every release tag that `sous.index.json` publishes, that this checkout
|
|
280
|
+
holds and that `origin` lacks. That includes tags an earlier run cut without `--push`, so the pushed index never
|
|
281
|
+
names a tag subscribers cannot fetch. The tags go first, then the branch. A `--push` run with nothing new to
|
|
282
|
+
release still pushes them, which is how to send a release you made without `--push`.
|
|
283
|
+
|
|
279
284
|
### The branch rule
|
|
280
285
|
|
|
281
286
|
The default branch is whatever `origin/HEAD` points at. On any other branch a release bumps and commits but cuts
|
|
@@ -376,20 +376,27 @@ there is no entry to delete: the one sous provides comes back on the next run, s
|
|
|
376
376
|
opt-out outlives it. `sous subscription add core` clears it again. If you remove `core`, make sure
|
|
377
377
|
something else tells your agents not to edit generated files.
|
|
378
378
|
|
|
379
|
-
## Switch a subscription off
|
|
379
|
+
## Switch a subscription off
|
|
380
380
|
|
|
381
381
|
A subscription stays in the config with `enabled: false`, so the opt-out is visible. A switched-off
|
|
382
382
|
subscription is not built: the recipes reached only through it are skipped, the outputs they wrote are
|
|
383
383
|
pruned, and their variables are neither asked nor required. Their pins stay in the committed lockfile,
|
|
384
|
-
so
|
|
384
|
+
so a machine that switches a recipe off never removes it from the lockfile for anyone else.
|
|
385
385
|
|
|
386
386
|
```bash
|
|
387
387
|
sous subscription disable tool-usage/automated-browser-tasks
|
|
388
388
|
sous subscription enable tool-usage/automated-browser-tasks
|
|
389
389
|
```
|
|
390
390
|
|
|
391
|
-
Both edit `.sous/conf.d/510-subscriptions.jsonc` by key.
|
|
392
|
-
|
|
391
|
+
Both edit `.sous/conf.d/510-subscriptions.jsonc` by key. That file is committed, so once the change is
|
|
392
|
+
committed the subscription is switched off, or back on, for **everyone** using the project. `disable`
|
|
393
|
+
writes `"enabled": false`; `enable` removes it again, so the file goes back to what it held before.
|
|
394
|
+
|
|
395
|
+
### On one machine only
|
|
396
|
+
|
|
397
|
+
To switch one off only on some machines, write `enabled` in a `conf.d` file of your own that sorts
|
|
398
|
+
after 510, and keep that file out of git if it is for your machine alone; a later file wins over the
|
|
399
|
+
managed one:
|
|
393
400
|
|
|
394
401
|
```jsonc
|
|
395
402
|
// .sous/conf.d/610-mac.jsonc
|
|
@@ -442,7 +449,9 @@ rather than stopping the build, and the build prints a warning naming it before
|
|
|
442
449
|
A build holds the versions the lockfile pins and does not talk to the network on every run. Sous
|
|
443
450
|
asks a repository for a newer index only when it has never asked, when the freshness window has
|
|
444
451
|
lapsed (`store.freshnessSeconds`, five minutes by default), or when a command forces it; a failed
|
|
445
|
-
check never breaks a build, because the cached index is used instead.
|
|
452
|
+
check never breaks a build, because the cached index is used instead. When a recipe or a version
|
|
453
|
+
is missing from the cached index, sous asks upstream once more before reporting it, so a recipe
|
|
454
|
+
released moments ago is found straight away. Always-pull changes what
|
|
446
455
|
happens after that check, not how often it happens: a repository or subscription marked
|
|
447
456
|
`alwaysPull` takes a newer in-range version rather than the locked one; set it with
|
|
448
457
|
`--always-pull`, or on either entry in the config. Without it, `sous subscription update` is how a
|
|
@@ -478,7 +478,7 @@ old `.json` name is read as a fallback and migrates on the next write: the `.jso
|
|
|
478
478
|
|
|
479
479
|
No file is special to sous when it reads the config: a `conf.d` file of your own that sorts after 510 can
|
|
480
480
|
override a subscription the managed file lists, such as switching it off on one machine (see
|
|
481
|
-
[
|
|
481
|
+
[On one machine only](repositories-consuming.md#on-one-machine-only)).
|
|
482
482
|
|
|
483
483
|
## Where to go next
|
|
484
484
|
|
|
@@ -161,6 +161,13 @@ https://raw.githubusercontent.com/<owner>/<name>/HEAD/sous.index.json
|
|
|
161
161
|
https://<gitlab host>/api/v4/projects/<owner>%2F<name>/repository/files/sous.index.json/raw?ref=HEAD
|
|
162
162
|
```
|
|
163
163
|
|
|
164
|
+
GitHub's raw host can answer with a copy it cached for up to five minutes. When sous must see the
|
|
165
|
+
current index (a `--latest` read, or a recipe missing from its cached copy, which is how a recipe
|
|
166
|
+
released moments ago looks), it reads GitHub's contents API without a token instead
|
|
167
|
+
(`https://api.github.com/repos/<owner>/<name>/contents/sous.index.json`), and tries the raw host only
|
|
168
|
+
if nothing else answers. GitHub allows 60 such requests an hour from one address, so ordinary reads
|
|
169
|
+
never use it. GitLab's API always answers with the current file.
|
|
170
|
+
|
|
164
171
|
A token is looked for in these places, in this order, and a missing one is skipped:
|
|
165
172
|
|
|
166
173
|
1. the environment: `GITHUB_TOKEN` for GitHub, `GITLAB_TOKEN` for GitLab;
|
|
@@ -183,6 +190,7 @@ Error: could not read gitlab.com/acme/private-recipes.
|
|
|
183
190
|
Fix one of these:
|
|
184
191
|
export GITLAB_TOKEN=<a token with read_repository>
|
|
185
192
|
set up git access to gitlab.com (an SSH key, or a credential helper)
|
|
193
|
+
A token reads only the index. Recipe files are downloaded with git, so building also needs git access.
|
|
186
194
|
```
|
|
187
195
|
|
|
188
196
|
**A recipe's files** come from git itself: a shallow, blobless, sparse clone at the version's
|
|
@@ -9,11 +9,17 @@ lines under the first sentence of a failure, because that is where the remedy is
|
|
|
9
9
|
## A repository this project does not trust
|
|
10
10
|
|
|
11
11
|
```text
|
|
12
|
-
Error:
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
Error: None of this project's repositories publishes the recipe 'workflow/nope'.
|
|
13
|
+
Checked just now: qa-recipes, sous-recipes.
|
|
14
|
+
Check the spelling, or run 'sous repo search nope' to look for it. If a repository this project
|
|
15
|
+
has not added publishes it, add that one with 'sous repo add <url>'.
|
|
15
16
|
```
|
|
16
17
|
|
|
18
|
+
Before sous reports this, it reads every added repository's index upstream once, so a recipe
|
|
19
|
+
released moments ago is found rather than reported missing. A repository it could not reach just
|
|
20
|
+
then is listed under `Could not be checked just now`, and only the copy of its index that sous
|
|
21
|
+
already had was searched.
|
|
22
|
+
|
|
17
23
|
A browsing command given a qualified ref whose qualifier is unknown says `This project trusts no
|
|
18
24
|
repository called 'acme'`; a subscribe says `Sous does not know where the repository 'acme' lives,
|
|
19
25
|
so it cannot add it for you`, and prints the `sous repo add <url> --name acme` line to run. Either
|
|
@@ -341,10 +347,13 @@ Error: could not read gitlab.com/acme/private-recipes.
|
|
|
341
347
|
Fix one of these:
|
|
342
348
|
export GITLAB_TOKEN=<a token with read_repository>
|
|
343
349
|
set up git access to gitlab.com (an SSH key, or a credential helper)
|
|
350
|
+
A token reads only the index. Recipe files are downloaded with git, so building also needs git access.
|
|
344
351
|
```
|
|
345
352
|
|
|
346
|
-
Sous tried every way it has to read the repository, and each line says why that one failed. Any
|
|
347
|
-
|
|
353
|
+
Sous tried every way it has to read the repository's index, and each line says why that one failed. Any
|
|
354
|
+
one fix lets sous read the index. Recipe files are a different matter: sous downloads them with git alone,
|
|
355
|
+
so a build needs git access to the host (an SSH key, or a credential helper) even when a token is set. A
|
|
356
|
+
token in the environment only makes reading the index faster. `gh` and `glab` are not needed to read.
|
|
348
357
|
The order sous tries, and where it finds a token, are under
|
|
349
358
|
[Private repositories](repositories-providers.md#private-repositories).
|
|
350
359
|
|
|
@@ -205,7 +205,8 @@ plugin included, until the repository is trusted.
|
|
|
205
205
|
A subscription can be switched off on one machine and left on for everyone else, for example from
|
|
206
206
|
a `conf.d` file of your own. A switched-off subscription is not built: its outputs are pruned, its
|
|
207
207
|
variables are not asked, and its pins stay in the committed lockfile. `sous subscription disable <ref>`
|
|
208
|
-
and `sous subscription enable <ref>` switch one off and on
|
|
208
|
+
and `sous subscription enable <ref>` switch one off and on for everyone, because they edit the
|
|
209
|
+
committed `conf.d/510-subscriptions.jsonc`.
|
|
209
210
|
|
|
210
211
|
## The official repository, and the built-in core
|
|
211
212
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sous-io/sous",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"description": "Compiles AI coding agent configuration (CLAUDE.md, skills, memories) from LiquidJS templates",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -39,44 +39,44 @@
|
|
|
39
39
|
"sous.config.schema.json"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@sous-io/plugin-api": "1.0.
|
|
42
|
+
"@sous-io/plugin-api": "1.0.16"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"esbuild": "^0.27.4",
|
|
46
46
|
"jsonc-parser": "^3.3.1",
|
|
47
47
|
"yaml": "^2.9.0",
|
|
48
48
|
"zod": "^4.4.3",
|
|
49
|
-
"@sous-io/core": "1.0.
|
|
50
|
-
"@sous-io/
|
|
51
|
-
"@sous-io/plugin-build": "1.0.
|
|
52
|
-
"@sous-io/
|
|
53
|
-
"@sous-io/plugin-
|
|
54
|
-
"@sous-io/plugin-cli": "1.0.
|
|
55
|
-
"@sous-io/plugin-compiler": "1.0.
|
|
56
|
-
"@sous-io/plugin-
|
|
57
|
-
"@sous-io/plugin-formats": "1.0.
|
|
58
|
-
"@sous-io/plugin-expressions": "1.0.
|
|
59
|
-
"@sous-io/plugin-
|
|
60
|
-
"@sous-io/plugin-git": "1.0.
|
|
61
|
-
"@sous-io/plugin-
|
|
62
|
-
"@sous-io/plugin-harnesses": "1.0.
|
|
63
|
-
"@sous-io/plugin-
|
|
64
|
-
"@sous-io/plugin-host": "1.0.
|
|
65
|
-
"@sous-io/plugin-inspect": "1.0.
|
|
66
|
-
"@sous-io/plugin-
|
|
67
|
-
"@sous-io/plugin-
|
|
68
|
-
"@sous-io/plugin-
|
|
69
|
-
"@sous-io/plugin-mcp": "1.0.
|
|
70
|
-
"@sous-io/plugin-memories": "1.0.
|
|
71
|
-
"@sous-io/plugin-
|
|
72
|
-
"@sous-io/plugin-recipe-answers": "1.0.
|
|
73
|
-
"@sous-io/plugin-
|
|
74
|
-
"@sous-io/plugin-recipes": "1.0.
|
|
75
|
-
"@sous-io/plugin-
|
|
76
|
-
"@sous-io/plugin-
|
|
77
|
-
"@sous-io/plugin-
|
|
78
|
-
"@sous-io/plugin-
|
|
79
|
-
"@sous-io/plugin-yarn": "1.0.
|
|
49
|
+
"@sous-io/core": "1.0.16",
|
|
50
|
+
"@sous-io/plugin-authoring": "1.0.16",
|
|
51
|
+
"@sous-io/plugin-build": "1.0.16",
|
|
52
|
+
"@sous-io/documents": "1.0.16",
|
|
53
|
+
"@sous-io/plugin-claude-code": "1.0.16",
|
|
54
|
+
"@sous-io/plugin-cli": "1.0.16",
|
|
55
|
+
"@sous-io/plugin-compiler": "1.0.16",
|
|
56
|
+
"@sous-io/plugin-confd": "1.0.16",
|
|
57
|
+
"@sous-io/plugin-formats": "1.0.16",
|
|
58
|
+
"@sous-io/plugin-expressions": "1.0.16",
|
|
59
|
+
"@sous-io/plugin-config-files": "1.0.16",
|
|
60
|
+
"@sous-io/plugin-git": "1.0.16",
|
|
61
|
+
"@sous-io/plugin-gitlab": "1.0.16",
|
|
62
|
+
"@sous-io/plugin-harnesses": "1.0.16",
|
|
63
|
+
"@sous-io/plugin-github": "1.0.16",
|
|
64
|
+
"@sous-io/plugin-host": "1.0.16",
|
|
65
|
+
"@sous-io/plugin-inspect": "1.0.16",
|
|
66
|
+
"@sous-io/plugin-liquid": "1.0.16",
|
|
67
|
+
"@sous-io/plugin-init": "1.0.16",
|
|
68
|
+
"@sous-io/plugin-local": "1.0.16",
|
|
69
|
+
"@sous-io/plugin-mcp": "1.0.16",
|
|
70
|
+
"@sous-io/plugin-memories": "1.0.16",
|
|
71
|
+
"@sous-io/plugin-npm": "1.0.16",
|
|
72
|
+
"@sous-io/plugin-recipe-answers": "1.0.16",
|
|
73
|
+
"@sous-io/plugin-pnpm": "1.0.16",
|
|
74
|
+
"@sous-io/plugin-recipes": "1.0.16",
|
|
75
|
+
"@sous-io/plugin-refs": "1.0.16",
|
|
76
|
+
"@sous-io/plugin-skills": "1.0.16",
|
|
77
|
+
"@sous-io/plugin-update": "1.0.16",
|
|
78
|
+
"@sous-io/plugin-variables": "1.0.16",
|
|
79
|
+
"@sous-io/plugin-yarn": "1.0.16"
|
|
80
80
|
},
|
|
81
81
|
"engines": {
|
|
82
82
|
"node": ">=22"
|