@caupulican/pi-adaptative 0.80.100 → 0.80.103

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 (126) hide show
  1. package/CHANGELOG.md +201 -0
  2. package/dist/config.d.ts +11 -0
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +17 -3
  5. package/dist/config.js.map +1 -1
  6. package/dist/core/agent-session.d.ts +72 -0
  7. package/dist/core/agent-session.d.ts.map +1 -1
  8. package/dist/core/agent-session.js +437 -46
  9. package/dist/core/agent-session.js.map +1 -1
  10. package/dist/core/autonomy/envelope-enforcement.d.ts +5 -0
  11. package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
  12. package/dist/core/autonomy/envelope-enforcement.js +28 -4
  13. package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
  14. package/dist/core/autonomy/path-scope.d.ts.map +1 -1
  15. package/dist/core/autonomy/path-scope.js +33 -2
  16. package/dist/core/autonomy/path-scope.js.map +1 -1
  17. package/dist/core/bash-executor.d.ts.map +1 -1
  18. package/dist/core/bash-executor.js +15 -7
  19. package/dist/core/bash-executor.js.map +1 -1
  20. package/dist/core/context/brain-curator.d.ts +10 -0
  21. package/dist/core/context/brain-curator.d.ts.map +1 -1
  22. package/dist/core/context/brain-curator.js +19 -2
  23. package/dist/core/context/brain-curator.js.map +1 -1
  24. package/dist/core/context-gc.d.ts +8 -3
  25. package/dist/core/context-gc.d.ts.map +1 -1
  26. package/dist/core/context-gc.js +5 -0
  27. package/dist/core/context-gc.js.map +1 -1
  28. package/dist/core/delegation/worker-actions.d.ts +0 -10
  29. package/dist/core/delegation/worker-actions.d.ts.map +1 -1
  30. package/dist/core/delegation/worker-actions.js +5 -7
  31. package/dist/core/delegation/worker-actions.js.map +1 -1
  32. package/dist/core/delegation/worker-result.d.ts +6 -0
  33. package/dist/core/delegation/worker-result.d.ts.map +1 -1
  34. package/dist/core/delegation/worker-result.js +10 -4
  35. package/dist/core/delegation/worker-result.js.map +1 -1
  36. package/dist/core/delegation/worker-runner.d.ts +3 -0
  37. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  38. package/dist/core/delegation/worker-runner.js +6 -1
  39. package/dist/core/delegation/worker-runner.js.map +1 -1
  40. package/dist/core/doctor.d.ts +66 -0
  41. package/dist/core/doctor.d.ts.map +1 -0
  42. package/dist/core/doctor.js +144 -0
  43. package/dist/core/doctor.js.map +1 -0
  44. package/dist/core/learning/learning-audit.d.ts +13 -1
  45. package/dist/core/learning/learning-audit.d.ts.map +1 -1
  46. package/dist/core/learning/learning-audit.js +22 -1
  47. package/dist/core/learning/learning-audit.js.map +1 -1
  48. package/dist/core/learning/learning-gate.d.ts +3 -0
  49. package/dist/core/learning/learning-gate.d.ts.map +1 -1
  50. package/dist/core/learning/learning-gate.js +13 -4
  51. package/dist/core/learning/learning-gate.js.map +1 -1
  52. package/dist/core/models/local-registration.d.ts +2 -0
  53. package/dist/core/models/local-registration.d.ts.map +1 -1
  54. package/dist/core/models/local-registration.js +2 -1
  55. package/dist/core/models/local-registration.js.map +1 -1
  56. package/dist/core/models/local-runtime.d.ts +76 -2
  57. package/dist/core/models/local-runtime.d.ts.map +1 -1
  58. package/dist/core/models/local-runtime.js +233 -21
  59. package/dist/core/models/local-runtime.js.map +1 -1
  60. package/dist/core/profile-resource-selection.d.ts +15 -3
  61. package/dist/core/profile-resource-selection.d.ts.map +1 -1
  62. package/dist/core/profile-resource-selection.js +19 -9
  63. package/dist/core/profile-resource-selection.js.map +1 -1
  64. package/dist/core/resource-loader.d.ts +20 -0
  65. package/dist/core/resource-loader.d.ts.map +1 -1
  66. package/dist/core/resource-loader.js +42 -16
  67. package/dist/core/resource-loader.js.map +1 -1
  68. package/dist/core/settings-manager.d.ts +30 -0
  69. package/dist/core/settings-manager.d.ts.map +1 -1
  70. package/dist/core/settings-manager.js +65 -3
  71. package/dist/core/settings-manager.js.map +1 -1
  72. package/dist/core/skills.d.ts +14 -0
  73. package/dist/core/skills.d.ts.map +1 -1
  74. package/dist/core/skills.js +8 -0
  75. package/dist/core/skills.js.map +1 -1
  76. package/dist/core/tools/fff-search-backend.d.ts +34 -1
  77. package/dist/core/tools/fff-search-backend.d.ts.map +1 -1
  78. package/dist/core/tools/fff-search-backend.js +43 -4
  79. package/dist/core/tools/fff-search-backend.js.map +1 -1
  80. package/dist/core/tools/find.d.ts +16 -0
  81. package/dist/core/tools/find.d.ts.map +1 -1
  82. package/dist/core/tools/find.js +17 -3
  83. package/dist/core/tools/find.js.map +1 -1
  84. package/dist/core/tools/grep.d.ts +20 -0
  85. package/dist/core/tools/grep.d.ts.map +1 -1
  86. package/dist/core/tools/grep.js +15 -3
  87. package/dist/core/tools/grep.js.map +1 -1
  88. package/dist/main.d.ts.map +1 -1
  89. package/dist/main.js +17 -0
  90. package/dist/main.js.map +1 -1
  91. package/dist/modes/interactive/components/fitness-role-selector.d.ts +6 -2
  92. package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/fitness-role-selector.js +55 -45
  94. package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
  95. package/dist/modes/interactive/components/model-suggestion-selector.d.ts +13 -0
  96. package/dist/modes/interactive/components/model-suggestion-selector.d.ts.map +1 -0
  97. package/dist/modes/interactive/components/model-suggestion-selector.js +40 -0
  98. package/dist/modes/interactive/components/model-suggestion-selector.js.map +1 -0
  99. package/dist/modes/interactive/components/profile-resource-editor.d.ts +3 -0
  100. package/dist/modes/interactive/components/profile-resource-editor.d.ts.map +1 -1
  101. package/dist/modes/interactive/components/profile-resource-editor.js +16 -2
  102. package/dist/modes/interactive/components/profile-resource-editor.js.map +1 -1
  103. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  104. package/dist/modes/interactive/components/settings-selector.js +98 -0
  105. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  106. package/dist/modes/interactive/interactive-mode.d.ts +8 -1
  107. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  108. package/dist/modes/interactive/interactive-mode.js +50 -12
  109. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  110. package/dist/utils/safe-write-stream.d.ts +8 -0
  111. package/dist/utils/safe-write-stream.d.ts.map +1 -1
  112. package/dist/utils/safe-write-stream.js +32 -0
  113. package/dist/utils/safe-write-stream.js.map +1 -1
  114. package/dist/utils/tools-manager.d.ts +92 -2
  115. package/dist/utils/tools-manager.d.ts.map +1 -1
  116. package/dist/utils/tools-manager.js +172 -32
  117. package/dist/utils/tools-manager.js.map +1 -1
  118. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  119. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  120. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  121. package/examples/extensions/sandbox/package-lock.json +2 -2
  122. package/examples/extensions/sandbox/package.json +1 -1
  123. package/examples/extensions/with-deps/package-lock.json +2 -2
  124. package/examples/extensions/with-deps/package.json +1 -1
  125. package/npm-shrinkwrap.json +12 -36
  126. package/package.json +4 -4
@@ -122,18 +122,19 @@ function sanitizeContextFileContent(filePath, content) {
122
122
  console.error(chalk.yellow(`Warning: Blocked context file ${filePath}: ${findings.join(", ")}`));
123
123
  return `[BLOCKED: ${filePath} contained potential prompt injection (${findings.join(", ")}). Content not loaded.]`;
124
124
  }
125
- function loadContextFilesFromDir(dir) {
125
+ /**
126
+ * RAW (unsanitized) context files from `dir`. Sanitization/threat-scanning is DEFERRED to the caller
127
+ * so a profile-DENIED file's content is never processed into the session — only its embedded
128
+ * `<resource-profile>` blocks are read for discovery (see {@link loadRawProjectContextFiles}).
129
+ */
130
+ function loadRawContextFilesFromDir(dir) {
126
131
  const candidates = ["AGENTS.md", "AGENTS.MD", "CLAUDE.md", "CLAUDE.MD", "GEMINI.md", "GEMINI.MD"];
127
132
  const files = [];
128
133
  for (const filename of candidates) {
129
134
  const filePath = join(dir, filename);
130
135
  if (existsSync(filePath)) {
131
136
  try {
132
- const content = readFileSync(filePath, "utf-8");
133
- files.push({
134
- path: filePath,
135
- content: sanitizeContextFileContent(filePath, content),
136
- });
137
+ files.push({ path: filePath, rawContent: readFileSync(filePath, "utf-8") });
137
138
  }
138
139
  catch (error) {
139
140
  console.error(chalk.yellow(`Warning: Could not read ${filePath}: ${error}`));
@@ -142,12 +143,18 @@ function loadContextFilesFromDir(dir) {
142
143
  }
143
144
  return files;
144
145
  }
145
- export function loadProjectContextFiles(options) {
146
+ /**
147
+ * Discover project/agent context files with their RAW content (profile blocks intact, no sanitize).
148
+ * The agents-kind profile filter can be DEFINED inside these same files (embedded `<resource-profile>`
149
+ * blocks), so callers must read raw to discover profiles before knowing which files the filter denies;
150
+ * sanitization/exposure is then applied only to files the filter allows.
151
+ */
152
+ export function loadRawProjectContextFiles(options) {
146
153
  const resolvedCwd = resolvePath(options.cwd);
147
154
  const resolvedAgentDir = resolvePath(options.agentDir);
148
155
  const contextFiles = [];
149
156
  const seenPaths = new Set();
150
- for (const globalContext of loadContextFilesFromDir(resolvedAgentDir)) {
157
+ for (const globalContext of loadRawContextFilesFromDir(resolvedAgentDir)) {
151
158
  contextFiles.push(globalContext);
152
159
  seenPaths.add(globalContext.path);
153
160
  }
@@ -156,7 +163,7 @@ export function loadProjectContextFiles(options) {
156
163
  let currentDir = resolvedCwd;
157
164
  const root = resolve("/");
158
165
  while (true) {
159
- const contextFilesInDir = loadContextFilesFromDir(currentDir).filter((contextFile) => !seenPaths.has(contextFile.path));
166
+ const contextFilesInDir = loadRawContextFilesFromDir(currentDir).filter((contextFile) => !seenPaths.has(contextFile.path));
160
167
  if (contextFilesInDir.length > 0) {
161
168
  ancestorContextFiles.unshift(...contextFilesInDir);
162
169
  for (const contextFile of contextFilesInDir) {
@@ -174,6 +181,18 @@ export function loadProjectContextFiles(options) {
174
181
  }
175
182
  return contextFiles;
176
183
  }
184
+ /**
185
+ * Discover project/agent context files with SANITIZED content (profile blocks stripped, invisible/bidi
186
+ * chars removed, prompt-injection scanned). Every discovered file is sanitized — callers that must
187
+ * respect a profile's agents-kind denial should use {@link loadRawProjectContextFiles} and sanitize
188
+ * only the allowed subset instead, so denied content is never processed.
189
+ */
190
+ export function loadProjectContextFiles(options) {
191
+ return loadRawProjectContextFiles(options).map((file) => ({
192
+ path: file.path,
193
+ content: sanitizeContextFileContent(file.path, file.rawContent),
194
+ }));
195
+ }
177
196
  export class DefaultResourceLoader {
178
197
  cwd;
179
198
  agentDir;
@@ -798,19 +817,27 @@ export class DefaultResourceLoader {
798
817
  this.themeDiagnostics.push({ type: "error", message: "Theme path does not exist", path: resolved });
799
818
  }
800
819
  }
820
+ // Read RAW content once. Sanitization/threat-scanning/exposure is deferred until AFTER the
821
+ // agents filter, so a profile-denied context file's content is never processed into the session.
801
822
  const rawAgentsFiles = this.noContextFiles
802
823
  ? []
803
- : loadProjectContextFiles({
824
+ : loadRawProjectContextFiles({
804
825
  cwd: this.cwd,
805
826
  agentDir: this.agentDir,
806
827
  projectTrusted: this.settingsManager.isProjectTrusted(),
807
828
  });
808
829
  const agentEmbeddedProfiles = {};
809
830
  const activeProfileNames = this.settingsManager.getActiveResourceProfileNames();
831
+ // DISCOVERY read (metadata only, never loading): an embedded <resource-profile> block can live
832
+ // in ANY context file — including one the resulting agents filter then denies (AGENTS.md
833
+ // defining a profile that blocks GEMINI.md is the canonical bootstrap circularity). The filter
834
+ // cannot be known without first scanning every candidate file's raw content, so path-based
835
+ // pre-filtering is impossible for the agents kind. Only profile-block config is extracted here;
836
+ // a denied file's instructional content is never sanitized, threat-scanned, or exposed — it is
837
+ // dropped by the filter below — so the never-read-denied-CONTENT invariant holds.
810
838
  for (const file of rawAgentsFiles) {
811
839
  try {
812
- const rawContent = readFileSync(file.path, "utf-8");
813
- const { profiles } = parseResourceProfileBlocks(rawContent, { profileNames: activeProfileNames });
840
+ const { profiles } = parseResourceProfileBlocks(file.rawContent, { profileNames: activeProfileNames });
814
841
  Object.assign(agentEmbeddedProfiles, mergeResourceProfileMap(agentEmbeddedProfiles, profiles));
815
842
  }
816
843
  catch { }
@@ -827,10 +854,9 @@ export class DefaultResourceLoader {
827
854
  const blocked = matchesResourceProfilePattern(file.path, agentProfileFilter.block, this.cwd);
828
855
  return allowed && !blocked;
829
856
  })
830
- .map((file) => ({
831
- ...file,
832
- content: file.content ? stripResourceProfileBlocks(file.content) : file.content,
833
- })),
857
+ // Sanitize (strip profile blocks + scan threats) ONLY for allowed files — the denied
858
+ // files' raw content was used solely for profile-block discovery above.
859
+ .map((file) => ({ path: file.path, content: sanitizeContextFileContent(file.path, file.rawContent) })),
834
860
  };
835
861
  // Strict UAC silently denying AGENTS.md/CLAUDE.md context is a sharp footgun for lean
836
862
  // profiles — surface it loudly instead of letting instructions vanish without a trace.