atris 3.74.29 → 3.75.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/atris/skills/calendar/SKILL.md +9 -0
- package/atris/skills/drive/SKILL.md +7 -0
- package/atris/skills/email-agent/SKILL.md +7 -0
- package/atris/skills/magic-inbox/SKILL.md +7 -0
- package/atris/skills/slides/SKILL.md +7 -0
- package/bin/atris.js +14 -2
- package/commands/engine.js +2 -2
- package/commands/integrations.js +539 -54
- package/commands/mission.js +2 -2
- package/commands/rating.js +14 -4
- package/commands/worktree.js +39 -12
- package/lib/fleet.js +545 -52
- package/lib/gm-season.js +31 -9
- package/lib/known-commands.js +1 -1
- package/lib/release-kind.js +31 -7
- package/lib/task-db.js +185 -26
- package/lib/worktree-space.js +4 -45
- package/package.json +1 -1
|
@@ -12,6 +12,15 @@ tags:
|
|
|
12
12
|
|
|
13
13
|
> Drop this in `~/.claude/skills/calendar/SKILL.md` and Claude Code becomes your calendar assistant.
|
|
14
14
|
|
|
15
|
+
|
|
16
|
+
## choosing a google account
|
|
17
|
+
|
|
18
|
+
Run `atris google accounts` to see connected accounts and defaults. Use `atris google connect [name]` for one sign-in, and add `--only mail,calendar,drive` to choose products. Use `atris google use <name-or-email>` to save a default, or add `--business <slug>` to choose the account for a business. Use `atris google disconnect <name-or-email> --approved` to disconnect after confirmation, with `--only` to remove selected products.
|
|
19
|
+
|
|
20
|
+
For direct api calls, pass `account_id` as a query parameter on reads and deletes, or in the json body on writes. Pass the business id or slug in the `X-Business-Id` header when working for a business. Calendar reads without an account include all accounts; `account_id=all` also requests all calendars. Calendar writes need one account. The old sign-in and api examples below still work on older servers.
|
|
21
|
+
|
|
22
|
+
For example, run `atris calendar today --account work --business <slug>` for one account in a business. Scoped calendar commands stop if the server cannot honor the choice. For `atris calendar search <query> --json`, check `partial`, `accounts`, and `errors` before treating the result as a complete schedule. Cached results keep these fields too.
|
|
23
|
+
|
|
15
24
|
## Bootstrap (ALWAYS Run First)
|
|
16
25
|
|
|
17
26
|
Before any calendar operation, run this bootstrap to ensure everything is set up:
|
|
@@ -13,6 +13,13 @@ tags:
|
|
|
13
13
|
|
|
14
14
|
> Drop this in `~/.claude/skills/drive/SKILL.md` and Claude Code becomes your Google Drive assistant.
|
|
15
15
|
|
|
16
|
+
|
|
17
|
+
## choosing a google account
|
|
18
|
+
|
|
19
|
+
Run `atris google accounts` to see connected accounts and defaults. Use `atris google connect [name]` for one sign-in, and add `--only mail,calendar,drive` to choose products. Use `atris google use <name-or-email>` to save a default, or add `--business <slug>` to choose the account for a business. Use `atris google disconnect <name-or-email> --approved` to disconnect after confirmation, with `--only` to remove selected products.
|
|
20
|
+
|
|
21
|
+
For direct api calls, pass `account_id` as a query parameter on reads and deletes, or in the json body on writes. Pass the business id or slug in the `X-Business-Id` header when working for a business. Calendar reads without an account include all accounts; `account_id=all` also requests all calendars. Calendar writes need one account. The old sign-in and api examples below still work on older servers.
|
|
22
|
+
|
|
16
23
|
## Bootstrap (ALWAYS Run First)
|
|
17
24
|
|
|
18
25
|
Before any Drive operation, run this bootstrap to ensure everything is set up:
|
|
@@ -12,6 +12,13 @@ tags:
|
|
|
12
12
|
|
|
13
13
|
> Drop this in `~/.claude/skills/email-agent/SKILL.md` and Claude Code becomes your email assistant.
|
|
14
14
|
|
|
15
|
+
|
|
16
|
+
## choosing a google account
|
|
17
|
+
|
|
18
|
+
Run `atris google accounts` to see connected accounts and defaults. Use `atris google connect [name]` for one sign-in, and add `--only mail,calendar,drive` to choose products. Use `atris google use <name-or-email>` to save a default, or add `--business <slug>` to choose the account for a business. Use `atris google disconnect <name-or-email> --approved` to disconnect after confirmation, with `--only` to remove selected products.
|
|
19
|
+
|
|
20
|
+
For direct api calls, pass `account_id` as a query parameter on reads and deletes, or in the json body on writes. Pass the business id or slug in the `X-Business-Id` header when working for a business. Calendar reads without an account include all accounts; `account_id=all` also requests all calendars. Calendar writes need one account. The old sign-in and api examples below still work on older servers.
|
|
21
|
+
|
|
15
22
|
## Bootstrap (ALWAYS Run First)
|
|
16
23
|
|
|
17
24
|
Before any email operation, run this bootstrap to ensure everything is set up:
|
|
@@ -12,6 +12,13 @@ tags:
|
|
|
12
12
|
|
|
13
13
|
You are an inbox agent. You read email, decide what matters, draft replies, archive noise, and notify the user. You do this using your own intelligence. No separate LLM calls needed. You ARE the model.
|
|
14
14
|
|
|
15
|
+
|
|
16
|
+
## choosing a google account
|
|
17
|
+
|
|
18
|
+
Run `atris google accounts` to see connected accounts and defaults. Use `atris google connect [name]` for one sign-in, and add `--only mail,calendar,drive` to choose products. Use `atris google use <name-or-email>` to save a default, or add `--business <slug>` to choose the account for a business. Use `atris google disconnect <name-or-email> --approved` to disconnect after confirmation, with `--only` to remove selected products.
|
|
19
|
+
|
|
20
|
+
For direct api calls, pass `account_id` as a query parameter on reads and deletes, or in the json body on writes. Pass the business id or slug in the `X-Business-Id` header when working for a business. Calendar reads without an account include all accounts; `account_id=all` also requests all calendars. Calendar writes need one account. The old sign-in and api examples below still work on older servers.
|
|
21
|
+
|
|
15
22
|
## Bootstrap (ALWAYS Run First)
|
|
16
23
|
|
|
17
24
|
```bash
|
|
@@ -12,6 +12,13 @@ tags:
|
|
|
12
12
|
|
|
13
13
|
> Drop this in `~/.claude/skills/slides/SKILL.md` and Claude Code becomes your presentation assistant.
|
|
14
14
|
|
|
15
|
+
|
|
16
|
+
## choosing a google account
|
|
17
|
+
|
|
18
|
+
Run `atris google accounts` to see connected accounts and defaults. Use `atris google connect [name]` for one sign-in, and add `--only mail,calendar,drive` to choose products. Use `atris google use <name-or-email>` to save a default, or add `--business <slug>` to choose the account for a business. Use `atris google disconnect <name-or-email> --approved` to disconnect after confirmation, with `--only` to remove selected products.
|
|
19
|
+
|
|
20
|
+
For direct api calls, pass `account_id` as a query parameter on reads and deletes, or in the json body on writes. Pass the business id or slug in the `X-Business-Id` header when working for a business. Calendar reads without an account include all accounts; `account_id=all` also requests all calendars. Calendar writes need one account. The old sign-in and api examples below still work on older servers.
|
|
21
|
+
|
|
15
22
|
## Prerequisites
|
|
16
23
|
|
|
17
24
|
Google Slides shares OAuth with Google Drive. If Drive is connected, Slides works automatically. If not:
|
package/bin/atris.js
CHANGED
|
@@ -778,6 +778,7 @@ function showHelpAll() {
|
|
|
778
778
|
console.log(' supabase - supabase cli wrapper (doctor, auth, status/db/functions)');
|
|
779
779
|
console.log(' linear - linear cli wrapper (doctor, auth, issue list/create/view/update)');
|
|
780
780
|
console.log(' stripe - stripe cli wrapper (doctor, auth, listen/trigger/products)');
|
|
781
|
+
console.log(' google - manage google accounts and defaults');
|
|
781
782
|
console.log(' gmail - email commands (connect, inbox, read, archive, accounts, use)');
|
|
782
783
|
console.log(' calendar - Calendar commands (today, week)');
|
|
783
784
|
console.log(' twitter - Twitter commands (post)');
|
|
@@ -3052,7 +3053,8 @@ if (command === 'guide') {
|
|
|
3052
3053
|
// Scratch folders refuse every gmail verb the same way as slack/inbox.
|
|
3053
3054
|
// Read verbs also run from a project folder (atris/, no business.json).
|
|
3054
3055
|
const GMAIL_READ_VERBS = new Set(['inbox', 'list', 'read', 'triage', 'verdicts', 'accounts']);
|
|
3055
|
-
const
|
|
3056
|
+
const scopedBusiness = mailbox.args.some((arg, index) => (arg === '--business' && mailbox.args[index + 1] && !mailbox.args[index + 1].startsWith('-')) || (arg.startsWith('--business=') && arg.length > 11));
|
|
3057
|
+
const gate = scopedBusiness ? { ok: true, args: mailbox.args } : requireAccountBound(
|
|
3056
3058
|
mailbox.args.filter((arg) => arg !== '--account'),
|
|
3057
3059
|
{ read: GMAIL_READ_VERBS.has(mailbox.args[0]) },
|
|
3058
3060
|
);
|
|
@@ -3067,12 +3069,22 @@ if (command === 'guide') {
|
|
|
3067
3069
|
.then(() => exitAfterStdoutDrain(process.exitCode || 0))
|
|
3068
3070
|
.catch((err) => { console.error(`✗ Error: ${err.message || err}`); process.exit(1); });
|
|
3069
3071
|
}
|
|
3072
|
+
} else if (command === 'google') {
|
|
3073
|
+
const raw = process.argv.slice(3);
|
|
3074
|
+
const helpOnly = raw.some((arg) => ['--help', '-h', 'help'].includes(arg));
|
|
3075
|
+
const scopedBusiness = raw.some((arg, index) => (arg === '--business' && raw[index + 1] && !raw[index + 1].startsWith('-')) || (arg.startsWith('--business=') && arg.length > 11));
|
|
3076
|
+
const gate = helpOnly || scopedBusiness ? { ok: true, args: raw } : requireAccountBound(raw, { read: !raw[0] || raw[0] === 'accounts' || raw[0] === '--json' });
|
|
3077
|
+
if (!gate.ok) { process.exit(refuseAccountGlobal()); return; }
|
|
3078
|
+
const { googleCommand } = require('../commands/integrations');
|
|
3079
|
+
googleCommand(gate.args[0], ...gate.args.slice(1))
|
|
3080
|
+
.then((status) => exitAfterStdoutDrain(status || process.exitCode || 0))
|
|
3081
|
+
.catch((err) => { console.error(err.message || err); process.exit(1); });
|
|
3070
3082
|
} else if (command === 'calendar') {
|
|
3071
3083
|
const { calendarCommand } = require('../commands/integrations');
|
|
3072
3084
|
const subcommand = process.argv[3];
|
|
3073
3085
|
const args = process.argv.slice(4);
|
|
3074
3086
|
calendarCommand(subcommand, ...args)
|
|
3075
|
-
.then(() => exitAfterStdoutDrain(0))
|
|
3087
|
+
.then((status) => exitAfterStdoutDrain(status || 0))
|
|
3076
3088
|
.catch((err) => { console.error(`✗ Error: ${err.message || err}`); process.exit(1); });
|
|
3077
3089
|
} else if (command === 'twitter') {
|
|
3078
3090
|
{
|
package/commands/engine.js
CHANGED
|
@@ -87,7 +87,7 @@ const {
|
|
|
87
87
|
setEngineOverrides,
|
|
88
88
|
setEngineHealth,
|
|
89
89
|
} = require('../lib/engine-registry');
|
|
90
|
-
const { DISPATCH_CAPABLE, runDispatchFlight } = require('../lib/fleet');
|
|
90
|
+
const { DISPATCH_CAPABLE, runDispatchFlight, flightExitCode } = require('../lib/fleet');
|
|
91
91
|
const {
|
|
92
92
|
buildReadOnlyEngineInvocation,
|
|
93
93
|
runEngineAskCommand,
|
|
@@ -2366,7 +2366,7 @@ function runDispatchCommand(args, root) {
|
|
|
2366
2366
|
...(pin.roster_prep ? { prep: pin.roster_prep } : {}),
|
|
2367
2367
|
}).then((flight) => {
|
|
2368
2368
|
if (json) console.log(JSON.stringify(flight, null, 2));
|
|
2369
|
-
return flight
|
|
2369
|
+
return flightExitCode(flight);
|
|
2370
2370
|
});
|
|
2371
2371
|
}
|
|
2372
2372
|
|