@evalops/maestro 0.10.31 → 0.10.33

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 (62) hide show
  1. package/dist/agent/transport/tool-execution.d.ts +1 -0
  2. package/dist/agent/transport/tool-execution.d.ts.map +1 -1
  3. package/dist/agent/transport/tool-execution.js +23 -3
  4. package/dist/agent/transport/tool-execution.js.map +1 -1
  5. package/dist/agent/transport/tool-phase-summary.d.ts +6 -0
  6. package/dist/agent/transport/tool-phase-summary.d.ts.map +1 -0
  7. package/dist/agent/transport/tool-phase-summary.js +99 -0
  8. package/dist/agent/transport/tool-phase-summary.js.map +1 -0
  9. package/dist/agent/transport/tool-safety-pipeline.d.ts +1 -0
  10. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  11. package/dist/agent/transport/tool-safety-pipeline.js +9 -4
  12. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  13. package/dist/agent/transport.d.ts.map +1 -1
  14. package/dist/agent/transport.js +4 -99
  15. package/dist/agent/transport.js.map +1 -1
  16. package/dist/cli/commands/a2a/args.d.ts +13 -0
  17. package/dist/cli/commands/a2a/args.d.ts.map +1 -0
  18. package/dist/cli/commands/a2a/args.js +327 -0
  19. package/dist/cli/commands/a2a/args.js.map +1 -0
  20. package/dist/cli/commands/a2a/discovery.d.ts +40 -0
  21. package/dist/cli/commands/a2a/discovery.d.ts.map +1 -0
  22. package/dist/cli/commands/a2a/discovery.js +150 -0
  23. package/dist/cli/commands/a2a/discovery.js.map +1 -0
  24. package/dist/cli/commands/a2a.d.ts +2 -5
  25. package/dist/cli/commands/a2a.d.ts.map +1 -1
  26. package/dist/cli/commands/a2a.js +4 -474
  27. package/dist/cli/commands/a2a.js.map +1 -1
  28. package/dist/cli.js +1801 -1528
  29. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  30. package/dist/node_modules/@evalops/tui/package.json +1 -1
  31. package/dist/server/app-context.d.ts +7 -0
  32. package/dist/server/app-context.d.ts.map +1 -1
  33. package/dist/server/app-context.js.map +1 -1
  34. package/dist/server/handlers/chat-ws.d.ts.map +1 -1
  35. package/dist/server/handlers/chat-ws.js +42 -24
  36. package/dist/server/handlers/chat-ws.js.map +1 -1
  37. package/dist/server/handlers/chat.d.ts.map +1 -1
  38. package/dist/server/handlers/chat.js +54 -35
  39. package/dist/server/handlers/chat.js.map +1 -1
  40. package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
  41. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  42. package/dist/server/handlers/hosted-runner-identity.js +7 -0
  43. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  44. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  45. package/dist/server/handlers/platform-a2a-push.js +134 -15
  46. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  47. package/dist/server/server-utils.d.ts.map +1 -1
  48. package/dist/server/server-utils.js +12 -0
  49. package/dist/server/server-utils.js.map +1 -1
  50. package/dist/server/session-timeline.d.ts.map +1 -1
  51. package/dist/server/session-timeline.js +13 -0
  52. package/dist/server/session-timeline.js.map +1 -1
  53. package/dist/telemetry/maestro-event-catalog.d.ts +30 -0
  54. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  55. package/dist/telemetry/maestro-event-catalog.js +96 -5
  56. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  57. package/dist/tools/find.d.ts +2 -0
  58. package/dist/tools/find.d.ts.map +1 -1
  59. package/dist/tools/find.js +25 -12
  60. package/dist/tools/find.js.map +1 -1
  61. package/dist/version.json +2 -2
  62. package/package.json +6 -2
@@ -57,21 +57,38 @@ export const MAESTRO_BUS_EVENT_CATALOG = {
57
57
  [MaestroBusEventType.SessionClosed]: entry(MaestroBusEventType.SessionClosed, "session", "MaestroSession", [
58
58
  "fermata.maestro-session-replay-context",
59
59
  "meter.maestro-session-lifecycle",
60
+ "release.maestro-session-final-state",
60
61
  ]),
61
62
  [MaestroBusEventType.InstallCheckCompleted]: entry(MaestroBusEventType.InstallCheckCompleted, "install", "PackageInstallCheck", ["meter.maestro-install-checks", "release.maestro-install-smoke"]),
62
- [MaestroBusEventType.ApprovalHit]: entry(MaestroBusEventType.ApprovalHit, "approval", "ApprovalHit", ["governance.maestro-approval-hit"]),
63
+ [MaestroBusEventType.ApprovalHit]: entry(MaestroBusEventType.ApprovalHit, "approval", "ApprovalHit", ["governance.maestro-approval-hit", "release.maestro-approval-gates"]),
63
64
  [MaestroBusEventType.SandboxViolation]: entry(MaestroBusEventType.SandboxViolation, "safety", "SandboxViolation", ["governance.maestro-sandbox-violation"]),
64
65
  [MaestroBusEventType.FirewallBlock]: entry(MaestroBusEventType.FirewallBlock, "safety", "FirewallBlock", ["governance.maestro-firewall-block"]),
65
66
  [MaestroBusEventType.ToolCallAttempted]: entry(MaestroBusEventType.ToolCallAttempted, "tool", "ToolCallAttempt", ["meter.maestro-tool-call-events"]),
66
- [MaestroBusEventType.ToolCallCompleted]: entry(MaestroBusEventType.ToolCallCompleted, "tool", "ToolCallResult", ["meter.maestro-tool-call-events", "skills.maestro-tool-call-completed"]),
67
+ [MaestroBusEventType.ToolCallCompleted]: entry(MaestroBusEventType.ToolCallCompleted, "tool", "ToolCallResult", [
68
+ "meter.maestro-tool-call-events",
69
+ "release.maestro-tool-success-gates",
70
+ "skills.maestro-tool-call-completed",
71
+ ]),
67
72
  [MaestroBusEventType.ToolCallFailed]: entry(MaestroBusEventType.ToolCallFailed, "tool", "ToolCallResult", [
68
73
  "meter.maestro-tool-call-events",
69
74
  "release.maestro-tool-failure-gates",
70
75
  "skills.maestro-tool-call-failed",
71
76
  ]),
72
- [MaestroBusEventType.ErrorCaptured]: entry(MaestroBusEventType.ErrorCaptured, "error", "MaestroError", ["audit.maestro-errors", "meter.maestro-errors"]),
73
- [MaestroBusEventType.ArtifactCreated]: entry(MaestroBusEventType.ArtifactCreated, "artifact", "MaestroArtifact", ["fermata.maestro-artifacts", "meter.maestro-artifacts"]),
74
- [MaestroBusEventType.FinalStatusReported]: entry(MaestroBusEventType.FinalStatusReported, "final-status", "MaestroFinalStatus", ["fermata.maestro-final-status", "meter.maestro-final-status"]),
77
+ [MaestroBusEventType.ErrorCaptured]: entry(MaestroBusEventType.ErrorCaptured, "error", "MaestroError", [
78
+ "audit.maestro-errors",
79
+ "meter.maestro-errors",
80
+ "release.maestro-error-gates",
81
+ ]),
82
+ [MaestroBusEventType.ArtifactCreated]: entry(MaestroBusEventType.ArtifactCreated, "artifact", "MaestroArtifact", [
83
+ "fermata.maestro-artifacts",
84
+ "meter.maestro-artifacts",
85
+ "release.maestro-artifact-gates",
86
+ ]),
87
+ [MaestroBusEventType.FinalStatusReported]: entry(MaestroBusEventType.FinalStatusReported, "final-status", "MaestroFinalStatus", [
88
+ "fermata.maestro-final-status",
89
+ "meter.maestro-final-status",
90
+ "release.maestro-final-status-gates",
91
+ ]),
75
92
  [MaestroBusEventType.PromptVariantSelected]: entry(MaestroBusEventType.PromptVariantSelected, "prompt", "PromptVariantSelected", ["prompts.maestro-prompt-variant-selected"]),
76
93
  [MaestroBusEventType.ContextLearned]: entry(MaestroBusEventType.ContextLearned, "knowledge", "MaestroLearnedContext", ["cerebro.maestro-learned-context"]),
77
94
  [MaestroBusEventType.SkillInvoked]: entry(MaestroBusEventType.SkillInvoked, "skill", "SkillInvocation", ["skills.maestro-skill-events"]),
@@ -106,6 +123,19 @@ export const MAESTRO_RELEASE_GATE_EVENT_CATEGORIES = [
106
123
  "artifact",
107
124
  "final-status",
108
125
  ];
126
+ export const MAESTRO_RELEASE_GATE_EVENT_SUBJECTS_BY_CATEGORY = {
127
+ install: [MaestroBusEventType.InstallCheckCompleted],
128
+ session: [MaestroBusEventType.SessionClosed],
129
+ tool: [
130
+ MaestroBusEventType.ToolCallCompleted,
131
+ MaestroBusEventType.ToolCallFailed,
132
+ ],
133
+ approval: [MaestroBusEventType.ApprovalHit],
134
+ error: [MaestroBusEventType.ErrorCaptured],
135
+ artifact: [MaestroBusEventType.ArtifactCreated],
136
+ "final-status": [MaestroBusEventType.FinalStatusReported],
137
+ };
138
+ export const MAESTRO_RELEASE_GATE_EVENT_SUBJECTS = Object.values(MAESTRO_RELEASE_GATE_EVENT_SUBJECTS_BY_CATEGORY).flat();
109
139
  export function isMaestroBusEventType(value) {
110
140
  return MAESTRO_BUS_EVENT_TYPES.includes(value);
111
141
  }
@@ -118,8 +148,69 @@ export function listMaestroBusEventCatalog() {
118
148
  export function listMaestroBusEventCatalogByCategory(category) {
119
149
  return listMaestroBusEventCatalog().filter((entry) => entry.category === category);
120
150
  }
151
+ export function listMaestroReleaseGateEventCatalog(catalog = listMaestroBusEventCatalog()) {
152
+ const releaseGateCategories = new Set(MAESTRO_RELEASE_GATE_EVENT_CATEGORIES);
153
+ return catalog.filter((entry) => releaseGateCategories.has(entry.category) &&
154
+ entry.platformConsumers.some((consumer) => consumer.startsWith("release.")));
155
+ }
121
156
  export function getMissingMaestroReleaseGateEventCategories(catalog = listMaestroBusEventCatalog()) {
122
157
  const coveredCategories = new Set(catalog.map((entry) => entry.category));
123
158
  return MAESTRO_RELEASE_GATE_EVENT_CATEGORIES.filter((category) => !coveredCategories.has(category));
124
159
  }
160
+ export function getMissingMaestroReleaseGateConsumerCategories(catalog = listMaestroBusEventCatalog()) {
161
+ return MAESTRO_RELEASE_GATE_EVENT_CATEGORIES.filter((category) => !catalog
162
+ .filter((entry) => entry.category === category)
163
+ .some((entry) => entry.platformConsumers.some((consumer) => consumer.startsWith("release."))));
164
+ }
165
+ export function getUnexpectedMaestroReleaseGateEventSubjects(catalog = listMaestroBusEventCatalog()) {
166
+ const expectedSubjects = new Set(MAESTRO_RELEASE_GATE_EVENT_SUBJECTS);
167
+ return buildMaestroReleaseGateEventQuery(catalog).subjects.filter((subject) => !expectedSubjects.has(subject));
168
+ }
169
+ export function getMismatchedMaestroReleaseGateEventSubjectCategories(catalog = listMaestroBusEventCatalog()) {
170
+ const query = buildMaestroReleaseGateEventQuery(catalog);
171
+ return MAESTRO_RELEASE_GATE_EVENT_CATEGORIES.flatMap((category) => {
172
+ const actualSubjects = [
173
+ ...query.subjectsByCategory[category],
174
+ ].sort();
175
+ const expectedSubjects = [
176
+ ...MAESTRO_RELEASE_GATE_EVENT_SUBJECTS_BY_CATEGORY[category],
177
+ ].sort();
178
+ const actualSubjectSet = new Set(actualSubjects);
179
+ const expectedSubjectSet = new Set(expectedSubjects);
180
+ const missingSubjects = expectedSubjects.filter((subject) => !actualSubjectSet.has(subject));
181
+ const unexpectedSubjects = actualSubjects.filter((subject) => !expectedSubjectSet.has(subject));
182
+ if (missingSubjects.length === 0 && unexpectedSubjects.length === 0) {
183
+ return [];
184
+ }
185
+ return [
186
+ {
187
+ actualSubjects,
188
+ category,
189
+ expectedSubjects,
190
+ missingSubjects,
191
+ unexpectedSubjects,
192
+ },
193
+ ];
194
+ });
195
+ }
196
+ function uniqueSorted(values) {
197
+ return Array.from(new Set(values)).sort();
198
+ }
199
+ export function buildMaestroReleaseGateEventQuery(catalog = listMaestroBusEventCatalog()) {
200
+ const releaseCatalog = listMaestroReleaseGateEventCatalog(catalog);
201
+ const subjectsByCategory = {};
202
+ for (const category of MAESTRO_RELEASE_GATE_EVENT_CATEGORIES) {
203
+ subjectsByCategory[category] = releaseCatalog
204
+ .filter((entry) => entry.category === category)
205
+ .map((entry) => entry.type);
206
+ }
207
+ return {
208
+ categories: MAESTRO_RELEASE_GATE_EVENT_CATEGORIES,
209
+ dataSchemas: uniqueSorted(releaseCatalog.map((entry) => entry.dataSchema)),
210
+ platformConsumers: uniqueSorted(releaseCatalog.flatMap((entry) => entry.platformConsumers)),
211
+ protoAnyTypes: uniqueSorted(releaseCatalog.map((entry) => entry.protoAnyType)),
212
+ subjects: releaseCatalog.map((entry) => entry.subject),
213
+ subjectsByCategory,
214
+ };
215
+ }
125
216
  //# sourceMappingURL=maestro-event-catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"maestro-event-catalog.js","sourceRoot":"","sources":["../../src/telemetry/maestro-event-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["export enum MaestroBusEventType {\n\tSessionStarted = \"maestro.sessions.session.started\",\n\tSessionSuspended = \"maestro.sessions.session.suspended\",\n\tSessionResumed = \"maestro.sessions.session.resumed\",\n\tSessionClosed = \"maestro.sessions.session.closed\",\n\tInstallCheckCompleted = \"maestro.events.install_check.completed\",\n\tApprovalHit = \"maestro.events.approval_hit\",\n\tSandboxViolation = \"maestro.events.sandbox_violation\",\n\tFirewallBlock = \"maestro.events.firewall_block\",\n\tToolCallAttempted = \"maestro.events.tool_call.attempted\",\n\tToolCallCompleted = \"maestro.events.tool_call.completed\",\n\tToolCallFailed = \"maestro.events.tool_call.failed\",\n\tErrorCaptured = \"maestro.events.error.captured\",\n\tArtifactCreated = \"maestro.events.artifact.created\",\n\tFinalStatusReported = \"maestro.events.final_status.reported\",\n\tPromptVariantSelected = \"maestro.events.prompt_variant.selected\",\n\tContextLearned = \"maestro.events.context.learned\",\n\tSkillInvoked = \"maestro.events.skill.invoked\",\n\tSkillSucceeded = \"maestro.events.skill.succeeded\",\n\tSkillFailed = \"maestro.events.skill.failed\",\n\tSubagentDispatched = \"maestro.events.subagent.dispatched\",\n\tA2APeerSelected = \"maestro.events.a2a.peer.selected\",\n\tA2ATaskDispatched = \"maestro.events.a2a.task.dispatched\",\n\tA2ATaskProgress = \"maestro.events.a2a.task.progress\",\n\tA2ATaskCompleted = \"maestro.events.a2a.task.completed\",\n\tA2ATaskFailed = \"maestro.events.a2a.task.failed\",\n\tA2ATaskCancelled = \"maestro.events.a2a.task.cancelled\",\n\tA2APushReceived = \"maestro.events.a2a.push.received\",\n\tA2AEvidenceCompleted = \"maestro.events.a2a.evidence.completed\",\n\tEvalScored = \"maestro.events.eval.scored\",\n}\n\nexport type MaestroBusEventCategory =\n\t| \"session\"\n\t| \"install\"\n\t| \"agent\"\n\t| \"approval\"\n\t| \"safety\"\n\t| \"tool\"\n\t| \"error\"\n\t| \"artifact\"\n\t| \"final-status\"\n\t| \"prompt\"\n\t| \"knowledge\"\n\t| \"skill\"\n\t| \"a2a\"\n\t| \"eval\";\n\nexport interface MaestroBusEventCatalogEntry {\n\tcategory: MaestroBusEventCategory;\n\tdataSchema: string;\n\tplatformConsumers: readonly string[];\n\tprotoAnyType: string;\n\tsubject: MaestroBusEventType;\n\ttype: MaestroBusEventType;\n}\n\nconst auditConsumer = \"audit.maestro-events\";\n\nfunction entry(\n\ttype: MaestroBusEventType,\n\tcategory: MaestroBusEventCategory,\n\tprotoMessage: string,\n\tplatformConsumers: readonly string[],\n): MaestroBusEventCatalogEntry {\n\treturn {\n\t\tcategory,\n\t\tdataSchema: `buf.build/evalops/proto/maestro.v1.${protoMessage}`,\n\t\tplatformConsumers: [auditConsumer, ...platformConsumers].sort(),\n\t\tprotoAnyType: `type.googleapis.com/maestro.v1.${protoMessage}`,\n\t\tsubject: type,\n\t\ttype,\n\t};\n}\n\nexport const MAESTRO_BUS_EVENT_CATALOG = {\n\t[MaestroBusEventType.SessionStarted]: entry(\n\t\tMaestroBusEventType.SessionStarted,\n\t\t\"session\",\n\t\t\"MaestroSession\",\n\t\t[\n\t\t\t\"fermata.maestro-session-replay-context\",\n\t\t\t\"meter.maestro-session-lifecycle\",\n\t\t],\n\t),\n\t[MaestroBusEventType.SessionSuspended]: entry(\n\t\tMaestroBusEventType.SessionSuspended,\n\t\t\"session\",\n\t\t\"MaestroSession\",\n\t\t[\n\t\t\t\"fermata.maestro-session-replay-context\",\n\t\t\t\"meter.maestro-session-lifecycle\",\n\t\t],\n\t),\n\t[MaestroBusEventType.SessionResumed]: entry(\n\t\tMaestroBusEventType.SessionResumed,\n\t\t\"session\",\n\t\t\"MaestroSession\",\n\t\t[\n\t\t\t\"fermata.maestro-session-replay-context\",\n\t\t\t\"meter.maestro-session-lifecycle\",\n\t\t],\n\t),\n\t[MaestroBusEventType.SessionClosed]: entry(\n\t\tMaestroBusEventType.SessionClosed,\n\t\t\"session\",\n\t\t\"MaestroSession\",\n\t\t[\n\t\t\t\"fermata.maestro-session-replay-context\",\n\t\t\t\"meter.maestro-session-lifecycle\",\n\t\t],\n\t),\n\t[MaestroBusEventType.InstallCheckCompleted]: entry(\n\t\tMaestroBusEventType.InstallCheckCompleted,\n\t\t\"install\",\n\t\t\"PackageInstallCheck\",\n\t\t[\"meter.maestro-install-checks\", \"release.maestro-install-smoke\"],\n\t),\n\t[MaestroBusEventType.ApprovalHit]: entry(\n\t\tMaestroBusEventType.ApprovalHit,\n\t\t\"approval\",\n\t\t\"ApprovalHit\",\n\t\t[\"governance.maestro-approval-hit\"],\n\t),\n\t[MaestroBusEventType.SandboxViolation]: entry(\n\t\tMaestroBusEventType.SandboxViolation,\n\t\t\"safety\",\n\t\t\"SandboxViolation\",\n\t\t[\"governance.maestro-sandbox-violation\"],\n\t),\n\t[MaestroBusEventType.FirewallBlock]: entry(\n\t\tMaestroBusEventType.FirewallBlock,\n\t\t\"safety\",\n\t\t\"FirewallBlock\",\n\t\t[\"governance.maestro-firewall-block\"],\n\t),\n\t[MaestroBusEventType.ToolCallAttempted]: entry(\n\t\tMaestroBusEventType.ToolCallAttempted,\n\t\t\"tool\",\n\t\t\"ToolCallAttempt\",\n\t\t[\"meter.maestro-tool-call-events\"],\n\t),\n\t[MaestroBusEventType.ToolCallCompleted]: entry(\n\t\tMaestroBusEventType.ToolCallCompleted,\n\t\t\"tool\",\n\t\t\"ToolCallResult\",\n\t\t[\"meter.maestro-tool-call-events\", \"skills.maestro-tool-call-completed\"],\n\t),\n\t[MaestroBusEventType.ToolCallFailed]: entry(\n\t\tMaestroBusEventType.ToolCallFailed,\n\t\t\"tool\",\n\t\t\"ToolCallResult\",\n\t\t[\n\t\t\t\"meter.maestro-tool-call-events\",\n\t\t\t\"release.maestro-tool-failure-gates\",\n\t\t\t\"skills.maestro-tool-call-failed\",\n\t\t],\n\t),\n\t[MaestroBusEventType.ErrorCaptured]: entry(\n\t\tMaestroBusEventType.ErrorCaptured,\n\t\t\"error\",\n\t\t\"MaestroError\",\n\t\t[\"audit.maestro-errors\", \"meter.maestro-errors\"],\n\t),\n\t[MaestroBusEventType.ArtifactCreated]: entry(\n\t\tMaestroBusEventType.ArtifactCreated,\n\t\t\"artifact\",\n\t\t\"MaestroArtifact\",\n\t\t[\"fermata.maestro-artifacts\", \"meter.maestro-artifacts\"],\n\t),\n\t[MaestroBusEventType.FinalStatusReported]: entry(\n\t\tMaestroBusEventType.FinalStatusReported,\n\t\t\"final-status\",\n\t\t\"MaestroFinalStatus\",\n\t\t[\"fermata.maestro-final-status\", \"meter.maestro-final-status\"],\n\t),\n\t[MaestroBusEventType.PromptVariantSelected]: entry(\n\t\tMaestroBusEventType.PromptVariantSelected,\n\t\t\"prompt\",\n\t\t\"PromptVariantSelected\",\n\t\t[\"prompts.maestro-prompt-variant-selected\"],\n\t),\n\t[MaestroBusEventType.ContextLearned]: entry(\n\t\tMaestroBusEventType.ContextLearned,\n\t\t\"knowledge\",\n\t\t\"MaestroLearnedContext\",\n\t\t[\"cerebro.maestro-learned-context\"],\n\t),\n\t[MaestroBusEventType.SkillInvoked]: entry(\n\t\tMaestroBusEventType.SkillInvoked,\n\t\t\"skill\",\n\t\t\"SkillInvocation\",\n\t\t[\"skills.maestro-skill-events\"],\n\t),\n\t[MaestroBusEventType.SkillSucceeded]: entry(\n\t\tMaestroBusEventType.SkillSucceeded,\n\t\t\"skill\",\n\t\t\"SkillOutcome\",\n\t\t[\"skills.maestro-skill-events\"],\n\t),\n\t[MaestroBusEventType.SkillFailed]: entry(\n\t\tMaestroBusEventType.SkillFailed,\n\t\t\"skill\",\n\t\t\"SkillOutcome\",\n\t\t[\"skills.maestro-skill-events\"],\n\t),\n\t[MaestroBusEventType.SubagentDispatched]: entry(\n\t\tMaestroBusEventType.SubagentDispatched,\n\t\t\"agent\",\n\t\t\"SubagentDispatch\",\n\t\t[\"agents.maestro-subagent-dispatches\", \"meter.maestro-subagent-dispatches\"],\n\t),\n\t[MaestroBusEventType.A2APeerSelected]: entry(\n\t\tMaestroBusEventType.A2APeerSelected,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2ATaskDispatched]: entry(\n\t\tMaestroBusEventType.A2ATaskDispatched,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2ATaskProgress]: entry(\n\t\tMaestroBusEventType.A2ATaskProgress,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2ATaskCompleted]: entry(\n\t\tMaestroBusEventType.A2ATaskCompleted,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2ATaskFailed]: entry(\n\t\tMaestroBusEventType.A2ATaskFailed,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\n\t\t\t\"a2a.maestro-delegation-events\",\n\t\t\t\"meter.maestro-a2a-delegations\",\n\t\t\t\"release.maestro-a2a-failure-gates\",\n\t\t],\n\t),\n\t[MaestroBusEventType.A2ATaskCancelled]: entry(\n\t\tMaestroBusEventType.A2ATaskCancelled,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2APushReceived]: entry(\n\t\tMaestroBusEventType.A2APushReceived,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2AEvidenceCompleted]: entry(\n\t\tMaestroBusEventType.A2AEvidenceCompleted,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\n\t\t\t\"a2a.maestro-delegation-events\",\n\t\t\t\"meter.maestro-a2a-delegations\",\n\t\t\t\"release.maestro-a2a-evidence-gates\",\n\t\t],\n\t),\n\t[MaestroBusEventType.EvalScored]: entry(\n\t\tMaestroBusEventType.EvalScored,\n\t\t\"eval\",\n\t\t\"MaestroEvalScore\",\n\t\t[\"fermata.maestro-eval-scored\", \"prompts.maestro-eval-scored\"],\n\t),\n} as const satisfies Record<MaestroBusEventType, MaestroBusEventCatalogEntry>;\n\nexport const MAESTRO_BUS_EVENT_TYPES = Object.values(MaestroBusEventType);\n\nexport const MAESTRO_RELEASE_GATE_EVENT_CATEGORIES = [\n\t\"install\",\n\t\"session\",\n\t\"tool\",\n\t\"approval\",\n\t\"error\",\n\t\"artifact\",\n\t\"final-status\",\n] as const satisfies readonly MaestroBusEventCategory[];\n\nexport type MaestroReleaseGateEventCategory =\n\t(typeof MAESTRO_RELEASE_GATE_EVENT_CATEGORIES)[number];\n\nexport function isMaestroBusEventType(\n\tvalue: string,\n): value is MaestroBusEventType {\n\treturn MAESTRO_BUS_EVENT_TYPES.includes(value as MaestroBusEventType);\n}\n\nexport function getMaestroBusEventCatalogEntry(\n\ttype: MaestroBusEventType,\n): MaestroBusEventCatalogEntry {\n\treturn MAESTRO_BUS_EVENT_CATALOG[type];\n}\n\nexport function listMaestroBusEventCatalog(): readonly MaestroBusEventCatalogEntry[] {\n\treturn MAESTRO_BUS_EVENT_TYPES.map(getMaestroBusEventCatalogEntry);\n}\n\nexport function listMaestroBusEventCatalogByCategory(\n\tcategory: MaestroBusEventCategory,\n): readonly MaestroBusEventCatalogEntry[] {\n\treturn listMaestroBusEventCatalog().filter(\n\t\t(entry) => entry.category === category,\n\t);\n}\n\nexport function getMissingMaestroReleaseGateEventCategories(\n\tcatalog: readonly MaestroBusEventCatalogEntry[] = listMaestroBusEventCatalog(),\n): readonly MaestroReleaseGateEventCategory[] {\n\tconst coveredCategories = new Set(catalog.map((entry) => entry.category));\n\treturn MAESTRO_RELEASE_GATE_EVENT_CATEGORIES.filter(\n\t\t(category) => !coveredCategories.has(category),\n\t);\n}\n"]}
1
+ {"version":3,"file":"maestro-event-catalog.js","sourceRoot":"","sources":["../../src/telemetry/maestro-event-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["export enum MaestroBusEventType {\n\tSessionStarted = \"maestro.sessions.session.started\",\n\tSessionSuspended = \"maestro.sessions.session.suspended\",\n\tSessionResumed = \"maestro.sessions.session.resumed\",\n\tSessionClosed = \"maestro.sessions.session.closed\",\n\tInstallCheckCompleted = \"maestro.events.install_check.completed\",\n\tApprovalHit = \"maestro.events.approval_hit\",\n\tSandboxViolation = \"maestro.events.sandbox_violation\",\n\tFirewallBlock = \"maestro.events.firewall_block\",\n\tToolCallAttempted = \"maestro.events.tool_call.attempted\",\n\tToolCallCompleted = \"maestro.events.tool_call.completed\",\n\tToolCallFailed = \"maestro.events.tool_call.failed\",\n\tErrorCaptured = \"maestro.events.error.captured\",\n\tArtifactCreated = \"maestro.events.artifact.created\",\n\tFinalStatusReported = \"maestro.events.final_status.reported\",\n\tPromptVariantSelected = \"maestro.events.prompt_variant.selected\",\n\tContextLearned = \"maestro.events.context.learned\",\n\tSkillInvoked = \"maestro.events.skill.invoked\",\n\tSkillSucceeded = \"maestro.events.skill.succeeded\",\n\tSkillFailed = \"maestro.events.skill.failed\",\n\tSubagentDispatched = \"maestro.events.subagent.dispatched\",\n\tA2APeerSelected = \"maestro.events.a2a.peer.selected\",\n\tA2ATaskDispatched = \"maestro.events.a2a.task.dispatched\",\n\tA2ATaskProgress = \"maestro.events.a2a.task.progress\",\n\tA2ATaskCompleted = \"maestro.events.a2a.task.completed\",\n\tA2ATaskFailed = \"maestro.events.a2a.task.failed\",\n\tA2ATaskCancelled = \"maestro.events.a2a.task.cancelled\",\n\tA2APushReceived = \"maestro.events.a2a.push.received\",\n\tA2AEvidenceCompleted = \"maestro.events.a2a.evidence.completed\",\n\tEvalScored = \"maestro.events.eval.scored\",\n}\n\nexport type MaestroBusEventCategory =\n\t| \"session\"\n\t| \"install\"\n\t| \"agent\"\n\t| \"approval\"\n\t| \"safety\"\n\t| \"tool\"\n\t| \"error\"\n\t| \"artifact\"\n\t| \"final-status\"\n\t| \"prompt\"\n\t| \"knowledge\"\n\t| \"skill\"\n\t| \"a2a\"\n\t| \"eval\";\n\nexport interface MaestroBusEventCatalogEntry {\n\tcategory: MaestroBusEventCategory;\n\tdataSchema: string;\n\tplatformConsumers: readonly string[];\n\tprotoAnyType: string;\n\tsubject: MaestroBusEventType;\n\ttype: MaestroBusEventType;\n}\n\nconst auditConsumer = \"audit.maestro-events\";\n\nfunction entry(\n\ttype: MaestroBusEventType,\n\tcategory: MaestroBusEventCategory,\n\tprotoMessage: string,\n\tplatformConsumers: readonly string[],\n): MaestroBusEventCatalogEntry {\n\treturn {\n\t\tcategory,\n\t\tdataSchema: `buf.build/evalops/proto/maestro.v1.${protoMessage}`,\n\t\tplatformConsumers: [auditConsumer, ...platformConsumers].sort(),\n\t\tprotoAnyType: `type.googleapis.com/maestro.v1.${protoMessage}`,\n\t\tsubject: type,\n\t\ttype,\n\t};\n}\n\nexport const MAESTRO_BUS_EVENT_CATALOG = {\n\t[MaestroBusEventType.SessionStarted]: entry(\n\t\tMaestroBusEventType.SessionStarted,\n\t\t\"session\",\n\t\t\"MaestroSession\",\n\t\t[\n\t\t\t\"fermata.maestro-session-replay-context\",\n\t\t\t\"meter.maestro-session-lifecycle\",\n\t\t],\n\t),\n\t[MaestroBusEventType.SessionSuspended]: entry(\n\t\tMaestroBusEventType.SessionSuspended,\n\t\t\"session\",\n\t\t\"MaestroSession\",\n\t\t[\n\t\t\t\"fermata.maestro-session-replay-context\",\n\t\t\t\"meter.maestro-session-lifecycle\",\n\t\t],\n\t),\n\t[MaestroBusEventType.SessionResumed]: entry(\n\t\tMaestroBusEventType.SessionResumed,\n\t\t\"session\",\n\t\t\"MaestroSession\",\n\t\t[\n\t\t\t\"fermata.maestro-session-replay-context\",\n\t\t\t\"meter.maestro-session-lifecycle\",\n\t\t],\n\t),\n\t[MaestroBusEventType.SessionClosed]: entry(\n\t\tMaestroBusEventType.SessionClosed,\n\t\t\"session\",\n\t\t\"MaestroSession\",\n\t\t[\n\t\t\t\"fermata.maestro-session-replay-context\",\n\t\t\t\"meter.maestro-session-lifecycle\",\n\t\t\t\"release.maestro-session-final-state\",\n\t\t],\n\t),\n\t[MaestroBusEventType.InstallCheckCompleted]: entry(\n\t\tMaestroBusEventType.InstallCheckCompleted,\n\t\t\"install\",\n\t\t\"PackageInstallCheck\",\n\t\t[\"meter.maestro-install-checks\", \"release.maestro-install-smoke\"],\n\t),\n\t[MaestroBusEventType.ApprovalHit]: entry(\n\t\tMaestroBusEventType.ApprovalHit,\n\t\t\"approval\",\n\t\t\"ApprovalHit\",\n\t\t[\"governance.maestro-approval-hit\", \"release.maestro-approval-gates\"],\n\t),\n\t[MaestroBusEventType.SandboxViolation]: entry(\n\t\tMaestroBusEventType.SandboxViolation,\n\t\t\"safety\",\n\t\t\"SandboxViolation\",\n\t\t[\"governance.maestro-sandbox-violation\"],\n\t),\n\t[MaestroBusEventType.FirewallBlock]: entry(\n\t\tMaestroBusEventType.FirewallBlock,\n\t\t\"safety\",\n\t\t\"FirewallBlock\",\n\t\t[\"governance.maestro-firewall-block\"],\n\t),\n\t[MaestroBusEventType.ToolCallAttempted]: entry(\n\t\tMaestroBusEventType.ToolCallAttempted,\n\t\t\"tool\",\n\t\t\"ToolCallAttempt\",\n\t\t[\"meter.maestro-tool-call-events\"],\n\t),\n\t[MaestroBusEventType.ToolCallCompleted]: entry(\n\t\tMaestroBusEventType.ToolCallCompleted,\n\t\t\"tool\",\n\t\t\"ToolCallResult\",\n\t\t[\n\t\t\t\"meter.maestro-tool-call-events\",\n\t\t\t\"release.maestro-tool-success-gates\",\n\t\t\t\"skills.maestro-tool-call-completed\",\n\t\t],\n\t),\n\t[MaestroBusEventType.ToolCallFailed]: entry(\n\t\tMaestroBusEventType.ToolCallFailed,\n\t\t\"tool\",\n\t\t\"ToolCallResult\",\n\t\t[\n\t\t\t\"meter.maestro-tool-call-events\",\n\t\t\t\"release.maestro-tool-failure-gates\",\n\t\t\t\"skills.maestro-tool-call-failed\",\n\t\t],\n\t),\n\t[MaestroBusEventType.ErrorCaptured]: entry(\n\t\tMaestroBusEventType.ErrorCaptured,\n\t\t\"error\",\n\t\t\"MaestroError\",\n\t\t[\n\t\t\t\"audit.maestro-errors\",\n\t\t\t\"meter.maestro-errors\",\n\t\t\t\"release.maestro-error-gates\",\n\t\t],\n\t),\n\t[MaestroBusEventType.ArtifactCreated]: entry(\n\t\tMaestroBusEventType.ArtifactCreated,\n\t\t\"artifact\",\n\t\t\"MaestroArtifact\",\n\t\t[\n\t\t\t\"fermata.maestro-artifacts\",\n\t\t\t\"meter.maestro-artifacts\",\n\t\t\t\"release.maestro-artifact-gates\",\n\t\t],\n\t),\n\t[MaestroBusEventType.FinalStatusReported]: entry(\n\t\tMaestroBusEventType.FinalStatusReported,\n\t\t\"final-status\",\n\t\t\"MaestroFinalStatus\",\n\t\t[\n\t\t\t\"fermata.maestro-final-status\",\n\t\t\t\"meter.maestro-final-status\",\n\t\t\t\"release.maestro-final-status-gates\",\n\t\t],\n\t),\n\t[MaestroBusEventType.PromptVariantSelected]: entry(\n\t\tMaestroBusEventType.PromptVariantSelected,\n\t\t\"prompt\",\n\t\t\"PromptVariantSelected\",\n\t\t[\"prompts.maestro-prompt-variant-selected\"],\n\t),\n\t[MaestroBusEventType.ContextLearned]: entry(\n\t\tMaestroBusEventType.ContextLearned,\n\t\t\"knowledge\",\n\t\t\"MaestroLearnedContext\",\n\t\t[\"cerebro.maestro-learned-context\"],\n\t),\n\t[MaestroBusEventType.SkillInvoked]: entry(\n\t\tMaestroBusEventType.SkillInvoked,\n\t\t\"skill\",\n\t\t\"SkillInvocation\",\n\t\t[\"skills.maestro-skill-events\"],\n\t),\n\t[MaestroBusEventType.SkillSucceeded]: entry(\n\t\tMaestroBusEventType.SkillSucceeded,\n\t\t\"skill\",\n\t\t\"SkillOutcome\",\n\t\t[\"skills.maestro-skill-events\"],\n\t),\n\t[MaestroBusEventType.SkillFailed]: entry(\n\t\tMaestroBusEventType.SkillFailed,\n\t\t\"skill\",\n\t\t\"SkillOutcome\",\n\t\t[\"skills.maestro-skill-events\"],\n\t),\n\t[MaestroBusEventType.SubagentDispatched]: entry(\n\t\tMaestroBusEventType.SubagentDispatched,\n\t\t\"agent\",\n\t\t\"SubagentDispatch\",\n\t\t[\"agents.maestro-subagent-dispatches\", \"meter.maestro-subagent-dispatches\"],\n\t),\n\t[MaestroBusEventType.A2APeerSelected]: entry(\n\t\tMaestroBusEventType.A2APeerSelected,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2ATaskDispatched]: entry(\n\t\tMaestroBusEventType.A2ATaskDispatched,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2ATaskProgress]: entry(\n\t\tMaestroBusEventType.A2ATaskProgress,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2ATaskCompleted]: entry(\n\t\tMaestroBusEventType.A2ATaskCompleted,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2ATaskFailed]: entry(\n\t\tMaestroBusEventType.A2ATaskFailed,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\n\t\t\t\"a2a.maestro-delegation-events\",\n\t\t\t\"meter.maestro-a2a-delegations\",\n\t\t\t\"release.maestro-a2a-failure-gates\",\n\t\t],\n\t),\n\t[MaestroBusEventType.A2ATaskCancelled]: entry(\n\t\tMaestroBusEventType.A2ATaskCancelled,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2APushReceived]: entry(\n\t\tMaestroBusEventType.A2APushReceived,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\"a2a.maestro-delegation-events\", \"meter.maestro-a2a-delegations\"],\n\t),\n\t[MaestroBusEventType.A2AEvidenceCompleted]: entry(\n\t\tMaestroBusEventType.A2AEvidenceCompleted,\n\t\t\"a2a\",\n\t\t\"MaestroA2ADelegationEvent\",\n\t\t[\n\t\t\t\"a2a.maestro-delegation-events\",\n\t\t\t\"meter.maestro-a2a-delegations\",\n\t\t\t\"release.maestro-a2a-evidence-gates\",\n\t\t],\n\t),\n\t[MaestroBusEventType.EvalScored]: entry(\n\t\tMaestroBusEventType.EvalScored,\n\t\t\"eval\",\n\t\t\"MaestroEvalScore\",\n\t\t[\"fermata.maestro-eval-scored\", \"prompts.maestro-eval-scored\"],\n\t),\n} as const satisfies Record<MaestroBusEventType, MaestroBusEventCatalogEntry>;\n\nexport const MAESTRO_BUS_EVENT_TYPES = Object.values(MaestroBusEventType);\n\nexport const MAESTRO_RELEASE_GATE_EVENT_CATEGORIES = [\n\t\"install\",\n\t\"session\",\n\t\"tool\",\n\t\"approval\",\n\t\"error\",\n\t\"artifact\",\n\t\"final-status\",\n] as const satisfies readonly MaestroBusEventCategory[];\n\nexport type MaestroReleaseGateEventCategory =\n\t(typeof MAESTRO_RELEASE_GATE_EVENT_CATEGORIES)[number];\n\nexport const MAESTRO_RELEASE_GATE_EVENT_SUBJECTS_BY_CATEGORY = {\n\tinstall: [MaestroBusEventType.InstallCheckCompleted],\n\tsession: [MaestroBusEventType.SessionClosed],\n\ttool: [\n\t\tMaestroBusEventType.ToolCallCompleted,\n\t\tMaestroBusEventType.ToolCallFailed,\n\t],\n\tapproval: [MaestroBusEventType.ApprovalHit],\n\terror: [MaestroBusEventType.ErrorCaptured],\n\tartifact: [MaestroBusEventType.ArtifactCreated],\n\t\"final-status\": [MaestroBusEventType.FinalStatusReported],\n} as const satisfies Readonly<\n\tRecord<MaestroReleaseGateEventCategory, readonly MaestroBusEventType[]>\n>;\n\nexport const MAESTRO_RELEASE_GATE_EVENT_SUBJECTS = Object.values(\n\tMAESTRO_RELEASE_GATE_EVENT_SUBJECTS_BY_CATEGORY,\n).flat() as readonly MaestroBusEventType[];\n\nexport interface MaestroReleaseGateEventQuery {\n\tcategories: readonly MaestroReleaseGateEventCategory[];\n\tdataSchemas: readonly string[];\n\tplatformConsumers: readonly string[];\n\tprotoAnyTypes: readonly string[];\n\tsubjects: readonly MaestroBusEventType[];\n\tsubjectsByCategory: Readonly<\n\t\tRecord<MaestroReleaseGateEventCategory, readonly MaestroBusEventType[]>\n\t>;\n}\n\nexport interface MaestroReleaseGateEventSubjectCategoryMismatch {\n\tactualSubjects: readonly MaestroBusEventType[];\n\tcategory: MaestroReleaseGateEventCategory;\n\texpectedSubjects: readonly MaestroBusEventType[];\n\tmissingSubjects: readonly MaestroBusEventType[];\n\tunexpectedSubjects: readonly MaestroBusEventType[];\n}\n\nexport function isMaestroBusEventType(\n\tvalue: string,\n): value is MaestroBusEventType {\n\treturn MAESTRO_BUS_EVENT_TYPES.includes(value as MaestroBusEventType);\n}\n\nexport function getMaestroBusEventCatalogEntry(\n\ttype: MaestroBusEventType,\n): MaestroBusEventCatalogEntry {\n\treturn MAESTRO_BUS_EVENT_CATALOG[type];\n}\n\nexport function listMaestroBusEventCatalog(): readonly MaestroBusEventCatalogEntry[] {\n\treturn MAESTRO_BUS_EVENT_TYPES.map(getMaestroBusEventCatalogEntry);\n}\n\nexport function listMaestroBusEventCatalogByCategory(\n\tcategory: MaestroBusEventCategory,\n): readonly MaestroBusEventCatalogEntry[] {\n\treturn listMaestroBusEventCatalog().filter(\n\t\t(entry) => entry.category === category,\n\t);\n}\n\nexport function listMaestroReleaseGateEventCatalog(\n\tcatalog: readonly MaestroBusEventCatalogEntry[] = listMaestroBusEventCatalog(),\n): readonly MaestroBusEventCatalogEntry[] {\n\tconst releaseGateCategories = new Set<MaestroBusEventCategory>(\n\t\tMAESTRO_RELEASE_GATE_EVENT_CATEGORIES,\n\t);\n\treturn catalog.filter(\n\t\t(entry) =>\n\t\t\treleaseGateCategories.has(entry.category) &&\n\t\t\tentry.platformConsumers.some((consumer) =>\n\t\t\t\tconsumer.startsWith(\"release.\"),\n\t\t\t),\n\t);\n}\n\nexport function getMissingMaestroReleaseGateEventCategories(\n\tcatalog: readonly MaestroBusEventCatalogEntry[] = listMaestroBusEventCatalog(),\n): readonly MaestroReleaseGateEventCategory[] {\n\tconst coveredCategories = new Set(catalog.map((entry) => entry.category));\n\treturn MAESTRO_RELEASE_GATE_EVENT_CATEGORIES.filter(\n\t\t(category) => !coveredCategories.has(category),\n\t);\n}\n\nexport function getMissingMaestroReleaseGateConsumerCategories(\n\tcatalog: readonly MaestroBusEventCatalogEntry[] = listMaestroBusEventCatalog(),\n): readonly MaestroReleaseGateEventCategory[] {\n\treturn MAESTRO_RELEASE_GATE_EVENT_CATEGORIES.filter(\n\t\t(category) =>\n\t\t\t!catalog\n\t\t\t\t.filter((entry) => entry.category === category)\n\t\t\t\t.some((entry) =>\n\t\t\t\t\tentry.platformConsumers.some((consumer) =>\n\t\t\t\t\t\tconsumer.startsWith(\"release.\"),\n\t\t\t\t\t),\n\t\t\t\t),\n\t);\n}\n\nexport function getUnexpectedMaestroReleaseGateEventSubjects(\n\tcatalog: readonly MaestroBusEventCatalogEntry[] = listMaestroBusEventCatalog(),\n): readonly MaestroBusEventType[] {\n\tconst expectedSubjects = new Set<MaestroBusEventType>(\n\t\tMAESTRO_RELEASE_GATE_EVENT_SUBJECTS,\n\t);\n\treturn buildMaestroReleaseGateEventQuery(catalog).subjects.filter(\n\t\t(subject) => !expectedSubjects.has(subject),\n\t);\n}\n\nexport function getMismatchedMaestroReleaseGateEventSubjectCategories(\n\tcatalog: readonly MaestroBusEventCatalogEntry[] = listMaestroBusEventCatalog(),\n): readonly MaestroReleaseGateEventSubjectCategoryMismatch[] {\n\tconst query = buildMaestroReleaseGateEventQuery(catalog);\n\treturn MAESTRO_RELEASE_GATE_EVENT_CATEGORIES.flatMap((category) => {\n\t\tconst actualSubjects: MaestroBusEventType[] = [\n\t\t\t...query.subjectsByCategory[category],\n\t\t].sort();\n\t\tconst expectedSubjects: MaestroBusEventType[] = [\n\t\t\t...MAESTRO_RELEASE_GATE_EVENT_SUBJECTS_BY_CATEGORY[category],\n\t\t].sort();\n\t\tconst actualSubjectSet = new Set(actualSubjects);\n\t\tconst expectedSubjectSet = new Set(expectedSubjects);\n\t\tconst missingSubjects = expectedSubjects.filter(\n\t\t\t(subject) => !actualSubjectSet.has(subject),\n\t\t);\n\t\tconst unexpectedSubjects = actualSubjects.filter(\n\t\t\t(subject) => !expectedSubjectSet.has(subject),\n\t\t);\n\t\tif (missingSubjects.length === 0 && unexpectedSubjects.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tactualSubjects,\n\t\t\t\tcategory,\n\t\t\t\texpectedSubjects,\n\t\t\t\tmissingSubjects,\n\t\t\t\tunexpectedSubjects,\n\t\t\t},\n\t\t];\n\t});\n}\n\nfunction uniqueSorted(values: Iterable<string>): readonly string[] {\n\treturn Array.from(new Set(values)).sort();\n}\n\nexport function buildMaestroReleaseGateEventQuery(\n\tcatalog: readonly MaestroBusEventCatalogEntry[] = listMaestroBusEventCatalog(),\n): MaestroReleaseGateEventQuery {\n\tconst releaseCatalog = listMaestroReleaseGateEventCatalog(catalog);\n\tconst subjectsByCategory = {} as Record<\n\t\tMaestroReleaseGateEventCategory,\n\t\treadonly MaestroBusEventType[]\n\t>;\n\tfor (const category of MAESTRO_RELEASE_GATE_EVENT_CATEGORIES) {\n\t\tsubjectsByCategory[category] = releaseCatalog\n\t\t\t.filter((entry) => entry.category === category)\n\t\t\t.map((entry) => entry.type);\n\t}\n\n\treturn {\n\t\tcategories: MAESTRO_RELEASE_GATE_EVENT_CATEGORIES,\n\t\tdataSchemas: uniqueSorted(releaseCatalog.map((entry) => entry.dataSchema)),\n\t\tplatformConsumers: uniqueSorted(\n\t\t\treleaseCatalog.flatMap((entry) => entry.platformConsumers),\n\t\t),\n\t\tprotoAnyTypes: uniqueSorted(\n\t\t\treleaseCatalog.map((entry) => entry.protoAnyType),\n\t\t),\n\t\tsubjects: releaseCatalog.map((entry) => entry.subject),\n\t\tsubjectsByCategory,\n\t};\n}\n"]}
@@ -62,6 +62,8 @@ export type GitignoreRule = {
62
62
  };
63
63
  /** @internal */
64
64
  export declare function isIgnoredByGitignoreRules(relativePath: string, rules: GitignoreRule[], isDirectory?: boolean): boolean;
65
+ /** @internal */
66
+ export declare function getFindGlobPatterns(pattern: string): string[];
65
67
  export declare const findTool: Readonly<{
66
68
  name: string;
67
69
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AA4CH,KAAK,eAAe,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,gBAAgB;AAChB,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA+NF,gBAAgB;AAChB,wBAAgB,yBAAyB,CACxC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,aAAa,EAAE,EACtB,WAAW,UAAQ,GACjB,OAAO,CAQT;AA2BD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;EAwMnB,CAAC"}
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AA4CH,KAAK,eAAe,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,gBAAgB;AAChB,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA+NF,gBAAgB;AAChB,wBAAgB,yBAAyB,CACxC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,aAAa,EAAE,EACtB,WAAW,UAAQ,GACjB,OAAO,CAQT;AA2BD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7D;AAqBD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;EA8LnB,CAAC"}
@@ -275,6 +275,29 @@ function constrainGlobMatches(matches, searchPath, rules) {
275
275
  }
276
276
  return constrained;
277
277
  }
278
+ /** @internal */
279
+ export function getFindGlobPatterns(pattern) {
280
+ const patterns = [pattern];
281
+ const rootEquivalent = pattern.match(/^\*\*[\\/](.+)$/u)?.[1];
282
+ if (rootEquivalent && rootEquivalent !== pattern) {
283
+ patterns.push(rootEquivalent);
284
+ }
285
+ return patterns;
286
+ }
287
+ function findGlobMatches(pattern, searchPath, includeHidden) {
288
+ const matches = new Set();
289
+ for (const globPattern of getFindGlobPatterns(pattern)) {
290
+ for (const match of globSync(globPattern, {
291
+ cwd: searchPath,
292
+ dot: includeHidden,
293
+ nodir: false,
294
+ absolute: true,
295
+ })) {
296
+ matches.add(resolvePath(match));
297
+ }
298
+ }
299
+ return [...matches];
300
+ }
278
301
  export const findTool = createTool({
279
302
  name: "find",
280
303
  label: "find",
@@ -348,12 +371,7 @@ export const findTool = createTool({
348
371
  }
349
372
  if (!output) {
350
373
  // Fallback to globbing when fd returns nothing (handles patterns with subdirectories on some platforms)
351
- const globMatches = globSync(pattern, {
352
- cwd: searchPath,
353
- dot: includeHidden,
354
- nodir: false,
355
- absolute: true,
356
- });
374
+ const globMatches = findGlobMatches(pattern, searchPath, includeHidden);
357
375
  const constrained = constrainGlobMatches(globMatches, searchPath, gitignoreRules);
358
376
  if (constrained.length > 0) {
359
377
  const limited = constrained.slice(0, effectiveLimit);
@@ -401,12 +419,7 @@ export const findTool = createTool({
401
419
  ? searchPath
402
420
  : `${searchPath}${sep}`;
403
421
  const seen = new Set(relativized);
404
- for (const match of globSync(pattern, {
405
- cwd: searchPath,
406
- dot: includeHidden,
407
- nodir: false,
408
- absolute: true,
409
- })) {
422
+ for (const match of findGlobMatches(pattern, searchPath, includeHidden)) {
410
423
  const resolved = resolvePath(match);
411
424
  if (resolved !== searchPath && !resolved.startsWith(searchRoot)) {
412
425
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EACN,OAAO,EACP,UAAU,EACV,QAAQ,EACR,OAAO,IAAI,WAAW,EACtB,GAAG,GACH,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EACV,8EAA8E;KAC/E,CAAC;IACF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,qDAAqD;KAClE,CAAC,CACF;IACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,2CAA2C;KACxD,CAAC,CACF;IACD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,OAAO,CAAC;QACZ,WAAW,EAAE,sCAAsC;KACnD,CAAC,CACF;CACD,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,oBAAoB,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;AAiB7E,SAAS,qBAAqB,CAAC,UAAkB;IAChD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,UAAU,GAAG,UAAU,CAAC;IAC5B,OAAO,IAAI,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM;QACP,CAAC;QACD,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,KAAK,MAAM,QAAQ,IAAI,oBAAoB,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC9C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;IACF,CAAC;IAED,IAAI,CAAC;QACJ,KAAK,MAAM,QAAQ,IAAI,oBAAoB,EAAE,CAAC;YAC7C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,QAAQ,EAAE,EAAE;gBACnD,GAAG,EAAE,UAAU;gBACf,GAAG,EAAE,IAAI;gBACT,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,CAAC,oBAAoB,EAAE,YAAY,CAAC;aAC5C,CAAC,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBACrC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,qBAAqB;IACtB,CAAC;IAED,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC5C,OAAO,CACN,IAAI,KAAK,EAAE;QACX,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CACpE,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC7B,UAAkB,EAClB,SAAiB,EACjB,OAAe,EACf,QAAiB;IAEjB,MAAM,mBAAmB,GAAG,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5D,IAAI,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,WAAW,IAAI,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,OAAO,EAAE,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,uBAAuB,GAAG,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChE,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACvD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,EAAE,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAC;IACzD,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,CAAC;IACpB,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,YAAY,GAAG,CAAC;IAClC,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAChC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QAC3C,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,gCAAgC,CAAC,IAAY;IACrD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1E,UAAU,IAAI,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM;QACP,CAAC;QACD,GAAG,IAAI,CAAC,CAAC;IACV,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe;IAChD,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,qBAAqB,CAC7B,UAAkB,EAClB,cAAwB;IAExB,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAEzC,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACJ,QAAQ,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,IAAI,IAAI,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,SAAS;YACV,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,OAAO,EAAE,CAAC;gBACb,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,SAAS;gBACV,CAAC;YACF,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,OAAO,GAAG,wBAAwB,CACrC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAC5C,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,SAAS;YACV,CAAC;YAED,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;YAC3B,CAAC;YAED,MAAM,aAAa,GAAG,qBAAqB,CAC1C,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,CACR,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpB,SAAS;YACV,CAAC;YACD,KAAK,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,OAAO;gBACP,aAAa;aACb,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACpC,IAAI,CAAC;QACJ,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,IAAmB;IAChE,OAAO,IAAI,CAAC,WAAW;QACtB,CAAC,CAAC,IAAI,KAAK,GAAG;YACb,CAAC,CAAC,IAAI,CAAC,WAAW;YAClB,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;QAChC,CAAC,CAAC,IAAI,CAAC;AACT,CAAC;AAED,SAAS,uBAAuB,CAC/B,IAAY,EACZ,IAAmB,EACnB,WAAoB;IAEpB,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,wBAAwB,CAChC,IAAY,EACZ,KAAsB,EACtB,WAAoB;IAEpB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YACtD,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QACzB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,yBAAyB,CACxC,YAAoB,EACpB,KAAsB,EACtB,WAAW,GAAG,KAAK;IAEnB,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAChD,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QACtD,IAAI,wBAAwB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,wBAAwB,CAAC,cAAc,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB,CAC5B,OAAiB,EACjB,UAAkB,EAClB,KAAsB;IAEtB,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1C,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,GAAG,UAAU,GAAG,GAAG,EAAE,CAAC;IACzB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjE,SAAS;QACV,CAAC;QACD,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC5D,IACC,yBAAyB,CAAC,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,EACzE,CAAC;YACF,SAAS;QACV,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAqC;IACtE,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,WAAW,EACV,wLAAwL;IACzL,MAAM,EAAE,UAAU;IAClB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;QACpC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAEzE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,OAAO;iBACZ,KAAK,CAAC,iDAAiD,CAAC;iBACxD,MAAM,CAAC;gBACP,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,eAAe,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,KAAK,IAAI,aAAa,CAAC;QAE9C,MAAM,IAAI,GAAa;YACtB,QAAQ;YACR,eAAe;YACf,eAAe;YACf,MAAM,CAAC,cAAc,CAAC;SACtB,CAAC;QAEF,yFAAyF;QACzF,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACxE,MAAM,cAAc,GAAG,qBAAqB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACzE,IAAI,OAAO,EAAE,CAAC;YACb,0EAA0E;YAC1E,wEAAwE;YACxE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACP,0EAA0E;YAC1E,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;YACtC,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;YAC3B,GAAG,EAAE,UAAU;SACf,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,OAAO;iBACZ,KAAK,CAAC,qBAAqB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;iBAClD,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAEjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,QAAQ,GACb,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,uBAAuB,MAAM,CAAC,MAAM,EAAE,CAAC;YACjE,OAAO,OAAO;iBACZ,KAAK,CAAC,QAAQ,CAAC;iBACf,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,wGAAwG;YACxG,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE;gBACrC,GAAG,EAAE,UAAU;gBACf,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACd,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,oBAAoB,CACvC,WAAW,EACX,UAAU,EACV,cAAc,CACd,CAAC;YAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;gBACrD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,cAAc,CAAC;gBACtD,MAAM,IAAI,GAAG,OAAO;qBAClB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;qBAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,OAAO,OAAO;qBACZ,IAAI,CACJ,SAAS;oBACR,CAAC,CAAC,GAAG,IAAI,mBAAmB,cAAc,iBAAiB;oBAC3D,CAAC,CAAC,IAAI,CACP;qBACA,MAAM,CAAC;oBACP,OAAO;oBACP,GAAG,EAAE,UAAU;oBACf,SAAS,EAAE,WAAW,CAAC,MAAM;oBAC7B,SAAS;iBACT,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO;iBACZ,IAAI,CAAC,iCAAiC,CAAC;iBACvC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,SAAS;YACV,CAAC;YAED,IAAI,YAAY,GAAG,IAAI,CAAC;YACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,uEAAuE;gBACvE,YAAY,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACxC,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBAClB,IACC,CAAC,OAAO;oBACR,yBAAyB,CACxB,YAAY,EACZ,cAAc,EACd,eAAe,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CACtD,EACA,CAAC;oBACF,SAAS;gBACV,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1C,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,GAAG,UAAU,GAAG,GAAG,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACrC,GAAG,EAAE,UAAU;gBACf,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACd,CAAC,EAAE,CAAC;gBACJ,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACjE,SAAS;gBACV,CAAC;gBACD,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;gBAC5D,IACC,yBAAyB,CACxB,aAAa,EACb,cAAc,EACd,eAAe,CAAC,QAAQ,CAAC,CACzB,EACA,CAAC;oBACF,SAAS;gBACV,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACxB,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACjC,CAAC;YACF,CAAC;QACF,CAAC;QAED,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,MAAM,SAAS,GAAG,KAAK,IAAI,cAAc,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,mBAAmB,cAAc,iBAAiB,CAAC;QAC9D,CAAC;QAED,OAAO,OAAO;aACZ,IAAI,CAAC,MAAM,CAAC;aACZ,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,CAAC;CACD,CAAC,CAAC","sourcesContent":["/**\n * Find Tool - Fast File Discovery with fd\n *\n * This module provides a file search tool that uses `fd` (a fast alternative\n * to `find`) for discovering files by glob pattern. It respects .gitignore\n * files and falls back to glob when fd returns no results.\n *\n * ## Features\n *\n * - **Fast search**: Uses fd for performance on large codebases\n * - **Glob patterns**: Standard glob syntax (*.ts, **\\/*.json, etc.)\n * - **Git-aware**: Automatically respects .gitignore files\n * - **Hidden files**: Optional inclusion of dotfiles\n * - **Path handling**: Supports nested patterns with path separators\n * - **Auto-download**: Automatically downloads fd if not available\n *\n * ## Pattern Examples\n *\n * | Pattern | Matches |\n * |-------------------|----------------------------------|\n * | `*.ts` | TypeScript files in current dir |\n * | `**\\/*.spec.ts` | Test files anywhere |\n * | `src/**\\/*.json` | JSON files under src/ |\n *\n * ## Fallback Behavior\n *\n * If fd returns no results (which can happen with certain patterns on\n * some platforms), the tool falls back to Node.js glob matching to\n * ensure results are returned.\n *\n * ## Limits\n *\n * - Default limit: 1000 results\n * - Maximum buffer: 10MB\n * - Truncation indicator when limit is reached\n *\n * ## Example\n *\n * ```typescript\n * // Find all TypeScript test files\n * findTool.execute('call-id', {\n * pattern: '**\\/*.spec.ts',\n * path: 'src',\n * limit: 100,\n * });\n * ```\n *\n * @module tools/find\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport {\n\tdirname,\n\tisAbsolute,\n\trelative,\n\tresolve as resolvePath,\n\tsep,\n} from \"node:path\";\nimport { Type } from \"@sinclair/typebox\";\nimport { globSync } from \"glob\";\nimport { minimatch } from \"minimatch\";\nimport { getGitRoot } from \"../utils/git.js\";\nimport { expandTildePath } from \"../utils/path-expansion.js\";\nimport { createTool } from \"./tool-dsl.js\";\nimport { ensureTool } from \"./tools-manager.js\";\n\nconst findSchema = Type.Object({\n\tpattern: Type.String({\n\t\tdescription:\n\t\t\t\"Glob pattern to match files, e.g. '*.ts', '**/*.json', or 'src/**/*.spec.ts'\",\n\t}),\n\tpath: Type.Optional(\n\t\tType.String({\n\t\t\tdescription: \"Directory to search in (default: current directory)\",\n\t\t}),\n\t),\n\tlimit: Type.Optional(\n\t\tType.Number({\n\t\t\tdescription: \"Maximum number of results (default: 1000)\",\n\t\t}),\n\t),\n\tincludeHidden: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"Include hidden files (default: true)\",\n\t\t}),\n\t),\n});\n\nconst DEFAULT_LIMIT = 1000;\nconst FD_IGNORE_FILE_NAMES = [\".gitignore\", \".ignore\", \".fdignore\"] as const;\n\ntype FindToolDetails = {\n\tcommand: string;\n\tcwd: string;\n\tfileCount: number;\n\ttruncated: boolean;\n};\n\n/** @internal */\nexport type GitignoreRule = {\n\tpattern: string;\n\tnegated: boolean;\n\tdirectoryOnly: boolean;\n\tmatchPrefix?: string;\n};\n\nfunction collectGitignoreFiles(searchPath: string): string[] {\n\tconst gitignoreFiles = new Set<string>();\n\tconst ancestorDirs: string[] = [];\n\tlet currentDir = searchPath;\n\twhile (true) {\n\t\tancestorDirs.push(currentDir);\n\t\tconst parentDir = dirname(currentDir);\n\t\tif (parentDir === currentDir) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrentDir = parentDir;\n\t}\n\n\tfor (const dir of ancestorDirs.reverse()) {\n\t\tfor (const fileName of FD_IGNORE_FILE_NAMES) {\n\t\t\tconst ignoreFile = resolvePath(dir, fileName);\n\t\t\tif (existsSync(ignoreFile)) {\n\t\t\t\tgitignoreFiles.add(ignoreFile);\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\tfor (const fileName of FD_IGNORE_FILE_NAMES) {\n\t\t\tconst nestedGitignores = globSync(`**/${fileName}`, {\n\t\t\t\tcwd: searchPath,\n\t\t\t\tdot: true,\n\t\t\t\tabsolute: true,\n\t\t\t\tignore: [\"**/node_modules/**\", \"**/.git/**\"],\n\t\t\t});\n\t\t\tfor (const file of nestedGitignores) {\n\t\t\t\tgitignoreFiles.add(file);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Ignore glob errors\n\t}\n\n\treturn [...gitignoreFiles];\n}\n\nfunction toGlobPath(path: string): string {\n\treturn path.split(sep).join(\"/\");\n}\n\nfunction relativePathStaysInside(path: string): boolean {\n\treturn (\n\t\tpath === \"\" ||\n\t\t(path !== \"..\" && !path.startsWith(`..${sep}`) && !isAbsolute(path))\n\t);\n}\n\nfunction scopeGitignorePattern(\n\tsearchPath: string,\n\tignoreDir: string,\n\tpattern: string,\n\tanchored: boolean,\n): { matchPrefix?: string; pattern: string } | undefined {\n\tconst ignoreDirFromSearch = relative(searchPath, ignoreDir);\n\tif (relativePathStaysInside(ignoreDirFromSearch)) {\n\t\tconst relativeDir = toGlobPath(ignoreDirFromSearch);\n\t\tconst prefix = relativeDir && relativeDir !== \".\" ? `${relativeDir}/` : \"\";\n\t\treturn { pattern: `${prefix}${pattern}` };\n\t}\n\n\tconst searchPathFromIgnoreDir = relative(ignoreDir, searchPath);\n\tif (!relativePathStaysInside(searchPathFromIgnoreDir)) {\n\t\treturn undefined;\n\t}\n\n\tif (!anchored && !pattern.includes(\"/\")) {\n\t\treturn { pattern: `**/${pattern}` };\n\t}\n\tif (!anchored && pattern.startsWith(\"**/\")) {\n\t\treturn { pattern };\n\t}\n\n\tconst searchPrefix = toGlobPath(searchPathFromIgnoreDir);\n\tif (!searchPrefix || searchPrefix === \".\") {\n\t\treturn { pattern };\n\t}\n\tconst prefix = `${searchPrefix}/`;\n\treturn pattern.startsWith(prefix)\n\t\t? { pattern: pattern.slice(prefix.length) }\n\t\t: { matchPrefix: searchPrefix, pattern };\n}\n\nfunction stripUnescapedTrailingWhitespace(line: string): string {\n\tlet end = line.length;\n\twhile (end > 0 && /\\s/.test(line[end - 1] ?? \"\")) {\n\t\tlet slashCount = 0;\n\t\tfor (let index = end - 2; index >= 0 && line[index] === \"\\\\\"; index -= 1) {\n\t\t\tslashCount += 1;\n\t\t}\n\t\tif (slashCount % 2 === 1) {\n\t\t\tbreak;\n\t\t}\n\t\tend -= 1;\n\t}\n\treturn line.slice(0, end);\n}\n\nfunction unescapeGitignorePattern(pattern: string): string {\n\treturn pattern.replace(/\\\\([#!\\t ])/g, \"$1\");\n}\n\nfunction collectGitignoreRules(\n\tsearchPath: string,\n\tgitignoreFiles: string[],\n): GitignoreRule[] {\n\tconst rules: GitignoreRule[] = [];\n\n\tfor (const gitignorePath of gitignoreFiles) {\n\t\tconst ignoreDir = dirname(gitignorePath);\n\n\t\tlet contents: string;\n\t\ttry {\n\t\t\tcontents = readFileSync(gitignorePath, \"utf8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const rawLine of contents.split(/\\r?\\n/)) {\n\t\t\tlet line = stripUnescapedTrailingWhitespace(rawLine);\n\t\t\tif (!line || line.startsWith(\"#\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst negated = line.startsWith(\"!\");\n\t\t\tif (negated) {\n\t\t\t\tline = line.slice(1);\n\t\t\t\tif (!line) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst anchored = line.startsWith(\"/\");\n\t\t\tconst directoryOnly = line.endsWith(\"/\");\n\t\t\tlet pattern = unescapeGitignorePattern(\n\t\t\t\tline.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\"),\n\t\t\t);\n\t\t\tif (!pattern) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!anchored && !pattern.includes(\"/\")) {\n\t\t\t\tpattern = `**/${pattern}`;\n\t\t\t}\n\n\t\t\tconst scopedPattern = scopeGitignorePattern(\n\t\t\t\tsearchPath,\n\t\t\t\tignoreDir,\n\t\t\t\tpattern,\n\t\t\t\tanchored,\n\t\t\t);\n\t\t\tif (!scopedPattern) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trules.push({\n\t\t\t\tpattern: scopedPattern.pattern,\n\t\t\t\tmatchPrefix: scopedPattern.matchPrefix,\n\t\t\t\tnegated,\n\t\t\t\tdirectoryOnly,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn rules;\n}\n\nfunction pathIsDirectory(path: string): boolean {\n\ttry {\n\t\treturn statSync(path).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction pathAncestors(path: string): string[] {\n\tconst parts = path.split(\"/\").filter(Boolean);\n\tconst ancestors: string[] = [];\n\tfor (let index = 1; index < parts.length; index += 1) {\n\t\tancestors.push(parts.slice(0, index).join(\"/\"));\n\t}\n\treturn ancestors;\n}\n\nfunction gitignoreRuleMatchPath(path: string, rule: GitignoreRule): string {\n\treturn rule.matchPrefix\n\t\t? path === \".\"\n\t\t\t? rule.matchPrefix\n\t\t\t: `${rule.matchPrefix}/${path}`\n\t\t: path;\n}\n\nfunction matchesGitignoreSubject(\n\tpath: string,\n\trule: GitignoreRule,\n\tisDirectory: boolean,\n): boolean {\n\tconst matchPath = gitignoreRuleMatchPath(path, rule);\n\tconst options = { dot: true, nonegate: true };\n\tif (rule.directoryOnly) {\n\t\treturn isDirectory && minimatch(matchPath, rule.pattern, options);\n\t}\n\treturn minimatch(matchPath, rule.pattern, options);\n}\n\nfunction evaluateGitignoreSubject(\n\tpath: string,\n\trules: GitignoreRule[],\n\tisDirectory: boolean,\n): boolean {\n\tlet ignored = false;\n\tfor (const rule of rules) {\n\t\tif (matchesGitignoreSubject(path, rule, isDirectory)) {\n\t\t\tignored = !rule.negated;\n\t\t}\n\t}\n\treturn ignored;\n}\n\n/** @internal */\nexport function isIgnoredByGitignoreRules(\n\trelativePath: string,\n\trules: GitignoreRule[],\n\tisDirectory = false,\n): boolean {\n\tconst normalizedPath = toGlobPath(relativePath);\n\tfor (const ancestor of pathAncestors(normalizedPath)) {\n\t\tif (evaluateGitignoreSubject(ancestor, rules, true)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn evaluateGitignoreSubject(normalizedPath, rules, isDirectory);\n}\n\nfunction constrainGlobMatches(\n\tmatches: string[],\n\tsearchPath: string,\n\trules: GitignoreRule[],\n): string[] {\n\tconst searchRoot = searchPath.endsWith(sep)\n\t\t? searchPath\n\t\t: `${searchPath}${sep}`;\n\tconst constrained: string[] = [];\n\tfor (const match of matches) {\n\t\tconst resolved = resolvePath(match);\n\t\tif (resolved !== searchPath && !resolved.startsWith(searchRoot)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst relativeMatch = relative(searchPath, resolved) || \".\";\n\t\tif (\n\t\t\tisIgnoredByGitignoreRules(relativeMatch, rules, pathIsDirectory(resolved))\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconstrained.push(resolved);\n\t}\n\treturn constrained;\n}\n\nexport const findTool = createTool<typeof findSchema, FindToolDetails>({\n\tname: \"find\",\n\tlabel: \"find\",\n\tdescription:\n\t\t\"Search for files by glob pattern using fd. Returns matching file paths relative to the search directory. Respects .gitignore. Use this for fast file discovery across large codebases.\",\n\tschema: findSchema,\n\tasync run(params, { signal, respond }) {\n\t\tif (signal?.aborted) {\n\t\t\tthrow new Error(\"Operation aborted\");\n\t\t}\n\n\t\tconst { pattern, path: searchDir, limit, includeHidden = true } = params;\n\n\t\tconst fdPath = await ensureTool(\"fd\", true);\n\t\tif (!fdPath) {\n\t\t\treturn respond\n\t\t\t\t.error(\"fd is not available and could not be downloaded\")\n\t\t\t\t.detail({\n\t\t\t\t\tcommand: \"fd\",\n\t\t\t\t\tcwd: process.cwd(),\n\t\t\t\t\tfileCount: 0,\n\t\t\t\t\ttruncated: false,\n\t\t\t\t});\n\t\t}\n\n\t\tconst searchPath = resolvePath(expandTildePath(searchDir || \".\"));\n\t\tconst effectiveLimit = limit ?? DEFAULT_LIMIT;\n\n\t\tconst args: string[] = [\n\t\t\t\"--glob\",\n\t\t\t\"--color=never\",\n\t\t\t\"--max-results\",\n\t\t\tString(effectiveLimit),\n\t\t];\n\n\t\t// If pattern includes path separators, match against the full path so nested globs work.\n\t\tif (pattern.includes(\"/\") || pattern.includes(\"\\\\\")) {\n\t\t\targs.push(\"--full-path\");\n\t\t}\n\n\t\tif (includeHidden) {\n\t\t\targs.push(\"--hidden\");\n\t\t}\n\n\t\tconst gitRoot = getGitRoot(searchPath);\n\t\tconst gitignoreFiles = gitRoot ? [] : collectGitignoreFiles(searchPath);\n\t\tconst gitignoreRules = collectGitignoreRules(searchPath, gitignoreFiles);\n\t\tif (gitRoot) {\n\t\t\t// Force fd to honor repo-native ignore rules even if user config disables\n\t\t\t// VCS ignores, while keeping anchored patterns scoped to the repo root.\n\t\t\targs.push(\"--ignore-vcs\");\n\t\t} else {\n\t\t\t// Let fd discover .gitignore files in their native directories instead of\n\t\t\t// re-scoping them as current-directory --ignore-file inputs.\n\t\t\targs.push(\"--no-require-git\");\n\t\t}\n\n\t\targs.push(pattern);\n\n\t\tconst command = [fdPath, ...args].join(\" \");\n\n\t\tconst result = spawnSync(fdPath, args, {\n\t\t\tencoding: \"utf-8\",\n\t\t\tmaxBuffer: 10 * 1024 * 1024,\n\t\t\tcwd: searchPath,\n\t\t});\n\n\t\tif (signal?.aborted) {\n\t\t\tthrow new Error(\"Operation aborted\");\n\t\t}\n\n\t\tif (result.error) {\n\t\t\treturn respond\n\t\t\t\t.error(`Failed to run fd: ${result.error.message}`)\n\t\t\t\t.detail({ command, cwd: searchPath, fileCount: 0, truncated: false });\n\t\t}\n\n\t\tlet output = result.stdout ?? \"\";\n\n\t\tif (result.status !== 0 && !output) {\n\t\t\tconst errorMsg =\n\t\t\t\tresult.stderr?.trim() || `fd exited with code ${result.status}`;\n\t\t\treturn respond\n\t\t\t\t.error(errorMsg)\n\t\t\t\t.detail({ command, cwd: searchPath, fileCount: 0, truncated: false });\n\t\t}\n\n\t\tif (!output) {\n\t\t\t// Fallback to globbing when fd returns nothing (handles patterns with subdirectories on some platforms)\n\t\t\tconst globMatches = globSync(pattern, {\n\t\t\t\tcwd: searchPath,\n\t\t\t\tdot: includeHidden,\n\t\t\t\tnodir: false,\n\t\t\t\tabsolute: true,\n\t\t\t});\n\t\t\tconst constrained = constrainGlobMatches(\n\t\t\t\tglobMatches,\n\t\t\t\tsearchPath,\n\t\t\t\tgitignoreRules,\n\t\t\t);\n\n\t\t\tif (constrained.length > 0) {\n\t\t\t\tconst limited = constrained.slice(0, effectiveLimit);\n\t\t\t\tconst truncated = constrained.length > effectiveLimit;\n\t\t\t\tconst text = limited\n\t\t\t\t\t.map((abs) => relative(searchPath, abs) || \".\")\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\treturn respond\n\t\t\t\t\t.text(\n\t\t\t\t\t\ttruncated\n\t\t\t\t\t\t\t? `${text}\\n\\n(truncated, ${effectiveLimit} results shown)`\n\t\t\t\t\t\t\t: text,\n\t\t\t\t\t)\n\t\t\t\t\t.detail({\n\t\t\t\t\t\tcommand,\n\t\t\t\t\t\tcwd: searchPath,\n\t\t\t\t\t\tfileCount: constrained.length,\n\t\t\t\t\t\ttruncated,\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn respond\n\t\t\t\t.text(\"No files found matching pattern\")\n\t\t\t\t.detail({ command, cwd: searchPath, fileCount: 0, truncated: false });\n\t\t}\n\n\t\tconst lines = output.split(\"\\n\");\n\t\tconst relativized: string[] = [];\n\n\t\tfor (const rawLine of lines) {\n\t\t\tconst line = rawLine.replace(/\\r$/, \"\");\n\t\t\tif (!line) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet relativePath = line;\n\t\t\tif (line.endsWith(\"\\\\\")) {\n\t\t\t\t// Normalize Windows-style trailing backslash to a single forward slash\n\t\t\t\trelativePath = `${line.slice(0, -1)}/`;\n\t\t\t}\n\n\t\t\tif (relativePath) {\n\t\t\t\tif (\n\t\t\t\t\t!gitRoot &&\n\t\t\t\t\tisIgnoredByGitignoreRules(\n\t\t\t\t\t\trelativePath,\n\t\t\t\t\t\tgitignoreRules,\n\t\t\t\t\t\tpathIsDirectory(resolvePath(searchPath, relativePath)),\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\trelativized.push(relativePath);\n\t\t\t}\n\t\t}\n\n\t\tif (!gitRoot && pattern.includes(\"**/\")) {\n\t\t\tconst searchRoot = searchPath.endsWith(sep)\n\t\t\t\t? searchPath\n\t\t\t\t: `${searchPath}${sep}`;\n\t\t\tconst seen = new Set(relativized);\n\t\t\tfor (const match of globSync(pattern, {\n\t\t\t\tcwd: searchPath,\n\t\t\t\tdot: includeHidden,\n\t\t\t\tnodir: false,\n\t\t\t\tabsolute: true,\n\t\t\t})) {\n\t\t\t\tconst resolved = resolvePath(match);\n\t\t\t\tif (resolved !== searchPath && !resolved.startsWith(searchRoot)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst relativeMatch = relative(searchPath, resolved) || \".\";\n\t\t\t\tif (\n\t\t\t\t\tisIgnoredByGitignoreRules(\n\t\t\t\t\t\trelativeMatch,\n\t\t\t\t\t\tgitignoreRules,\n\t\t\t\t\t\tpathIsDirectory(resolved),\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!seen.has(relativeMatch)) {\n\t\t\t\t\tseen.add(relativeMatch);\n\t\t\t\t\trelativized.push(relativeMatch);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trelativized.sort();\n\t\toutput = relativized.slice(0, effectiveLimit).join(\"\\n\");\n\t\tconst count = relativized.length;\n\t\tconst truncated = count >= effectiveLimit;\n\t\tif (truncated) {\n\t\t\toutput += `\\n\\n(truncated, ${effectiveLimit} results shown)`;\n\t\t}\n\n\t\treturn respond\n\t\t\t.text(output)\n\t\t\t.detail({ command, cwd: searchPath, fileCount: count, truncated });\n\t},\n});\n"]}
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Find Tool - Fast File Discovery with fd\n *\n * This module provides a file search tool that uses `fd` (a fast alternative\n * to `find`) for discovering files by glob pattern. It respects .gitignore\n * files and falls back to glob when fd returns no results.\n *\n * ## Features\n *\n * - **Fast search**: Uses fd for performance on large codebases\n * - **Glob patterns**: Standard glob syntax (*.ts, **\\/*.json, etc.)\n * - **Git-aware**: Automatically respects .gitignore files\n * - **Hidden files**: Optional inclusion of dotfiles\n * - **Path handling**: Supports nested patterns with path separators\n * - **Auto-download**: Automatically downloads fd if not available\n *\n * ## Pattern Examples\n *\n * | Pattern | Matches |\n * |-------------------|----------------------------------|\n * | `*.ts` | TypeScript files in current dir |\n * | `**\\/*.spec.ts` | Test files anywhere |\n * | `src/**\\/*.json` | JSON files under src/ |\n *\n * ## Fallback Behavior\n *\n * If fd returns no results (which can happen with certain patterns on\n * some platforms), the tool falls back to Node.js glob matching to\n * ensure results are returned.\n *\n * ## Limits\n *\n * - Default limit: 1000 results\n * - Maximum buffer: 10MB\n * - Truncation indicator when limit is reached\n *\n * ## Example\n *\n * ```typescript\n * // Find all TypeScript test files\n * findTool.execute('call-id', {\n * pattern: '**\\/*.spec.ts',\n * path: 'src',\n * limit: 100,\n * });\n * ```\n *\n * @module tools/find\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport {\n\tdirname,\n\tisAbsolute,\n\trelative,\n\tresolve as resolvePath,\n\tsep,\n} from \"node:path\";\nimport { Type } from \"@sinclair/typebox\";\nimport { globSync } from \"glob\";\nimport { minimatch } from \"minimatch\";\nimport { getGitRoot } from \"../utils/git.js\";\nimport { expandTildePath } from \"../utils/path-expansion.js\";\nimport { createTool } from \"./tool-dsl.js\";\nimport { ensureTool } from \"./tools-manager.js\";\n\nconst findSchema = Type.Object({\n\tpattern: Type.String({\n\t\tdescription:\n\t\t\t\"Glob pattern to match files, e.g. '*.ts', '**/*.json', or 'src/**/*.spec.ts'\",\n\t}),\n\tpath: Type.Optional(\n\t\tType.String({\n\t\t\tdescription: \"Directory to search in (default: current directory)\",\n\t\t}),\n\t),\n\tlimit: Type.Optional(\n\t\tType.Number({\n\t\t\tdescription: \"Maximum number of results (default: 1000)\",\n\t\t}),\n\t),\n\tincludeHidden: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"Include hidden files (default: true)\",\n\t\t}),\n\t),\n});\n\nconst DEFAULT_LIMIT = 1000;\nconst FD_IGNORE_FILE_NAMES = [\".gitignore\", \".ignore\", \".fdignore\"] as const;\n\ntype FindToolDetails = {\n\tcommand: string;\n\tcwd: string;\n\tfileCount: number;\n\ttruncated: boolean;\n};\n\n/** @internal */\nexport type GitignoreRule = {\n\tpattern: string;\n\tnegated: boolean;\n\tdirectoryOnly: boolean;\n\tmatchPrefix?: string;\n};\n\nfunction collectGitignoreFiles(searchPath: string): string[] {\n\tconst gitignoreFiles = new Set<string>();\n\tconst ancestorDirs: string[] = [];\n\tlet currentDir = searchPath;\n\twhile (true) {\n\t\tancestorDirs.push(currentDir);\n\t\tconst parentDir = dirname(currentDir);\n\t\tif (parentDir === currentDir) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrentDir = parentDir;\n\t}\n\n\tfor (const dir of ancestorDirs.reverse()) {\n\t\tfor (const fileName of FD_IGNORE_FILE_NAMES) {\n\t\t\tconst ignoreFile = resolvePath(dir, fileName);\n\t\t\tif (existsSync(ignoreFile)) {\n\t\t\t\tgitignoreFiles.add(ignoreFile);\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\tfor (const fileName of FD_IGNORE_FILE_NAMES) {\n\t\t\tconst nestedGitignores = globSync(`**/${fileName}`, {\n\t\t\t\tcwd: searchPath,\n\t\t\t\tdot: true,\n\t\t\t\tabsolute: true,\n\t\t\t\tignore: [\"**/node_modules/**\", \"**/.git/**\"],\n\t\t\t});\n\t\t\tfor (const file of nestedGitignores) {\n\t\t\t\tgitignoreFiles.add(file);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Ignore glob errors\n\t}\n\n\treturn [...gitignoreFiles];\n}\n\nfunction toGlobPath(path: string): string {\n\treturn path.split(sep).join(\"/\");\n}\n\nfunction relativePathStaysInside(path: string): boolean {\n\treturn (\n\t\tpath === \"\" ||\n\t\t(path !== \"..\" && !path.startsWith(`..${sep}`) && !isAbsolute(path))\n\t);\n}\n\nfunction scopeGitignorePattern(\n\tsearchPath: string,\n\tignoreDir: string,\n\tpattern: string,\n\tanchored: boolean,\n): { matchPrefix?: string; pattern: string } | undefined {\n\tconst ignoreDirFromSearch = relative(searchPath, ignoreDir);\n\tif (relativePathStaysInside(ignoreDirFromSearch)) {\n\t\tconst relativeDir = toGlobPath(ignoreDirFromSearch);\n\t\tconst prefix = relativeDir && relativeDir !== \".\" ? `${relativeDir}/` : \"\";\n\t\treturn { pattern: `${prefix}${pattern}` };\n\t}\n\n\tconst searchPathFromIgnoreDir = relative(ignoreDir, searchPath);\n\tif (!relativePathStaysInside(searchPathFromIgnoreDir)) {\n\t\treturn undefined;\n\t}\n\n\tif (!anchored && !pattern.includes(\"/\")) {\n\t\treturn { pattern: `**/${pattern}` };\n\t}\n\tif (!anchored && pattern.startsWith(\"**/\")) {\n\t\treturn { pattern };\n\t}\n\n\tconst searchPrefix = toGlobPath(searchPathFromIgnoreDir);\n\tif (!searchPrefix || searchPrefix === \".\") {\n\t\treturn { pattern };\n\t}\n\tconst prefix = `${searchPrefix}/`;\n\treturn pattern.startsWith(prefix)\n\t\t? { pattern: pattern.slice(prefix.length) }\n\t\t: { matchPrefix: searchPrefix, pattern };\n}\n\nfunction stripUnescapedTrailingWhitespace(line: string): string {\n\tlet end = line.length;\n\twhile (end > 0 && /\\s/.test(line[end - 1] ?? \"\")) {\n\t\tlet slashCount = 0;\n\t\tfor (let index = end - 2; index >= 0 && line[index] === \"\\\\\"; index -= 1) {\n\t\t\tslashCount += 1;\n\t\t}\n\t\tif (slashCount % 2 === 1) {\n\t\t\tbreak;\n\t\t}\n\t\tend -= 1;\n\t}\n\treturn line.slice(0, end);\n}\n\nfunction unescapeGitignorePattern(pattern: string): string {\n\treturn pattern.replace(/\\\\([#!\\t ])/g, \"$1\");\n}\n\nfunction collectGitignoreRules(\n\tsearchPath: string,\n\tgitignoreFiles: string[],\n): GitignoreRule[] {\n\tconst rules: GitignoreRule[] = [];\n\n\tfor (const gitignorePath of gitignoreFiles) {\n\t\tconst ignoreDir = dirname(gitignorePath);\n\n\t\tlet contents: string;\n\t\ttry {\n\t\t\tcontents = readFileSync(gitignorePath, \"utf8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const rawLine of contents.split(/\\r?\\n/)) {\n\t\t\tlet line = stripUnescapedTrailingWhitespace(rawLine);\n\t\t\tif (!line || line.startsWith(\"#\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst negated = line.startsWith(\"!\");\n\t\t\tif (negated) {\n\t\t\t\tline = line.slice(1);\n\t\t\t\tif (!line) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst anchored = line.startsWith(\"/\");\n\t\t\tconst directoryOnly = line.endsWith(\"/\");\n\t\t\tlet pattern = unescapeGitignorePattern(\n\t\t\t\tline.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\"),\n\t\t\t);\n\t\t\tif (!pattern) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!anchored && !pattern.includes(\"/\")) {\n\t\t\t\tpattern = `**/${pattern}`;\n\t\t\t}\n\n\t\t\tconst scopedPattern = scopeGitignorePattern(\n\t\t\t\tsearchPath,\n\t\t\t\tignoreDir,\n\t\t\t\tpattern,\n\t\t\t\tanchored,\n\t\t\t);\n\t\t\tif (!scopedPattern) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trules.push({\n\t\t\t\tpattern: scopedPattern.pattern,\n\t\t\t\tmatchPrefix: scopedPattern.matchPrefix,\n\t\t\t\tnegated,\n\t\t\t\tdirectoryOnly,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn rules;\n}\n\nfunction pathIsDirectory(path: string): boolean {\n\ttry {\n\t\treturn statSync(path).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction pathAncestors(path: string): string[] {\n\tconst parts = path.split(\"/\").filter(Boolean);\n\tconst ancestors: string[] = [];\n\tfor (let index = 1; index < parts.length; index += 1) {\n\t\tancestors.push(parts.slice(0, index).join(\"/\"));\n\t}\n\treturn ancestors;\n}\n\nfunction gitignoreRuleMatchPath(path: string, rule: GitignoreRule): string {\n\treturn rule.matchPrefix\n\t\t? path === \".\"\n\t\t\t? rule.matchPrefix\n\t\t\t: `${rule.matchPrefix}/${path}`\n\t\t: path;\n}\n\nfunction matchesGitignoreSubject(\n\tpath: string,\n\trule: GitignoreRule,\n\tisDirectory: boolean,\n): boolean {\n\tconst matchPath = gitignoreRuleMatchPath(path, rule);\n\tconst options = { dot: true, nonegate: true };\n\tif (rule.directoryOnly) {\n\t\treturn isDirectory && minimatch(matchPath, rule.pattern, options);\n\t}\n\treturn minimatch(matchPath, rule.pattern, options);\n}\n\nfunction evaluateGitignoreSubject(\n\tpath: string,\n\trules: GitignoreRule[],\n\tisDirectory: boolean,\n): boolean {\n\tlet ignored = false;\n\tfor (const rule of rules) {\n\t\tif (matchesGitignoreSubject(path, rule, isDirectory)) {\n\t\t\tignored = !rule.negated;\n\t\t}\n\t}\n\treturn ignored;\n}\n\n/** @internal */\nexport function isIgnoredByGitignoreRules(\n\trelativePath: string,\n\trules: GitignoreRule[],\n\tisDirectory = false,\n): boolean {\n\tconst normalizedPath = toGlobPath(relativePath);\n\tfor (const ancestor of pathAncestors(normalizedPath)) {\n\t\tif (evaluateGitignoreSubject(ancestor, rules, true)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn evaluateGitignoreSubject(normalizedPath, rules, isDirectory);\n}\n\nfunction constrainGlobMatches(\n\tmatches: string[],\n\tsearchPath: string,\n\trules: GitignoreRule[],\n): string[] {\n\tconst searchRoot = searchPath.endsWith(sep)\n\t\t? searchPath\n\t\t: `${searchPath}${sep}`;\n\tconst constrained: string[] = [];\n\tfor (const match of matches) {\n\t\tconst resolved = resolvePath(match);\n\t\tif (resolved !== searchPath && !resolved.startsWith(searchRoot)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst relativeMatch = relative(searchPath, resolved) || \".\";\n\t\tif (\n\t\t\tisIgnoredByGitignoreRules(relativeMatch, rules, pathIsDirectory(resolved))\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconstrained.push(resolved);\n\t}\n\treturn constrained;\n}\n\n/** @internal */\nexport function getFindGlobPatterns(pattern: string): string[] {\n\tconst patterns = [pattern];\n\tconst rootEquivalent = pattern.match(/^\\*\\*[\\\\/](.+)$/u)?.[1];\n\tif (rootEquivalent && rootEquivalent !== pattern) {\n\t\tpatterns.push(rootEquivalent);\n\t}\n\treturn patterns;\n}\n\nfunction findGlobMatches(\n\tpattern: string,\n\tsearchPath: string,\n\tincludeHidden: boolean,\n): string[] {\n\tconst matches = new Set<string>();\n\tfor (const globPattern of getFindGlobPatterns(pattern)) {\n\t\tfor (const match of globSync(globPattern, {\n\t\t\tcwd: searchPath,\n\t\t\tdot: includeHidden,\n\t\t\tnodir: false,\n\t\t\tabsolute: true,\n\t\t})) {\n\t\t\tmatches.add(resolvePath(match));\n\t\t}\n\t}\n\treturn [...matches];\n}\n\nexport const findTool = createTool<typeof findSchema, FindToolDetails>({\n\tname: \"find\",\n\tlabel: \"find\",\n\tdescription:\n\t\t\"Search for files by glob pattern using fd. Returns matching file paths relative to the search directory. Respects .gitignore. Use this for fast file discovery across large codebases.\",\n\tschema: findSchema,\n\tasync run(params, { signal, respond }) {\n\t\tif (signal?.aborted) {\n\t\t\tthrow new Error(\"Operation aborted\");\n\t\t}\n\n\t\tconst { pattern, path: searchDir, limit, includeHidden = true } = params;\n\n\t\tconst fdPath = await ensureTool(\"fd\", true);\n\t\tif (!fdPath) {\n\t\t\treturn respond\n\t\t\t\t.error(\"fd is not available and could not be downloaded\")\n\t\t\t\t.detail({\n\t\t\t\t\tcommand: \"fd\",\n\t\t\t\t\tcwd: process.cwd(),\n\t\t\t\t\tfileCount: 0,\n\t\t\t\t\ttruncated: false,\n\t\t\t\t});\n\t\t}\n\n\t\tconst searchPath = resolvePath(expandTildePath(searchDir || \".\"));\n\t\tconst effectiveLimit = limit ?? DEFAULT_LIMIT;\n\n\t\tconst args: string[] = [\n\t\t\t\"--glob\",\n\t\t\t\"--color=never\",\n\t\t\t\"--max-results\",\n\t\t\tString(effectiveLimit),\n\t\t];\n\n\t\t// If pattern includes path separators, match against the full path so nested globs work.\n\t\tif (pattern.includes(\"/\") || pattern.includes(\"\\\\\")) {\n\t\t\targs.push(\"--full-path\");\n\t\t}\n\n\t\tif (includeHidden) {\n\t\t\targs.push(\"--hidden\");\n\t\t}\n\n\t\tconst gitRoot = getGitRoot(searchPath);\n\t\tconst gitignoreFiles = gitRoot ? [] : collectGitignoreFiles(searchPath);\n\t\tconst gitignoreRules = collectGitignoreRules(searchPath, gitignoreFiles);\n\t\tif (gitRoot) {\n\t\t\t// Force fd to honor repo-native ignore rules even if user config disables\n\t\t\t// VCS ignores, while keeping anchored patterns scoped to the repo root.\n\t\t\targs.push(\"--ignore-vcs\");\n\t\t} else {\n\t\t\t// Let fd discover .gitignore files in their native directories instead of\n\t\t\t// re-scoping them as current-directory --ignore-file inputs.\n\t\t\targs.push(\"--no-require-git\");\n\t\t}\n\n\t\targs.push(pattern);\n\n\t\tconst command = [fdPath, ...args].join(\" \");\n\n\t\tconst result = spawnSync(fdPath, args, {\n\t\t\tencoding: \"utf-8\",\n\t\t\tmaxBuffer: 10 * 1024 * 1024,\n\t\t\tcwd: searchPath,\n\t\t});\n\n\t\tif (signal?.aborted) {\n\t\t\tthrow new Error(\"Operation aborted\");\n\t\t}\n\n\t\tif (result.error) {\n\t\t\treturn respond\n\t\t\t\t.error(`Failed to run fd: ${result.error.message}`)\n\t\t\t\t.detail({ command, cwd: searchPath, fileCount: 0, truncated: false });\n\t\t}\n\n\t\tlet output = result.stdout ?? \"\";\n\n\t\tif (result.status !== 0 && !output) {\n\t\t\tconst errorMsg =\n\t\t\t\tresult.stderr?.trim() || `fd exited with code ${result.status}`;\n\t\t\treturn respond\n\t\t\t\t.error(errorMsg)\n\t\t\t\t.detail({ command, cwd: searchPath, fileCount: 0, truncated: false });\n\t\t}\n\n\t\tif (!output) {\n\t\t\t// Fallback to globbing when fd returns nothing (handles patterns with subdirectories on some platforms)\n\t\t\tconst globMatches = findGlobMatches(pattern, searchPath, includeHidden);\n\t\t\tconst constrained = constrainGlobMatches(\n\t\t\t\tglobMatches,\n\t\t\t\tsearchPath,\n\t\t\t\tgitignoreRules,\n\t\t\t);\n\n\t\t\tif (constrained.length > 0) {\n\t\t\t\tconst limited = constrained.slice(0, effectiveLimit);\n\t\t\t\tconst truncated = constrained.length > effectiveLimit;\n\t\t\t\tconst text = limited\n\t\t\t\t\t.map((abs) => relative(searchPath, abs) || \".\")\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\treturn respond\n\t\t\t\t\t.text(\n\t\t\t\t\t\ttruncated\n\t\t\t\t\t\t\t? `${text}\\n\\n(truncated, ${effectiveLimit} results shown)`\n\t\t\t\t\t\t\t: text,\n\t\t\t\t\t)\n\t\t\t\t\t.detail({\n\t\t\t\t\t\tcommand,\n\t\t\t\t\t\tcwd: searchPath,\n\t\t\t\t\t\tfileCount: constrained.length,\n\t\t\t\t\t\ttruncated,\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn respond\n\t\t\t\t.text(\"No files found matching pattern\")\n\t\t\t\t.detail({ command, cwd: searchPath, fileCount: 0, truncated: false });\n\t\t}\n\n\t\tconst lines = output.split(\"\\n\");\n\t\tconst relativized: string[] = [];\n\n\t\tfor (const rawLine of lines) {\n\t\t\tconst line = rawLine.replace(/\\r$/, \"\");\n\t\t\tif (!line) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet relativePath = line;\n\t\t\tif (line.endsWith(\"\\\\\")) {\n\t\t\t\t// Normalize Windows-style trailing backslash to a single forward slash\n\t\t\t\trelativePath = `${line.slice(0, -1)}/`;\n\t\t\t}\n\n\t\t\tif (relativePath) {\n\t\t\t\tif (\n\t\t\t\t\t!gitRoot &&\n\t\t\t\t\tisIgnoredByGitignoreRules(\n\t\t\t\t\t\trelativePath,\n\t\t\t\t\t\tgitignoreRules,\n\t\t\t\t\t\tpathIsDirectory(resolvePath(searchPath, relativePath)),\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\trelativized.push(relativePath);\n\t\t\t}\n\t\t}\n\n\t\tif (!gitRoot && pattern.includes(\"**/\")) {\n\t\t\tconst searchRoot = searchPath.endsWith(sep)\n\t\t\t\t? searchPath\n\t\t\t\t: `${searchPath}${sep}`;\n\t\t\tconst seen = new Set(relativized);\n\t\t\tfor (const match of findGlobMatches(pattern, searchPath, includeHidden)) {\n\t\t\t\tconst resolved = resolvePath(match);\n\t\t\t\tif (resolved !== searchPath && !resolved.startsWith(searchRoot)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst relativeMatch = relative(searchPath, resolved) || \".\";\n\t\t\t\tif (\n\t\t\t\t\tisIgnoredByGitignoreRules(\n\t\t\t\t\t\trelativeMatch,\n\t\t\t\t\t\tgitignoreRules,\n\t\t\t\t\t\tpathIsDirectory(resolved),\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!seen.has(relativeMatch)) {\n\t\t\t\t\tseen.add(relativeMatch);\n\t\t\t\t\trelativized.push(relativeMatch);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trelativized.sort();\n\t\toutput = relativized.slice(0, effectiveLimit).join(\"\\n\");\n\t\tconst count = relativized.length;\n\t\tconst truncated = count >= effectiveLimit;\n\t\tif (truncated) {\n\t\t\toutput += `\\n\\n(truncated, ${effectiveLimit} results shown)`;\n\t\t}\n\n\t\treturn respond\n\t\t\t.text(output)\n\t\t\t.detail({ command, cwd: searchPath, fileCount: count, truncated });\n\t},\n});\n"]}
package/dist/version.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "0.10.31",
3
- "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.31 is now available."
2
+ "version": "0.10.33",
3
+ "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.33 is now available."
4
4
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@evalops/maestro",
3
3
  "description": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development",
4
- "version": "0.10.31",
4
+ "version": "0.10.33",
5
5
  "private": false,
6
6
  "type": "module",
7
7
  "workspaces": [
@@ -42,6 +42,7 @@
42
42
  "check:staged-rollout": "node scripts/check-staged-rollout.mjs",
43
43
  "check:context-manifest": "tsx scripts/check-context-manifest-contract.ts",
44
44
  "check:session-wire-contract": "tsx scripts/check-session-wire-contract.ts",
45
+ "check:cli-runtime-conformance": "tsx scripts/check-cli-runtime-conformance.ts",
45
46
  "check:session-replay-fixtures": "tsx scripts/check-session-replay-fixtures.ts",
46
47
  "check:agent-trajectory-fixtures": "tsx scripts/check-agent-trajectory-fixtures.ts",
47
48
  "check:agent-trajectory-replay-fixtures": "tsx scripts/check-agent-trajectory-replay-fixtures.ts",
@@ -51,10 +52,12 @@
51
52
  "check:slack-contract-lab-scenarios": "tsx scripts/check-slack-contract-lab-scenarios.ts",
52
53
  "check:scripted-scenario-fixtures": "tsx scripts/check-scripted-scenario-fixtures.ts",
53
54
  "check:evidence-integrity": "tsx scripts/check-evidence-integrity.ts",
55
+ "check:maestro-release-gate-events": "tsx scripts/check-maestro-release-gate-events.ts",
54
56
  "check:scenario-replay-gate": "node scripts/run-scenario-replay-gate.mjs",
55
57
  "check:codex-parity": "node scripts/check-codex-parity-conformance.mjs",
56
58
  "check:codex-operating-layer": "node scripts/check-codex-operating-layer-conformance.mjs",
57
- "lint:evals": "bun run lint:headless-proto && node scripts/ensure-deps.js --no-install --workspace @evalops/contracts && node scripts/verify-evals.js && node scripts/verify-tool-versions.js && node scripts/validate-system-paths.js && node scripts/validate-package-boundaries.js && node scripts/validate-public-package-deps.js && node scripts/check-public-surface-boundary.mjs && npm run check:context-manifest && npm run check:session-wire-contract && npm run check:evidence-integrity && npm run check:session-replay-fixtures && npm run check:agent-trajectory-fixtures && npm run check:agent-trajectory-replay-fixtures && npm run check:agent-trajectory-score-fixtures && npm run check:agent-trajectory-inspection-fixtures && npm run check:agent-trajectory-scenario-fixtures && npm run check:slack-contract-lab-scenarios && npm run check:scripted-scenario-fixtures && node scripts/session-wire-format-codegen.mjs --check && node scripts/headless-protocol-codegen.mjs --check && npm run check:app-server-schema && npm run check:drift-surfaces && npm run check:staged-rollout && npm run check:codex-parity && npm run check:codex-operating-layer && npm run developer-surface:check",
59
+ "check:release-surface": "node scripts/check-release-surface-conformance.mjs",
60
+ "lint:evals": "bun run lint:headless-proto && node scripts/ensure-deps.js --no-install --workspace @evalops/contracts && node scripts/verify-evals.js && node scripts/verify-tool-versions.js && node scripts/validate-system-paths.js && node scripts/validate-package-boundaries.js && node scripts/validate-public-package-deps.js && node scripts/check-public-surface-boundary.mjs && npm run check:context-manifest && npm run check:session-wire-contract && npm run check:cli-runtime-conformance && npm run check:evidence-integrity && npm run check:maestro-release-gate-events && npm run check:session-replay-fixtures && npm run check:agent-trajectory-fixtures && npm run check:agent-trajectory-replay-fixtures && npm run check:agent-trajectory-score-fixtures && npm run check:agent-trajectory-inspection-fixtures && npm run check:agent-trajectory-scenario-fixtures && npm run check:slack-contract-lab-scenarios && npm run check:scripted-scenario-fixtures && node scripts/session-wire-format-codegen.mjs --check && node scripts/headless-protocol-codegen.mjs --check && npm run check:app-server-schema && npm run check:drift-surfaces && npm run check:staged-rollout && npm run check:codex-parity && npm run check:codex-operating-layer && npm run check:release-surface && npm run developer-surface:check",
58
61
  "platform:sdk-smoke": "tsx scripts/check-platform-sdk-contract.ts",
59
62
  "platform:agentruntime-e2e": "tsx scripts/smoke-platform-agentruntime-lifecycle.ts",
60
63
  "platform:timeline-e2e": "tsx scripts/smoke-platform-timeline-e2e.ts",
@@ -163,6 +166,7 @@
163
166
  "tui-rs:test": "cd packages/tui-rs && cargo test",
164
167
  "release:verify:published": "node scripts/smoke-registry-install.js",
165
168
  "release:verify:published:e2e": "node scripts/smoke-published-replay-e2e.js",
169
+ "release:verify:published:evidence": "node scripts/verify-published-replay-evidence.js",
166
170
  "release:deprecate": "node scripts/deprecate-release.js"
167
171
  },
168
172
  "dependencies": {