axstack 0.17.0 → 0.18.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 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 24-role inputs:
80
+ The public bundle preserves three canonical 25-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
@@ -90,9 +90,10 @@ Mixed configures independent Astra and Fable advisers at high. Single-provider
90
90
  presets preserve both adviser IDs and mark the unavailable one with `model:
91
91
  null` inside that preset's provider bounds; installation remains ready, while
92
92
  Align and Spec hold because both receipts are required. The mixed
93
- `axstack-checker` model is also intentionally `null`; that role stays held
94
- instead of inheriting a provider default. The single-provider presets configure
95
- the checker. Preset changes affect new runs only. Stored model, effort, and permission
93
+ `axstack-checker` and `axstack-research-web-google` roles launch Antigravity by
94
+ agent ID with explicit `model: null`; the run records the model reported by the
95
+ TUI. The single-provider presets configure the checker and record the Google
96
+ research branch as intentionally absent. Preset changes affect new runs only. Stored model, effort, and permission
96
97
  fields are declared intent until actual Orca launch receipts establish effective
97
98
  behavior; installation never proves provider availability or permission parity.
98
99
  Subscription availability and quota never select a fallback model.
@@ -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 24 stable
54
+ Each has exactly `{ "version": 1, "roles": [...] }` with the same 25 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,10 +118,11 @@ 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 the mixed
122
- `axstack-research-x` launch-by-agent-id route explicitly permit `model: null`;
121
+ - every role has valid preserved fields, while the mixed checker,
122
+ `axstack-research-web-google`, and `axstack-research-x` launch-by-agent-id
123
+ routes explicitly permit `model: null`;
123
124
  in each single-provider preset, the unavailable adviser and its matching arena
124
- judge seat explicitly permit `model: null`, as does `axstack-research-x`;
125
+ judge seat explicitly permit `model: null`, as do both cross-provider research routes;
125
126
  - obsolete runtime configuration flags fail before mutation with migration
126
127
  guidance.
127
128
 
@@ -149,16 +150,16 @@ to rewrite them.
149
150
  ## Role behavior after installation
150
151
 
151
152
  The runtime reads `roles.json` from the installed shared root `skills/axstack/`.
152
- A new run records the selected preset plus all 24 role rows. An active run keeps
153
+ A new run records the selected preset plus all 25 role rows. An active run keeps
153
154
  that snapshot after a later preset install unless the user explicitly changes
154
155
  it and accepts the resulting evidence invalidation.
155
156
 
156
- The mixed checker has `model: null`; checker dispatch is held and never inherits
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
+ The mixed checker and `axstack-research-web-google` have provider
158
+ `antigravity`; mixed `axstack-research-x` has provider `grok`. All three use
159
+ `model: null` because Orca exposes no model override for those agent-ID routes;
160
+ their notes authorize launch by agent ID, and the run record snapshots the model
161
+ reported by the TUI. The single-provider presets configure the checker and keep
162
+ both cross-provider research routes as intentional absences. Their
162
163
  unavailable adviser and its matching arena judge seat remain explicit
163
164
  same-provider `model: null` roles, which do not make installation unready;
164
165
  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 24 stable IDs.
43
+ `{ "version": 1, "roles": [...] }` and the same 25 stable IDs.
44
44
 
45
45
  The current chat drives on whatever model runs it; no preset carries a driver
46
46
  role.
@@ -63,9 +63,9 @@ selected preset.
63
63
  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
- are required. The mixed checker also stays explicitly `model: null`; checker work holds instead of
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
66
+ are required. The mixed checker and Google web-research route use provider
67
+ `antigravity`; the X route uses `grok`. Launch-by-agent-id routes for which Orca
68
+ exposes no model override (today: `grok`, `antigravity`) record `model: null` with an explicit note and are
69
69
  launchable; the run record snapshots the model the TUI reports. Missing or unavailable roles hold only affected
70
70
  work. Model, effort, and permission values express requested intent until real
71
71
  Orca receipts establish the effective session. Stored `modeId` is not permission
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axstack",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "description": "Axstack installer and setup CLI: installs owned chat skills and role data, configures supported harness settings, and checks Orca capabilities.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -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-web-google",
96
+ "name": "Axstack research web (Google unavailable)",
97
+ "provider": "claude",
98
+ "model": null,
99
+ "modeId": "bypassPermissions",
100
+ "thinkingOptionId": "high",
101
+ "notes": "Intentional single-provider absence: Google-Search-grounded web research via Gemini/Antigravity is unavailable in claude-only. The explicit null holds this route without provider substitution."
102
+ },
94
103
  {
95
104
  "id": "axstack-research-x",
96
105
  "name": "Axstack research X (unavailable)",
@@ -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-web-google",
96
+ "name": "Axstack research web (Google unavailable)",
97
+ "provider": "codex",
98
+ "model": null,
99
+ "modeId": "full-access",
100
+ "thinkingOptionId": "high",
101
+ "notes": "Intentional single-provider absence: Google-Search-grounded web research via Gemini/Antigravity is unavailable in codex-only. The explicit null holds this route without provider substitution."
102
+ },
94
103
  {
95
104
  "id": "axstack-research-x",
96
105
  "name": "Axstack research X (unavailable)",
@@ -58,11 +58,11 @@
58
58
  {
59
59
  "id": "axstack-checker",
60
60
  "name": "Axstack Linear checker",
61
- "provider": "codex",
61
+ "provider": "antigravity",
62
62
  "model": null,
63
63
  "modeId": "full-access",
64
64
  "thinkingOptionId": "low",
65
- "notes": "Report-only Linear discrepancy checker. Never mutates Linear; the driver independently verifies evidence before applying updates. A null model means explicit user selection is required before dispatch and must never launch a provider default."
65
+ "notes": "Report-only Linear discrepancy checker. Never mutates Linear; the driver independently verifies evidence before applying updates. Cheap report-only seat on Gemini Flash; launch by agent id antigravity."
66
66
  },
67
67
  {
68
68
  "id": "axstack-research-requirements",
@@ -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-web-google",
96
+ "name": "Axstack research web (Google)",
97
+ "provider": "antigravity",
98
+ "model": null,
99
+ "modeId": "full-access",
100
+ "thinkingOptionId": "high",
101
+ "notes": "Google-Search-grounded web research branch on Gemini via the Antigravity CLI; launch by agent id antigravity; model selected by the TUI default (Gemini 3.8 Flash High observed 2026-09-19; ids from agy models: gemini-3.8-flash-{low,medium,high}, gemini-3.1-pro-{low,high}); cites URL + access date per claim and re-opens sources because the CLI's search citation format is undocumented; report-only."
102
+ },
94
103
  {
95
104
  "id": "axstack-research-x",
96
105
  "name": "Axstack research X",
@@ -26,12 +26,12 @@ 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 24 role rows once. An active run keeps the exact snapshot until the user
29
+ all 25 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
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
34
+ `--model` override (today: `grok`, `antigravity`) record `model: null` with an explicit note and are
35
35
  launchable; the run record snapshots the model the TUI reports. Validate provider, model, and effort
36
36
  against the guide and actual launch capability. Stored `modeId` and other
37
37
  permission fields are conservative intent, not proof of effective permission
@@ -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 24 role
14
+ At run start, capture one **routing snapshot**: the complete map of all 25 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
@@ -24,19 +24,23 @@ is part of research.
24
24
  question in one run; separate only genuinely independent questions. Start
25
25
  gathering evidence only after the target and stopping boundary are explicit.
26
26
 
27
- 2. **Choose the smallest route.** Handle a single factual lookup directly in
28
- the current chat. Use a profile only when its specialization or independent
29
- work is useful. Before an actual dispatch, read and follow the
30
- [Orca runtime boundary](../axstack/references/orca-runtime.md). Give each
31
- research branch one owner; keep implementation out of every branch.
32
-
33
- These routes are data presets, not proof of live readiness. Confirm profile
34
- availability through the shared launch sequence:
27
+ 2. **Fan out research:** A single factual lookup stays in the current chat.
28
+ Every other research run dispatches every configured research branch through
29
+ Orca: requirements (Claude), code (Codex), web (Claude), web-google
30
+ (Gemini/Antigravity, with Google Search built in), and X (Grok).
31
+ Give each branch one owner, allow no cross-reading, and require a cited note
32
+ with a URL and access date per claim; re-open sources and never trust a search
33
+ summary. The driver reconciles agreements/disagreements per claim.
34
+ An unconfigured or unavailable branch is recorded as absent, never substituted.
35
+ These routes are data presets, not proof of live readiness; before dispatch,
36
+ follow the [Orca runtime boundary](../axstack/references/orca-runtime.md),
37
+ confirm availability, and keep implementation out of every branch:
35
38
 
36
39
  - `axstack-research-requirements`: requirements and intent.
37
40
  - `axstack-research-code`: code behavior.
38
41
  - `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.
42
+ - `axstack-research-web-google`: Google-Search-grounded web sources via Gemini/Antigravity.
43
+ - `axstack-research-x`: X (Twitter) posts and threads via Grok; cite post URLs and dates.
40
44
  - `axstack-explore-codebase`: broad codebase mapping.
41
45
  - `axstack-explore-execution`: execution and runtime traces.
42
46
 
package/src/roles.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const PROVIDER_BOUNDS = Object.freeze({
2
- mixed: new Set(['codex', 'claude', 'grok']),
2
+ mixed: new Set(['codex', 'claude', 'grok', 'antigravity']),
3
3
  'codex-only': new Set(['codex']),
4
4
  'claude-only': new Set(['claude']),
5
5
  });
@@ -63,10 +63,11 @@ export function assessRoleReadiness(roles, preset) {
63
63
  const byId = new Map(roles.map((role) => [role.id, role]));
64
64
  const gaps = [];
65
65
  const isIntentionalAbsence = (role) => role.model === null && (
66
- (preset === 'mixed' && role.id === 'axstack-checker') ||
66
+ (preset === 'mixed' && role.id === 'axstack-checker' && role.provider === 'antigravity') ||
67
+ (preset === 'mixed' && role.id === 'axstack-research-web-google' && role.provider === 'antigravity') ||
67
68
  (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
+ (preset === 'codex-only' && ['axstack-advisor-fable', 'axstack-arena-judge-fable', 'axstack-research-web-google', 'axstack-research-x'].includes(role.id)) ||
70
+ (preset === 'claude-only' && ['axstack-advisor-astra', 'axstack-arena-judge-astra', 'axstack-research-web-google', 'axstack-research-x'].includes(role.id))
70
71
  );
71
72
  for (const role of roles) {
72
73
  if (!bounds.has(role.provider)) {