@marcoscale98/pi-extensible-workflows 5.14.1-fork.1 → 5.19.1-fork.1

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 (94) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/dist/src/agent-execution.js +114 -87
  3. package/dist/src/background-widget.d.ts +61 -0
  4. package/dist/src/background-widget.js +23 -16
  5. package/dist/src/decoders.js +28 -1
  6. package/dist/src/execution.d.ts +4 -2
  7. package/dist/src/execution.js +43 -2
  8. package/dist/src/host-delivery.js +1 -0
  9. package/dist/src/host-navigator.d.ts +18 -0
  10. package/dist/src/host-navigator.js +71 -13
  11. package/dist/src/host-recovery.d.ts +5 -2
  12. package/dist/src/host-recovery.js +3 -3
  13. package/dist/src/host-view.d.ts +21 -1
  14. package/dist/src/host-view.js +138 -47
  15. package/dist/src/host.d.ts +2 -2
  16. package/dist/src/host.js +246 -60
  17. package/dist/src/index.d.ts +3 -1
  18. package/dist/src/index.js +1346 -622
  19. package/dist/src/index.js.map +3 -3
  20. package/dist/src/paths.d.ts +2 -0
  21. package/dist/src/paths.js +2 -0
  22. package/dist/src/registry.js +3 -2
  23. package/dist/src/roles.d.ts +70 -0
  24. package/dist/src/roles.js +326 -0
  25. package/dist/src/script-tools.d.ts +27 -0
  26. package/dist/src/script-tools.js +87 -0
  27. package/dist/src/settings.d.ts +26 -0
  28. package/dist/src/settings.js +277 -0
  29. package/dist/src/trajectory.d.ts +39 -4
  30. package/dist/src/trajectory.js +82 -5
  31. package/dist/src/types.d.ts +30 -3
  32. package/dist/src/types.js +1 -1
  33. package/dist/src/utils.d.ts +21 -1
  34. package/dist/src/utils.js +40 -0
  35. package/dist/src/validation.d.ts +10 -17
  36. package/dist/src/validation.js +29 -458
  37. package/dist/starter/index.js +0 -2
  38. package/dist/starter/index.js.map +1 -1
  39. package/dist/starter/review-loop.d.ts +0 -13
  40. package/dist/starter/review-loop.js +0 -2
  41. package/dist/subagents/index.js +1344 -798
  42. package/dist/subagents/index.js.map +3 -3
  43. package/dist/subagents/src/contracts.d.ts +49 -29
  44. package/dist/subagents/src/contracts.js +18 -7
  45. package/dist/subagents/src/index.d.ts +1 -1
  46. package/dist/subagents/src/index.js +15 -7
  47. package/dist/subagents/src/manager.js +32 -13
  48. package/dist/subagents/src/navigator.js +396 -247
  49. package/dist/subagents/src/view.d.ts +24 -2
  50. package/dist/subagents/src/view.js +107 -80
  51. package/dist/trajectory/assets/index.html +370 -232
  52. package/dist/trajectory/assets/prism.min.js +13 -0
  53. package/dist/trajectory/index.js +445 -277
  54. package/dist/trajectory/index.js.map +3 -3
  55. package/dist/trajectory/src/assets/index.html +370 -232
  56. package/dist/trajectory/src/assets/prism.min.js +13 -0
  57. package/dist/trajectory/src/export.js +4 -2
  58. package/dist/trajectory/src/index.d.ts +2 -0
  59. package/dist/trajectory/src/index.js +151 -60
  60. package/dist/trajectory/src/server.js +138 -11
  61. package/dist/trajectory/src/server.js.map +2 -2
  62. package/package.json +7 -6
  63. package/skills/pi-extensible-workflows/SKILL.md +2 -0
  64. package/src/agent-execution.ts +110 -80
  65. package/src/background-widget.ts +26 -19
  66. package/src/decoders.ts +22 -1
  67. package/src/execution.ts +41 -4
  68. package/src/host-delivery.ts +1 -0
  69. package/src/host-navigator.ts +58 -14
  70. package/src/host-recovery.ts +8 -7
  71. package/src/host-view.ts +116 -42
  72. package/src/host.ts +223 -55
  73. package/src/index.ts +3 -1
  74. package/src/paths.ts +3 -0
  75. package/src/registry.ts +3 -2
  76. package/src/roles.ts +327 -0
  77. package/src/script-tools.ts +76 -0
  78. package/src/settings.ts +224 -0
  79. package/src/trajectory.ts +97 -9
  80. package/src/types.ts +12 -5
  81. package/src/utils.ts +36 -1
  82. package/src/validation.ts +30 -356
  83. package/starter/review-loop.ts +0 -2
  84. package/subagents/README.md +3 -3
  85. package/subagents/src/contracts.ts +22 -7
  86. package/subagents/src/index.ts +18 -7
  87. package/subagents/src/manager.ts +31 -13
  88. package/subagents/src/navigator.ts +336 -180
  89. package/subagents/src/view.ts +108 -76
  90. package/trajectory/src/assets/index.html +370 -232
  91. package/trajectory/src/assets/prism.min.js +13 -0
  92. package/trajectory/src/export.ts +4 -2
  93. package/trajectory/src/index.ts +124 -47
  94. package/trajectory/src/server.ts +114 -14
@@ -12,7 +12,6 @@ import {
12
12
  isThinkingLevel,
13
13
  jsonValue,
14
14
  object,
15
- loadAgentDefinitions,
16
15
  loadingRegistry,
17
16
  localAgentTransport,
18
17
  resolveAgentResourcePolicy,
@@ -43,6 +42,7 @@ import {
43
42
  SerialLane,
44
43
  } from "../../src/index.js";
45
44
  import { decodeAgentDefinition, decodeWorkflowExtensions } from "../../src/decoders.js";
45
+ import { loadAgentDefinitions } from "../../src/roles.js";
46
46
  import { atomicJson, json as readJson, processAlive } from "../../src/persistence.js";
47
47
  import { accountingValue, activityValue, legacyAccountingValue, worktreeValue } from "./decode.js";
48
48
  import {
@@ -1103,8 +1103,9 @@ class PersistentSubagentManager implements SubagentManager {
1103
1103
  if (request.id !== undefined) {
1104
1104
  const id = checkedId({ id: request.id });
1105
1105
  const active = this.activeRuns.get(id);
1106
- const status = active ? persistedStatus(active) : this.terminalSummaries.get(id) ?? await loadPersistedStatus(storageDirectory(this.dependencies), id);
1107
- const inspection = publicStatus(status, context.includeAttemptMetadata === true);
1106
+ const includeActivity = context.includeActivity === true;
1107
+ const status = active ? includeActivity ? liveStatus(active) : persistedStatus(active) : this.terminalSummaries.get(id) ?? await loadPersistedStatus(storageDirectory(this.dependencies), id);
1108
+ const inspection = publicStatus(status, context.includeAttemptMetadata === true, includeActivity);
1108
1109
  if (status.state === "completed") return { ...inspection, value: await loadPersistedResult(storageDirectory(this.dependencies), id) };
1109
1110
  if (status.state === "failed") {
1110
1111
  const failure = status.error ?? await loadPersistedFailure(storageDirectory(this.dependencies), id);
@@ -1112,9 +1113,9 @@ class PersistentSubagentManager implements SubagentManager {
1112
1113
  }
1113
1114
  return inspection;
1114
1115
  }
1115
- return this.inspectList();
1116
+ return this.inspectList(request.scope === "all" ? undefined : context.extensionContext.sessionManager.getSessionId());
1116
1117
  }
1117
- private async inspectList(): Promise<unknown> {
1118
+ private async inspectList(sessionId: string | undefined): Promise<unknown> {
1118
1119
  const root = storageDirectory(this.dependencies);
1119
1120
  await secureDirectory(root);
1120
1121
  const entries = await readdir(root, { withFileTypes: true });
@@ -1126,7 +1127,7 @@ class PersistentSubagentManager implements SubagentManager {
1126
1127
  try {
1127
1128
  const active = this.activeRuns.get(entry.name);
1128
1129
  const status = publicStatus(active ? persistedStatus(active) : this.terminalSummaries.get(entry.name) ?? await loadPersistedStatus(root, entry.name, false));
1129
- if (status.startedAt === undefined) continue;
1130
+ if (status.startedAt === undefined || (sessionId !== undefined && status.sessionId !== sessionId)) continue;
1130
1131
  statuses.push({ status, startedAt: status.startedAt });
1131
1132
  } catch (error) {
1132
1133
  if (error instanceof WorkflowError && (error.code === "RUN_NOT_FOUND" || error instanceof InvalidPersistedSubagentStatusError)) continue;
@@ -1159,6 +1160,20 @@ class PersistentSubagentManager implements SubagentManager {
1159
1160
  return publicStatus(persistedStatus(run));
1160
1161
  }
1161
1162
 
1163
+ /** Removes a settled record for the /subagents navigator, as /workflow deletes a terminal run; not a model tool. */
1164
+ async delete(request: Readonly<{ id: string }>): Promise<unknown> {
1165
+ const id = checkedId(request);
1166
+ await this.ensureInitialized();
1167
+ const root = storageDirectory(this.dependencies);
1168
+ const status = this.activeRuns.has(id) ? undefined : this.terminalSummaries.get(id) ?? await loadPersistedStatus(root, id, false);
1169
+ if (status === undefined || status.state === "running") throw new WorkflowError("RUN_OWNED", `Stop subagent ${id} before deleting it`);
1170
+ // Retained worktree metadata means cleanup failed, and the record holds what a later cleanup needs.
1171
+ if (status.worktree !== undefined) throw new WorkflowError("WORKTREE_FAILED", `Subagent ${id} still has a worktree to clean up`);
1172
+ await rm(runDirectory(root, id), { recursive: true, force: true });
1173
+ this.terminalSummaries.delete(id);
1174
+ return { id, deleted: true };
1175
+ }
1176
+
1162
1177
  async dispose(): Promise<void> {
1163
1178
  if (this.disposePromise) return this.disposePromise;
1164
1179
  this.disposePromise = (async () => {
@@ -1339,8 +1354,10 @@ class PersistentSubagentManager implements SubagentManager {
1339
1354
  run.disposed = true;
1340
1355
  this.clearSteering(run);
1341
1356
  await this.cleanupSessions(run, true);
1342
- const worktreeCleaned = await this.cleanupWorktree(run);
1343
- if (worktreeCleaned) await enqueueWrite(run, () => atomicJson(statusPath(run.directory), persistedStatus(run)));
1357
+ await this.cleanupWorktree(run);
1358
+ // A run that settled just before disposal may not have written its terminal status yet: finishTerminal returns early
1359
+ // once the run is disposed. Left as "running" under this live process, the next manager here would never reconcile it.
1360
+ await enqueueWrite(run, () => atomicJson(statusPath(run.directory), persistedStatus(run)));
1344
1361
  this.resolveTerminal(run);
1345
1362
  this.removeLiveRun(run);
1346
1363
  }
@@ -1547,14 +1564,15 @@ export function createUnavailableSubagentManager(): SubagentManager {
1547
1564
  };
1548
1565
  }
1549
1566
  export function createSubagentManager(dependencies: SubagentManagerDependencies = {}): SubagentManager {
1550
- const manager: SubagentManager = new PersistentSubagentManager(dependencies);
1567
+ const manager = new PersistentSubagentManager(dependencies);
1551
1568
  return {
1552
1569
  run: (request, context) => manager.run(request, context),
1553
1570
  inspect: (request, context) => manager.inspect(request, context),
1554
- getAttemptActionData: (id) => manager.getAttemptActionData?.(id),
1555
- steer: (request, context) => manager.steer(request, context),
1556
- stop: (request, context) => manager.stop(request, context),
1571
+ getAttemptActionData: (id) => manager.getAttemptActionData(id),
1572
+ steer: (request) => manager.steer(request),
1573
+ stop: (request) => manager.stop(request),
1557
1574
  retry: (request, context) => manager.retry(request, context),
1558
- dispose: async () => { await manager.dispose?.(); },
1575
+ delete: (request) => manager.delete(request),
1576
+ dispose: async () => { await manager.dispose(); },
1559
1577
  };
1560
1578
  }