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
@@ -2,6 +2,7 @@ const fs = require('fs');
2
2
  const path = require('path');
3
3
  const { getLogPath, ensureLogDirectory, createLogFile } = require('../lib/journal');
4
4
  const { parseTodo, getTeamActivity } = require('../lib/todo');
5
+ const { clarify } = require('../lib/autoland');
5
6
 
6
7
  // Box drawing helpers
7
8
  const W = 64; // inner width
@@ -76,6 +77,50 @@ function readEndgameMeta(todoFile) {
76
77
  return { slug, horizon };
77
78
  }
78
79
 
80
+ function todoItemFromTaskRow(row) {
81
+ const metadata = row.metadata && typeof row.metadata === 'object' ? row.metadata : {};
82
+ return {
83
+ id: row.display_id || row.id,
84
+ title: row.title,
85
+ tag: row.tag || null,
86
+ tags: row.tag ? [row.tag] : [],
87
+ claimed: row.claimed_by || metadata.claimed || null,
88
+ stage: row.status === 'claimed' ? 'in_progress' : (metadata.stage || null),
89
+ verify: typeof metadata.verify === 'string' && metadata.verify.trim()
90
+ ? metadata.verify.trim()
91
+ : null,
92
+ _source: 'db',
93
+ };
94
+ }
95
+
96
+ function parseStatusTodo(todoFile) {
97
+ try {
98
+ const taskDb = require('../lib/task-db');
99
+ const { DatabaseSync } = require('node:sqlite');
100
+ const dbPath = taskDb.getDbPath();
101
+ if (!dbPath || !fs.existsSync(dbPath)) return parseTodo(todoFile);
102
+ const db = new DatabaseSync(dbPath, { readOnly: true });
103
+ try {
104
+ const workspaceRoot = taskDb.workspaceRoot();
105
+ const rows = taskDb.withTaskDisplayRefs(taskDb.listTasks(db, { workspaceRoot, limit: 500 }));
106
+ const todo = { backlog: [], inProgress: [], review: [], completed: [] };
107
+ for (const row of rows) {
108
+ const item = todoItemFromTaskRow(row);
109
+ if (row.status === 'open') todo.backlog.push(item);
110
+ else if (row.status === 'claimed') todo.inProgress.push(item);
111
+ else if (row.status === 'review') todo.review.push(item);
112
+ else if (row.status === 'done') todo.completed.push(item);
113
+ }
114
+ return todo;
115
+ } finally {
116
+ db.close();
117
+ }
118
+ } catch (e) {
119
+ if (process.env.ATRIS_DEBUG) console.error('[status] task db read failed:', e.message);
120
+ return parseTodo(todoFile);
121
+ }
122
+ }
123
+
79
124
  function statusAtris(isQuick = false, jsonMode = false, verbose = false) {
80
125
  const targetDir = path.join(process.cwd(), 'atris');
81
126
 
@@ -88,9 +133,9 @@ function statusAtris(isQuick = false, jsonMode = false, verbose = false) {
88
133
  process.exit(1);
89
134
  }
90
135
 
91
- // Parse TODO.md
136
+ // Load task board state.
92
137
  const todoFile = path.join(targetDir, 'TODO.md');
93
- const todo = parseTodo(todoFile);
138
+ const todo = parseStatusTodo(todoFile);
94
139
 
95
140
  // Read journal for inbox and completions
96
141
  const { logFile, dateFormatted } = getLogPath();
@@ -184,7 +229,7 @@ function statusAtris(isQuick = false, jsonMode = false, verbose = false) {
184
229
  if (endgame.slug) {
185
230
  where.push(`The active horizon is ${endgame.slug}.`);
186
231
  if (endgame.horizon) {
187
- where.push(...compactWrappedText(endgame.horizon, 74, 2));
232
+ where.push(...compactWrappedText(clarify(endgame.horizon), 74, 2));
188
233
  }
189
234
  } else {
190
235
  where.push('No active endgame is set.');
@@ -198,12 +243,12 @@ function statusAtris(isQuick = false, jsonMode = false, verbose = false) {
198
243
 
199
244
  const queueParts = [];
200
245
  if (todo.inProgress[0]) {
201
- queueParts.push(...compactWrappedText(`In progress: ${todo.inProgress[0].title}.`, 74, 2));
246
+ queueParts.push(...compactWrappedText(`In progress: ${clarify(todo.inProgress[0].title)}.`, 74, 2));
202
247
  } else {
203
248
  queueParts.push('In progress: none.');
204
249
  }
205
250
  if (todo.backlog[0]) {
206
- queueParts.push(...compactWrappedText(`Next backlog item: ${todo.backlog[0].title}.`, 74, 2));
251
+ queueParts.push(...compactWrappedText(`Next backlog item: ${clarify(todo.backlog[0].title)}.`, 74, 2));
207
252
  } else {
208
253
  queueParts.push('Next backlog item: none.');
209
254
  }