clisbot 0.1.53-beta.3 → 0.1.53-beta.4
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/main.js +44 -57
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -84887,7 +84887,7 @@ function renderLoopsHelp(channel) {
|
|
|
84887
84887
|
" - if runtime is stopped, recurring loops activate on the next `clisbot start`",
|
|
84888
84888
|
" - global `cancel --all` clears the whole app; scoped `cancel --all` clears one routed session",
|
|
84889
84889
|
` - \`cancel --all ${LOOP_APP_FLAG}\` is accepted only with a scoped session target, matching \`/loop cancel --all ${LOOP_APP_FLAG}\``,
|
|
84890
|
-
" - one-shot count loops
|
|
84890
|
+
" - one-shot count loops reserve all iterations immediately as durable queue items for the routed session",
|
|
84891
84891
|
" - wall-clock loop timezone resolves from `--timezone`, route/topic, agent, bot, app timezone, then legacy defaults, then host",
|
|
84892
84892
|
" - calendar loops freeze the resolved effective timezone at creation time; if timing looks wrong, run `clisbot timezone get` first and inspect agent or route timezone only for scoped overrides"
|
|
84893
84893
|
].join(`
|
|
@@ -84924,7 +84924,8 @@ function renderLoopsCreateHelp(channel) {
|
|
|
84924
84924
|
" - create without `--sender` fails by design",
|
|
84925
84925
|
" - the `--sender` platform must match `--channel`",
|
|
84926
84926
|
" - recurring CLI-created loops persist creator metadata into the session store",
|
|
84927
|
-
" - CLI-created loop prompts inherit the normal clisbot prompt config unless `--progress <count>` is provided"
|
|
84927
|
+
" - CLI-created loop prompts inherit the normal clisbot prompt config unless `--progress <count>` is provided",
|
|
84928
|
+
" - count/times loops reserve their iterations immediately as durable queue items and do not create recurring loop records"
|
|
84928
84929
|
].join(`
|
|
84929
84930
|
`);
|
|
84930
84931
|
}
|
|
@@ -85047,7 +85048,6 @@ async function getScopedLoopCounts(params) {
|
|
|
85047
85048
|
}
|
|
85048
85049
|
|
|
85049
85050
|
// src/control/commands/loops-cli.ts
|
|
85050
|
-
var LOOP_BUSY_RETRY_MS = 250;
|
|
85051
85051
|
var LOOP_CONFIRM_FLAG = "--confirm";
|
|
85052
85052
|
var LOOP_PROGRESS_FLAG = "--progress";
|
|
85053
85053
|
var LOOP_SENDER_FLAG = "--sender";
|
|
@@ -85190,52 +85190,37 @@ async function cancelScopedLoops(state, args, addressing) {
|
|
|
85190
85190
|
}
|
|
85191
85191
|
await cancelOneScopedLoop(state, context, sessionLoops, targetLoopId);
|
|
85192
85192
|
}
|
|
85193
|
-
|
|
85194
|
-
|
|
85195
|
-
|
|
85196
|
-
|
|
85197
|
-
|
|
85198
|
-
|
|
85199
|
-
|
|
85200
|
-
|
|
85201
|
-
|
|
85202
|
-
|
|
85203
|
-
|
|
85204
|
-
}
|
|
85193
|
+
function createCountLoopQueueItem(params) {
|
|
85194
|
+
return createStoredQueueItem({
|
|
85195
|
+
promptText: params.promptText,
|
|
85196
|
+
protectedControlMutationRule: resolveProtectedControlMutationRule(params.state, params.request.context.sessionTarget.agentId, params.request.creator),
|
|
85197
|
+
promptSummary: summarizeLoopPrompt(params.request.resolvedPrompt.text, params.request.resolvedPrompt.maintenancePrompt),
|
|
85198
|
+
createdBy: params.request.creator.providerId,
|
|
85199
|
+
sender: params.request.creator,
|
|
85200
|
+
surfaceBinding: buildStoredSurfaceBinding({
|
|
85201
|
+
...params.request.context.identity,
|
|
85202
|
+
botId: params.request.context.botId
|
|
85203
|
+
})
|
|
85204
|
+
});
|
|
85205
85205
|
}
|
|
85206
|
-
async function
|
|
85207
|
-
const
|
|
85208
|
-
const builtPrompt =
|
|
85209
|
-
maxProgressMessagesOverride:
|
|
85206
|
+
async function createCountLoopQueueItems(state, request, count) {
|
|
85207
|
+
const context = request.deliveryContext ?? request.context;
|
|
85208
|
+
const builtPrompt = context.buildLoopPromptText(request.resolvedPrompt.text, request.progressMessages == null ? undefined : {
|
|
85209
|
+
maxProgressMessagesOverride: request.progressMessages
|
|
85210
85210
|
});
|
|
85211
|
+
for (let index = 0;index < count; index += 1) {
|
|
85212
|
+
await state.sessionState.setQueuedItem(request.resolvedTarget, createCountLoopQueueItem({
|
|
85213
|
+
request,
|
|
85214
|
+
state,
|
|
85215
|
+
promptText: builtPrompt
|
|
85216
|
+
}));
|
|
85217
|
+
}
|
|
85211
85218
|
console.log(renderLoopStartedMessage({
|
|
85212
85219
|
mode: "times",
|
|
85213
|
-
count
|
|
85214
|
-
maintenancePrompt:
|
|
85220
|
+
count,
|
|
85221
|
+
maintenancePrompt: request.resolvedPrompt.maintenancePrompt
|
|
85215
85222
|
}));
|
|
85216
|
-
|
|
85217
|
-
for (let index = 0;index < params.count; index += 1) {
|
|
85218
|
-
while (true) {
|
|
85219
|
-
await waitForSessionIdle(agentService, params.context.sessionTarget);
|
|
85220
|
-
try {
|
|
85221
|
-
await agentService.enqueuePrompt(params.context.sessionTarget, builtPrompt, {
|
|
85222
|
-
onUpdate: () => {
|
|
85223
|
-
return;
|
|
85224
|
-
}
|
|
85225
|
-
}).result;
|
|
85226
|
-
break;
|
|
85227
|
-
} catch (error) {
|
|
85228
|
-
if (!(error instanceof ActiveRunInProgressError)) {
|
|
85229
|
-
throw error;
|
|
85230
|
-
}
|
|
85231
|
-
await sleep(LOOP_BUSY_RETRY_MS);
|
|
85232
|
-
}
|
|
85233
|
-
}
|
|
85234
|
-
}
|
|
85235
|
-
} finally {
|
|
85236
|
-
await agentService.stop();
|
|
85237
|
-
}
|
|
85238
|
-
console.log(`Completed ${params.count} iteration${params.count === 1 ? "" : "s"}.`);
|
|
85223
|
+
console.log(`Queued ${count} iteration${count === 1 ? "" : "s"} for \`${context.sessionTarget.sessionKey}\`.`);
|
|
85239
85224
|
}
|
|
85240
85225
|
function stripConfirmFlag(args) {
|
|
85241
85226
|
return args.filter((arg) => arg !== LOOP_CONFIRM_FLAG);
|
|
@@ -85444,9 +85429,10 @@ function buildRecurringLoopCreateBase(state, request) {
|
|
|
85444
85429
|
runtimeRunning: runtimeStatus.running
|
|
85445
85430
|
}));
|
|
85446
85431
|
}
|
|
85447
|
-
function buildRecurringLoopPromptMetadata(request) {
|
|
85432
|
+
function buildRecurringLoopPromptMetadata(state, request) {
|
|
85448
85433
|
return {
|
|
85449
85434
|
promptText: request.resolvedPrompt.text,
|
|
85435
|
+
protectedControlMutationRule: resolveProtectedControlMutationRule(state, request.context.sessionTarget.agentId, request.creator),
|
|
85450
85436
|
promptSummary: summarizeLoopPrompt(request.resolvedPrompt.text, request.resolvedPrompt.maintenancePrompt),
|
|
85451
85437
|
promptSource: request.resolvedPrompt.maintenancePrompt ? "LOOP.md" : "custom",
|
|
85452
85438
|
progressMessages: request.progressMessages,
|
|
@@ -85457,6 +85443,14 @@ function buildRecurringLoopPromptMetadata(request) {
|
|
|
85457
85443
|
surfaceBinding: buildLoopSurfaceBinding2(request)
|
|
85458
85444
|
};
|
|
85459
85445
|
}
|
|
85446
|
+
function resolveProtectedControlMutationRule(state, agentId, sender) {
|
|
85447
|
+
const auth = resolvePrincipalAuth({
|
|
85448
|
+
config: state.loadedConfig.raw,
|
|
85449
|
+
agentId,
|
|
85450
|
+
principal: sender.senderId
|
|
85451
|
+
});
|
|
85452
|
+
return auth.mayManageProtectedResources ? undefined : DEFAULT_PROTECTED_CONTROL_RULE;
|
|
85453
|
+
}
|
|
85460
85454
|
function buildRecurringLoopFirstRunNote(mode, runtimeRunning) {
|
|
85461
85455
|
if (!runtimeRunning) {
|
|
85462
85456
|
return "Runtime is not running, so this loop activates on the next `clisbot start`.";
|
|
@@ -85471,7 +85465,7 @@ async function createCalendarLoop(base) {
|
|
|
85471
85465
|
if (parsed.mode !== "calendar") {
|
|
85472
85466
|
return false;
|
|
85473
85467
|
}
|
|
85474
|
-
const metadata = buildRecurringLoopPromptMetadata(base.request);
|
|
85468
|
+
const metadata = buildRecurringLoopPromptMetadata(base.state, base.request);
|
|
85475
85469
|
const timezone = resolveConfigTimezone({
|
|
85476
85470
|
config: base.state.loadedConfig.raw,
|
|
85477
85471
|
agentId: base.request.context.sessionTarget.agentId,
|
|
@@ -85549,7 +85543,7 @@ async function createIntervalLoop(base) {
|
|
|
85549
85543
|
return;
|
|
85550
85544
|
}
|
|
85551
85545
|
const validation = requireValidIntervalLoop(parsed);
|
|
85552
|
-
const metadata = buildRecurringLoopPromptMetadata(base.request);
|
|
85546
|
+
const metadata = buildRecurringLoopPromptMetadata(base.state, base.request);
|
|
85553
85547
|
const loop = createStoredIntervalLoop({
|
|
85554
85548
|
...metadata,
|
|
85555
85549
|
intervalMs: parsed.intervalMs,
|
|
@@ -85585,14 +85579,7 @@ async function createRecurringLoop(state, request) {
|
|
|
85585
85579
|
async function createLoop(state, rawArgs, options = {}) {
|
|
85586
85580
|
const request = await resolveLoopCreateRequest(state, rawArgs, options.explicitCreateSubcommand ?? false);
|
|
85587
85581
|
if (request.parsed.mode === "times") {
|
|
85588
|
-
await
|
|
85589
|
-
state,
|
|
85590
|
-
context: request.deliveryContext ?? request.context,
|
|
85591
|
-
promptText: request.resolvedPrompt.text,
|
|
85592
|
-
count: request.parsed.count,
|
|
85593
|
-
maintenancePrompt: request.resolvedPrompt.maintenancePrompt,
|
|
85594
|
-
progressMessages: request.progressMessages
|
|
85595
|
-
});
|
|
85582
|
+
await createCountLoopQueueItems(state, request, request.parsed.count);
|
|
85596
85583
|
return;
|
|
85597
85584
|
}
|
|
85598
85585
|
if (request.parsed.mode === "calendar" && !request.confirm && !await hasSuccessfulCalendarLoop(state)) {
|
|
@@ -86182,7 +86169,7 @@ function buildQueueSurfaceBinding(context) {
|
|
|
86182
86169
|
botId: context.botId
|
|
86183
86170
|
});
|
|
86184
86171
|
}
|
|
86185
|
-
function
|
|
86172
|
+
function resolveProtectedControlMutationRule2(state, agentId, sender) {
|
|
86186
86173
|
const auth = resolvePrincipalAuth({
|
|
86187
86174
|
config: state.loadedConfig.raw,
|
|
86188
86175
|
agentId,
|
|
@@ -86193,7 +86180,7 @@ function resolveProtectedControlMutationRule(state, agentId, sender) {
|
|
|
86193
86180
|
function createQueueItemForContext(params) {
|
|
86194
86181
|
return createStoredQueueItem({
|
|
86195
86182
|
promptText: params.promptText,
|
|
86196
|
-
protectedControlMutationRule:
|
|
86183
|
+
protectedControlMutationRule: resolveProtectedControlMutationRule2(params.state, params.context.sessionTarget.agentId, params.sender),
|
|
86197
86184
|
promptSummary: params.promptText,
|
|
86198
86185
|
createdBy: params.sender.providerId,
|
|
86199
86186
|
sender: params.sender,
|