atris 3.15.30 → 3.15.31

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/commands/gm.js CHANGED
@@ -5,6 +5,7 @@ const os = require('os');
5
5
  const path = require('path');
6
6
 
7
7
  const AGENTXP_LEADERBOARD_URL = 'https://api.atris.ai/api/agentxp/leaderboard';
8
+ const AGENTXP_GLOBAL_SYNC_RULE = 'Use the owner-provided sync token first; fallback is atris login before sync.';
8
9
 
9
10
  const ROLE_PLAYERS_TO_IGNORE = new Set([
10
11
  'game-manager',
@@ -265,6 +266,7 @@ function compactTask(task) {
265
266
 
266
267
  function globalSyncCommands(player) {
267
268
  return [
269
+ `atris xp sync --local --as ${player} --token <owner-provided-token>`,
268
270
  'atris login',
269
271
  `atris xp sync --local --as ${player}`,
270
272
  ];
@@ -330,7 +332,7 @@ function gmState(args = []) {
330
332
  review_queue: reviewQueue,
331
333
  next_commands: commands,
332
334
  xp_rule: 'GM can route missions and review proof, but AgentXP still lands only after human accept.',
333
- global_sync_rule: 'Run atris login once before syncing to the hosted AgentXP leaderboard.',
335
+ global_sync_rule: AGENTXP_GLOBAL_SYNC_RULE,
334
336
  leaderboard_url: AGENTXP_LEADERBOARD_URL,
335
337
  };
336
338
  }
@@ -365,7 +367,7 @@ function render(state) {
365
367
 
366
368
  console.log('');
367
369
  console.log('XP rule: no proof, no AgentXP; accept/revise stays human-gated.');
368
- console.log('Global sync: run atris login once before hosted leaderboard sync.');
370
+ console.log('Global sync: use owner token first; fallback to atris login before hosted leaderboard sync.');
369
371
  console.log(`Leaderboard: ${state.leaderboard_url}`);
370
372
  console.log('');
371
373
  console.log('Next commands:');
package/commands/play.js CHANGED
@@ -7,6 +7,7 @@ const { spawnSync } = require('child_process');
7
7
  const { getSessionProfile, loadCredentials } = require('../utils/auth');
8
8
 
9
9
  const AGENTXP_LEADERBOARD_URL = 'https://api.atris.ai/api/agentxp/leaderboard';
10
+ const AGENTXP_GLOBAL_SYNC_RULE = 'Use the owner-provided sync token first; fallback is atris login before sync.';
10
11
 
11
12
  function showHelp() {
12
13
  console.log('');
@@ -256,6 +257,7 @@ function starterMissionPrompt(player) {
256
257
 
257
258
  function globalSyncCommands(player) {
258
259
  return [
260
+ `atris xp sync --local --as ${player} --token <owner-provided-token>`,
259
261
  'atris login',
260
262
  `atris xp sync --local --as ${player}`,
261
263
  ];
@@ -395,7 +397,7 @@ function modeState(args = []) {
395
397
  prompt: latestMessage(events),
396
398
  } : null,
397
399
  xp_rule: 'AgentXP lands only after proof is ready and a human accepts the task.',
398
- global_sync_rule: 'Run atris login once before syncing to the hosted AgentXP leaderboard.',
400
+ global_sync_rule: AGENTXP_GLOBAL_SYNC_RULE,
399
401
  leaderboard_url: AGENTXP_LEADERBOARD_URL,
400
402
  next_commands: commandList,
401
403
  };
@@ -429,7 +431,7 @@ function render(state) {
429
431
  console.log('');
430
432
  console.log('Win condition: real artifact + verifier + human accept.');
431
433
  console.log('XP rule: no proof, no AgentXP; accept/revise stays human-gated.');
432
- console.log('Global sync: run atris login once before hosted leaderboard sync.');
434
+ console.log('Global sync: use owner token first; fallback to atris login before hosted leaderboard sync.');
433
435
  console.log(`Leaderboard: ${state.leaderboard_url}`);
434
436
  console.log('');
435
437
  console.log('Next commands:');
package/commands/xp.js CHANGED
@@ -1496,6 +1496,7 @@ function buildAgentXpSyncPacket(args = []) {
1496
1496
  const receiptsCount = asNumber(projection.receipts_count);
1497
1497
  const eligible = verifiedProjection(projection) && receiptsCount > 0 && totalXp > 0;
1498
1498
  const publicXp = publicAgentXp(totalXp);
1499
+ const workspaceRootHash = sha256(workspaces.map(item => item.workspace_root_hash || item.name).sort().join(':'));
1499
1500
  const entry = {
1500
1501
  user_id: player,
1501
1502
  username: player,
@@ -1517,7 +1518,7 @@ function buildAgentXpSyncPacket(args = []) {
1517
1518
  const packet = {
1518
1519
  schema: 'atris.agentxp_sync_packet.v1',
1519
1520
  generated_at: new Date().toISOString(),
1520
- workspace_root_hash: sha256(workspaces.map(item => item.workspace_root_hash || item.name).sort().join(':')),
1521
+ workspace_root_hash: workspaceRootHash,
1521
1522
  computer: projection.workspace_name || workspaces[0]?.name || 'local',
1522
1523
  operator: player,
1523
1524
  privacy: {
@@ -1537,8 +1538,20 @@ function buildAgentXpSyncPacket(args = []) {
1537
1538
  integrity_status: projection.integrity?.status || projection.integrity_status || 'unknown',
1538
1539
  ledger_head_hash: projection.integrity?.head_hash || null,
1539
1540
  },
1541
+ gm_projection: {
1542
+ schema: 'atris.gm_xp_projection.v1',
1543
+ workspace_root_hash: workspaceRootHash,
1544
+ operator: player,
1545
+ player_score: {
1546
+ agent_xp: totalXp,
1547
+ career_xp: totalXp,
1548
+ leaderboard_eligible: eligible,
1549
+ verified_receipts: receiptsCount,
1550
+ },
1551
+ },
1540
1552
  user_leaderboard: {
1541
1553
  schema: 'atris.agentxp_user_leaderboard.v1',
1554
+ workspace_root_hash: workspaceRootHash,
1542
1555
  score_name: AGENT_XP_LABEL,
1543
1556
  entries: [entry],
1544
1557
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atris",
3
- "version": "3.15.30",
3
+ "version": "3.15.31",
4
4
  "main": "bin/atris.js",
5
5
  "bin": {
6
6
  "atris": "bin/atris.js",