@caupulican/pi-adaptative 0.90.0 → 0.90.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/core/agent-session-contracts.d.ts +2 -0
  3. package/dist/core/agent-session-contracts.d.ts.map +1 -1
  4. package/dist/core/agent-session-contracts.js.map +1 -1
  5. package/dist/core/agent-session.d.ts.map +1 -1
  6. package/dist/core/agent-session.js +5 -1
  7. package/dist/core/agent-session.js.map +1 -1
  8. package/dist/core/autonomy/bounded-completion.d.ts +10 -1
  9. package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
  10. package/dist/core/autonomy/bounded-completion.js +24 -2
  11. package/dist/core/autonomy/bounded-completion.js.map +1 -1
  12. package/dist/core/autonomy/lane-tracker.d.ts +1 -1
  13. package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
  14. package/dist/core/autonomy/lane-tracker.js +9 -1
  15. package/dist/core/autonomy/lane-tracker.js.map +1 -1
  16. package/dist/core/background-lane-controller.d.ts +1 -3
  17. package/dist/core/background-lane-controller.d.ts.map +1 -1
  18. package/dist/core/background-lane-controller.js.map +1 -1
  19. package/dist/core/compaction-controller.d.ts.map +1 -1
  20. package/dist/core/compaction-controller.js +0 -1
  21. package/dist/core/compaction-controller.js.map +1 -1
  22. package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -1
  23. package/dist/core/delegation/managed-lane-controller.js +5 -1
  24. package/dist/core/delegation/managed-lane-controller.js.map +1 -1
  25. package/dist/core/delegation/worker-agent-control-coordinator.d.ts +8 -1
  26. package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
  27. package/dist/core/delegation/worker-agent-control-coordinator.js +94 -36
  28. package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
  29. package/dist/core/delegation/worker-agent-control.d.ts +1 -0
  30. package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
  31. package/dist/core/delegation/worker-agent-control.js.map +1 -1
  32. package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
  33. package/dist/core/delegation/worker-attempt-executor.js +7 -2
  34. package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
  35. package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -1
  36. package/dist/core/delegation/worker-authority-resolver.js +26 -3
  37. package/dist/core/delegation/worker-authority-resolver.js.map +1 -1
  38. package/dist/core/delegation/worker-delegation-controller.d.ts +7 -4
  39. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  40. package/dist/core/delegation/worker-delegation-controller.js +110 -27
  41. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  42. package/dist/core/delegation/worker-fleet-limits.d.ts +9 -2
  43. package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
  44. package/dist/core/delegation/worker-fleet-limits.js +39 -3
  45. package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
  46. package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -1
  47. package/dist/core/delegation/worker-lane-projection.js +4 -0
  48. package/dist/core/delegation/worker-lane-projection.js.map +1 -1
  49. package/dist/core/delegation/worker-lease-heartbeat.d.ts +16 -0
  50. package/dist/core/delegation/worker-lease-heartbeat.d.ts.map +1 -0
  51. package/dist/core/delegation/worker-lease-heartbeat.js +37 -0
  52. package/dist/core/delegation/worker-lease-heartbeat.js.map +1 -0
  53. package/dist/core/delegation/worker-lifecycle.d.ts +1 -0
  54. package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
  55. package/dist/core/delegation/worker-lifecycle.js +6 -0
  56. package/dist/core/delegation/worker-lifecycle.js.map +1 -1
  57. package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
  58. package/dist/core/delegation/worker-notification-coordinator.js +2 -1
  59. package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
  60. package/dist/core/delegation/worker-runner.js +2 -2
  61. package/dist/core/delegation/worker-runner.js.map +1 -1
  62. package/dist/core/delegation/worker-terminal-handoff-coordinator.d.ts +1 -0
  63. package/dist/core/delegation/worker-terminal-handoff-coordinator.d.ts.map +1 -1
  64. package/dist/core/delegation/worker-terminal-handoff-coordinator.js +1 -0
  65. package/dist/core/delegation/worker-terminal-handoff-coordinator.js.map +1 -1
  66. package/dist/core/delegation/worker-tree-budget-coordinator.d.ts +4 -2
  67. package/dist/core/delegation/worker-tree-budget-coordinator.d.ts.map +1 -1
  68. package/dist/core/delegation/worker-tree-budget-coordinator.js +10 -2
  69. package/dist/core/delegation/worker-tree-budget-coordinator.js.map +1 -1
  70. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +14 -0
  71. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
  72. package/dist/core/delegation/worker-write-reservation-coordinator.js +121 -33
  73. package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
  74. package/dist/core/foreground-terminal-handoff-controller.d.ts +5 -0
  75. package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
  76. package/dist/core/foreground-terminal-handoff-controller.js +28 -12
  77. package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
  78. package/dist/core/goals/goal-session-controller.d.ts +6 -0
  79. package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
  80. package/dist/core/goals/goal-session-controller.js +16 -13
  81. package/dist/core/goals/goal-session-controller.js.map +1 -1
  82. package/dist/core/orchestration/capability-gateway.d.ts +2 -1
  83. package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
  84. package/dist/core/orchestration/capability-gateway.js +9 -2
  85. package/dist/core/orchestration/capability-gateway.js.map +1 -1
  86. package/dist/core/orchestration/contracts.d.ts +16 -1
  87. package/dist/core/orchestration/contracts.d.ts.map +1 -1
  88. package/dist/core/orchestration/contracts.js +5 -0
  89. package/dist/core/orchestration/contracts.js.map +1 -1
  90. package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
  91. package/dist/core/orchestration/profile-registry.js +38 -1
  92. package/dist/core/orchestration/profile-registry.js.map +1 -1
  93. package/dist/core/orchestration/risk-budget.d.ts +10 -0
  94. package/dist/core/orchestration/risk-budget.d.ts.map +1 -1
  95. package/dist/core/orchestration/risk-budget.js +14 -0
  96. package/dist/core/orchestration/risk-budget.js.map +1 -1
  97. package/dist/core/orchestration/task-runtime-reducer.d.ts +1 -0
  98. package/dist/core/orchestration/task-runtime-reducer.d.ts.map +1 -1
  99. package/dist/core/orchestration/task-runtime-reducer.js +34 -0
  100. package/dist/core/orchestration/task-runtime-reducer.js.map +1 -1
  101. package/dist/core/orchestration/task-runtime.d.ts +1 -0
  102. package/dist/core/orchestration/task-runtime.d.ts.map +1 -1
  103. package/dist/core/orchestration/task-runtime.js +24 -1
  104. package/dist/core/orchestration/task-runtime.js.map +1 -1
  105. package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
  106. package/dist/core/provider-prompt-contracts.js +2 -1
  107. package/dist/core/provider-prompt-contracts.js.map +1 -1
  108. package/dist/core/reflection-controller.d.ts.map +1 -1
  109. package/dist/core/reflection-controller.js +8 -1
  110. package/dist/core/reflection-controller.js.map +1 -1
  111. package/dist/core/settings-manager.d.ts +2 -2
  112. package/dist/core/settings-manager.d.ts.map +1 -1
  113. package/dist/core/settings-manager.js +2 -2
  114. package/dist/core/settings-manager.js.map +1 -1
  115. package/dist/core/tools/bash.d.ts +3 -0
  116. package/dist/core/tools/bash.d.ts.map +1 -1
  117. package/dist/core/tools/bash.js +13 -2
  118. package/dist/core/tools/bash.js.map +1 -1
  119. package/dist/core/tools/delegate-status.d.ts +1 -0
  120. package/dist/core/tools/delegate-status.d.ts.map +1 -1
  121. package/dist/core/tools/delegate-status.js +19 -1
  122. package/dist/core/tools/delegate-status.js.map +1 -1
  123. package/dist/core/tools/delegate.d.ts +9 -1
  124. package/dist/core/tools/delegate.d.ts.map +1 -1
  125. package/dist/core/tools/delegate.js +198 -64
  126. package/dist/core/tools/delegate.js.map +1 -1
  127. package/dist/core/tools/edit.d.ts.map +1 -1
  128. package/dist/core/tools/edit.js +14 -1
  129. package/dist/core/tools/edit.js.map +1 -1
  130. package/dist/core/tools/file-failure-recovery.d.ts +3 -0
  131. package/dist/core/tools/file-failure-recovery.d.ts.map +1 -1
  132. package/dist/core/tools/file-failure-recovery.js +11 -0
  133. package/dist/core/tools/file-failure-recovery.js.map +1 -1
  134. package/dist/core/tools/orchestration-panel.d.ts +1 -1
  135. package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
  136. package/dist/core/tools/orchestration-panel.js +1 -0
  137. package/dist/core/tools/orchestration-panel.js.map +1 -1
  138. package/dist/core/tools/profile-writer.d.ts.map +1 -1
  139. package/dist/core/tools/profile-writer.js +2 -8
  140. package/dist/core/tools/profile-writer.js.map +1 -1
  141. package/dist/core/tools/search-command-guard.d.ts.map +1 -1
  142. package/dist/core/tools/search-command-guard.js +10 -3
  143. package/dist/core/tools/search-command-guard.js.map +1 -1
  144. package/dist/core/tools/tool-task.d.ts.map +1 -1
  145. package/dist/core/tools/tool-task.js +4 -0
  146. package/dist/core/tools/tool-task.js.map +1 -1
  147. package/dist/core/tools/write.d.ts.map +1 -1
  148. package/dist/core/tools/write.js +10 -1
  149. package/dist/core/tools/write.js.map +1 -1
  150. package/dist/modes/interactive/components/activity-lane.d.ts +1 -1
  151. package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
  152. package/dist/modes/interactive/components/activity-lane.js +11 -2
  153. package/dist/modes/interactive/components/activity-lane.js.map +1 -1
  154. package/dist/modes/interactive/components/settings-selector.js +1 -1
  155. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  156. package/dist/utils/shell.d.ts +2 -0
  157. package/dist/utils/shell.d.ts.map +1 -1
  158. package/dist/utils/shell.js +3 -1
  159. package/dist/utils/shell.js.map +1 -1
  160. package/docs/harness-architecture.md +6 -3
  161. package/docs/settings.md +8 -6
  162. package/docs/tool-repair.md +1 -1
  163. package/docs/worker-profiles.md +2 -2
  164. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  165. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  166. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  167. package/examples/extensions/sandbox/package-lock.json +2 -2
  168. package/examples/extensions/sandbox/package.json +1 -1
  169. package/examples/extensions/with-deps/package-lock.json +2 -2
  170. package/examples/extensions/with-deps/package.json +1 -1
  171. package/npm-shrinkwrap.json +12 -12
  172. package/package.json +4 -4
@@ -5,7 +5,32 @@ import { normalizeWorkerAgentDependencyTaskIds, WorkerAgentMailbox, workerAgentB
5
5
  import { MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES, WorkerConversationStore, } from "./worker-conversation-store.js";
6
6
  import { evaluateReusableWorkerTaskAdmission } from "./worker-fleet-limits.js";
7
7
  import { projectWorkerTaskSessionView } from "./worker-task-view.js";
8
+ import { WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE } from "./worker-terminal-handoff-coordinator.js";
8
9
  const MAX_BROADCAST_ERROR_CHARS = 512;
10
+ export function buildWorkerTerminalHandoffContent(args) {
11
+ return [
12
+ "Worker terminal handoff",
13
+ `childAgentId=${args.childAgentId}`,
14
+ `laneId=${args.record.laneId}`,
15
+ `status=${args.record.status}`,
16
+ ...(args.record.reasonCode ? [`reasonCode=${args.record.reasonCode}`] : []),
17
+ "CAVEMAN MODE - MANDATORY: terminal handoff means worker state was retained. Read the full transcript, verify the claim, then continue or replan within the admitted grant. Do not call this lost state or harness failure.",
18
+ "MANDATORY: read every transcript page before judging this result.",
19
+ `Start with delegate action="transcript" agentId="${args.childAgentId}" cursor=0.`,
20
+ "Entries complete only after pagination ends. omittedMessages means whole entries were left out of that page. While nextCursor exists, call transcript again with cursor=nextCursor. Stop only when nextCursor is absent.",
21
+ ...(args.record.reasonCode === "worker_blocked"
22
+ ? [
23
+ "worker_blocked means the durable claim has blockers; it does not mean worker state or transcript was lost.",
24
+ ]
25
+ : []),
26
+ ...(args.record.status === "budget_exhausted"
27
+ ? [
28
+ "CAVEMAN MODE - MANDATORY: budget_exhausted means an admitted limit ended work, not harness failure. Terminal reasonCode is authoritative; never replace it with earlier transcript errors. Read evidence, then replan only within remaining authority.",
29
+ ]
30
+ : []),
31
+ ...(args.record.reasonCode === "completion_error" ? [WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE] : []),
32
+ ].join("\n");
33
+ }
9
34
  /**
10
35
  * Sole owner of model-facing logical-agent controls and their durable inboxes.
11
36
  *
@@ -853,6 +878,7 @@ export class WorkerAgentControlCoordinator {
853
878
  waitForWorkerAgent(agentId, timeoutMs = 30_000, scope = {}) {
854
879
  return this.waitForWorkerAgents([agentId], "all", timeoutMs, scope).then((result) => ({
855
880
  status: result.statuses[0]?.status ?? "unknown",
881
+ timedOut: result.timedOut,
856
882
  }));
857
883
  }
858
884
  /** One event-driven wait set with one shared caller-capacity lease; never per-agent promise polling. */
@@ -862,8 +888,9 @@ export class WorkerAgentControlCoordinator {
862
888
  throw new TypeError("Worker wait mode must be 'any' or 'all'.");
863
889
  const canonicalAgentIds = this.canonicalAgentIdSet(agentIds, "Worker wait");
864
890
  const baselineSnapshot = this.options.getLifecycle().getTaskRuntimeSnapshot();
891
+ let callerAgentId;
865
892
  if (scope.callerAgentId) {
866
- const callerAgentId = scope.callerAgentId.trim();
893
+ callerAgentId = scope.callerAgentId.trim();
867
894
  if (!callerAgentId || !baselineSnapshot.agents[callerAgentId]) {
868
895
  throw new Error(`Unknown logical worker agent '${callerAgentId}'.`);
869
896
  }
@@ -905,58 +932,96 @@ export class WorkerAgentControlCoordinator {
905
932
  });
906
933
  if (waitSatisfied(baselineStatuses))
907
934
  return Promise.resolve(result(baselineStatuses, false));
908
- return new Promise((resolve) => {
935
+ if (callerAgentId) {
936
+ const activeAgentIds = new Set(baselineStatuses.filter(({ status }) => status === "active").map(({ agentId }) => agentId));
937
+ if (activeAgentIds.has(callerAgentId)) {
938
+ throw new Error(`Worker wait would deadlock: logical worker '${callerAgentId}' cannot wait for itself. Finish the caller task instead.`);
939
+ }
940
+ }
941
+ return new Promise((resolve, reject) => {
909
942
  let settled = false;
910
- let releaseYield;
943
+ let completionTimedOut;
944
+ let failure;
945
+ let hasFailure = false;
946
+ let yieldInitialized = callerAgentId === undefined;
947
+ let restoreYield;
911
948
  let unsubscribeState = () => undefined;
912
949
  let timeout;
913
950
  const cleanup = () => {
914
951
  unsubscribeState();
915
952
  if (timeout)
916
953
  clearTimeout(timeout);
917
- const release = releaseYield;
918
- releaseYield = undefined;
919
- release?.();
954
+ };
955
+ const restoreCaller = () => {
956
+ if (!restoreYield)
957
+ return true;
958
+ const restored = restoreYield();
959
+ if (restored === false)
960
+ return false;
961
+ restoreYield = undefined;
962
+ return true;
920
963
  };
921
964
  const settle = () => {
922
- if (settled)
965
+ if (settled || !yieldInitialized)
923
966
  return;
924
967
  const statuses = currentStatuses();
925
968
  recordUpdates(statuses);
926
- if (!waitSatisfied(statuses))
927
- return;
969
+ if (!hasFailure && completionTimedOut === undefined) {
970
+ if (!waitSatisfied(statuses))
971
+ return;
972
+ completionTimedOut = false;
973
+ if (timeout) {
974
+ clearTimeout(timeout);
975
+ timeout = undefined;
976
+ }
977
+ }
978
+ try {
979
+ if (!restoreCaller())
980
+ return;
981
+ }
982
+ catch (error) {
983
+ failure = error;
984
+ hasFailure = true;
985
+ }
928
986
  settled = true;
929
987
  cleanup();
930
- resolve(result(statuses, false));
988
+ if (hasFailure)
989
+ reject(failure);
990
+ else
991
+ resolve(result(statuses, completionTimedOut ?? false));
931
992
  };
932
993
  unsubscribeState = this.subscribeStateChanges(settle);
933
994
  timeout = setTimeout(() => {
934
995
  if (settled)
935
996
  return;
936
- settled = true;
937
- const statuses = currentStatuses();
938
- recordUpdates(statuses);
939
- cleanup();
940
- resolve(result(statuses, true));
997
+ timeout = undefined;
998
+ if (completionTimedOut === undefined)
999
+ completionTimedOut = true;
1000
+ settle();
941
1001
  }, boundedTimeoutMs);
942
1002
  if (typeof timeout === "object" && "unref" in timeout)
943
1003
  timeout.unref();
944
- if (scope.callerAgentId && this.options.yieldCapacity) {
945
- // Capacity belongs to the waiting caller. Passing that identity through both slots keeps
946
- // legacy controller adapters from treating an independent peer as the capacity owner.
947
- try {
948
- const yielded = this.options.yieldCapacity(scope.callerAgentId, scope.callerAgentId);
949
- if (settled)
950
- yielded();
951
- else
952
- releaseYield = yielded;
1004
+ try {
1005
+ if (callerAgentId && this.options.yieldCallerForWait) {
1006
+ restoreYield = this.options.yieldCallerForWait(callerAgentId);
953
1007
  }
954
- catch (error) {
955
- settled = true;
956
- cleanup();
957
- throw error;
1008
+ yieldInitialized = true;
1009
+ if (callerAgentId) {
1010
+ const statuses = currentStatuses();
1011
+ const activeAgentIds = new Set(statuses.filter(({ status }) => status === "active").map(({ agentId }) => agentId));
1012
+ const blockedAgentIdSet = new Set(this.options.waitBlockedByCaller?.(callerAgentId, canonicalAgentIds) ?? []);
1013
+ const blockedAgentIds = canonicalAgentIds.filter((agentId) => activeAgentIds.has(agentId) && blockedAgentIdSet.has(agentId));
1014
+ if (blockedAgentIds.length > 0) {
1015
+ hasFailure = true;
1016
+ failure = new Error(`Worker wait would deadlock: ${blockedAgentIds.join(", ")} ${blockedAgentIds.length === 1 ? "is" : "are"} blocked by the caller's write reservation after caller resources were yielded.`);
1017
+ }
958
1018
  }
959
1019
  }
1020
+ catch (error) {
1021
+ yieldInitialized = true;
1022
+ hasFailure = true;
1023
+ failure = error;
1024
+ }
960
1025
  settle();
961
1026
  });
962
1027
  }
@@ -1087,14 +1152,7 @@ export class WorkerAgentControlCoordinator {
1087
1152
  const parent = this.requireKnownAgent(args.parentAgentId);
1088
1153
  const latest = this.latestAgentAttempt(parent);
1089
1154
  const active = latest?.status === "queued" || latest?.status === "leased" || latest?.status === "running";
1090
- const content = [
1091
- "Worker terminal handoff",
1092
- `childAgentId=${args.childAgentId}`,
1093
- `laneId=${args.record.laneId}`,
1094
- `status=${args.record.status}`,
1095
- ...(args.record.reasonCode ? [`reasonCode=${args.record.reasonCode}`] : []),
1096
- `Transcript: delegate action="transcript" agentId="${args.childAgentId}". Entries complete; omittedMessages marks whole omissions; empty page may continue via nextCursor.`,
1097
- ].join("\n");
1155
+ const content = buildWorkerTerminalHandoffContent(args);
1098
1156
  const idempotencyKey = `terminal-handoff:${args.terminalAttemptId}`;
1099
1157
  const transcriptInput = {
1100
1158
  idempotencyKey,