atris 3.61.0 → 3.62.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.
- package/README.md +37 -5
- package/atris/skills/engines/SKILL.md +9 -9
- package/bin/atris.js +1 -0
- package/commands/autoland.js +36 -5
- package/commands/autopilot.js +105 -6
- package/commands/engine.js +96 -21
- package/commands/host.js +56 -4
- package/commands/land.js +129 -8
- package/commands/member.js +33 -8
- package/commands/mission.js +112 -3
- package/commands/one-lap.js +14 -10
- package/commands/stream.js +56 -22
- package/commands/team.js +82 -10
- package/commands/worktree.js +39 -0
- package/commands/youtube.js +36 -26
- package/lib/engine-ask.js +112 -9
- package/lib/engine-registry.js +283 -39
- package/lib/fleet.js +444 -26
- package/lib/functional-owner.js +15 -6
- package/lib/host.js +296 -170
- package/lib/member-engine.js +11 -1
- package/lib/member-park.js +138 -0
- package/lib/member-scaffold.js +37 -0
- package/lib/roster-markdown.js +1 -1
- package/lib/roster-prep.js +289 -0
- package/lib/roster-runs.js +389 -0
- package/lib/roster-suggest.js +145 -0
- package/lib/router-brain.js +111 -3
- package/lib/self-drive.js +26 -2
- package/lib/state-detection.js +3 -3
- package/lib/task-db.js +38 -3
- package/lib/team-lineup.js +7 -2
- package/lib/todo.js +1 -1
- package/lib/wish-audit.js +1 -1
- package/package.json +1 -1
- package/scripts/det/cpu-hotspots.js +216 -0
- package/scripts/det/ytnotes +105 -19
- package/scripts/det/ytquote-repair.js +18 -4
- package/templates/members/host/MEMBER.md +5 -3
- package/templates/members/host/MISSION.md +1 -1
- package/templates/members/host/skills/host/SKILL.md +64 -16
package/lib/functional-owner.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const escapeRegExp = require('./escape-regexp');
|
|
6
|
+
const { isMemberParked } = require('./member-park');
|
|
6
7
|
|
|
7
8
|
const ENGINE_OWNER_IDS = new Set([
|
|
8
9
|
'atris-2-fast',
|
|
@@ -87,11 +88,17 @@ function listWorkspaceMemberSlugs(root) {
|
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
|
|
91
|
+
// Members owner inference may pick: every member minus parked ones. An
|
|
92
|
+
// explicit --owner still reaches a parked member.
|
|
93
|
+
function assignableMemberSlugs(root, existingMembers) {
|
|
94
|
+
return new Set([...existingMembers].filter(slug => !isMemberParked(root || process.cwd(), slug)));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function firstAvailableFunctionalOwner(candidates, existingMembers, assignable = existingMembers) {
|
|
91
98
|
for (const candidate of candidates) {
|
|
92
99
|
const owner = normalizeOwnerSlug(candidate);
|
|
93
100
|
if (!owner) continue;
|
|
94
|
-
if (existingMembers.size === 0 ||
|
|
101
|
+
if (existingMembers.size === 0 || assignable.has(owner)) return owner;
|
|
95
102
|
}
|
|
96
103
|
return null;
|
|
97
104
|
}
|
|
@@ -120,6 +127,7 @@ function proposedMemberSlugFromTask({ title, tag }) {
|
|
|
120
127
|
function resolveFunctionalOwner({ requestedOwner, title, tag, note, goal, root, fallbackOwners } = {}) {
|
|
121
128
|
const requested = normalizeOwnerSlug(requestedOwner);
|
|
122
129
|
const existingMembers = listWorkspaceMemberSlugs(root);
|
|
130
|
+
const assignable = assignableMemberSlugs(root, existingMembers);
|
|
123
131
|
const highSignalText = [title, note, goal].filter(Boolean).join(' ').toLowerCase();
|
|
124
132
|
const tagText = tag && tag !== true ? String(tag).toLowerCase() : '';
|
|
125
133
|
const text = [highSignalText, tagText].filter(Boolean).join(' ');
|
|
@@ -144,7 +152,8 @@ function resolveFunctionalOwner({ requestedOwner, title, tag, note, goal, root,
|
|
|
144
152
|
|
|
145
153
|
const exact = firstAvailableFunctionalOwner(
|
|
146
154
|
FUNCTIONAL_MEMBER_TOPICS.filter(topic => text.includes(topic.owner)).map(topic => topic.owner),
|
|
147
|
-
existingMembers
|
|
155
|
+
existingMembers,
|
|
156
|
+
assignable
|
|
148
157
|
);
|
|
149
158
|
if (exact) {
|
|
150
159
|
const remapped = Boolean(requested && isEngineOwner(requested) && requested !== exact);
|
|
@@ -170,7 +179,7 @@ function resolveFunctionalOwner({ requestedOwner, title, tag, note, goal, root,
|
|
|
170
179
|
}))
|
|
171
180
|
.filter(row => row.score > 0)
|
|
172
181
|
.sort((a, b) => b.score - a.score);
|
|
173
|
-
const inferred = firstAvailableFunctionalOwner(scored.map(row => row.owner), existingMembers);
|
|
182
|
+
const inferred = firstAvailableFunctionalOwner(scored.map(row => row.owner), existingMembers, assignable);
|
|
174
183
|
if (inferred) {
|
|
175
184
|
const remapped = Boolean(requested && isEngineOwner(requested) && requested !== inferred);
|
|
176
185
|
return {
|
|
@@ -184,8 +193,8 @@ function resolveFunctionalOwner({ requestedOwner, title, tag, note, goal, root,
|
|
|
184
193
|
};
|
|
185
194
|
}
|
|
186
195
|
|
|
187
|
-
const fallback = firstAvailableFunctionalOwner(fallbackOwners || ['architect', 'task-planner', 'mission-lead', 'validator'], existingMembers)
|
|
188
|
-
|| Array.from(
|
|
196
|
+
const fallback = firstAvailableFunctionalOwner(fallbackOwners || ['architect', 'task-planner', 'mission-lead', 'validator'], existingMembers, assignable)
|
|
197
|
+
|| Array.from(assignable).find(owner => !isEngineOwner(owner))
|
|
189
198
|
|| 'architect';
|
|
190
199
|
const remapped = Boolean(requested && requested !== fallback);
|
|
191
200
|
return {
|