@codetreker/daynight 0.37.2 → 0.39.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 (98) hide show
  1. package/README.md +207 -60
  2. package/dist/api/client.d.ts +8 -3
  3. package/dist/api/client.js +25 -3
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/index.d.ts +1 -0
  6. package/dist/api/index.js +1 -0
  7. package/dist/api/index.js.map +1 -1
  8. package/dist/api/parse.d.ts +2 -2
  9. package/dist/api/parse.js +30 -24
  10. package/dist/api/parse.js.map +1 -1
  11. package/dist/api/task-steps.d.ts +6 -0
  12. package/dist/api/task-steps.js +48 -0
  13. package/dist/api/task-steps.js.map +1 -0
  14. package/dist/api/types.d.ts +29 -9
  15. package/dist/cli/application.js +6 -0
  16. package/dist/cli/application.js.map +1 -1
  17. package/dist/commands/cleanup-operation.d.ts +3 -0
  18. package/dist/commands/cleanup-operation.js +12 -0
  19. package/dist/commands/cleanup-operation.js.map +1 -0
  20. package/dist/commands/controller/provider-display.d.ts +2 -0
  21. package/dist/commands/controller/provider-display.js +63 -0
  22. package/dist/commands/controller/provider-display.js.map +1 -0
  23. package/dist/commands/controller/runtime.js +4 -2
  24. package/dist/commands/controller/runtime.js.map +1 -1
  25. package/dist/commands/skill/skills/using-daynight/SKILL.md +1 -1
  26. package/dist/commands/skill/skills/using-daynight/references/authorization.md +1 -1
  27. package/dist/commands/skill/skills/using-daynight/references/autopilot-managed-task.md +4 -3
  28. package/dist/commands/skill/skills/using-daynight/references/handoff.md +25 -15
  29. package/dist/commands/skill/skills/using-daynight/references/task-management.md +1 -1
  30. package/dist/commands/skill/usage.md +43 -5
  31. package/dist/commands/task/command.js +8 -1
  32. package/dist/commands/task/command.js.map +1 -1
  33. package/dist/commands/task/definition.js +23 -1
  34. package/dist/commands/task/definition.js.map +1 -1
  35. package/dist/commands/task/step-diagnostics.d.ts +6 -0
  36. package/dist/commands/task/step-diagnostics.js +63 -0
  37. package/dist/commands/task/step-diagnostics.js.map +1 -0
  38. package/dist/commands/task/step-rendering.d.ts +5 -0
  39. package/dist/commands/task/step-rendering.js +40 -0
  40. package/dist/commands/task/step-rendering.js.map +1 -0
  41. package/dist/commands/task/step.d.ts +8 -0
  42. package/dist/commands/task/step.js +49 -0
  43. package/dist/commands/task/step.js.map +1 -0
  44. package/dist/commands/worker/backends/grant-renewal.js +1 -1
  45. package/dist/commands/worker/backends/grant-renewal.js.map +1 -1
  46. package/dist/commands/worker/backends/session-api.d.ts +1 -1
  47. package/dist/commands/worker/backends/session-api.js +4 -4
  48. package/dist/commands/worker/backends/session-api.js.map +1 -1
  49. package/dist/commands/worker/backends/sqlite/002-resource-observations.sql +6 -0
  50. package/dist/commands/worker/backends/web-process.js +13 -3
  51. package/dist/commands/worker/backends/web-process.js.map +1 -1
  52. package/dist/commands/worker/backends/web-record.js +2 -18
  53. package/dist/commands/worker/backends/web-record.js.map +1 -1
  54. package/dist/commands/worker/backends/web-store.d.ts +4 -13
  55. package/dist/commands/worker/backends/web-store.js +44 -52
  56. package/dist/commands/worker/backends/web-store.js.map +1 -1
  57. package/dist/commands/worker/backends/web-types.d.ts +0 -13
  58. package/dist/commands/worker/backends/web-types.js +0 -1
  59. package/dist/commands/worker/backends/web-types.js.map +1 -1
  60. package/dist/commands/worker/backends/web.d.ts +5 -1
  61. package/dist/commands/worker/backends/web.js +279 -127
  62. package/dist/commands/worker/backends/web.js.map +1 -1
  63. package/dist/commands/worker/cleanup-error.d.ts +5 -0
  64. package/dist/commands/worker/cleanup-error.js +9 -0
  65. package/dist/commands/worker/cleanup-error.js.map +1 -0
  66. package/dist/commands/worker/cleanup-schedule.d.ts +3 -0
  67. package/dist/commands/worker/cleanup-schedule.js +11 -0
  68. package/dist/commands/worker/cleanup-schedule.js.map +1 -0
  69. package/dist/commands/worker/cleanup.d.ts +1 -3
  70. package/dist/commands/worker/cleanup.js +56 -43
  71. package/dist/commands/worker/cleanup.js.map +1 -1
  72. package/dist/commands/worker/coordinator.js +241 -97
  73. package/dist/commands/worker/coordinator.js.map +1 -1
  74. package/dist/commands/worker/execution.d.ts +1 -1
  75. package/dist/commands/worker/execution.js +2 -2
  76. package/dist/commands/worker/execution.js.map +1 -1
  77. package/dist/commands/worker/prompts.js +2 -2
  78. package/dist/commands/worker/prompts.js.map +1 -1
  79. package/dist/commands/worker/runtime.js +1 -1
  80. package/dist/commands/worker/runtime.js.map +1 -1
  81. package/dist/commands/worker/sqlite/006-cleanup-schedules.sql +14 -0
  82. package/dist/commands/worker/sqlite/007-resource-cleanup-intent.sql +2 -0
  83. package/dist/commands/worker/store.d.ts +5 -1
  84. package/dist/commands/worker/store.js +41 -0
  85. package/dist/commands/worker/store.js.map +1 -1
  86. package/dist/commands/worker/types.d.ts +8 -0
  87. package/dist/commands/worker/worktrees.d.ts +1 -0
  88. package/dist/commands/worker/worktrees.js +88 -34
  89. package/dist/commands/worker/worktrees.js.map +1 -1
  90. package/dist/repository/context.js +2 -3
  91. package/dist/repository/context.js.map +1 -1
  92. package/dist/repository/discovery-error.d.ts +5 -0
  93. package/dist/repository/discovery-error.js +18 -0
  94. package/dist/repository/discovery-error.js.map +1 -0
  95. package/dist/repository/index.d.ts +1 -0
  96. package/dist/repository/index.js +1 -0
  97. package/dist/repository/index.js.map +1 -1
  98. package/package.json +2 -2
@@ -1,53 +1,66 @@
1
1
  import path from "node:path";
2
- import { actualTaskPane, executionContext, liveAgent, settleWorkerStops, workerOperation } from "./execution.js";
2
+ import { setTimeout as delay } from "node:timers/promises";
3
+ import { CLEANUP_OPERATION_MS, cleanupOperation } from "../cleanup-operation.js";
4
+ import { ensureCleanupSchedule } from "./cleanup-schedule.js";
5
+ import { WorkerCleanupError } from "./cleanup-error.js";
6
+ import { actualTaskPane, executionContext, liveAgent, settleWorkerStops } from "./execution.js";
3
7
  import { workerCleanupPrompt } from "./prompts.js";
4
- const key = (owner) => `${owner.projectId}/${owner.taskId}/${owner.claimId}`;
5
- export const createCleanupDriver = (deps) => {
6
- const attempts = new Map();
7
- return {
8
- advance: async (input, resources, deleteWorktree, signal) => {
9
- const identity = key(input.owner);
10
- let attempt = attempts.get(identity);
11
- if (attempt === undefined) {
12
- attempt = { deadline: deps.now() + 600_000, notified: false, submitted: false };
13
- attempts.set(identity, attempt);
14
- deps.emit({ kind: "cleanup-started", ...(input.task === undefined ? {} : { task: input.task }), message: `Cleaning claim ${input.owner.claimId}; this attempt has a ten-minute deadline.` });
15
- }
8
+ export const createCleanupDriver = (deps) => ({
9
+ advance: async (input, deleteWorktree, signal) => {
10
+ const deadline = deleteWorktree ? ensureCleanupSchedule(deps.store, input.owner, deps.now()).deadline : deps.now() + 600_000;
11
+ let stage = "agent-stop";
12
+ try {
16
13
  const stopContext = { ...input.owner, cwd: path.join(input.project.localPath, ".worktrees", "daynight", input.owner.taskId) };
17
- const stopped = await settleWorkerStops(deps, input.owner, signal);
18
- const pane = stopped ? undefined : actualTaskPane(input.owner, resources);
14
+ await settleWorkerStops(deps, input.owner, signal, cleanupOperation);
15
+ const observe = async () => actualTaskPane(input.owner, await cleanupOperation(operation => deps.herdr.tasks.listResources(operation), signal));
16
+ let pane = await observe();
19
17
  if (pane !== undefined) {
20
18
  const agent = input.task?.agent ?? pane.kind ?? pane.nativeSession?.agent;
21
- if (agent === undefined) {
22
- await workerOperation((operation) => deps.herdr.tasks.stopAndClose(stopContext, pane.binding, operation), signal);
23
- }
24
- else {
19
+ if (agent !== undefined && liveAgent(pane) && deps.now() < deadline) {
25
20
  const context = executionContext({ ...input, task: { agent } });
26
- if (liveAgent(pane) && !attempt.notified && deps.now() < attempt.deadline) {
27
- attempt.notified = true;
28
- try {
29
- await workerOperation((operation) => deps.herdr.tasks.submitPrompt(context, pane.binding, workerCleanupPrompt(input.owner, attempt.deadline), operation), signal, Math.max(1, Math.min(30_000, attempt.deadline - deps.now())));
30
- attempt.submitted = true;
31
- }
32
- catch (error) {
33
- deps.emit({ kind: "cleanup-notification-error", ...(input.task === undefined ? {} : { task: input.task }), message: "Cleanup notification failed; the current bounded cleanup attempt continues.", error });
34
- }
35
- if (deps.now() < attempt.deadline)
36
- return false;
21
+ deps.emit({ kind: "cleanup-started", ...(input.task === undefined ? {} : { task: input.task }), message: `Cleaning claim ${input.owner.claimId}; observing its resources until ${new Date(deadline).toISOString()}.` });
22
+ // Herdr has no per-input operation lookup. The notification is advisory;
23
+ // a restarted attempt observes resources again and may notify the surviving agent.
24
+ try {
25
+ await cleanupOperation(operation => deps.herdr.tasks.submitPrompt(context, pane.binding, workerCleanupPrompt(input.owner, deadline), operation), signal, Math.max(1, Math.min(CLEANUP_OPERATION_MS, deadline - deps.now())));
26
+ }
27
+ catch (error) {
28
+ signal?.throwIfAborted();
29
+ deps.emit({ kind: "cleanup-notification-error", ...(input.task === undefined ? {} : { task: input.task }), message: "Cleanup notification failed; actual resources will still be observed and stopped.", error });
30
+ }
31
+ while (true) {
32
+ if (deps.now() < deadline)
33
+ await delay(Math.max(1, Math.min(1000, deadline - deps.now())), undefined, signal === undefined ? {} : { signal });
34
+ pane = await observe();
35
+ if (pane === undefined || !liveAgent(pane) || pane.status === "idle" || deps.now() >= deadline)
36
+ break;
37
37
  }
38
- const completed = attempt.submitted && pane.status === "idle";
39
- if (liveAgent(pane) && !completed && deps.now() < attempt.deadline)
40
- return false;
41
- await workerOperation((operation) => deps.herdr.tasks.stopAndClose(context, pane.binding, operation), signal);
42
38
  }
39
+ if (pane !== undefined) {
40
+ try {
41
+ await cleanupOperation(operation => deps.herdr.tasks.stopAndClose(stopContext, pane.binding, operation), signal);
42
+ }
43
+ catch (error) {
44
+ signal?.throwIfAborted();
45
+ if (await observe() !== undefined)
46
+ throw error;
47
+ }
48
+ }
49
+ }
50
+ await settleWorkerStops(deps, input.owner, signal, cleanupOperation);
51
+ if (await observe() !== undefined)
52
+ throw new Error("The original task pane still exists after cleanup.");
53
+ stage = "worktree-removal";
54
+ if (deleteWorktree) {
55
+ await cleanupOperation(operation => deps.git.removeWorktree(input.project, input.owner, operation), signal);
56
+ if (await cleanupOperation(operation => deps.git.findWorktree(input.project, input.owner, operation), signal) !== null)
57
+ throw new Error("The original task worktree resources still exist after cleanup.");
43
58
  }
44
- if (deleteWorktree)
45
- await workerOperation((operation) => deps.git.removeWorktree(input.project, input.owner, operation), signal, 180_000);
46
- attempts.delete(identity);
47
- deps.emit({ kind: deleteWorktree ? "cleaned" : "agent-stopped", ...(input.task === undefined ? {} : { task: input.task }), message: deleteWorktree ? "Stopped the task resources and deleted its worktree; the branch remains." : "Stopped the task resources and preserved its worktree." });
48
- return true;
49
- },
50
- remaining: (owner) => Math.max(0, (attempts.get(key(owner))?.deadline ?? deps.now()) - deps.now()),
51
- };
52
- };
59
+ deps.emit({ kind: deleteWorktree ? "cleaned" : "agent-stopped", ...(input.task === undefined ? {} : { task: input.task }), message: deleteWorktree ? "Confirmed task resources absent; the branch remains." : "Confirmed task execution stopped and closed; its worktree remains." });
60
+ }
61
+ catch (error) {
62
+ throw new WorkerCleanupError(stage, error);
63
+ }
64
+ },
65
+ });
53
66
  //# sourceMappingURL=cleanup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/commands/worker/cleanup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/commands/worker/cleanup.ts"],"names":[],"mappings":"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"}