@the-open-engine/zeroshot 5.4.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.
Files changed (295) hide show
  1. package/CHANGELOG.md +539 -0
  2. package/LICENSE +21 -0
  3. package/README.md +508 -0
  4. package/cli/commands/inspect-render.js +135 -0
  5. package/cli/commands/inspect.js +294 -0
  6. package/cli/commands/providers.js +149 -0
  7. package/cli/index.js +5431 -0
  8. package/cli/lib/first-run.js +211 -0
  9. package/cli/lib/update-checker.js +281 -0
  10. package/cli/message-formatter-utils.js +75 -0
  11. package/cli/message-formatters-normal.js +275 -0
  12. package/cli/message-formatters-watch.js +185 -0
  13. package/cluster-templates/base-templates/debug-workflow.json +422 -0
  14. package/cluster-templates/base-templates/full-workflow.json +727 -0
  15. package/cluster-templates/base-templates/heavy-validation.json +272 -0
  16. package/cluster-templates/base-templates/quick-validation.json +285 -0
  17. package/cluster-templates/base-templates/single-worker.json +71 -0
  18. package/cluster-templates/base-templates/worker-validator.json +230 -0
  19. package/cluster-templates/conductor-bootstrap.json +130 -0
  20. package/docker/zeroshot-cluster/Dockerfile +153 -0
  21. package/docker/zeroshot-cluster/pre-baked-deps.json +28 -0
  22. package/lib/agent-cli-provider/adapters/claude-parser.d.ts +3 -0
  23. package/lib/agent-cli-provider/adapters/claude-parser.d.ts.map +1 -0
  24. package/lib/agent-cli-provider/adapters/claude-parser.js +122 -0
  25. package/lib/agent-cli-provider/adapters/claude-parser.js.map +1 -0
  26. package/lib/agent-cli-provider/adapters/claude-recovery.d.ts +15 -0
  27. package/lib/agent-cli-provider/adapters/claude-recovery.d.ts.map +1 -0
  28. package/lib/agent-cli-provider/adapters/claude-recovery.js +165 -0
  29. package/lib/agent-cli-provider/adapters/claude-recovery.js.map +1 -0
  30. package/lib/agent-cli-provider/adapters/claude.d.ts +3 -0
  31. package/lib/agent-cli-provider/adapters/claude.d.ts.map +1 -0
  32. package/lib/agent-cli-provider/adapters/claude.js +181 -0
  33. package/lib/agent-cli-provider/adapters/claude.js.map +1 -0
  34. package/lib/agent-cli-provider/adapters/codex-parser.d.ts +3 -0
  35. package/lib/agent-cli-provider/adapters/codex-parser.d.ts.map +1 -0
  36. package/lib/agent-cli-provider/adapters/codex-parser.js +192 -0
  37. package/lib/agent-cli-provider/adapters/codex-parser.js.map +1 -0
  38. package/lib/agent-cli-provider/adapters/codex.d.ts +3 -0
  39. package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -0
  40. package/lib/agent-cli-provider/adapters/codex.js +151 -0
  41. package/lib/agent-cli-provider/adapters/codex.js.map +1 -0
  42. package/lib/agent-cli-provider/adapters/common.d.ts +28 -0
  43. package/lib/agent-cli-provider/adapters/common.d.ts.map +1 -0
  44. package/lib/agent-cli-provider/adapters/common.js +71 -0
  45. package/lib/agent-cli-provider/adapters/common.js.map +1 -0
  46. package/lib/agent-cli-provider/adapters/gemini.d.ts +3 -0
  47. package/lib/agent-cli-provider/adapters/gemini.d.ts.map +1 -0
  48. package/lib/agent-cli-provider/adapters/gemini.js +176 -0
  49. package/lib/agent-cli-provider/adapters/gemini.js.map +1 -0
  50. package/lib/agent-cli-provider/adapters/index.d.ts +9 -0
  51. package/lib/agent-cli-provider/adapters/index.d.ts.map +1 -0
  52. package/lib/agent-cli-provider/adapters/index.js +95 -0
  53. package/lib/agent-cli-provider/adapters/index.js.map +1 -0
  54. package/lib/agent-cli-provider/adapters/opencode.d.ts +3 -0
  55. package/lib/agent-cli-provider/adapters/opencode.d.ts.map +1 -0
  56. package/lib/agent-cli-provider/adapters/opencode.js +228 -0
  57. package/lib/agent-cli-provider/adapters/opencode.js.map +1 -0
  58. package/lib/agent-cli-provider/contract-actions.d.ts +5 -0
  59. package/lib/agent-cli-provider/contract-actions.d.ts.map +1 -0
  60. package/lib/agent-cli-provider/contract-actions.js +140 -0
  61. package/lib/agent-cli-provider/contract-actions.js.map +1 -0
  62. package/lib/agent-cli-provider/contract-env.d.ts +11 -0
  63. package/lib/agent-cli-provider/contract-env.d.ts.map +1 -0
  64. package/lib/agent-cli-provider/contract-env.js +113 -0
  65. package/lib/agent-cli-provider/contract-env.js.map +1 -0
  66. package/lib/agent-cli-provider/contract-envelope.d.ts +49 -0
  67. package/lib/agent-cli-provider/contract-envelope.d.ts.map +1 -0
  68. package/lib/agent-cli-provider/contract-envelope.js +52 -0
  69. package/lib/agent-cli-provider/contract-envelope.js.map +1 -0
  70. package/lib/agent-cli-provider/contract-errors.d.ts +22 -0
  71. package/lib/agent-cli-provider/contract-errors.d.ts.map +1 -0
  72. package/lib/agent-cli-provider/contract-errors.js +71 -0
  73. package/lib/agent-cli-provider/contract-errors.js.map +1 -0
  74. package/lib/agent-cli-provider/contract-fallback.d.ts +7 -0
  75. package/lib/agent-cli-provider/contract-fallback.d.ts.map +1 -0
  76. package/lib/agent-cli-provider/contract-fallback.js +102 -0
  77. package/lib/agent-cli-provider/contract-fallback.js.map +1 -0
  78. package/lib/agent-cli-provider/contract-invoke.d.ts +5 -0
  79. package/lib/agent-cli-provider/contract-invoke.d.ts.map +1 -0
  80. package/lib/agent-cli-provider/contract-invoke.js +89 -0
  81. package/lib/agent-cli-provider/contract-invoke.js.map +1 -0
  82. package/lib/agent-cli-provider/contract-options.d.ts +3 -0
  83. package/lib/agent-cli-provider/contract-options.d.ts.map +1 -0
  84. package/lib/agent-cli-provider/contract-options.js +140 -0
  85. package/lib/agent-cli-provider/contract-options.js.map +1 -0
  86. package/lib/agent-cli-provider/contract-parse.d.ts +15 -0
  87. package/lib/agent-cli-provider/contract-parse.d.ts.map +1 -0
  88. package/lib/agent-cli-provider/contract-parse.js +81 -0
  89. package/lib/agent-cli-provider/contract-parse.js.map +1 -0
  90. package/lib/agent-cli-provider/contract-support.d.ts +18 -0
  91. package/lib/agent-cli-provider/contract-support.d.ts.map +1 -0
  92. package/lib/agent-cli-provider/contract-support.js +154 -0
  93. package/lib/agent-cli-provider/contract-support.js.map +1 -0
  94. package/lib/agent-cli-provider/contract.d.ts +13 -0
  95. package/lib/agent-cli-provider/contract.d.ts.map +1 -0
  96. package/lib/agent-cli-provider/contract.js +30 -0
  97. package/lib/agent-cli-provider/contract.js.map +1 -0
  98. package/lib/agent-cli-provider/env-safety.d.ts +11 -0
  99. package/lib/agent-cli-provider/env-safety.d.ts.map +1 -0
  100. package/lib/agent-cli-provider/env-safety.js +83 -0
  101. package/lib/agent-cli-provider/env-safety.js.map +1 -0
  102. package/lib/agent-cli-provider/errors.d.ts +5 -0
  103. package/lib/agent-cli-provider/errors.d.ts.map +1 -0
  104. package/lib/agent-cli-provider/errors.js +115 -0
  105. package/lib/agent-cli-provider/errors.js.map +1 -0
  106. package/lib/agent-cli-provider/executable.d.ts +3 -0
  107. package/lib/agent-cli-provider/executable.d.ts.map +1 -0
  108. package/lib/agent-cli-provider/executable.js +24 -0
  109. package/lib/agent-cli-provider/executable.js.map +1 -0
  110. package/lib/agent-cli-provider/index.d.ts +8 -0
  111. package/lib/agent-cli-provider/index.d.ts.map +1 -0
  112. package/lib/agent-cli-provider/index.js +31 -0
  113. package/lib/agent-cli-provider/index.js.map +1 -0
  114. package/lib/agent-cli-provider/invoke-evidence.d.ts +4 -0
  115. package/lib/agent-cli-provider/invoke-evidence.d.ts.map +1 -0
  116. package/lib/agent-cli-provider/invoke-evidence.js +17 -0
  117. package/lib/agent-cli-provider/invoke-evidence.js.map +1 -0
  118. package/lib/agent-cli-provider/json.d.ts +16 -0
  119. package/lib/agent-cli-provider/json.d.ts.map +1 -0
  120. package/lib/agent-cli-provider/json.js +110 -0
  121. package/lib/agent-cli-provider/json.js.map +1 -0
  122. package/lib/agent-cli-provider/log-prefix.d.ts +2 -0
  123. package/lib/agent-cli-provider/log-prefix.d.ts.map +1 -0
  124. package/lib/agent-cli-provider/log-prefix.js +22 -0
  125. package/lib/agent-cli-provider/log-prefix.js.map +1 -0
  126. package/lib/agent-cli-provider/process-runner.d.ts +17 -0
  127. package/lib/agent-cli-provider/process-runner.d.ts.map +1 -0
  128. package/lib/agent-cli-provider/process-runner.js +89 -0
  129. package/lib/agent-cli-provider/process-runner.js.map +1 -0
  130. package/lib/agent-cli-provider/redaction.d.ts +9 -0
  131. package/lib/agent-cli-provider/redaction.d.ts.map +1 -0
  132. package/lib/agent-cli-provider/redaction.js +227 -0
  133. package/lib/agent-cli-provider/redaction.js.map +1 -0
  134. package/lib/agent-cli-provider/schema.d.ts +5 -0
  135. package/lib/agent-cli-provider/schema.d.ts.map +1 -0
  136. package/lib/agent-cli-provider/schema.js +136 -0
  137. package/lib/agent-cli-provider/schema.js.map +1 -0
  138. package/lib/agent-cli-provider/single-agent-runtime.d.ts +15 -0
  139. package/lib/agent-cli-provider/single-agent-runtime.d.ts.map +1 -0
  140. package/lib/agent-cli-provider/single-agent-runtime.js +228 -0
  141. package/lib/agent-cli-provider/single-agent-runtime.js.map +1 -0
  142. package/lib/agent-cli-provider/types.d.ts +194 -0
  143. package/lib/agent-cli-provider/types.d.ts.map +1 -0
  144. package/lib/agent-cli-provider/types.js +12 -0
  145. package/lib/agent-cli-provider/types.js.map +1 -0
  146. package/lib/completion.js +174 -0
  147. package/lib/detached-startup.js +220 -0
  148. package/lib/docker-config.js +220 -0
  149. package/lib/git-remote-utils.js +165 -0
  150. package/lib/id-detector.js +55 -0
  151. package/lib/provider-defaults.js +62 -0
  152. package/lib/provider-detection.js +59 -0
  153. package/lib/provider-names.js +57 -0
  154. package/lib/repo-settings.js +69 -0
  155. package/lib/settings/claude-auth.js +78 -0
  156. package/lib/settings.js +542 -0
  157. package/lib/start-cluster.js +321 -0
  158. package/lib/stream-json-parser.js +67 -0
  159. package/package.json +162 -0
  160. package/scripts/fix-node-pty-permissions.js +75 -0
  161. package/scripts/record-demo.sh +279 -0
  162. package/scripts/setup-merge-queue.sh +170 -0
  163. package/scripts/test-install.sh +40 -0
  164. package/scripts/validate-templates.js +107 -0
  165. package/src/agent/agent-config.js +266 -0
  166. package/src/agent/agent-context-builder.js +189 -0
  167. package/src/agent/agent-context-sections.js +338 -0
  168. package/src/agent/agent-context-sources.js +147 -0
  169. package/src/agent/agent-hook-executor.js +721 -0
  170. package/src/agent/agent-input-injector.js +141 -0
  171. package/src/agent/agent-lifecycle.js +982 -0
  172. package/src/agent/agent-quality-gate-schema.js +93 -0
  173. package/src/agent/agent-quality-gates-context.js +51 -0
  174. package/src/agent/agent-stuck-detector.js +256 -0
  175. package/src/agent/agent-task-executor.js +2028 -0
  176. package/src/agent/agent-trigger-evaluator.js +67 -0
  177. package/src/agent/context-metrics.js +160 -0
  178. package/src/agent/context-pack-builder.js +367 -0
  179. package/src/agent/context-replay-policy.js +51 -0
  180. package/src/agent/guidance-queue.js +77 -0
  181. package/src/agent/output-extraction.js +367 -0
  182. package/src/agent/output-reformatter.js +175 -0
  183. package/src/agent/pr-verification.js +653 -0
  184. package/src/agent/rate-limit-backoff.js +82 -0
  185. package/src/agent/schema-utils.js +146 -0
  186. package/src/agent/validation-platform.js +35 -0
  187. package/src/agent-cli-provider/adapters/claude-parser.ts +133 -0
  188. package/src/agent-cli-provider/adapters/claude-recovery.ts +203 -0
  189. package/src/agent-cli-provider/adapters/claude.ts +247 -0
  190. package/src/agent-cli-provider/adapters/codex-parser.ts +211 -0
  191. package/src/agent-cli-provider/adapters/codex.ts +217 -0
  192. package/src/agent-cli-provider/adapters/common.ts +124 -0
  193. package/src/agent-cli-provider/adapters/gemini.ts +243 -0
  194. package/src/agent-cli-provider/adapters/index.ts +126 -0
  195. package/src/agent-cli-provider/adapters/opencode.ts +286 -0
  196. package/src/agent-cli-provider/contract-actions.ts +150 -0
  197. package/src/agent-cli-provider/contract-env.ts +111 -0
  198. package/src/agent-cli-provider/contract-envelope.ts +110 -0
  199. package/src/agent-cli-provider/contract-errors.ts +66 -0
  200. package/src/agent-cli-provider/contract-fallback.ts +121 -0
  201. package/src/agent-cli-provider/contract-invoke.ts +104 -0
  202. package/src/agent-cli-provider/contract-options.ts +173 -0
  203. package/src/agent-cli-provider/contract-parse.ts +94 -0
  204. package/src/agent-cli-provider/contract-support.ts +167 -0
  205. package/src/agent-cli-provider/contract.ts +56 -0
  206. package/src/agent-cli-provider/env-safety.ts +82 -0
  207. package/src/agent-cli-provider/errors.ts +122 -0
  208. package/src/agent-cli-provider/executable.ts +24 -0
  209. package/src/agent-cli-provider/index.ts +83 -0
  210. package/src/agent-cli-provider/invoke-evidence.ts +18 -0
  211. package/src/agent-cli-provider/json.ts +114 -0
  212. package/src/agent-cli-provider/log-prefix.ts +20 -0
  213. package/src/agent-cli-provider/process-runner.ts +145 -0
  214. package/src/agent-cli-provider/redaction.ts +282 -0
  215. package/src/agent-cli-provider/schema.ts +115 -0
  216. package/src/agent-cli-provider/single-agent-runtime.ts +311 -0
  217. package/src/agent-cli-provider/types.ts +237 -0
  218. package/src/agent-wrapper.js +615 -0
  219. package/src/agents/git-pusher-template.js +705 -0
  220. package/src/attach/attach-client.js +438 -0
  221. package/src/attach/attach-server.js +543 -0
  222. package/src/attach/index.js +37 -0
  223. package/src/attach/protocol.js +220 -0
  224. package/src/attach/ring-buffer.js +121 -0
  225. package/src/attach/send-input.js +88 -0
  226. package/src/attach/socket-discovery.js +267 -0
  227. package/src/claude-task-runner.js +661 -0
  228. package/src/config-router.js +89 -0
  229. package/src/config-validator.js +2202 -0
  230. package/src/copy-worker.js +43 -0
  231. package/src/guidance-topics.js +10 -0
  232. package/src/input-helpers.js +65 -0
  233. package/src/isolation-manager.js +1734 -0
  234. package/src/issue-providers/README.md +305 -0
  235. package/src/issue-providers/azure-devops-provider.js +307 -0
  236. package/src/issue-providers/base-provider.js +232 -0
  237. package/src/issue-providers/github-provider.js +210 -0
  238. package/src/issue-providers/gitlab-provider.js +262 -0
  239. package/src/issue-providers/index.js +196 -0
  240. package/src/issue-providers/jira-provider.js +260 -0
  241. package/src/ledger.js +692 -0
  242. package/src/lib/gc.js +232 -0
  243. package/src/lib/safe-exec.js +88 -0
  244. package/src/logic-engine.js +201 -0
  245. package/src/message-buffer.js +81 -0
  246. package/src/message-bus-bridge.js +144 -0
  247. package/src/message-bus.js +256 -0
  248. package/src/name-generator.js +232 -0
  249. package/src/orchestrator.js +3924 -0
  250. package/src/preflight.js +712 -0
  251. package/src/process-metrics.js +608 -0
  252. package/src/providers/anthropic/index.js +3 -0
  253. package/src/providers/base-provider.js +355 -0
  254. package/src/providers/capabilities.js +60 -0
  255. package/src/providers/google/index.js +3 -0
  256. package/src/providers/index.js +293 -0
  257. package/src/providers/openai/index.js +3 -0
  258. package/src/providers/opencode/index.js +3 -0
  259. package/src/quality-gates.js +143 -0
  260. package/src/schemas/sub-cluster.js +208 -0
  261. package/src/state-snapshot.js +398 -0
  262. package/src/state-snapshotter.js +142 -0
  263. package/src/status-footer.js +1026 -0
  264. package/src/sub-cluster-wrapper.js +693 -0
  265. package/src/task-runner.js +30 -0
  266. package/src/template-resolver.js +425 -0
  267. package/src/template-validation/index.js +338 -0
  268. package/src/template-validation/simulate-consensus-gates.js +324 -0
  269. package/src/template-validation/simulate-random-topology.js +541 -0
  270. package/src/template-validation/simulate-two-stage-validation.js +270 -0
  271. package/src/worktree-claude-config.js +135 -0
  272. package/src/worktree-tooling-env.js +150 -0
  273. package/task-lib/attachable-watcher.js +381 -0
  274. package/task-lib/commands/clean.js +50 -0
  275. package/task-lib/commands/episodes.js +105 -0
  276. package/task-lib/commands/get-log-path.js +23 -0
  277. package/task-lib/commands/kill.js +32 -0
  278. package/task-lib/commands/list.js +105 -0
  279. package/task-lib/commands/logs.js +439 -0
  280. package/task-lib/commands/resume.js +42 -0
  281. package/task-lib/commands/run.js +57 -0
  282. package/task-lib/commands/schedule.js +105 -0
  283. package/task-lib/commands/scheduler-cmd.js +96 -0
  284. package/task-lib/commands/schedules.js +148 -0
  285. package/task-lib/commands/status.js +44 -0
  286. package/task-lib/commands/unschedule.js +16 -0
  287. package/task-lib/completion.js +9 -0
  288. package/task-lib/config.js +11 -0
  289. package/task-lib/name-generator.js +230 -0
  290. package/task-lib/package.json +3 -0
  291. package/task-lib/provider-helper-runtime.js +29 -0
  292. package/task-lib/runner.js +190 -0
  293. package/task-lib/scheduler.js +252 -0
  294. package/task-lib/store.js +529 -0
  295. package/task-lib/watcher.js +305 -0
@@ -0,0 +1,96 @@
1
+ import chalk from 'chalk';
2
+ import { fork } from 'child_process';
3
+ import { join, dirname } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { getDaemonStatus, stopDaemon } from '../scheduler.js';
6
+ import { SCHEDULER_LOG } from '../config.js';
7
+ import { existsSync, readFileSync } from 'fs';
8
+
9
+ const __dirname = dirname(fileURLToPath(import.meta.url));
10
+
11
+ export function schedulerCommand(action) {
12
+ switch (action) {
13
+ case 'start':
14
+ startScheduler();
15
+ break;
16
+ case 'stop':
17
+ stopScheduler();
18
+ break;
19
+ case 'status':
20
+ showStatus();
21
+ break;
22
+ case 'logs':
23
+ showLogs();
24
+ break;
25
+ default:
26
+ console.log(chalk.red(`Unknown action: ${action}`));
27
+ console.log(chalk.dim('Available actions: start, stop, status, logs'));
28
+ process.exit(1);
29
+ }
30
+ }
31
+
32
+ function startScheduler() {
33
+ const status = getDaemonStatus();
34
+
35
+ if (status.running) {
36
+ console.log(chalk.yellow(`Scheduler already running (PID: ${status.pid})`));
37
+ return;
38
+ }
39
+
40
+ if (status.stale) {
41
+ console.log(chalk.dim('Cleaning up stale PID file...'));
42
+ }
43
+
44
+ console.log(chalk.dim('Starting scheduler daemon...'));
45
+
46
+ const scheduler = fork(join(__dirname, '..', 'scheduler.js'), [], {
47
+ detached: true,
48
+ stdio: 'ignore',
49
+ });
50
+ scheduler.unref();
51
+
52
+ // Give it a moment to start
53
+ setTimeout(() => {
54
+ const newStatus = getDaemonStatus();
55
+ if (newStatus.running) {
56
+ console.log(chalk.green(`✓ Scheduler started (PID: ${newStatus.pid})`));
57
+ } else {
58
+ console.log(chalk.red('Failed to start scheduler. Check logs:'));
59
+ console.log(chalk.dim(` zeroshot scheduler logs`));
60
+ }
61
+ }, 500);
62
+ }
63
+
64
+ function stopScheduler() {
65
+ const stopped = stopDaemon();
66
+ if (!stopped) {
67
+ process.exit(1);
68
+ }
69
+ }
70
+
71
+ function showStatus() {
72
+ const status = getDaemonStatus();
73
+
74
+ if (status.running) {
75
+ console.log(chalk.green(`Scheduler: running`));
76
+ console.log(chalk.dim(` PID: ${status.pid}`));
77
+ console.log(chalk.dim(` Log: ${SCHEDULER_LOG}`));
78
+ } else if (status.stale) {
79
+ console.log(chalk.yellow('Scheduler: not running (stale PID file)'));
80
+ console.log(chalk.dim(' Run: zeroshot scheduler start'));
81
+ } else {
82
+ console.log(chalk.red('Scheduler: not running'));
83
+ console.log(chalk.dim(' Run: zeroshot scheduler start'));
84
+ }
85
+ }
86
+
87
+ function showLogs() {
88
+ if (!existsSync(SCHEDULER_LOG)) {
89
+ console.log(chalk.dim('No scheduler logs found.'));
90
+ return;
91
+ }
92
+
93
+ const content = readFileSync(SCHEDULER_LOG, 'utf-8');
94
+ const lines = content.split('\n').slice(-50); // Last 50 lines
95
+ console.log(lines.join('\n'));
96
+ }
@@ -0,0 +1,148 @@
1
+ import chalk from 'chalk';
2
+ import { loadSchedules } from '../store.js';
3
+ import { getDaemonStatus } from '../scheduler.js';
4
+
5
+ export function listSchedules(_options = {}) {
6
+ const schedules = loadSchedules();
7
+ const scheduleList = Object.values(schedules);
8
+
9
+ // Check daemon status
10
+ const daemonStatus = getDaemonStatus();
11
+
12
+ if (scheduleList.length === 0) {
13
+ printNoSchedules();
14
+ return;
15
+ }
16
+
17
+ printDaemonStatus(daemonStatus);
18
+
19
+ // Sort by next run time
20
+ sortSchedulesByNextRun(scheduleList);
21
+
22
+ printScheduleHeader();
23
+
24
+ for (const schedule of scheduleList) {
25
+ printSchedule(schedule);
26
+ }
27
+
28
+ console.log(chalk.dim(`Total: ${scheduleList.length} schedule(s)`));
29
+ }
30
+
31
+ function printNoSchedules() {
32
+ console.log(chalk.dim('No schedules found.'));
33
+ console.log(chalk.dim('\nCreate a schedule:'));
34
+ console.log(chalk.dim(' zeroshot schedule "your prompt" --every 1h'));
35
+ console.log(chalk.dim(' zeroshot schedule "your prompt" --cron "0 * * * *"'));
36
+ }
37
+
38
+ function printDaemonStatus(daemonStatus) {
39
+ if (daemonStatus.running) {
40
+ console.log(chalk.green(`Scheduler: running (PID: ${daemonStatus.pid})`));
41
+ } else if (daemonStatus.stale) {
42
+ console.log(chalk.yellow('Scheduler: not running (stale PID file)'));
43
+ } else {
44
+ console.log(chalk.red('Scheduler: not running'));
45
+ console.log(chalk.dim(' Run: zeroshot scheduler start'));
46
+ }
47
+ console.log();
48
+ }
49
+
50
+ function sortSchedulesByNextRun(scheduleList) {
51
+ scheduleList.sort((a, b) => {
52
+ if (!a.nextRunAt) return 1;
53
+ if (!b.nextRunAt) return -1;
54
+ return new Date(a.nextRunAt) - new Date(b.nextRunAt);
55
+ });
56
+ }
57
+
58
+ function printScheduleHeader() {
59
+ console.log(chalk.bold('Scheduled Tasks:'));
60
+ console.log();
61
+ }
62
+
63
+ function printSchedule(schedule) {
64
+ printScheduleHeaderLine(schedule);
65
+ printSchedulePrompt(schedule);
66
+ printScheduleInterval(schedule);
67
+ printScheduleCron(schedule);
68
+ printScheduleNextRun(schedule);
69
+ printScheduleLastRun(schedule);
70
+ printScheduleVerify(schedule);
71
+ console.log();
72
+ }
73
+
74
+ function printScheduleHeaderLine(schedule) {
75
+ const statusColor = schedule.enabled ? chalk.green : chalk.red;
76
+ const statusText = schedule.enabled ? '●' : '○';
77
+ console.log(`${statusColor(statusText)} ${chalk.cyan(schedule.id)}`);
78
+ }
79
+
80
+ function printSchedulePrompt(schedule) {
81
+ console.log(chalk.dim(` Prompt: ${schedule.prompt}`));
82
+ }
83
+
84
+ function printScheduleInterval(schedule) {
85
+ if (!schedule.interval) {
86
+ return;
87
+ }
88
+ const human = formatInterval(schedule.interval);
89
+ console.log(chalk.dim(` Interval: every ${human}`));
90
+ }
91
+
92
+ function printScheduleCron(schedule) {
93
+ if (schedule.cron) {
94
+ console.log(chalk.dim(` Cron: ${schedule.cron}`));
95
+ }
96
+ }
97
+
98
+ function printScheduleNextRun(schedule) {
99
+ if (!schedule.nextRunAt) {
100
+ return;
101
+ }
102
+ const nextRun = new Date(schedule.nextRunAt);
103
+ const timeUntil = formatTimeUntil(nextRun);
104
+ console.log(chalk.dim(` Next run: ${nextRun.toISOString()} (${timeUntil})`));
105
+ }
106
+
107
+ function printScheduleLastRun(schedule) {
108
+ if (!schedule.lastRunAt) {
109
+ return;
110
+ }
111
+ console.log(chalk.dim(` Last run: ${schedule.lastRunAt}`));
112
+ if (schedule.lastTaskId) {
113
+ console.log(chalk.dim(` Last task: ${schedule.lastTaskId}`));
114
+ }
115
+ }
116
+
117
+ function printScheduleVerify(schedule) {
118
+ if (schedule.verify) {
119
+ console.log(chalk.dim(` Verify: enabled`));
120
+ }
121
+ }
122
+
123
+ function formatInterval(ms) {
124
+ if (ms >= 7 * 24 * 60 * 60 * 1000) return `${ms / (7 * 24 * 60 * 60 * 1000)}w`;
125
+ if (ms >= 24 * 60 * 60 * 1000) return `${ms / (24 * 60 * 60 * 1000)}d`;
126
+ if (ms >= 60 * 60 * 1000) return `${ms / (60 * 60 * 1000)}h`;
127
+ if (ms >= 60 * 1000) return `${ms / (60 * 1000)}m`;
128
+ return `${ms / 1000}s`;
129
+ }
130
+
131
+ function formatTimeUntil(nextRun) {
132
+ const now = new Date();
133
+ const diff = nextRun - now;
134
+
135
+ if (diff < 0) {
136
+ return 'overdue';
137
+ }
138
+ if (diff < 60000) {
139
+ return 'in < 1m';
140
+ }
141
+ if (diff < 3600000) {
142
+ return `in ${Math.round(diff / 60000)}m`;
143
+ }
144
+ if (diff < 86400000) {
145
+ return `in ${Math.round(diff / 3600000)}h`;
146
+ }
147
+ return `in ${Math.round(diff / 86400000)}d`;
148
+ }
@@ -0,0 +1,44 @@
1
+ import chalk from 'chalk';
2
+ import { getTask } from '../store.js';
3
+ import { isProcessRunning } from '../runner.js';
4
+
5
+ export function showStatus(taskId) {
6
+ const task = getTask(taskId);
7
+
8
+ if (!task) {
9
+ console.log(chalk.red(`Task not found: ${taskId}`));
10
+ process.exit(1);
11
+ }
12
+
13
+ // Verify running status
14
+ let status = task.status;
15
+ if (status === 'running' && !isProcessRunning(task.pid)) {
16
+ status = 'stale (process died)';
17
+ }
18
+
19
+ const statusColor =
20
+ {
21
+ running: chalk.green,
22
+ completed: chalk.green,
23
+ failed: chalk.red,
24
+ }[task.status] || chalk.yellow;
25
+
26
+ console.log(chalk.bold(`\nTask: ${task.id}\n`));
27
+ console.log(`${chalk.dim('Status:')} ${statusColor(status)}`);
28
+ console.log(`${chalk.dim('Created:')} ${task.createdAt}`);
29
+ console.log(`${chalk.dim('Updated:')} ${task.updatedAt}`);
30
+ console.log(`${chalk.dim('CWD:')} ${task.cwd}`);
31
+ console.log(`${chalk.dim('PID:')} ${task.pid || 'N/A'}`);
32
+ console.log(`${chalk.dim('Exit Code:')} ${task.exitCode ?? 'N/A'}`);
33
+ console.log(`${chalk.dim('Session:')} ${task.sessionId || 'N/A'}`);
34
+ console.log(`${chalk.dim('Log File:')} ${task.logFile}`);
35
+
36
+ console.log(`\n${chalk.dim('Prompt:')}`);
37
+ console.log(task.fullPrompt || task.prompt);
38
+
39
+ if (task.error) {
40
+ console.log(`\n${chalk.red('Error:')} ${task.error}`);
41
+ }
42
+
43
+ console.log();
44
+ }
@@ -0,0 +1,16 @@
1
+ import chalk from 'chalk';
2
+ import { getSchedule, removeSchedule } from '../store.js';
3
+
4
+ export function deleteSchedule(scheduleId) {
5
+ const schedule = getSchedule(scheduleId);
6
+
7
+ if (!schedule) {
8
+ console.log(chalk.red(`Schedule not found: ${scheduleId}`));
9
+ process.exit(1);
10
+ }
11
+
12
+ removeSchedule(scheduleId);
13
+
14
+ console.log(chalk.green(`✓ Schedule removed: ${chalk.cyan(scheduleId)}`));
15
+ console.log(chalk.dim(` Prompt: ${schedule.prompt}`));
16
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shell completion setup for ct
3
+ * Placeholder - completion not yet implemented
4
+ */
5
+
6
+ export function setupCompletion() {
7
+ // TODO: Implement shell completion
8
+ // For now, this is a no-op
9
+ }
@@ -0,0 +1,11 @@
1
+ import { join } from 'path';
2
+ import { homedir } from 'os';
3
+
4
+ const HOME_DIR =
5
+ process.env.ZEROSHOT_HOME || process.env.HOME || process.env.USERPROFILE || homedir();
6
+
7
+ export const TASKS_DIR = join(HOME_DIR, '.claude-zeroshot');
8
+ export const LOGS_DIR = join(TASKS_DIR, 'logs');
9
+ export const SCHEDULER_PID_FILE = join(TASKS_DIR, 'scheduler.pid');
10
+ export const SCHEDULER_LOG = join(TASKS_DIR, 'scheduler.log');
11
+ export const DEFAULT_MODEL = 'sonnet';
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Human-readable name generator (like Weights & Biases)
3
+ * Generates names like "wandering-forest-42" or "bright-star-17"
4
+ *
5
+ * No prefix - short forms used everywhere for simplicity
6
+ */
7
+
8
+ const ADJECTIVES = [
9
+ // Colors
10
+ 'amber',
11
+ 'azure',
12
+ 'crimson',
13
+ 'emerald',
14
+ 'golden',
15
+ 'indigo',
16
+ 'jade',
17
+ 'ruby',
18
+ 'sapphire',
19
+ 'silver',
20
+ 'violet',
21
+ 'bronze',
22
+ 'coral',
23
+ 'ivory',
24
+ 'pearl',
25
+ 'platinum',
26
+ 'scarlet',
27
+ 'cobalt',
28
+ 'copper',
29
+ 'obsidian',
30
+ 'onyx',
31
+ 'opal',
32
+ 'topaz',
33
+ 'turquoise',
34
+ // Nature
35
+ 'wandering',
36
+ 'bright',
37
+ 'silent',
38
+ 'ancient',
39
+ 'swift',
40
+ 'noble',
41
+ 'bold',
42
+ 'wild',
43
+ 'gentle',
44
+ 'hidden',
45
+ 'fierce',
46
+ 'calm',
47
+ 'frozen',
48
+ 'misty',
49
+ 'stormy',
50
+ 'sunny',
51
+ // Cosmic
52
+ 'cosmic',
53
+ 'crystal',
54
+ 'electric',
55
+ 'lunar',
56
+ 'solar',
57
+ 'stellar',
58
+ 'astral',
59
+ 'orbital',
60
+ 'mystic',
61
+ 'quantum',
62
+ 'radiant',
63
+ 'twilight',
64
+ 'vivid',
65
+ 'zen',
66
+ 'infinite',
67
+ 'eternal',
68
+ // Tech/Abstract
69
+ 'clever',
70
+ 'rapid',
71
+ 'steady',
72
+ 'agile',
73
+ 'nimble',
74
+ 'keen',
75
+ 'sharp',
76
+ 'quick',
77
+ 'prime',
78
+ 'binary',
79
+ 'neural',
80
+ 'atomic',
81
+ 'sonic',
82
+ 'hyper',
83
+ 'mega',
84
+ 'ultra',
85
+ // Descriptive
86
+ 'blazing',
87
+ 'gleaming',
88
+ 'glowing',
89
+ 'shining',
90
+ 'burning',
91
+ 'flaming',
92
+ 'sparkling',
93
+ 'dazzling',
94
+ 'roaring',
95
+ 'rushing',
96
+ 'soaring',
97
+ 'flying',
98
+ 'rising',
99
+ 'falling',
100
+ 'spinning',
101
+ 'dancing',
102
+ ];
103
+
104
+ const NOUNS = [
105
+ // Nature
106
+ 'forest',
107
+ 'river',
108
+ 'mountain',
109
+ 'ocean',
110
+ 'thunder',
111
+ 'canyon',
112
+ 'summit',
113
+ 'valley',
114
+ 'cascade',
115
+ 'glacier',
116
+ 'volcano',
117
+ 'desert',
118
+ 'meadow',
119
+ 'tundra',
120
+ 'jungle',
121
+ 'reef',
122
+ // Space
123
+ 'star',
124
+ 'comet',
125
+ 'nebula',
126
+ 'galaxy',
127
+ 'pulsar',
128
+ 'quasar',
129
+ 'aurora',
130
+ 'eclipse',
131
+ 'meteor',
132
+ 'nova',
133
+ 'cosmos',
134
+ 'orbit',
135
+ 'void',
136
+ 'horizon',
137
+ 'zenith',
138
+ 'equinox',
139
+ // Mythical
140
+ 'phoenix',
141
+ 'dragon',
142
+ 'griffin',
143
+ 'sphinx',
144
+ 'hydra',
145
+ 'kraken',
146
+ 'titan',
147
+ 'atlas',
148
+ 'oracle',
149
+ 'rune',
150
+ 'sigil',
151
+ 'glyph',
152
+ 'totem',
153
+ 'aegis',
154
+ 'aether',
155
+ 'flux',
156
+ // Animals
157
+ 'falcon',
158
+ 'eagle',
159
+ 'wolf',
160
+ 'bear',
161
+ 'tiger',
162
+ 'hawk',
163
+ 'lion',
164
+ 'panther',
165
+ 'raven',
166
+ 'serpent',
167
+ 'shark',
168
+ 'owl',
169
+ 'fox',
170
+ 'lynx',
171
+ 'viper',
172
+ 'condor',
173
+ // Architecture
174
+ 'citadel',
175
+ 'temple',
176
+ 'spire',
177
+ 'tower',
178
+ 'fortress',
179
+ 'bastion',
180
+ 'vault',
181
+ 'sanctum',
182
+ 'beacon',
183
+ 'arch',
184
+ 'bridge',
185
+ 'gate',
186
+ 'hall',
187
+ 'keep',
188
+ 'dome',
189
+ 'obelisk',
190
+ // Abstract
191
+ 'cipher',
192
+ 'echo',
193
+ 'nexus',
194
+ 'prism',
195
+ 'relic',
196
+ 'vertex',
197
+ 'vortex',
198
+ 'pulse',
199
+ 'surge',
200
+ 'spark',
201
+ 'flame',
202
+ 'storm',
203
+ 'wave',
204
+ 'drift',
205
+ 'shift',
206
+ 'core',
207
+ ];
208
+
209
+ // 96 adjectives × 96 nouns × 100 numbers = 921,600 combinations
210
+
211
+ /**
212
+ * Generate a human-readable name
213
+ * @param {string} _prefix - DEPRECATED: Ignored for backwards compat, short form always used
214
+ * @returns {string} Human-readable name (e.g., 'wandering-forest-42')
215
+ */
216
+ export function generateName(_prefix = '') {
217
+ const adjective = ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)];
218
+ const noun = NOUNS[Math.floor(Math.random() * NOUNS.length)];
219
+ const number = Math.floor(Math.random() * 100);
220
+
221
+ return `${adjective}-${noun}-${number}`;
222
+ }
223
+
224
+ /**
225
+ * Generate a short unique suffix (for collision prevention)
226
+ * @returns {string} Short random suffix (e.g., 'a3f9')
227
+ */
228
+ export function generateSuffix() {
229
+ return Math.random().toString(36).slice(2, 6);
230
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -0,0 +1,29 @@
1
+ import { createRequire } from 'module';
2
+
3
+ const require = createRequire(import.meta.url);
4
+
5
+ let helper;
6
+ try {
7
+ helper = require('../lib/agent-cli-provider');
8
+ } catch (error) {
9
+ const message = error instanceof Error ? error.message : String(error);
10
+ throw new Error(
11
+ `Provider helper build missing. Run npm run build:agent-cli-provider. ${message}`
12
+ );
13
+ }
14
+
15
+ export const {
16
+ NO_MESSAGES_RETURNED,
17
+ STREAMING_MODE_ERROR,
18
+ buildProviderCommand,
19
+ classifyProviderError,
20
+ detectProviderFatalError,
21
+ detectProviderStreamingModeError,
22
+ getProviderAdapter,
23
+ listProviderAdapters,
24
+ parseProviderChunk,
25
+ prepareSingleAgentProviderCommand,
26
+ recoverProviderStructuredOutput,
27
+ resolveModelSpec,
28
+ supportsProviderStructuredOutputRecovery,
29
+ } = helper;