atris 3.34.0 → 3.36.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.
Files changed (163) hide show
  1. package/AGENTS.md +35 -0
  2. package/FOR_AGENTS.md +5 -3
  3. package/README.md +5 -3
  4. package/atris/GETTING_STARTED.md +1 -1
  5. package/atris/atris.md +3 -0
  6. package/atris/policies/day-loop-voice.md +102 -0
  7. package/atris/policies/outbound-artifact-gate.md +2 -0
  8. package/atris/skills/design/SKILL.md +56 -32
  9. package/atris/skills/endgame/SKILL.md +12 -6
  10. package/atris/skills/engines/SKILL.md +35 -8
  11. package/atris/skills/fable-method/SKILL.md +66 -0
  12. package/atris/skills/improve/SKILL.md +65 -45
  13. package/atris/skills/render-cli/SKILL.md +88 -0
  14. package/atris/skills/youtube/SKILL.md +10 -1
  15. package/atris.md +6 -2
  16. package/ax +617 -31
  17. package/bin/atris.js +719 -266
  18. package/commands/activate.js +194 -88
  19. package/commands/aeo.js +52 -0
  20. package/commands/agents.js +166 -0
  21. package/commands/autoland.js +718 -72
  22. package/commands/autopilot-front.js +20 -2
  23. package/commands/autopilot.js +118 -2
  24. package/commands/avail.js +407 -0
  25. package/commands/bench.js +188 -0
  26. package/commands/brain.js +3 -0
  27. package/commands/brief.js +651 -0
  28. package/commands/business-sync.js +192 -6
  29. package/commands/business.js +91 -8
  30. package/commands/clean.js +50 -24
  31. package/commands/close.js +1083 -0
  32. package/commands/cloud.js +245 -0
  33. package/commands/codex-goal.js +26 -2
  34. package/commands/compile.js +292 -1
  35. package/commands/computer.js +150 -3
  36. package/commands/dream.js +365 -0
  37. package/commands/drill.js +371 -0
  38. package/commands/drive.js +187 -0
  39. package/commands/engine.js +1061 -29
  40. package/commands/experiments.js +28 -0
  41. package/commands/feed.js +202 -0
  42. package/commands/feedback.js +34 -12
  43. package/commands/fleet-report.js +206 -0
  44. package/commands/github.js +38 -0
  45. package/commands/gm.js +285 -3
  46. package/commands/goal.js +247 -0
  47. package/commands/improve.js +642 -26
  48. package/commands/init.js +83 -43
  49. package/commands/integrations.js +39 -11
  50. package/commands/interview.js +209 -0
  51. package/commands/land.js +253 -52
  52. package/commands/lesson.js +112 -1
  53. package/commands/lifecycle.js +39 -3
  54. package/commands/linear.js +38 -0
  55. package/commands/log.js +84 -1
  56. package/commands/loops.js +220 -16
  57. package/commands/meet.js +220 -0
  58. package/commands/member.js +899 -66
  59. package/commands/mission.js +3512 -332
  60. package/commands/next.js +137 -0
  61. package/commands/now.js +240 -21
  62. package/commands/one-lap.js +776 -0
  63. package/commands/orb.js +314 -0
  64. package/commands/pack-craft.js +179 -0
  65. package/commands/pack.js +823 -0
  66. package/commands/play.js +3 -2
  67. package/commands/probe.js +30 -3
  68. package/commands/pulse.js +241 -46
  69. package/commands/push.js +260 -82
  70. package/commands/radar.js +259 -14
  71. package/commands/rainmaker.js +49 -0
  72. package/commands/report.js +415 -0
  73. package/commands/scout.js +147 -0
  74. package/commands/search.js +363 -0
  75. package/commands/serve.js +54 -0
  76. package/commands/skill.js +47 -3
  77. package/commands/slop.js +50 -2
  78. package/commands/soul.js +1 -1
  79. package/commands/status.js +50 -5
  80. package/commands/stream.js +861 -0
  81. package/commands/stripe.js +38 -0
  82. package/commands/study.js +693 -0
  83. package/commands/supabase.js +39 -0
  84. package/commands/sync.js +67 -54
  85. package/commands/task.js +2275 -182
  86. package/commands/team.js +73 -0
  87. package/commands/truth.js +29 -3
  88. package/commands/unknowns.js +627 -0
  89. package/commands/update.js +44 -0
  90. package/commands/vercel.js +38 -0
  91. package/commands/verify.js +96 -0
  92. package/commands/watch.js +303 -0
  93. package/commands/wish.js +500 -0
  94. package/commands/workflow.js +11 -5
  95. package/commands/worktree.js +299 -20
  96. package/commands/write.js +399 -0
  97. package/commands/xp.js +29 -11
  98. package/lib/auto-accept-certified.js +391 -43
  99. package/lib/autoland.js +353 -52
  100. package/lib/ax-auto-lane.js +79 -0
  101. package/lib/bench/context.js +147 -0
  102. package/lib/bench/engines.js +141 -0
  103. package/lib/bench/report.js +140 -0
  104. package/lib/bench/runner.js +512 -0
  105. package/lib/brief-ledger.js +350 -0
  106. package/lib/cloud-mission.js +259 -0
  107. package/lib/codex-flight.js +154 -0
  108. package/lib/default-runner.js +45 -0
  109. package/lib/default-verifier.js +70 -0
  110. package/lib/engine-registry.js +232 -0
  111. package/lib/experiments/daily.js +640 -0
  112. package/lib/fleet.js +2431 -38
  113. package/lib/improve-vitals-html.js +171 -0
  114. package/lib/known-commands.js +58 -0
  115. package/lib/loop-doctor.js +416 -0
  116. package/lib/member-switches.js +144 -0
  117. package/lib/memory-view.js +14 -5
  118. package/lib/mission-room.js +1 -0
  119. package/lib/mission-root.js +52 -0
  120. package/lib/mission-runtime-loop.js +7 -0
  121. package/lib/next-moves.js +327 -10
  122. package/lib/official-cli-integration.js +174 -0
  123. package/lib/one-lap-validator.js +60 -0
  124. package/lib/orb-context.js +477 -0
  125. package/lib/orb-scorecard.js +224 -0
  126. package/lib/outbound-send-gate.js +165 -0
  127. package/lib/permission-grants.js +293 -0
  128. package/lib/policy-lessons.js +52 -1
  129. package/lib/pulse.js +277 -3
  130. package/lib/receipt-block.js +168 -0
  131. package/lib/receipt-evidence.js +65 -4
  132. package/lib/review-integrity.js +147 -0
  133. package/lib/router-brain.js +352 -0
  134. package/lib/runner-command.js +33 -0
  135. package/lib/self-drive.js +258 -0
  136. package/lib/short-name.js +103 -0
  137. package/lib/spawn-env.js +18 -0
  138. package/lib/state-detection.js +56 -1
  139. package/lib/sync-status.js +59 -0
  140. package/lib/task-db.js +319 -27
  141. package/lib/task-proof.js +43 -1
  142. package/lib/task-receipt.js +93 -0
  143. package/lib/team-presence.js +260 -0
  144. package/lib/tool-result-encode.js +7 -0
  145. package/lib/trust-tiers.js +90 -0
  146. package/lib/usage.js +107 -0
  147. package/lib/voice-gate.js +163 -0
  148. package/lib/wish-audit.js +1368 -0
  149. package/lib/wish-delegate.js +1840 -0
  150. package/lib/wish-design.js +110 -0
  151. package/lib/wish-stats.js +183 -0
  152. package/lib/wish-store.js +354 -0
  153. package/lib/zip.js +221 -0
  154. package/package.json +3 -1
  155. package/templates/loops/atris/loops/LOOPS.md +55 -0
  156. package/templates/loops/atris/loops/TICK.md +24 -0
  157. package/templates/loops/atris/loops/feedback.md +22 -0
  158. package/templates/loops/atris/loops/quality.md +22 -0
  159. package/templates/loops/atris/wiki/systems/loops.md +41 -0
  160. package/utils/api.js +5 -1
  161. package/utils/auth.js +57 -21
  162. package/utils/update-check.js +27 -6
  163. package/atris/learnings.jsonl +0 -1
@@ -0,0 +1,188 @@
1
+ 'use strict';
2
+
3
+ const {
4
+ BenchInfraError,
5
+ packMetadata,
6
+ readResultRecords,
7
+ runBench,
8
+ taskMetadata,
9
+ } = require('../lib/bench/runner');
10
+ const { buildBenchReport, renderBenchReportText } = require('../lib/bench/report');
11
+
12
+ function hasFlag(args, name) {
13
+ return args.includes(name);
14
+ }
15
+
16
+ function readFlag(args, name) {
17
+ const prefix = `${name}=`;
18
+ const inline = args.find((arg) => String(arg).startsWith(prefix));
19
+ if (inline) return String(inline).slice(prefix.length);
20
+ const index = args.indexOf(name);
21
+ if (index !== -1 && args[index + 1] && !String(args[index + 1]).startsWith('--')) return args[index + 1];
22
+ return null;
23
+ }
24
+
25
+ function readRepeatedFlag(args, name) {
26
+ const values = [];
27
+ const prefix = `${name}=`;
28
+ for (let i = 0; i < args.length; i += 1) {
29
+ const arg = String(args[i]);
30
+ if (arg === name && args[i + 1] && !String(args[i + 1]).startsWith('--')) {
31
+ values.push(args[i + 1]);
32
+ i += 1;
33
+ } else if (arg.startsWith(prefix)) {
34
+ values.push(arg.slice(prefix.length));
35
+ }
36
+ }
37
+ return values;
38
+ }
39
+
40
+ function printHelp() {
41
+ console.log('Usage: atris bench run [--pack <id>] [--engine <name>] [--task <id> ...] [--label baseline|candidate] [--experiment <id>] [--update-baseline] [--json]');
42
+ console.log('Usage: atris bench results [--last N] [--json]');
43
+ console.log('Usage: atris bench tasks [--pack <id>] [--json]');
44
+ console.log('Usage: atris bench packs [--json]');
45
+ console.log('Usage: atris bench report [--pack agents-v1] [--json]');
46
+ }
47
+
48
+ function printRunText(record) {
49
+ console.log(record.summary);
50
+ for (const task of record.tasks) {
51
+ const state = task.skipped ? 'skipped' : task.passed ? 'passed' : 'failed';
52
+ const retry = task.retried ? ' retried' : '';
53
+ console.log(`${state.padEnd(7)} ${task.id}${retry}`);
54
+ }
55
+ }
56
+
57
+ async function runCommand(args) {
58
+ const asJson = hasFlag(args, '--json');
59
+ try {
60
+ const result = await runBench({
61
+ pack: readFlag(args, '--pack') || undefined,
62
+ engine: readFlag(args, '--engine') || undefined,
63
+ taskIds: readRepeatedFlag(args, '--task'),
64
+ label: readFlag(args, '--label'),
65
+ experiment: readFlag(args, '--experiment'),
66
+ updateBaseline: hasFlag(args, '--update-baseline'),
67
+ stateRoot: process.cwd(),
68
+ });
69
+ if (asJson) {
70
+ console.log(JSON.stringify(result.record));
71
+ } else {
72
+ printRunText(result.record);
73
+ }
74
+ return result.exitCode;
75
+ } catch (err) {
76
+ const message = err && err.message ? err.message : String(err);
77
+ if (asJson) {
78
+ console.log(JSON.stringify({
79
+ schema: 'atris.bench.error.v1',
80
+ error: message,
81
+ }));
82
+ } else {
83
+ console.error(`atris bench: ${message}`);
84
+ }
85
+ return err instanceof BenchInfraError || err.exitCode === 2 ? 2 : 2;
86
+ }
87
+ }
88
+
89
+ function tasksCommand(args) {
90
+ const pack = readFlag(args, '--pack') || undefined;
91
+ const tasks = taskMetadata({ pack });
92
+ if (hasFlag(args, '--json')) {
93
+ console.log(JSON.stringify({
94
+ schema: 'atris.bench.tasks.v1',
95
+ pack: pack || 'core-v1',
96
+ tasks,
97
+ }));
98
+ return 0;
99
+ }
100
+ for (const task of tasks) {
101
+ const py = task.needsPython ? ' needs-python' : '';
102
+ console.log(`${task.id} - ${task.title}${py}`);
103
+ }
104
+ return 0;
105
+ }
106
+
107
+ function packsCommand(args) {
108
+ const packs = packMetadata();
109
+ if (hasFlag(args, '--json')) {
110
+ console.log(JSON.stringify({
111
+ schema: 'atris.bench.packs.v1',
112
+ packs,
113
+ }));
114
+ return 0;
115
+ }
116
+ for (const pack of packs) {
117
+ const mark = pack.default ? ' default' : '';
118
+ console.log(`${pack.id} - ${pack.taskCount} tasks${mark}`);
119
+ }
120
+ return 0;
121
+ }
122
+
123
+ function resultsCommand(args) {
124
+ const last = Number(readFlag(args, '--last') || 0);
125
+ const results = readResultRecords({ stateRoot: process.cwd(), last });
126
+ if (hasFlag(args, '--json')) {
127
+ console.log(JSON.stringify({
128
+ schema: 'atris.bench.results.v1',
129
+ results,
130
+ }));
131
+ return 0;
132
+ }
133
+ if (!results.length) {
134
+ console.log('no bench results');
135
+ return 0;
136
+ }
137
+ for (const result of results) {
138
+ const label = result.label ? ` ${result.label}` : '';
139
+ const experiment = result.experiment ? ` experiment=${result.experiment}` : '';
140
+ console.log(`${result.started}${label}${experiment} ${result.summary}`);
141
+ }
142
+ return 0;
143
+ }
144
+
145
+ function reportCommand(args) {
146
+ const pack = readFlag(args, '--pack') || undefined;
147
+ const asJson = hasFlag(args, '--json');
148
+ try {
149
+ const report = buildBenchReport({ pack, stateRoot: process.cwd() });
150
+ if (asJson) {
151
+ console.log(JSON.stringify(report));
152
+ return 0;
153
+ }
154
+ console.log(renderBenchReportText(report));
155
+ return 0;
156
+ } catch (err) {
157
+ const message = err && err.message ? err.message : String(err);
158
+ if (asJson) {
159
+ console.log(JSON.stringify({
160
+ schema: 'atris.bench.error.v1',
161
+ error: message,
162
+ }));
163
+ } else {
164
+ console.error(`atris bench: ${message}`);
165
+ }
166
+ return 2;
167
+ }
168
+ }
169
+
170
+ async function benchCommand(args = []) {
171
+ const subcommand = args[0] || 'run';
172
+ const rest = args.slice(1);
173
+ if (subcommand === '--help' || subcommand === '-h' || subcommand === 'help') {
174
+ printHelp();
175
+ return 0;
176
+ }
177
+ if (subcommand === 'run') return runCommand(rest);
178
+ if (subcommand === 'tasks') return tasksCommand(rest);
179
+ if (subcommand === 'packs') return packsCommand(rest);
180
+ if (subcommand === 'results') return resultsCommand(rest);
181
+ if (subcommand === 'report') return reportCommand(rest);
182
+ printHelp();
183
+ return 2;
184
+ }
185
+
186
+ module.exports = {
187
+ benchCommand,
188
+ };
package/commands/brain.js CHANGED
@@ -231,6 +231,9 @@ function collectStateFileStats(stateDir) {
231
231
  const names = new Set(CORE_STATE_FILES);
232
232
  if (fs.existsSync(stateDir)) {
233
233
  for (const name of fs.readdirSync(stateDir).sort()) {
234
+ // usage.jsonl is command telemetry written by every dispatch, not brain
235
+ // state; counting it makes compile stats drift with invocation count.
236
+ if (name === 'usage.jsonl') continue;
234
237
  if (name.endsWith('.json') || name.endsWith('.jsonl')) names.add(name);
235
238
  }
236
239
  }