axstack 0.58.0 → 0.59.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/package.json +1 -1
- package/skills/axstack/references/default-routing.md +21 -2
- package/skills/axstack/references/independent-delivery.md +68 -0
- package/skills/axstack/scripts/default-policy.js +2 -2
- package/skills/axstack/scripts/hub-usage.js +30 -3
- package/skills/axstack-implement/SKILL.md +3 -0
- package/skills/axstack-spec/SKILL.md +2 -0
- package/skills/axstack-spec/references/format.md +8 -0
- package/skills/axstack-tickets/SKILL.md +10 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axstack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.59.1",
|
|
4
4
|
"description": "Axstack installer and setup CLI: installs owned chat skills and role data, configures supported harness settings, and checks T3 Code capabilities.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -47,8 +47,27 @@ A successful Codex response containing only a seven-day primary window (secondar
|
|
|
47
47
|
absent/null) is authoritative single-window telemetry: the adapter explicitly marks
|
|
48
48
|
session n/a. It does not synthesize session capacity. A plain incomplete snapshot
|
|
49
49
|
without this provenance still holds; weekly is always required. An account needs
|
|
50
|
-
remaining quota in every applicable window.
|
|
51
|
-
|
|
50
|
+
remaining quota in every applicable window.
|
|
51
|
+
|
|
52
|
+
Claude session n/a requires an explicit `five_hour: null`, valid `seven_day` usage
|
|
53
|
+
and future weekly reset, and exactly one active, unscoped `weekly_all` row in
|
|
54
|
+
`limits` with matching percentage and identical reset string. Every limits row
|
|
55
|
+
must be validated weekly metadata: only `weekly_all` and model-scoped
|
|
56
|
+
`weekly_scoped` rows with valid percentages, future weekly resets and boolean
|
|
57
|
+
`is_active` are supported. Scoped rows require a named model and null surface.
|
|
58
|
+
Any session row contradicts n/a, even when `is_active: false`; that flag never
|
|
59
|
+
hides a present session or scoped weekly usage. Unknown/malformed limits,
|
|
60
|
+
non-null legacy `seven_day_opus`/`seven_day_sonnet`, error fields, missing fields
|
|
61
|
+
or null without corroboration hold. No plan name, bootstrap outcome, zero usage
|
|
62
|
+
or fabricated reset establishes n/a. All accounts remain counted; supported scoped
|
|
63
|
+
rows remain in telemetry with existing Opus eligibility checks. Source/account
|
|
64
|
+
freshness and catalog guards still apply.
|
|
65
|
+
This narrowly supported response shape does not establish universal null semantics
|
|
66
|
+
or an account's plan/verification status. Model scope names retain their existing
|
|
67
|
+
meaning; no Fable-to-Opus mapping is inferred.
|
|
68
|
+
|
|
69
|
+
For ordinary Claude session/weekly/scoped Opus and Codex windows, null or absent
|
|
70
|
+
reset timing is valid. The adapter omits the missing
|
|
52
71
|
reset; it never invents a timestamp. Unknown reset timing alone does **not** mean
|
|
53
72
|
unused or not started: the reported used percentage still governs remaining quota,
|
|
54
73
|
same-account eligibility and the primary-pool reserve, including exhaustion at 100% used.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Independent delivery
|
|
2
|
+
|
|
3
|
+
Apply this contract during Spec, Tickets and Implement within the accepted
|
|
4
|
+
scope identity. Keep the existing spec, ticket map or small-change intent as
|
|
5
|
+
the record; this adds neither a planning artifact nor execution authority.
|
|
6
|
+
|
|
7
|
+
## Plan outcomes and boundaries
|
|
8
|
+
|
|
9
|
+
Spec must name independently deliverable outcomes, their acceptance checks,
|
|
10
|
+
and produced and consumed interfaces. An outcome is independently deliverable
|
|
11
|
+
when its accepted result can be verified and delivered without waiting for an
|
|
12
|
+
unrelated outcome. Shared files, interfaces, release targets and other scarce
|
|
13
|
+
resources can still constrain execution.
|
|
14
|
+
|
|
15
|
+
Tickets must map each outcome to an accountable scope driver marked accepted
|
|
16
|
+
or proposed, write and resource boundaries, dependency milestones, and evidence
|
|
17
|
+
with invalidation conditions. Record what a consumer actually needs: for
|
|
18
|
+
example an accepted immutable interface, a versioned artifact, an exact
|
|
19
|
+
reviewed code revision, or a merged change. Choose the sufficient milestone
|
|
20
|
+
from acceptance and integration needs rather than requiring every producer to
|
|
21
|
+
be reviewed or merged. Mapping can leave actual SHAs unresolved until execution.
|
|
22
|
+
|
|
23
|
+
Default to separate accountable scope drivers for independent outcomes when
|
|
24
|
+
explicitly authorized and supported by the runtime. Tasks within an accepted
|
|
25
|
+
scope remain native delegates of its accountable driver. Reuse accepted owners
|
|
26
|
+
and current attempts before proposing new drivers. Follow
|
|
27
|
+
[Coordinating multiple drivers](t3-runtime.md#coordinating-multiple-drivers)
|
|
28
|
+
for project binding, acceptance handbacks, record ownership and launch rules.
|
|
29
|
+
|
|
30
|
+
Planning never grants launch permission or execution authority. Missing
|
|
31
|
+
new-driver launch permission holds only that launch, subject to dependency and
|
|
32
|
+
scoped-hold rules. The existing driver can progress only work already inside
|
|
33
|
+
its accepted authority. A proposed scope driver is a plan entry, not an
|
|
34
|
+
accepted owner. Preserve existing owners until an explicit accepted transfer
|
|
35
|
+
under [Lifecycle](lifecycle.md#native-handoff-and-resume).
|
|
36
|
+
|
|
37
|
+
## Admit and reconcile during execution
|
|
38
|
+
|
|
39
|
+
During Implement, admit newly discovered independent outcomes through the same
|
|
40
|
+
scope, interface and dependency map. Reuse the accepted scope where it covers
|
|
41
|
+
the work; materially changed scope follows the existing approval boundary.
|
|
42
|
+
Before dispatch, reconcile semantic and write conflicts, milestone and
|
|
43
|
+
revision evidence, ownership and current attempts, writer exclusivity and
|
|
44
|
+
capacity with native and forge state. Separate worktrees never prove semantic
|
|
45
|
+
independence. Queue conflicting work or resolve its boundaries before dispatch;
|
|
46
|
+
keep one writer per candidate and record. Driver separation alone grants no
|
|
47
|
+
additional capacity or routing authority.
|
|
48
|
+
|
|
49
|
+
Use main or the recorded integration target as the branch base unless a genuine
|
|
50
|
+
unfinished code predecessor requires its exact reviewed revision. An artifact-only
|
|
51
|
+
dependency can be satisfied by an accepted immutable interface or artifact
|
|
52
|
+
milestone without Git ancestry. Follow [PR chains](pr-chain.md) for actual code
|
|
53
|
+
ancestry, reviewed-parent branching, child invalidation and base updates.
|
|
54
|
+
|
|
55
|
+
Bind each consumed milestone to actual current evidence at execution, including
|
|
56
|
+
the producer revision or immutable artifact identity, receipt and acceptance
|
|
57
|
+
state. Unknown or stale dependency evidence holds affected consumers until
|
|
58
|
+
reconciled. When a producer revision changes, invalidate affected consumer
|
|
59
|
+
evidence and revalidate those consumers while unrelated scopes progress.
|
|
60
|
+
Keep artifact identities and code revisions distinct when determining which
|
|
61
|
+
consumers are affected. A planned dependency or completion message alone is
|
|
62
|
+
insufficient execution evidence.
|
|
63
|
+
|
|
64
|
+
Follow [Lifecycle receipts](lifecycle.md#receipts-bind-each-decision-to-evidence)
|
|
65
|
+
for current-attempt completion and advancement, [Autopilot](autopilot.md#advance-and-hold)
|
|
66
|
+
for scoped and run-wide holds, and [Implement](../../axstack-implement/SKILL.md)
|
|
67
|
+
for dispatch, review and delivery gates. This contract changes none of their
|
|
68
|
+
ownership, serial preflight, capacity, hold, merge or completion requirements.
|
|
@@ -24,8 +24,8 @@ function pool(accounts, driver, now) {
|
|
|
24
24
|
if (u?.unavailable || !fresh(u?.checkedAt, now, 300000) || !Array.isArray(u?.windows)) throw Error(`unknown ${driver} telemetry`);
|
|
25
25
|
const windows = ['session', 'weekly'].map((kind) => {
|
|
26
26
|
const found = u.windows.filter((w) => w.kind === kind && !(driver === 'claudeAgent' && w.id?.startsWith('seven_day_')));
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const weeklyOnly = driver === 'codex' ? 'verified Codex weekly-only response' : 'verified Claude weekly-only response';
|
|
28
|
+
if (!found.length && kind === 'session' && u.notApplicable?.session === weeklyOnly) return null;
|
|
29
29
|
if (found.length !== 1) throw Error(`missing or ambiguous ${driver} ${kind} window`);
|
|
30
30
|
const w = found[0];
|
|
31
31
|
if (!Number.isFinite(w.usedPercent) || w.usedPercent < 0 || w.usedPercent > 100
|
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import { managementKey } from './hub-secret.js';
|
|
2
|
+
|
|
3
|
+
// Null alone is ambiguous. Accept only corroborated weekly metadata, never plan names.
|
|
4
|
+
function claudeWeeklyOnly(usage, now) {
|
|
5
|
+
const weekly = usage.seven_day;
|
|
6
|
+
const percent = (value) => Number.isFinite(value) && value >= 0 && value <= 100;
|
|
7
|
+
const reset = (value) => typeof value === 'string' && Number.isFinite(Date.parse(value))
|
|
8
|
+
&& Date.parse(value) > now && Date.parse(value) - now <= 604800000;
|
|
9
|
+
if (usage.five_hour !== null || Object.hasOwn(usage, 'error') || Object.hasOwn(usage, 'errors')
|
|
10
|
+
|| !percent(weekly?.utilization) || !reset(weekly?.resets_at) || !Array.isArray(usage.limits)
|
|
11
|
+
|| usage.seven_day_opus != null || usage.seven_day_sonnet != null) return false;
|
|
12
|
+
const aggregate = usage.limits.filter((w) => w?.kind === 'weekly_all');
|
|
13
|
+
return aggregate.length === 1 && usage.limits.every((w) => {
|
|
14
|
+
if (!w || w.group !== 'weekly' || typeof w.is_active !== 'boolean' || !percent(w.percent)
|
|
15
|
+
|| !reset(w.resets_at)) return false;
|
|
16
|
+
if (w.kind === 'weekly_all') return w.is_active === true && w.scope === null
|
|
17
|
+
&& w.percent === weekly.utilization && w.resets_at === weekly.resets_at;
|
|
18
|
+
// A session row contradicts absence even when inactive. Unknown limits also hold.
|
|
19
|
+
return w.kind === 'weekly_scoped' && typeof w.scope?.model?.display_name === 'string'
|
|
20
|
+
&& w.scope.model.display_name.trim().length > 0 && w.scope.surface === null;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
2
24
|
// Read-only subset of T3 0.1.3 makeCliproxyApi. Never fetch token files or reset credits.
|
|
3
25
|
async function management(config, path, body) {
|
|
4
26
|
const base = new URL(config.url.endsWith('/') ? config.url : `${config.url}/`);
|
|
@@ -54,10 +76,15 @@ async function accountUsage(config, account, now) {
|
|
|
54
76
|
label: `Weekly · ${w.scope?.model?.display_name ?? ''}`, usedPercent: w.percent, ...(w.resets_at == null ? {} : { resetsAt: w.resets_at }), windowDurationMins: 10080 });
|
|
55
77
|
}
|
|
56
78
|
}
|
|
57
|
-
|
|
58
|
-
|
|
79
|
+
let weeklyOnly;
|
|
80
|
+
if (driver === 'codex' && usage.rate_limit?.primary_window?.limit_window_seconds === 604800
|
|
81
|
+
&& usage.rate_limit.secondary_window == null && windows.length === 1 && windows[0].kind === 'weekly') {
|
|
82
|
+
weeklyOnly = 'verified Codex weekly-only response';
|
|
83
|
+
} else if (driver === 'claudeAgent' && claudeWeeklyOnly(usage, now)) {
|
|
84
|
+
weeklyOnly = 'verified Claude weekly-only response';
|
|
85
|
+
}
|
|
59
86
|
return { ...base, usageLimits: { checkedAt, windows,
|
|
60
|
-
...(weeklyOnly ? { notApplicable: { session:
|
|
87
|
+
...(weeklyOnly ? { notApplicable: { session: weeklyOnly } } : {}) } };
|
|
61
88
|
} catch {
|
|
62
89
|
return { ...base, usageLimits: { checkedAt, windows: [], unavailable: { reason: 'probeFailed' } } };
|
|
63
90
|
}
|
|
@@ -19,6 +19,8 @@ run later reconciles merges and closes out.
|
|
|
19
19
|
|
|
20
20
|
## 1. Admit the work
|
|
21
21
|
|
|
22
|
+
At admission and before dispatch, load and follow [Independent delivery](../axstack/references/independent-delivery.md).
|
|
23
|
+
|
|
22
24
|
Before consequential work, load the standing contracts, follow their required
|
|
23
25
|
edge into the lifecycle (including its audit hook), then apply shared routing:
|
|
24
26
|
|
|
@@ -205,6 +207,7 @@ Record: <progress.md path or tiny-task brief>
|
|
|
205
207
|
Candidate: <PR or branch> base <sha> revision <sha>
|
|
206
208
|
Owner: <profile + session ID + worktree>
|
|
207
209
|
Scope: <approved spec + capability | small-change intent | maintenance snapshot>
|
|
210
|
+
Delivery map: <record pointer; outcomes/accepted scope drivers; current milestone evidence; held launches>
|
|
208
211
|
Shape: <total> lines vs base <sha>; bulk: <buckets>; theme: <one line>
|
|
209
212
|
TDD: <normal red/green | structure-preserving old-green/same-check-new-green evidence | F-repair base-green/removal-inversion-red/rewording-green evidence>
|
|
210
213
|
Token limit: <staged-file size check command + observed advisories/errors before each commit>
|
|
@@ -25,6 +25,8 @@ and the lifecycle's [audit skill](../axstack-audit/SKILL.md) hook.
|
|
|
25
25
|
|
|
26
26
|
## Procedure
|
|
27
27
|
|
|
28
|
+
Before drafting, load and follow [Independent delivery](../axstack/references/independent-delivery.md).
|
|
29
|
+
|
|
28
30
|
1. **Select the authoritative store.** Use Linear through the executor MCP only
|
|
29
31
|
for repositories in `defi-com`. Keep specs for other repositories on GitHub;
|
|
30
32
|
if the issue, PR or repository-file location is unclear, ask before creating
|
|
@@ -22,6 +22,11 @@ or risk only in supporting detail.
|
|
|
22
22
|
|
|
23
23
|
## Execution requirements
|
|
24
24
|
|
|
25
|
+
Follow [Independent delivery](../../axstack/references/independent-delivery.md)
|
|
26
|
+
when planning outcomes. In execution requirements, describe each outcome with
|
|
27
|
+
acceptance and produced and consumed interfaces. Keep these in the existing
|
|
28
|
+
specification rather than a separate delivery artifact.
|
|
29
|
+
|
|
25
30
|
Group precise requirements and observable acceptance by capability, using stable
|
|
26
31
|
IDs where useful. Include behavior, interfaces, data, invariants, failure cases
|
|
27
32
|
and validation that determine success. Put routine file-by-file task and PR
|
|
@@ -74,6 +79,9 @@ whole-dataset export and its cleanup cost. Proposed choice: filtered export.
|
|
|
74
79
|
|
|
75
80
|
## Execution requirements
|
|
76
81
|
### Filtered export
|
|
82
|
+
Outcome: independently deliverable filtered CSV export.
|
|
83
|
+
Produces: CSV rows in visible column order. Consumes: the existing table filter
|
|
84
|
+
and column-order interfaces; no unfinished code predecessor is required.
|
|
77
85
|
EXP-1: On click, capture the active filter and visible column order, label the
|
|
78
86
|
action “Export filtered rows”, and export only matching rows in those columns.
|
|
79
87
|
Acceptance for EXP-1: with a two-row dataset and a filter matching one row,
|
|
@@ -25,6 +25,8 @@ no dispatch preflight.
|
|
|
25
25
|
|
|
26
26
|
## Procedure
|
|
27
27
|
|
|
28
|
+
Before mapping, load and follow [Independent delivery](../axstack/references/independent-delivery.md).
|
|
29
|
+
|
|
28
30
|
1. **Pin scope and storage.** Confirm the approved spec identity before mapping.
|
|
29
31
|
Hold on unapproved or materially changed scope; a still-valid approval is
|
|
30
32
|
never repeated. Use the explicitly selected Markdown, GitHub Issues, or
|
|
@@ -71,11 +73,19 @@ no dispatch preflight.
|
|
|
71
73
|
```text
|
|
72
74
|
Spec: <approved revision>
|
|
73
75
|
Capability: <Markdown ref, GitHub issue URL, or Linear issue URL> <title>
|
|
76
|
+
Outcome: <independently deliverable result>
|
|
77
|
+
Scope: <accepted boundary>
|
|
78
|
+
Driver: <accepted or proposed accountable scope driver + record/link>
|
|
74
79
|
Internal task: <task> -> <PR owner> -> <worktree>
|
|
80
|
+
Writes/resources: <write, semantic-interface and shared-resource boundaries>
|
|
81
|
+
Produces/consumes: <interfaces or artifacts>
|
|
75
82
|
Theme: <one behavior or component>
|
|
76
83
|
Size est: <coarse size estimate>
|
|
77
84
|
Acceptance: <checks from approved spec rev>
|
|
78
85
|
Depends: <task IDs or none>
|
|
86
|
+
Milestones: <per dependency: required acceptance state + producer/artifact identity; planned revisions allowed>
|
|
87
|
+
Evidence/invalidation: <required receipt/check + producer changes that invalidate affected consumers>
|
|
88
|
+
Branch: <main/integration target | exact reviewed unfinished code predecessor + reason>
|
|
79
89
|
```
|
|
80
90
|
|
|
81
91
|
4. **Reconcile lifecycle state.** Compare each run capability with its required
|