@llblab/pi-actors 0.54.0 → 0.56.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 (188) hide show
  1. package/AGENTS.md +110 -20
  2. package/BACKLOG.md +207 -4
  3. package/CHANGELOG.md +17 -0
  4. package/README.md +33 -3
  5. package/dist/index.js +2 -1
  6. package/dist/lib/async-runs.d.ts +37 -0
  7. package/dist/lib/async-runs.js +131 -62
  8. package/dist/lib/automatic-review-runtime.d.ts +2 -0
  9. package/dist/lib/automatic-review-runtime.js +3 -2
  10. package/dist/lib/command-templates.d.ts +37 -0
  11. package/dist/lib/command-templates.js +263 -129
  12. package/dist/lib/execution-files.d.ts +32 -0
  13. package/dist/lib/execution-files.js +128 -0
  14. package/dist/lib/execution-output.js +5 -4
  15. package/dist/lib/execution-sessions.d.ts +19 -1
  16. package/dist/lib/execution-sessions.js +62 -26
  17. package/dist/lib/execution.d.ts +4 -1
  18. package/dist/lib/execution.js +6 -1
  19. package/dist/lib/extension-runtime.d.ts +10 -2
  20. package/dist/lib/extension-runtime.js +95 -14
  21. package/dist/lib/file-state.js +21 -2
  22. package/dist/lib/inspector-command.js +2 -2
  23. package/dist/lib/inspector-overlay.d.ts +25 -7
  24. package/dist/lib/inspector-overlay.js +562 -262
  25. package/dist/lib/inspector.d.ts +20 -10
  26. package/dist/lib/inspector.js +80 -91
  27. package/dist/lib/limits.d.ts +1 -0
  28. package/dist/lib/limits.js +1 -0
  29. package/dist/lib/observability.d.ts +15 -1
  30. package/dist/lib/observability.js +216 -99
  31. package/dist/lib/pi.d.ts +9 -3
  32. package/dist/lib/pi.js +80 -12
  33. package/dist/lib/recipe-projection.d.ts +18 -0
  34. package/dist/lib/recipe-projection.js +220 -0
  35. package/dist/lib/recipes-context.d.ts +2 -0
  36. package/dist/lib/recipes-context.js +30 -6
  37. package/dist/lib/registry.js +270 -36
  38. package/dist/lib/run-delivery.d.ts +213 -5
  39. package/dist/lib/run-delivery.js +1909 -40
  40. package/dist/lib/run-supervision.d.ts +107 -0
  41. package/dist/lib/run-supervision.js +412 -0
  42. package/dist/lib/run-ui-runtime.d.ts +10 -2
  43. package/dist/lib/run-ui-runtime.js +347 -124
  44. package/dist/lib/runs-artifacts.d.ts +26 -1
  45. package/dist/lib/runs-artifacts.js +68 -2
  46. package/dist/lib/runs-context-exports.d.ts +451 -0
  47. package/dist/lib/runs-context-exports.js +2315 -0
  48. package/dist/lib/runs-context-index.d.ts +97 -0
  49. package/dist/lib/runs-context-index.js +368 -0
  50. package/dist/lib/runs-control-delivery.js +46 -7
  51. package/dist/lib/runs-control.d.ts +78 -2
  52. package/dist/lib/runs-control.js +334 -2
  53. package/dist/lib/runs-controls.js +4 -1
  54. package/dist/lib/runs-descendant-launches.d.ts +80 -0
  55. package/dist/lib/runs-descendant-launches.js +287 -0
  56. package/dist/lib/runs-execution-evidence.d.ts +110 -0
  57. package/dist/lib/runs-execution-evidence.js +282 -0
  58. package/dist/lib/runs-index.d.ts +66 -1
  59. package/dist/lib/runs-index.js +349 -13
  60. package/dist/lib/runs-native-launches.d.ts +73 -0
  61. package/dist/lib/runs-native-launches.js +227 -0
  62. package/dist/lib/runs-outcomes.d.ts +141 -0
  63. package/dist/lib/runs-outcomes.js +292 -0
  64. package/dist/lib/runs-ownership.d.ts +10 -1
  65. package/dist/lib/runs-ownership.js +36 -4
  66. package/dist/lib/runs-process-windows-mi.d.ts +46 -0
  67. package/dist/lib/runs-process-windows-mi.js +114 -0
  68. package/dist/lib/runs-process.d.ts +34 -1
  69. package/dist/lib/runs-process.js +158 -26
  70. package/dist/lib/runs-results.d.ts +116 -0
  71. package/dist/lib/runs-results.js +518 -0
  72. package/dist/lib/runs-retention.d.ts +15 -2
  73. package/dist/lib/runs-retention.js +148 -9
  74. package/dist/lib/runs-session-exports.d.ts +95 -0
  75. package/dist/lib/runs-session-exports.js +470 -0
  76. package/dist/lib/runs-snapshot.d.ts +58 -0
  77. package/dist/lib/runs-snapshot.js +92 -0
  78. package/dist/lib/runs-start.d.ts +2 -0
  79. package/dist/lib/runs-start.js +44 -3
  80. package/dist/lib/runs-status.d.ts +15 -1
  81. package/dist/lib/runs-status.js +337 -13
  82. package/dist/lib/runs-supervision.d.ts +105 -0
  83. package/dist/lib/runs-supervision.js +501 -0
  84. package/dist/lib/runs-trace.d.ts +1 -0
  85. package/dist/lib/runs-trace.js +14 -3
  86. package/dist/lib/runtime.js +22 -3
  87. package/dist/lib/session-evidence.d.ts +37 -0
  88. package/dist/lib/session-evidence.js +59 -3
  89. package/dist/lib/state-readers.d.ts +4 -1
  90. package/dist/lib/state-readers.js +14 -8
  91. package/dist/lib/temp.d.ts +2 -4
  92. package/dist/lib/temp.js +4 -56
  93. package/dist/lib/tools-access.d.ts +3 -0
  94. package/dist/lib/tools-access.js +13 -0
  95. package/dist/lib/tools-inspect.d.ts +1 -0
  96. package/dist/lib/tools-inspect.js +110 -43
  97. package/dist/lib/tools-local.d.ts +3 -0
  98. package/dist/lib/tools-local.js +18 -6
  99. package/dist/lib/tools-message.d.ts +4 -1
  100. package/dist/lib/tools-message.js +126 -31
  101. package/dist/lib/tools-response.d.ts +31 -3
  102. package/dist/lib/tools-response.js +311 -47
  103. package/dist/lib/tools-spawn.d.ts +3 -0
  104. package/dist/lib/tools-spawn.js +29 -7
  105. package/dist/lib/trace-projection.d.ts +20 -0
  106. package/dist/lib/trace-projection.js +192 -43
  107. package/dist/scripts/async-runner.mjs +272 -194
  108. package/dist/scripts/conformance.mjs +14 -2
  109. package/dist/skills/actors/SKILL.md +47 -3
  110. package/dist/skills/actors/references/diagnostics.md +40 -0
  111. package/dist/skills/actors/references/runs.md +56 -2
  112. package/docs/README.md +9 -1
  113. package/docs/actor-inspector.md +84 -15
  114. package/docs/agent-experience.md +216 -0
  115. package/docs/async-runs.md +21 -3
  116. package/docs/composition-transport.md +103 -0
  117. package/docs/coordinator-delivery.md +226 -24
  118. package/docs/inspection.md +38 -2
  119. package/docs/output-projection-map.md +130 -0
  120. package/docs/releasing.md +19 -2
  121. package/docs/run-supervision.md +1622 -0
  122. package/docs/template-recipes.md +4 -0
  123. package/docs/windows-process-observation.md +248 -0
  124. package/index.ts +2 -1
  125. package/lib/async-runs.ts +164 -73
  126. package/lib/automatic-review-runtime.ts +4 -2
  127. package/lib/command-templates.ts +287 -138
  128. package/lib/execution-files.ts +118 -0
  129. package/lib/execution-output.ts +4 -4
  130. package/lib/execution-sessions.ts +57 -27
  131. package/lib/execution.ts +8 -0
  132. package/lib/extension-runtime.ts +106 -12
  133. package/lib/file-state.ts +16 -2
  134. package/lib/inspector-command.ts +2 -2
  135. package/lib/inspector-overlay.ts +524 -261
  136. package/lib/inspector.ts +101 -130
  137. package/lib/limits.ts +1 -0
  138. package/lib/observability.ts +235 -116
  139. package/lib/pi.ts +89 -17
  140. package/lib/recipe-projection.ts +232 -0
  141. package/lib/recipes-context.ts +27 -6
  142. package/lib/registry.ts +266 -36
  143. package/lib/run-delivery.ts +1737 -49
  144. package/lib/run-supervision.ts +411 -0
  145. package/lib/run-ui-runtime.ts +293 -126
  146. package/lib/runs-artifacts.ts +73 -1
  147. package/lib/runs-context-exports.ts +1871 -0
  148. package/lib/runs-context-index.ts +372 -0
  149. package/lib/runs-control-delivery.ts +36 -18
  150. package/lib/runs-control.ts +297 -1
  151. package/lib/runs-controls.ts +3 -1
  152. package/lib/runs-descendant-launches.ts +338 -0
  153. package/lib/runs-execution-evidence.ts +302 -0
  154. package/lib/runs-index.ts +345 -17
  155. package/lib/runs-native-launches.ts +270 -0
  156. package/lib/runs-outcomes.ts +377 -0
  157. package/lib/runs-ownership.ts +37 -4
  158. package/lib/runs-process-windows-mi.ts +113 -0
  159. package/lib/runs-process.ts +210 -34
  160. package/lib/runs-results.ts +601 -0
  161. package/lib/runs-retention.ts +134 -10
  162. package/lib/runs-session-exports.ts +406 -0
  163. package/lib/runs-snapshot.ts +143 -0
  164. package/lib/runs-start.ts +44 -2
  165. package/lib/runs-status.ts +252 -10
  166. package/lib/runs-supervision.ts +394 -0
  167. package/lib/runs-trace.ts +14 -3
  168. package/lib/runtime.ts +22 -3
  169. package/lib/session-evidence.ts +76 -4
  170. package/lib/state-readers.ts +16 -7
  171. package/lib/temp.ts +3 -56
  172. package/lib/tools-access.ts +13 -0
  173. package/lib/tools-inspect.ts +110 -51
  174. package/lib/tools-local.ts +37 -24
  175. package/lib/tools-message.ts +120 -37
  176. package/lib/tools-response.ts +273 -50
  177. package/lib/tools-spawn.ts +31 -10
  178. package/lib/trace-projection.ts +165 -42
  179. package/package.json +10 -6
  180. package/scripts/async-runner.mjs +272 -194
  181. package/scripts/conformance.mjs +14 -2
  182. package/skills/actors/SKILL.md +47 -3
  183. package/skills/actors/references/diagnostics.md +40 -0
  184. package/skills/actors/references/runs.md +56 -2
  185. package/banner.jpg +0 -0
  186. package/dist/lib/inspector-actions.d.ts +0 -16
  187. package/dist/lib/inspector-actions.js +0 -57
  188. package/lib/inspector-actions.ts +0 -79
@@ -1,15 +1,18 @@
1
1
  /**
2
2
  * Async run artifact declarations and manifest resolution.
3
- * Owns: artifact path template expansion and filesystem-backed artifact metadata.
3
+ * Owns: artifact path expansion, captured-reference validation, body-free metadata observation and explicit hashing.
4
+ * Excludes: generation admission, export publication, directory scans and production/immutable-content proof.
4
5
  */
5
6
 
6
7
  import { createHash } from "node:crypto";
7
8
  import {
8
9
  closeSync,
9
10
  fstatSync,
11
+ lstatSync,
10
12
  openSync,
11
13
  readSync,
12
14
  } from "node:fs";
15
+ import { isAbsolute, sep } from "node:path";
13
16
 
14
17
  import { substituteCommandTemplateToken } from "./command-templates.ts";
15
18
 
@@ -27,6 +30,75 @@ export interface RunArtifactManifestEntry {
27
30
  size?: number;
28
31
  }
29
32
 
33
+ export interface RunArtifactReference {
34
+ readonly name: string;
35
+ readonly path: string;
36
+ readonly kind?: string;
37
+ readonly media_type?: string;
38
+ readonly required?: boolean;
39
+ }
40
+ export type RunArtifactReferencesReading = { readonly state: "available"; readonly references: readonly Readonly<RunArtifactReference>[] }
41
+ | { readonly state: "unavailable"; readonly reason: "artifact_declarations_invalid" | "artifact_base_unavailable" };
42
+ export type RunArtifactObservation = Readonly<RunArtifactReference & {
43
+ availability: "available" | "missing" | "unavailable";
44
+ bytes_total?: number;
45
+ modified_at?: string;
46
+ reason?: "artifact_not_regular" | "artifact_changed" | "artifact_unreadable" | "artifact_size_unavailable";
47
+ }>;
48
+
49
+ /** Captured paths only: no placeholder/environment expansion, directory discovery or fallback to this process's cwd. */
50
+ export function describeRunArtifactReferences(artifacts: unknown, cwd: unknown): RunArtifactReferencesReading {
51
+ if (artifacts === undefined) return Object.freeze({ state: "available", references: Object.freeze([]) });
52
+ const invalid = (): RunArtifactReferencesReading => Object.freeze({ state: "unavailable", reason: "artifact_declarations_invalid" });
53
+ if (!artifacts || typeof artifacts !== "object" || Array.isArray(artifacts)) return invalid();
54
+ const references: Readonly<RunArtifactReference>[] = [];
55
+ for (const [name, value] of Object.entries(artifacts)) {
56
+ if (!name.trim() || /[\u0000-\u001f\u007f]/u.test(name)) return invalid();
57
+ const declaration = typeof value === "string" ? { path: value } : value;
58
+ if (!declaration || typeof declaration !== "object" || Array.isArray(declaration)) return invalid();
59
+ const item = declaration as Record<string, unknown>;
60
+ if (Object.keys(item).some(key => !["path", "kind", "media_type", "required"].includes(key)) || !Object.hasOwn(item, "path") ||
61
+ typeof item.path !== "string" || !item.path || /[\u0000-\u001f\u007f]/u.test(item.path) ||
62
+ (item.kind !== undefined && typeof item.kind !== "string") || (item.media_type !== undefined && typeof item.media_type !== "string") ||
63
+ (item.required !== undefined && typeof item.required !== "boolean")) return invalid();
64
+ if (!isAbsolute(item.path) && (typeof cwd !== "string" || !isAbsolute(cwd) || /[\u0000-\u001f\u007f]/u.test(cwd))) {
65
+ return Object.freeze({ state: "unavailable", reason: "artifact_base_unavailable" });
66
+ }
67
+ // Lexical normalization can retarget symlink/.. references; anchor cwd without rewriting the declared path.
68
+ const path = isAbsolute(item.path) ? item.path : `${cwd}${(cwd as string).endsWith(sep) ? "" : sep}${item.path}`;
69
+ references.push(Object.freeze({ name, path,
70
+ ...(typeof item.kind === "string" ? { kind: item.kind } : {}),
71
+ ...(typeof item.media_type === "string" ? { media_type: item.media_type } : {}),
72
+ ...(typeof item.required === "boolean" ? { required: item.required } : {}) }));
73
+ }
74
+ return Object.freeze({ state: "available", references: Object.freeze(references) });
75
+ }
76
+
77
+ /** Readability/stat evidence only. A declared file need not have been created by this Run and is never hashed here. */
78
+ export function observeRunArtifactReference(reference: Readonly<RunArtifactReference>): RunArtifactObservation {
79
+ const unavailable = (reason: NonNullable<RunArtifactObservation["reason"]>): RunArtifactObservation =>
80
+ Object.freeze({ ...reference, availability: "unavailable", reason });
81
+ let observed = false;
82
+ try {
83
+ const before = lstatSync(reference.path, { bigint: true });
84
+ observed = true;
85
+ if (!before.isFile()) return unavailable("artifact_not_regular");
86
+ const same = (right: typeof before): boolean => right.isFile() && before.dev === right.dev && before.ino === right.ino &&
87
+ before.size === right.size && before.mtimeNs === right.mtimeNs && before.ctimeNs === right.ctimeNs;
88
+ const fd = openSync(reference.path, "r");
89
+ try {
90
+ if (!same(fstatSync(fd, { bigint: true }))) return unavailable("artifact_changed");
91
+ if (before.size < 0n || before.size > BigInt(Number.MAX_SAFE_INTEGER)) return unavailable("artifact_size_unavailable");
92
+ if (!same(fstatSync(fd, { bigint: true })) || !same(lstatSync(reference.path, { bigint: true }))) return unavailable("artifact_changed");
93
+ return Object.freeze({ ...reference, availability: "available", bytes_total: Number(before.size), modified_at: before.mtime.toISOString() });
94
+ } finally { closeSync(fd); }
95
+ } catch (error) {
96
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") return observed ? unavailable("artifact_changed")
97
+ : Object.freeze({ ...reference, availability: "missing" });
98
+ return unavailable("artifact_unreadable");
99
+ }
100
+ }
101
+
30
102
  function hashArtifactFile(path: string): { sha256: string; size: number } {
31
103
  const fd = openSync(path, "r");
32
104
  try {