@ai-devkit/agent-manager 0.31.0 → 0.32.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.
@@ -0,0 +1,301 @@
1
+ import path from 'node:path';
2
+ import { describe, expect, it, vi } from 'vitest';
3
+ import { AGENTS, getAgentReadinessReport, getAgentReadinessReports } from '../../index.js';
4
+ const builtInSkillNames = [
5
+ 'agent-management',
6
+ 'memory',
7
+ 'verify'
8
+ ];
9
+ const skillRoots = {
10
+ claude: '.claude/skills',
11
+ codex: '.codex/skills',
12
+ copilot: '.copilot/skills',
13
+ grok_cli: '.grok/skills',
14
+ opencode: '.config/opencode/skill',
15
+ pi: '.pi/agent/skills'
16
+ };
17
+ function fixture(overrides = {}) {
18
+ const homeDir = '/home/test';
19
+ const assetRoot = '/assets';
20
+ const files = {
21
+ [path.join(homeDir, '.codex', 'hooks', 'codex-session-mapping.cjs')]: 'codex-hook',
22
+ [path.join(assetRoot, 'codex', 'codex-session-mapping.cjs')]: 'codex-hook',
23
+ [path.join(homeDir, '.codex', 'hooks.json')]: JSON.stringify({
24
+ hooks: {
25
+ SessionStart: [
26
+ {
27
+ hooks: [
28
+ {
29
+ type: 'command',
30
+ command: 'node ~/.codex/hooks/codex-session-mapping.cjs'
31
+ }
32
+ ]
33
+ }
34
+ ]
35
+ }
36
+ }),
37
+ [path.join(homeDir, '.codex', 'ai-devkit', 'sessions.json')]: JSON.stringify({
38
+ '123': '/sessions/codex.jsonl'
39
+ }),
40
+ '/sessions/codex.jsonl': '',
41
+ [path.join(homeDir, '.claude', 'hooks', 'claude-prompt-hook.js')]: 'claude-hook',
42
+ [path.join(assetRoot, 'claude', 'claude-prompt-hook.js')]: 'claude-hook',
43
+ [path.join(homeDir, '.claude', 'settings.json')]: JSON.stringify({
44
+ hooks: {
45
+ PreToolUse: [
46
+ {
47
+ hooks: [
48
+ {
49
+ type: 'command',
50
+ command: 'node ~/.claude/hooks/claude-prompt-hook.js'
51
+ }
52
+ ]
53
+ }
54
+ ]
55
+ }
56
+ }),
57
+ [path.join(homeDir, '.pi', 'agent', 'sessions.json')]: JSON.stringify({
58
+ '456': '/sessions/missing-pi.jsonl'
59
+ }),
60
+ [path.join(homeDir, '.pi', 'agent', 'auth.json')]: JSON.stringify({
61
+ anthropic: {
62
+ access: 'access-secret',
63
+ refresh: 'refresh-secret'
64
+ },
65
+ litellm: {
66
+ key: 'litellm-secret',
67
+ env: {
68
+ LITELLM_BASE_URL: 'https://litellm.example.test'
69
+ }
70
+ }
71
+ })
72
+ };
73
+ for (const directory of [
74
+ '.claude',
75
+ '.codex',
76
+ '.copilot',
77
+ '.grok',
78
+ '.config/opencode',
79
+ '.pi'
80
+ ]){
81
+ files[path.join(homeDir, directory)] = '<dir>';
82
+ }
83
+ for (const root of Object.values(skillRoots)){
84
+ for (const skill of builtInSkillNames){
85
+ files[path.join(homeDir, root, skill, 'SKILL.md')] = '# skill';
86
+ }
87
+ }
88
+ const executablePaths = Object.values(AGENTS).map((agent)=>path.join('/bin', agent.command));
89
+ const options = {
90
+ homeDir,
91
+ path: '/bin',
92
+ assetRoot,
93
+ builtInSkillNames,
94
+ skillRoots,
95
+ readFile: async (target)=>{
96
+ if (!(target in files)) throw new Error('missing');
97
+ return files[target];
98
+ },
99
+ access: async (target)=>{
100
+ if (executablePaths.includes(target) || target in files) return;
101
+ throw new Error('missing');
102
+ },
103
+ runCommand: vi.fn(async (command)=>{
104
+ if (command === 'pi') return {
105
+ stdout: 'npm:@ai-devkit/pi-session-tracker\n',
106
+ stderr: ''
107
+ };
108
+ if (command === 'claude') return {
109
+ stdout: JSON.stringify({
110
+ loggedIn: true
111
+ }),
112
+ stderr: ''
113
+ };
114
+ if (command === 'gh') return {
115
+ stdout: 'github.com\n Logged in to github.com account test-user\n',
116
+ stderr: ''
117
+ };
118
+ if (command === 'opencode') return {
119
+ stdout: '● litellm api\n● OpenAI oauth\n',
120
+ stderr: ''
121
+ };
122
+ throw new Error(`unexpected command ${command}`);
123
+ }),
124
+ codexAuth: async ()=>true,
125
+ ...overrides
126
+ };
127
+ return {
128
+ options,
129
+ files
130
+ };
131
+ }
132
+ describe('agent readiness', ()=>{
133
+ it('reports every readiness-supported adapter with generic checks and only real integrations', async ()=>{
134
+ const { options } = fixture();
135
+ const reports = await getAgentReadinessReports(options);
136
+ expect(Object.keys(reports)).toEqual([
137
+ 'claude',
138
+ 'codex',
139
+ 'copilot',
140
+ 'grok_cli',
141
+ 'opencode',
142
+ 'pi'
143
+ ]);
144
+ expect(reports).not.toHaveProperty('gemini_cli');
145
+ for (const [agent, report] of Object.entries(reports)){
146
+ expect(report.type).toBe(agent);
147
+ expect(report.executable.status).toBe('pass');
148
+ expect(report.globalConfig.status).toBe('pass');
149
+ expect(report.builtInSkills).toMatchObject({
150
+ status: 'info',
151
+ present: 3,
152
+ required: 3
153
+ });
154
+ }
155
+ expect(reports.codex.integration).toMatchObject({
156
+ label: 'ai-devkit hook',
157
+ installed: true,
158
+ status: 'pass'
159
+ });
160
+ expect(reports.claude.integration).toMatchObject({
161
+ label: 'ai-devkit hook',
162
+ installed: true,
163
+ status: 'pass'
164
+ });
165
+ expect(reports.pi.integration).toMatchObject({
166
+ label: 'ai-devkit plugin',
167
+ installed: true,
168
+ status: 'pass'
169
+ });
170
+ expect(reports.copilot.integration).toBeUndefined();
171
+ expect(reports.grok_cli.integration).toBeUndefined();
172
+ expect(reports.opencode.integration).toBeUndefined();
173
+ });
174
+ it('parses Pi provider names without returning credential values', async ()=>{
175
+ const { options } = fixture();
176
+ const report = await getAgentReadinessReport('pi', options);
177
+ const serialized = JSON.stringify(report);
178
+ expect(report.auth).toMatchObject({
179
+ state: 'authenticated',
180
+ provider: null,
181
+ availableProviders: [
182
+ 'anthropic',
183
+ 'litellm'
184
+ ],
185
+ status: 'pass'
186
+ });
187
+ expect(serialized).not.toContain('access-secret');
188
+ expect(serialized).not.toContain('refresh-secret');
189
+ expect(serialized).not.toContain('litellm-secret');
190
+ expect(serialized).not.toContain('litellm.example.test');
191
+ });
192
+ it('accepts Pi session tracker display names from pi list output', async ()=>{
193
+ const { options } = fixture({
194
+ runCommand: vi.fn(async (command)=>{
195
+ if (command === 'pi') return {
196
+ stdout: 'session tracker\n',
197
+ stderr: ''
198
+ };
199
+ if (command === 'claude') return {
200
+ stdout: JSON.stringify({
201
+ loggedIn: true
202
+ }),
203
+ stderr: ''
204
+ };
205
+ throw new Error(`unexpected command ${command}`);
206
+ })
207
+ });
208
+ const report = await getAgentReadinessReport('pi', options);
209
+ expect(report.integration).toMatchObject({
210
+ label: 'ai-devkit plugin',
211
+ installed: true,
212
+ status: 'pass'
213
+ });
214
+ });
215
+ it('reports missing built-in skills as informational readiness', async ()=>{
216
+ const { options, files } = fixture();
217
+ delete files[path.join(options.homeDir, skillRoots.codex, 'verify', 'SKILL.md')];
218
+ const report = await getAgentReadinessReport('codex', options);
219
+ expect(report.builtInSkills).toMatchObject({
220
+ status: 'info',
221
+ present: 2,
222
+ required: 3,
223
+ missing: [
224
+ 'verify'
225
+ ]
226
+ });
227
+ expect(report.status).toBe('pass');
228
+ });
229
+ it('checks OpenCode auth from auth list output', async ()=>{
230
+ const { options } = fixture({
231
+ runCommand: vi.fn(async (command)=>{
232
+ if (command === 'opencode') {
233
+ return {
234
+ stdout: '\x1B[32m●\x1B[0m litellm api\n● OpenAI oauth\n● GitLab Duo GITLAB_TOKEN\n',
235
+ stderr: ''
236
+ };
237
+ }
238
+ if (command === 'pi') return {
239
+ stdout: 'npm:@ai-devkit/pi-session-tracker\n',
240
+ stderr: ''
241
+ };
242
+ if (command === 'claude') return {
243
+ stdout: JSON.stringify({
244
+ loggedIn: true
245
+ }),
246
+ stderr: ''
247
+ };
248
+ throw new Error(`unexpected command ${command}`);
249
+ })
250
+ });
251
+ const report = await getAgentReadinessReport('opencode', options);
252
+ expect(report.auth).toMatchObject({
253
+ state: 'authenticated',
254
+ source: 'opencode auth list',
255
+ provider: null,
256
+ availableProviders: [
257
+ 'GitLab Duo',
258
+ 'OpenAI',
259
+ 'litellm'
260
+ ],
261
+ status: 'pass'
262
+ });
263
+ });
264
+ it('checks Copilot auth through GitHub CLI authentication', async ()=>{
265
+ const { options } = fixture({
266
+ runCommand: vi.fn(async (command)=>{
267
+ if (command === 'gh') return {
268
+ stdout: 'github.com\n Logged in to github.com account test-user\n',
269
+ stderr: ''
270
+ };
271
+ if (command === 'pi') return {
272
+ stdout: 'npm:@ai-devkit/pi-session-tracker\n',
273
+ stderr: ''
274
+ };
275
+ if (command === 'claude') return {
276
+ stdout: JSON.stringify({
277
+ loggedIn: true
278
+ }),
279
+ stderr: ''
280
+ };
281
+ if (command === 'opencode') return {
282
+ stdout: '● litellm api\n',
283
+ stderr: ''
284
+ };
285
+ throw new Error(`unexpected command ${command}`);
286
+ })
287
+ });
288
+ const report = await getAgentReadinessReport('copilot', options);
289
+ expect(report.auth).toMatchObject({
290
+ state: 'authenticated',
291
+ source: 'gh auth status --hostname github.com',
292
+ provider: 'github',
293
+ availableProviders: [
294
+ 'GitHub'
295
+ ],
296
+ status: 'pass'
297
+ });
298
+ });
299
+ });
300
+
301
+ //# sourceMappingURL=AgentReadiness.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/__tests__/readiness/AgentReadiness.test.ts"],"sourcesContent":["import path from 'node:path';\nimport { describe, expect, it, vi } from 'vitest';\nimport {\n AGENTS,\n getAgentReadinessReport,\n getAgentReadinessReports,\n type AgentReadinessOptions,\n type ReadinessAgentType,\n} from '../../index.js';\n\ntype Files = Record<string, string>;\n\nconst builtInSkillNames = ['agent-management', 'memory', 'verify'];\nconst skillRoots: Record<ReadinessAgentType, string> = {\n claude: '.claude/skills',\n codex: '.codex/skills',\n copilot: '.copilot/skills',\n grok_cli: '.grok/skills',\n opencode: '.config/opencode/skill',\n pi: '.pi/agent/skills',\n};\n\nfunction fixture(overrides: Partial<AgentReadinessOptions> = {}) {\n const homeDir = '/home/test';\n const assetRoot = '/assets';\n const files: Files = {\n [path.join(homeDir, '.codex', 'hooks', 'codex-session-mapping.cjs')]: 'codex-hook',\n [path.join(assetRoot, 'codex', 'codex-session-mapping.cjs')]: 'codex-hook',\n [path.join(homeDir, '.codex', 'hooks.json')]: JSON.stringify({ hooks: { SessionStart: [{ hooks: [\n { type: 'command', command: 'node ~/.codex/hooks/codex-session-mapping.cjs' },\n ] }] } }),\n [path.join(homeDir, '.codex', 'ai-devkit', 'sessions.json')]: JSON.stringify({ '123': '/sessions/codex.jsonl' }),\n '/sessions/codex.jsonl': '',\n [path.join(homeDir, '.claude', 'hooks', 'claude-prompt-hook.js')]: 'claude-hook',\n [path.join(assetRoot, 'claude', 'claude-prompt-hook.js')]: 'claude-hook',\n [path.join(homeDir, '.claude', 'settings.json')]: JSON.stringify({ hooks: { PreToolUse: [{ hooks: [\n { type: 'command', command: 'node ~/.claude/hooks/claude-prompt-hook.js' },\n ] }] } }),\n [path.join(homeDir, '.pi', 'agent', 'sessions.json')]: JSON.stringify({ '456': '/sessions/missing-pi.jsonl' }),\n [path.join(homeDir, '.pi', 'agent', 'auth.json')]: JSON.stringify({\n anthropic: { access: 'access-secret', refresh: 'refresh-secret' },\n litellm: { key: 'litellm-secret', env: { LITELLM_BASE_URL: 'https://litellm.example.test' } },\n }),\n };\n for (const directory of ['.claude', '.codex', '.copilot', '.grok', '.config/opencode', '.pi']) {\n files[path.join(homeDir, directory)] = '<dir>';\n }\n for (const root of Object.values(skillRoots)) {\n for (const skill of builtInSkillNames) {\n files[path.join(homeDir, root, skill, 'SKILL.md')] = '# skill';\n }\n }\n const executablePaths = Object.values(AGENTS).map(agent => path.join('/bin', agent.command));\n const options: AgentReadinessOptions = {\n homeDir,\n path: '/bin',\n assetRoot,\n builtInSkillNames,\n skillRoots,\n readFile: async target => {\n if (!(target in files)) throw new Error('missing');\n return files[target];\n },\n access: async target => {\n if (executablePaths.includes(target) || target in files) return;\n throw new Error('missing');\n },\n runCommand: vi.fn(async command => {\n if (command === 'pi') return { stdout: 'npm:@ai-devkit/pi-session-tracker\\n', stderr: '' };\n if (command === 'claude') return { stdout: JSON.stringify({ loggedIn: true }), stderr: '' };\n if (command === 'gh') return { stdout: 'github.com\\n Logged in to github.com account test-user\\n', stderr: '' };\n if (command === 'opencode') return { stdout: '● litellm api\\n● OpenAI oauth\\n', stderr: '' };\n throw new Error(`unexpected command ${command}`);\n }),\n codexAuth: async () => true,\n ...overrides,\n };\n return { options, files };\n}\n\ndescribe('agent readiness', () => {\n it('reports every readiness-supported adapter with generic checks and only real integrations', async () => {\n const { options } = fixture();\n\n const reports = await getAgentReadinessReports(options);\n\n expect(Object.keys(reports)).toEqual(['claude', 'codex', 'copilot', 'grok_cli', 'opencode', 'pi']);\n expect(reports).not.toHaveProperty('gemini_cli');\n for (const [agent, report] of Object.entries(reports) as Array<[ReadinessAgentType, typeof reports[ReadinessAgentType]]>) {\n expect(report.type).toBe(agent);\n expect(report.executable.status).toBe('pass');\n expect(report.globalConfig.status).toBe('pass');\n expect(report.builtInSkills).toMatchObject({ status: 'info', present: 3, required: 3 });\n }\n expect(reports.codex.integration).toMatchObject({ label: 'ai-devkit hook', installed: true, status: 'pass' });\n expect(reports.claude.integration).toMatchObject({ label: 'ai-devkit hook', installed: true, status: 'pass' });\n expect(reports.pi.integration).toMatchObject({ label: 'ai-devkit plugin', installed: true, status: 'pass' });\n expect(reports.copilot.integration).toBeUndefined();\n expect(reports.grok_cli.integration).toBeUndefined();\n expect(reports.opencode.integration).toBeUndefined();\n });\n\n it('parses Pi provider names without returning credential values', async () => {\n const { options } = fixture();\n\n const report = await getAgentReadinessReport('pi', options);\n const serialized = JSON.stringify(report);\n\n expect(report.auth).toMatchObject({\n state: 'authenticated',\n provider: null,\n availableProviders: ['anthropic', 'litellm'],\n status: 'pass',\n });\n expect(serialized).not.toContain('access-secret');\n expect(serialized).not.toContain('refresh-secret');\n expect(serialized).not.toContain('litellm-secret');\n expect(serialized).not.toContain('litellm.example.test');\n });\n\n it('accepts Pi session tracker display names from pi list output', async () => {\n const { options } = fixture({\n runCommand: vi.fn(async command => {\n if (command === 'pi') return { stdout: 'session tracker\\n', stderr: '' };\n if (command === 'claude') return { stdout: JSON.stringify({ loggedIn: true }), stderr: '' };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport('pi', options);\n\n expect(report.integration).toMatchObject({ label: 'ai-devkit plugin', installed: true, status: 'pass' });\n });\n\n it('reports missing built-in skills as informational readiness', async () => {\n const { options, files } = fixture();\n delete files[path.join(options.homeDir!, skillRoots.codex, 'verify', 'SKILL.md')];\n\n const report = await getAgentReadinessReport('codex', options);\n\n expect(report.builtInSkills).toMatchObject({\n status: 'info',\n present: 2,\n required: 3,\n missing: ['verify'],\n });\n expect(report.status).toBe('pass');\n });\n\n it('checks OpenCode auth from auth list output', async () => {\n const { options } = fixture({\n runCommand: vi.fn(async command => {\n if (command === 'opencode') {\n return { stdout: '\\x1B[32m●\\x1B[0m litellm api\\n● OpenAI oauth\\n● GitLab Duo GITLAB_TOKEN\\n', stderr: '' };\n }\n if (command === 'pi') return { stdout: 'npm:@ai-devkit/pi-session-tracker\\n', stderr: '' };\n if (command === 'claude') return { stdout: JSON.stringify({ loggedIn: true }), stderr: '' };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport('opencode', options);\n\n expect(report.auth).toMatchObject({\n state: 'authenticated',\n source: 'opencode auth list',\n provider: null,\n availableProviders: ['GitLab Duo', 'OpenAI', 'litellm'],\n status: 'pass',\n });\n });\n\n it('checks Copilot auth through GitHub CLI authentication', async () => {\n const { options } = fixture({\n runCommand: vi.fn(async command => {\n if (command === 'gh') return { stdout: 'github.com\\n Logged in to github.com account test-user\\n', stderr: '' };\n if (command === 'pi') return { stdout: 'npm:@ai-devkit/pi-session-tracker\\n', stderr: '' };\n if (command === 'claude') return { stdout: JSON.stringify({ loggedIn: true }), stderr: '' };\n if (command === 'opencode') return { stdout: '● litellm api\\n', stderr: '' };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport('copilot', options);\n\n expect(report.auth).toMatchObject({\n state: 'authenticated',\n source: 'gh auth status --hostname github.com',\n provider: 'github',\n availableProviders: ['GitHub'],\n status: 'pass',\n });\n });\n});\n"],"names":["path","describe","expect","it","vi","AGENTS","getAgentReadinessReport","getAgentReadinessReports","builtInSkillNames","skillRoots","claude","codex","copilot","grok_cli","opencode","pi","fixture","overrides","homeDir","assetRoot","files","join","JSON","stringify","hooks","SessionStart","type","command","PreToolUse","anthropic","access","refresh","litellm","key","env","LITELLM_BASE_URL","directory","root","Object","values","skill","executablePaths","map","agent","options","readFile","target","Error","includes","runCommand","fn","stdout","stderr","loggedIn","codexAuth","reports","keys","toEqual","not","toHaveProperty","report","entries","toBe","executable","status","globalConfig","builtInSkills","toMatchObject","present","required","integration","label","installed","toBeUndefined","serialized","auth","state","provider","availableProviders","toContain","missing","source"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { AgentManager, AgentNotRunningError } from './AgentManager.js';
2
2
  export { getCodexCapacityReport } from './capacity/index.js';
3
3
  export type { CapacityProbeOptions, CapacityReport, CapacityWindow, } from './capacity/index.js';
4
+ export { getAgentReadinessReport, getAgentReadinessReports, worstReadinessStatus, } from './readiness/AgentReadiness.js';
5
+ export type { AgentReadinessOptions, AgentReadinessReport, AuthReadinessCheck, BuiltInSkillsReadinessCheck, DirectoryReadinessCheck, ExecutableReadinessCheck, IntegrationReadinessCheck, ReadinessAgentType, ReadinessAuthState, ReadinessCheck, ReadinessStatus, } from './readiness/AgentReadiness.js';
4
6
  export { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';
5
7
  export { CodexAdapter } from './adapters/CodexAdapter.js';
6
8
  export { CopilotAdapter } from './adapters/CopilotAdapter.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { AgentManager, AgentNotRunningError } from './AgentManager.js';
2
2
  export { getCodexCapacityReport } from './capacity/index.js';
3
+ export { getAgentReadinessReport, getAgentReadinessReports, worstReadinessStatus } from './readiness/AgentReadiness.js';
3
4
  export { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';
4
5
  export { CodexAdapter } from './adapters/CodexAdapter.js';
5
6
  export { CopilotAdapter } from './adapters/CopilotAdapter.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AgentManager, AgentNotRunningError } from './AgentManager.js';\nexport { getCodexCapacityReport } from './capacity/index.js';\nexport type {\n CapacityProbeOptions,\n CapacityReport,\n CapacityWindow,\n} from './capacity/index.js';\n\nexport { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';\nexport { CodexAdapter } from './adapters/CodexAdapter.js';\nexport { CopilotAdapter } from './adapters/CopilotAdapter.js';\nexport { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';\nexport { GrokCliAdapter } from './adapters/GrokCliAdapter.js';\nexport { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';\nexport { PiAdapter } from './adapters/PiAdapter.js';\nexport { AgentStatus } from './adapters/AgentAdapter.js';\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from './adapters/AgentAdapter.js';\n\nexport { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';\nexport type { TerminalLocation } from './terminal/TerminalFocusManager.js';\nexport { TtyWriter } from './terminal/TtyWriter.js';\n\nexport type { ListAgentsOptions } from './AgentManager.js';\n\nexport { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';\nexport type { AgentRegistryOptions, RegistryEntry } from './utils/AgentRegistry.js';\nexport { TmuxManager } from './terminal/TmuxManager.js';\nexport { AGENTS } from './utils/agents.js';\nexport type { AgentConfig, StartableAgentType } from './utils/agents.js';\n\nexport type { AgentRequest } from './utils/agent-requests.js';\nexport { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';\n\nexport {\n AGENT_MODES,\n DurableAgentError,\n DurableAgentBusyError,\n DurableAgentNotFoundError,\n DurableAgentRepositoryError,\n DurableAgentNameConflictError,\n ClaudePrintError,\n CodexPrintError,\n PiPrintError,\n} from './durable/DurableAgent.js';\nexport type {\n DurableAgent,\n DurableAgentBase,\n ClaudeDurableAgent,\n CodexDurableAgent,\n PiDurableAgent,\n DurableProvider,\n CodexPrintErrorCode,\n DurableAgentState,\n DurableSessionHealth,\n DurableRunStatus,\n DurableActiveRun,\n DurableLastResult,\n PiPrintErrorCode,\n ProcessIdentity,\n} from './durable/DurableAgent.js';\nexport { DurableAgentRepository } from './durable/DurableAgentRepository.js';\nexport type {\n CreateDurableAgentInput,\n DurableAgentRepositoryOptions,\n ProcessInspector,\n DurableRunCompletion,\n} from './durable/DurableAgentRepository.js';\nexport { ClaudePrintAgentService } from './providers/claude/durable/ClaudePrintAgentService.js';\nexport type {\n ClaudePrintAgentServiceOptions,\n ClaudePrintSendResult,\n} from './providers/claude/durable/ClaudePrintAgentService.js';\nexport { CodexCliProbe } from './providers/codex/durable/CodexCliProbe.js';\nexport type { CodexCliProbeOptions } from './providers/codex/durable/CodexCliProbe.js';\nexport { CodexPrintRunner } from './providers/codex/durable/CodexPrintRunner.js';\nexport type {\n CodexPrintRunnerOptions,\n CodexPrintRunRequest,\n CodexPrintRunResult,\n} from './providers/codex/durable/CodexPrintRunner.js';\nexport { CodexPrintAgentService } from './providers/codex/durable/CodexPrintAgentService.js';\nexport type {\n CodexPrintAgentServiceOptions,\n CodexPrintSendResult,\n} from './providers/codex/durable/CodexPrintAgentService.js';\nexport { PiCliProbe } from './providers/pi/durable/PiCliProbe.js';\nexport type { PiCliProbeOptions } from './providers/pi/durable/PiCliProbe.js';\nexport { PiPrintRunner } from './providers/pi/durable/PiPrintRunner.js';\nexport type { PiPrintRunnerOptions, PiPrintRunRequest, PiPrintRunResult } from './providers/pi/durable/PiPrintRunner.js';\nexport { PiPrintAgentService } from './providers/pi/durable/PiPrintAgentService.js';\nexport type { PiPrintAgentServiceOptions, PiPrintSendResult } from './providers/pi/durable/PiPrintAgentService.js';\n"],"names":["AgentManager","AgentNotRunningError","getCodexCapacityReport","ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus","TerminalFocusManager","TerminalType","TtyWriter","AgentRegistry","RenameNotFoundError","RenameConflictError","TmuxManager","AGENTS","getAgentRequestPath","readLatestAgentRequest","writeAgentRequest","AGENT_MODES","DurableAgentError","DurableAgentBusyError","DurableAgentNotFoundError","DurableAgentRepositoryError","DurableAgentNameConflictError","ClaudePrintError","CodexPrintError","PiPrintError","DurableAgentRepository","ClaudePrintAgentService","CodexCliProbe","CodexPrintRunner","CodexPrintAgentService","PiCliProbe","PiPrintRunner","PiPrintAgentService"],"mappings":"AAAA,SAASA,YAAY,EAAEC,oBAAoB,QAAQ,oBAAoB;AACvE,SAASC,sBAAsB,QAAQ,sBAAsB;AAO7D,SAASC,iBAAiB,QAAQ,0CAA0C;AAC5E,SAASC,YAAY,QAAQ,6BAA6B;AAC1D,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,gBAAgB,QAAQ,iCAAiC;AAClE,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,WAAW,QAAQ,6BAA6B;AAYzD,SAASC,oBAAoB,EAAEC,YAAY,QAAQ,qCAAqC;AAExF,SAASC,SAAS,QAAQ,0BAA0B;AAIpD,SAASC,aAAa,EAAEC,mBAAmB,EAAEC,mBAAmB,QAAQ,2BAA2B;AAEnG,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,MAAM,QAAQ,oBAAoB;AAI3C,SAASC,mBAAmB,EAAEC,sBAAsB,EAAEC,iBAAiB,QAAQ,4BAA4B;AAE3G,SACIC,WAAW,EACXC,iBAAiB,EACjBC,qBAAqB,EACrBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,6BAA6B,EAC7BC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,QACT,4BAA4B;AAiBnC,SAASC,sBAAsB,QAAQ,sCAAsC;AAO7E,SAASC,uBAAuB,QAAQ,wDAAwD;AAKhG,SAASC,aAAa,QAAQ,6CAA6C;AAE3E,SAASC,gBAAgB,QAAQ,gDAAgD;AAMjF,SAASC,sBAAsB,QAAQ,sDAAsD;AAK7F,SAASC,UAAU,QAAQ,uCAAuC;AAElE,SAASC,aAAa,QAAQ,0CAA0C;AAExE,SAASC,mBAAmB,QAAQ,gDAAgD"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AgentManager, AgentNotRunningError } from './AgentManager.js';\nexport { getCodexCapacityReport } from './capacity/index.js';\nexport type {\n CapacityProbeOptions,\n CapacityReport,\n CapacityWindow,\n} from './capacity/index.js';\nexport {\n getAgentReadinessReport,\n getAgentReadinessReports,\n worstReadinessStatus,\n} from './readiness/AgentReadiness.js';\nexport type {\n AgentReadinessOptions,\n AgentReadinessReport,\n AuthReadinessCheck,\n BuiltInSkillsReadinessCheck,\n DirectoryReadinessCheck,\n ExecutableReadinessCheck,\n IntegrationReadinessCheck,\n ReadinessAgentType,\n ReadinessAuthState,\n ReadinessCheck,\n ReadinessStatus,\n} from './readiness/AgentReadiness.js';\n\nexport { ClaudeCodeAdapter } from './providers/claude/ClaudeCodeAdapter.js';\nexport { CodexAdapter } from './adapters/CodexAdapter.js';\nexport { CopilotAdapter } from './adapters/CopilotAdapter.js';\nexport { GeminiCliAdapter } from './adapters/GeminiCliAdapter.js';\nexport { GrokCliAdapter } from './adapters/GrokCliAdapter.js';\nexport { OpenCodeAdapter } from './adapters/OpenCodeAdapter.js';\nexport { PiAdapter } from './adapters/PiAdapter.js';\nexport { AgentStatus } from './adapters/AgentAdapter.js';\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from './adapters/AgentAdapter.js';\n\nexport { TerminalFocusManager, TerminalType } from './terminal/TerminalFocusManager.js';\nexport type { TerminalLocation } from './terminal/TerminalFocusManager.js';\nexport { TtyWriter } from './terminal/TtyWriter.js';\n\nexport type { ListAgentsOptions } from './AgentManager.js';\n\nexport { AgentRegistry, RenameNotFoundError, RenameConflictError } from './utils/AgentRegistry.js';\nexport type { AgentRegistryOptions, RegistryEntry } from './utils/AgentRegistry.js';\nexport { TmuxManager } from './terminal/TmuxManager.js';\nexport { AGENTS } from './utils/agents.js';\nexport type { AgentConfig, StartableAgentType } from './utils/agents.js';\n\nexport type { AgentRequest } from './utils/agent-requests.js';\nexport { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from './utils/agent-requests.js';\n\nexport {\n AGENT_MODES,\n DurableAgentError,\n DurableAgentBusyError,\n DurableAgentNotFoundError,\n DurableAgentRepositoryError,\n DurableAgentNameConflictError,\n ClaudePrintError,\n CodexPrintError,\n PiPrintError,\n} from './durable/DurableAgent.js';\nexport type {\n DurableAgent,\n DurableAgentBase,\n ClaudeDurableAgent,\n CodexDurableAgent,\n PiDurableAgent,\n DurableProvider,\n CodexPrintErrorCode,\n DurableAgentState,\n DurableSessionHealth,\n DurableRunStatus,\n DurableActiveRun,\n DurableLastResult,\n PiPrintErrorCode,\n ProcessIdentity,\n} from './durable/DurableAgent.js';\nexport { DurableAgentRepository } from './durable/DurableAgentRepository.js';\nexport type {\n CreateDurableAgentInput,\n DurableAgentRepositoryOptions,\n ProcessInspector,\n DurableRunCompletion,\n} from './durable/DurableAgentRepository.js';\nexport { ClaudePrintAgentService } from './providers/claude/durable/ClaudePrintAgentService.js';\nexport type {\n ClaudePrintAgentServiceOptions,\n ClaudePrintSendResult,\n} from './providers/claude/durable/ClaudePrintAgentService.js';\nexport { CodexCliProbe } from './providers/codex/durable/CodexCliProbe.js';\nexport type { CodexCliProbeOptions } from './providers/codex/durable/CodexCliProbe.js';\nexport { CodexPrintRunner } from './providers/codex/durable/CodexPrintRunner.js';\nexport type {\n CodexPrintRunnerOptions,\n CodexPrintRunRequest,\n CodexPrintRunResult,\n} from './providers/codex/durable/CodexPrintRunner.js';\nexport { CodexPrintAgentService } from './providers/codex/durable/CodexPrintAgentService.js';\nexport type {\n CodexPrintAgentServiceOptions,\n CodexPrintSendResult,\n} from './providers/codex/durable/CodexPrintAgentService.js';\nexport { PiCliProbe } from './providers/pi/durable/PiCliProbe.js';\nexport type { PiCliProbeOptions } from './providers/pi/durable/PiCliProbe.js';\nexport { PiPrintRunner } from './providers/pi/durable/PiPrintRunner.js';\nexport type { PiPrintRunnerOptions, PiPrintRunRequest, PiPrintRunResult } from './providers/pi/durable/PiPrintRunner.js';\nexport { PiPrintAgentService } from './providers/pi/durable/PiPrintAgentService.js';\nexport type { PiPrintAgentServiceOptions, PiPrintSendResult } from './providers/pi/durable/PiPrintAgentService.js';\n"],"names":["AgentManager","AgentNotRunningError","getCodexCapacityReport","getAgentReadinessReport","getAgentReadinessReports","worstReadinessStatus","ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","OpenCodeAdapter","PiAdapter","AgentStatus","TerminalFocusManager","TerminalType","TtyWriter","AgentRegistry","RenameNotFoundError","RenameConflictError","TmuxManager","AGENTS","getAgentRequestPath","readLatestAgentRequest","writeAgentRequest","AGENT_MODES","DurableAgentError","DurableAgentBusyError","DurableAgentNotFoundError","DurableAgentRepositoryError","DurableAgentNameConflictError","ClaudePrintError","CodexPrintError","PiPrintError","DurableAgentRepository","ClaudePrintAgentService","CodexCliProbe","CodexPrintRunner","CodexPrintAgentService","PiCliProbe","PiPrintRunner","PiPrintAgentService"],"mappings":"AAAA,SAASA,YAAY,EAAEC,oBAAoB,QAAQ,oBAAoB;AACvE,SAASC,sBAAsB,QAAQ,sBAAsB;AAM7D,SACIC,uBAAuB,EACvBC,wBAAwB,EACxBC,oBAAoB,QACjB,gCAAgC;AAevC,SAASC,iBAAiB,QAAQ,0CAA0C;AAC5E,SAASC,YAAY,QAAQ,6BAA6B;AAC1D,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,gBAAgB,QAAQ,iCAAiC;AAClE,SAASC,cAAc,QAAQ,+BAA+B;AAC9D,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,WAAW,QAAQ,6BAA6B;AAYzD,SAASC,oBAAoB,EAAEC,YAAY,QAAQ,qCAAqC;AAExF,SAASC,SAAS,QAAQ,0BAA0B;AAIpD,SAASC,aAAa,EAAEC,mBAAmB,EAAEC,mBAAmB,QAAQ,2BAA2B;AAEnG,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,MAAM,QAAQ,oBAAoB;AAI3C,SAASC,mBAAmB,EAAEC,sBAAsB,EAAEC,iBAAiB,QAAQ,4BAA4B;AAE3G,SACIC,WAAW,EACXC,iBAAiB,EACjBC,qBAAqB,EACrBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,6BAA6B,EAC7BC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,QACT,4BAA4B;AAiBnC,SAASC,sBAAsB,QAAQ,sCAAsC;AAO7E,SAASC,uBAAuB,QAAQ,wDAAwD;AAKhG,SAASC,aAAa,QAAQ,6CAA6C;AAE3E,SAASC,gBAAgB,QAAQ,gDAAgD;AAMjF,SAASC,sBAAsB,QAAQ,sDAAsD;AAK7F,SAASC,UAAU,QAAQ,uCAAuC;AAElE,SAASC,aAAa,QAAQ,0CAA0C;AAExE,SAASC,mBAAmB,QAAQ,gDAAgD"}
@@ -0,0 +1,67 @@
1
+ import { type StartableAgentType } from '../utils/agents.js';
2
+ export type ReadinessStatus = 'pass' | 'warn' | 'fail';
3
+ export type ReadinessAuthState = 'authenticated' | 'unauthenticated' | 'unknown';
4
+ export type ReadinessAgentType = Exclude<StartableAgentType, 'gemini_cli'>;
5
+ type ReadinessInfoStatus = ReadinessStatus | 'info';
6
+ type CommandResult = {
7
+ stdout: string;
8
+ stderr: string;
9
+ };
10
+ type ReadFile = (target: string) => Promise<string>;
11
+ type Access = (target: string, mode?: number) => Promise<void>;
12
+ type RunCommand = (command: string, args: string[]) => Promise<CommandResult>;
13
+ export interface ReadinessCheck<S extends ReadinessInfoStatus = ReadinessStatus> {
14
+ status: S;
15
+ errors: string[];
16
+ }
17
+ export interface ExecutableReadinessCheck extends ReadinessCheck {
18
+ command: string;
19
+ path: string | null;
20
+ }
21
+ export interface DirectoryReadinessCheck extends ReadinessCheck {
22
+ path: string;
23
+ present: boolean;
24
+ readable: boolean;
25
+ }
26
+ export interface BuiltInSkillsReadinessCheck extends ReadinessCheck<'info'> {
27
+ path: string | null;
28
+ required: number;
29
+ present: number;
30
+ missing: string[];
31
+ }
32
+ export interface AuthReadinessCheck extends ReadinessCheck {
33
+ state: ReadinessAuthState;
34
+ source: string;
35
+ provider: string | null;
36
+ availableProviders: string[];
37
+ }
38
+ export interface IntegrationReadinessCheck extends ReadinessCheck {
39
+ label: string;
40
+ installed: boolean;
41
+ details?: Record<string, unknown>;
42
+ }
43
+ export interface AgentReadinessReport {
44
+ type: ReadinessAgentType;
45
+ executable: ExecutableReadinessCheck;
46
+ globalConfig: DirectoryReadinessCheck;
47
+ builtInSkills: BuiltInSkillsReadinessCheck;
48
+ auth?: AuthReadinessCheck;
49
+ integration?: IntegrationReadinessCheck;
50
+ status: ReadinessStatus;
51
+ }
52
+ export interface AgentReadinessOptions {
53
+ homeDir?: string;
54
+ path?: string;
55
+ assetRoot?: string;
56
+ builtInSkillNames?: readonly string[];
57
+ skillRoots?: Partial<Record<ReadinessAgentType, string>>;
58
+ readFile?: ReadFile;
59
+ access?: Access;
60
+ runCommand?: RunCommand;
61
+ codexAuth?: () => Promise<boolean | null>;
62
+ }
63
+ export declare function worstReadinessStatus(statuses: ReadinessStatus[]): ReadinessStatus;
64
+ export declare function getAgentReadinessReport(agent: ReadinessAgentType, options?: AgentReadinessOptions): Promise<AgentReadinessReport>;
65
+ export declare function getAgentReadinessReports(options?: AgentReadinessOptions): Promise<Record<ReadinessAgentType, AgentReadinessReport>>;
66
+ export {};
67
+ //# sourceMappingURL=AgentReadiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentReadiness.d.ts","sourceRoot":"","sources":["../../src/readiness/AgentReadiness.ts"],"names":[],"mappings":"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"}