@defai.digital/cli 13.1.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.
Files changed (138) hide show
  1. package/LICENSE +214 -0
  2. package/dist/bin.d.ts +3 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/bin.js +11 -0
  5. package/dist/bin.js.map +1 -0
  6. package/dist/bootstrap.d.ts +144 -0
  7. package/dist/bootstrap.d.ts.map +1 -0
  8. package/dist/bootstrap.js +315 -0
  9. package/dist/bootstrap.js.map +1 -0
  10. package/dist/cli.d.ts +14 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +84 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/ability.d.ts +17 -0
  15. package/dist/commands/ability.d.ts.map +1 -0
  16. package/dist/commands/ability.js +286 -0
  17. package/dist/commands/ability.js.map +1 -0
  18. package/dist/commands/agent.d.ts +18 -0
  19. package/dist/commands/agent.d.ts.map +1 -0
  20. package/dist/commands/agent.js +361 -0
  21. package/dist/commands/agent.js.map +1 -0
  22. package/dist/commands/call.d.ts +15 -0
  23. package/dist/commands/call.d.ts.map +1 -0
  24. package/dist/commands/call.js +503 -0
  25. package/dist/commands/call.js.map +1 -0
  26. package/dist/commands/cleanup.d.ts +18 -0
  27. package/dist/commands/cleanup.d.ts.map +1 -0
  28. package/dist/commands/cleanup.js +300 -0
  29. package/dist/commands/cleanup.js.map +1 -0
  30. package/dist/commands/config.d.ts +16 -0
  31. package/dist/commands/config.d.ts.map +1 -0
  32. package/dist/commands/config.js +513 -0
  33. package/dist/commands/config.js.map +1 -0
  34. package/dist/commands/discuss.d.ts +16 -0
  35. package/dist/commands/discuss.d.ts.map +1 -0
  36. package/dist/commands/discuss.js +700 -0
  37. package/dist/commands/discuss.js.map +1 -0
  38. package/dist/commands/doctor.d.ts +48 -0
  39. package/dist/commands/doctor.d.ts.map +1 -0
  40. package/dist/commands/doctor.js +356 -0
  41. package/dist/commands/doctor.js.map +1 -0
  42. package/dist/commands/guard.d.ts +12 -0
  43. package/dist/commands/guard.d.ts.map +1 -0
  44. package/dist/commands/guard.js +225 -0
  45. package/dist/commands/guard.js.map +1 -0
  46. package/dist/commands/help.d.ts +11 -0
  47. package/dist/commands/help.d.ts.map +1 -0
  48. package/dist/commands/help.js +180 -0
  49. package/dist/commands/help.js.map +1 -0
  50. package/dist/commands/history.d.ts +19 -0
  51. package/dist/commands/history.d.ts.map +1 -0
  52. package/dist/commands/history.js +200 -0
  53. package/dist/commands/history.js.map +1 -0
  54. package/dist/commands/index.d.ts +23 -0
  55. package/dist/commands/index.d.ts.map +1 -0
  56. package/dist/commands/index.js +26 -0
  57. package/dist/commands/index.js.map +1 -0
  58. package/dist/commands/iterate.d.ts +16 -0
  59. package/dist/commands/iterate.d.ts.map +1 -0
  60. package/dist/commands/iterate.js +72 -0
  61. package/dist/commands/iterate.js.map +1 -0
  62. package/dist/commands/list.d.ts +6 -0
  63. package/dist/commands/list.d.ts.map +1 -0
  64. package/dist/commands/list.js +62 -0
  65. package/dist/commands/list.js.map +1 -0
  66. package/dist/commands/mcp.d.ts +16 -0
  67. package/dist/commands/mcp.d.ts.map +1 -0
  68. package/dist/commands/mcp.js +57 -0
  69. package/dist/commands/mcp.js.map +1 -0
  70. package/dist/commands/resume.d.ts +18 -0
  71. package/dist/commands/resume.d.ts.map +1 -0
  72. package/dist/commands/resume.js +208 -0
  73. package/dist/commands/resume.js.map +1 -0
  74. package/dist/commands/review.d.ts +13 -0
  75. package/dist/commands/review.d.ts.map +1 -0
  76. package/dist/commands/review.js +450 -0
  77. package/dist/commands/review.js.map +1 -0
  78. package/dist/commands/run.d.ts +6 -0
  79. package/dist/commands/run.d.ts.map +1 -0
  80. package/dist/commands/run.js +158 -0
  81. package/dist/commands/run.js.map +1 -0
  82. package/dist/commands/scaffold.d.ts +20 -0
  83. package/dist/commands/scaffold.d.ts.map +1 -0
  84. package/dist/commands/scaffold.js +924 -0
  85. package/dist/commands/scaffold.js.map +1 -0
  86. package/dist/commands/session.d.ts +20 -0
  87. package/dist/commands/session.d.ts.map +1 -0
  88. package/dist/commands/session.js +504 -0
  89. package/dist/commands/session.js.map +1 -0
  90. package/dist/commands/setup.d.ts +14 -0
  91. package/dist/commands/setup.d.ts.map +1 -0
  92. package/dist/commands/setup.js +762 -0
  93. package/dist/commands/setup.js.map +1 -0
  94. package/dist/commands/status.d.ts +17 -0
  95. package/dist/commands/status.d.ts.map +1 -0
  96. package/dist/commands/status.js +227 -0
  97. package/dist/commands/status.js.map +1 -0
  98. package/dist/commands/trace.d.ts +6 -0
  99. package/dist/commands/trace.d.ts.map +1 -0
  100. package/dist/commands/trace.js +204 -0
  101. package/dist/commands/trace.js.map +1 -0
  102. package/dist/commands/update.d.ts +24 -0
  103. package/dist/commands/update.d.ts.map +1 -0
  104. package/dist/commands/update.js +296 -0
  105. package/dist/commands/update.js.map +1 -0
  106. package/dist/index.d.ts +8 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +13 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/parser.d.ts +14 -0
  111. package/dist/parser.d.ts.map +1 -0
  112. package/dist/parser.js +288 -0
  113. package/dist/parser.js.map +1 -0
  114. package/dist/types.d.ts +91 -0
  115. package/dist/types.d.ts.map +1 -0
  116. package/dist/types.js +29 -0
  117. package/dist/types.js.map +1 -0
  118. package/dist/utils/dangerous-op-guard.d.ts +33 -0
  119. package/dist/utils/dangerous-op-guard.d.ts.map +1 -0
  120. package/dist/utils/dangerous-op-guard.js +112 -0
  121. package/dist/utils/dangerous-op-guard.js.map +1 -0
  122. package/dist/utils/database.d.ts +85 -0
  123. package/dist/utils/database.d.ts.map +1 -0
  124. package/dist/utils/database.js +184 -0
  125. package/dist/utils/database.js.map +1 -0
  126. package/dist/utils/index.d.ts +7 -0
  127. package/dist/utils/index.d.ts.map +1 -0
  128. package/dist/utils/index.js +7 -0
  129. package/dist/utils/index.js.map +1 -0
  130. package/dist/utils/provider-factory.d.ts +31 -0
  131. package/dist/utils/provider-factory.d.ts.map +1 -0
  132. package/dist/utils/provider-factory.js +109 -0
  133. package/dist/utils/provider-factory.js.map +1 -0
  134. package/dist/utils/storage-instances.d.ts +19 -0
  135. package/dist/utils/storage-instances.d.ts.map +1 -0
  136. package/dist/utils/storage-instances.js +20 -0
  137. package/dist/utils/storage-instances.js.map +1 -0
  138. package/package.json +77 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Guard Command
3
+ *
4
+ * Post-check AI coding governance.
5
+ * Usage: ax guard check --policy <policy> --target <target>
6
+ */
7
+ import { guardCheck, listPolicies, validatePolicyId, } from '@defai.digital/guard';
8
+ /**
9
+ * ANSI color codes for terminal output
10
+ */
11
+ const COLORS = {
12
+ reset: '\x1b[0m',
13
+ green: '\x1b[32m',
14
+ red: '\x1b[31m',
15
+ yellow: '\x1b[33m',
16
+ cyan: '\x1b[36m',
17
+ bold: '\x1b[1m',
18
+ dim: '\x1b[2m',
19
+ };
20
+ /**
21
+ * Status icons
22
+ */
23
+ const ICONS = {
24
+ PASS: `${COLORS.green}\u2713${COLORS.reset}`,
25
+ FAIL: `${COLORS.red}\u2717${COLORS.reset}`,
26
+ WARN: `${COLORS.yellow}\u26A0${COLORS.reset}`,
27
+ };
28
+ /**
29
+ * Formats guard result for text output
30
+ */
31
+ function formatGuardResult(result, verbose) {
32
+ const lines = [];
33
+ // Header
34
+ lines.push('');
35
+ lines.push(`${COLORS.bold}AX Guard Check${COLORS.reset}`);
36
+ lines.push(`Policy: ${result.policyId}`);
37
+ lines.push(`Target: ${result.target}`);
38
+ lines.push('');
39
+ // Status banner
40
+ const statusIcon = ICONS[result.status];
41
+ const statusColor = result.status === 'PASS'
42
+ ? COLORS.green
43
+ : result.status === 'FAIL'
44
+ ? COLORS.red
45
+ : COLORS.yellow;
46
+ lines.push(`${statusIcon} ${statusColor}${COLORS.bold}${result.status}${COLORS.reset}: ${result.summary}`);
47
+ lines.push('');
48
+ // Gate results
49
+ if (result.gates.length > 0) {
50
+ lines.push(`${COLORS.bold}Gate Results${COLORS.reset}`);
51
+ for (const gate of result.gates) {
52
+ const gateIcon = ICONS[gate.status];
53
+ lines.push(` ${gateIcon} ${gate.gate}: ${gate.message}`);
54
+ if (verbose && gate.details !== undefined) {
55
+ const detailsStr = JSON.stringify(gate.details, null, 2)
56
+ .split('\n')
57
+ .map((line) => ` ${COLORS.dim}${line}${COLORS.reset}`)
58
+ .join('\n');
59
+ lines.push(detailsStr);
60
+ }
61
+ }
62
+ lines.push('');
63
+ }
64
+ // Suggestions
65
+ if (result.suggestions.length > 0) {
66
+ lines.push(`${COLORS.bold}Suggested Actions${COLORS.reset}`);
67
+ for (const suggestion of result.suggestions) {
68
+ lines.push(` ${COLORS.dim}\u2022${COLORS.reset} ${suggestion}`);
69
+ }
70
+ lines.push('');
71
+ }
72
+ return lines.join('\n');
73
+ }
74
+ /**
75
+ * Parses guard subcommand and options
76
+ */
77
+ function parseGuardArgs(args, options) {
78
+ const subcommand = args[0] ?? 'help';
79
+ // Parse --policy and --target from remaining args
80
+ let policy = options.workflowId; // Reuse workflowId for policy
81
+ let target;
82
+ for (let i = 1; i < args.length; i++) {
83
+ const arg = args[i];
84
+ if (arg === '--policy' && i + 1 < args.length) {
85
+ policy = args[++i];
86
+ }
87
+ else if (arg === '--target' && i + 1 < args.length) {
88
+ target = args[++i];
89
+ }
90
+ else if (target === undefined && arg !== undefined && !arg.startsWith('-')) {
91
+ // First positional arg after subcommand is target
92
+ target = arg;
93
+ }
94
+ }
95
+ return { subcommand, policy, target };
96
+ }
97
+ /**
98
+ * Shows guard help
99
+ */
100
+ function showGuardHelp() {
101
+ const policies = listPolicies();
102
+ const helpText = `
103
+ ${COLORS.bold}AX Guard - Post-check AI Coding Governance${COLORS.reset}
104
+
105
+ Usage:
106
+ ax guard check --policy <policy> --target <target>
107
+ ax guard list
108
+ ax guard help
109
+
110
+ Commands:
111
+ check Run governance checks on current changes
112
+ list List available policies
113
+ help Show this help message
114
+
115
+ Options:
116
+ --policy <policy> Policy to apply (required for check)
117
+ --target <target> Target name, e.g., provider name (required for check)
118
+ --verbose Show detailed gate results
119
+
120
+ Available Policies:
121
+ ${policies.map((p) => ` - ${p}`).join('\n')}
122
+
123
+ Examples:
124
+ ax guard check --policy provider-refactor --target openai
125
+ ax guard check --policy bugfix --target fix-123 --verbose
126
+ ax guard list
127
+ `.trim();
128
+ return {
129
+ success: true,
130
+ message: helpText,
131
+ data: undefined,
132
+ exitCode: 0,
133
+ };
134
+ }
135
+ /**
136
+ * Lists available policies
137
+ */
138
+ function listPoliciesCommand() {
139
+ const policies = listPolicies();
140
+ return {
141
+ success: true,
142
+ message: `Available policies:\n${policies.map((p) => ` - ${p}`).join('\n')}`,
143
+ data: policies,
144
+ exitCode: 0,
145
+ };
146
+ }
147
+ /**
148
+ * Runs guard check
149
+ */
150
+ async function runGuardCheck(policy, target, options) {
151
+ // Validate policy
152
+ if (!validatePolicyId(policy)) {
153
+ const available = listPolicies();
154
+ return {
155
+ success: false,
156
+ message: `Unknown policy: ${policy}\nAvailable policies: ${available.join(', ')}`,
157
+ data: undefined,
158
+ exitCode: 1,
159
+ };
160
+ }
161
+ try {
162
+ const result = await guardCheck({
163
+ policy,
164
+ target,
165
+ format: options.format,
166
+ verbose: options.verbose,
167
+ });
168
+ if (options.format === 'json') {
169
+ return {
170
+ success: result.status !== 'FAIL',
171
+ message: undefined,
172
+ data: result,
173
+ exitCode: result.status === 'FAIL' ? 1 : 0,
174
+ };
175
+ }
176
+ return {
177
+ success: result.status !== 'FAIL',
178
+ message: formatGuardResult(result, options.verbose),
179
+ data: result,
180
+ exitCode: result.status === 'FAIL' ? 1 : 0,
181
+ };
182
+ }
183
+ catch (error) {
184
+ const message = error instanceof Error ? error.message : 'Unknown error';
185
+ return {
186
+ success: false,
187
+ message: `Guard check failed: ${message}`,
188
+ data: undefined,
189
+ exitCode: 1,
190
+ };
191
+ }
192
+ }
193
+ /**
194
+ * Guard command handler
195
+ */
196
+ export async function guardCommand(args, options) {
197
+ const { subcommand, policy, target } = parseGuardArgs(args, options);
198
+ switch (subcommand) {
199
+ case 'check': {
200
+ if (policy === undefined) {
201
+ return {
202
+ success: false,
203
+ message: 'Error: --policy is required\n\nRun "ax guard help" for usage.',
204
+ data: undefined,
205
+ exitCode: 1,
206
+ };
207
+ }
208
+ if (target === undefined) {
209
+ return {
210
+ success: false,
211
+ message: 'Error: --target is required\n\nRun "ax guard help" for usage.',
212
+ data: undefined,
213
+ exitCode: 1,
214
+ };
215
+ }
216
+ return runGuardCheck(policy, target, options);
217
+ }
218
+ case 'list':
219
+ return listPoliciesCommand();
220
+ case 'help':
221
+ default:
222
+ return showGuardHelp();
223
+ }
224
+ }
225
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/commands/guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CommandResult, CLIOptions } from '../types.js';
2
+ export declare const CLI_VERSION: string;
3
+ /**
4
+ * Handles the 'help' command
5
+ */
6
+ export declare function helpCommand(_args: string[], _options: CLIOptions): Promise<CommandResult>;
7
+ /**
8
+ * Handles the 'version' command
9
+ */
10
+ export declare function versionCommand(_args: string[], _options: CLIOptions): Promise<CommandResult>;
11
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO7D,eAAO,MAAM,WAAW,QAAc,CAAC;AAyJvC;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,aAAa,CAAC,CAOxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,aAAa,CAAC,CAOxB"}
@@ -0,0 +1,180 @@
1
+ import { createRequire } from 'node:module';
2
+ /**
3
+ * Read CLI version from package.json
4
+ */
5
+ const require = createRequire(import.meta.url);
6
+ const pkg = require('../../package.json');
7
+ export const CLI_VERSION = pkg.version;
8
+ /**
9
+ * Help text for the CLI
10
+ */
11
+ const HELP_TEXT = `
12
+ AutomatosX - AI-powered workflow automation
13
+
14
+ Usage:
15
+ ax <command> [options]
16
+
17
+ Commands:
18
+ setup Initialize AutomatosX configuration
19
+ config <subcommand> Manage configuration (show, get, set, reset, path)
20
+ run <workflow-id> Execute a workflow
21
+ list List available workflows
22
+ trace [trace-id] View trace information
23
+ doctor [provider] Check system health and provider CLIs
24
+ guard <subcommand> Post-check AI coding governance
25
+ call <provider> Call an AI provider directly
26
+ agent <subcommand> Manage agents (list, get, register, run, remove)
27
+ session <subcommand> Manage sessions (list, get, create, join, complete)
28
+ review <subcommand> AI-powered code review (analyze, list)
29
+ scaffold <subcommand> Scaffold contract-first components
30
+ discuss <topic> Multi-model discussion and consensus
31
+ ability <subcommand> Manage abilities (list, inject)
32
+ mcp <subcommand> MCP server for AI coding assistants
33
+ status Show current session status
34
+ resume Resume a previous session
35
+ history View execution history
36
+ cleanup Clean up old sessions and data
37
+ iterate Iterative development loop
38
+ update Check for updates and upgrade CLI
39
+ help Show this help message
40
+ version Show version information
41
+
42
+ Config Subcommands:
43
+ config show Show current configuration
44
+ config get <path> Get a specific config value
45
+ config set <path> <v> Set a config value
46
+ config reset Reset configuration to defaults
47
+ config path Show config file paths
48
+
49
+ Agent Subcommands:
50
+ agent list List registered agents
51
+ agent get <id> Get agent details
52
+ agent register Register a new agent from JSON input
53
+ agent run <id> Execute an agent
54
+ agent remove <id> Remove an agent
55
+
56
+ Session Subcommands:
57
+ session list List sessions
58
+ session get <id> Get session details
59
+ session create Create a new session
60
+ session join <id> Join a session
61
+ session leave <id> Leave a session
62
+ session complete <id> Complete a session
63
+ session fail <id> Fail a session
64
+
65
+ Review Subcommands:
66
+ review analyze <paths> AI-powered code review with focus modes
67
+ review list List past code reviews
68
+
69
+ Focus modes: --focus security|architecture|performance|maintainability|correctness|all
70
+
71
+ Scaffold Subcommands:
72
+ scaffold project <name> Generate new project from template
73
+ scaffold contract <name> Generate Zod schema and invariants
74
+ scaffold domain <name> Generate complete domain package
75
+ scaffold guard <id> Generate guard policy
76
+
77
+ Scaffold Options:
78
+ -t, --template <type> Template: monorepo or standalone (default: standalone)
79
+ -m, --domain <name> Primary domain name (required for project)
80
+ -d, --description <desc> Domain description
81
+ -o, --output <path> Output directory
82
+ -s, --scope <scope> Package scope (default: @myorg)
83
+ -r, --radius <n> Change radius limit (default: 3)
84
+ --no-tests Skip test scaffolds
85
+ --no-guard Skip guard policy
86
+ --dry-run Preview without writing files
87
+
88
+ Discuss Options:
89
+ discuss <topic> Start multi-model discussion
90
+ discuss quick <topic> Quick 2-3 model synthesis
91
+
92
+ Discuss Flags:
93
+ --providers <list> Comma-separated providers (default: claude,glm,qwen,gemini)
94
+ --pattern <type> Pattern: synthesis, voting, debate, critique, round-robin
95
+ --rounds <n> Number of discussion rounds (default: 2)
96
+ --consensus <method> Method: synthesis, voting, moderator, unanimous, majority
97
+ --context <text> Additional context for discussion
98
+ --verbose, -v Show detailed progress
99
+
100
+ Ability Subcommands:
101
+ ability list List available abilities
102
+ ability inject Inject abilities into context
103
+
104
+ MCP Subcommands:
105
+ mcp server Start MCP server (stdio transport)
106
+ mcp serve Alias for 'server'
107
+
108
+ Options:
109
+ -h, --help Show help
110
+ -v, --verbose Enable verbose output
111
+ -V, --version Show version
112
+ --format <format> Output format: text (default) or json
113
+ --workflow-dir <dir> Path to workflow files directory
114
+ --workflow-id <id> Workflow ID for run command
115
+ --trace-id <id> Trace ID for trace command
116
+ --limit <n> Limit number of results
117
+ --input <json> Input JSON for workflow execution
118
+
119
+ Examples:
120
+ ax setup
121
+ ax setup --force
122
+ ax config show
123
+ ax config get logLevel
124
+ ax config set logLevel debug
125
+ ax run my-workflow
126
+ ax run my-workflow --input '{"key": "value"}'
127
+ ax list --format json
128
+ ax trace
129
+ ax trace abc123-def456 --verbose
130
+ ax doctor
131
+ ax doctor claude --verbose
132
+ ax guard check --policy provider-refactor --target openai
133
+ ax guard list
134
+ ax call gemini "Summarize this text"
135
+ ax call claude --file ./README.md "Explain in Chinese"
136
+ ax agent list
137
+ ax agent get code-reviewer
138
+ ax agent run code-reviewer --input '{"query": "Review this code"}'
139
+ ax session create --input '{"initiator": "agent-1", "task": "Review code"}'
140
+ ax session get <session-id>
141
+ ax review analyze src/ --focus security
142
+ ax review analyze src/ --focus maintainability
143
+ ax review list --limit 10
144
+ ax scaffold project my-app -m order -t standalone
145
+ ax scaffold project ecommerce -m order -t monorepo -s @myorg
146
+ ax scaffold contract payment -d "Payment processing domain"
147
+ ax scaffold domain payment --no-tests
148
+ ax scaffold guard payment-dev -r 3
149
+ ax scaffold project my-app -m order --dry-run
150
+ ax discuss "What is the best approach for microservices?"
151
+ ax discuss --pattern debate "Monolith vs microservices for startups"
152
+ ax discuss quick "Best testing strategy for APIs"
153
+ ax ability list
154
+ ax update
155
+ ax update --check
156
+ ax update --yes
157
+ `.trim();
158
+ /**
159
+ * Handles the 'help' command
160
+ */
161
+ export function helpCommand(_args, _options) {
162
+ return Promise.resolve({
163
+ success: true,
164
+ message: HELP_TEXT,
165
+ data: undefined,
166
+ exitCode: 0,
167
+ });
168
+ }
169
+ /**
170
+ * Handles the 'version' command
171
+ */
172
+ export function versionCommand(_args, _options) {
173
+ return Promise.resolve({
174
+ success: true,
175
+ message: `ax version ${CLI_VERSION}`,
176
+ data: { version: CLI_VERSION },
177
+ exitCode: 0,
178
+ });
179
+ }
180
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkJjB,CAAC,IAAI,EAAE,CAAC;AAET;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAe,EACf,QAAoB;IAEpB,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAe,EACf,QAAoB;IAEpB,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,cAAc,WAAW,EAAE;QACpC,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;QAC9B,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * History Command
3
+ *
4
+ * View past agent run history.
5
+ * Provides visibility into completed, failed, and running executions.
6
+ *
7
+ * Usage:
8
+ * ax history # Show last 10 runs
9
+ * ax history --limit=20 # Show last 20 runs
10
+ * ax history --agent=coder # Filter by agent
11
+ * ax history --status=failed # Show only failed runs
12
+ * ax history --verbose # Show full details
13
+ */
14
+ import type { CommandResult, CLIOptions } from '../types.js';
15
+ /**
16
+ * History command handler
17
+ */
18
+ export declare function historyCommand(_args: string[], options: CLIOptions): Promise<CommandResult>;
19
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA4B7D;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC,CAuFxB"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * History Command
3
+ *
4
+ * View past agent run history.
5
+ * Provides visibility into completed, failed, and running executions.
6
+ *
7
+ * Usage:
8
+ * ax history # Show last 10 runs
9
+ * ax history --limit=20 # Show last 20 runs
10
+ * ax history --agent=coder # Filter by agent
11
+ * ax history --status=failed # Show only failed runs
12
+ * ax history --verbose # Show full details
13
+ */
14
+ import { safeValidateHistoryOptions, } from '@defai.digital/contracts';
15
+ import { createSessionManager, createSessionStore, DEFAULT_SESSION_DOMAIN_CONFIG, } from '@defai.digital/session-domain';
16
+ // Lazy-initialized session manager (shared across commands)
17
+ let sessionManager;
18
+ /**
19
+ * Get or create the session manager instance
20
+ */
21
+ function getSessionManager() {
22
+ if (sessionManager === undefined) {
23
+ const store = createSessionStore();
24
+ sessionManager = createSessionManager(store, DEFAULT_SESSION_DOMAIN_CONFIG);
25
+ }
26
+ return sessionManager;
27
+ }
28
+ /**
29
+ * History command handler
30
+ */
31
+ export async function historyCommand(_args, options) {
32
+ // Parse and validate options
33
+ const opts = extractHistoryOptions(options);
34
+ const validation = safeValidateHistoryOptions(opts);
35
+ if (!validation.success) {
36
+ return {
37
+ success: false,
38
+ exitCode: 1,
39
+ message: `Invalid options: ${validation.error.errors.map((e) => e.message).join(', ')}`,
40
+ data: undefined,
41
+ };
42
+ }
43
+ const historyOpts = validation.data;
44
+ // Get run history
45
+ // Note: This would integrate with session-domain's getRunHistory
46
+ const runs = await getRunHistory(historyOpts.agent, historyOpts.status, historyOpts.limit ?? 10);
47
+ if (runs.length === 0) {
48
+ return {
49
+ success: true,
50
+ exitCode: 0,
51
+ message: historyOpts.agent
52
+ ? `No runs found for agent: ${historyOpts.agent}`
53
+ : 'No runs found',
54
+ data: { runs: [] },
55
+ };
56
+ }
57
+ // Format for JSON output
58
+ if (historyOpts.format === 'json') {
59
+ return {
60
+ success: true,
61
+ exitCode: 0,
62
+ message: undefined,
63
+ data: { runs },
64
+ };
65
+ }
66
+ // Format for text output
67
+ console.log('');
68
+ console.log('Run History:');
69
+ console.log('');
70
+ if (historyOpts.verbose) {
71
+ // Detailed view
72
+ for (const run of runs) {
73
+ console.log(`${formatStatus(run.status)} ${run.agentId}`);
74
+ console.log(` Task: ${truncate(run.task, 60)}`);
75
+ console.log(` Started: ${formatAge(run.startedAt)}`);
76
+ console.log(` Duration: ${formatDuration(run.durationMs)}`);
77
+ console.log(` Steps: ${run.stepsCompleted}`);
78
+ if (run.error) {
79
+ console.log(` Error: ${run.error}`);
80
+ }
81
+ console.log('');
82
+ }
83
+ }
84
+ else {
85
+ // Compact view
86
+ console.log('Status Agent Started Duration Task');
87
+ console.log('------ -------------- ---------- -------- ----');
88
+ for (const run of runs) {
89
+ const status = formatStatus(run.status);
90
+ const agent = run.agentId.slice(0, 14).padEnd(14);
91
+ const started = formatAge(run.startedAt).padEnd(10);
92
+ const duration = formatDuration(run.durationMs).padEnd(8);
93
+ const task = truncate(run.task, 40);
94
+ console.log(`${status} ${agent} ${started} ${duration} ${task}`);
95
+ }
96
+ }
97
+ console.log('');
98
+ return {
99
+ success: true,
100
+ exitCode: 0,
101
+ message: undefined,
102
+ data: { runs, count: runs.length },
103
+ };
104
+ }
105
+ /**
106
+ * Extract history options from CLI options
107
+ */
108
+ function extractHistoryOptions(options) {
109
+ const opts = options;
110
+ return {
111
+ agent: opts.agent,
112
+ status: opts.status,
113
+ limit: opts.limit ?? 10,
114
+ verbose: options.verbose,
115
+ format: options.format,
116
+ };
117
+ }
118
+ /**
119
+ * Get run history from session-domain
120
+ */
121
+ async function getRunHistory(agentId, status, limit) {
122
+ try {
123
+ const manager = getSessionManager();
124
+ // Build options object conforming to HistoryQuery contract
125
+ // limit is required in the contract (has default in schema)
126
+ const options = {
127
+ limit: limit ?? 10, // Default to 10 if not provided
128
+ };
129
+ if (agentId !== undefined) {
130
+ options.agentId = agentId;
131
+ }
132
+ if (status !== undefined) {
133
+ options.status = status;
134
+ }
135
+ const domainRecords = await manager.getRunHistory(options);
136
+ // Map domain records to contract RunRecord type
137
+ // They should be compatible but we cast explicitly for safety
138
+ return domainRecords;
139
+ }
140
+ catch {
141
+ // Return empty array on error
142
+ return [];
143
+ }
144
+ }
145
+ /**
146
+ * Format run status for display
147
+ */
148
+ function formatStatus(status) {
149
+ switch (status) {
150
+ case 'completed':
151
+ return '[OK] ';
152
+ case 'failed':
153
+ return '[FAIL]';
154
+ case 'running':
155
+ return '[... ]';
156
+ case 'cancelled':
157
+ return '[STOP]';
158
+ default:
159
+ return '[?] ';
160
+ }
161
+ }
162
+ /**
163
+ * Format duration in milliseconds
164
+ */
165
+ function formatDuration(ms) {
166
+ if (ms === undefined)
167
+ return '-';
168
+ if (ms < 1000)
169
+ return `${ms}ms`;
170
+ if (ms < 60000)
171
+ return `${Math.round(ms / 1000)}s`;
172
+ if (ms < 3600000)
173
+ return `${Math.round(ms / 60000)}m`;
174
+ return `${Math.round(ms / 3600000)}h`;
175
+ }
176
+ /**
177
+ * Format a datetime as human-readable age
178
+ */
179
+ function formatAge(isoDate) {
180
+ const diff = Date.now() - new Date(isoDate).getTime();
181
+ const minutes = Math.floor(diff / 60000);
182
+ const hours = Math.floor(minutes / 60);
183
+ const days = Math.floor(hours / 24);
184
+ if (days > 0)
185
+ return `${days}d ago`;
186
+ if (hours > 0)
187
+ return `${hours}h ago`;
188
+ if (minutes > 0)
189
+ return `${minutes}m ago`;
190
+ return 'just now';
191
+ }
192
+ /**
193
+ * Truncate string with ellipsis
194
+ */
195
+ function truncate(str, maxLength) {
196
+ if (str.length <= maxLength)
197
+ return str;
198
+ return str.slice(0, maxLength - 3) + '...';
199
+ }
200
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}