axstack 0.16.0 → 0.17.0
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/README.md +1 -1
- package/docs/installation.md +11 -6
- package/docs/workflows.md +4 -2
- package/package.json +1 -1
- package/profiles/presets/claude-only.json +9 -0
- package/profiles/presets/codex-only.json +9 -0
- package/profiles/presets/mixed.json +9 -0
- package/skills/axstack/references/lifecycle.md +11 -10
- package/skills/axstack/references/orca-runtime.md +4 -2
- package/skills/axstack/references/routing.md +1 -1
- package/skills/axstack-align/SKILL.md +9 -2
- package/skills/axstack-research/SKILL.md +1 -0
- package/skills/axstack-review/SKILL.md +10 -6
- package/skills/axstack-watch/SKILL.md +7 -3
- package/src/roles.js +4 -3
package/README.md
CHANGED
|
@@ -77,7 +77,7 @@ targets are reported without normal-path adoption. Install exits nonzero when
|
|
|
77
77
|
an instruction conflict is preserved, while clean and idempotent installs exit
|
|
78
78
|
successfully.
|
|
79
79
|
|
|
80
|
-
The public bundle preserves three canonical
|
|
80
|
+
The public bundle preserves three canonical 24-role inputs:
|
|
81
81
|
[mixed](profiles/presets/mixed.json),
|
|
82
82
|
[codex-only](profiles/presets/codex-only.json), and
|
|
83
83
|
[claude-only](profiles/presets/claude-only.json). Each is exactly
|
package/docs/installation.md
CHANGED
|
@@ -51,7 +51,7 @@ profiles/presets/codex-only.json
|
|
|
51
51
|
profiles/presets/claude-only.json
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
Each has exactly `{ "version": 1, "roles": [...] }` with the same
|
|
54
|
+
Each has exactly `{ "version": 1, "roles": [...] }` with the same 24 stable
|
|
55
55
|
role IDs. Installation writes `<skills-dir>/axstack/roles.json` as
|
|
56
56
|
`{ "version": 1, "preset": "<selected preset>", "roles": [...] }` and records
|
|
57
57
|
its ownership hash like every other installed skill asset. There is no second
|
|
@@ -118,9 +118,10 @@ The complete bundle is validated before writes:
|
|
|
118
118
|
- each preset is a real JSON file with version 1, a non-empty `roles` array,
|
|
119
119
|
the filename's selected identity supplied by the caller, and the same role-ID
|
|
120
120
|
set as its peers;
|
|
121
|
-
- every role has valid preserved fields, while the mixed checker and
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
- every role has valid preserved fields, while the mixed checker and the mixed
|
|
122
|
+
`axstack-research-x` launch-by-agent-id route explicitly permit `model: null`;
|
|
123
|
+
in each single-provider preset, the unavailable adviser and its matching arena
|
|
124
|
+
judge seat explicitly permit `model: null`, as does `axstack-research-x`;
|
|
124
125
|
- obsolete runtime configuration flags fail before mutation with migration
|
|
125
126
|
guidance.
|
|
126
127
|
|
|
@@ -148,12 +149,16 @@ to rewrite them.
|
|
|
148
149
|
## Role behavior after installation
|
|
149
150
|
|
|
150
151
|
The runtime reads `roles.json` from the installed shared root `skills/axstack/`.
|
|
151
|
-
A new run records the selected preset plus all
|
|
152
|
+
A new run records the selected preset plus all 24 role rows. An active run keeps
|
|
152
153
|
that snapshot after a later preset install unless the user explicitly changes
|
|
153
154
|
it and accepts the resulting evidence invalidation.
|
|
154
155
|
|
|
155
156
|
The mixed checker has `model: null`; checker dispatch is held and never inherits
|
|
156
|
-
a provider default.
|
|
157
|
+
a provider default. Mixed `axstack-research-x` has `model: null` because Orca exposes
|
|
158
|
+
no `--model` override for `grok`; its explicit note authorizes launch by agent ID,
|
|
159
|
+
and the run record snapshots the model reported by the TUI. The single-provider
|
|
160
|
+
presets configure the checker and keep `axstack-research-x` as an intentional
|
|
161
|
+
absence. Their
|
|
157
162
|
unavailable adviser and its matching arena judge seat remain explicit
|
|
158
163
|
same-provider `model: null` roles, which do not make installation unready;
|
|
159
164
|
Align and Spec still hold until both Astra and Fable can return independent
|
package/docs/workflows.md
CHANGED
|
@@ -40,7 +40,7 @@ only affected work.
|
|
|
40
40
|
|
|
41
41
|
Installation requires one explicit canonical preset. The three bundle files
|
|
42
42
|
under `profiles/presets/` each contain exactly
|
|
43
|
-
`{ "version": 1, "roles": [...] }` and the same
|
|
43
|
+
`{ "version": 1, "roles": [...] }` and the same 24 stable IDs.
|
|
44
44
|
|
|
45
45
|
The current chat drives on whatever model runs it; no preset carries a driver
|
|
46
46
|
role.
|
|
@@ -64,7 +64,9 @@ The unavailable adviser in each single-provider preset stays explicitly
|
|
|
64
64
|
`model: null` within that provider's bounds. Installer readiness accepts that
|
|
65
65
|
intentional absence, but Align and Spec hold because both independent receipts
|
|
66
66
|
are required. The mixed checker also stays explicitly `model: null`; checker work holds instead of
|
|
67
|
-
launching a provider default.
|
|
67
|
+
launching a provider default. Launch-by-agent-id routes for which Orca exposes no
|
|
68
|
+
`--model` override (today: `grok`) record `model: null` with an explicit note and are
|
|
69
|
+
launchable; the run record snapshots the model the TUI reports. Missing or unavailable roles hold only affected
|
|
68
70
|
work. Model, effort, and permission values express requested intent until real
|
|
69
71
|
Orca receipts establish the effective session. Stored `modeId` is not permission
|
|
70
72
|
parity or a sandbox. No route is inferred from subscription, quota, harness,
|
package/package.json
CHANGED
|
@@ -91,6 +91,15 @@
|
|
|
91
91
|
"thinkingOptionId": "low",
|
|
92
92
|
"notes": "Research web reader: gathers primary-source facts efficiently. Validate configured availability at launch; hold affected work without fallback."
|
|
93
93
|
},
|
|
94
|
+
{
|
|
95
|
+
"id": "axstack-research-x",
|
|
96
|
+
"name": "Axstack research X (unavailable)",
|
|
97
|
+
"provider": "claude",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "bypassPermissions",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "Intentional single-provider absence: X/Twitter research via Grok is unavailable in claude-only. The explicit null holds this route without provider substitution."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-explainer",
|
|
96
105
|
"name": "Axstack explainer",
|
|
@@ -91,6 +91,15 @@
|
|
|
91
91
|
"thinkingOptionId": "low",
|
|
92
92
|
"notes": "Research web reader: gathers primary-source facts efficiently. Validate configured availability at launch; hold affected work without fallback."
|
|
93
93
|
},
|
|
94
|
+
{
|
|
95
|
+
"id": "axstack-research-x",
|
|
96
|
+
"name": "Axstack research X (unavailable)",
|
|
97
|
+
"provider": "codex",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "full-access",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "Intentional single-provider absence: X/Twitter research via Grok is unavailable in codex-only. The explicit null holds this route without provider substitution."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-explainer",
|
|
96
105
|
"name": "Axstack explainer",
|
|
@@ -91,6 +91,15 @@
|
|
|
91
91
|
"thinkingOptionId": "low",
|
|
92
92
|
"notes": "Research web reader: gathers primary-source facts efficiently. Validate configured availability at launch; hold affected work without fallback."
|
|
93
93
|
},
|
|
94
|
+
{
|
|
95
|
+
"id": "axstack-research-x",
|
|
96
|
+
"name": "Axstack research X",
|
|
97
|
+
"provider": "grok",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "full-access",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "X/Twitter-only research branch: Grok can read X; use for questions where posts, threads, announcements, or sentiment on X are answer-changing evidence. Cites post URLs and dates; never the sole source for a verified claim; report-only, no writes. Launch by agent id grok; model selected by the Grok TUI default."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-explainer",
|
|
96
105
|
"name": "Axstack explainer",
|
|
@@ -128,13 +128,14 @@ nothing without tested independent review.
|
|
|
128
128
|
|
|
129
129
|
## Close-out
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
131
|
+
PRs merge by forge state—not branch ancestry; close out: (1) settle every worker
|
|
132
|
+
terminal; (2) compact record with counts and denominators—user
|
|
133
|
+
interventions/deviations from plan/repairs; (3) `axstack-auditor`: settle
|
|
134
|
+
non-zero/requested, else `counts zero`; an unavailable auditor leaves close-out
|
|
135
|
+
pending, never skipped silently; (4) release merged run worktrees and branches;
|
|
136
|
+
close Linear tickets; (5) mark the [Run record](run-record.md) `Archived`.
|
|
137
|
+
`Archived`—one each:
|
|
138
|
+
settlement receipt; compact record path; auditor decision plus settlement
|
|
139
|
+
receipt or `counts zero`; release and ticket receipts; archive timestamp.
|
|
140
|
+
`active`/receipt-incomplete record: close-out pending, never done. One-step
|
|
141
|
+
lookups exempt.
|
|
@@ -26,11 +26,13 @@ Read `roles.json` from the installed shared root `skills/axstack/`. The installe
|
|
|
26
26
|
shape is `{ "version": 1, "preset": "<name>", "roles": [...] }`. Bundled
|
|
27
27
|
profiles are setup inputs shaped as
|
|
28
28
|
`{ "version": 1, "roles": [...] }`. A new run records the selected preset and
|
|
29
|
-
all
|
|
29
|
+
all 24 role rows once. An active run keeps the exact snapshot until the user
|
|
30
30
|
explicitly changes it.
|
|
31
31
|
|
|
32
32
|
Select the requested role by stable ID. A missing or null model holds only that role;
|
|
33
|
-
never launch a provider default.
|
|
33
|
+
never launch a provider default. Launch-by-agent-id routes for which Orca exposes no
|
|
34
|
+
`--model` override (today: `grok`) record `model: null` with an explicit note and are
|
|
35
|
+
launchable; the run record snapshots the model the TUI reports. Validate provider, model, and effort
|
|
34
36
|
against the guide and actual launch capability. Stored `modeId` and other
|
|
35
37
|
permission fields are conservative intent, not proof of effective permission
|
|
36
38
|
parity or a security boundary. Requested settings, input acceptance, effective
|
|
@@ -11,7 +11,7 @@ only with exactly one unambiguous preset; missing or contradictory sources are
|
|
|
11
11
|
a setup gap: hold. Never infer from live profiles or `list_profiles`, harness,
|
|
12
12
|
tools, credentials, quota, subscription, or default to `mixed`.
|
|
13
13
|
|
|
14
|
-
At run start, capture one **routing snapshot**: the complete map of all
|
|
14
|
+
At run start, capture one **routing snapshot**: the complete map of all 24 role
|
|
15
15
|
IDs with provider/model/mode/effort, absent or unconfigured roles recorded
|
|
16
16
|
explicitly, and no invented provider default. An absent or unconfigured role
|
|
17
17
|
holds only that role's work, not the run. A role installed or changed later
|
|
@@ -18,8 +18,15 @@ This preserves the required contracts -> lifecycle -> audit load edge.
|
|
|
18
18
|
|
|
19
19
|
1. **Research and map dependencies.** Inspect the available code, docs, and
|
|
20
20
|
tools before asking the user. Separate facts from preferences, name evidence
|
|
21
|
-
gaps, and map which decisions unlock others.
|
|
22
|
-
|
|
21
|
+
gaps, and map which decisions unlock others. When a fact needed for the
|
|
22
|
+
frontier is not derivable from the local repo or docs by ordinary reading,
|
|
23
|
+
dispatch `axstack-research` branches through Orca by source type:
|
|
24
|
+
requirements, code, web, and, once configured, X. Give one owner per branch,
|
|
25
|
+
use cross-harness routes where the roles allow, and require a cited note per
|
|
26
|
+
the research skill's source standards. The driver folds verified claims into
|
|
27
|
+
the frontier and records the receipts. Ordinary reading stays in-chat; a
|
|
28
|
+
single factual lookup never dispatches. Unresolved research blocks only its
|
|
29
|
+
dependent branch while safe fact work and independent branches continue.
|
|
23
30
|
2. **Prioritize the ready frontier.** Rank questions whose prerequisites are
|
|
24
31
|
settled by consequence, uncertainty, and the branches they unlock. Probe
|
|
25
32
|
vague terms, assumptions, success criteria, exclusions, failures, and edge
|
|
@@ -36,6 +36,7 @@ is part of research.
|
|
|
36
36
|
- `axstack-research-requirements`: requirements and intent.
|
|
37
37
|
- `axstack-research-code`: code behavior.
|
|
38
38
|
- `axstack-research-web`: web and external sources.
|
|
39
|
+
- `axstack-research-x`: X (Twitter) posts and threads via Grok — only when X evidence is answer-changing; cite post URLs and dates.
|
|
39
40
|
- `axstack-explore-codebase`: broad codebase mapping.
|
|
40
41
|
- `axstack-explore-execution`: execution and runtime traces.
|
|
41
42
|
|
|
@@ -39,7 +39,7 @@ head and current base, and writing authority are recorded.
|
|
|
39
39
|
|
|
40
40
|
Independently check the
|
|
41
41
|
[proportional scope identity](../axstack/references/routing.md#proportional-scope-identity)
|
|
42
|
-
before an approval or merge-ready declaration:
|
|
42
|
+
before an approval or [merge-ready declaration](#authored-mode-own-pr):
|
|
43
43
|
|
|
44
44
|
- Substantial new work: confirm the approved spec identity and matching ticket
|
|
45
45
|
map.
|
|
@@ -49,9 +49,12 @@ before an approval or merge-ready declaration:
|
|
|
49
49
|
author provenance. Never assume an imported own PR's author. That
|
|
50
50
|
snapshot is accepted without repeated approval.
|
|
51
51
|
|
|
52
|
-
The mode is ready when the applicable identity matches the candidate
|
|
53
|
-
material scope change remains unaccepted
|
|
54
|
-
|
|
52
|
+
The mode is ready when the applicable identity matches the candidate, no
|
|
53
|
+
material scope change remains unaccepted, and an independent review receipt
|
|
54
|
+
records `APPROVE` from the required non-author, non-owner reviewer at the exact
|
|
55
|
+
current head. Green CI, passing tests, or an older-head receipt leave readiness
|
|
56
|
+
`UNKNOWN`, never merge-ready. Readonly investigation may continue while an
|
|
57
|
+
identity gap holds declarations.
|
|
55
58
|
|
|
56
59
|
Resolve actual author provenance from authoring session receipts and candidate
|
|
57
60
|
history. The orchestrator model, provider, profile, or owner name is not author
|
|
@@ -244,7 +247,8 @@ Escalate to user: <yes | no> — <criterion> — <reason>
|
|
|
244
247
|
At any point, promptly raise credible serious security issues, possible
|
|
245
248
|
downtime or data loss, and major design concerns without waiting for every
|
|
246
249
|
mode-required reviewer. Present evidence, likely impact, options, and the user
|
|
247
|
-
decision needed. An urgent hold blocks approval,
|
|
250
|
+
decision needed. An urgent hold blocks approval,
|
|
251
|
+
[merge-ready declarations](#authored-mode-own-pr), and
|
|
248
252
|
dependent dangerous actions, but does not block safe investigation, unrelated
|
|
249
253
|
work, or reporting validated risk as `REQUEST_CHANGES`. Disagreement and
|
|
250
254
|
silence leave the hold open.
|
|
@@ -267,7 +271,7 @@ without waiting; `proceed` never overrides a validated blocking finding.
|
|
|
267
271
|
## Publishing rule
|
|
268
272
|
|
|
269
273
|
Mode-required exact-revision completeness gates external approval,
|
|
270
|
-
merge-ready declarations, and authorized submission. It never gates returning
|
|
274
|
+
[merge-ready declarations](#authored-mode-own-pr), and authorized submission. It never gates returning
|
|
271
275
|
evidence, limitations, validated risk, or an internal `INCOMPLETE` report.
|
|
272
276
|
|
|
273
277
|
- Peer mode requires both current reviews and no unresolved material finding
|
|
@@ -6,7 +6,8 @@ description: When babysitting an existing PR, use axstack-watch to monitor or ma
|
|
|
6
6
|
# Watch
|
|
7
7
|
|
|
8
8
|
Leave each adopted PR with one accountable owner, current readiness evidence,
|
|
9
|
-
and
|
|
9
|
+
and user-facing updates that name its current milestone and next wake or
|
|
10
|
+
condition.
|
|
10
11
|
|
|
11
12
|
Before acting, load [Standing contracts](../axstack/references/contracts.md).
|
|
12
13
|
Its required edge loads [Shared lifecycle](../axstack/references/lifecycle.md),
|
|
@@ -79,14 +80,17 @@ no children or recursive teams, and the adoption watcher is never the writer.
|
|
|
79
80
|
|
|
80
81
|
A live watch has verified role and timer receipts, handshakes, watched scope,
|
|
81
82
|
wake ownership, and a common expiry. A missing runtime capability is a setup gap,
|
|
82
|
-
not a reason to invent a call or create a duplicate registration.
|
|
83
|
-
|
|
83
|
+
not a reason to invent a call or create a duplicate registration. Native
|
|
84
|
+
wake-ups drive observation; never poll or keep a model active between events.
|
|
84
85
|
|
|
85
86
|
## 4. Route each wake
|
|
86
87
|
|
|
87
88
|
Re-read the remote head and base, then reconcile the event against acknowledged
|
|
88
89
|
IDs and the recorded mode. A changed head, CI result, or review comment is an
|
|
89
90
|
event, not repair authority. Stale or ambiguous observations authorize nothing.
|
|
91
|
+
Every user-facing update is actionable: name the current milestone, the next
|
|
92
|
+
wake or condition, and an ETA when the forge exposes one, such as CI median.
|
|
93
|
+
A healthy unchanged observation produces no user-facing message.
|
|
90
94
|
|
|
91
95
|
Observation-only and peer wakes produce a read-only report and stop. For an
|
|
92
96
|
authorized maintenance wake that may require a repair or public reply, read and
|
package/src/roles.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const PROVIDER_BOUNDS = Object.freeze({
|
|
2
|
-
mixed: new Set(['codex', 'claude']),
|
|
2
|
+
mixed: new Set(['codex', 'claude', 'grok']),
|
|
3
3
|
'codex-only': new Set(['codex']),
|
|
4
4
|
'claude-only': new Set(['claude']),
|
|
5
5
|
});
|
|
@@ -64,8 +64,9 @@ export function assessRoleReadiness(roles, preset) {
|
|
|
64
64
|
const gaps = [];
|
|
65
65
|
const isIntentionalAbsence = (role) => role.model === null && (
|
|
66
66
|
(preset === 'mixed' && role.id === 'axstack-checker') ||
|
|
67
|
-
(preset === '
|
|
68
|
-
(preset === '
|
|
67
|
+
(preset === 'mixed' && role.id === 'axstack-research-x' && role.provider === 'grok') ||
|
|
68
|
+
(preset === 'codex-only' && ['axstack-advisor-fable', 'axstack-arena-judge-fable', 'axstack-research-x'].includes(role.id)) ||
|
|
69
|
+
(preset === 'claude-only' && ['axstack-advisor-astra', 'axstack-arena-judge-astra', 'axstack-research-x'].includes(role.id))
|
|
69
70
|
);
|
|
70
71
|
for (const role of roles) {
|
|
71
72
|
if (!bounds.has(role.provider)) {
|