@pennixrv/trellis 0.6.17 → 0.6.19
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/commands/channel/adapters/codex.d.ts +14 -0
- package/dist/commands/channel/adapters/codex.d.ts.map +1 -1
- package/dist/commands/channel/adapters/codex.js +37 -0
- package/dist/commands/channel/adapters/codex.js.map +1 -1
- package/dist/commands/channel/adapters/index.d.ts.map +1 -1
- package/dist/commands/channel/adapters/index.js +49 -13
- package/dist/commands/channel/adapters/index.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +7 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/claude.d.ts +17 -0
- package/dist/configurators/claude.d.ts.map +1 -1
- package/dist/configurators/claude.js +61 -2
- package/dist/configurators/claude.js.map +1 -1
- package/dist/migrations/manifests/0.6.18.json +9 -0
- package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +2 -0
- package/dist/templates/common/bundled-skills/trellis-channel/references/subnode-work.md +143 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +33 -0
- package/dist/templates/shared-hooks/inject-workflow-state.py +17 -16
- package/dist/templates/trellis/agents/subnode.md +63 -0
- package/dist/templates/trellis/config.yaml +9 -9
- package/dist/templates/trellis/index.d.ts +3 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +6 -0
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/common/config.py +5 -4
- package/dist/templates/trellis/scripts/common/task_store.py +3 -3
- package/dist/templates/trellis/scripts/common/workflow_phase.py +1 -1
- package/dist/templates/trellis/scripts/subnode_artifact.py +463 -0
- package/dist/templates/trellis/scripts/workspace_note.py +126 -0
- package/dist/templates/trellis/workflow.md +5 -5
- package/dist/utils/manifest-prune.d.ts.map +1 -1
- package/dist/utils/manifest-prune.js +11 -2
- package/dist/utils/manifest-prune.js.map +1 -1
- package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
- package/dist/utils/uninstall-scrubbers.js +3 -3
- package/dist/utils/uninstall-scrubbers.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Bounded Subnode Work
|
|
2
|
+
|
|
3
|
+
Use a `subnode` only when the user explicitly needs independently reviewable
|
|
4
|
+
evidence for a bounded analysis, design, audit, review, counterargument, or
|
|
5
|
+
verification question. It is not the normal path for an ordinary static review,
|
|
6
|
+
implementation, memory retrieval, or routine tool call.
|
|
7
|
+
|
|
8
|
+
The coordinator owns task facts, protected targets, acceptance, Git, worker
|
|
9
|
+
lifecycle, and the final result. A subnode owns one evidence report and its own
|
|
10
|
+
append-only worklog. This is a behavioral contract; do not add `--sandbox` or
|
|
11
|
+
claim that path restrictions enforce it.
|
|
12
|
+
|
|
13
|
+
## Artifact Setup
|
|
14
|
+
|
|
15
|
+
Before spawning, the coordinator must use an active task (`planning` or
|
|
16
|
+
`in_progress`), define one stable `work_id` and
|
|
17
|
+
`subnode_id`, then prepare a brief-draft JSON with the question, independence
|
|
18
|
+
reason, scope, protected targets, lens, evidence method, source snapshot,
|
|
19
|
+
dependencies, stop conditions, deadline, `channel_ref`, `retry_of: null`, and
|
|
20
|
+
`counter_of` (null unless this is intentional counterwork). The helper supplies
|
|
21
|
+
the immutable task identity and report path.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
TASK=.trellis/tasks/09-07-example
|
|
25
|
+
WORK_ID=security-audit
|
|
26
|
+
SUBNODE_ID=dependency-evidence
|
|
27
|
+
|
|
28
|
+
python3 .trellis/scripts/subnode_artifact.py init \
|
|
29
|
+
--task "$TASK" \
|
|
30
|
+
--work-id "$WORK_ID" \
|
|
31
|
+
--subnode-id "$SUBNODE_ID" \
|
|
32
|
+
--draft /tmp/subnode-brief.json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
This creates exactly:
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
$TASK/subnodes/$WORK_ID/$SUBNODE_ID/
|
|
39
|
+
brief.json # coordinator-owned and immutable after dispatch
|
|
40
|
+
worklog.md # subnode appends material progress and corrections
|
|
41
|
+
report.json # subnode-owned final pending-review result
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Do not use a terminal Channel message as the report transport. The short final
|
|
45
|
+
message names the already-written `report.json` and its status; the durable
|
|
46
|
+
JSON file carries the reviewable result.
|
|
47
|
+
|
|
48
|
+
The subnode copies identity, scope, and lens from `brief.json`, then uses the
|
|
49
|
+
SHA-256 digest of the exact `brief.json` bytes. The minimal complete report is:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"schema_version": 1,
|
|
54
|
+
"task_id": "task-id-from-brief",
|
|
55
|
+
"work_id": "work-id-from-brief",
|
|
56
|
+
"subnode_id": "subnode-id-from-brief",
|
|
57
|
+
"role_id": "subnode",
|
|
58
|
+
"brief_digest": "sha256-of-brief-json-bytes",
|
|
59
|
+
"status": "complete",
|
|
60
|
+
"scope": ["exact scope copied from brief"],
|
|
61
|
+
"lens": "exact lens copied from brief",
|
|
62
|
+
"evidence": [
|
|
63
|
+
{
|
|
64
|
+
"id": "stable-evidence-id",
|
|
65
|
+
"locator": "source path, URL, or command receipt",
|
|
66
|
+
"summary": "What this independently reviewable evidence establishes."
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"findings": ["Bounded conclusion."],
|
|
70
|
+
"uncertainties": [],
|
|
71
|
+
"corrections": []
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
For `blocked`, `incomplete`, or `error`, include the same base fields plus a
|
|
76
|
+
non-empty `completed_scope` list and a non-empty `blocker` string. Never use
|
|
77
|
+
`accepted`, `rejected`, or `deferred` as a report status.
|
|
78
|
+
|
|
79
|
+
## Dispatch And Wait
|
|
80
|
+
|
|
81
|
+
Inspect the installed role first, then use one native Channel lifecycle:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
trellis channel create subnode-example --by main --cwd "$PWD"
|
|
85
|
+
trellis channel spawn subnode-example --agent subnode --provider codex \
|
|
86
|
+
--as "$SUBNODE_ID" --cwd "$PWD" --timeout 30m
|
|
87
|
+
|
|
88
|
+
printf '%s\n' "Read $TASK/subnodes/$WORK_ID/$SUBNODE_ID/brief.json and perform only that bounded work." \
|
|
89
|
+
| trellis channel send subnode-example --as main --to "$SUBNODE_ID" \
|
|
90
|
+
--stdin --delivery-mode requireRunningWorker
|
|
91
|
+
|
|
92
|
+
trellis channel wait subnode-example --as main --from "$SUBNODE_ID" \
|
|
93
|
+
--kind done,error --timeout 30m
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Where the host exposes a live wait continuation, establish one waiter and
|
|
97
|
+
continue that same waiter until terminal state. Do not poll messages, create a
|
|
98
|
+
second waiter, or treat an empty transport slice as completion. The normal CLI
|
|
99
|
+
surface uses the documented single `send` followed by native `wait` pattern.
|
|
100
|
+
|
|
101
|
+
## Coordinator Review
|
|
102
|
+
|
|
103
|
+
After a terminal message, independently validate and then record a task-level
|
|
104
|
+
disposition. `complete` means only that the subnode claims it completed its
|
|
105
|
+
assigned work; it is not acceptance.
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
REPORT="$TASK/subnodes/$WORK_ID/$SUBNODE_ID/report.json"
|
|
109
|
+
python3 .trellis/scripts/subnode_artifact.py validate --report "$REPORT"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The coordinator must re-check enough source evidence and protected-target state
|
|
113
|
+
to decide `accepted`, `rejected`, or `deferred`, preserving the reason and named
|
|
114
|
+
checks such as `report_validation`, `source_recheck`, and
|
|
115
|
+
`protected_target_check` in task research or a decision record. The validator
|
|
116
|
+
does not make that decision and does not modify `task.json`.
|
|
117
|
+
|
|
118
|
+
Use the separate coordinator work-record helper only for a durable cross-task
|
|
119
|
+
observation, decision, open question, or blocker. It does not substitute for a
|
|
120
|
+
task artifact or subnode worklog.
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
python3 .trellis/scripts/workspace_note.py \
|
|
124
|
+
--kind decision \
|
|
125
|
+
--summary "Accepted independent dependency evidence for the release gate." \
|
|
126
|
+
--source "$REPORT"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Counterwork
|
|
130
|
+
|
|
131
|
+
Counterwork is a new, independently scoped subnode, not a retry. It must use a
|
|
132
|
+
different `subnode_id`, lens, and evidence identities, and its brief sets
|
|
133
|
+
`counter_of` to the primary subnode ID. After both reports are complete:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
python3 .trellis/scripts/subnode_artifact.py validate-counter \
|
|
137
|
+
--primary "$TASK/subnodes/$WORK_ID/primary" \
|
|
138
|
+
--counter "$TASK/subnodes/$WORK_ID/counter"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The coordinator compares the two reports and retains the comparison as part of
|
|
142
|
+
its own disposition. No scheduler, polling loop, automatic retry, worktree,
|
|
143
|
+
global ledger, or provider-specific transport is introduced by this workflow.
|
|
@@ -16,7 +16,7 @@ A bundled skill is a directory under `packages/cli/src/templates/common/bundled-
|
|
|
16
16
|
|
|
17
17
|
The Trellis CLI never touches anything that is not produced by one of its own template loaders. Anything a user drops into a platform skill root by hand is left alone.
|
|
18
18
|
|
|
19
|
-
## Current Bundled Skills
|
|
19
|
+
## Current Bundled Skills
|
|
20
20
|
|
|
21
21
|
The set is discovered at runtime by listing directories under `templates/common/bundled-skills/`:
|
|
22
22
|
|
|
@@ -10,6 +10,7 @@ This page only describes files that are visible and editable inside the user pro
|
|
|
10
10
|
.trellis/
|
|
11
11
|
├── workflow.md
|
|
12
12
|
├── config.yaml
|
|
13
|
+
├── .gitignore
|
|
13
14
|
├── .developer
|
|
14
15
|
├── .version
|
|
15
16
|
├── .template-hashes.json
|
|
@@ -24,6 +25,7 @@ This page only describes files that are visible and editable inside the user pro
|
|
|
24
25
|
| --- | --- | --- |
|
|
25
26
|
| `.trellis/workflow.md` | Yes | Local workflow documentation and AI routing rules. |
|
|
26
27
|
| `.trellis/config.yaml` | Yes | Project configuration, hooks, packages, journal line limits, and related settings. |
|
|
28
|
+
| `.trellis/.gitignore` | No | Generated ignore rules for local Trellis state. Track it, but do not normally edit it. |
|
|
27
29
|
| `.trellis/spec/` | Yes | Project specs, intended to be updated regularly by users and AI. |
|
|
28
30
|
| `.trellis/tasks/` | Yes | Task material and research artifacts, maintained by the task workflow. |
|
|
29
31
|
| `.trellis/workspace/` | Yes | Session records, usually written by `add_session.py`. |
|
|
@@ -33,6 +35,37 @@ This page only describes files that are visible and editable inside the user pro
|
|
|
33
35
|
| `.trellis/.version` | No | Trellis version record used by update/migration logic. |
|
|
34
36
|
| `.trellis/.template-hashes.json` | No | Template hash record. Do not hand-write business rules here. |
|
|
35
37
|
|
|
38
|
+
## Git Tracking
|
|
39
|
+
|
|
40
|
+
`trellis init` and `trellis update` are the single project-asset generation
|
|
41
|
+
path. Do not add a second project initializer for Trellis files or platform
|
|
42
|
+
integration files: use those commands to create or refresh the generated
|
|
43
|
+
assets, then review and commit the resulting project changes normally.
|
|
44
|
+
|
|
45
|
+
For a Git-tracked project, commit the durable project contract:
|
|
46
|
+
|
|
47
|
+
- `.trellis/workflow.md`, `config.yaml`, `scripts/`, `spec/`, `tasks/`, and
|
|
48
|
+
`workspace/`;
|
|
49
|
+
- `.trellis/.version` and `.trellis/.template-hashes.json`. They are generated
|
|
50
|
+
metadata, not hand-edited configuration; keeping them lets another clone
|
|
51
|
+
distinguish Trellis-owned templates from local changes safely;
|
|
52
|
+
- the Trellis-managed files in selected platform directories, plus the
|
|
53
|
+
root-level `AGENTS.md` managed block when Trellis created it.
|
|
54
|
+
|
|
55
|
+
Do not commit local or ephemeral state. The generated `.trellis/.gitignore`
|
|
56
|
+
already excludes `.developer`, `.current-task`, `.runtime/`, `.ralph-state.json`,
|
|
57
|
+
agent runtime files, atomic-update files, backups, and Python caches. Platform
|
|
58
|
+
session history, caches, logs, and credentials are platform-owned rather than
|
|
59
|
+
Trellis templates; apply the platform's own ignore rules or the repository's
|
|
60
|
+
security policy to them. If workspace journals contain data that the project
|
|
61
|
+
policy forbids in Git, add a project-specific ignore rule rather than changing
|
|
62
|
+
the shared Trellis template for every project.
|
|
63
|
+
|
|
64
|
+
Generated does not mean disposable: `workflow.md`, specs, tasks, journals, and
|
|
65
|
+
the template-hash receipt are ordinary project artifacts. Conversely, Trellis
|
|
66
|
+
does not infer or broadly ignore all platform directories because doing so
|
|
67
|
+
would hide user-owned files that it must preserve.
|
|
68
|
+
|
|
36
69
|
## Platform Directories
|
|
37
70
|
|
|
38
71
|
Different platforms generate different directories. Common categories:
|
|
@@ -286,13 +286,14 @@ def prompt_has_skip_keyword(prompt: str, keyword: str) -> bool:
|
|
|
286
286
|
def _resolve_codex_dispatch_mode(config: dict) -> str:
|
|
287
287
|
"""Normalize `codex.dispatch_mode` from .trellis/config.yaml to "auto" or "inline".
|
|
288
288
|
|
|
289
|
-
Defaults to `
|
|
290
|
-
|
|
289
|
+
Defaults to `inline`. `auto` explicitly enables native dispatch; the
|
|
290
|
+
legacy `sub-agent` value is an alias for `auto`. Any other explicit value
|
|
291
|
+
(including invalid ones) falls back to `inline`
|
|
291
292
|
without per-turn warnings. Shared by `_codex_mode_banner` (the per-turn
|
|
292
293
|
banner) and `resolve_breadcrumb_key` (the breadcrumb tag key) so the two
|
|
293
294
|
stay in lockstep.
|
|
294
295
|
"""
|
|
295
|
-
mode = "
|
|
296
|
+
mode = "inline"
|
|
296
297
|
if isinstance(config, dict):
|
|
297
298
|
codex_cfg = config.get("codex")
|
|
298
299
|
if isinstance(codex_cfg, dict):
|
|
@@ -310,16 +311,16 @@ def _codex_mode_banner(config: dict) -> str:
|
|
|
310
311
|
"""Emit a `<codex-mode>` banner for the additionalContext payload.
|
|
311
312
|
|
|
312
313
|
Reads `codex.dispatch_mode` from .trellis/config.yaml; defaults to
|
|
313
|
-
`
|
|
314
|
+
`inline`, so the main session implements and checks directly. `auto`
|
|
315
|
+
explicitly dispatches Trellis sub-agents using native Codex context
|
|
314
316
|
injection with a child-side fallback. This does not rely on inherited
|
|
315
317
|
parent transcripts: `fork_turns` remains caller-controlled, and
|
|
316
318
|
fresh-history sub-agents still receive their explicit delegated task and
|
|
317
|
-
inherited session configuration. `
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
workflow-state tells AI what step it's at.
|
|
319
|
+
inherited session configuration. The legacy `sub-agent` value is an alias
|
|
320
|
+
for `auto`. Invalid explicit values fall back to `inline` without per-turn
|
|
321
|
+
warnings. The banner makes the active mode explicit to Codex AI per turn,
|
|
322
|
+
complementing the workflow-state body which is per-status. Mode tells AI
|
|
323
|
+
which dispatch protocol to follow; workflow-state tells AI what step it's at.
|
|
323
324
|
"""
|
|
324
325
|
mode = _resolve_codex_dispatch_mode(config)
|
|
325
326
|
if mode == "auto":
|
|
@@ -341,12 +342,12 @@ def resolve_breadcrumb_key(
|
|
|
341
342
|
) -> str:
|
|
342
343
|
"""Pick the breadcrumb tag key based on Codex dispatch_mode.
|
|
343
344
|
|
|
344
|
-
Codex defaults to ``
|
|
345
|
-
breadcrumb for
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
``auto``. Invalid explicit values fall back to inline without
|
|
349
|
-
warnings.
|
|
345
|
+
Codex defaults to ``inline`` and therefore uses the parallel
|
|
346
|
+
``<status>-inline`` breadcrumb for main-session execution. Explicit
|
|
347
|
+
``auto`` uses the ordinary ``<status>`` breadcrumb for native
|
|
348
|
+
SubagentStart dispatch with child-side fallback; ``sub-agent`` remains an
|
|
349
|
+
alias for ``auto``. Invalid explicit values fall back to inline without
|
|
350
|
+
per-turn warnings.
|
|
350
351
|
|
|
351
352
|
Non-codex platforms return the plain status unchanged.
|
|
352
353
|
"""
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: subnode
|
|
3
|
+
description: |
|
|
4
|
+
Bounded independent-evidence worker. It preserves its assigned task artifacts,
|
|
5
|
+
never changes protected target files, and leaves acceptance to the coordinator.
|
|
6
|
+
provider: codex
|
|
7
|
+
labels: [trellis, subnode]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Subnode (channel runtime)
|
|
11
|
+
|
|
12
|
+
You are a bounded Trellis subnode spawned through `trellis channel`. Your job is
|
|
13
|
+
to produce independently reviewable evidence for one assigned question. You are
|
|
14
|
+
not an implementation worker, task owner, reviewer-of-record, or Git operator.
|
|
15
|
+
|
|
16
|
+
## Required Context
|
|
17
|
+
|
|
18
|
+
Before starting, read the `brief.json` path named in the coordinator message.
|
|
19
|
+
It fixes your task identity, scope, protected targets, evidence method, source
|
|
20
|
+
snapshot, deadline, stop conditions, channel handle, and final `report_path`.
|
|
21
|
+
Read the necessary current project and external sources needed to answer that
|
|
22
|
+
brief. A source snapshot records evidence; it is not a filesystem allowlist.
|
|
23
|
+
|
|
24
|
+
## Ownership And Write Boundary
|
|
25
|
+
|
|
26
|
+
You may write only within the artifact directory named by the brief:
|
|
27
|
+
|
|
28
|
+
- `worklog.md` — append substantive observations, corrections, blockers, and
|
|
29
|
+
completion notes as they occur.
|
|
30
|
+
- `report.json` — write your one final pending-review report at the exact path
|
|
31
|
+
in `brief.json`.
|
|
32
|
+
|
|
33
|
+
Do not modify `brief.json`. Do not edit any protected target, business source,
|
|
34
|
+
test, task artifact, project rule, coordinator workspace note, or unrelated
|
|
35
|
+
file. Do not run Git commands that change state (`commit`, `push`, `merge`,
|
|
36
|
+
`rebase`, `reset`, `checkout`, `stash`, or branch/worktree operations). Do not
|
|
37
|
+
spawn or control another worker. These are behavioral requirements, not a
|
|
38
|
+
sandbox claim.
|
|
39
|
+
|
|
40
|
+
## Work Method
|
|
41
|
+
|
|
42
|
+
1. Confirm the brief identity and artifact paths before doing substantive work.
|
|
43
|
+
2. Inspect evidence using the stated lens and method. Keep the assigned scope
|
|
44
|
+
narrow; stop when a stop condition is met or the evidence is sufficient.
|
|
45
|
+
3. Append a concise worklog entry when you make a material discovery, retract a
|
|
46
|
+
conclusion, encounter a blocker, or finish. Preserve corrections rather
|
|
47
|
+
than silently rewriting the historical trail.
|
|
48
|
+
4. Write `report.json` only when you are ready to stop. Its status is one of
|
|
49
|
+
`complete`, `blocked`, `incomplete`, or `error`; it is always
|
|
50
|
+
**pending coordinator review**, never accepted/rejected/deferred.
|
|
51
|
+
5. A complete report includes independently checkable evidence. A non-complete
|
|
52
|
+
report explains completed scope and the blocker or error. Include the exact
|
|
53
|
+
identity, scope, lens, and SHA-256 digest of `brief.json` required by the
|
|
54
|
+
artifact helper.
|
|
55
|
+
6. Send one short terminal Channel message with the status and report path.
|
|
56
|
+
Do not place the report JSON in Channel text.
|
|
57
|
+
|
|
58
|
+
## Report Boundary
|
|
59
|
+
|
|
60
|
+
The coordinator independently runs the artifact validator and then records the
|
|
61
|
+
task disposition (`accepted`, `rejected`, or `deferred`) with its own source and
|
|
62
|
+
protected-target checks. Do not claim that a report has been accepted, and do
|
|
63
|
+
not infer a disposition from a successful Channel delivery.
|
|
@@ -110,14 +110,14 @@ channel:
|
|
|
110
110
|
#-------------------------------------------------------------------------------
|
|
111
111
|
# Codex (dispatch behavior)
|
|
112
112
|
#-------------------------------------------------------------------------------
|
|
113
|
-
# Codex-only knob; other platforms ignore it.
|
|
114
|
-
#
|
|
115
|
-
#
|
|
116
|
-
#
|
|
117
|
-
#
|
|
118
|
-
#
|
|
119
|
-
#
|
|
120
|
-
# Invalid explicit values safely use inline mode.
|
|
113
|
+
# Codex-only knob; other platforms ignore it. The default is "inline": the
|
|
114
|
+
# main session performs implementation and checks directly. Set "auto" only
|
|
115
|
+
# to opt in to trellis-implement / trellis-check / trellis-research native
|
|
116
|
+
# sub-agents. Their task context does not rely on inherited parent transcripts:
|
|
117
|
+
# `fork_turns` remains caller-controlled, while Codex's native SubagentStart
|
|
118
|
+
# hook injects context when trusted and child-side loading remains the fallback
|
|
119
|
+
# when it is unavailable. "sub-agent" remains a backwards-compatible alias
|
|
120
|
+
# for "auto". Invalid explicit values safely use inline mode.
|
|
121
121
|
#
|
|
122
122
|
# In "auto" mode, dispatched sub-agents inherit the main session's model
|
|
123
123
|
# unless you pin one. To use a cheaper/faster model for implement/check/
|
|
@@ -127,7 +127,7 @@ channel:
|
|
|
127
127
|
# `trellis update` preserves your edits across regeneration.
|
|
128
128
|
#
|
|
129
129
|
# codex:
|
|
130
|
-
# dispatch_mode: auto #
|
|
130
|
+
# dispatch_mode: auto # opt in to native sub-agents; default: "inline"; legacy alias: "sub-agent"
|
|
131
131
|
|
|
132
132
|
#-------------------------------------------------------------------------------
|
|
133
133
|
# Sub-agent context injection limits
|
|
@@ -45,12 +45,15 @@ export declare const initDeveloperScript: string;
|
|
|
45
45
|
export declare const taskScript: string;
|
|
46
46
|
export declare const getContextScript: string;
|
|
47
47
|
export declare const addSessionScript: string;
|
|
48
|
+
export declare const subnodeArtifactScript: string;
|
|
49
|
+
export declare const workspaceNoteScript: string;
|
|
48
50
|
export declare const workflowMdTemplate: string;
|
|
49
51
|
export declare const configYamlTemplate: string;
|
|
50
52
|
export declare const gitignoreTemplate: string;
|
|
51
53
|
export declare const gitattributesTemplate: string;
|
|
52
54
|
export declare const implementAgentTemplate: string;
|
|
53
55
|
export declare const checkAgentTemplate: string;
|
|
56
|
+
export declare const subnodeAgentTemplate: string;
|
|
54
57
|
/**
|
|
55
58
|
* Get all script templates as a map of relative path to content
|
|
56
59
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAG9E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAG9E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAG7E,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AAMvE,eAAO,MAAM,sBAAsB,QAAsC,CAAC;AAC1E,eAAO,MAAM,kBAAkB,QAAkC,CAAC;AAClE,eAAO,MAAM,oBAAoB,QAAoC,CAAC;AAEtE;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuCnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMlD"}
|
|
@@ -56,6 +56,8 @@ export const initDeveloperScript = readTemplate("scripts/init_developer.py");
|
|
|
56
56
|
export const taskScript = readTemplate("scripts/task.py");
|
|
57
57
|
export const getContextScript = readTemplate("scripts/get_context.py");
|
|
58
58
|
export const addSessionScript = readTemplate("scripts/add_session.py");
|
|
59
|
+
export const subnodeArtifactScript = readTemplate("scripts/subnode_artifact.py");
|
|
60
|
+
export const workspaceNoteScript = readTemplate("scripts/workspace_note.py");
|
|
59
61
|
// Configuration files
|
|
60
62
|
export const workflowMdTemplate = readTemplate("workflow.md");
|
|
61
63
|
export const configYamlTemplate = readTemplate("config.yaml");
|
|
@@ -67,6 +69,7 @@ export const gitattributesTemplate = readTemplate("gitattributes.txt");
|
|
|
67
69
|
// and refreshed by `trellis update`.
|
|
68
70
|
export const implementAgentTemplate = readTemplate("agents/implement.md");
|
|
69
71
|
export const checkAgentTemplate = readTemplate("agents/check.md");
|
|
72
|
+
export const subnodeAgentTemplate = readTemplate("agents/subnode.md");
|
|
70
73
|
/**
|
|
71
74
|
* Get all script templates as a map of relative path to content
|
|
72
75
|
*/
|
|
@@ -102,6 +105,8 @@ export function getAllScripts() {
|
|
|
102
105
|
scripts.set("task.py", taskScript);
|
|
103
106
|
scripts.set("get_context.py", getContextScript);
|
|
104
107
|
scripts.set("add_session.py", addSessionScript);
|
|
108
|
+
scripts.set("subnode_artifact.py", subnodeArtifactScript);
|
|
109
|
+
scripts.set("workspace_note.py", workspaceNoteScript);
|
|
105
110
|
return scripts;
|
|
106
111
|
}
|
|
107
112
|
/**
|
|
@@ -116,6 +121,7 @@ export function getAllAgents() {
|
|
|
116
121
|
const agents = new Map();
|
|
117
122
|
agents.set("implement.md", implementAgentTemplate);
|
|
118
123
|
agents.set("check.md", checkAgentTemplate);
|
|
124
|
+
agents.set("subnode.md", subnodeAgentTemplate);
|
|
119
125
|
return agents;
|
|
120
126
|
}
|
|
121
127
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ from .trellis_config import parse_simple_yaml
|
|
|
22
22
|
DEFAULT_SESSION_COMMIT_MESSAGE = "chore: record journal"
|
|
23
23
|
DEFAULT_MAX_JOURNAL_LINES = 2000
|
|
24
24
|
DEFAULT_SESSION_AUTO_COMMIT = True
|
|
25
|
-
DEFAULT_CODEX_DISPATCH_MODE = "
|
|
25
|
+
DEFAULT_CODEX_DISPATCH_MODE = "inline"
|
|
26
26
|
|
|
27
27
|
CONFIG_FILE = "config.yaml"
|
|
28
28
|
|
|
@@ -140,9 +140,10 @@ def get_session_auto_commit(repo_root: Path | None = None) -> bool:
|
|
|
140
140
|
def get_codex_dispatch_mode(repo_root: Path | None = None) -> str:
|
|
141
141
|
"""Return Codex dispatch mode.
|
|
142
142
|
|
|
143
|
-
Default is ``
|
|
144
|
-
|
|
145
|
-
|
|
143
|
+
Default is ``inline``: the main session carries out implementation and
|
|
144
|
+
verification directly. ``auto`` explicitly enables Trellis sub-agents and
|
|
145
|
+
native context injection with a child-side fallback. ``sub-agent`` remains
|
|
146
|
+
a backwards-compatible alias for ``auto``.
|
|
146
147
|
|
|
147
148
|
Invalid explicit configuration falls back to ``inline`` rather than
|
|
148
149
|
unexpectedly dispatching a sub-agent. This CLI-facing parser is the only
|
|
@@ -230,9 +230,9 @@ def _has_subagent_platform(repo_root: Path) -> bool:
|
|
|
230
230
|
"""Return True if any sub-agent-capable platform is configured.
|
|
231
231
|
|
|
232
232
|
Detected by probing well-known config directories at the repo root. Codex
|
|
233
|
-
counts
|
|
234
|
-
legacy ``sub-agent`` alias);
|
|
235
|
-
skills, not JSONL.
|
|
233
|
+
counts only when ``codex.dispatch_mode: auto`` is explicitly selected
|
|
234
|
+
(including the legacy ``sub-agent`` alias); the default inline mode loads
|
|
235
|
+
context through skills, not JSONL.
|
|
236
236
|
"""
|
|
237
237
|
for config_dir in _SUBAGENT_CONFIG_DIRS:
|
|
238
238
|
if (repo_root / config_dir).is_dir():
|
|
@@ -181,7 +181,7 @@ def resolve_effective_platform(platform: str, config: dict) -> str:
|
|
|
181
181
|
if label:
|
|
182
182
|
return label
|
|
183
183
|
if platform == "codex":
|
|
184
|
-
mode = "
|
|
184
|
+
mode = "inline"
|
|
185
185
|
codex_cfg = config.get("codex") if isinstance(config, dict) else None
|
|
186
186
|
if codex_cfg is not None:
|
|
187
187
|
if not isinstance(codex_cfg, dict):
|