atris 3.52.0 → 3.55.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/FOR_AGENTS.md +7 -0
- package/README.md +1 -1
- package/atris/policies/ANTISLOP.md +2 -1
- package/atris/skills/copy-editor/SKILL.md +2 -1
- package/atris/skills/design/SKILL.md +1 -1
- package/atris/skills/engines/SKILL.md +8 -7
- package/atris/skills/x-search/SKILL.md +24 -22
- package/atris/skills/youtube/SKILL.md +89 -40
- package/atris/team/_template/SOUL.md +40 -0
- package/atris/team/validator/MEMBER.md +1 -2
- package/ax +592 -91
- package/bin/atris +21 -0
- package/bin/atris.js +580 -378
- package/commands/api-key.js +170 -0
- package/commands/auth.js +453 -43
- package/commands/autoland.js +3 -1
- package/commands/autopilot-front.js +58 -11
- package/commands/avail.js +5 -4
- package/commands/balance.js +55 -0
- package/commands/bench.js +29 -1
- package/commands/brain.js +63 -12
- package/commands/brainstorm.js +18 -0
- package/commands/business.js +149 -1
- package/commands/chat-scan.js +17 -4
- package/commands/close.js +5 -1
- package/commands/computer.js +2 -2
- package/commands/doctor.js +174 -0
- package/commands/dream.js +7 -0
- package/commands/drill.js +34 -2
- package/commands/engine.js +47 -35
- package/commands/errors.js +58 -8
- package/commands/experiments.js +14 -0
- package/commands/feedback.js +61 -2
- package/commands/fleet-report.js +27 -7
- package/commands/fleet.js +98 -11
- package/commands/founder.js +60 -21
- package/commands/human-missions.js +79 -4
- package/commands/improve.js +54 -4
- package/commands/init.js +68 -92
- package/commands/install.js +40 -0
- package/commands/integrations.js +399 -30
- package/commands/interview.js +8 -0
- package/commands/land.js +48 -17
- package/commands/learn.js +29 -4
- package/commands/log.js +51 -0
- package/commands/member.js +68 -10
- package/commands/mission.js +339 -74
- package/commands/now.js +25 -6
- package/commands/orb.js +97 -2
- package/commands/pack.js +83 -9
- package/commands/playbook.js +381 -0
- package/commands/plugin.js +16 -0
- package/commands/radar.js +96 -40
- package/commands/recap.js +128 -21
- package/commands/release.js +102 -2
- package/commands/review.js +5 -10
- package/commands/revisions.js +55 -0
- package/commands/run-front.js +12 -4
- package/commands/scout.js +12 -1
- package/commands/search.js +123 -28
- package/commands/sign.js +2 -2
- package/commands/signup.js +12 -3
- package/commands/site-deploy.js +17 -4
- package/commands/site.js +2 -2
- package/commands/skill-eval.js +289 -0
- package/commands/skill.js +56 -6
- package/commands/social.js +603 -0
- package/commands/spaceship.js +69 -6
- package/commands/stream.js +8 -1
- package/commands/study.js +32 -19
- package/commands/sync.js +28 -22
- package/commands/task.js +418 -60
- package/commands/teach.js +72 -63
- package/commands/terminal.js +25 -9
- package/commands/topup.js +88 -0
- package/commands/truth.js +52 -6
- package/commands/usage.js +91 -0
- package/commands/verify.js +3 -2
- package/commands/version.js +3 -1
- package/commands/voice.js +5 -1
- package/commands/who.js +69 -11
- package/commands/wiki.js +7 -4
- package/commands/wish.js +76 -5
- package/commands/workflow.js +327 -145
- package/commands/worktree.js +1 -0
- package/commands/write.js +5 -0
- package/commands/x-search.js +340 -0
- package/commands/xp.js +5 -1
- package/commands/youtube.js +551 -33
- package/lib/account-bound.js +47 -0
- package/lib/auto-accept-certified.js +10 -2
- package/lib/auto-lessons.js +186 -0
- package/lib/autoland.js +4 -2
- package/lib/chat-log-scan.js +7 -4
- package/lib/cli-json.js +77 -0
- package/lib/cli-scope.js +26 -0
- package/lib/codex-flight.js +1 -0
- package/lib/conductor-artifacts.js +1 -1
- package/lib/context-gatherer.js +11 -0
- package/lib/developer-api.js +116 -0
- package/lib/engine-ask.js +11 -3
- package/lib/engine-registry.js +32 -7
- package/lib/feedback-triage.js +274 -0
- package/lib/first-minute.js +398 -0
- package/lib/fleet.js +115 -34
- package/lib/functional-owner.js +22 -0
- package/lib/known-commands.js +31 -5
- package/lib/member-scaffold.js +197 -0
- package/lib/mission-ledger-compact.js +127 -0
- package/lib/mission-root.js +4 -2
- package/lib/mission-runtime-loop.js +30 -2
- package/lib/next-moves.js +34 -34
- package/lib/noninteractive.js +88 -0
- package/lib/permission-grants.js +10 -1
- package/lib/policy-lessons.js +4 -1
- package/lib/revision-metric.js +279 -0
- package/lib/runner-command.js +5 -4
- package/lib/scratch-root.js +48 -0
- package/lib/skill-eval-gate.js +249 -0
- package/lib/task-db.js +22 -2
- package/lib/task-proof.js +75 -9
- package/lib/task-receipt.js +5 -1
- package/lib/verifier-quality.js +69 -0
- package/lib/wish-audit.js +2 -2
- package/lib/wish-delegate.js +10 -1
- package/lib/workspace-scaffold.js +270 -0
- package/package.json +4 -2
- package/scripts/det/checklist-score.js +191 -0
- package/scripts/det/ytsearch +31 -0
- package/scripts/outbound-artifact-gate.js +227 -0
- package/utils/update-check.js +15 -0
package/commands/wiki.js
CHANGED
|
@@ -158,7 +158,8 @@ async function runChat(business, prompt, token) {
|
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
function printLocalPrompt(title, prompt, wikiRoot, details = []) {
|
|
161
|
+
function printLocalPrompt(title, prompt, wikiRoot, details = [], modeLabel = 'PROMPT ONLY') {
|
|
162
|
+
console.log(modeLabel);
|
|
162
163
|
console.log('');
|
|
163
164
|
console.log(title);
|
|
164
165
|
console.log(`Target: ${wikiRoot}`);
|
|
@@ -185,16 +186,17 @@ function printWikiHelp(scope = null) {
|
|
|
185
186
|
console.log('Usage: atris wiki ingest [--private|--cloud] [business] <path>');
|
|
186
187
|
console.log('');
|
|
187
188
|
console.log('Stage source files into the local wiki context pack.');
|
|
189
|
+
console.log('This command stages files then prints a coding-agent prompt (ACTION TAKEN + PROMPT).');
|
|
188
190
|
} else if (normalized === 'query') {
|
|
189
191
|
console.log('Usage: atris query "question"');
|
|
190
192
|
console.log('Usage: atris wiki query [--private|--cloud] [business] "question"');
|
|
191
193
|
console.log('');
|
|
192
|
-
console.log('Build a local or cloud wiki query prompt.');
|
|
194
|
+
console.log('Build a local or cloud wiki query prompt (PROMPT ONLY).');
|
|
193
195
|
} else if (normalized === 'lint') {
|
|
194
196
|
console.log('Usage: atris lint');
|
|
195
197
|
console.log('Usage: atris wiki lint [--private|--cloud] [business]');
|
|
196
198
|
console.log('');
|
|
197
|
-
console.log('Build a local or cloud wiki lint prompt.');
|
|
199
|
+
console.log('Build a local or cloud wiki lint prompt (PROMPT ONLY).');
|
|
198
200
|
} else if (normalized === 'consolidate') {
|
|
199
201
|
console.log('Usage: atris wiki consolidate [--private]');
|
|
200
202
|
console.log('');
|
|
@@ -327,7 +329,7 @@ async function wikiIngest(mode, slug, sourceValue) {
|
|
|
327
329
|
`Pack: ${staged.packPath}`,
|
|
328
330
|
`Manifest: ${staged.manifestPath}`,
|
|
329
331
|
`Sources: ${staged.promptSource}`,
|
|
330
|
-
]);
|
|
332
|
+
], 'ACTION TAKEN');
|
|
331
333
|
return;
|
|
332
334
|
}
|
|
333
335
|
|
|
@@ -586,6 +588,7 @@ async function wikiCommand(subcommand, ...args) {
|
|
|
586
588
|
console.error('Cloud loop is not implemented yet. Run local `atris loop` first.');
|
|
587
589
|
process.exit(1);
|
|
588
590
|
}
|
|
591
|
+
console.log('ACTION TAKEN');
|
|
589
592
|
const { loopAtris } = require('./loop');
|
|
590
593
|
await loopAtris(cleanArgs);
|
|
591
594
|
break;
|
package/commands/wish.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const { isFreshWorkspace, speakFirstMinute } = require('../lib/first-minute');
|
|
3
4
|
const {
|
|
4
5
|
analyzeWishParts,
|
|
5
6
|
auditWish,
|
|
@@ -42,6 +43,23 @@ const { enqueueCloudMission, VALID_CLOUD_LANES } = require('../lib/cloud-mission
|
|
|
42
43
|
const { printWishStats } = require('../lib/wish-stats');
|
|
43
44
|
const { parseVerifyCommand } = require('../lib/auto-accept-certified');
|
|
44
45
|
|
|
46
|
+
const WISH_DESK_VERBS = new Set([
|
|
47
|
+
'show', 'close', 'status', 'get', 'list', 'ls', 'board',
|
|
48
|
+
'rewards', 'stats', 'improve', 'lessons', 'again',
|
|
49
|
+
'answer', 'grant', 'review', 'say',
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
function printWishReceptionist(root = process.cwd()) {
|
|
53
|
+
const fresh = isFreshWorkspace(root);
|
|
54
|
+
const code = speakFirstMinute({ root, fresh });
|
|
55
|
+
if (!fresh) printReviewNudges(root);
|
|
56
|
+
return code;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function isWishDeskVerb(token) {
|
|
60
|
+
return WISH_DESK_VERBS.has(String(token || '').trim());
|
|
61
|
+
}
|
|
62
|
+
|
|
45
63
|
function showHelp() {
|
|
46
64
|
console.log('');
|
|
47
65
|
console.log('Usage: atris wish "<plain sentence>" [--engine <id>] [--verify "<cmd>"] [--as builder] [--metric "<name><op><target>"] [--json] [--no-mission]');
|
|
@@ -52,6 +70,7 @@ function showHelp() {
|
|
|
52
70
|
console.log(' atris wish board');
|
|
53
71
|
console.log(' atris wish answer "<your answer>" [--engine <id>] [--json] [--no-mission]');
|
|
54
72
|
console.log(' atris wish grant <n> "<answer>" [--engine <id>] [--json] [--no-mission]');
|
|
73
|
+
console.log(' atris wish grant <n> "<answer>" --cloud [--lane fast|pro|max] [--agent <id>]');
|
|
55
74
|
console.log(' atris wish say "<note>" [wish-id]');
|
|
56
75
|
console.log(' atris wish close <n|id> [<n|id> ...]');
|
|
57
76
|
console.log(' atris wish again <id> "<tweak text>" [--engine <id>]');
|
|
@@ -283,6 +302,46 @@ async function runCloudWish(text, root, options, deps = {}) {
|
|
|
283
302
|
}
|
|
284
303
|
}
|
|
285
304
|
|
|
305
|
+
// A granted wish already has a number and an id, so the cloud receipt updates
|
|
306
|
+
// that row instead of opening a second one.
|
|
307
|
+
async function runCloudWishGrant(wish, text, root, options, deps = {}) {
|
|
308
|
+
try {
|
|
309
|
+
const mission = await enqueueCloudMission({
|
|
310
|
+
text,
|
|
311
|
+
lane: options.lane,
|
|
312
|
+
...(options.agentId ? { agentId: options.agentId } : {}),
|
|
313
|
+
}, deps);
|
|
314
|
+
const ts = deps.ts || stampIso();
|
|
315
|
+
const record = {
|
|
316
|
+
id: wish.id,
|
|
317
|
+
n: wish.n || undefined,
|
|
318
|
+
ts,
|
|
319
|
+
text: wish.text,
|
|
320
|
+
status: 'delegated',
|
|
321
|
+
dispatched_at: ts,
|
|
322
|
+
cloud: true,
|
|
323
|
+
task_id: mission.task_id,
|
|
324
|
+
lane: mission.lane || options.lane,
|
|
325
|
+
answers: wish.answers || undefined,
|
|
326
|
+
parent_id: wish.parent_id || undefined,
|
|
327
|
+
decomposed_part: wish.decomposed_part || undefined,
|
|
328
|
+
};
|
|
329
|
+
appendWishRecord(root, record);
|
|
330
|
+
const log = deps.log || console.log;
|
|
331
|
+
if (options.asJson) {
|
|
332
|
+
log(JSON.stringify({ ok: true, action: 'cloud_wish_granted', mission, wish: record }, null, 2));
|
|
333
|
+
return 0;
|
|
334
|
+
}
|
|
335
|
+
log('i answered the question and sent the wish to cloud work, and we know it is queued because the cloud accepted it.');
|
|
336
|
+
log(`task_id: ${record.task_id}`);
|
|
337
|
+
log(`watch: atris mission status --cloud ${record.task_id} --watch`);
|
|
338
|
+
return 0;
|
|
339
|
+
} catch (error) {
|
|
340
|
+
(deps.error || console.error)(error.message || String(error));
|
|
341
|
+
return error.exitCode || 1;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
286
345
|
function resolveVerifyOption(options) {
|
|
287
346
|
if (options.verifyMissing) return 'wish --verify needs a command.';
|
|
288
347
|
if (!options.verifyRaw) return null;
|
|
@@ -355,15 +414,18 @@ function printLessons(root) {
|
|
|
355
414
|
|
|
356
415
|
function wishCommand(args = [], deps = {}) {
|
|
357
416
|
const first = String(args[0] || '').trim();
|
|
358
|
-
if (!first) {
|
|
359
|
-
showHelp();
|
|
360
|
-
printReviewNudges(process.cwd());
|
|
361
|
-
return 2;
|
|
362
|
-
}
|
|
363
417
|
if (first === '--help' || first === '-h' || first === 'help') {
|
|
364
418
|
showHelp();
|
|
365
419
|
return 0;
|
|
366
420
|
}
|
|
421
|
+
const root = process.cwd();
|
|
422
|
+
// Empty folder talks like bare atris. A leftover sentence is not a
|
|
423
|
+
// wish desk. After init, a plain sentence still files. A cloud wish
|
|
424
|
+
// runs remotely and needs no local workspace, so it skips the gate.
|
|
425
|
+
const wantsCloud = args.includes('--cloud');
|
|
426
|
+
if (!first || (isFreshWorkspace(root) && !isWishDeskVerb(first) && !wantsCloud)) {
|
|
427
|
+
return printWishReceptionist(root);
|
|
428
|
+
}
|
|
367
429
|
if (first === 'show') {
|
|
368
430
|
return printWishShow(process.cwd(), args[1]);
|
|
369
431
|
}
|
|
@@ -417,6 +479,15 @@ function wishCommand(args = [], deps = {}) {
|
|
|
417
479
|
}
|
|
418
480
|
if (first === 'grant') {
|
|
419
481
|
const options = wishOptions(args);
|
|
482
|
+
if (options.cloud) {
|
|
483
|
+
const optionError = cloudWishOptionError(args, options);
|
|
484
|
+
if (optionError) {
|
|
485
|
+
(deps.error || console.error)(optionError);
|
|
486
|
+
return 2;
|
|
487
|
+
}
|
|
488
|
+
options.cloudDispatch = (answeredWish, auditText, root) =>
|
|
489
|
+
runCloudWishGrant(answeredWish, auditText, root, options, deps);
|
|
490
|
+
}
|
|
420
491
|
return grantWish(options.positionals, process.cwd(), options);
|
|
421
492
|
}
|
|
422
493
|
if (first === 'review') {
|