agent-office 0.5.0 → 0.6.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/LICENSE +1 -1
- package/README.md +259 -228
- package/dist/commands/cron-requests.d.ts +7 -0
- package/dist/commands/cron-requests.d.ts.map +1 -0
- package/dist/commands/cron-requests.js +31 -0
- package/dist/commands/cron-requests.js.map +1 -0
- package/dist/commands/crons.d.ts +10 -0
- package/dist/commands/crons.d.ts.map +1 -0
- package/dist/commands/crons.js +45 -0
- package/dist/commands/crons.js.map +1 -0
- package/dist/commands/hello.d.ts +5 -0
- package/dist/commands/hello.d.ts.map +1 -0
- package/dist/commands/hello.js +4 -0
- package/dist/commands/hello.js.map +1 -0
- package/dist/commands/messages.d.ts +5 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +18 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/sessions.d.ts +13 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +58 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/task-columns.d.ts +2 -0
- package/dist/commands/task-columns.d.ts.map +1 -0
- package/dist/commands/task-columns.js +13 -0
- package/dist/commands/task-columns.js.map +1 -0
- package/dist/commands/tasks.d.ts +11 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +75 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +50 -0
- package/dist/config.test.js.map +1 -0
- package/dist/db/index.d.ts +6 -70
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -11
- package/dist/db/index.js.map +1 -0
- package/dist/db/mock-storage.d.ts +79 -0
- package/dist/db/mock-storage.d.ts.map +1 -0
- package/dist/db/mock-storage.js +381 -0
- package/dist/db/mock-storage.js.map +1 -0
- package/dist/db/mock-storage.test.d.ts +2 -0
- package/dist/db/mock-storage.test.d.ts.map +1 -0
- package/dist/db/mock-storage.test.js +234 -0
- package/dist/db/mock-storage.test.js.map +1 -0
- package/dist/db/postgresql-storage.d.ts +10 -8
- package/dist/db/postgresql-storage.d.ts.map +1 -0
- package/dist/db/postgresql-storage.js +76 -42
- package/dist/db/postgresql-storage.js.map +1 -0
- package/dist/db/sqlite-storage.d.ts +9 -8
- package/dist/db/sqlite-storage.d.ts.map +1 -0
- package/dist/db/sqlite-storage.js +75 -41
- package/dist/db/sqlite-storage.js.map +1 -0
- package/dist/db/storage-base.d.ts +7 -8
- package/dist/db/storage-base.d.ts.map +1 -0
- package/dist/db/storage-base.js +3 -2
- package/dist/db/storage-base.js.map +1 -0
- package/dist/db/storage.d.ts +12 -12
- package/dist/db/storage.d.ts.map +1 -0
- package/dist/db/storage.js +1 -0
- package/dist/db/storage.js.map +1 -0
- package/dist/db/types.d.ts +67 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +397 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +49 -0
- package/dist/index.test.js.map +1 -0
- package/dist/lib/output.d.ts +2 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +8 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/services/cron-service.constraints.test.d.ts +2 -0
- package/dist/services/cron-service.constraints.test.d.ts.map +1 -0
- package/dist/services/cron-service.constraints.test.js +90 -0
- package/dist/services/cron-service.constraints.test.js.map +1 -0
- package/dist/services/cron-service.d.ts +45 -0
- package/dist/services/cron-service.d.ts.map +1 -0
- package/dist/services/cron-service.js +157 -0
- package/dist/services/cron-service.js.map +1 -0
- package/dist/services/cron-service.test.d.ts +2 -0
- package/dist/services/cron-service.test.d.ts.map +1 -0
- package/dist/services/cron-service.test.js +280 -0
- package/dist/services/cron-service.test.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +5 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/message-service.d.ts +16 -0
- package/dist/services/message-service.d.ts.map +1 -0
- package/dist/services/message-service.js +39 -0
- package/dist/services/message-service.js.map +1 -0
- package/dist/services/message-service.test.d.ts +2 -0
- package/dist/services/message-service.test.d.ts.map +1 -0
- package/dist/services/message-service.test.js +145 -0
- package/dist/services/message-service.test.js.map +1 -0
- package/dist/services/session-service.constraints.test.d.ts +2 -0
- package/dist/services/session-service.constraints.test.d.ts.map +1 -0
- package/dist/services/session-service.constraints.test.js +34 -0
- package/dist/services/session-service.constraints.test.js.map +1 -0
- package/dist/services/session-service.d.ts +27 -0
- package/dist/services/session-service.d.ts.map +1 -0
- package/dist/services/session-service.js +55 -0
- package/dist/services/session-service.js.map +1 -0
- package/dist/services/session-service.test.d.ts +2 -0
- package/dist/services/session-service.test.d.ts.map +1 -0
- package/dist/services/session-service.test.js +87 -0
- package/dist/services/session-service.test.js.map +1 -0
- package/dist/services/task-service.d.ts +25 -0
- package/dist/services/task-service.d.ts.map +1 -0
- package/dist/services/task-service.js +87 -0
- package/dist/services/task-service.js.map +1 -0
- package/dist/services/task-service.test.d.ts +2 -0
- package/dist/services/task-service.test.d.ts.map +1 -0
- package/dist/services/task-service.test.js +180 -0
- package/dist/services/task-service.test.js.map +1 -0
- package/package.json +40 -42
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +0 -317
- package/dist/commands/communicator.d.ts +0 -9
- package/dist/commands/communicator.js +0 -2232
- package/dist/commands/manage.d.ts +0 -5
- package/dist/commands/manage.js +0 -20
- package/dist/commands/notifier.d.ts +0 -11
- package/dist/commands/notifier.js +0 -100
- package/dist/commands/screensaver.d.ts +0 -8
- package/dist/commands/screensaver.js +0 -1280
- package/dist/commands/serve.d.ts +0 -13
- package/dist/commands/serve.js +0 -95
- package/dist/commands/task-board.d.ts +0 -29
- package/dist/commands/task-board.js +0 -251
- package/dist/commands/worker.d.ts +0 -16
- package/dist/commands/worker.js +0 -145
- package/dist/db/migrate.d.ts +0 -2
- package/dist/db/migrate.js +0 -3
- package/dist/lib/agentic-coding-server.d.ts +0 -66
- package/dist/lib/agentic-coding-server.js +0 -7
- package/dist/lib/notifier.d.ts +0 -18
- package/dist/lib/notifier.js +0 -15
- package/dist/lib/opencode-coding-server.d.ts +0 -11
- package/dist/lib/opencode-coding-server.js +0 -66
- package/dist/lib/pi-coding-server.d.ts +0 -20
- package/dist/lib/pi-coding-server.js +0 -162
- package/dist/manage/app.d.ts +0 -6
- package/dist/manage/app.js +0 -128
- package/dist/manage/components/AgentCode.d.ts +0 -8
- package/dist/manage/components/AgentCode.js +0 -73
- package/dist/manage/components/CreateSession.d.ts +0 -8
- package/dist/manage/components/CreateSession.js +0 -37
- package/dist/manage/components/CronList.d.ts +0 -9
- package/dist/manage/components/CronList.js +0 -321
- package/dist/manage/components/CronRequests.d.ts +0 -8
- package/dist/manage/components/CronRequests.js +0 -181
- package/dist/manage/components/DeleteSession.d.ts +0 -7
- package/dist/manage/components/DeleteSession.js +0 -55
- package/dist/manage/components/InjectText.d.ts +0 -8
- package/dist/manage/components/InjectText.js +0 -51
- package/dist/manage/components/ItemSelector.d.ts +0 -7
- package/dist/manage/components/ItemSelector.js +0 -20
- package/dist/manage/components/MenuSelect.d.ts +0 -13
- package/dist/manage/components/MenuSelect.js +0 -22
- package/dist/manage/components/MyMail.d.ts +0 -9
- package/dist/manage/components/MyMail.js +0 -143
- package/dist/manage/components/Profile.d.ts +0 -8
- package/dist/manage/components/Profile.js +0 -60
- package/dist/manage/components/ReadMail.d.ts +0 -8
- package/dist/manage/components/ReadMail.js +0 -110
- package/dist/manage/components/SendMessage.d.ts +0 -9
- package/dist/manage/components/SendMessage.js +0 -79
- package/dist/manage/components/SessionList.d.ts +0 -9
- package/dist/manage/components/SessionList.js +0 -608
- package/dist/manage/components/SessionSidebar.d.ts +0 -6
- package/dist/manage/components/SessionSidebar.js +0 -24
- package/dist/manage/components/TailMessages.d.ts +0 -8
- package/dist/manage/components/TailMessages.js +0 -126
- package/dist/manage/hooks/useApi.d.ts +0 -147
- package/dist/manage/hooks/useApi.js +0 -181
- package/dist/server/cron.d.ts +0 -25
- package/dist/server/cron.js +0 -107
- package/dist/server/index.d.ts +0 -4
- package/dist/server/index.js +0 -22
- package/dist/server/routes.d.ts +0 -13
- package/dist/server/routes.js +0 -1396
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,349 +1,380 @@
|
|
|
1
1
|
# agent-office
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A multi-agent office management system CLI for coordinating AI coworkers, messages, scheduled tasks, and project workflows.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Features
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- **Coworker Management**: Create and manage AI agent coworkers with descriptions, philosophy, and visual descriptions
|
|
8
|
+
- **Message System**: Send and receive messages between coworkers with read/unread tracking
|
|
9
|
+
- **Cron Jobs**: Schedule automated messages with cron expressions (with optional approval workflow)
|
|
10
|
+
- **Task Board**: Kanban-style task management with columns, assignments, and dependencies
|
|
11
|
+
- **TOON Format**: All output encoded in TOON (Token-Oriented Object Notation) by default for compact, LLM-friendly output
|
|
12
|
+
- **JSON Option**: Use `--json` flag for traditional JSON output
|
|
13
|
+
- **Multiple Storage Backends**: SQLite or PostgreSQL support
|
|
14
|
+
- **Comprehensive Testing**: 148 tests with full coverage
|
|
8
15
|
|
|
9
|
-
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install -g agent-office
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or use with npx:
|
|
10
23
|
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
|
|
24
|
+
```bash
|
|
25
|
+
npx agent-office --help
|
|
26
|
+
```
|
|
14
27
|
|
|
15
|
-
|
|
28
|
+
## Development
|
|
16
29
|
|
|
17
|
-
|
|
30
|
+
Install dependencies:
|
|
18
31
|
|
|
32
|
+
```bash
|
|
33
|
+
npm install
|
|
19
34
|
```
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
+--------------+ +---------+-----------+ +--------------+
|
|
26
|
-
| TUI (manage) |<-->| agent-office serve |<-->| PostgreSQL |
|
|
27
|
-
| Ink/React | | :7654 | | |
|
|
28
|
-
+--------------+ | | +--------------+
|
|
29
|
-
| CronScheduler |
|
|
30
|
-
+--------------+ | |
|
|
31
|
-
| Communicator |<-->| |
|
|
32
|
-
| Web (HTMX) | | |
|
|
33
|
-
| :7655 | +---------+-----------+
|
|
34
|
-
+--------------+ |
|
|
35
|
-
| /worker/* endpoints
|
|
36
|
-
+---------+-----------+
|
|
37
|
-
| AI Agent Workers |
|
|
38
|
-
| (running inside |
|
|
39
|
-
| OpenCode sessions) |
|
|
40
|
-
+-----------------------+
|
|
35
|
+
|
|
36
|
+
Run in watch mode:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm run dev
|
|
41
40
|
```
|
|
42
41
|
|
|
43
|
-
|
|
42
|
+
Run once:
|
|
44
43
|
|
|
45
44
|
```bash
|
|
46
|
-
npm
|
|
45
|
+
npm run start
|
|
47
46
|
```
|
|
48
47
|
|
|
49
|
-
|
|
48
|
+
## Build
|
|
49
|
+
|
|
50
|
+
Compile TypeScript to JavaScript:
|
|
50
51
|
|
|
51
52
|
```bash
|
|
52
|
-
|
|
53
|
+
npm run build
|
|
53
54
|
```
|
|
54
55
|
|
|
55
|
-
##
|
|
56
|
+
## Global Options
|
|
57
|
+
|
|
58
|
+
- `--sqlite <path>` - SQLite database file path (env: `AGENT_OFFICE_SQLITE`)
|
|
59
|
+
- `--postgresql <url>` - PostgreSQL connection URL (env: `AGENT_OFFICE_POSTGRESQL`)
|
|
60
|
+
- `--json` - Output in JSON format instead of TOON (default: false)
|
|
61
|
+
- `-V, --version` - Show version
|
|
62
|
+
- `-h, --help` - Show help
|
|
56
63
|
|
|
57
|
-
|
|
58
|
-
- A running [OpenCode](https://opencode.ai) server (`opencode serve`)
|
|
59
|
-
- A PostgreSQL database
|
|
64
|
+
## Output Formats
|
|
60
65
|
|
|
61
|
-
|
|
66
|
+
### TOON (Default)
|
|
62
67
|
|
|
63
|
-
|
|
68
|
+
Token-Oriented Object Notation - a compact, human-readable format optimized for LLM prompts:
|
|
64
69
|
|
|
65
70
|
```bash
|
|
66
|
-
agent-office
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
$ npx agent-office --sqlite ./data.db list-coworkers
|
|
72
|
+
[2]{name,agent,status,description,created_at}:
|
|
73
|
+
Alice,claude,active,"AI assistant",2024-01-15T10:30:00.000Z
|
|
74
|
+
Bob,gpt-4,available,null,2024-01-15T10:25:00.000Z
|
|
70
75
|
```
|
|
71
76
|
|
|
72
|
-
|
|
77
|
+
### JSON
|
|
73
78
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
In another terminal:
|
|
79
|
+
Use `--json` flag anywhere in the command for traditional JSON output:
|
|
77
80
|
|
|
78
81
|
```bash
|
|
79
|
-
agent-office
|
|
82
|
+
$ npx agent-office --sqlite ./data.db --json list-coworkers
|
|
83
|
+
[
|
|
84
|
+
{
|
|
85
|
+
"name": "Alice",
|
|
86
|
+
"agent": "claude",
|
|
87
|
+
"status": "active",
|
|
88
|
+
"description": "AI assistant",
|
|
89
|
+
"created_at": "2024-01-15T10:30:00.000Z"
|
|
90
|
+
}
|
|
91
|
+
]
|
|
80
92
|
```
|
|
81
93
|
|
|
82
|
-
|
|
94
|
+
## Commands
|
|
95
|
+
|
|
96
|
+
### Coworker Management
|
|
83
97
|
|
|
84
|
-
|
|
98
|
+
**list-coworkers** - List all coworkers (sessions)
|
|
85
99
|
|
|
86
100
|
```bash
|
|
87
|
-
agent-office
|
|
101
|
+
npx agent-office --sqlite ./data.db list-coworkers
|
|
88
102
|
```
|
|
89
103
|
|
|
90
|
-
|
|
104
|
+
**create-coworker** - Create a new coworker
|
|
91
105
|
|
|
92
|
-
|
|
106
|
+
```bash
|
|
107
|
+
npx agent-office --sqlite ./data.db create-coworker --name Alice --id alice-001 --agent claude
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**get-coworker-info** - Get coworker details
|
|
93
111
|
|
|
94
|
-
|
|
112
|
+
```bash
|
|
113
|
+
npx agent-office --sqlite ./data.db get-coworker-info --name Alice
|
|
114
|
+
```
|
|
95
115
|
|
|
96
|
-
|
|
116
|
+
**update-coworker** - Update coworker information
|
|
97
117
|
|
|
98
|
-
|
|
118
|
+
```bash
|
|
119
|
+
# Set status
|
|
120
|
+
npx agent-office --sqlite ./data.db update-coworker --name Alice --status busy
|
|
99
121
|
|
|
100
|
-
|
|
122
|
+
# Set description and philosophy
|
|
123
|
+
npx agent-office --sqlite ./data.db update-coworker --name Alice \
|
|
124
|
+
--description "Senior AI developer" \
|
|
125
|
+
--philosophy "Write clean, maintainable code" \
|
|
126
|
+
--visual-description "A friendly robot wearing glasses"
|
|
101
127
|
|
|
102
|
-
|
|
128
|
+
# Clear a field (omit the value)
|
|
129
|
+
npx agent-office --sqlite ./data.db update-coworker --name Alice --status
|
|
130
|
+
```
|
|
103
131
|
|
|
104
|
-
|
|
132
|
+
**delete-coworker** - Delete a coworker and all their data (messages, cron jobs, cron requests)
|
|
105
133
|
|
|
106
|
-
|
|
134
|
+
```bash
|
|
135
|
+
npx agent-office --sqlite ./data.db delete-coworker --name Alice
|
|
136
|
+
```
|
|
107
137
|
|
|
108
|
-
###
|
|
138
|
+
### Message Commands
|
|
109
139
|
|
|
110
|
-
|
|
140
|
+
**send-message** - Send a message to one or more recipients
|
|
111
141
|
|
|
112
|
-
|
|
142
|
+
```bash
|
|
143
|
+
npx agent-office --sqlite ./data.db send-message --from Alice --to Bob Charlie --body "Hello team!"
|
|
144
|
+
```
|
|
113
145
|
|
|
114
|
-
|
|
146
|
+
**check-unread-mail** - Check if there is unread mail for a coworker
|
|
115
147
|
|
|
116
|
-
|
|
148
|
+
```bash
|
|
149
|
+
npx agent-office --sqlite ./data.db check-unread-mail --coworker Bob
|
|
150
|
+
# Output: hasUnread: true
|
|
151
|
+
```
|
|
117
152
|
|
|
118
|
-
|
|
153
|
+
**get-unread-mail** - Get all unread mail for a coworker and mark as read
|
|
119
154
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
4. **Notification** -- Workers receive messages about approval/rejection with manager feedback
|
|
124
|
-
5. **Active Jobs** -- Approved cron jobs appear in `agent-office worker cron list` and execute according to schedule
|
|
155
|
+
```bash
|
|
156
|
+
npx agent-office --sqlite ./data.db get-unread-mail --coworker Bob
|
|
157
|
+
```
|
|
125
158
|
|
|
126
|
-
|
|
127
|
-
- No automated tasks run without human review
|
|
128
|
-
- Managers can provide feedback on scheduling decisions
|
|
129
|
-
- Clear audit trail of all cron job requests and decisions
|
|
130
|
-
- Workers understand the approval process and can resubmit if needed
|
|
159
|
+
### Cron Job Commands
|
|
131
160
|
|
|
132
|
-
|
|
161
|
+
**list-crons** - List all cron jobs
|
|
133
162
|
|
|
134
|
-
|
|
163
|
+
```bash
|
|
164
|
+
npx agent-office --sqlite ./data.db list-crons
|
|
165
|
+
```
|
|
135
166
|
|
|
136
|
-
-
|
|
137
|
-
- **Agent code** -- AI agents authenticate with a UUID passed as `?code=<uuid>` for all `/worker/*` endpoints. Each agent gets a unique code generated at session creation time.
|
|
167
|
+
**create-cron** - Create a new cron job directly
|
|
138
168
|
|
|
139
|
-
|
|
169
|
+
```bash
|
|
170
|
+
npx agent-office --sqlite ./data.db create-cron \
|
|
171
|
+
--name "Daily Standup" \
|
|
172
|
+
--coworker Alice \
|
|
173
|
+
--schedule "0 9 * * *" \
|
|
174
|
+
--message "Time for daily standup" \
|
|
175
|
+
--timezone "America/New_York"
|
|
176
|
+
```
|
|
140
177
|
|
|
141
|
-
|
|
178
|
+
**delete-cron** - Delete a cron job
|
|
142
179
|
|
|
143
180
|
```bash
|
|
144
|
-
|
|
181
|
+
npx agent-office --sqlite ./data.db delete-cron --id 1
|
|
145
182
|
```
|
|
146
183
|
|
|
147
|
-
|
|
148
|
-
|---|---|---|
|
|
149
|
-
| `DATABASE_URL` | PostgreSQL connection string | (required) |
|
|
150
|
-
| `AGENT_OFFICE_PASSWORD` | API password for human access | (required) |
|
|
151
|
-
| `OPENCODE_URL` | OpenCode server URL | `http://localhost:4096` |
|
|
152
|
-
| `AGENT_OFFICE_URL` | Server URL for manage/communicator clients | `http://127.0.0.1:7654` |
|
|
184
|
+
**enable-cron** - Enable a cron job
|
|
153
185
|
|
|
154
|
-
|
|
186
|
+
```bash
|
|
187
|
+
npx agent-office --sqlite ./data.db enable-cron --id 1
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**disable-cron** - Disable a cron job
|
|
155
191
|
|
|
156
|
-
|
|
192
|
+
```bash
|
|
193
|
+
npx agent-office --sqlite ./data.db disable-cron --id 1
|
|
194
|
+
```
|
|
157
195
|
|
|
158
|
-
|
|
196
|
+
**cron-history** - Get cron job execution history
|
|
159
197
|
|
|
198
|
+
```bash
|
|
199
|
+
npx agent-office --sqlite ./data.db cron-history --id 1 --limit 10
|
|
160
200
|
```
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
201
|
+
|
|
202
|
+
**check-cron-job** - Check if a cron job should run this minute
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
npx agent-office --sqlite ./data.db check-cron-job --id 1
|
|
206
|
+
# Output: shouldRun: true
|
|
167
207
|
```
|
|
168
208
|
|
|
169
|
-
###
|
|
209
|
+
### Cron Request Commands (Approval Workflow)
|
|
170
210
|
|
|
171
|
-
|
|
211
|
+
**list-cron-requests** - List all cron job requests
|
|
172
212
|
|
|
213
|
+
```bash
|
|
214
|
+
npx agent-office --sqlite ./data.db list-cron-requests
|
|
173
215
|
```
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
216
|
+
|
|
217
|
+
**request-cron** - Request a new cron job (requires approval)
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
npx agent-office --sqlite ./data.db request-cron \
|
|
221
|
+
--name "Weekly Report" \
|
|
222
|
+
--coworker Alice \
|
|
223
|
+
--schedule "0 9 * * 1" \
|
|
224
|
+
--message "Generate weekly report"
|
|
177
225
|
```
|
|
178
226
|
|
|
179
|
-
|
|
227
|
+
**get-cron-request** - Get details of a cron request
|
|
180
228
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
| **Send message** | Select a recipient and compose a message |
|
|
185
|
-
| **My mail** | View received and sent messages. `r` reply, `m` mark read, `a` mark all read. Tab between received/sent |
|
|
186
|
-
| **Cron jobs** | Table of scheduled tasks with name, coworker, schedule, next run, and status. Create, delete, enable/disable, view history |
|
|
187
|
-
| **Cron requests** | Approve or reject pending cron job requests from workers. View request details, approve with notes, reject with reason |
|
|
188
|
-
| **My profile** | Set your display name and description (visible to agents in their welcome message) |
|
|
229
|
+
```bash
|
|
230
|
+
npx agent-office --sqlite ./data.db get-cron-request --id 1
|
|
231
|
+
```
|
|
189
232
|
|
|
190
|
-
|
|
233
|
+
**approve-cron-request** - Approve a pending cron request
|
|
191
234
|
|
|
192
|
-
|
|
235
|
+
```bash
|
|
236
|
+
npx agent-office --sqlite ./data.db approve-cron-request \
|
|
237
|
+
--id 1 \
|
|
238
|
+
--reviewer Bob \
|
|
239
|
+
--notes "Looks good, approved for production"
|
|
240
|
+
```
|
|
193
241
|
|
|
194
|
-
|
|
242
|
+
**reject-cron-request** - Reject a pending cron request
|
|
195
243
|
|
|
244
|
+
```bash
|
|
245
|
+
npx agent-office --sqlite ./data.db reject-cron-request \
|
|
246
|
+
--id 1 \
|
|
247
|
+
--reviewer Bob \
|
|
248
|
+
--notes "Please use a different schedule"
|
|
196
249
|
```
|
|
197
|
-
Arguments:
|
|
198
|
-
<coworker> Name of the coworker to chat with
|
|
199
250
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
--port <port> Communicator bind port (default: 7655)
|
|
205
|
-
--xai-key <key> xAI API key for voice chat (enables voice button)
|
|
251
|
+
**delete-cron-request** - Delete a cron request
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
npx agent-office --sqlite ./data.db delete-cron-request --id 1
|
|
206
255
|
```
|
|
207
256
|
|
|
208
|
-
|
|
257
|
+
### Task Board Commands
|
|
258
|
+
|
|
259
|
+
**list-tasks** - List all tasks
|
|
209
260
|
|
|
210
|
-
|
|
261
|
+
```bash
|
|
262
|
+
npx agent-office --sqlite ./data.db list-tasks
|
|
263
|
+
npx agent-office --sqlite ./data.db list-tasks --assignee Alice
|
|
264
|
+
npx agent-office --sqlite ./data.db list-tasks --column "working on"
|
|
265
|
+
```
|
|
211
266
|
|
|
212
|
-
|
|
267
|
+
**add-task** - Create a new task
|
|
213
268
|
|
|
214
269
|
```bash
|
|
215
|
-
|
|
216
|
-
|
|
270
|
+
npx agent-office --sqlite ./data.db add-task \
|
|
271
|
+
--title "Implement auth" \
|
|
272
|
+
--description "Add JWT authentication" \
|
|
273
|
+
--column "idea" \
|
|
274
|
+
--assignee Alice
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
**get-task** - Get a task by ID
|
|
217
278
|
|
|
218
|
-
|
|
219
|
-
agent-office
|
|
279
|
+
```bash
|
|
280
|
+
npx agent-office --sqlite ./data.db get-task --id 1
|
|
281
|
+
```
|
|
220
282
|
|
|
221
|
-
|
|
222
|
-
agent-office worker set-status --status "Working on auth module" <token>
|
|
223
|
-
agent-office worker set-status --clear <token>
|
|
283
|
+
**update-task** - Update a task
|
|
224
284
|
|
|
225
|
-
|
|
226
|
-
agent-office
|
|
285
|
+
```bash
|
|
286
|
+
npx agent-office --sqlite ./data.db update-task \
|
|
287
|
+
--id 1 \
|
|
288
|
+
--title "Updated title" \
|
|
289
|
+
--description "Updated description"
|
|
290
|
+
```
|
|
227
291
|
|
|
228
|
-
|
|
229
|
-
agent-office worker send-message --name Alice --body "Cost is \$50" <token>
|
|
292
|
+
**delete-task** - Delete a task
|
|
230
293
|
|
|
231
|
-
|
|
232
|
-
|
|
294
|
+
```bash
|
|
295
|
+
npx agent-office --sqlite ./data.db delete-task --id 1
|
|
296
|
+
```
|
|
233
297
|
|
|
234
|
-
|
|
235
|
-
agent-office worker cron list <token> # View your approved cron jobs
|
|
236
|
-
agent-office worker cron request --name "daily-report" --schedule "0 9 * * *" --message "Send daily status" --respond-to "Manager" <token>
|
|
237
|
-
agent-office worker cron request --name "weekly" --schedule "0 9 * * 1" --message "Weekly sync" --timezone "America/New_York" --respond-to "Manager" <token>
|
|
238
|
-
agent-office worker cron requests <token> # View status of all your requests (pending/approved/rejected)
|
|
239
|
-
agent-office worker cron delete <token> <id> # Delete your approved cron jobs
|
|
240
|
-
agent-office worker cron enable <token> <id> # Enable your approved cron jobs
|
|
241
|
-
agent-office worker cron disable <token> <id> # Disable your approved cron jobs
|
|
242
|
-
agent-office worker cron history <token> <id> # View execution history
|
|
298
|
+
**assign-task** - Assign a task to someone
|
|
243
299
|
|
|
300
|
+
```bash
|
|
301
|
+
npx agent-office --sqlite ./data.db assign-task --id 1 --assignee Bob
|
|
244
302
|
```
|
|
245
303
|
|
|
246
|
-
|
|
304
|
+
**unassign-task** - Remove assignment from a task
|
|
247
305
|
|
|
248
|
-
|
|
306
|
+
```bash
|
|
307
|
+
npx agent-office --sqlite ./data.db unassign-task --id 1
|
|
308
|
+
```
|
|
249
309
|
|
|
250
|
-
|
|
251
|
-
|---|---|---|
|
|
252
|
-
| `GET` | `/health` | Health check |
|
|
253
|
-
| `GET` | `/modes` | List available agent modes from the OpenCode server |
|
|
254
|
-
| `GET` | `/sessions` | List all sessions |
|
|
255
|
-
| `POST` | `/sessions` | Create a session. Body: `{ name, agent? }` |
|
|
256
|
-
| `DELETE` | `/sessions/:name` | Delete a session |
|
|
257
|
-
| `POST` | `/sessions/:name/regenerate-code` | Regenerate the agent code UUID |
|
|
258
|
-
| `GET` | `/sessions/:name/messages` | Fetch messages. Query: `?limit=N` (max 100) |
|
|
259
|
-
| `POST` | `/sessions/:name/inject` | Inject text. Body: `{ text }` |
|
|
260
|
-
| `POST` | `/sessions/:name/revert-to-start` | Revert session and re-enroll |
|
|
261
|
-
| `POST` | `/sessions/revert-all` | Revert all sessions |
|
|
262
|
-
| `GET` | `/config` | Get all config values |
|
|
263
|
-
| `PUT` | `/config` | Set a config value. Body: `{ key, value }` |
|
|
264
|
-
| `GET` | `/messages/:name` | Get messages for a person. Query: `?sent=true`, `?unread_only=true` |
|
|
265
|
-
| `POST` | `/messages` | Send a message. Body: `{ from, to: string[], body }` |
|
|
266
|
-
| `POST` | `/messages/:id/read` | Mark a message as read |
|
|
267
|
-
| `GET` | `/crons` | List approved cron jobs. Query: `?session_name=<name>` |
|
|
268
|
-
| `POST` | `/crons` | Create a cron job (admin only). Body: `{ name, session_name, schedule, message, timezone? }` |
|
|
269
|
-
| `DELETE` | `/crons/:id` | Delete a cron job |
|
|
270
|
-
| `POST` | `/crons/:id/enable` | Enable a cron job |
|
|
271
|
-
| `POST` | `/crons/:id/disable` | Disable a cron job |
|
|
272
|
-
| `GET` | `/crons/:id/history` | Cron execution history. Query: `?limit=N` |
|
|
273
|
-
| `GET` | `/cron-requests` | List all cron requests. Query: `?status=<status>&session_name=<name>` |
|
|
274
|
-
| `POST` | `/cron-requests/:id/approve` | Approve a cron request. Body: `{ notes? }` |
|
|
275
|
-
| `POST` | `/cron-requests/:id/reject` | Reject a cron request. Body: `{ notes? }` |
|
|
310
|
+
**move-task** - Move a task to a different column
|
|
276
311
|
|
|
312
|
+
```bash
|
|
313
|
+
npx agent-office --sqlite ./data.db move-task --id 1 --column "ready for review"
|
|
314
|
+
```
|
|
277
315
|
|
|
278
|
-
|
|
316
|
+
**task-stats** - Show task statistics by column
|
|
279
317
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
| `GET` | `/worker/list-coworkers` | List all other agents and the human manager |
|
|
284
|
-
| `POST` | `/worker/set-status` | Set or clear status. Body: `{ status }` |
|
|
285
|
-
| `POST` | `/worker/send-message` | Send a message. Body: `{ to: string[], body }` |
|
|
286
|
-
| `GET` | `/worker/crons` | List own approved cron jobs |
|
|
287
|
-
| `GET` | `/worker/cron-requests` | List own cron job requests (pending/approved/rejected) |
|
|
288
|
-
| `POST` | `/worker/cron-requests` | Request a new cron job (requires human approval) |
|
|
289
|
-
| `DELETE` | `/worker/crons/:id` | Delete own approved cron job |
|
|
290
|
-
| `POST` | `/worker/crons/:id/enable` | Enable own approved cron job |
|
|
291
|
-
| `POST` | `/worker/crons/:id/disable` | Disable own approved cron job |
|
|
292
|
-
| `GET` | `/worker/crons/:id/history` | View own cron job history |
|
|
318
|
+
```bash
|
|
319
|
+
npx agent-office --sqlite ./data.db task-stats
|
|
320
|
+
```
|
|
293
321
|
|
|
322
|
+
**list-task-columns** - List all valid task board columns
|
|
294
323
|
|
|
295
|
-
|
|
324
|
+
```bash
|
|
325
|
+
npx agent-office --sqlite ./data.db list-task-columns
|
|
326
|
+
```
|
|
296
327
|
|
|
297
|
-
|
|
328
|
+
## Task Board Columns
|
|
298
329
|
|
|
299
|
-
|
|
330
|
+
Valid columns for tasks:
|
|
300
331
|
|
|
301
|
-
-
|
|
302
|
-
-
|
|
303
|
-
-
|
|
304
|
-
-
|
|
305
|
-
-
|
|
306
|
-
-
|
|
332
|
+
- `idea` - New ideas and proposals
|
|
333
|
+
- `approved idea` - Approved ideas ready to work on
|
|
334
|
+
- `working on` - Currently in progress
|
|
335
|
+
- `blocked` - Blocked by dependencies or issues
|
|
336
|
+
- `ready for review` - Completed, awaiting review
|
|
337
|
+
- `done` - Finished tasks
|
|
307
338
|
|
|
308
|
-
|
|
339
|
+
## Testing
|
|
309
340
|
|
|
310
|
-
|
|
341
|
+
Run all tests:
|
|
311
342
|
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
createSession(): Promise<string>
|
|
315
|
-
deleteSession(sessionID: string): Promise<void>
|
|
316
|
-
sendMessage(sessionID: string, text: string, agent?: string): Promise<void>
|
|
317
|
-
getMessages(sessionID: string, limit?: number): Promise<SessionMessage[]>
|
|
318
|
-
revertSession(sessionID: string, messageID: string): Promise<void>
|
|
319
|
-
getAgentModes(): Promise<AgentMode[]>
|
|
320
|
-
}
|
|
343
|
+
```bash
|
|
344
|
+
npm test
|
|
321
345
|
```
|
|
322
346
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
## Development
|
|
347
|
+
Run tests with coverage:
|
|
326
348
|
|
|
327
349
|
```bash
|
|
328
|
-
|
|
329
|
-
|
|
350
|
+
npm run test:coverage
|
|
351
|
+
```
|
|
330
352
|
|
|
331
|
-
|
|
332
|
-
cp .env.example .env
|
|
353
|
+
Watch mode for tests:
|
|
333
354
|
|
|
334
|
-
|
|
335
|
-
npm run
|
|
355
|
+
```bash
|
|
356
|
+
npm run test:watch
|
|
357
|
+
```
|
|
336
358
|
|
|
337
|
-
|
|
338
|
-
npm run dev:manage -- --password secret
|
|
359
|
+
## Scripts
|
|
339
360
|
|
|
340
|
-
|
|
341
|
-
npm run
|
|
361
|
+
- `npm run dev` - Run with watch mode
|
|
362
|
+
- `npm run start` - Run once
|
|
363
|
+
- `npm run build` - Compile TypeScript
|
|
364
|
+
- `npm run typecheck` - Type check without emitting
|
|
365
|
+
- `npm run lint` - Run ESLint
|
|
366
|
+
- `npm run format` - Format code with Prettier
|
|
367
|
+
- `npm test` - Run tests
|
|
368
|
+
- `npm run test:watch` - Run tests in watch mode
|
|
369
|
+
- `npm run test:coverage` - Run tests with coverage report
|
|
342
370
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
371
|
+
## Architecture
|
|
372
|
+
|
|
373
|
+
- **Commands** (`src/commands/`) - Thin CLI wrappers that handle output formatting
|
|
374
|
+
- **Services** (`src/services/`) - Business logic with comprehensive test coverage
|
|
375
|
+
- **Storage** (`src/db/`) - SQLite and PostgreSQL implementations with migrations
|
|
376
|
+
- **Mock Storage** (`src/db/mock-storage.ts`) - In-memory implementation for testing
|
|
346
377
|
|
|
347
378
|
## License
|
|
348
379
|
|
|
349
|
-
MIT
|
|
380
|
+
MIT License - Copyright (c) 2024 Richard Anaya
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AgentOfficeStorage } from '../db/index.js';
|
|
2
|
+
export declare function listCronRequests(storage: AgentOfficeStorage, useJson: boolean): Promise<void>;
|
|
3
|
+
export declare function getCronRequest(storage: AgentOfficeStorage, id: number, useJson: boolean): Promise<void>;
|
|
4
|
+
export declare function approveCronRequest(storage: AgentOfficeStorage, id: number, reviewedBy: string, reviewerNotes: string | undefined, useJson: boolean): Promise<void>;
|
|
5
|
+
export declare function rejectCronRequest(storage: AgentOfficeStorage, id: number, reviewedBy: string, reviewerNotes: string | undefined, useJson: boolean): Promise<void>;
|
|
6
|
+
export declare function deleteCronRequest(storage: AgentOfficeStorage, id: number, useJson: boolean): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=cron-requests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-requests.d.ts","sourceRoot":"","sources":["../../src/commands/cron-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAInD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAInG;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7G;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,kBAAkB,EAC3B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhH"}
|