atris 3.15.13 → 3.15.22
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/AGENTS.md +84 -8
- package/README.md +5 -1
- package/atris/AGENTS.md +46 -1
- package/atris/CLAUDE.md +36 -1
- package/atris/GEMINI.md +14 -1
- package/atris/atris.md +12 -1
- package/atris/atrisDev.md +3 -2
- package/atris/context/README.md +11 -0
- package/atris/features/company-brain-sync/validate.md +5 -5
- package/atris/learnings.jsonl +1 -0
- package/atris/policies/atris-design.md +2 -0
- package/atris/skills/aeo/SKILL.md +2 -2
- package/atris/skills/atris/SKILL.md +15 -62
- package/atris/skills/design/SKILL.md +2 -0
- package/atris/skills/imessage/SKILL.md +19 -2
- package/atris/skills/loop/SKILL.md +6 -5
- package/atris/skills/magic-inbox/SKILL.md +1 -1
- package/atris/team/_template/MEMBER.md +23 -1
- package/atris/team/brainstormer/START_HERE.md +6 -0
- package/atris/team/executor/MEMBER.md +13 -0
- package/atris/team/executor/START_HERE.md +6 -0
- package/atris/team/launcher/START_HERE.md +6 -0
- package/atris/team/mission-lead/MEMBER.md +39 -0
- package/atris/team/mission-lead/MISSION.md +33 -0
- package/atris/team/mission-lead/START_HERE.md +6 -0
- package/atris/team/navigator/MEMBER.md +11 -0
- package/atris/team/navigator/START_HERE.md +6 -0
- package/atris/team/opus-overnight/MEMBER.md +39 -0
- package/atris/team/opus-overnight/MISSION.md +61 -0
- package/atris/team/opus-overnight/START_HERE.md +6 -0
- package/atris/team/opus-overnight/STEERING.md +35 -0
- package/atris/team/researcher/START_HERE.md +6 -0
- package/atris/team/validator/MEMBER.md +26 -6
- package/atris/team/validator/START_HERE.md +6 -0
- package/atris/wiki/concepts/agent-activation-contract.md +79 -0
- package/atris/wiki/concepts/workspace-initialization-contract.md +73 -0
- package/atris/wiki/index.md +27 -0
- package/atris/wiki/sources/atris-labs-2026-05-10.txt +17 -0
- package/atris/wiki/sources/atris-labs-goals-2026-05-10.txt +15 -0
- package/atris/wiki/sources/atrisos-generative-ui-product-surface-2026-05-10.txt +10 -0
- package/atris/wiki/sources/jack-dorsey-2026-05-10.txt +12 -0
- package/atris.md +49 -13
- package/bin/atris.js +660 -22
- package/commands/activate.js +12 -3
- package/commands/aeo.js +1 -1
- package/commands/align.js +10 -10
- package/commands/analytics.js +9 -4
- package/commands/app.js +2 -0
- package/commands/apps.js +276 -0
- package/commands/auth.js +1 -1
- package/commands/autopilot.js +74 -5
- package/commands/brain.js +536 -61
- package/commands/brainstorm.js +12 -12
- package/commands/business-sync.js +142 -24
- package/commands/clean.js +9 -6
- package/commands/codex-goal.js +311 -0
- package/commands/errors.js +11 -1
- package/commands/feedback.js +55 -17
- package/commands/fork.js +2 -2
- package/commands/gm.js +376 -0
- package/commands/init.js +80 -3
- package/commands/integrations.js +524 -0
- package/commands/learn.js +25 -16
- package/commands/lesson.js +41 -0
- package/commands/lifecycle.js +2 -2
- package/commands/member.js +2416 -9
- package/commands/mission.js +1776 -0
- package/commands/now.js +48 -7
- package/commands/play.js +425 -0
- package/commands/publish.js +2 -1
- package/commands/pull.js +72 -29
- package/commands/push.js +199 -17
- package/commands/review.js +51 -13
- package/commands/skill.js +2 -2
- package/commands/soul.js +19 -13
- package/commands/status.js +6 -1
- package/commands/sync.js +5 -4
- package/commands/task.js +1041 -147
- package/commands/terminal.js +5 -5
- package/commands/verify.js +7 -5
- package/commands/visualize.js +7 -0
- package/commands/wiki.js +53 -16
- package/commands/workflow.js +298 -54
- package/commands/workspace-clean.js +1 -1
- package/commands/worktree.js +468 -0
- package/commands/xp.js +1608 -0
- package/lib/manifest.js +34 -4
- package/lib/scorecard.js +3 -2
- package/lib/task-db.js +408 -27
- package/lib/todo-fallback.js +28 -2
- package/lib/todo.js +5 -3
- package/package.json +23 -2
- package/utils/update-check.js +51 -1
package/lib/manifest.js
CHANGED
|
@@ -52,7 +52,7 @@ function buildManifest(files, commitHash, metadata = {}) {
|
|
|
52
52
|
last_sync: new Date().toISOString(),
|
|
53
53
|
last_commit: commitHash || null,
|
|
54
54
|
workspace_root: metadata.workspaceRoot || null,
|
|
55
|
-
files,
|
|
55
|
+
files: filterSyncFiles(files),
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -62,11 +62,33 @@ function buildManifest(files, commitHash, metadata = {}) {
|
|
|
62
62
|
*/
|
|
63
63
|
const SKIP_DIRS = new Set([
|
|
64
64
|
'node_modules', '__pycache__', '.git', 'venv', '.venv',
|
|
65
|
-
'lost+found', '.cache', '.atris',
|
|
65
|
+
'lost+found', '.cache', '.atris', '.claude', '.cursor', '.next',
|
|
66
|
+
'.vscode', 'dist', 'build', 'coverage', 'tmp', 'temp',
|
|
66
67
|
// Defense-in-depth: macOS/system dirs that should never be scanned as
|
|
67
68
|
// part of any atris workspace, even if outputDir is accidentally wide.
|
|
68
69
|
'Library', 'Applications', 'System',
|
|
69
70
|
]);
|
|
71
|
+
const SYNC_ALLOWED_DOT_DIRS = new Set(['.github']);
|
|
72
|
+
|
|
73
|
+
function isIgnoredSyncPath(filePath) {
|
|
74
|
+
const parts = String(filePath || '').replace(/\\/g, '/').split('/').filter(Boolean);
|
|
75
|
+
return parts.some((part, index) => {
|
|
76
|
+
if (SKIP_DIRS.has(part)) return true;
|
|
77
|
+
return index < parts.length - 1 && part.startsWith('.') && !SYNC_ALLOWED_DOT_DIRS.has(part);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function filterSyncFiles(files = {}) {
|
|
82
|
+
return Object.fromEntries(
|
|
83
|
+
Object.entries(files || {}).filter(([filePath]) => !isIgnoredSyncPath(filePath))
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function isSyncTextBuffer(buffer) {
|
|
88
|
+
if (!Buffer.isBuffer(buffer)) return false;
|
|
89
|
+
if (buffer.includes(0)) return false;
|
|
90
|
+
return Buffer.from(buffer.toString('utf8'), 'utf8').equals(buffer);
|
|
91
|
+
}
|
|
70
92
|
|
|
71
93
|
function computeLocalHashes(localDir) {
|
|
72
94
|
const files = {};
|
|
@@ -79,17 +101,19 @@ function computeLocalHashes(localDir) {
|
|
|
79
101
|
return;
|
|
80
102
|
}
|
|
81
103
|
for (const entry of entries) {
|
|
82
|
-
if (entry.name.startsWith('.')) continue;
|
|
83
104
|
const fullPath = path.join(dir, entry.name);
|
|
84
105
|
const relFromRoot = path.relative(localDir, fullPath);
|
|
85
106
|
if (entry.isDirectory()) {
|
|
86
107
|
if (SKIP_DIRS.has(entry.name)) continue;
|
|
108
|
+
if (entry.name.startsWith('.') && !SYNC_ALLOWED_DOT_DIRS.has(entry.name)) continue;
|
|
87
109
|
walk(fullPath);
|
|
88
110
|
} else if (entry.isFile()) {
|
|
111
|
+
if (entry.name.startsWith('.')) continue;
|
|
89
112
|
const relPath = '/' + path.relative(localDir, fullPath);
|
|
90
113
|
try {
|
|
91
114
|
// Hash raw bytes to match warm runner's _hash_bytes(data)
|
|
92
115
|
const rawBytes = fs.readFileSync(fullPath);
|
|
116
|
+
if (!isSyncTextBuffer(rawBytes)) continue;
|
|
93
117
|
const hash = crypto.createHash('sha256').update(rawBytes).digest('hex');
|
|
94
118
|
files[relPath] = { hash, size: rawBytes.length };
|
|
95
119
|
} catch {
|
|
@@ -114,6 +138,9 @@ function computeLocalHashes(localDir) {
|
|
|
114
138
|
* Each array contains file path strings.
|
|
115
139
|
*/
|
|
116
140
|
function threeWayCompare(localFiles, remoteFiles, manifest) {
|
|
141
|
+
localFiles = filterSyncFiles(localFiles);
|
|
142
|
+
remoteFiles = filterSyncFiles(remoteFiles);
|
|
143
|
+
|
|
117
144
|
const result = {
|
|
118
145
|
toPull: [],
|
|
119
146
|
toPush: [],
|
|
@@ -147,7 +174,7 @@ function threeWayCompare(localFiles, remoteFiles, manifest) {
|
|
|
147
174
|
return result;
|
|
148
175
|
}
|
|
149
176
|
|
|
150
|
-
const base = manifest.files;
|
|
177
|
+
const base = filterSyncFiles(manifest.files);
|
|
151
178
|
const allPaths = new Set([
|
|
152
179
|
...Object.keys(localFiles),
|
|
153
180
|
...Object.keys(remoteFiles),
|
|
@@ -226,4 +253,7 @@ module.exports = {
|
|
|
226
253
|
threeWayCompare,
|
|
227
254
|
getManifestPath,
|
|
228
255
|
SKIP_DIRS,
|
|
256
|
+
isIgnoredSyncPath,
|
|
257
|
+
filterSyncFiles,
|
|
258
|
+
isSyncTextBuffer,
|
|
229
259
|
};
|
package/lib/scorecard.js
CHANGED
|
@@ -280,9 +280,10 @@ function detectEndgameCompletion(atrisDir) {
|
|
|
280
280
|
|
|
281
281
|
const slug = endgameSectionMatch[1];
|
|
282
282
|
|
|
283
|
-
// Check if there are any endgame-tagged tasks
|
|
283
|
+
// Check if there are any endgame-tagged tasks still before acceptance.
|
|
284
284
|
const hasActiveEndgame = todo.backlog.some(t => t.tag === 'endgame')
|
|
285
|
-
|| todo.inProgress.some(t => t.tag === 'endgame')
|
|
285
|
+
|| todo.inProgress.some(t => t.tag === 'endgame')
|
|
286
|
+
|| (todo.review || []).some(t => t.tag === 'endgame');
|
|
286
287
|
|
|
287
288
|
return {
|
|
288
289
|
complete: !hasActiveEndgame,
|