@phnx-labs/agents-cli 1.22.32 → 1.22.33
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/CHANGELOG.md +6 -0
- package/dist/bin/agents +0 -0
- package/dist/commands/sessions-browser.js +2 -2
- package/dist/commands/sessions.js +22 -12
- package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
- package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
- package/dist/lib/session/team-filter.d.ts +11 -0
- package/dist/lib/session/team-filter.js +10 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.22.33
|
|
4
|
+
|
|
5
|
+
- **Release tags are annotated with the folded changelog notes.** `scripts/release.sh` now creates `v<version>` as an annotated tag whose message is `Release <version>` plus the body of `.changelog/<version>.md` (the same notes that already become the release PR body). Agents keep writing one fragment under `.changelog/next/`; there is no separate tag-description channel. The already-published missing-tag recovery path uses the same helper with `--force`. Source: `apps/cli/scripts/release.sh`.
|
|
6
|
+
|
|
7
|
+
`agents sessions --routines` once again opens the routine picker across every working directory instead of an empty current-repository session browser.
|
|
8
|
+
|
|
3
9
|
## 1.22.32
|
|
4
10
|
|
|
5
11
|
- **Routines validate execution context before activation and fire once per schedule slot (RUSH-2290).** A routine selects one execution `project` plus a portable `cwd`; add/edit save proven blockers paused, durable slot and active-run claims prevent duplicate or overlapping launches, and every blocked/skipped/pre-spawn attempt remains visible without requiring a session transcript. Source: `apps/cli/src/lib/routine-context.ts`, `apps/cli/src/lib/routine-readiness.ts`, `apps/cli/src/lib/runner.ts`.
|
package/dist/bin/agents
CHANGED
|
Binary file
|
|
@@ -18,7 +18,7 @@ import { discoverSessions } from '../lib/session/discover.js';
|
|
|
18
18
|
import { gatherRemoteList } from '../lib/session/remote-list.js';
|
|
19
19
|
import { resolveVersionAliasLoose } from '../lib/versions.js';
|
|
20
20
|
import { AGENTS } from '../lib/agents.js';
|
|
21
|
-
import { enrichTeamOrigins, safeTeamText } from '../lib/session/team-filter.js';
|
|
21
|
+
import { enrichTeamOrigins, safeTeamText, shouldShowTeamSessions } from '../lib/session/team-filter.js';
|
|
22
22
|
import { listBookmarks, toggleBookmark } from '../lib/session/bookmarks.js';
|
|
23
23
|
import { machineId, normalizeHost } from '../lib/session/sync/config.js';
|
|
24
24
|
import { buildPreview } from './sessions-picker.js';
|
|
@@ -280,7 +280,7 @@ async function fetchRawPool(f, self, local, hosts, fixedFilters = false) {
|
|
|
280
280
|
origin: f.routine ? 'routine' : undefined,
|
|
281
281
|
skill: f.skill,
|
|
282
282
|
plugin: f.plugin,
|
|
283
|
-
excludeTeamOrigin: !f
|
|
283
|
+
excludeTeamOrigin: !shouldShowTeamSessions(f),
|
|
284
284
|
// A team filter reaches back past the usual browse window, so the pool it
|
|
285
285
|
// draws from has to as well — otherwise the newest 500 rows decide which
|
|
286
286
|
// teams exist.
|
|
@@ -33,7 +33,7 @@ import { stringWidth, truncateToWidth, padToWidth, terminalWidth } from '../lib/
|
|
|
33
33
|
import { inferSessionState } from '../lib/session/state.js';
|
|
34
34
|
import { discoverSessions, queryIndexedSessions, countSessionsInScope, resolveSessionById, isCompleteSessionId, looksLikeSessionId, searchContentIndex, getSessionRoots, scopeToManaged } from '../lib/session/discover.js';
|
|
35
35
|
import { findSessionsById, querySessions, getSessionById } from '../lib/session/db.js';
|
|
36
|
-
import { filterTeamSessions, safeTeamText, groupSessionsByTeam, NO_TEAM_GROUP_KEY, } from '../lib/session/team-filter.js';
|
|
36
|
+
import { filterTeamSessions, shouldShowTeamSessions, safeTeamText, groupSessionsByTeam, NO_TEAM_GROUP_KEY, } from '../lib/session/team-filter.js';
|
|
37
37
|
import { parseSession } from '../lib/session/parse.js';
|
|
38
38
|
import { runRemoteSessions, buildForwardedArgs, ensureWholeIndex } from '../lib/session/remote.js';
|
|
39
39
|
import { formatRelativeTime, formatCompactAge, sessionAgeParts } from '../lib/session/relative-time.js';
|
|
@@ -1520,6 +1520,11 @@ export function hasNoBrowserDisqualifyingFlags(options, query) {
|
|
|
1520
1520
|
!options.skill &&
|
|
1521
1521
|
!options.plugin &&
|
|
1522
1522
|
!options.sort &&
|
|
1523
|
+
// --routine without a name owns a two-stage picker (routine -> run ->
|
|
1524
|
+
// session), and a named routine owns the run-grouped overview. The generic
|
|
1525
|
+
// browser can only flatten routine sessions into its ordinary row list, so
|
|
1526
|
+
// routing this flag there silently bypasses both routine-specific views.
|
|
1527
|
+
!options.routine &&
|
|
1523
1528
|
!options.artifacts &&
|
|
1524
1529
|
options.artifact === undefined &&
|
|
1525
1530
|
// --cloud lists a provider's tasks, not the transcript index, and
|
|
@@ -2293,6 +2298,11 @@ limitSource) {
|
|
|
2293
2298
|
// silently returns nothing for any team older than that — so the flag widens its
|
|
2294
2299
|
// own scope, the way --all does, unless the caller set an explicit --limit.
|
|
2295
2300
|
const wantsWholeTeam = !!options.inTeam;
|
|
2301
|
+
// A routine is not tied to the shell's cwd: its archived sessions retain the
|
|
2302
|
+
// working directory in which the scheduled agent actually ran. Scope the
|
|
2303
|
+
// routine catalog across directories so invoking it from ~/.agents/.system,
|
|
2304
|
+
// a project repo, or $HOME yields the same routine history.
|
|
2305
|
+
const wantsWholeRoutine = !!options.routine;
|
|
2296
2306
|
// `--limit` has a commander default, so an untouched flag still arrives as a
|
|
2297
2307
|
// string and truthiness can't tell it from a typed one. Commander records where
|
|
2298
2308
|
// each value came from, which is the only signal that distinguishes an explicit
|
|
@@ -2301,7 +2311,7 @@ limitSource) {
|
|
|
2301
2311
|
const userSetLimit = limitSource === 'cli' || limitSource === 'env';
|
|
2302
2312
|
const limit = wantsOverview
|
|
2303
2313
|
? OVERVIEW_POOL_LIMIT
|
|
2304
|
-
: parseInt(userSetLimit ? options.limit : wantsWholeTeam ? String(WHOLE_TEAM_POOL_LIMIT) : DEFAULT_LIMIT, 10);
|
|
2314
|
+
: parseInt(userSetLimit ? options.limit : wantsWholeTeam || wantsWholeRoutine ? String(WHOLE_TEAM_POOL_LIMIT) : DEFAULT_LIMIT, 10);
|
|
2305
2315
|
if (toolEvidenceMode && (!Number.isSafeInteger(limit) || limit < 1 || limit > TOOL_QUERY_MAX_RESULT_SESSIONS)) {
|
|
2306
2316
|
console.error(chalk.red(`Tool search --limit must be from 1 to ${TOOL_QUERY_MAX_RESULT_SESSIONS}.`));
|
|
2307
2317
|
process.exitCode = 1;
|
|
@@ -2311,7 +2321,7 @@ limitSource) {
|
|
|
2311
2321
|
// --since still narrows. Non-overview keeps the prior interactive-30d default.
|
|
2312
2322
|
const since = wantsOverview
|
|
2313
2323
|
? options.since
|
|
2314
|
-
: (options.since ?? (isInteractive && !options.all && !wantsWholeTeam ? '30d' : undefined));
|
|
2324
|
+
: (options.since ?? (isInteractive && !options.all && !wantsWholeTeam && !wantsWholeRoutine ? '30d' : undefined));
|
|
2315
2325
|
const toolSpansDevices = toolEvidenceMode
|
|
2316
2326
|
&& (options.fleet || (options.host?.length ?? 0) > 0);
|
|
2317
2327
|
const toolSortError = toolSearchFleetSortError(options.sort, toolSpansDevices);
|
|
@@ -2335,12 +2345,12 @@ limitSource) {
|
|
|
2335
2345
|
// --in-team spans directories by construction: a team's teammates run in
|
|
2336
2346
|
// their own worktrees, so scoping to the current cwd hides most of the
|
|
2337
2347
|
// lineage the flag exists to show.
|
|
2338
|
-
all: pathFilter ? undefined : options.all || wantsWholeTeam || toolSpansDevices,
|
|
2348
|
+
all: pathFilter ? undefined : options.all || wantsWholeTeam || wantsWholeRoutine || toolSpansDevices,
|
|
2339
2349
|
cwd: process.cwd(),
|
|
2340
2350
|
// Default overview scopes to the current repo SUBTREE (prefix match), so a
|
|
2341
2351
|
// monorepo shows its sub-projects grouped instead of collapsing to the one
|
|
2342
2352
|
// exact-cwd project. `--all` clears the prefix and spans the whole index.
|
|
2343
|
-
cwdPrefix: pathFilter ?? (wantsOverview && !options.all && !wantsWholeTeam && !toolSpansDevices ? process.cwd() : undefined),
|
|
2353
|
+
cwdPrefix: pathFilter ?? (wantsOverview && !options.all && !wantsWholeTeam && !wantsWholeRoutine && !toolSpansDevices ? process.cwd() : undefined),
|
|
2344
2354
|
project: options.project,
|
|
2345
2355
|
since,
|
|
2346
2356
|
until: options.until,
|
|
@@ -2373,7 +2383,7 @@ limitSource) {
|
|
|
2373
2383
|
const readOptions = {
|
|
2374
2384
|
...scope,
|
|
2375
2385
|
limit,
|
|
2376
|
-
excludeTeamOrigin: !options
|
|
2386
|
+
excludeTeamOrigin: !shouldShowTeamSessions(options),
|
|
2377
2387
|
onProgress: tracker.onProgress,
|
|
2378
2388
|
includeUnmanaged: options.unmanaged,
|
|
2379
2389
|
onHiddenUnmanaged: (n) => { hiddenUnmanaged = n; },
|
|
@@ -2390,7 +2400,7 @@ limitSource) {
|
|
|
2390
2400
|
// meta.json in ~/.agents/teams/agents whose is_team_origin flag was
|
|
2391
2401
|
// never set (legacy rows). Keep the in-memory pass so those are still
|
|
2392
2402
|
// enriched/hidden.
|
|
2393
|
-
const { visible: visibleSessions } = filterTeamSessions(sessions,
|
|
2403
|
+
const { visible: visibleSessions } = filterTeamSessions(sessions, shouldShowTeamSessions(options));
|
|
2394
2404
|
sessions = visibleSessions;
|
|
2395
2405
|
// --in-team spans both ends of the lineage, so it can't be one SQL predicate:
|
|
2396
2406
|
// the orchestrator matches on the scan-derived `spawnedTeam` column, while a
|
|
@@ -2458,7 +2468,7 @@ limitSource) {
|
|
|
2458
2468
|
}
|
|
2459
2469
|
// Under --in-team the visible list is one team, so the whole-index team-origin
|
|
2460
2470
|
// count would be a non-sequitur next to it.
|
|
2461
|
-
const hiddenCount = options
|
|
2471
|
+
const hiddenCount = shouldShowTeamSessions(options) || options.inTeam
|
|
2462
2472
|
? 0
|
|
2463
2473
|
: countSessionsInScope({ ...scope, onlyTeamOrigin: true });
|
|
2464
2474
|
// A typed routine scope must apply before smart ID routing. Otherwise an ID
|
|
@@ -4607,9 +4617,9 @@ export function registerSessionsCommands(program) {
|
|
|
4607
4617
|
# teammate row [<team>/<handle>]. --in-team narrows to one team's lineage.
|
|
4608
4618
|
agents sessions --in-team redesign --teams
|
|
4609
4619
|
|
|
4610
|
-
#
|
|
4611
|
-
agents sessions --routine
|
|
4612
|
-
agents sessions --routine nightly-review
|
|
4620
|
+
# Pick a routine across every directory, then open one of its run sessions
|
|
4621
|
+
agents sessions --routine
|
|
4622
|
+
agents sessions --routine nightly-review
|
|
4613
4623
|
agents sessions 2026-07-21T10-30-00-000Z
|
|
4614
4624
|
|
|
4615
4625
|
# Export for analysis
|
|
@@ -4657,7 +4667,7 @@ export function registerSessionsCommands(program) {
|
|
|
4657
4667
|
- --first and --last are mutually exclusive.
|
|
4658
4668
|
- A filter flag (--include/--exclude/--first/--last) without --markdown/--json defaults to --markdown output.
|
|
4659
4669
|
- --cloud sources from Rush Cloud captured runs instead of local disk.
|
|
4660
|
-
- --routine [name] shows transcripts archived from routine runs. On a TTY, omit the name to pick a routine; a name accepts exact, substring, or unambiguous typo matches. --routines is an alias. Routine rows also resolve by run id.
|
|
4670
|
+
- --routine [name] spans every directory and shows transcripts archived from routine runs. On a TTY, omit the name to pick a routine; a name accepts exact, substring, or unambiguous typo matches. --routines is an alias. Routine rows also resolve by run id.
|
|
4661
4671
|
- Without --teams, team-spawned sessions are hidden by default.
|
|
4662
4672
|
`,
|
|
4663
4673
|
});
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -44,6 +44,17 @@ export interface FilterResult {
|
|
|
44
44
|
visible: SessionMeta[];
|
|
45
45
|
hiddenCount: number;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Whether a listing scope must retain team-origin sessions.
|
|
49
|
+
*
|
|
50
|
+
* A routine owns every session produced during its run, including teammates and
|
|
51
|
+
* SDK-launched children. Requiring callers to add `--teams` would make a routine
|
|
52
|
+
* catalog incomplete and can make team-heavy routines appear to have no runs.
|
|
53
|
+
*/
|
|
54
|
+
export declare function shouldShowTeamSessions(filters: {
|
|
55
|
+
teams?: boolean;
|
|
56
|
+
routine?: boolean | string;
|
|
57
|
+
}): boolean;
|
|
47
58
|
/**
|
|
48
59
|
* Split `sessions` into visible and hidden (team-origin) groups.
|
|
49
60
|
* When `showTeams` is true every session is visible and `teamOrigin` is
|
|
@@ -142,6 +142,16 @@ export function enrichTeamOrigins(sessions) {
|
|
|
142
142
|
return origin ? { ...session, teamOrigin: origin } : session;
|
|
143
143
|
});
|
|
144
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Whether a listing scope must retain team-origin sessions.
|
|
147
|
+
*
|
|
148
|
+
* A routine owns every session produced during its run, including teammates and
|
|
149
|
+
* SDK-launched children. Requiring callers to add `--teams` would make a routine
|
|
150
|
+
* catalog incomplete and can make team-heavy routines appear to have no runs.
|
|
151
|
+
*/
|
|
152
|
+
export function shouldShowTeamSessions(filters) {
|
|
153
|
+
return !!filters.teams || !!filters.routine;
|
|
154
|
+
}
|
|
145
155
|
/**
|
|
146
156
|
* Split `sessions` into visible and hidden (team-origin) groups.
|
|
147
157
|
* When `showTeams` is true every session is visible and `teamOrigin` is
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@phnx-labs/agents-cli",
|
|
3
|
-
"version": "1.22.
|
|
3
|
+
"version": "1.22.33",
|
|
4
4
|
"description": "One CLI for all your AI coding agents - versions, config, cloud dispatch, sessions, and teams (now with first-class Grok Build CLI support)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|