@skrr-ai/cli 0.1.118 → 0.1.120
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/base-command.d.ts +32 -0
- package/dist/base-command.js +113 -5
- package/dist/commands/commands.js +11 -0
- package/dist/commands/commitments/action-proposal.d.ts +13 -0
- package/dist/commands/commitments/action-proposal.js +39 -0
- package/dist/commands/commitments/action-proposals/decide.js +8 -1
- package/dist/commands/commitments/action-proposals/execute.js +11 -1
- package/dist/commands/commitments/create.js +2 -2
- package/dist/commands/commitments/doctor.d.ts +8 -0
- package/dist/commands/commitments/doctor.js +22 -0
- package/dist/commands/commitments/execute-remediation.js +12 -1
- package/dist/commands/commitments/observations.js +2 -2
- package/dist/commands/commitments/pack/bind.d.ts +18 -1
- package/dist/commands/commitments/pack/bind.js +66 -8
- package/dist/commands/commitments/pack/plan.d.ts +4 -1
- package/dist/commands/commitments/pack/plan.js +30 -2
- package/dist/commands/commitments/update.js +8 -2
- package/dist/commands/completion/index.js +1 -1
- package/dist/commands/completion/values.js +1 -1
- package/dist/commands/computer-use/audio.d.ts +1 -0
- package/dist/commands/computer-use/audio.js +1 -0
- package/dist/commands/computer-use/browser.d.ts +1 -0
- package/dist/commands/computer-use/browser.js +1 -0
- package/dist/commands/computer-use/disable.d.ts +1 -0
- package/dist/commands/computer-use/disable.js +1 -0
- package/dist/commands/computer-use/enable.d.ts +1 -0
- package/dist/commands/computer-use/enable.js +1 -0
- package/dist/commands/computer-use/index.d.ts +1 -0
- package/dist/commands/computer-use/index.js +1 -0
- package/dist/commands/computer-use/install.d.ts +1 -0
- package/dist/commands/computer-use/install.js +1 -0
- package/dist/commands/computer-use/recover.d.ts +1 -0
- package/dist/commands/computer-use/recover.js +1 -0
- package/dist/commands/computer-use/status.d.ts +1 -0
- package/dist/commands/computer-use/status.js +1 -0
- package/dist/commands/computer-use/stop.d.ts +1 -0
- package/dist/commands/computer-use/stop.js +1 -0
- package/dist/commands/context.js +16 -11
- package/dist/commands/convos/recovery.js +1 -1
- package/dist/commands/daemon/diagnostics.d.ts +9 -0
- package/dist/commands/daemon/diagnostics.js +53 -0
- package/dist/commands/daemon/index.js +2 -0
- package/dist/commands/daemon/maintenance/attest.d.ts +15 -0
- package/dist/commands/daemon/maintenance/attest.js +52 -0
- package/dist/commands/daemon/maintenance/hold.d.ts +17 -0
- package/dist/commands/daemon/maintenance/hold.js +70 -0
- package/dist/commands/daemon/maintenance/index.d.ts +12 -0
- package/dist/commands/daemon/maintenance/index.js +30 -0
- package/dist/commands/daemon/maintenance/resume.d.ts +13 -0
- package/dist/commands/daemon/maintenance/resume.js +36 -0
- package/dist/commands/daemon/maintenance/status.d.ts +13 -0
- package/dist/commands/daemon/maintenance/status.js +36 -0
- package/dist/commands/doctor.d.ts +4 -1
- package/dist/commands/doctor.js +50 -6
- package/dist/commands/followups/plans/cancel-batch.js +6 -3
- package/dist/commands/followups/plans/capacity.js +7 -3
- package/dist/commands/followups/plans/observability.js +11 -3
- package/dist/commands/followups/plans/preferences/set.js +26 -8
- package/dist/commands/followups/plans/preferences.js +1 -1
- package/dist/commands/followups/plans/show.js +1 -1
- package/dist/commands/goals/key-results/assess.d.ts +36 -0
- package/dist/commands/goals/key-results/assess.js +110 -0
- package/dist/commands/goals/key-results/history.d.ts +30 -0
- package/dist/commands/goals/key-results/history.js +104 -0
- package/dist/commands/goals/key-results/list.d.ts +5 -4
- package/dist/commands/goals/key-results/list.js +12 -6
- package/dist/commands/goals/key-results/show.d.ts +4 -2
- package/dist/commands/goals/key-results/show.js +25 -4
- package/dist/commands/goals/key-results/update.d.ts +4 -0
- package/dist/commands/goals/key-results/update.js +18 -24
- package/dist/commands/goals/plan-now.js +12 -1
- package/dist/commands/goals/planner-compare.d.ts +30 -0
- package/dist/commands/goals/planner-compare.js +136 -0
- package/dist/commands/machines/dedicated/service/exec.d.ts +3 -0
- package/dist/commands/machines/dedicated/service/exec.js +70 -11
- package/dist/commands/machines/hosted/destroy.d.ts +1 -0
- package/dist/commands/machines/hosted/destroy.js +11 -1
- package/dist/commands/machines/hosted/exec.d.ts +1 -0
- package/dist/commands/machines/hosted/exec.js +12 -1
- package/dist/commands/machines/hosted/index.js +1 -0
- package/dist/commands/machines/hosted/operation.d.ts +14 -0
- package/dist/commands/machines/hosted/operation.js +51 -0
- package/dist/commands/machines/hosted/pull.js +1 -1
- package/dist/commands/machines/hosted/start.js +6 -2
- package/dist/commands/memory/versions/list.d.ts +2 -0
- package/dist/commands/memory/versions/list.js +3 -2
- package/dist/commands/memory/versions/show.d.ts +2 -0
- package/dist/commands/memory/versions/show.js +3 -2
- package/dist/commands/spaces/auto-executor/compare.d.ts +18 -0
- package/dist/commands/spaces/auto-executor/compare.js +139 -0
- package/dist/commands/spaces/auto-executor/runs.d.ts +3 -0
- package/dist/commands/spaces/auto-executor/runs.js +13 -1
- package/dist/commands/spaces/charter/create-from-description.d.ts +21 -0
- package/dist/commands/spaces/charter/create-from-description.js +77 -0
- package/dist/commands/spaces/charter/show.d.ts +22 -0
- package/dist/commands/spaces/charter/show.js +61 -0
- package/dist/commands/spaces/heartbeats/list.d.ts +1 -16
- package/dist/commands/spaces/heartbeats/list.js +13 -0
- package/dist/commands/spaces/install-template.js +3 -0
- package/dist/commands/spaces/loops/migrate.d.ts +32 -0
- package/dist/commands/spaces/loops/migrate.js +103 -0
- package/dist/commands/spaces/loops/release.d.ts +14 -0
- package/dist/commands/spaces/loops/release.js +59 -0
- package/dist/commands/spaces/notebook.d.ts +25 -0
- package/dist/commands/spaces/notebook.js +75 -0
- package/dist/commands/spaces/proposals/discard.d.ts +17 -0
- package/dist/commands/spaces/proposals/discard.js +17 -0
- package/dist/commands/spaces/proposals/keep.d.ts +17 -0
- package/dist/commands/spaces/proposals/keep.js +17 -0
- package/dist/commands/spaces/proposals/list.d.ts +24 -0
- package/dist/commands/spaces/proposals/list.js +89 -0
- package/dist/commands/spaces/skills/propose.d.ts +29 -0
- package/dist/commands/spaces/skills/propose.js +82 -0
- package/dist/commands/spaces/templates/fork.js +3 -0
- package/dist/commands/spaces/triggers/show.js +6 -0
- package/dist/commands/spaces/workflows/retry.d.ts +1 -0
- package/dist/commands/spaces/workflows/retry.js +8 -1
- package/dist/commands/spaces/workflows/triggers/create.js +3 -2
- package/dist/commands/spaces/workflows/triggers/fire.js +4 -0
- package/dist/commands/spaces/workflows/triggers/update.js +2 -1
- package/dist/commands/spaces/write-policy/set.d.ts +22 -0
- package/dist/commands/spaces/write-policy/set.js +82 -0
- package/dist/commands/spaces/write-policy/show.d.ts +19 -0
- package/dist/commands/spaces/write-policy/show.js +49 -0
- package/dist/commands/store/artifacts/receipt.d.ts +14 -0
- package/dist/commands/store/artifacts/receipt.js +34 -0
- package/dist/commands/store/artifacts/release.d.ts +2 -0
- package/dist/commands/store/artifacts/release.js +11 -0
- package/dist/commands/store/governance/publish-release.d.ts +2 -0
- package/dist/commands/store/governance/publish-release.js +30 -1
- package/dist/commands/store/governance/release-receipt.d.ts +12 -0
- package/dist/commands/store/governance/release-receipt.js +32 -0
- package/dist/commands/tasks/approvals/list.d.ts +11 -5
- package/dist/commands/tasks/approvals/list.js +13 -6
- package/dist/commands/tasks/attachments/facts.d.ts +12 -0
- package/dist/commands/tasks/attachments/facts.js +29 -0
- package/dist/commands/tasks/attachments/upload.d.ts +1 -0
- package/dist/commands/tasks/attachments/upload.js +16 -0
- package/dist/commands/tasks/bulk-update.js +35 -1
- package/dist/commands/tasks/context.d.ts +15 -0
- package/dist/commands/tasks/context.js +69 -0
- package/dist/commands/tasks/copy.d.ts +18 -0
- package/dist/commands/tasks/copy.js +85 -0
- package/dist/commands/tasks/create-tree.js +97 -23
- package/dist/commands/tasks/create.js +9 -1
- package/dist/commands/tasks/deliverable/add.js +20 -10
- package/dist/commands/tasks/move.js +8 -1
- package/dist/commands/tasks/operations/show.d.ts +16 -0
- package/dist/commands/tasks/operations/show.js +98 -0
- package/dist/commands/tasks/operations/wait.d.ts +22 -0
- package/dist/commands/tasks/operations/wait.js +114 -0
- package/dist/commands/tasks/preflight.d.ts +1 -0
- package/dist/commands/tasks/preflight.js +11 -1
- package/dist/commands/tasks/rearm-recurrence.js +4 -0
- package/dist/commands/tasks/result/show.js +22 -0
- package/dist/commands/tasks/result/submit.d.ts +1 -0
- package/dist/commands/tasks/result/submit.js +3 -0
- package/dist/commands/tasks/retry-receipt.d.ts +15 -0
- package/dist/commands/tasks/retry-receipt.js +89 -0
- package/dist/commands/tasks/retry-review.d.ts +16 -0
- package/dist/commands/tasks/retry-review.js +66 -0
- package/dist/commands/tasks/retry.d.ts +4 -8
- package/dist/commands/tasks/retry.js +34 -68
- package/dist/commands/tasks/runs.d.ts +21 -0
- package/dist/commands/tasks/runs.js +95 -0
- package/dist/commands/tasks/show.d.ts +2 -0
- package/dist/commands/tasks/show.js +15 -1
- package/dist/commands/tasks/start-receipt.d.ts +15 -0
- package/dist/commands/tasks/start-receipt.js +95 -0
- package/dist/commands/tasks/start.d.ts +4 -0
- package/dist/commands/tasks/start.js +49 -3
- package/dist/commands/tasks/update.js +3 -0
- package/dist/commands/tasks/upsert.js +17 -3
- package/dist/commands/tasks/watch.d.ts +3 -0
- package/dist/commands/tasks/watch.js +85 -20
- package/dist/commands/wiki/history.d.ts +33 -0
- package/dist/commands/wiki/history.js +134 -0
- package/dist/commands/wiki/ls.d.ts +2 -0
- package/dist/commands/wiki/ls.js +8 -0
- package/dist/commands/wiki/update.d.ts +3 -1
- package/dist/commands/wiki/update.js +24 -2
- package/dist/commands/wiki/write.d.ts +22 -0
- package/dist/commands/wiki/write.js +144 -6
- package/dist/generated/agent-guides.json +81 -81
- package/dist/generated/managed-instruction-guides.json +1 -1
- package/dist/lib/agent-guides.d.ts +9 -0
- package/dist/lib/agent-guides.js +23 -1
- package/dist/lib/agentic-stream.d.ts +5 -0
- package/dist/lib/agentic-stream.js +122 -3
- package/dist/lib/api-fetch.d.ts +4 -0
- package/dist/lib/api-fetch.js +25 -7
- package/dist/lib/auth-diagnostics.d.ts +39 -0
- package/dist/lib/auth-diagnostics.js +71 -0
- package/dist/lib/cli-client-identity.d.ts +6 -0
- package/dist/lib/cli-client-identity.js +16 -0
- package/dist/lib/cli-installation-diagnostics.d.ts +52 -0
- package/dist/lib/cli-installation-diagnostics.js +254 -0
- package/dist/lib/command-hygiene.d.ts +45 -0
- package/dist/lib/command-hygiene.js +413 -0
- package/dist/lib/commitments.d.ts +64 -3
- package/dist/lib/commitments.js +34 -6
- package/dist/lib/completion-index.d.ts +16 -4
- package/dist/lib/completion-index.js +50 -14
- package/dist/lib/config.js +7 -1
- package/dist/lib/daemon-maintenance-command.d.ts +22 -0
- package/dist/lib/daemon-maintenance-command.js +39 -0
- package/dist/lib/daemon-maintenance.d.ts +275 -0
- package/dist/lib/daemon-maintenance.js +1035 -0
- package/dist/lib/dedicated-service.d.ts +3 -2
- package/dist/lib/dedicated-service.js +11 -3
- package/dist/lib/governed-store.d.ts +8 -0
- package/dist/lib/governed-store.js +5 -0
- package/dist/lib/hosted-machines.d.ts +33 -2
- package/dist/lib/hosted-machines.js +19 -1
- package/dist/lib/json-output.d.ts +1 -1
- package/dist/lib/machines.d.ts +9 -1
- package/dist/lib/machines.js +15 -1
- package/dist/lib/memory-history-session.d.ts +14 -0
- package/dist/lib/memory-history-session.js +60 -0
- package/dist/lib/node-adapter.js +13 -0
- package/dist/lib/record-output.d.ts +22 -0
- package/dist/lib/record-output.js +78 -0
- package/dist/lib/roles.d.ts +3 -3
- package/dist/lib/scoped-memory-command.d.ts +24 -0
- package/dist/lib/scoped-memory-command.js +87 -5
- package/dist/lib/space-charter.d.ts +49 -0
- package/dist/lib/space-charter.js +78 -0
- package/dist/lib/space-loop-migration.d.ts +18 -0
- package/dist/lib/space-loop-migration.js +128 -0
- package/dist/lib/space-notebook.d.ts +22 -0
- package/dist/lib/space-notebook.js +140 -0
- package/dist/lib/space-proposal-decision-command.d.ts +36 -0
- package/dist/lib/space-proposal-decision-command.js +108 -0
- package/dist/lib/space-proposals.d.ts +44 -0
- package/dist/lib/space-proposals.js +186 -0
- package/dist/lib/space-templates.d.ts +8 -0
- package/dist/lib/space-templates.js +17 -0
- package/dist/lib/space-write-policy.d.ts +24 -0
- package/dist/lib/space-write-policy.js +103 -0
- package/dist/lib/task-agent-context-capabilities.d.ts +10 -0
- package/dist/lib/task-agent-context-capabilities.js +22 -0
- package/dist/lib/task-agent-context-compatibility.d.ts +9 -0
- package/dist/lib/task-agent-context-compatibility.js +30 -0
- package/dist/lib/task-asset-upload.d.ts +22 -0
- package/dist/lib/task-asset-upload.js +257 -29
- package/dist/lib/task-batch.d.ts +15 -1
- package/dist/lib/task-batch.js +35 -2
- package/dist/lib/task-operation-watch.d.ts +66 -0
- package/dist/lib/task-operation-watch.js +159 -0
- package/dist/lib/task-resolver.d.ts +1 -1
- package/dist/lib/task-resolver.js +4 -3
- package/dist/lib/task-runtime-headers.js +13 -3
- package/dist/lib/task-work.d.ts +1 -1
- package/dist/lib/task-work.js +35 -1
- package/dist/lib/task-write-attribution.d.ts +14 -0
- package/dist/lib/task-write-attribution.js +35 -2
- package/dist/lib/triggers.d.ts +11 -0
- package/dist/lib/triggers.js +7 -0
- package/dist/lib/wiki-update.d.ts +1 -0
- package/dist/lib/wiki-update.js +10 -1
- package/dist/lib/wiki.js +4 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.d.ts +9 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.js +31 -15
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonToolApproval.js +1 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonWire.js +13 -7
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/guidedUpdate.d.ts +370 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/guidedUpdate.js +315 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/maintenanceReportWire.d.ts +178 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/maintenanceReportWire.js +262 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/toolApprovalSignature.d.ts +51 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/toolApprovalSignature.js +106 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.d.ts +9 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.js +32 -5
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonToolApproval.js +1 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonWire.js +33 -14
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/guidedUpdate.d.ts +370 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/guidedUpdate.js +404 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/maintenanceReportWire.d.ts +178 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/maintenanceReportWire.js +342 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/toolApprovalSignature.d.ts +51 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/toolApprovalSignature.js +138 -0
- package/dist/node_modules/@skrr-ai/auth-core/package.json +20 -0
- package/dist/node_modules/@skrr-ai/data-provider/index.js +27085 -20250
- package/oclif.manifest.json +10570 -7247
- package/package.json +20 -2
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.formatRunExecutor = formatRunExecutor;
|
|
4
|
+
exports.formatRunAttempt = formatRunAttempt;
|
|
5
|
+
exports.formatRunAttemptState = formatRunAttemptState;
|
|
6
|
+
exports.formatRunSettlement = formatRunSettlement;
|
|
7
|
+
exports.formatRunCleanup = formatRunCleanup;
|
|
4
8
|
exports.runNeedsFailureReason = runNeedsFailureReason;
|
|
5
9
|
exports.runHandoverMarker = runHandoverMarker;
|
|
6
10
|
exports.failureFromRun = failureFromRun;
|
|
@@ -33,6 +37,83 @@ function formatRunExecutor(run) {
|
|
|
33
37
|
}
|
|
34
38
|
return '-';
|
|
35
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* The executor attempt is the recovery fence, not a coordinator or terminal
|
|
42
|
+
* identity. Keep it in the Task run listing because it lets a person tell a
|
|
43
|
+
* current retry from an old report without requiring them to discover an
|
|
44
|
+
* executor-specific UI.
|
|
45
|
+
*/
|
|
46
|
+
function formatRunAttempt(ref) {
|
|
47
|
+
if (!ref || typeof ref !== 'object' || Array.isArray(ref))
|
|
48
|
+
return null;
|
|
49
|
+
const attempt = ref;
|
|
50
|
+
const kind = typeof attempt.kind === 'string' && attempt.kind.trim() ? attempt.kind : null;
|
|
51
|
+
const runId = typeof attempt.runId === 'string' && attempt.runId.trim() ? attempt.runId : null;
|
|
52
|
+
const number = typeof attempt.attempt === 'number' &&
|
|
53
|
+
Number.isSafeInteger(attempt.attempt) &&
|
|
54
|
+
attempt.attempt >= 0
|
|
55
|
+
? String(attempt.attempt)
|
|
56
|
+
: null;
|
|
57
|
+
const generation = typeof attempt.generation === 'number' &&
|
|
58
|
+
Number.isSafeInteger(attempt.generation) &&
|
|
59
|
+
attempt.generation >= 0
|
|
60
|
+
? String(attempt.generation)
|
|
61
|
+
: null;
|
|
62
|
+
const identity = [kind, runId].filter(Boolean).join(':');
|
|
63
|
+
const counters = [number ? `attempt ${number}` : null, generation ? `generation ${generation}` : null]
|
|
64
|
+
.filter(Boolean)
|
|
65
|
+
.join(', ');
|
|
66
|
+
return [identity || null, counters || null].filter(Boolean).join(' · ') || null;
|
|
67
|
+
}
|
|
68
|
+
/** The latest exact attempt is enough for a compact historical row. */
|
|
69
|
+
function formatRunAttemptState(run) {
|
|
70
|
+
const terminal = formatRunAttempt(run.terminalExecutorAttemptRef);
|
|
71
|
+
const active = formatRunAttempt(run.activeExecutorAttemptRef);
|
|
72
|
+
if (terminal && active && terminal !== active)
|
|
73
|
+
return `active ${active} → terminal ${terminal}`;
|
|
74
|
+
if (terminal)
|
|
75
|
+
return `terminal ${terminal}`;
|
|
76
|
+
if (active)
|
|
77
|
+
return `active ${active}`;
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A terminal report, Task finalization and resource cleanup are deliberately
|
|
82
|
+
* separate receipts. This compact text preserves that order instead of calling
|
|
83
|
+
* any one of them "done" for the whole Task.
|
|
84
|
+
*/
|
|
85
|
+
function formatRunSettlement(run) {
|
|
86
|
+
const terminal = run.terminalReport;
|
|
87
|
+
const finalization = run.finalization;
|
|
88
|
+
const facts = [];
|
|
89
|
+
if (terminal?.state === 'accepted') {
|
|
90
|
+
facts.push(`terminal accepted${typeof terminal.outcome === 'string' ? ` (${terminal.outcome})` : ''}`);
|
|
91
|
+
}
|
|
92
|
+
if (finalization?.pending === true || finalization?.projected === false) {
|
|
93
|
+
facts.push('finalization pending');
|
|
94
|
+
}
|
|
95
|
+
else if (finalization?.projected === true) {
|
|
96
|
+
facts.push('finalized');
|
|
97
|
+
}
|
|
98
|
+
return facts.length ? facts.join(' · ') : null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The public cleanup projection intentionally excludes reservation/fence
|
|
102
|
+
* coordinates. It is diagnostic evidence only; it never grants a CLI caller a
|
|
103
|
+
* release operation.
|
|
104
|
+
*/
|
|
105
|
+
function formatRunCleanup(run) {
|
|
106
|
+
const cleanup = run.cleanup;
|
|
107
|
+
const lease = cleanup?.capacityReservation;
|
|
108
|
+
if (!lease || typeof lease.state !== 'string' || !lease.state)
|
|
109
|
+
return null;
|
|
110
|
+
const reason = typeof lease.unknownReason === 'string' && lease.unknownReason
|
|
111
|
+
? lease.unknownReason
|
|
112
|
+
: typeof lease.reason === 'string' && lease.reason
|
|
113
|
+
? lease.reason
|
|
114
|
+
: null;
|
|
115
|
+
return `capacity ${lease.state}${reason ? ` (${reason})` : ''}`;
|
|
116
|
+
}
|
|
36
117
|
/**
|
|
37
118
|
* Whether this run row is one whose reason the caller cannot see. (S3 dogfood finding)
|
|
38
119
|
*
|
|
@@ -193,6 +274,12 @@ class TasksRuns extends base_command_1.BaseCommand {
|
|
|
193
274
|
// The column exists only when a run carries a handover field — an older
|
|
194
275
|
// deployment sends neither, and an always-on column of '-' is noise.
|
|
195
276
|
const showHandover = markers.some(Boolean);
|
|
277
|
+
const attempts = items.map(formatRunAttemptState);
|
|
278
|
+
const settlements = items.map(formatRunSettlement);
|
|
279
|
+
const cleanups = items.map(formatRunCleanup);
|
|
280
|
+
const showAttempt = attempts.some(Boolean);
|
|
281
|
+
const showSettlement = settlements.some(Boolean);
|
|
282
|
+
const showCleanup = cleanups.some(Boolean);
|
|
196
283
|
const rows = items.map((run, i) => ({
|
|
197
284
|
runId: String(run.runId ?? run.id ?? run._id ?? '-'),
|
|
198
285
|
status: String(run.status ?? '-'),
|
|
@@ -203,6 +290,9 @@ class TasksRuns extends base_command_1.BaseCommand {
|
|
|
203
290
|
// Always present on the row so the record type stays uniform; the COLUMN
|
|
204
291
|
// is what is conditional.
|
|
205
292
|
handover: markers[i] ?? '-',
|
|
293
|
+
attempt: attempts[i] ?? '-',
|
|
294
|
+
settlement: settlements[i] ?? '-',
|
|
295
|
+
cleanup: cleanups[i] ?? '-',
|
|
206
296
|
}));
|
|
207
297
|
(0, format_1.renderTable)(rows, [
|
|
208
298
|
{ key: 'runId', header: 'RUN ID' },
|
|
@@ -211,6 +301,11 @@ class TasksRuns extends base_command_1.BaseCommand {
|
|
|
211
301
|
{ key: 'started', header: 'STARTED' },
|
|
212
302
|
{ key: 'duration', header: 'DURATION' },
|
|
213
303
|
{ key: 'tokens', header: 'TOKENS' },
|
|
304
|
+
...(showAttempt ? [{ key: 'attempt', header: 'ATTEMPT', maxWidth: 48 }] : []),
|
|
305
|
+
...(showSettlement
|
|
306
|
+
? [{ key: 'settlement', header: 'SETTLEMENT', maxWidth: 42 }]
|
|
307
|
+
: []),
|
|
308
|
+
...(showCleanup ? [{ key: 'cleanup', header: 'CLEANUP', maxWidth: 42 }] : []),
|
|
214
309
|
...(showHandover ? [{ key: 'handover', header: 'HANDOVER' }] : []),
|
|
215
310
|
], (line) => this.log(line));
|
|
216
311
|
// Only once something failed: a healthy list pays nothing for this.
|
|
@@ -117,6 +117,8 @@ export default class TasksShow extends BaseCommand {
|
|
|
117
117
|
id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
118
118
|
};
|
|
119
119
|
static flags: {
|
|
120
|
+
fields: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
121
|
+
compact: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
120
122
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
121
123
|
task: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
122
124
|
'no-enrich': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
@@ -23,6 +23,7 @@ const principal_display_1 = require("../../lib/principal-display");
|
|
|
23
23
|
const task_economics_line_1 = require("../../lib/task-economics-line");
|
|
24
24
|
const format_1 = require("../../lib/format");
|
|
25
25
|
const task_recurrence_outcome_1 = require("../../lib/task-recurrence-outcome");
|
|
26
|
+
const record_output_1 = require("../../lib/record-output");
|
|
26
27
|
/**
|
|
27
28
|
* Where to look next — as COMMANDS, not as facts about the task.
|
|
28
29
|
*
|
|
@@ -282,6 +283,8 @@ class TasksShow extends base_command_1.BaseCommand {
|
|
|
282
283
|
'<%= config.bin %> tasks show',
|
|
283
284
|
'<%= config.bin %> tasks show --task <task-id> --json',
|
|
284
285
|
'<%= config.bin %> tasks show <task-id> --json',
|
|
286
|
+
'<%= config.bin %> tasks show <task-id> --compact --json',
|
|
287
|
+
'<%= config.bin %> tasks show <task-id> --fields id,ref,title,status --json',
|
|
285
288
|
'<%= config.bin %> tasks show <task-id> --no-enrich',
|
|
286
289
|
];
|
|
287
290
|
static args = {
|
|
@@ -303,6 +306,7 @@ class TasksShow extends base_command_1.BaseCommand {
|
|
|
303
306
|
description: 'How to read the description. html (default) is what is stored; markdown returns it as it was written.',
|
|
304
307
|
options: ['html', 'markdown'],
|
|
305
308
|
}),
|
|
309
|
+
...record_output_1.recordOutputFlags,
|
|
306
310
|
};
|
|
307
311
|
async run() {
|
|
308
312
|
this.requireAuth();
|
|
@@ -393,9 +397,19 @@ class TasksShow extends base_command_1.BaseCommand {
|
|
|
393
397
|
completionRead = false;
|
|
394
398
|
}
|
|
395
399
|
if (flags.json) {
|
|
396
|
-
|
|
400
|
+
// `ref` is the stable copy/paste alias list output already exposes. A
|
|
401
|
+
// detail record normalizes it before any projection so callers may use
|
|
402
|
+
// `--fields ref` consistently across `tasks list` and `tasks show`.
|
|
403
|
+
const ref = (typeof t.ref === 'string' && t.ref) ||
|
|
404
|
+
(typeof t.identifier === 'string' && t.identifier) ||
|
|
405
|
+
(typeof t.taskNumber === 'number' || typeof t.taskNumber === 'string'
|
|
406
|
+
? `#${t.taskNumber}`
|
|
407
|
+
: undefined);
|
|
408
|
+
this.printJsonResult((0, record_output_1.shapeRecordResponse)({ ...t, ...(ref ? { ref } : {}), ...(url ? { url } : {}), completion }, { resource: 'task', fields: flags.fields, compact: flags.compact }));
|
|
397
409
|
return;
|
|
398
410
|
}
|
|
411
|
+
for (const line of (0, record_output_1.textModeRecordProjectionNotes)(flags))
|
|
412
|
+
this.log(line);
|
|
399
413
|
for (const line of completionLines(completion, { read: completionRead }))
|
|
400
414
|
this.log(line);
|
|
401
415
|
const agents = Array.isArray(t.assigneeAgentIds) ? t.assigneeAgentIds : [];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
/** Read-only recovery for one caller-owned task-start request. */
|
|
3
|
+
export default class TasksStartReceipt extends BaseCommand {
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static args: {
|
|
7
|
+
id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
task: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'request-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const data_provider_1 = require("@skrr-ai/data-provider");
|
|
5
|
+
const base_command_1 = require("../../base-command");
|
|
6
|
+
const task_resolver_1 = require("../../lib/task-resolver");
|
|
7
|
+
/** Read-only recovery for one caller-owned task-start request. */
|
|
8
|
+
class TasksStartReceipt extends base_command_1.BaseCommand {
|
|
9
|
+
static description = 'Read the durable receipt for one task-start request without starting another run.';
|
|
10
|
+
static examples = [
|
|
11
|
+
'<%= config.bin %> tasks start-receipt <task-id> --request-id task-start:deploy-42',
|
|
12
|
+
'<%= config.bin %> tasks start-receipt <task-id> --request-id task-start:deploy-42 --json',
|
|
13
|
+
];
|
|
14
|
+
static args = {
|
|
15
|
+
id: core_1.Args.string({
|
|
16
|
+
description: 'Task ID; defaults to OVERSKY_SESSION_TASK_ID in task runtimes',
|
|
17
|
+
required: false,
|
|
18
|
+
ignoreStdin: true,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
static flags = {
|
|
22
|
+
task: core_1.Flags.string({ description: 'Task ID; overrides daemon runtime context' }),
|
|
23
|
+
'request-id': core_1.Flags.string({
|
|
24
|
+
description: 'The request id printed by tasks start',
|
|
25
|
+
required: true,
|
|
26
|
+
}),
|
|
27
|
+
json: core_1.Flags.boolean({ description: 'Output as JSON' }),
|
|
28
|
+
};
|
|
29
|
+
async run() {
|
|
30
|
+
this.requireAuth();
|
|
31
|
+
const { args, flags } = await this.parse(TasksStartReceipt);
|
|
32
|
+
let taskIdentity;
|
|
33
|
+
try {
|
|
34
|
+
taskIdentity = (0, task_resolver_1.resolveTaskIdentity)({ positionalId: args.id, flagTask: flags.task });
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const failure = (0, task_resolver_1.taskResolutionFailure)(err);
|
|
38
|
+
this.failWithCliError({
|
|
39
|
+
message: failure.message,
|
|
40
|
+
code: failure.code,
|
|
41
|
+
exit: 2,
|
|
42
|
+
retryable: false,
|
|
43
|
+
details: { suggestion: failure.suggestion, context: failure.details },
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// `resolveTaskIdentity` decides which INPUT wins; it does no lookup. This
|
|
47
|
+
// turns whatever it picked into something the API can resolve — a UUID and
|
|
48
|
+
// an OSK-2423 ref pass through untouched, a title is searched.
|
|
49
|
+
const taskId = await this.resolveTaskReference(taskIdentity.id);
|
|
50
|
+
// The CLI may compile against a published data-provider declaration that
|
|
51
|
+
// predates this additive reader; use the runtime surface just as `start`
|
|
52
|
+
// does for its newer options.
|
|
53
|
+
const getTaskStartReceipt = data_provider_1.dataService
|
|
54
|
+
.getTaskStartReceipt;
|
|
55
|
+
let receipt;
|
|
56
|
+
try {
|
|
57
|
+
receipt = await getTaskStartReceipt(taskId, flags['request-id']);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
this.handleApiError(err, { subject: `Task ${taskId} start receipt` });
|
|
61
|
+
}
|
|
62
|
+
if (flags.json) {
|
|
63
|
+
this.printJsonResult(receipt);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (receipt.state === 'accepted') {
|
|
67
|
+
this.log(`Start request ${receipt.requestId} has an accepted server response.`);
|
|
68
|
+
if (receipt.responseStatus !== undefined)
|
|
69
|
+
this.log(`Response status: ${receipt.responseStatus}`);
|
|
70
|
+
if (receipt.run?.runId)
|
|
71
|
+
this.log(`Run: ${receipt.run.runId}`);
|
|
72
|
+
if (receipt.run?.autonomousRunId)
|
|
73
|
+
this.log(`Autonomous Run: ${receipt.run.autonomousRunId}`);
|
|
74
|
+
if (receipt.run?.conversationId)
|
|
75
|
+
this.log(`Conversation: ${receipt.run.conversationId}`);
|
|
76
|
+
if (receipt.run?.sessionId)
|
|
77
|
+
this.log(`Session: ${receipt.run.sessionId}`);
|
|
78
|
+
if (receipt.run?.responseMessageId) {
|
|
79
|
+
this.log(`Response message: ${receipt.run.responseMessageId}`);
|
|
80
|
+
}
|
|
81
|
+
if (receipt.code)
|
|
82
|
+
this.log(`Response code: ${receipt.code}`);
|
|
83
|
+
this.log('This receipt does not prove target acquisition, harness activity, or a terminal Task outcome.');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (receipt.state === 'pending') {
|
|
87
|
+
this.log(`Start request ${receipt.requestId} is pending; its outcome is not recorded yet.`);
|
|
88
|
+
this.log('Do not issue a fresh start. Wait for the original request or retry this exact request id.');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.log(`No task-scoped receipt exists for start request ${receipt.requestId}.`);
|
|
92
|
+
this.log(`That is not proof the start did not happen. Inspect: ${this.config.bin} tasks execution-state ${taskId}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.default = TasksStartReceipt;
|
|
@@ -11,7 +11,9 @@ export default class TasksStart extends BaseCommand {
|
|
|
11
11
|
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
12
|
task: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
skill: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
capability: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
15
|
branch: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
'request-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
17
|
};
|
|
16
18
|
run(): Promise<void>;
|
|
17
19
|
}
|
|
@@ -25,6 +27,8 @@ export declare function waitingForMachine(err: unknown): {
|
|
|
25
27
|
reason?: string;
|
|
26
28
|
retryable?: boolean;
|
|
27
29
|
} | null;
|
|
30
|
+
/** The next safe action when admission is retained but its machine is waking. */
|
|
31
|
+
export declare function waitingForMachineFollowUpLine(bin: string, taskRef: string): string;
|
|
28
32
|
/**
|
|
29
33
|
* What to run next, printed after a start (OSK-12128). A start used to print
|
|
30
34
|
* two ids and stop, and the way to watch it was found by accident. Every
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.waitingForMachine = waitingForMachine;
|
|
4
|
+
exports.waitingForMachineFollowUpLine = waitingForMachineFollowUpLine;
|
|
4
5
|
exports.startFollowUpLines = startFollowUpLines;
|
|
5
6
|
const core_1 = require("@oclif/core");
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
8
|
const data_provider_1 = require("@skrr-ai/data-provider");
|
|
7
9
|
const base_command_1 = require("../../base-command");
|
|
8
10
|
const task_resolver_1 = require("../../lib/task-resolver");
|
|
9
11
|
const git_task_1 = require("../../lib/git-task");
|
|
10
12
|
const task_admission_1 = require("../../lib/task-admission");
|
|
13
|
+
const TASK_START_REQUEST_ID_PATTERN = /^[A-Za-z0-9._:/-]{1,200}$/;
|
|
11
14
|
class TasksStart extends base_command_1.BaseCommand {
|
|
12
15
|
static description = 'Start execution of a task: its assignee agent runs it in a new conversation + session. ' +
|
|
13
16
|
'Alias: tasks execute';
|
|
@@ -19,9 +22,11 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
19
22
|
'<%= config.bin %> tasks start',
|
|
20
23
|
'<%= config.bin %> tasks start --task <task-id> --json',
|
|
21
24
|
'<%= config.bin %> tasks start <task-id> --skill <skill-id>',
|
|
25
|
+
'<%= config.bin %> tasks start <task-id> --capability shell --capability codex_session',
|
|
22
26
|
'<%= config.bin %> tasks start OSK-123 --branch',
|
|
23
27
|
'<%= config.bin %> tasks start <task-id> --json',
|
|
24
28
|
'<%= config.bin %> tasks start <task-id> --dry-run --json',
|
|
29
|
+
'<%= config.bin %> tasks start <task-id> --request-id task-start:deploy-42',
|
|
25
30
|
];
|
|
26
31
|
static args = {
|
|
27
32
|
id: core_1.Args.string({
|
|
@@ -39,9 +44,16 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
39
44
|
skill: core_1.Flags.string({
|
|
40
45
|
description: "Skill ID to inject into the run. Must be pinned to the task's space (server rejects unknown skills with 4xx).",
|
|
41
46
|
}),
|
|
47
|
+
capability: core_1.Flags.string({
|
|
48
|
+
multiple: true,
|
|
49
|
+
description: 'Capability required of the selected execution target. Repeat for every required capability.',
|
|
50
|
+
}),
|
|
42
51
|
branch: core_1.Flags.boolean({
|
|
43
52
|
description: 'Create or check out the local oversky/task/<ref> branch before starting the task.',
|
|
44
53
|
}),
|
|
54
|
+
'request-id': core_1.Flags.string({
|
|
55
|
+
description: 'Stable idempotency key for this logical start. Reuse it after a lost response; inspect it with tasks start-receipt.',
|
|
56
|
+
}),
|
|
45
57
|
};
|
|
46
58
|
async run() {
|
|
47
59
|
this.requireAuth();
|
|
@@ -60,6 +72,10 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
60
72
|
details: { suggestion: failure.suggestion, context: failure.details },
|
|
61
73
|
});
|
|
62
74
|
}
|
|
75
|
+
if (flags['request-id'] !== undefined &&
|
|
76
|
+
!TASK_START_REQUEST_ID_PATTERN.test(flags['request-id'])) {
|
|
77
|
+
this.error('--request-id must be 1-200 characters of letters, digits and . _ : / - (it is sent as an idempotency key).', { exit: 2 });
|
|
78
|
+
}
|
|
63
79
|
if (flags['dry-run']) {
|
|
64
80
|
if (flags.branch)
|
|
65
81
|
this.error('--dry-run cannot check out a branch; omit --branch.', { exit: 2 });
|
|
@@ -67,7 +83,11 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
67
83
|
try {
|
|
68
84
|
// A separate route is intentional: an older /start silently ignores
|
|
69
85
|
// unknown request fields. A dryRun flag there could start real work.
|
|
70
|
-
|
|
86
|
+
const previewOptions = {
|
|
87
|
+
...(flags.skill ? { skillId: flags.skill } : {}),
|
|
88
|
+
...(flags.capability?.length ? { requestedCapabilities: flags.capability } : {}),
|
|
89
|
+
};
|
|
90
|
+
preview = await data_provider_1.dataService.previewTaskStart(taskIdentity.id, Object.keys(previewOptions).length ? previewOptions : undefined);
|
|
71
91
|
}
|
|
72
92
|
catch (err) {
|
|
73
93
|
this.handleApiError(err, { subject: `Task ${taskIdentity.id} execution preview` });
|
|
@@ -96,6 +116,10 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
96
116
|
const taskId = flags.branch
|
|
97
117
|
? await this.resolveTaskReference(taskIdentity.id)
|
|
98
118
|
: taskIdentity.id;
|
|
119
|
+
// Task starts can allocate a Run. The CLI owns one request id per invocation
|
|
120
|
+
// and prints it, so a caller who loses the response can inspect or replay
|
|
121
|
+
// this exact request instead of guessing whether another start is safe.
|
|
122
|
+
const requestId = flags['request-id'] || `task-start:${(0, node_crypto_1.randomUUID)()}`;
|
|
99
123
|
let branch;
|
|
100
124
|
if (flags.branch) {
|
|
101
125
|
try {
|
|
@@ -125,7 +149,11 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
125
149
|
}
|
|
126
150
|
let result;
|
|
127
151
|
try {
|
|
128
|
-
result = await data_provider_1.dataService.startTask(taskId,
|
|
152
|
+
result = await data_provider_1.dataService.startTask(taskId, {
|
|
153
|
+
...(flags.skill ? { skillId: flags.skill } : {}),
|
|
154
|
+
...(flags.capability?.length ? { requestedCapabilities: flags.capability } : {}),
|
|
155
|
+
requestId,
|
|
156
|
+
});
|
|
129
157
|
}
|
|
130
158
|
catch (err) {
|
|
131
159
|
// A stopped Dedicated machine is being started for this work. That is the
|
|
@@ -139,6 +167,7 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
139
167
|
code: 'TASK_WAITING_FOR_MACHINE',
|
|
140
168
|
taskId,
|
|
141
169
|
task: { ...taskIdentity, id: taskId },
|
|
170
|
+
requestId,
|
|
142
171
|
...(branch ? { branch } : {}),
|
|
143
172
|
...waiting,
|
|
144
173
|
}, null, 2));
|
|
@@ -148,8 +177,11 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
148
177
|
this.log(`${branch.created ? 'Created' : 'Checked out'} branch: ${branch.branch}`);
|
|
149
178
|
}
|
|
150
179
|
this.log(`Task ${taskIdentity.id} is waiting for the machine to start; the task will run by itself once it is ready.`);
|
|
180
|
+
this.log(`Start request: ${requestId}`);
|
|
181
|
+
this.log(`Inspect request receipt: ${this.config.bin} tasks start-receipt ${taskIdentity.id} --request-id ${requestId}`);
|
|
151
182
|
if (waiting.message)
|
|
152
183
|
this.log(waiting.message);
|
|
184
|
+
this.log(waitingForMachineFollowUpLine(this.config.bin, taskIdentity.id));
|
|
153
185
|
return;
|
|
154
186
|
}
|
|
155
187
|
// Name the task in the failure. `skrr tasks start` is the command people
|
|
@@ -159,21 +191,30 @@ class TasksStart extends base_command_1.BaseCommand {
|
|
|
159
191
|
this.handleApiError(err, { subject: `Task ${taskIdentity.id}` });
|
|
160
192
|
}
|
|
161
193
|
if (flags.json) {
|
|
194
|
+
const receipt = result.receipt || { requestId, state: 'accepted' };
|
|
162
195
|
this.log(JSON.stringify({
|
|
163
196
|
...result,
|
|
197
|
+
receipt,
|
|
164
198
|
taskId,
|
|
165
199
|
task: { ...taskIdentity, id: taskId },
|
|
166
200
|
...(branch ? { branch } : {}),
|
|
167
201
|
}, null, 2));
|
|
168
202
|
return;
|
|
169
203
|
}
|
|
170
|
-
this.log(`
|
|
204
|
+
this.log(`Accepted start request for task ${taskId}${flags.skill ? ` with skill ${flags.skill}` : ''}`);
|
|
205
|
+
this.log(`Start receipt: ${result.receipt?.requestId || requestId}`);
|
|
171
206
|
if (branch)
|
|
172
207
|
this.log(`${branch.created ? 'Created' : 'Checked out'} branch: ${branch.branch}`);
|
|
173
208
|
for (const line of (0, task_admission_1.admissionLines)(result.executionAdmission))
|
|
174
209
|
this.log(line);
|
|
210
|
+
if (result.runId)
|
|
211
|
+
this.log(`Run: ${result.runId}`);
|
|
212
|
+
if (result.autonomousRunId)
|
|
213
|
+
this.log(`Autonomous Run: ${result.autonomousRunId}`);
|
|
175
214
|
this.log(`Conversation: ${result.conversationId}`);
|
|
176
215
|
this.log(`Session: ${result.sessionId}`);
|
|
216
|
+
if (result.responseMessageId)
|
|
217
|
+
this.log(`Response message: ${result.responseMessageId}`);
|
|
177
218
|
for (const line of startFollowUpLines(this.config.bin, taskIdentity.id))
|
|
178
219
|
this.log(line);
|
|
179
220
|
}
|
|
@@ -213,6 +254,10 @@ function waitingForMachine(err) {
|
|
|
213
254
|
...(typeof body.retryable === 'boolean' ? { retryable: body.retryable } : {}),
|
|
214
255
|
};
|
|
215
256
|
}
|
|
257
|
+
/** The next safe action when admission is retained but its machine is waking. */
|
|
258
|
+
function waitingForMachineFollowUpLine(bin, taskRef) {
|
|
259
|
+
return `Inspect recovery: ${bin} tasks execution-state ${taskRef}`;
|
|
260
|
+
}
|
|
216
261
|
/**
|
|
217
262
|
* What to run next, printed after a start (OSK-12128). A start used to print
|
|
218
263
|
* two ids and stop, and the way to watch it was found by accident. Every
|
|
@@ -230,6 +275,7 @@ function startFollowUpLines(bin, taskRef) {
|
|
|
230
275
|
'',
|
|
231
276
|
'Follow it:',
|
|
232
277
|
` ${bin} tasks watch ${taskRef} status until it finishes or fails`,
|
|
278
|
+
` ${bin} tasks execution-state ${taskRef} exact run, current attempt, wait and recovery state`,
|
|
233
279
|
` ${bin} tasks transcript ${taskRef} what the agent has said so far`,
|
|
234
280
|
` ${bin} tasks approvals list ${taskRef} approvals waiting on you, or why a run is blocked on one`,
|
|
235
281
|
'On a local machine, the run may add its instruction file (AGENTS.md / CLAUDE.md) to the',
|
|
@@ -543,6 +543,9 @@ class TasksUpdate extends base_command_1.BaseCommand {
|
|
|
543
543
|
}
|
|
544
544
|
this.handleApiError(err);
|
|
545
545
|
}
|
|
546
|
+
// Held for approval by the Space write policy: nothing was changed.
|
|
547
|
+
if (this.reportHeldSpaceWrite(updated, { json: flags.json }))
|
|
548
|
+
return;
|
|
546
549
|
// Postcondition, not a prediction — see `droppedEstimateWarning`. On stderr
|
|
547
550
|
// so `--json` stdout stays a parseable task row.
|
|
548
551
|
const estimateWarning = (0, create_1.droppedEstimateWarning)(flags.estimate, updated, updated?.spaceId);
|
|
@@ -25,7 +25,10 @@ class TasksUpsert extends base_command_1.BaseCommand {
|
|
|
25
25
|
'default-agent': core_1.Flags.string({
|
|
26
26
|
description: 'Override the automatic assignee for creates, or fill an unassigned existing match. Use "auto" to inherit the space lead agent.',
|
|
27
27
|
}),
|
|
28
|
-
unassigned: core_1.Flags.boolean({
|
|
28
|
+
unassigned: core_1.Flags.boolean({
|
|
29
|
+
description: 'Explicitly clear both assignee kinds, suppressing automatic defaults while retaining executor intent.',
|
|
30
|
+
exclusive: ['default-agent', 'assignee-agent', 'assignee-user'],
|
|
31
|
+
}),
|
|
29
32
|
title: core_1.Flags.string({ description: 'Task title (required when creating)' }),
|
|
30
33
|
description: core_1.Flags.string({ description: 'Task description' }),
|
|
31
34
|
'description-format': core_1.Flags.string({
|
|
@@ -70,7 +73,12 @@ class TasksUpsert extends base_command_1.BaseCommand {
|
|
|
70
73
|
this.setJsonOperation({ command: 'tasks:upsert', mode: 'execute' });
|
|
71
74
|
const unassignmentError = (0, tasks_1.taskUnassignmentFlagError)(flags);
|
|
72
75
|
if (unassignmentError)
|
|
73
|
-
this.failWithCliError({
|
|
76
|
+
this.failWithCliError({
|
|
77
|
+
message: unassignmentError,
|
|
78
|
+
code: 'TASK_UNASSIGNED_CONFLICT',
|
|
79
|
+
exit: 2,
|
|
80
|
+
retryable: false,
|
|
81
|
+
});
|
|
74
82
|
let body = {};
|
|
75
83
|
try {
|
|
76
84
|
body = await (0, prompt_1.readJsonBody)(flags['from-json']);
|
|
@@ -219,6 +227,9 @@ class TasksUpsert extends base_command_1.BaseCommand {
|
|
|
219
227
|
this.handleApiError(err);
|
|
220
228
|
}
|
|
221
229
|
}
|
|
230
|
+
// Held for approval by the Space write policy: nothing was written.
|
|
231
|
+
if (this.reportHeldSpaceWrite(task, { json: flags.json }))
|
|
232
|
+
return;
|
|
222
233
|
const result = {
|
|
223
234
|
object: 'task_upsert',
|
|
224
235
|
action,
|
|
@@ -229,7 +240,10 @@ class TasksUpsert extends base_command_1.BaseCommand {
|
|
|
229
240
|
url: (0, web_url_1.taskUrlFrom)(this.cliConfig.baseURL, task),
|
|
230
241
|
};
|
|
231
242
|
if (flags.json) {
|
|
232
|
-
this.printJsonOperation(result, {
|
|
243
|
+
this.printJsonOperation(result, {
|
|
244
|
+
resource: { kind: 'task', id: task?.id },
|
|
245
|
+
task: { id: task?.id },
|
|
246
|
+
});
|
|
233
247
|
return;
|
|
234
248
|
}
|
|
235
249
|
this.log(`${capitalize(action)} task ${(0, tasks_1.formatTaskLabel)(task)}`);
|
|
@@ -13,7 +13,10 @@ export default class TasksWatch extends BaseCommand {
|
|
|
13
13
|
interval: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
14
|
timeout: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
operation: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
17
|
};
|
|
17
18
|
run(): Promise<void>;
|
|
19
|
+
private watchOperation;
|
|
20
|
+
private printOperationCheckpoint;
|
|
18
21
|
private printSnapshot;
|
|
19
22
|
}
|