atris 3.16.0 → 3.16.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/README.md +1 -0
- package/bin/atris.js +48 -15
- package/commands/autopilot.js +431 -9
- package/commands/compile.js +569 -0
- package/commands/probe.js +366 -0
- package/commands/recap.js +203 -0
- package/commands/skill.js +6 -2
- package/commands/task.js +30 -7
- package/lib/state-detection.js +41 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,6 +32,7 @@ Then read the workspace's `atris/atris.md` and follow it exactly. `atris.md` is
|
|
|
32
32
|
- A strict `plan -> do -> review` loop
|
|
33
33
|
- Daily logs, task tracking, feature packs, and project memory
|
|
34
34
|
- Skills, team members, integrations, and cloud sync when you need them
|
|
35
|
+
- A plain-English answer to "what did my AI actually do?" — run `atris recap` (add `--share` for a paste-ready summary backed by receipts)
|
|
35
36
|
|
|
36
37
|
## Critical Files
|
|
37
38
|
|
package/bin/atris.js
CHANGED
|
@@ -328,6 +328,7 @@ function showHelp() {
|
|
|
328
328
|
console.log(' radar - Show live agents joined with tasks, missions, and worktrees');
|
|
329
329
|
console.log(' ctop - Show a process-first live agent CPU/memory view');
|
|
330
330
|
console.log(' status - See local work and completions (`atris status <business>` for remote)');
|
|
331
|
+
console.log(' recap - What your AI team did, in plain English (--share for paste-ready)');
|
|
331
332
|
console.log(' xp - Show Career XP and contribution graph');
|
|
332
333
|
console.log(' analytics - Show recent productivity from journals');
|
|
333
334
|
console.log(' search - Search journal history (atris search <keyword>)');
|
|
@@ -357,6 +358,13 @@ function showHelp() {
|
|
|
357
358
|
console.log(' experiments run <slug> - Execute a pack or record an Endstate receipt');
|
|
358
359
|
console.log(' experiments benchmark [m] - Run validate/runtime experiment benchmarks');
|
|
359
360
|
console.log('');
|
|
361
|
+
console.log('Compile loop (learn like AI, run like code):');
|
|
362
|
+
console.log(' compile record <name> - Append an execution record (--input/--output)');
|
|
363
|
+
console.log(' compile build <name> - Compile records into a deterministic run.js');
|
|
364
|
+
console.log(' compile backtest <name> - Replay all records, score accuracy vs gate');
|
|
365
|
+
console.log(' compile promote <name> - Activate (gate: accuracy >= threshold)');
|
|
366
|
+
console.log(' compile exec <name> - Run the compiled process token-free');
|
|
367
|
+
console.log('');
|
|
360
368
|
console.log('Quick commands:');
|
|
361
369
|
console.log(' atris - Load context and start (natural language)');
|
|
362
370
|
console.log(' next - Auto-advance to next step');
|
|
@@ -766,9 +774,9 @@ if (command === '2' && ['fast', 'pro'].includes(String(firstCommandArg || '').to
|
|
|
766
774
|
const knownCommands = ['init', 'log', 'now', 'radar', 'ctop', 'status', 'analytics', 'visualize', 'brain', 'brainstorm', 'autopilot', 'run', 'plan', 'do', 'review', 'release',
|
|
767
775
|
'activate', '_activate', 'agent', 'chat', 'console', 'serve', 'login', 'logout', 'whoami', 'switch', 'use', 'accounts', '_resolve', '_profile-email', '_switch-session', 'shell-init', 'update', 'upgrade', 'version', 'help', 'next', 'atris',
|
|
768
776
|
'clean', 'verify', 'search', 'skill', 'member', 'codex-goal', 'app', 'apps', 'learn', 'lesson', 'plugin', 'experiments', 'receipt', 'proof', 'openclaw', 'pull', 'push', 'live', 'align', 'terminal', 'computer', 'diff', 'business', 'sync',
|
|
769
|
-
'ingest', 'query', 'lint', 'loop', 'task', 'mission', 'worktree', 'aeo', 'improve', 'xp', 'play', 'gm', 'x',
|
|
777
|
+
'ingest', 'query', 'lint', 'loop', 'task', 'mission', 'probe', 'worktree', 'aeo', 'improve', 'xp', 'play', 'gm', 'x', 'recap',
|
|
770
778
|
'gmail', 'calendar', 'twitter', 'slack', 'imessage', 'integrations', 'setup', 'clean-workspace', 'cw',
|
|
771
|
-
'fork', 'browse', 'publish', 'sleep', 'wake', 'feedback', 'errors', 'wiki', 'code-review', 'cr', 'soul', 'fleet'];
|
|
779
|
+
'fork', 'browse', 'publish', 'sleep', 'wake', 'feedback', 'errors', 'wiki', 'code-review', 'cr', 'soul', 'fleet', 'compile'];
|
|
772
780
|
|
|
773
781
|
// Check if command is an atris.md spec file - triggers welcome visualization
|
|
774
782
|
function isSpecFile(cmd) {
|
|
@@ -1041,7 +1049,7 @@ async function interactiveEntry(userInput) {
|
|
|
1041
1049
|
|
|
1042
1050
|
// ASCII Welcome Visualization
|
|
1043
1051
|
function showWelcomeVisualization() {
|
|
1044
|
-
const {
|
|
1052
|
+
const { getTaskCounts } = require('../lib/state-detection');
|
|
1045
1053
|
const cwd = process.cwd();
|
|
1046
1054
|
const atrisDir = path.join(cwd, 'atris');
|
|
1047
1055
|
const projectName = path.basename(cwd);
|
|
@@ -1050,6 +1058,8 @@ function showWelcomeVisualization() {
|
|
|
1050
1058
|
let filesIndexed = 0;
|
|
1051
1059
|
let tasksInBacklog = 0;
|
|
1052
1060
|
let tasksInProgress = 0;
|
|
1061
|
+
let tasksInReview = 0;
|
|
1062
|
+
let tasksCertified = 0;
|
|
1053
1063
|
let journalEntries = 0;
|
|
1054
1064
|
let hasMap = false;
|
|
1055
1065
|
let isInitialized = fs.existsSync(atrisDir);
|
|
@@ -1065,15 +1075,15 @@ function showWelcomeVisualization() {
|
|
|
1065
1075
|
filesIndexed = fileRefs ? fileRefs.length : 0;
|
|
1066
1076
|
}
|
|
1067
1077
|
|
|
1068
|
-
//
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1078
|
+
// Task lane counts — DB truth first, TODO.md parse as fallback
|
|
1079
|
+
try {
|
|
1080
|
+
const counts = getTaskCounts(atrisDir);
|
|
1081
|
+
tasksInBacklog = counts.backlog;
|
|
1082
|
+
tasksInProgress = counts.active;
|
|
1083
|
+
tasksInReview = counts.review;
|
|
1084
|
+
tasksCertified = counts.reviewCertified;
|
|
1085
|
+
} catch {
|
|
1086
|
+
// Silently fail - show 0 tasks if reading fails
|
|
1077
1087
|
}
|
|
1078
1088
|
|
|
1079
1089
|
// Count journal entries today
|
|
@@ -1122,13 +1132,19 @@ function showWelcomeVisualization() {
|
|
|
1122
1132
|
console.log(` │ 📄 Spec: atris.md v${CLI_VERSION.padEnd(18)}│`);
|
|
1123
1133
|
console.log(` │ 🗺️ Map: ${hasMap ? (filesIndexed + ' files indexed').padEnd(26) : 'not generated yet'.padEnd(26)}│`);
|
|
1124
1134
|
console.log(` │ 📋 Tasks: ${(tasksInBacklog + ' backlog, ' + tasksInProgress + ' active').padEnd(26)}│`);
|
|
1135
|
+
if (tasksInReview > 0) {
|
|
1136
|
+
const reviewText = tasksCertified > 0
|
|
1137
|
+
? `${tasksInReview} waiting (${tasksCertified} certified)`
|
|
1138
|
+
: `${tasksInReview} waiting`;
|
|
1139
|
+
console.log(` │ ⏳ Review: ${reviewText.padEnd(26)}│`);
|
|
1140
|
+
}
|
|
1125
1141
|
console.log(` │ 📝 Journal: ${(journalEntries + ' entries today').padEnd(26)}│`);
|
|
1126
1142
|
console.log(' │ │');
|
|
1127
1143
|
console.log(' │ ┌──────────────────────────────────┐ │');
|
|
1128
1144
|
console.log(' │ │ MAP.md ←──── YOU ARE HERE │ │');
|
|
1129
1145
|
console.log(' │ │ ↓ │ │');
|
|
1130
|
-
const taskText = `${tasksInBacklog}
|
|
1131
|
-
console.log(` │ │ TODO.md ←── ${taskText.padEnd(
|
|
1146
|
+
const taskText = `${tasksInBacklog} task${tasksInBacklog === 1 ? '' : 's'} waiting`;
|
|
1147
|
+
console.log(` │ │ TODO.md ←── ${taskText.padEnd(20)}│ │`);
|
|
1132
1148
|
console.log(' │ │ ↓ │ │');
|
|
1133
1149
|
console.log(' │ │ navigator → executor → validator│ │');
|
|
1134
1150
|
console.log(' │ └──────────────────────────────────┘ │');
|
|
@@ -1136,7 +1152,11 @@ function showWelcomeVisualization() {
|
|
|
1136
1152
|
console.log(' └──────────────────────────────────────────┘');
|
|
1137
1153
|
}
|
|
1138
1154
|
console.log('');
|
|
1139
|
-
|
|
1155
|
+
if (tasksCertified > 0) {
|
|
1156
|
+
console.log(` Ready. ${tasksCertified} certified await accept — run 'atris task reviews'.`);
|
|
1157
|
+
} else {
|
|
1158
|
+
console.log(` Ready. Run 'atris plan' to start.`);
|
|
1159
|
+
}
|
|
1140
1160
|
console.log('');
|
|
1141
1161
|
}
|
|
1142
1162
|
|
|
@@ -1165,6 +1185,11 @@ if (command === 'init') {
|
|
|
1165
1185
|
Promise.resolve(require('../commands/mission').missionCommand(process.argv.slice(3)))
|
|
1166
1186
|
.then(() => process.exit(0))
|
|
1167
1187
|
.catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
|
|
1188
|
+
} else if (command === 'probe') {
|
|
1189
|
+
// Chat-lane probe (TRR-22): one real /atris2/turn over the full tool relay.
|
|
1190
|
+
Promise.resolve(require('../commands/probe').probeCommand(process.argv.slice(3)))
|
|
1191
|
+
.then((code) => process.exit(code || 0))
|
|
1192
|
+
.catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
|
|
1168
1193
|
} else if (command === 'worktree') {
|
|
1169
1194
|
Promise.resolve(require('../commands/worktree').worktreeCommand(process.argv.slice(3)))
|
|
1170
1195
|
.then((code) => process.exit(code || 0))
|
|
@@ -1234,6 +1259,8 @@ if (command === 'init') {
|
|
|
1234
1259
|
process.exit(0);
|
|
1235
1260
|
}
|
|
1236
1261
|
require('../commands/now').nowAtris(args);
|
|
1262
|
+
} else if (command === 'recap') {
|
|
1263
|
+
require('../commands/recap').recapAtris(process.argv.slice(3));
|
|
1237
1264
|
} else if (command === 'activate') {
|
|
1238
1265
|
const args = process.argv.slice(3);
|
|
1239
1266
|
if (args.includes('--help') || args.includes('-h') || args[0] === 'help') {
|
|
@@ -1746,6 +1773,12 @@ if (command === 'init') {
|
|
|
1746
1773
|
const subcommand = process.argv[3];
|
|
1747
1774
|
const args = process.argv.slice(4);
|
|
1748
1775
|
require('../commands/experiments').experimentsCommand(subcommand, ...args);
|
|
1776
|
+
} else if (command === 'compile') {
|
|
1777
|
+
const subcommand = process.argv[3];
|
|
1778
|
+
const args = process.argv.slice(4);
|
|
1779
|
+
Promise.resolve(require('../commands/compile').compileCommand(subcommand, ...args))
|
|
1780
|
+
.then(() => process.exit(process.exitCode || 0))
|
|
1781
|
+
.catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
|
|
1749
1782
|
} else if (command === 'receipt' || command === 'proof' || command === 'openclaw') {
|
|
1750
1783
|
const subcommand = process.argv[3];
|
|
1751
1784
|
const args = process.argv.slice(4);
|