@llblab/pi-actors 0.22.4 → 0.23.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 (49) hide show
  1. package/AGENTS.md +1 -0
  2. package/BACKLOG.md +0 -220
  3. package/CHANGELOG.md +23 -1
  4. package/README.md +1 -1
  5. package/dist/index.js +15 -0
  6. package/dist/lib/actor-inspector-tui.d.ts +4 -0
  7. package/dist/lib/actor-inspector-tui.js +53 -12
  8. package/dist/lib/actor-rooms.d.ts +8 -0
  9. package/dist/lib/actor-rooms.js +61 -10
  10. package/dist/lib/async-runs.d.ts +34 -2
  11. package/dist/lib/async-runs.js +215 -22
  12. package/dist/lib/command-templates.js +5 -5
  13. package/dist/lib/limits.d.ts +11 -0
  14. package/dist/lib/limits.js +11 -0
  15. package/dist/lib/observability.js +6 -4
  16. package/dist/lib/output.js +4 -5
  17. package/dist/lib/recipe-discovery.js +1 -0
  18. package/dist/lib/recipe-references.d.ts +11 -2
  19. package/dist/lib/recipe-references.js +4 -2
  20. package/dist/lib/recipe-usage.d.ts +2 -1
  21. package/dist/lib/recipe-usage.js +15 -3
  22. package/dist/lib/runtime.js +12 -2
  23. package/dist/lib/tools.js +197 -38
  24. package/docs/async-runs.md +2 -1
  25. package/docs/template-recipes.md +1 -1
  26. package/docs/tool-registry.md +0 -1
  27. package/index.ts +18 -0
  28. package/lib/actor-inspector-tui.ts +131 -29
  29. package/lib/actor-rooms.ts +155 -44
  30. package/lib/async-runs.ts +290 -31
  31. package/lib/command-templates.ts +5 -5
  32. package/lib/limits.ts +12 -0
  33. package/lib/observability.ts +10 -4
  34. package/lib/output.ts +4 -6
  35. package/lib/recipe-discovery.ts +1 -0
  36. package/lib/recipe-references.ts +20 -4
  37. package/lib/recipe-usage.ts +31 -4
  38. package/lib/runtime.ts +31 -7
  39. package/lib/tools.ts +296 -57
  40. package/package.json +2 -1
  41. package/scripts/async-runner.mjs +6 -0
  42. package/scripts/conformance.mjs +47 -0
  43. package/scripts/coordinator.mjs +13 -0
  44. package/scripts/locker.mjs +13 -0
  45. package/scripts/music-player.mjs +21 -2
  46. package/scripts/recipe-utils.mjs +13 -0
  47. package/scripts/validate-recipe.mjs +13 -0
  48. package/skills/actors/SKILL.md +3 -3
  49. package/skills/swarm/SKILL.md +1 -1
package/lib/runtime.ts CHANGED
@@ -98,9 +98,27 @@ export function createAutoToolsRuntime(
98
98
  runtimeTools.add(cfg.name);
99
99
  runtimeToolFingerprints.set(cfg.name, fingerprint);
100
100
  }
101
+ function isStartupActionableRegistryWarning(warning: string): boolean {
102
+ if (
103
+ warning.includes("invokes bash;") &&
104
+ warning.includes("trusted executable content")
105
+ )
106
+ return false;
107
+ if (
108
+ warning.includes("invokes bash;") &&
109
+ warning.includes("shell scripts are trusted executable content")
110
+ )
111
+ return false;
112
+ return true;
113
+ }
114
+
101
115
  function formatRecipeToolWarnings(warnings: string[]): string {
102
- const shadowed = warnings.filter((warning) => warning.includes(" shadows "));
103
- const skipped = warnings.filter((warning) => warning.includes(" could not be exposed as a tool:"));
116
+ const shadowed = warnings.filter((warning) =>
117
+ warning.includes(" shadows "),
118
+ );
119
+ const skipped = warnings.filter((warning) =>
120
+ warning.includes(" could not be exposed as a tool:"),
121
+ );
104
122
  const other = warnings.filter(
105
123
  (warning) => !shadowed.includes(warning) && !skipped.includes(warning),
106
124
  );
@@ -122,7 +140,8 @@ export function createAutoToolsRuntime(
122
140
  function loadTools(ctx: RuntimeContext) {
123
141
  const warnings: string[] = [];
124
142
  const recipeRoot = deps.recipeRoot ?? Paths.getRecipeRoot();
125
- const packagedRecipeRoot = deps.packagedRecipeRoot ?? Paths.getPackagedRecipeRoot();
143
+ const packagedRecipeRoot =
144
+ deps.packagedRecipeRoot ?? Paths.getPackagedRecipeRoot();
126
145
  const migration = RecipeMigration.migrateLegacyToolRegistry({
127
146
  configPath: deps.configPath,
128
147
  recipeRoot,
@@ -130,9 +149,13 @@ export function createAutoToolsRuntime(
130
149
  });
131
150
  warnings.push(...migration.warnings);
132
151
  if (migration.conflicts.length > 0)
133
- warnings.push(`Recipe migration conflicts: ${migration.conflicts.join(", ")}`);
152
+ warnings.push(
153
+ `Recipe migration conflicts: ${migration.conflicts.join(", ")}`,
154
+ );
134
155
  if (migration.invalid.length > 0)
135
- warnings.push(`Recipe migration invalid entries: ${migration.invalid.join(", ")}`);
156
+ warnings.push(
157
+ `Recipe migration invalid entries: ${migration.invalid.join(", ")}`,
158
+ );
136
159
  const discovered = RecipeDiscovery.discoverRecipeSources([
137
160
  { root: recipeRoot, defaultTool: true, mutableUsage: true },
138
161
  { root: packagedRecipeRoot },
@@ -158,8 +181,9 @@ export function createAutoToolsRuntime(
158
181
  }
159
182
  registerRuntimeTool(cfg);
160
183
  }
161
- if (warnings.length > 0) {
162
- notify(ctx, formatRecipeToolWarnings(warnings), "warning");
184
+ const startupWarnings = warnings.filter(isStartupActionableRegistryWarning);
185
+ if (startupWarnings.length > 0) {
186
+ notify(ctx, formatRecipeToolWarnings(startupWarnings), "warning");
163
187
  }
164
188
  }
165
189
  return {