ticlawk 0.1.17-dev.2 → 0.1.17-dev.20
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/README.md +26 -59
- package/bin/ticlawk.mjs +31 -301
- package/package.json +4 -2
- package/scripts/publish-dev.sh +77 -0
- package/src/adapters/ticlawk/api.mjs +50 -378
- package/src/adapters/ticlawk/credentials.mjs +1 -43
- package/src/adapters/ticlawk/index.mjs +61 -565
- package/src/adapters/ticlawk/wake-client.mjs +1 -1
- package/src/cli/agent-commands.mjs +18 -715
- package/src/core/adapter-registry.mjs +1 -19
- package/src/core/agent-cli-handlers.mjs +18 -556
- package/src/core/agent-home.mjs +1 -81
- package/src/core/events/worker-events.mjs +36 -32
- package/src/core/http.mjs +0 -152
- package/src/core/profiles.mjs +0 -1
- package/src/core/runtime-contract.mjs +1 -0
- package/src/core/runtime-env.mjs +0 -8
- package/src/core/runtime-support.mjs +78 -130
- package/src/runtimes/_shared/incoming-message-prompt.mjs +232 -0
- package/src/runtimes/_shared/runtime-base-instructions.mjs +34 -0
- package/src/runtimes/claude-code/index.mjs +48 -21
- package/src/runtimes/claude-code/session.mjs +7 -2
- package/src/runtimes/codex/index.mjs +64 -116
- package/src/runtimes/codex/session.mjs +12 -2
- package/src/runtimes/openclaw/index.mjs +30 -17
- package/src/runtimes/opencode/index.mjs +64 -42
- package/src/runtimes/opencode/session.mjs +14 -14
- package/src/runtimes/pi/index.mjs +64 -42
- package/src/runtimes/pi/session.mjs +8 -11
- package/ticlawk.mjs +32 -5
- package/src/runtimes/_shared/agent-handbook.mjs +0 -45
- package/src/runtimes/_shared/brand.mjs +0 -2
- package/src/runtimes/_shared/goal-step-prompt.mjs +0 -98
- package/src/runtimes/_shared/goal-task-protocol.mjs +0 -50
- package/src/runtimes/_shared/handbook/BASICS.md +0 -27
- package/src/runtimes/_shared/handbook/COLLABORATION.md +0 -37
- package/src/runtimes/_shared/handbook/COMMUNICATION.md +0 -55
- package/src/runtimes/_shared/handbook/DM_SCOPE.md +0 -13
- package/src/runtimes/_shared/handbook/GOAL_AUTHORITY.md +0 -47
- package/src/runtimes/_shared/handbook/GOAL_TASK_CORE.md +0 -43
- package/src/runtimes/_shared/handbook/GROUP_ADMIN_SCOPE.md +0 -21
- package/src/runtimes/_shared/handbook/GROUP_MEMBER_SCOPE.md +0 -15
- package/src/runtimes/_shared/handbook/SURFACES.md +0 -41
- package/src/runtimes/_shared/handbook/TASK_WORKER.md +0 -14
- package/src/runtimes/_shared/standing-prompt.mjs +0 -171
- package/src/runtimes/_shared/wake-prompt.mjs +0 -268
package/README.md
CHANGED
|
@@ -13,57 +13,42 @@ from your phone.
|
|
|
13
13
|
|
|
14
14
|
## Quickstart — 2 minutes
|
|
15
15
|
|
|
16
|
-
You need a
|
|
17
|
-
|
|
16
|
+
You need a machine with at least one supported runtime installed and the
|
|
17
|
+
Ticlawk app installed on your phone.
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
# 1. install
|
|
21
21
|
curl -fsSL https://raw.githubusercontent.com/darthjaja6/ticlawk/main/install.sh | bash
|
|
22
22
|
|
|
23
23
|
# 2. connect this machine to your Ticlawk account by scanning the QR code
|
|
24
|
-
cd /path/to/project
|
|
25
24
|
ticlawk connect
|
|
26
25
|
```
|
|
27
26
|
|
|
28
|
-
`ticlawk connect`
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
directory when you want to bind a new project.
|
|
27
|
+
`ticlawk connect` authorizes the current machine as a Ticlawk host. After the
|
|
28
|
+
host is connected, create agents in the app by choosing that host and one of
|
|
29
|
+
the runtimes the daemon reports as available.
|
|
32
30
|
|
|
33
31
|
> ⚠️ **Single user, by design.** The connector binds to your Ticlawk account;
|
|
34
32
|
> agents run with your local user's permissions and can edit files / run
|
|
35
|
-
> commands
|
|
36
|
-
>
|
|
33
|
+
> commands on that host. Don't share your connector API key and don't connect
|
|
34
|
+
> a host you wouldn't trust a shell to touch.
|
|
37
35
|
|
|
38
36
|
---
|
|
39
37
|
|
|
40
|
-
##
|
|
38
|
+
## Creating Agents
|
|
41
39
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|-------------|----------------|------------------------|---------------------------------------------------------------|
|
|
47
|
-
| Claude Code | `--workdir` | `--session-id` | filename of `~/.claude/projects/**/*.jsonl` (without `.jsonl`)|
|
|
48
|
-
| Codex | `--workdir` | `--session-id` | `payload.id` in the first `session_meta` record of `~/.codex/sessions/**/*.jsonl` |
|
|
49
|
-
| OpenClaw | `--agent-id` | none | logical agent name (`main` by default) |
|
|
50
|
-
| opencode | `--workdir` | `--session-id` (with `--workdir`) | `.id` from `opencode session list --format json` (run inside the project dir) |
|
|
40
|
+
`ticlawk connect` does not create an agent. It connects a host. The daemon
|
|
41
|
+
then reports runtime health for Codex, Claude Code, opencode, OpenClaw, and pi.
|
|
42
|
+
In the mobile app, tap `+`, choose a connected host, choose an available
|
|
43
|
+
runtime, and create the agent there.
|
|
51
44
|
|
|
52
45
|
[OpenClaw](https://github.com/openclaw/openclaw) is an open-source local-first
|
|
53
|
-
agent runtime; skip
|
|
54
|
-
|
|
55
|
-
[opencode](https://opencode.ai) is provider-agnostic — it doesn't carry its own
|
|
56
|
-
account system. Before connecting through `ticlawk`, install the CLI
|
|
57
|
-
(`npm i -g opencode-ai`) and authenticate it once against the LLM provider
|
|
58
|
-
you want it to use (`opencode auth login`, then pick Anthropic / OpenAI /
|
|
59
|
-
Google / OpenRouter / etc. and paste the corresponding API key). Model
|
|
60
|
-
selection lives in opencode's own config (`opencode.json` in the project
|
|
61
|
-
root, or user-level config) — `ticlawk` does not pass `--model`.
|
|
46
|
+
agent runtime; skip it if you don't use it.
|
|
62
47
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
[opencode](https://opencode.ai) is provider-agnostic. Before creating an
|
|
49
|
+
opencode-backed agent through Ticlawk, install the CLI (`npm i -g opencode-ai`)
|
|
50
|
+
and authenticate it once against the LLM provider you want it to use
|
|
51
|
+
(`opencode auth login`).
|
|
67
52
|
|
|
68
53
|
---
|
|
69
54
|
|
|
@@ -74,11 +59,10 @@ After setup:
|
|
|
74
59
|
- Keep `ticlawk` running as a user service. If Linux prints an
|
|
75
60
|
`Action required` message during install or connect, run the command it
|
|
76
61
|
shows so the daemon keeps running after logout and reboot.
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
again or reset the session from the app.
|
|
62
|
+
- Connect another host: run `ticlawk connect` on that machine.
|
|
63
|
+
- Create a new agent from the app by choosing a connected host and runtime.
|
|
64
|
+
- If replies stop because the local runtime session ended, reset the agent
|
|
65
|
+
session from the app.
|
|
82
66
|
- `ticlawk health` is the first thing to check when something feels off.
|
|
83
67
|
|
|
84
68
|
---
|
|
@@ -201,7 +185,6 @@ Usage:
|
|
|
201
185
|
ticlawk config
|
|
202
186
|
ticlawk config get <streaming...|runtimes.claude_code.path|runtimes.codex.path|runtimes.opencode.path|runtimes.pi.path|ticlawk.connector-api-key|ticlawk.api-url|ticlawk.connector-ws-url>
|
|
203
187
|
ticlawk config set <streaming...|runtimes.claude_code.path|runtimes.codex.path|runtimes.opencode.path|runtimes.pi.path|ticlawk.connector-api-key|ticlawk.api-url|ticlawk.connector-ws-url> <value>
|
|
204
|
-
ticlawk auth --code <6-digit-code> [--api-url <url>]
|
|
205
188
|
ticlawk connect
|
|
206
189
|
ticlawk profile list
|
|
207
190
|
ticlawk profile current
|
|
@@ -212,35 +195,20 @@ Usage:
|
|
|
212
195
|
ticlawk version
|
|
213
196
|
|
|
214
197
|
Agent CLI (run inside an agent runtime; requires TICLAWK_RUNTIME_AGENT_ID):
|
|
215
|
-
ticlawk message send --target <t>
|
|
198
|
+
ticlawk message send --target <t> # body on stdin
|
|
216
199
|
ticlawk message read --target <t> [opts]
|
|
217
200
|
ticlawk task claim --message-id <id>
|
|
218
201
|
ticlawk task update --task-id <id> --status <s>
|
|
219
|
-
ticlawk task list [--target <t>]
|
|
220
|
-
ticlawk charter get --target <t>
|
|
202
|
+
ticlawk task list [--target <t>]
|
|
221
203
|
ticlawk group members --target <t>
|
|
222
|
-
ticlawk group list
|
|
223
|
-
ticlawk agent list
|
|
224
|
-
ticlawk dashboard get --conversation-id <id>
|
|
225
204
|
ticlawk server info [--refresh]
|
|
226
205
|
|
|
227
206
|
Commands:
|
|
228
|
-
|
|
229
|
-
connect connect ticlawk to a local runtime
|
|
207
|
+
connect connect this host to Ticlawk
|
|
230
208
|
profile list or switch saved local identities
|
|
231
209
|
message send/read chat messages (agent CLI surface)
|
|
232
210
|
task claim/update/list tasks (agent CLI surface)
|
|
233
|
-
|
|
234
|
-
approval canonical goal-loop approval request/resolve (agent CLI surface)
|
|
235
|
-
charter get/set conversation goal and role spec (agent CLI surface)
|
|
236
|
-
group create/list/delete groups, manage charters/members (agent CLI surface)
|
|
237
|
-
dashboard set/get conversation dashboards (agent CLI surface)
|
|
238
|
-
briefing publish/get owner briefings (agent CLI surface)
|
|
239
|
-
agent list/create/delete owned agent slots (agent CLI surface)
|
|
240
|
-
service publish/list/call shared services (agent CLI surface)
|
|
241
|
-
credential request owner-filled credentials (agent CLI surface)
|
|
242
|
-
reminder schedule/list/snooze/cancel reminders (agent CLI surface)
|
|
243
|
-
attachment view private chat assets (agent CLI surface)
|
|
211
|
+
group list members of a group conversation (agent CLI surface)
|
|
244
212
|
server server-info introspection (agent CLI surface)
|
|
245
213
|
install-daemon install or refresh the background daemon
|
|
246
214
|
update update the npm package and refresh the daemon
|
|
@@ -259,7 +227,6 @@ Config examples:
|
|
|
259
227
|
|
|
260
228
|
Examples:
|
|
261
229
|
ticlawk connect
|
|
262
|
-
ticlawk auth --code <6-digit-code>
|
|
263
230
|
```
|
|
264
231
|
<!-- usage:end -->
|
|
265
232
|
|
|
@@ -268,7 +235,7 @@ Examples:
|
|
|
268
235
|
## Security model
|
|
269
236
|
|
|
270
237
|
- **Agents can run code on your machine.** Whatever Claude Code / Codex /
|
|
271
|
-
OpenClaw / opencode / pi can do
|
|
238
|
+
OpenClaw / opencode / pi can do on the connected host, the Ticlawk app can
|
|
272
239
|
ask it to do. Treat the chat as you'd treat a shell.
|
|
273
240
|
- **Single user.** The connector binds to one Ticlawk account. Don't share
|
|
274
241
|
your connector API key.
|
package/bin/ticlawk.mjs
CHANGED
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
getActiveProfile,
|
|
19
19
|
listProfiles,
|
|
20
20
|
} from '../src/core/profiles.mjs';
|
|
21
|
-
import { runAdapterAuth } from '../src/core/adapter-registry.mjs';
|
|
22
21
|
import { runTiclawkConnect } from '../src/core/ticlawk-control.mjs';
|
|
23
22
|
import {
|
|
24
23
|
RUNTIME_DEFINITIONS,
|
|
@@ -32,36 +31,12 @@ import {
|
|
|
32
31
|
AGENT_COMMAND_HELP,
|
|
33
32
|
runAttachmentViewCommand,
|
|
34
33
|
runGroupCreateCommand,
|
|
35
|
-
runWorkstreamCharterGetCommand,
|
|
36
|
-
runWorkstreamCharterSetCommand,
|
|
37
|
-
runWorkstreamCreateCommand,
|
|
38
|
-
runWorkstreamDeleteCommand,
|
|
39
|
-
runWorkstreamListCommand,
|
|
40
|
-
runAgentListCommand,
|
|
41
|
-
runAgentCreateCommand,
|
|
42
|
-
runAgentDeleteCommand,
|
|
43
|
-
runDashboardSetCommand,
|
|
44
|
-
runDashboardGetCommand,
|
|
45
|
-
runCredentialRequestCommand,
|
|
46
|
-
runBriefingPublishCommand,
|
|
47
|
-
runBriefingGetCommand,
|
|
48
|
-
runServiceCreateCommand,
|
|
49
|
-
runServiceUpdateCommand,
|
|
50
|
-
runServiceDeleteCommand,
|
|
51
|
-
runServiceListCommand,
|
|
52
|
-
runServiceInfoCommand,
|
|
53
|
-
runServiceCallCommand,
|
|
54
34
|
runGroupMembersAddCommand,
|
|
55
35
|
runGroupMembersCommand,
|
|
56
36
|
runGroupMembersRemoveCommand,
|
|
57
37
|
runMessageCheckCommand,
|
|
58
38
|
runMessageReactCommand,
|
|
59
39
|
runMessageReadCommand,
|
|
60
|
-
runGoalChangedCommand,
|
|
61
|
-
runGoalReportCommand,
|
|
62
|
-
runApprovalRequestCommand,
|
|
63
|
-
runApprovalResolveCommand,
|
|
64
|
-
runApprovalListCommand,
|
|
65
40
|
runMessageSearchCommand,
|
|
66
41
|
runMessageSendCommand,
|
|
67
42
|
runProfileShowCommand,
|
|
@@ -105,7 +80,6 @@ Usage:
|
|
|
105
80
|
ticlawk config
|
|
106
81
|
ticlawk config get <${configKeys}>
|
|
107
82
|
ticlawk config set <${configKeys}> <value>
|
|
108
|
-
ticlawk auth --code <6-digit-code> [--api-url <url>]
|
|
109
83
|
ticlawk connect
|
|
110
84
|
ticlawk profile list
|
|
111
85
|
ticlawk profile current
|
|
@@ -116,35 +90,20 @@ Usage:
|
|
|
116
90
|
ticlawk version
|
|
117
91
|
|
|
118
92
|
Agent CLI (run inside an agent runtime; requires TICLAWK_RUNTIME_AGENT_ID):
|
|
119
|
-
ticlawk message send --target <t>
|
|
93
|
+
ticlawk message send --target <t> # body on stdin
|
|
120
94
|
ticlawk message read --target <t> [opts]
|
|
121
95
|
ticlawk task claim --message-id <id>
|
|
122
96
|
ticlawk task update --task-id <id> --status <s>
|
|
123
|
-
ticlawk task list [--target <t>]
|
|
124
|
-
ticlawk charter get --target <t>
|
|
97
|
+
ticlawk task list [--target <t>]
|
|
125
98
|
ticlawk group members --target <t>
|
|
126
|
-
ticlawk group list
|
|
127
|
-
ticlawk agent list
|
|
128
|
-
ticlawk dashboard get --conversation-id <id>
|
|
129
99
|
ticlawk server info [--refresh]
|
|
130
100
|
|
|
131
101
|
Commands:
|
|
132
|
-
|
|
133
|
-
connect connect ticlawk to a local runtime
|
|
102
|
+
connect connect this host to Ticlawk
|
|
134
103
|
profile list or switch saved local identities
|
|
135
104
|
message send/read chat messages (agent CLI surface)
|
|
136
105
|
task claim/update/list tasks (agent CLI surface)
|
|
137
|
-
|
|
138
|
-
approval canonical goal-loop approval request/resolve (agent CLI surface)
|
|
139
|
-
charter get/set conversation goal and role spec (agent CLI surface)
|
|
140
|
-
group create/list/delete groups, manage charters/members (agent CLI surface)
|
|
141
|
-
dashboard set/get conversation dashboards (agent CLI surface)
|
|
142
|
-
briefing publish/get owner briefings (agent CLI surface)
|
|
143
|
-
agent list/create/delete owned agent slots (agent CLI surface)
|
|
144
|
-
service publish/list/call shared services (agent CLI surface)
|
|
145
|
-
credential request owner-filled credentials (agent CLI surface)
|
|
146
|
-
reminder schedule/list/snooze/cancel reminders (agent CLI surface)
|
|
147
|
-
attachment view private chat assets (agent CLI surface)
|
|
106
|
+
group list members of a group conversation (agent CLI surface)
|
|
148
107
|
server server-info introspection (agent CLI surface)
|
|
149
108
|
install-daemon install or refresh the background daemon
|
|
150
109
|
update update the npm package and refresh the daemon
|
|
@@ -160,30 +119,15 @@ ${getRuntimeConfigExamples()}
|
|
|
160
119
|
|
|
161
120
|
Examples:
|
|
162
121
|
ticlawk connect
|
|
163
|
-
ticlawk auth --code <6-digit-code>
|
|
164
|
-
`;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
function getAuthHelp() {
|
|
168
|
-
return `ticlawk auth --code <6-digit-code> [--api-url <url>]
|
|
169
|
-
|
|
170
|
-
Store the ticlawk app pairing code locally. The daemon picks it up on the
|
|
171
|
-
next start and exchanges it for an API key.
|
|
172
|
-
|
|
173
|
-
Options:
|
|
174
|
-
--code <code> 6-digit setup code from the ticlawk app
|
|
175
|
-
--api-url <url> optional ticlawk API base URL override
|
|
176
122
|
`;
|
|
177
123
|
}
|
|
178
124
|
|
|
179
125
|
function getConnectHelp() {
|
|
180
126
|
return `ticlawk connect
|
|
181
127
|
|
|
182
|
-
Use \`connect\` to
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
Codex, Claude Code, opencode, and pi, then choose the runtime in ticlawk.
|
|
186
|
-
No pairing QR code is shown when no local agent harness is detected.
|
|
128
|
+
Use \`connect\` to authorize this machine as a Ticlawk host.
|
|
129
|
+
After the host is connected, create agents from the app by choosing this host
|
|
130
|
+
and one of the detected local runtimes.
|
|
187
131
|
|
|
188
132
|
Examples:
|
|
189
133
|
ticlawk connect
|
|
@@ -200,10 +144,6 @@ function printHelp(helpPath, args = {}) {
|
|
|
200
144
|
printUsage();
|
|
201
145
|
return;
|
|
202
146
|
}
|
|
203
|
-
if (head === 'auth') {
|
|
204
|
-
console.log(getAuthHelp());
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
147
|
if (head === 'connect') {
|
|
208
148
|
console.log(getConnectHelp());
|
|
209
149
|
return;
|
|
@@ -216,10 +156,6 @@ function printHelp(helpPath, args = {}) {
|
|
|
216
156
|
console.log(getInstallDaemonHelp());
|
|
217
157
|
return;
|
|
218
158
|
}
|
|
219
|
-
if (AGENT_COMMAND_HELP[head]) {
|
|
220
|
-
console.log(AGENT_COMMAND_HELP[head]);
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
159
|
printUsage();
|
|
224
160
|
}
|
|
225
161
|
|
|
@@ -284,7 +220,7 @@ function formatSecretConfigValue(configKey, value) {
|
|
|
284
220
|
}
|
|
285
221
|
|
|
286
222
|
function buildConnectPayload(args) {
|
|
287
|
-
const
|
|
223
|
+
const rejectedArgs = [
|
|
288
224
|
'adapter',
|
|
289
225
|
'type',
|
|
290
226
|
'session-id',
|
|
@@ -294,21 +230,19 @@ function buildConnectPayload(args) {
|
|
|
294
230
|
'agent-id',
|
|
295
231
|
'runtime-path',
|
|
296
232
|
'code',
|
|
233
|
+
'name',
|
|
234
|
+
'switch-user',
|
|
297
235
|
].filter((key) => args[key] !== undefined);
|
|
298
236
|
const positionalRuntime = args._?.[1];
|
|
299
|
-
if (positionalRuntime ||
|
|
237
|
+
if (positionalRuntime || rejectedArgs.length > 0) {
|
|
300
238
|
const suffix = positionalRuntime ? ` ${positionalRuntime}` : '';
|
|
301
239
|
console.error(`ticlawk connect${suffix} no longer accepts explicit runtime, adapter, session, or workdir arguments.`);
|
|
302
|
-
console.error('Run `ticlawk connect`
|
|
303
|
-
console.error('
|
|
240
|
+
console.error('Run `ticlawk connect` with no runtime arguments to authorize this host.');
|
|
241
|
+
console.error('Create agents from the app after the host is connected.');
|
|
304
242
|
process.exit(1);
|
|
305
243
|
}
|
|
306
244
|
return {
|
|
307
245
|
adapter: 'ticlawk',
|
|
308
|
-
autoRuntime: true,
|
|
309
|
-
switchUser: Boolean(args['switch-user']),
|
|
310
|
-
workdir: process.cwd(),
|
|
311
|
-
...(args.name ? { name: args.name } : {}),
|
|
312
246
|
};
|
|
313
247
|
}
|
|
314
248
|
|
|
@@ -399,6 +333,24 @@ async function main() {
|
|
|
399
333
|
process.exit(1);
|
|
400
334
|
}
|
|
401
335
|
|
|
336
|
+
if (command === 'profile') {
|
|
337
|
+
const sub = args._[1];
|
|
338
|
+
if (args.help || args.h || !sub) {
|
|
339
|
+
console.log(AGENT_COMMAND_HELP.profile);
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
if (sub === 'show') {
|
|
343
|
+
process.exitCode = await runProfileShowCommand(args);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
if (sub === 'update') {
|
|
347
|
+
process.exitCode = await runProfileUpdateCommand(args);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
console.error(`unknown profile subcommand: ${sub}`);
|
|
351
|
+
process.exit(1);
|
|
352
|
+
}
|
|
353
|
+
|
|
402
354
|
if (command === 'reminder') {
|
|
403
355
|
const sub = args._[1];
|
|
404
356
|
if (args.help || args.h || !sub) {
|
|
@@ -477,187 +429,6 @@ async function main() {
|
|
|
477
429
|
process.exit(1);
|
|
478
430
|
}
|
|
479
431
|
|
|
480
|
-
if (command === 'goal') {
|
|
481
|
-
const sub = args._[1];
|
|
482
|
-
if (args.help || args.h || !sub) {
|
|
483
|
-
console.log(AGENT_COMMAND_HELP.goal);
|
|
484
|
-
return;
|
|
485
|
-
}
|
|
486
|
-
if (sub === 'report') {
|
|
487
|
-
process.exitCode = await runGoalReportCommand(args);
|
|
488
|
-
return;
|
|
489
|
-
}
|
|
490
|
-
if (sub === 'changed') {
|
|
491
|
-
process.exitCode = await runGoalChangedCommand(args);
|
|
492
|
-
return;
|
|
493
|
-
}
|
|
494
|
-
console.error(`unknown goal subcommand: ${sub}`);
|
|
495
|
-
process.exit(1);
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
if (command === 'approval') {
|
|
499
|
-
const sub = args._[1];
|
|
500
|
-
if (args.help || args.h || !sub) {
|
|
501
|
-
console.log(AGENT_COMMAND_HELP.approval);
|
|
502
|
-
return;
|
|
503
|
-
}
|
|
504
|
-
if (sub === 'request') {
|
|
505
|
-
process.exitCode = await runApprovalRequestCommand(args);
|
|
506
|
-
return;
|
|
507
|
-
}
|
|
508
|
-
if (sub === 'resolve') {
|
|
509
|
-
process.exitCode = await runApprovalResolveCommand(args);
|
|
510
|
-
return;
|
|
511
|
-
}
|
|
512
|
-
if (sub === 'list') {
|
|
513
|
-
process.exitCode = await runApprovalListCommand(args);
|
|
514
|
-
return;
|
|
515
|
-
}
|
|
516
|
-
console.error(`unknown approval subcommand: ${sub}`);
|
|
517
|
-
process.exit(1);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
if (command === 'workstream') {
|
|
521
|
-
const sub = args._[1];
|
|
522
|
-
if (args.help || args.h || !sub) {
|
|
523
|
-
console.log(AGENT_COMMAND_HELP.workstream);
|
|
524
|
-
return;
|
|
525
|
-
}
|
|
526
|
-
if (sub === 'create') {
|
|
527
|
-
process.exitCode = await runWorkstreamCreateCommand(args);
|
|
528
|
-
return;
|
|
529
|
-
}
|
|
530
|
-
if (sub === 'delete') {
|
|
531
|
-
process.exitCode = await runWorkstreamDeleteCommand(args);
|
|
532
|
-
return;
|
|
533
|
-
}
|
|
534
|
-
if (sub === 'list') {
|
|
535
|
-
process.exitCode = await runWorkstreamListCommand(args);
|
|
536
|
-
return;
|
|
537
|
-
}
|
|
538
|
-
if (sub === 'charter') {
|
|
539
|
-
const op = args._[2];
|
|
540
|
-
if (op === 'get') {
|
|
541
|
-
process.exitCode = await runWorkstreamCharterGetCommand(args);
|
|
542
|
-
return;
|
|
543
|
-
}
|
|
544
|
-
if (op === 'set') {
|
|
545
|
-
process.exitCode = await runWorkstreamCharterSetCommand(args);
|
|
546
|
-
return;
|
|
547
|
-
}
|
|
548
|
-
console.error(`unknown workstream charter op: ${op}`);
|
|
549
|
-
process.exit(1);
|
|
550
|
-
}
|
|
551
|
-
console.error(`unknown workstream subcommand: ${sub}`);
|
|
552
|
-
process.exit(1);
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
if (command === 'agent') {
|
|
556
|
-
const sub = args._[1];
|
|
557
|
-
if (args.help || args.h || !sub) {
|
|
558
|
-
console.log(AGENT_COMMAND_HELP.agent);
|
|
559
|
-
return;
|
|
560
|
-
}
|
|
561
|
-
if (sub === 'list') {
|
|
562
|
-
process.exitCode = await runAgentListCommand(args);
|
|
563
|
-
return;
|
|
564
|
-
}
|
|
565
|
-
if (sub === 'create') {
|
|
566
|
-
process.exitCode = await runAgentCreateCommand(args);
|
|
567
|
-
return;
|
|
568
|
-
}
|
|
569
|
-
if (sub === 'delete') {
|
|
570
|
-
process.exitCode = await runAgentDeleteCommand(args);
|
|
571
|
-
return;
|
|
572
|
-
}
|
|
573
|
-
console.error(`unknown agent subcommand: ${sub}`);
|
|
574
|
-
process.exit(1);
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
if (command === 'service') {
|
|
578
|
-
const sub = args._[1];
|
|
579
|
-
if (args.help || args.h || !sub) {
|
|
580
|
-
console.log(AGENT_COMMAND_HELP.service);
|
|
581
|
-
return;
|
|
582
|
-
}
|
|
583
|
-
if (sub === 'create') { process.exitCode = await runServiceCreateCommand(args); return; }
|
|
584
|
-
if (sub === 'update') { process.exitCode = await runServiceUpdateCommand(args); return; }
|
|
585
|
-
if (sub === 'delete') { process.exitCode = await runServiceDeleteCommand(args); return; }
|
|
586
|
-
if (sub === 'list') { process.exitCode = await runServiceListCommand(args); return; }
|
|
587
|
-
if (sub === 'info') { process.exitCode = await runServiceInfoCommand(args); return; }
|
|
588
|
-
if (sub === 'call') { process.exitCode = await runServiceCallCommand(args); return; }
|
|
589
|
-
console.error(`unknown service subcommand: ${sub}`);
|
|
590
|
-
process.exit(1);
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
if (command === 'briefing') {
|
|
594
|
-
const sub = args._[1];
|
|
595
|
-
if (args.help || args.h || !sub) {
|
|
596
|
-
console.log(AGENT_COMMAND_HELP.briefing);
|
|
597
|
-
return;
|
|
598
|
-
}
|
|
599
|
-
if (sub === 'publish') {
|
|
600
|
-
process.exitCode = await runBriefingPublishCommand(args);
|
|
601
|
-
return;
|
|
602
|
-
}
|
|
603
|
-
if (sub === 'get') {
|
|
604
|
-
process.exitCode = await runBriefingGetCommand(args);
|
|
605
|
-
return;
|
|
606
|
-
}
|
|
607
|
-
console.error(`unknown briefing subcommand: ${sub}`);
|
|
608
|
-
process.exit(1);
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
if (command === 'credential') {
|
|
612
|
-
const sub = args._[1];
|
|
613
|
-
if (args.help || args.h || !sub) {
|
|
614
|
-
console.log(AGENT_COMMAND_HELP.credential);
|
|
615
|
-
return;
|
|
616
|
-
}
|
|
617
|
-
if (sub === 'request') {
|
|
618
|
-
process.exitCode = await runCredentialRequestCommand(args);
|
|
619
|
-
return;
|
|
620
|
-
}
|
|
621
|
-
console.error(`unknown credential subcommand: ${sub}`);
|
|
622
|
-
process.exit(1);
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
if (command === 'dashboard') {
|
|
626
|
-
const sub = args._[1];
|
|
627
|
-
if (args.help || args.h || !sub) {
|
|
628
|
-
console.log(AGENT_COMMAND_HELP.dashboard);
|
|
629
|
-
return;
|
|
630
|
-
}
|
|
631
|
-
if (sub === 'set') {
|
|
632
|
-
process.exitCode = await runDashboardSetCommand(args);
|
|
633
|
-
return;
|
|
634
|
-
}
|
|
635
|
-
if (sub === 'get') {
|
|
636
|
-
process.exitCode = await runDashboardGetCommand(args);
|
|
637
|
-
return;
|
|
638
|
-
}
|
|
639
|
-
console.error(`unknown dashboard subcommand: ${sub}`);
|
|
640
|
-
process.exit(1);
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
if (command === 'charter') {
|
|
644
|
-
const sub = args._[1];
|
|
645
|
-
if (args.help || args.h || !sub) {
|
|
646
|
-
console.log(AGENT_COMMAND_HELP.charter);
|
|
647
|
-
return;
|
|
648
|
-
}
|
|
649
|
-
if (sub === 'get') {
|
|
650
|
-
process.exitCode = await runWorkstreamCharterGetCommand(args);
|
|
651
|
-
return;
|
|
652
|
-
}
|
|
653
|
-
if (sub === 'set') {
|
|
654
|
-
process.exitCode = await runWorkstreamCharterSetCommand(args);
|
|
655
|
-
return;
|
|
656
|
-
}
|
|
657
|
-
console.error(`unknown charter subcommand: ${sub}`);
|
|
658
|
-
process.exit(1);
|
|
659
|
-
}
|
|
660
|
-
|
|
661
432
|
if (command === 'group') {
|
|
662
433
|
const sub = args._[1];
|
|
663
434
|
if (args.help || args.h || !sub) {
|
|
@@ -668,27 +439,6 @@ async function main() {
|
|
|
668
439
|
process.exitCode = await runGroupCreateCommand(args);
|
|
669
440
|
return;
|
|
670
441
|
}
|
|
671
|
-
if (sub === 'list') {
|
|
672
|
-
process.exitCode = await runWorkstreamListCommand(args);
|
|
673
|
-
return;
|
|
674
|
-
}
|
|
675
|
-
if (sub === 'delete') {
|
|
676
|
-
process.exitCode = await runWorkstreamDeleteCommand(args);
|
|
677
|
-
return;
|
|
678
|
-
}
|
|
679
|
-
if (sub === 'charter') {
|
|
680
|
-
const op = args._[2];
|
|
681
|
-
if (op === 'get') {
|
|
682
|
-
process.exitCode = await runWorkstreamCharterGetCommand(args);
|
|
683
|
-
return;
|
|
684
|
-
}
|
|
685
|
-
if (op === 'set') {
|
|
686
|
-
process.exitCode = await runWorkstreamCharterSetCommand(args);
|
|
687
|
-
return;
|
|
688
|
-
}
|
|
689
|
-
console.error(`unknown group charter op: ${op}`);
|
|
690
|
-
process.exit(1);
|
|
691
|
-
}
|
|
692
442
|
if (sub === 'members') {
|
|
693
443
|
// Same subcommand handles list / add / remove based on flags.
|
|
694
444
|
if (args.add) {
|
|
@@ -831,14 +581,6 @@ async function main() {
|
|
|
831
581
|
console.log('Restart ticlawk for the daemon to use the selected profile.');
|
|
832
582
|
return;
|
|
833
583
|
}
|
|
834
|
-
if (subcommand === 'show') {
|
|
835
|
-
process.exitCode = await runProfileShowCommand(args);
|
|
836
|
-
return;
|
|
837
|
-
}
|
|
838
|
-
if (subcommand === 'update') {
|
|
839
|
-
process.exitCode = await runProfileUpdateCommand(args);
|
|
840
|
-
return;
|
|
841
|
-
}
|
|
842
584
|
console.error(`unknown profile subcommand: ${subcommand}`);
|
|
843
585
|
process.exit(1);
|
|
844
586
|
}
|
|
@@ -871,18 +613,6 @@ async function main() {
|
|
|
871
613
|
return;
|
|
872
614
|
}
|
|
873
615
|
|
|
874
|
-
if (command === 'auth') {
|
|
875
|
-
if (args.help || args.h) {
|
|
876
|
-
printHelp(['auth'], args);
|
|
877
|
-
return;
|
|
878
|
-
}
|
|
879
|
-
const adapterArgv = rawArgv.slice(1);
|
|
880
|
-
const res = await runAdapterAuth('ticlawk', adapterArgv);
|
|
881
|
-
printCommandResult(res);
|
|
882
|
-
process.exitCode = res.statusCode >= 400 ? 1 : 0;
|
|
883
|
-
return;
|
|
884
|
-
}
|
|
885
|
-
|
|
886
616
|
if (command === 'connect') {
|
|
887
617
|
if (args.help || args.h) {
|
|
888
618
|
console.log(getConnectHelp());
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ticlawk",
|
|
3
|
-
"version": "0.1.17-dev.
|
|
3
|
+
"version": "0.1.17-dev.20",
|
|
4
4
|
"description": "Local connector that links agent harnesses (Claude Code, Codex, OpenClaw, opencode, Pi) to the Ticlawk mobile app.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "ticlawk.mjs",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"assets/",
|
|
16
16
|
"bin/",
|
|
17
17
|
"scripts/postinstall.mjs",
|
|
18
|
+
"scripts/publish-dev.sh",
|
|
18
19
|
"src/",
|
|
19
20
|
"cc-watcher.mjs",
|
|
20
21
|
"ticlawk.mjs",
|
|
@@ -33,7 +34,8 @@
|
|
|
33
34
|
"health": "node ./bin/ticlawk.mjs health",
|
|
34
35
|
"dev": "echo 'Configure ~/.ticlawk/.config, then: npm run start'",
|
|
35
36
|
"generate:usage-docs": "node scripts/generate-usage-docs.mjs",
|
|
36
|
-
"verify:public-package": "bash scripts/verify-ticlawk-public.sh"
|
|
37
|
+
"verify:public-package": "bash scripts/verify-ticlawk-public.sh",
|
|
38
|
+
"publish:dev": "bash scripts/publish-dev.sh"
|
|
37
39
|
},
|
|
38
40
|
"repository": {
|
|
39
41
|
"type": "git",
|