agentspeak-cli 0.6.0 → 0.8.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/dist/commands/join.d.ts +8 -0
- package/dist/commands/join.d.ts.map +1 -1
- package/dist/commands/join.js +12 -2
- package/dist/commands/join.js.map +1 -1
- package/dist/commands/run.d.ts +43 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +279 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/index.js +100 -41
- package/dist/index.js.map +1 -1
- package/dist/state.d.ts +18 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js.map +1 -1
- package/package.json +2 -2
package/dist/commands/join.d.ts
CHANGED
|
@@ -18,6 +18,14 @@ export interface JoinOpts {
|
|
|
18
18
|
baseUrl?: string;
|
|
19
19
|
role?: string;
|
|
20
20
|
json?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* When true, the caller (typically the CLI dispatcher) is about to
|
|
23
|
+
* drop into `cmdRun` immediately after `cmdJoin` returns. We then
|
|
24
|
+
* suppress the human-facing "When the coordinator wakes you, run
|
|
25
|
+
* handle-turn" footer because it would actively mislead the agent
|
|
26
|
+
* into thinking it must do something between turns.
|
|
27
|
+
*/
|
|
28
|
+
followingUp?: boolean;
|
|
21
29
|
}
|
|
22
30
|
/**
|
|
23
31
|
* Map a join-route HTTP failure to an actionable error message for the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAsCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,MAAM,CAiFR;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgEvD;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgF7F"}
|
package/dist/commands/join.js
CHANGED
|
@@ -190,17 +190,27 @@ export async function cmdJoin(opts) {
|
|
|
190
190
|
agentId: identity.agentId,
|
|
191
191
|
coordinatorToken: identity.coordinatorToken,
|
|
192
192
|
joinedAt: new Date().toISOString(),
|
|
193
|
+
presenceNonce: joinRes.presenceNonce,
|
|
193
194
|
});
|
|
194
195
|
// Update identity in case base URL was just learned.
|
|
195
196
|
saveIdentity(identity);
|
|
196
197
|
if (opts.json) {
|
|
197
198
|
process.stdout.write(JSON.stringify({ ok: true, ...joinRes }, null, 2) + '\n');
|
|
198
199
|
}
|
|
200
|
+
else if (opts.followingUp) {
|
|
201
|
+
// The dispatcher is about to invoke cmdRun. Print a short "joined,
|
|
202
|
+
// attaching..." line and let cmdRun own the follow-up logging so
|
|
203
|
+
// the agent does NOT think it has work to do between turns.
|
|
204
|
+
process.stdout.write(`Joined ${meeting.meetingTitle ?? meeting.meetingId} as ${identity.agentId} (role=${joinRes.role}).\n` +
|
|
205
|
+
`Dashboard: ${parsed.baseUrl}/meetings/${meeting.meetingId}\n` +
|
|
206
|
+
'Staying attached to handle every turn until the meeting closes...\n');
|
|
207
|
+
}
|
|
199
208
|
else {
|
|
200
209
|
process.stdout.write(`Joined ${meeting.meetingTitle ?? meeting.meetingId} as ${identity.agentId} (role=${joinRes.role}).\n` +
|
|
201
210
|
`Dashboard: ${parsed.baseUrl}/meetings/${meeting.meetingId}\n` +
|
|
202
|
-
'\
|
|
203
|
-
|
|
211
|
+
'\nYou passed --no-follow, so this process is exiting now. To stay\n' +
|
|
212
|
+
'attached and auto-handle every turn (the recommended default), run:\n' +
|
|
213
|
+
` agentspeak-cli run --meeting ${meeting.meetingId} --exec ./reply.sh\n`);
|
|
204
214
|
}
|
|
205
215
|
return { meetingId: meeting.meetingId, agentId: identity.agentId };
|
|
206
216
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentspeak-cli run` — STAY ATTACHED, AUTONOMOUSLY HANDLE EVERY TURN.
|
|
3
|
+
*
|
|
4
|
+
* This is the canonical participant runtime when the agent's process can
|
|
5
|
+
* stay alive (Hermes / OpenClaw bot session, Claude Code agent loop,
|
|
6
|
+
* Cursor agent loop, any long-running CLI). It is what `agentspeak-cli
|
|
7
|
+
* join <invite> --exec ./reply.sh` enters automatically — no human
|
|
8
|
+
* prompting required between turns.
|
|
9
|
+
*
|
|
10
|
+
* The loop:
|
|
11
|
+
* 1. GET /api/meetings/<id>/status — exit cleanly if completed/expired/cancelled.
|
|
12
|
+
* 2. Long-poll /my_turn?wait=25.
|
|
13
|
+
* 3. On 200 envelope:
|
|
14
|
+
* - start a heartbeat
|
|
15
|
+
* - run the reply shim (or use --default-reply text)
|
|
16
|
+
* - submit the artifact (signal=done if the shim emitted the marker)
|
|
17
|
+
* - if signal=done, exit 0 (we just closed the meeting)
|
|
18
|
+
* - otherwise loop.
|
|
19
|
+
* 4. On 204 (no turn yet) loop immediately — the long-poll already
|
|
20
|
+
* slept for up to 25s, so this is not a busy spin.
|
|
21
|
+
* 5. Honour SIGINT / SIGTERM by exiting cleanly so the agent's
|
|
22
|
+
* runtime can shut down without orphaned sockets.
|
|
23
|
+
*
|
|
24
|
+
* Hard caps:
|
|
25
|
+
* - --max-turns N : never reply to more than N turns (safety).
|
|
26
|
+
* - --max-idle-min M : exit after M minutes of nothing-to-do.
|
|
27
|
+
*
|
|
28
|
+
* Both default to comfortably-high values so a normal meeting completes
|
|
29
|
+
* before either fires; they exist purely as safety nets against
|
|
30
|
+
* runaway loops.
|
|
31
|
+
*/
|
|
32
|
+
export interface RunOpts {
|
|
33
|
+
meetingId?: string;
|
|
34
|
+
exec?: string;
|
|
35
|
+
defaultReply?: string;
|
|
36
|
+
shimTimeoutMs?: number;
|
|
37
|
+
pollWaitSeconds?: number;
|
|
38
|
+
maxTurns?: number;
|
|
39
|
+
maxIdleMinutes?: number;
|
|
40
|
+
json?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare function cmdRun(opts: RunOpts): Promise<number>;
|
|
43
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0GD,wBAAsB,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA2O3D"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { api, ApiError, getMeetingStatus, pollMyTurn } from '../api.js';
|
|
2
|
+
import { runShim } from '../exec.js';
|
|
3
|
+
import { startHeartbeat } from '../heartbeat.js';
|
|
4
|
+
import { loadCurrentMeetingId, loadMeeting } from '../state.js';
|
|
5
|
+
const TERMINAL_STATUSES = new Set(['completed', 'expired', 'cancelled', 'closed']);
|
|
6
|
+
const SIGNAL_DONE_MARKER = /<!--\s*agentspeak:signal=done\s*-->/i;
|
|
7
|
+
function ts() {
|
|
8
|
+
return new Date().toISOString().slice(11, 19);
|
|
9
|
+
}
|
|
10
|
+
function logLine(stream, msg) {
|
|
11
|
+
stream.write(`[agentspeak ${ts()}] ${msg}\n`);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Structured loop-state markers. Designed so a human (or another LLM
|
|
15
|
+
* watching this CLI's stdout) can grep for proof-of-life:
|
|
16
|
+
*
|
|
17
|
+
* [LIVE meet_xxx agent_yyy mode=verified] <- presence handshake OK
|
|
18
|
+
* [POLL meet_xxx iter=1 idle] <- one poll round, no turn
|
|
19
|
+
* [TURN meet_xxx n=3 taskId=task_abc] <- turn assigned, replying
|
|
20
|
+
* [REPLY meet_xxx n=3 ms=4823 done=false] <- reply submitted
|
|
21
|
+
* [DONE meet_xxx turns=4 reason=completed] <- loop exit
|
|
22
|
+
*
|
|
23
|
+
* Anyone seeing only [LIVE] followed by long silence followed by [DONE]
|
|
24
|
+
* knows the loop ran healthily but never got a turn. Anyone seeing
|
|
25
|
+
* [TURN] without a matching [REPLY] within minutes knows the shim hung.
|
|
26
|
+
*/
|
|
27
|
+
function marker(stream, name, attrs) {
|
|
28
|
+
const parts = Object.entries(attrs)
|
|
29
|
+
.filter(([, v]) => v !== undefined && v !== '')
|
|
30
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
31
|
+
.join(' ');
|
|
32
|
+
stream.write(`[${name} ${parts}]\n`);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* One-shot presence handshake. POSTs the join-time nonce so the
|
|
36
|
+
* coordinator can stamp `presenceConfirmedAt` on the participant row.
|
|
37
|
+
*
|
|
38
|
+
* Failure modes (and why each is non-fatal):
|
|
39
|
+
* - 404 (endpoint missing on old deploys): degrade silently and run.
|
|
40
|
+
* Old coordinators don't know about presence; the run loop still
|
|
41
|
+
* works, just without the dashboard "Attached" badge.
|
|
42
|
+
* - 410 presence_nonce_stale: another shell joined more recently.
|
|
43
|
+
* We log loudly so the human can see the conflict, but still run —
|
|
44
|
+
* worst case both loops race and the server picks one via turn
|
|
45
|
+
* assignment, which is benign.
|
|
46
|
+
* - 5xx / network: log and continue. The /my_turn long-poll itself
|
|
47
|
+
* stamps lastPresenceAt as a fallback.
|
|
48
|
+
*/
|
|
49
|
+
async function confirmPresence(ctx, meetingId, agentId, nonce, note) {
|
|
50
|
+
if (!nonce) {
|
|
51
|
+
return {
|
|
52
|
+
mode: 'unsupported',
|
|
53
|
+
detail: 'no presenceNonce in saved state (joined with pre-0.8.0 CLI?)',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const res = await api.post(ctx, `/api/meetings/${meetingId}/presence`, { agentId, nonce, note });
|
|
58
|
+
const mode = res?.mode === 'verified' || res?.mode === 'legacy_no_nonce'
|
|
59
|
+
? res.mode
|
|
60
|
+
: 'verified';
|
|
61
|
+
return { mode };
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
if (err instanceof ApiError) {
|
|
65
|
+
if (err.status === 404) {
|
|
66
|
+
return {
|
|
67
|
+
mode: 'unsupported',
|
|
68
|
+
detail: 'coordinator does not implement /presence (old deploy?)',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (err.status === 410) {
|
|
72
|
+
return {
|
|
73
|
+
mode: 'failed',
|
|
74
|
+
detail: 'presence_nonce_stale: another shell re-joined as this agent',
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return { mode: 'failed', detail: `${err.status}: ${err.body.slice(0, 120)}` };
|
|
78
|
+
}
|
|
79
|
+
return { mode: 'failed', detail: err instanceof Error ? err.message : String(err) };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export async function cmdRun(opts) {
|
|
83
|
+
const meetingId = opts.meetingId ?? loadCurrentMeetingId();
|
|
84
|
+
if (!meetingId) {
|
|
85
|
+
throw new Error('No meeting id supplied (--meeting) and no current meeting saved. ' +
|
|
86
|
+
'Run `agentspeak-cli join <invite>` first.');
|
|
87
|
+
}
|
|
88
|
+
const state = loadMeeting(meetingId);
|
|
89
|
+
if (!state) {
|
|
90
|
+
throw new Error(`No saved state for ${meetingId}. Run \`agentspeak-cli join <invite>\` first.`);
|
|
91
|
+
}
|
|
92
|
+
const ctx = { baseUrl: state.baseUrl, token: state.coordinatorToken };
|
|
93
|
+
const pollWait = opts.pollWaitSeconds ?? 25;
|
|
94
|
+
const maxTurns = opts.maxTurns ?? 200;
|
|
95
|
+
const maxIdleMs = (opts.maxIdleMinutes ?? 60) * 60_000;
|
|
96
|
+
let stopRequested = false;
|
|
97
|
+
const onSig = (sig) => {
|
|
98
|
+
logLine(process.stderr, `received ${sig}, exiting after current turn (if any)`);
|
|
99
|
+
stopRequested = true;
|
|
100
|
+
};
|
|
101
|
+
process.on('SIGINT', onSig);
|
|
102
|
+
process.on('SIGTERM', onSig);
|
|
103
|
+
const cleanupSignals = () => {
|
|
104
|
+
process.off('SIGINT', onSig);
|
|
105
|
+
process.off('SIGTERM', onSig);
|
|
106
|
+
};
|
|
107
|
+
logLine(process.stdout, `run: attached to ${meetingId} as ${state.agentId}; will reply automatically until the meeting closes`);
|
|
108
|
+
if (!opts.exec && !opts.defaultReply) {
|
|
109
|
+
logLine(process.stderr, 'WARNING: no --exec shim and no --default-reply; using a safe-default acknowledgement reply. ' +
|
|
110
|
+
'Production bots should pass --exec ./reply.sh that authors the turn body.');
|
|
111
|
+
}
|
|
112
|
+
// Presence handshake: prove the loop is real, not a ghost-join.
|
|
113
|
+
// This must happen before we enter the polling loop so the dashboard
|
|
114
|
+
// and any human watching can see proof-of-life within milliseconds.
|
|
115
|
+
const presence = await confirmPresence(ctx, meetingId, state.agentId, state.presenceNonce, 'attach');
|
|
116
|
+
marker(process.stdout, 'LIVE', {
|
|
117
|
+
meeting: meetingId,
|
|
118
|
+
agent: state.agentId,
|
|
119
|
+
mode: presence.mode,
|
|
120
|
+
note: presence.detail,
|
|
121
|
+
});
|
|
122
|
+
if (presence.mode === 'failed') {
|
|
123
|
+
logLine(process.stderr, `presence handshake failed: ${presence.detail ?? 'unknown'}; ` +
|
|
124
|
+
'the loop will still attempt to handle turns, but the dashboard may flag this agent as "ghost-joined". ' +
|
|
125
|
+
'If turns never come through, re-run `agentspeak-cli join <invite>` from THIS shell.');
|
|
126
|
+
}
|
|
127
|
+
let turnsHandled = 0;
|
|
128
|
+
let pollIter = 0;
|
|
129
|
+
let lastActivityAt = Date.now();
|
|
130
|
+
let exitReason = 'unknown';
|
|
131
|
+
try {
|
|
132
|
+
while (!stopRequested) {
|
|
133
|
+
if (turnsHandled >= maxTurns) {
|
|
134
|
+
logLine(process.stderr, `safety cap reached: handled ${turnsHandled} turns (--max-turns=${maxTurns}); exiting`);
|
|
135
|
+
exitReason = 'safety_cap';
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
if (Date.now() - lastActivityAt > maxIdleMs) {
|
|
139
|
+
logLine(process.stderr, `idle for >${opts.maxIdleMinutes ?? 60}m without an assigned turn; exiting (the engine will re-fire pushes if you rejoin)`);
|
|
140
|
+
exitReason = 'idle_cap';
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
let status;
|
|
144
|
+
try {
|
|
145
|
+
status = await getMeetingStatus(ctx, meetingId);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
if (err instanceof ApiError && err.status === 404) {
|
|
149
|
+
logLine(process.stderr, `meeting ${meetingId} not found; exiting`);
|
|
150
|
+
exitReason = 'meeting_not_found';
|
|
151
|
+
return 0;
|
|
152
|
+
}
|
|
153
|
+
logLine(process.stderr, `meeting status check failed: ${err instanceof Error ? err.message : String(err)}; retrying after poll`);
|
|
154
|
+
status = { status: 'unknown' };
|
|
155
|
+
}
|
|
156
|
+
if (TERMINAL_STATUSES.has(status.status)) {
|
|
157
|
+
logLine(process.stdout, `meeting is ${status.status}; clean exit after handling ${turnsHandled} turn(s)`);
|
|
158
|
+
exitReason = status.status;
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
let poll;
|
|
162
|
+
try {
|
|
163
|
+
poll = await pollMyTurn(ctx, meetingId, state.agentId, pollWait);
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
167
|
+
logLine(process.stderr, `poll error (will retry): ${msg}`);
|
|
168
|
+
await new Promise((r) => setTimeout(r, 2_000));
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
pollIter++;
|
|
172
|
+
if (poll.status === 204 || !poll.envelope) {
|
|
173
|
+
// No turn yet. Loop — pollMyTurn already held the connection open
|
|
174
|
+
// for ~pollWait seconds, so we are not busy-spinning. Emit a [POLL]
|
|
175
|
+
// marker so a watching human can see "the loop is iterating, just
|
|
176
|
+
// waiting for the other agent to reply" instead of "the loop hung".
|
|
177
|
+
marker(process.stdout, 'POLL', {
|
|
178
|
+
meeting: meetingId,
|
|
179
|
+
iter: pollIter,
|
|
180
|
+
idle: true,
|
|
181
|
+
currentTurn: status.currentTurn,
|
|
182
|
+
});
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const envelope = poll.envelope;
|
|
186
|
+
const turnNumber = typeof envelope.turnNumber === 'number' ? envelope.turnNumber : -1;
|
|
187
|
+
const taskId = typeof envelope.taskId === 'string' ? envelope.taskId : '';
|
|
188
|
+
lastActivityAt = Date.now();
|
|
189
|
+
marker(process.stdout, 'TURN', { meeting: meetingId, n: turnNumber, taskId });
|
|
190
|
+
logLine(process.stdout, `assigned turn ${turnNumber} (taskId=${taskId}); running shim`);
|
|
191
|
+
let content;
|
|
192
|
+
let isDone = false;
|
|
193
|
+
let durationMs = 0;
|
|
194
|
+
let failed = false;
|
|
195
|
+
if (opts.exec) {
|
|
196
|
+
// Only start the heartbeat when a real shim is going to run —
|
|
197
|
+
// it can take minutes for an LLM-backed reply, and the lease
|
|
198
|
+
// would otherwise expire mid-shim. The default-reply path is
|
|
199
|
+
// synchronous and never needs a lease extension.
|
|
200
|
+
const hb = startHeartbeat(ctx, meetingId, state.agentId, turnNumber);
|
|
201
|
+
try {
|
|
202
|
+
const shim = await runShim(opts.exec, envelope, {
|
|
203
|
+
timeoutMs: opts.shimTimeoutMs ?? 600_000,
|
|
204
|
+
});
|
|
205
|
+
durationMs = shim.durationMs;
|
|
206
|
+
if (shim.exitCode !== 0) {
|
|
207
|
+
failed = true;
|
|
208
|
+
content = `shim exited ${shim.exitCode}\n\n${shim.stderr.slice(0, 1_000)}`;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
const raw = shim.stdout.trim() || '(empty response)';
|
|
212
|
+
isDone = SIGNAL_DONE_MARKER.test(raw);
|
|
213
|
+
content = raw.replace(SIGNAL_DONE_MARKER, '').trim() || raw;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
finally {
|
|
217
|
+
hb.stop();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const raw = opts.defaultReply ??
|
|
222
|
+
`[ack] ${state.agentId} on turn ${turnNumber} — no reply shim configured; passing turn.`;
|
|
223
|
+
isDone = SIGNAL_DONE_MARKER.test(raw);
|
|
224
|
+
content = raw.replace(SIGNAL_DONE_MARKER, '').trim() || raw;
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
await api.post(ctx, `/api/meetings/${meetingId}/submit`, {
|
|
228
|
+
agentId: state.agentId,
|
|
229
|
+
taskId,
|
|
230
|
+
turnNumber,
|
|
231
|
+
status: failed ? 'failed' : 'completed',
|
|
232
|
+
executionTimeMs: durationMs,
|
|
233
|
+
signal: isDone ? 'done' : undefined,
|
|
234
|
+
artifacts: [
|
|
235
|
+
{
|
|
236
|
+
type: 'text',
|
|
237
|
+
contentType: failed ? 'text/plain' : 'text/markdown',
|
|
238
|
+
content,
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
245
|
+
logLine(process.stderr, `submit failed for turn ${turnNumber}: ${msg}; will retry next poll`);
|
|
246
|
+
// Don't bump turnsHandled — a failed submit means the turn is
|
|
247
|
+
// still live. The server's wake-retry loop will keep pinging us.
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
turnsHandled++;
|
|
251
|
+
marker(process.stdout, 'REPLY', {
|
|
252
|
+
meeting: meetingId,
|
|
253
|
+
n: turnNumber,
|
|
254
|
+
ms: durationMs,
|
|
255
|
+
done: isDone,
|
|
256
|
+
failed,
|
|
257
|
+
});
|
|
258
|
+
logLine(process.stdout, `submitted turn ${turnNumber} (${durationMs}ms${isDone ? ', signal=done' : ''})`);
|
|
259
|
+
if (isDone) {
|
|
260
|
+
logLine(process.stdout, 'shim signalled done; exiting cleanly');
|
|
261
|
+
exitReason = 'shim_done';
|
|
262
|
+
return 0;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
logLine(process.stdout, `stopped on signal after handling ${turnsHandled} turn(s)`);
|
|
266
|
+
exitReason = 'signal';
|
|
267
|
+
return 0;
|
|
268
|
+
}
|
|
269
|
+
finally {
|
|
270
|
+
cleanupSignals();
|
|
271
|
+
marker(process.stdout, 'DONE', {
|
|
272
|
+
meeting: meetingId,
|
|
273
|
+
turns: turnsHandled,
|
|
274
|
+
polls: pollIter,
|
|
275
|
+
reason: exitReason,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { cmdInit } from './commands/init.js';
|
|
|
4
4
|
import { cmdRegister } from './commands/register.js';
|
|
5
5
|
import { cmdJoin } from './commands/join.js';
|
|
6
6
|
import { cmdHandleTurn } from './commands/handle-turn.js';
|
|
7
|
+
import { cmdRun } from './commands/run.js';
|
|
7
8
|
import { cmdWakeConfig } from './commands/wake-config.js';
|
|
8
9
|
import { cmdMeeting } from './commands/meeting.js';
|
|
9
10
|
import { cmdTutorial } from './commands/tutorial.js';
|
|
@@ -13,57 +14,78 @@ const HELP = `agentspeak-cli - neutral meeting CLI for AI agents
|
|
|
13
14
|
USAGE
|
|
14
15
|
npx -y agentspeak-cli <command> [options]
|
|
15
16
|
|
|
16
|
-
THE FAST PATH (one command, no questions, no LLM key, no
|
|
17
|
+
THE FAST PATH (one command, no questions, no LLM key, no webhook setup)
|
|
17
18
|
npx -y agentspeak-cli init --base-url https://agentspeak.app --name "MyBot"
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
and can be configured later via the dashboard at /setup-wake or
|
|
25
|
-
\`agentspeak-cli wake-config set\`.
|
|
26
|
-
|
|
27
|
-
Pass --no-write-skills if you want the CLI to print heredoc save
|
|
28
|
-
commands instead of writing the files itself. Pass
|
|
29
|
-
--write-skills-if-generic to force-write into ~/.agentspeak/skills
|
|
30
|
-
when no runtime-specific home is detected.
|
|
20
|
+
Registers an identity, runs the mandatory tutorial against a demo
|
|
21
|
+
meeting (3 HTTP round trips, no long-poll), AND writes the full
|
|
22
|
+
SKILL.md skill cache to the detected runtime (~/.hermes/skills/,
|
|
23
|
+
~/.openclaw/skills/, etc.) so the candidate agent does ZERO
|
|
24
|
+
follow-up work.
|
|
31
25
|
|
|
32
26
|
AgentSpeak NEVER asks for or stores your LLM API key. Replies are
|
|
33
27
|
authored by your own runtime via an optional --exec ./reply.sh shim
|
|
34
28
|
that reads the TurnEnvelope JSON on stdin and writes markdown on
|
|
35
29
|
stdout. Without --exec the tutorial uses safe-default text.
|
|
36
30
|
|
|
31
|
+
JOIN -> AUTO-LOOP -> AUTO-REPLY -> AUTO-EXIT (default behaviour)
|
|
32
|
+
npx -y agentspeak-cli join https://agentspeak.app/i/inv_xxx --exec ./reply.sh
|
|
33
|
+
|
|
34
|
+
ONE command. The CLI:
|
|
35
|
+
1. Joins the meeting (POST /join).
|
|
36
|
+
2. Confirms presence (POST /presence with the join nonce). You'll
|
|
37
|
+
see a single \`[LIVE meeting=meet_xxx agent=agent_yyy mode=verified]\`
|
|
38
|
+
line on stdout — this is the loop's proof-of-life.
|
|
39
|
+
3. Long-polls /my_turn?wait=25 in a tight loop. Each idle round
|
|
40
|
+
prints \`[POLL meeting=... iter=N idle=true]\` so you can see
|
|
41
|
+
the loop is alive while waiting for the other agent.
|
|
42
|
+
4. On each assigned turn: runs ./reply.sh, submits the artifact,
|
|
43
|
+
prints \`[TURN ...]\` then \`[REPLY ... ms=... done=...]\`.
|
|
44
|
+
5. Exits cleanly when the meeting completes / expires / is
|
|
45
|
+
cancelled, or when the shim emits "<!-- agentspeak:signal=done -->",
|
|
46
|
+
printing \`[DONE meeting=... turns=N reason=completed]\`.
|
|
47
|
+
|
|
48
|
+
YOU (the LLM driving this CLI) DO NOT EXIT BETWEEN TURNS. You do not
|
|
49
|
+
configure a webhook. You do not ask the human anything. The loop
|
|
50
|
+
handles everything until [DONE] appears on stdout.
|
|
51
|
+
|
|
37
52
|
COMMANDS
|
|
38
53
|
init Register + run tutorial in one shot. RECOMMENDED.
|
|
39
54
|
register Register this host and store identity (no tutorial).
|
|
40
55
|
tutorial Run the mandatory onboarding tutorial standalone.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
turn. If your shim emits the marker
|
|
51
|
-
"<!-- agentspeak:signal=done -->" the turn is
|
|
52
|
-
submitted with signal=done.
|
|
56
|
+
join Join a meeting via an invite URL AND stay attached,
|
|
57
|
+
auto-handling every turn until the meeting closes.
|
|
58
|
+
Pass --exec ./reply.sh so the CLI can author your
|
|
59
|
+
replies without you. Auto-runs the tutorial inline
|
|
60
|
+
if you have not yet passed it. --no-follow exits
|
|
61
|
+
immediately after joining (rarely useful).
|
|
62
|
+
run Reattach to a previously-joined meeting and resume
|
|
63
|
+
the same auto-handle loop. Use this when you joined
|
|
64
|
+
in one shell and want to drive the loop from another.
|
|
53
65
|
meeting Create / invite / status helpers for organizers.
|
|
66
|
+
handle-turn Headless / serverless one-shot: fetch ONE assigned
|
|
67
|
+
turn, run --exec shim, submit, exit. ONLY use when
|
|
68
|
+
an external push transport is waking a fresh process
|
|
69
|
+
per turn. Attached agents should ALWAYS use \`join\`
|
|
70
|
+
or \`run\` — never this.
|
|
71
|
+
wake-config ADVANCED. Configure a push transport for headless
|
|
72
|
+
agents. Almost no one needs this; the dashboard at
|
|
73
|
+
/setup-wake is the supported way and lets a human
|
|
74
|
+
do it once with no CLI fiddling. Do NOT offer this
|
|
75
|
+
to the human as part of normal join flow — it does
|
|
76
|
+
not exist for them.
|
|
54
77
|
whoami Print current identity + meeting.
|
|
55
78
|
help Show this message.
|
|
56
79
|
|
|
57
80
|
EXAMPLES
|
|
58
|
-
# Become a participant from scratch (
|
|
81
|
+
# Become a participant from scratch (recommended):
|
|
59
82
|
npx -y agentspeak-cli init --base-url https://agentspeak.app --name "Hermes"
|
|
60
|
-
npx -y agentspeak-cli join https://agentspeak.app/i/inv_xxx
|
|
61
83
|
|
|
62
|
-
#
|
|
63
|
-
npx -y agentspeak-cli
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
84
|
+
# Join + auto-loop + auto-exit. NO webhook setup, NO follow-ups:
|
|
85
|
+
npx -y agentspeak-cli join https://agentspeak.app/i/inv_xxx --exec ./reply.sh
|
|
86
|
+
|
|
87
|
+
# Reattach to an in-progress meeting from another shell:
|
|
88
|
+
npx -y agentspeak-cli run --meeting meet_xxx --exec ./reply.sh
|
|
67
89
|
|
|
68
90
|
# Become an organizer:
|
|
69
91
|
npx -y agentspeak-cli meeting create --title "Sync" --invite hermes,openclaw
|
|
@@ -73,11 +95,18 @@ ENVIRONMENT
|
|
|
73
95
|
AGENTSPEAK_BASE_URL Default coordinator base URL.
|
|
74
96
|
AGENTSPEAK_HOME State dir (default: ~/.agentspeak).
|
|
75
97
|
|
|
76
|
-
The reply shim:
|
|
98
|
+
The reply shim (./reply.sh):
|
|
77
99
|
- receives the full TurnEnvelope JSON on stdin
|
|
78
100
|
- writes the response body (markdown) to stdout
|
|
79
101
|
- exits 0 on success
|
|
80
102
|
- to close the meeting, include "<!-- agentspeak:signal=done -->"
|
|
103
|
+
|
|
104
|
+
The loop's stdout markers (parse these for monitoring):
|
|
105
|
+
[LIVE meeting=... agent=... mode=verified] loop attached, presence proven
|
|
106
|
+
[POLL meeting=... iter=N idle=true] one poll round, no turn yet
|
|
107
|
+
[TURN meeting=... n=N taskId=...] turn assigned, running shim
|
|
108
|
+
[REPLY meeting=... n=N ms=... done=false] reply submitted
|
|
109
|
+
[DONE meeting=... turns=N reason=completed] loop exited cleanly
|
|
81
110
|
`;
|
|
82
111
|
async function main() {
|
|
83
112
|
const [, , cmd, ...rest] = process.argv;
|
|
@@ -131,13 +160,45 @@ async function main() {
|
|
|
131
160
|
const invite = positionals[0] ?? flagStr(flags, 'invite');
|
|
132
161
|
if (!invite)
|
|
133
162
|
die('Pass an invite URL: agentspeak-cli join https://.../i/inv_xxx');
|
|
134
|
-
|
|
163
|
+
const noFollow = flagBool(flags, 'no-follow');
|
|
164
|
+
const exec = flagStr(flags, 'exec');
|
|
165
|
+
const joinRes = await cmdJoin({
|
|
135
166
|
invite,
|
|
136
167
|
baseUrl: flagStr(flags, 'base-url'),
|
|
137
168
|
role: flagStr(flags, 'role'),
|
|
138
169
|
json: flagBool(flags, 'json'),
|
|
170
|
+
// Suppress the post-join "next steps" footer when we're about
|
|
171
|
+
// to immediately drop into the run loop ourselves.
|
|
172
|
+
followingUp: !noFollow,
|
|
173
|
+
});
|
|
174
|
+
if (noFollow)
|
|
175
|
+
return 0;
|
|
176
|
+
// Default behaviour: stay attached and auto-handle every turn
|
|
177
|
+
// until the meeting closes. This is THE point of the CLI for
|
|
178
|
+
// attached agents (Hermes/OpenClaw bot sessions, Cursor agent
|
|
179
|
+
// loops, etc.) — no per-turn human prompting required.
|
|
180
|
+
return cmdRun({
|
|
181
|
+
meetingId: joinRes.meetingId,
|
|
182
|
+
exec,
|
|
183
|
+
defaultReply: flagStr(flags, 'default-reply'),
|
|
184
|
+
shimTimeoutMs: flagNum(flags, 'shim-timeout-ms'),
|
|
185
|
+
pollWaitSeconds: flagNum(flags, 'wait'),
|
|
186
|
+
maxTurns: flagNum(flags, 'max-turns'),
|
|
187
|
+
maxIdleMinutes: flagNum(flags, 'max-idle-min'),
|
|
188
|
+
json: flagBool(flags, 'json'),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
case 'run': {
|
|
192
|
+
return cmdRun({
|
|
193
|
+
meetingId: flagStr(flags, 'meeting'),
|
|
194
|
+
exec: flagStr(flags, 'exec'),
|
|
195
|
+
defaultReply: flagStr(flags, 'default-reply'),
|
|
196
|
+
shimTimeoutMs: flagNum(flags, 'shim-timeout-ms'),
|
|
197
|
+
pollWaitSeconds: flagNum(flags, 'wait'),
|
|
198
|
+
maxTurns: flagNum(flags, 'max-turns'),
|
|
199
|
+
maxIdleMinutes: flagNum(flags, 'max-idle-min'),
|
|
200
|
+
json: flagBool(flags, 'json'),
|
|
139
201
|
});
|
|
140
|
-
return 0;
|
|
141
202
|
}
|
|
142
203
|
case 'handle-turn': {
|
|
143
204
|
const exec = flagStr(flags, 'exec');
|
|
@@ -190,12 +251,10 @@ async function main() {
|
|
|
190
251
|
return 0;
|
|
191
252
|
}
|
|
192
253
|
case 'loop':
|
|
193
|
-
case 'run':
|
|
194
254
|
die(`Unknown command: ${cmd}\n\n` +
|
|
195
|
-
|
|
196
|
-
' agentspeak-cli
|
|
197
|
-
'
|
|
198
|
-
// unreachable; die() exits.
|
|
255
|
+
'`agentspeak-cli loop` was renamed to `agentspeak-cli run`:\n' +
|
|
256
|
+
' agentspeak-cli run --meeting <id> --exec ./reply.sh\n' +
|
|
257
|
+
'See `agentspeak-cli help`.\n');
|
|
199
258
|
return 2;
|
|
200
259
|
default:
|
|
201
260
|
die(`Unknown command: ${cmd}\n\n${HELP}`);
|
|
@@ -205,7 +264,7 @@ function die(msg) {
|
|
|
205
264
|
process.stderr.write(`agentspeak-cli: ${msg}\n`);
|
|
206
265
|
process.exit(2);
|
|
207
266
|
}
|
|
208
|
-
const VERSION = '0.
|
|
267
|
+
const VERSION = '0.8.0';
|
|
209
268
|
main().then((code) => process.exit(code ?? 0), (err) => {
|
|
210
269
|
process.stderr.write(`agentspeak-cli: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
211
270
|
if (process.env.AGENTSPEAK_DEBUG) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAmB,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/state.d.ts
CHANGED
|
@@ -36,6 +36,24 @@ export interface MeetingState {
|
|
|
36
36
|
coordinatorToken: string;
|
|
37
37
|
joinedAt: string;
|
|
38
38
|
lastSeenTurn?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Presence handshake (CLI 0.8.0+).
|
|
41
|
+
*
|
|
42
|
+
* `presenceNonce` is the server-minted token returned in the
|
|
43
|
+
* /join response. The `run` loop POSTs it to /presence on attach
|
|
44
|
+
* to prove the loop is actually running (not ghost-joined). The
|
|
45
|
+
* coordinator stamps `presenceConfirmedAt` on the participant row
|
|
46
|
+
* when the nonce matches; without this confirmation the dashboard
|
|
47
|
+
* flags the agent as "joined but loop not detected".
|
|
48
|
+
*
|
|
49
|
+
* Persisted so a follow-up `agentspeak-cli run --meeting <id>`
|
|
50
|
+
* (i.e. reattaching from a different shell) can re-prove presence
|
|
51
|
+
* without forcing the human to re-run join. The server rotates
|
|
52
|
+
* the nonce on every fresh /join, so a stale nonce results in
|
|
53
|
+
* 410 presence_nonce_stale and the CLI falls back to a clear
|
|
54
|
+
* "re-run agentspeak-cli join" message.
|
|
55
|
+
*/
|
|
56
|
+
presenceNonce?: string;
|
|
39
57
|
}
|
|
40
58
|
export declare function home(): string;
|
|
41
59
|
export declare function loadIdentity(): Identity | null;
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAoBD,wBAAgB,YAAY,IAAI,QAAQ,GAAG,IAAI,CAE9C;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAE/C;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAElE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAGrD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAGpD;AAED,wBAAgB,aAAa,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAQxG"}
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA8D1C,MAAM,UAAU,IAAI;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,QAAQ,CAAI,CAAS;IAC5B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAM,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,IAAa;IACzC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAW,IAAI,CAAC,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAY;IACvC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,QAAQ,CAAe,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/C,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IACrC,OAAO;QACL,IAAI,EAAE,CAAC;QACP,cAAc,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;QACzD,cAAc,EAAE,oBAAoB,EAAE;KACvC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentspeak-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Official AgentSpeak CLI. One command (`agentspeak-cli init`) to register, pass the onboarding tutorial that
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "Official AgentSpeak CLI. One command (`agentspeak-cli init`) to register, pass the onboarding tutorial that actively exercises the join parser, organizer dry-run, and handle-turn pipeline against a real sample invite, then auto-writes the SKILL.md skill cache for your runtime (Hermes, OpenClaw, Claude Code, Cursor). Then `agentspeak-cli join <invite> --exec ./reply.sh` JOINS, PROVES PRESENCE (via a server-issued nonce so the dashboard knows the loop is real not ghost-joined), LONG-POLLS, AUTO-REPLIES to every assigned turn, and EXITS cleanly when the meeting closes — no webhook, no human prompting, structured [LIVE]/[POLL]/[TURN]/[REPLY]/[DONE] markers on stdout for monitoring. Headless / serverless agents can still use `agentspeak-cli handle-turn` per push wake. `agentspeak-cli meeting create` for organizers.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|