archbyte 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +282 -0
  2. package/bin/archbyte.js +213 -0
  3. package/dist/agents/core/component-detector.d.ts +2 -0
  4. package/dist/agents/core/component-detector.js +57 -0
  5. package/dist/agents/core/connection-mapper.d.ts +2 -0
  6. package/dist/agents/core/connection-mapper.js +77 -0
  7. package/dist/agents/core/doc-parser.d.ts +2 -0
  8. package/dist/agents/core/doc-parser.js +64 -0
  9. package/dist/agents/core/env-detector.d.ts +2 -0
  10. package/dist/agents/core/env-detector.js +51 -0
  11. package/dist/agents/core/event-detector.d.ts +2 -0
  12. package/dist/agents/core/event-detector.js +59 -0
  13. package/dist/agents/core/infra-analyzer.d.ts +2 -0
  14. package/dist/agents/core/infra-analyzer.js +72 -0
  15. package/dist/agents/core/structure-scanner.d.ts +2 -0
  16. package/dist/agents/core/structure-scanner.js +55 -0
  17. package/dist/agents/core/validator.d.ts +2 -0
  18. package/dist/agents/core/validator.js +74 -0
  19. package/dist/agents/index.d.ts +24 -0
  20. package/dist/agents/index.js +73 -0
  21. package/dist/agents/llm/index.d.ts +8 -0
  22. package/dist/agents/llm/index.js +185 -0
  23. package/dist/agents/llm/prompt-builder.d.ts +3 -0
  24. package/dist/agents/llm/prompt-builder.js +251 -0
  25. package/dist/agents/llm/response-parser.d.ts +6 -0
  26. package/dist/agents/llm/response-parser.js +174 -0
  27. package/dist/agents/llm/types.d.ts +31 -0
  28. package/dist/agents/llm/types.js +2 -0
  29. package/dist/agents/pipeline/agents/component-identifier.d.ts +3 -0
  30. package/dist/agents/pipeline/agents/component-identifier.js +102 -0
  31. package/dist/agents/pipeline/agents/connection-mapper.d.ts +3 -0
  32. package/dist/agents/pipeline/agents/connection-mapper.js +126 -0
  33. package/dist/agents/pipeline/agents/flow-detector.d.ts +3 -0
  34. package/dist/agents/pipeline/agents/flow-detector.js +101 -0
  35. package/dist/agents/pipeline/agents/service-describer.d.ts +3 -0
  36. package/dist/agents/pipeline/agents/service-describer.js +100 -0
  37. package/dist/agents/pipeline/agents/validator.d.ts +3 -0
  38. package/dist/agents/pipeline/agents/validator.js +102 -0
  39. package/dist/agents/pipeline/index.d.ts +13 -0
  40. package/dist/agents/pipeline/index.js +128 -0
  41. package/dist/agents/pipeline/merger.d.ts +7 -0
  42. package/dist/agents/pipeline/merger.js +212 -0
  43. package/dist/agents/pipeline/response-parser.d.ts +5 -0
  44. package/dist/agents/pipeline/response-parser.js +43 -0
  45. package/dist/agents/pipeline/types.d.ts +92 -0
  46. package/dist/agents/pipeline/types.js +3 -0
  47. package/dist/agents/prompt-data.d.ts +1 -0
  48. package/dist/agents/prompt-data.js +15 -0
  49. package/dist/agents/prompts-encode.d.ts +9 -0
  50. package/dist/agents/prompts-encode.js +26 -0
  51. package/dist/agents/prompts.d.ts +12 -0
  52. package/dist/agents/prompts.js +30 -0
  53. package/dist/agents/providers/anthropic.d.ts +10 -0
  54. package/dist/agents/providers/anthropic.js +117 -0
  55. package/dist/agents/providers/google.d.ts +10 -0
  56. package/dist/agents/providers/google.js +136 -0
  57. package/dist/agents/providers/ollama.d.ts +9 -0
  58. package/dist/agents/providers/ollama.js +162 -0
  59. package/dist/agents/providers/openai.d.ts +9 -0
  60. package/dist/agents/providers/openai.js +142 -0
  61. package/dist/agents/providers/router.d.ts +7 -0
  62. package/dist/agents/providers/router.js +55 -0
  63. package/dist/agents/runtime/orchestrator.d.ts +34 -0
  64. package/dist/agents/runtime/orchestrator.js +193 -0
  65. package/dist/agents/runtime/registry.d.ts +23 -0
  66. package/dist/agents/runtime/registry.js +56 -0
  67. package/dist/agents/runtime/types.d.ts +117 -0
  68. package/dist/agents/runtime/types.js +29 -0
  69. package/dist/agents/static/code-sampler.d.ts +3 -0
  70. package/dist/agents/static/code-sampler.js +153 -0
  71. package/dist/agents/static/component-detector.d.ts +3 -0
  72. package/dist/agents/static/component-detector.js +404 -0
  73. package/dist/agents/static/connection-mapper.d.ts +3 -0
  74. package/dist/agents/static/connection-mapper.js +280 -0
  75. package/dist/agents/static/doc-parser.d.ts +3 -0
  76. package/dist/agents/static/doc-parser.js +358 -0
  77. package/dist/agents/static/env-detector.d.ts +3 -0
  78. package/dist/agents/static/env-detector.js +73 -0
  79. package/dist/agents/static/event-detector.d.ts +3 -0
  80. package/dist/agents/static/event-detector.js +70 -0
  81. package/dist/agents/static/file-tree-collector.d.ts +3 -0
  82. package/dist/agents/static/file-tree-collector.js +51 -0
  83. package/dist/agents/static/index.d.ts +19 -0
  84. package/dist/agents/static/index.js +307 -0
  85. package/dist/agents/static/infra-analyzer.d.ts +3 -0
  86. package/dist/agents/static/infra-analyzer.js +208 -0
  87. package/dist/agents/static/structure-scanner.d.ts +3 -0
  88. package/dist/agents/static/structure-scanner.js +195 -0
  89. package/dist/agents/static/types.d.ts +165 -0
  90. package/dist/agents/static/types.js +2 -0
  91. package/dist/agents/static/utils.d.ts +21 -0
  92. package/dist/agents/static/utils.js +146 -0
  93. package/dist/agents/static/validator.d.ts +2 -0
  94. package/dist/agents/static/validator.js +75 -0
  95. package/dist/agents/tools/claude-code.d.ts +38 -0
  96. package/dist/agents/tools/claude-code.js +129 -0
  97. package/dist/agents/tools/local-fs.d.ts +12 -0
  98. package/dist/agents/tools/local-fs.js +112 -0
  99. package/dist/agents/tools/tool-definitions.d.ts +6 -0
  100. package/dist/agents/tools/tool-definitions.js +66 -0
  101. package/dist/cli/analyze.d.ts +27 -0
  102. package/dist/cli/analyze.js +586 -0
  103. package/dist/cli/auth.d.ts +46 -0
  104. package/dist/cli/auth.js +397 -0
  105. package/dist/cli/config.d.ts +11 -0
  106. package/dist/cli/config.js +177 -0
  107. package/dist/cli/diff.d.ts +10 -0
  108. package/dist/cli/diff.js +144 -0
  109. package/dist/cli/export.d.ts +10 -0
  110. package/dist/cli/export.js +321 -0
  111. package/dist/cli/gate.d.ts +13 -0
  112. package/dist/cli/gate.js +131 -0
  113. package/dist/cli/generate.d.ts +10 -0
  114. package/dist/cli/generate.js +213 -0
  115. package/dist/cli/license-gate.d.ts +27 -0
  116. package/dist/cli/license-gate.js +121 -0
  117. package/dist/cli/patrol.d.ts +15 -0
  118. package/dist/cli/patrol.js +212 -0
  119. package/dist/cli/run.d.ts +11 -0
  120. package/dist/cli/run.js +24 -0
  121. package/dist/cli/serve.d.ts +9 -0
  122. package/dist/cli/serve.js +65 -0
  123. package/dist/cli/setup.d.ts +1 -0
  124. package/dist/cli/setup.js +233 -0
  125. package/dist/cli/shared.d.ts +68 -0
  126. package/dist/cli/shared.js +275 -0
  127. package/dist/cli/stats.d.ts +9 -0
  128. package/dist/cli/stats.js +158 -0
  129. package/dist/cli/ui.d.ts +18 -0
  130. package/dist/cli/ui.js +144 -0
  131. package/dist/cli/validate.d.ts +54 -0
  132. package/dist/cli/validate.js +315 -0
  133. package/dist/cli/workflow.d.ts +10 -0
  134. package/dist/cli/workflow.js +594 -0
  135. package/dist/server/src/generator/index.d.ts +123 -0
  136. package/dist/server/src/generator/index.js +254 -0
  137. package/dist/server/src/index.d.ts +8 -0
  138. package/dist/server/src/index.js +1311 -0
  139. package/package.json +62 -0
  140. package/ui/dist/assets/index-B66Til39.js +70 -0
  141. package/ui/dist/assets/index-BE2OWbzu.css +1 -0
  142. package/ui/dist/index.html +14 -0
@@ -0,0 +1,128 @@
1
+ // Pipeline — Orchestrator
2
+ // Runs static context collection → parallel LLM agents → sequential LLM agents
3
+ import { resolveModel } from "../runtime/types.js";
4
+ import { validateAnalysis } from "../static/validator.js";
5
+ import { componentIdentifier } from "./agents/component-identifier.js";
6
+ import { serviceDescriber } from "./agents/service-describer.js";
7
+ import { flowDetector } from "./agents/flow-detector.js";
8
+ import { connectionMapper } from "./agents/connection-mapper.js";
9
+ import { validator } from "./agents/validator.js";
10
+ import { mergeAgentOutputs } from "./merger.js";
11
+ const PARALLEL_AGENTS = [componentIdentifier, serviceDescriber, flowDetector];
12
+ const SEQUENTIAL_AGENTS = [connectionMapper, validator];
13
+ /** Check if an error is an authentication/API key issue */
14
+ function isAuthError(err) {
15
+ const msg = err instanceof Error ? err.message : String(err);
16
+ return /401|authentication_error|invalid.*api.?key|unauthorized|invalid.*key/i.test(msg);
17
+ }
18
+ /**
19
+ * Run the multi-agent pipeline: 3 parallel fast agents → 2 sequential agents.
20
+ * Each agent gets a single chat() call with pre-collected static context.
21
+ */
22
+ export async function runPipeline(ctx, provider, config, onProgress) {
23
+ const agentResults = {};
24
+ const agentMeta = [];
25
+ // === Phase 1: Parallel agents ===
26
+ onProgress?.(`Phase 1: Running ${PARALLEL_AGENTS.length} agents in parallel...`);
27
+ const parallelResults = await Promise.allSettled(PARALLEL_AGENTS.map((agent) => runAgent(agent, ctx, provider, config, undefined, onProgress)));
28
+ let authFailed = false;
29
+ for (let i = 0; i < PARALLEL_AGENTS.length; i++) {
30
+ const agent = PARALLEL_AGENTS[i];
31
+ const result = parallelResults[i];
32
+ if (result.status === "fulfilled" && result.value) {
33
+ agentResults[agent.id] = result.value.data;
34
+ agentMeta.push(result.value);
35
+ onProgress?.(` ${agent.name}: done (${(result.value.duration / 1000).toFixed(1)}s)`);
36
+ }
37
+ else {
38
+ const reason = result.status === "rejected" ? result.reason : "null response";
39
+ onProgress?.(` ${agent.name}: failed (${reason})`);
40
+ if (result.status === "rejected" && isAuthError(result.reason)) {
41
+ authFailed = true;
42
+ }
43
+ }
44
+ }
45
+ if (authFailed) {
46
+ throw new Error(`API key authentication failed. Check your API key with: archbyte config set api-key <your-key>\n` +
47
+ ` Current provider: ${config.provider}. Get a valid key from your provider's dashboard.`);
48
+ }
49
+ // === Phase 2: Sequential agents ===
50
+ onProgress?.(`Phase 2: Running ${SEQUENTIAL_AGENTS.length} agents sequentially...`);
51
+ for (const agent of SEQUENTIAL_AGENTS) {
52
+ try {
53
+ const result = await runAgent(agent, ctx, provider, config, agentResults, onProgress);
54
+ if (result) {
55
+ agentResults[agent.id] = result.data;
56
+ agentMeta.push(result);
57
+ onProgress?.(` ${agent.name}: done (${(result.duration / 1000).toFixed(1)}s)`);
58
+ }
59
+ else {
60
+ onProgress?.(` ${agent.name}: returned null`);
61
+ }
62
+ }
63
+ catch (err) {
64
+ onProgress?.(` ${agent.name}: failed (${err instanceof Error ? err.message : String(err)})`);
65
+ if (isAuthError(err)) {
66
+ throw new Error(`API key authentication failed. Check your API key with: archbyte config set api-key <your-key>\n` +
67
+ ` Current provider: ${config.provider}. Get a valid key from your provider's dashboard.`);
68
+ }
69
+ }
70
+ }
71
+ // === Merge results ===
72
+ onProgress?.("Merging agent outputs...");
73
+ const merged = mergeAgentOutputs(ctx, agentResults["component-identifier"] ?? null, agentResults["service-describer"] ?? null, agentResults["flow-detector"] ?? null, agentResults["connection-mapper"] ?? null, agentResults["validator"] ?? null);
74
+ // === Deterministic validation ===
75
+ merged.validation = validateAnalysis(merged);
76
+ if (merged.validation.repairs.length > 0) {
77
+ onProgress?.(`Applied ${merged.validation.repairs.length} deterministic repair(s)`);
78
+ }
79
+ // Log token usage
80
+ const totalInput = agentMeta.reduce((s, a) => s + (a.tokenUsage?.input ?? 0), 0);
81
+ const totalOutput = agentMeta.reduce((s, a) => s + (a.tokenUsage?.output ?? 0), 0);
82
+ if (totalInput > 0) {
83
+ onProgress?.(`Token usage: ${totalInput} in / ${totalOutput} out`);
84
+ }
85
+ return { ...merged, tokenUsage: { input: totalInput, output: totalOutput } };
86
+ }
87
+ // Agents that produce large structured output (lists of components/connections) need more tokens
88
+ const MAX_TOKENS = {
89
+ "component-identifier": 8192,
90
+ "connection-mapper": 8192,
91
+ "service-describer": 4096,
92
+ "flow-detector": 4096,
93
+ "validator": 4096,
94
+ };
95
+ async function runAgent(agent, ctx, provider, config, priorResults, onProgress) {
96
+ const start = Date.now();
97
+ const model = resolveModel(config.provider, agent.modelTier, config.modelOverrides);
98
+ const { system, user } = agent.buildPrompt(ctx, priorResults);
99
+ onProgress?.(` ${agent.name}: calling ${model}...`);
100
+ const maxTokens = MAX_TOKENS[agent.id] ?? 4096;
101
+ const response = await provider.chat({
102
+ model,
103
+ system,
104
+ messages: [{ role: "user", content: user }],
105
+ maxTokens,
106
+ });
107
+ // Detect truncation
108
+ if (response.stopReason === "max_tokens") {
109
+ onProgress?.(` ${agent.name}: response truncated at ${maxTokens} tokens — output may be incomplete`);
110
+ }
111
+ const text = response.content
112
+ .filter((b) => b.type === "text")
113
+ .map((b) => b.text ?? "")
114
+ .join("");
115
+ if (!text)
116
+ return null;
117
+ const data = agent.parseResponse(text);
118
+ if (!data) {
119
+ onProgress?.(` ${agent.name}: could not parse response (${text.length} chars, stop=${response.stopReason})`);
120
+ return null;
121
+ }
122
+ return {
123
+ agentId: agent.id,
124
+ data,
125
+ duration: Date.now() - start,
126
+ tokenUsage: { input: response.usage.inputTokens, output: response.usage.outputTokens },
127
+ };
128
+ }
@@ -0,0 +1,7 @@
1
+ import type { StaticAnalysisResult, StaticContext } from "../static/types.js";
2
+ import type { ComponentIdentifierOutput, ServiceDescriberOutput, FlowDetectorOutput, ConnectionMapperOutput, ValidatorOutput } from "./types.js";
3
+ /**
4
+ * Merge all pipeline agent outputs into a StaticAnalysisResult
5
+ * compatible with the existing buildAnalysisFromStatic() in cli/analyze.ts.
6
+ */
7
+ export declare function mergeAgentOutputs(ctx: StaticContext, componentId: ComponentIdentifierOutput | null, serviceDesc: ServiceDescriberOutput | null, flowDet: FlowDetectorOutput | null, connMap: ConnectionMapperOutput | null, validatorOut: ValidatorOutput | null): StaticAnalysisResult;
@@ -0,0 +1,212 @@
1
+ // Pipeline — Merger
2
+ // Assembles all agent outputs into a StaticAnalysisResult
3
+ /**
4
+ * Merge all pipeline agent outputs into a StaticAnalysisResult
5
+ * compatible with the existing buildAnalysisFromStatic() in cli/analyze.ts.
6
+ */
7
+ export function mergeAgentOutputs(ctx, componentId, serviceDesc, flowDet, connMap, validatorOut) {
8
+ // Start with components from component-identifier
9
+ const components = [];
10
+ if (componentId?.components) {
11
+ for (const c of componentId.components) {
12
+ components.push({
13
+ id: c.id,
14
+ name: c.name,
15
+ type: c.type,
16
+ layer: c.layer,
17
+ path: c.path,
18
+ description: c.description,
19
+ technologies: c.technologies,
20
+ });
21
+ }
22
+ }
23
+ const componentIds = new Set(components.map((c) => c.id));
24
+ // Add databases from service-describer as components
25
+ if (serviceDesc?.databases) {
26
+ for (const db of serviceDesc.databases) {
27
+ if (!componentIds.has(db.id)) {
28
+ components.push({
29
+ id: db.id,
30
+ name: db.name,
31
+ type: "database",
32
+ layer: "data",
33
+ path: "",
34
+ description: db.description,
35
+ technologies: [db.type],
36
+ });
37
+ componentIds.add(db.id);
38
+ }
39
+ }
40
+ }
41
+ // Add external services from service-describer as components
42
+ if (serviceDesc?.externalServices) {
43
+ for (const svc of serviceDesc.externalServices) {
44
+ if (!componentIds.has(svc.id)) {
45
+ components.push({
46
+ id: svc.id,
47
+ name: svc.name,
48
+ type: "service",
49
+ layer: "external",
50
+ path: "",
51
+ description: svc.description,
52
+ technologies: [svc.type],
53
+ });
54
+ componentIds.add(svc.id);
55
+ }
56
+ }
57
+ }
58
+ // Apply validator type corrections
59
+ if (validatorOut?.componentTypeCorrections) {
60
+ for (const comp of components) {
61
+ const corrected = validatorOut.componentTypeCorrections[comp.id];
62
+ if (corrected)
63
+ comp.type = corrected;
64
+ }
65
+ }
66
+ // Apply validator description improvements
67
+ if (validatorOut?.componentDescriptions) {
68
+ for (const comp of components) {
69
+ const better = validatorOut.componentDescriptions[comp.id];
70
+ if (better && better.length > (comp.description?.length ?? 0)) {
71
+ comp.description = better;
72
+ }
73
+ }
74
+ }
75
+ // Build connections
76
+ const connections = [];
77
+ const connKeys = new Set();
78
+ // Connections from connection-mapper
79
+ if (connMap?.connections) {
80
+ for (const c of connMap.connections) {
81
+ if (!componentIds.has(c.from) || !componentIds.has(c.to))
82
+ continue;
83
+ const key = `${c.from}::${c.to}::${c.type}`;
84
+ if (connKeys.has(key))
85
+ continue;
86
+ connKeys.add(key);
87
+ connections.push({
88
+ from: c.from,
89
+ to: c.to,
90
+ type: c.type,
91
+ description: c.description,
92
+ confidence: 80,
93
+ async: c.async,
94
+ });
95
+ }
96
+ }
97
+ // Add database connections from service-describer usedBy
98
+ if (serviceDesc?.databases) {
99
+ for (const db of serviceDesc.databases) {
100
+ for (const userId of db.usedBy) {
101
+ if (!componentIds.has(userId))
102
+ continue;
103
+ const key = `${userId}::${db.id}::database`;
104
+ if (connKeys.has(key))
105
+ continue;
106
+ connKeys.add(key);
107
+ connections.push({
108
+ from: userId,
109
+ to: db.id,
110
+ type: "database",
111
+ description: `${userId} uses ${db.name}`,
112
+ confidence: 75,
113
+ async: false,
114
+ });
115
+ }
116
+ }
117
+ }
118
+ // Add external service connections from service-describer usedBy
119
+ if (serviceDesc?.externalServices) {
120
+ for (const svc of serviceDesc.externalServices) {
121
+ for (const userId of svc.usedBy) {
122
+ if (!componentIds.has(userId))
123
+ continue;
124
+ const key = `${userId}::${svc.id}::http`;
125
+ if (connKeys.has(key))
126
+ continue;
127
+ connKeys.add(key);
128
+ connections.push({
129
+ from: userId,
130
+ to: svc.id,
131
+ type: "http",
132
+ description: `${userId} uses ${svc.name}`,
133
+ confidence: 75,
134
+ async: false,
135
+ });
136
+ }
137
+ }
138
+ }
139
+ // Add event connections from flow-detector
140
+ if (flowDet?.eventConnections) {
141
+ for (const ec of flowDet.eventConnections) {
142
+ if (!componentIds.has(ec.publisher) || !componentIds.has(ec.subscriber))
143
+ continue;
144
+ const key = `${ec.publisher}::${ec.subscriber}::event`;
145
+ if (connKeys.has(key))
146
+ continue;
147
+ connKeys.add(key);
148
+ connections.push({
149
+ from: ec.publisher,
150
+ to: ec.subscriber,
151
+ type: "event",
152
+ description: `${ec.channel} via ${ec.technology}`,
153
+ confidence: 70,
154
+ async: true,
155
+ });
156
+ }
157
+ }
158
+ // Add validator corrections
159
+ if (validatorOut?.addedConnections) {
160
+ for (const c of validatorOut.addedConnections) {
161
+ if (!componentIds.has(c.from) || !componentIds.has(c.to))
162
+ continue;
163
+ const key = `${c.from}::${c.to}::${c.type}`;
164
+ if (connKeys.has(key))
165
+ continue;
166
+ connKeys.add(key);
167
+ connections.push({
168
+ from: c.from,
169
+ to: c.to,
170
+ type: c.type,
171
+ description: c.description,
172
+ confidence: 65,
173
+ async: c.async,
174
+ });
175
+ }
176
+ }
177
+ // Remove connections flagged by validator
178
+ const removedKeys = new Set(validatorOut?.removedConnectionKeys ?? []);
179
+ const filteredConnections = removedKeys.size > 0
180
+ ? connections.filter((c) => !removedKeys.has(`${c.from}::${c.to}::${c.type}`))
181
+ : connections;
182
+ // Build flows
183
+ const flows = connMap?.flows ?? [];
184
+ // Override structure fields from service-describer
185
+ const structure = { ...ctx.structure };
186
+ if (serviceDesc?.primaryLanguage && structure.language === "unknown") {
187
+ structure.language = serviceDesc.primaryLanguage;
188
+ }
189
+ // Override docs from service-describer
190
+ const docs = { ...ctx.docs };
191
+ if (serviceDesc?.projectDescription && serviceDesc.projectDescription.length > (docs.projectDescription?.length ?? 0)) {
192
+ docs.projectDescription = serviceDesc.projectDescription;
193
+ }
194
+ return {
195
+ structure,
196
+ docs,
197
+ components: { components },
198
+ infra: ctx.infra,
199
+ events: ctx.events,
200
+ envs: ctx.envs,
201
+ connections: {
202
+ connections: filteredConnections,
203
+ flows: flows.map((f) => ({
204
+ name: f.name,
205
+ description: f.description,
206
+ steps: f.steps,
207
+ })),
208
+ },
209
+ validation: { valid: true, repairs: [], errors: [] },
210
+ gaps: [],
211
+ };
212
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Extract JSON from LLM response text using 4 fallback strategies.
3
+ * Returns null if all fail.
4
+ */
5
+ export declare function extractJSON(raw: string): Record<string, unknown> | null;
@@ -0,0 +1,43 @@
1
+ // Pipeline — Response Parser
2
+ // 4-strategy JSON extraction (reused from agents/llm/response-parser.ts)
3
+ /**
4
+ * Extract JSON from LLM response text using 4 fallback strategies.
5
+ * Returns null if all fail.
6
+ */
7
+ export function extractJSON(raw) {
8
+ // Strategy 1: Direct parse
9
+ try {
10
+ const obj = JSON.parse(raw);
11
+ if (typeof obj === "object" && obj !== null)
12
+ return obj;
13
+ }
14
+ catch {
15
+ // Continue
16
+ }
17
+ // Strategy 2: Extract from markdown code block
18
+ const codeBlockMatch = raw.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
19
+ if (codeBlockMatch) {
20
+ try {
21
+ const obj = JSON.parse(codeBlockMatch[1]);
22
+ if (typeof obj === "object" && obj !== null)
23
+ return obj;
24
+ }
25
+ catch {
26
+ // Continue
27
+ }
28
+ }
29
+ // Strategy 3: Extract first {...} block
30
+ const braceMatch = raw.match(/\{[\s\S]*\}/);
31
+ if (braceMatch) {
32
+ try {
33
+ const obj = JSON.parse(braceMatch[0]);
34
+ if (typeof obj === "object" && obj !== null)
35
+ return obj;
36
+ }
37
+ catch {
38
+ // Continue
39
+ }
40
+ }
41
+ // Strategy 4: Return null
42
+ return null;
43
+ }
@@ -0,0 +1,92 @@
1
+ import type { ModelTier } from "../runtime/types.js";
2
+ import type { StaticContext } from "../static/types.js";
3
+ export interface PipelineAgent {
4
+ id: string;
5
+ name: string;
6
+ modelTier: ModelTier;
7
+ phase: "parallel" | "sequential";
8
+ buildPrompt(ctx: StaticContext, priorResults?: Record<string, unknown>): {
9
+ system: string;
10
+ user: string;
11
+ };
12
+ parseResponse(raw: string): unknown | null;
13
+ }
14
+ export interface ComponentIdentifierOutput {
15
+ components: Array<{
16
+ id: string;
17
+ name: string;
18
+ type: string;
19
+ layer: string;
20
+ path: string;
21
+ description: string;
22
+ technologies: string[];
23
+ }>;
24
+ }
25
+ export interface ServiceDescriberOutput {
26
+ projectDescription: string;
27
+ primaryLanguage: string;
28
+ databases: Array<{
29
+ id: string;
30
+ name: string;
31
+ type: string;
32
+ description: string;
33
+ usedBy: string[];
34
+ }>;
35
+ externalServices: Array<{
36
+ id: string;
37
+ name: string;
38
+ type: string;
39
+ description: string;
40
+ usedBy: string[];
41
+ }>;
42
+ }
43
+ export interface FlowDetectorOutput {
44
+ eventConnections: Array<{
45
+ publisher: string;
46
+ subscriber: string;
47
+ channel: string;
48
+ technology: string;
49
+ }>;
50
+ apiRoutes: Array<{
51
+ path: string;
52
+ method: string;
53
+ handlerFile: string;
54
+ }>;
55
+ }
56
+ export interface ConnectionMapperOutput {
57
+ connections: Array<{
58
+ from: string;
59
+ to: string;
60
+ type: string;
61
+ description: string;
62
+ async: boolean;
63
+ }>;
64
+ flows: Array<{
65
+ name: string;
66
+ description: string;
67
+ steps: string[];
68
+ }>;
69
+ }
70
+ export interface ValidatorOutput {
71
+ componentTypeCorrections: Record<string, string>;
72
+ componentDescriptions: Record<string, string>;
73
+ addedConnections: Array<{
74
+ from: string;
75
+ to: string;
76
+ type: string;
77
+ description: string;
78
+ async: boolean;
79
+ }>;
80
+ removedConnectionKeys: string[];
81
+ confidence: number;
82
+ issues: string[];
83
+ }
84
+ export interface PipelineAgentResult {
85
+ agentId: string;
86
+ data: unknown;
87
+ duration: number;
88
+ tokenUsage?: {
89
+ input: number;
90
+ output: number;
91
+ };
92
+ }
@@ -0,0 +1,3 @@
1
+ // Pipeline Agent Framework — Types
2
+ // Simpler than ArchByteAgent: no tools, just prompt → JSON
3
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ // Auto-generated by prompts-encode.ts — DO NOT EDIT
2
+ // Run: node agents/prompts-encode.ts
3
+ import { registerPrompt } from "./prompts.js";
4
+ registerPrompt("premium/api-contract-verifier", "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");
5
+ registerPrompt("premium/compliance-checker", "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");
6
+ registerPrompt("premium/dependency-risk-scorer", "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");
7
+ registerPrompt("premium/drift-detector", "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");
8
+ registerPrompt("premium/migration-planner", "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");
9
+ registerPrompt("premium/performance-analyzer", "GB0WSCMLEUUgUhMNMB8bFywTDQsnWRULIB4aGysKVAQmFw0cbFktCjQAQwItG1QMMlIXB2IQEAAvBgoOO1kVFyIaChwnGgAQMxMPSCAWABEtFw0NIRIHSWEBAAkuEBoCYRsQGzccB0lhEw0MYgkRFycdEQUjFxcAYRMNHCtUBAQ1BgYaLApab0szDQkuAA4AYQYLDWIJBgorFwAcYhgaAWEABhw3CxpFIFIpOw03VAojGAYLNlkDDDUaQxwqEAdFMgYRHSENARckSGkTSFlURzIHDgUjCw1He1JBCjAQEQNhAgYaJBYGCCAcAA1iGAcWJAEQBScXAEdteENIYBYCADMTDwQQGAAMLxVBUmJbER0iFw8EJxcART1SBActHVQZYRQCATBZCEUxHQwaYgVUBjMbFwEhGBhHbXhDSGAbGxE1HgYGJxofFmNIQzNIWVRFYQlpSGJZVEVhUAoMYENURxE3MS5vSURUY15pSGJZVEVhUBANNBwGDDULQVJiWxcXKAYKCyMVVBlhGgoPKlkIRSwXBwE3FFQZYR4MH2BVfkVhUkNIYlsXCiwCDAYnFwBHe1JBCy0UBAovFw0cYhcVCCRQT2JiWVRFYVJBHDsJEUd7UkEMIw0VByABBkg+WRoANQUMGilZCEUiHQ4YNw0RRT1SDg0vFgYcYQ5DAS1ZCEUiHQ0LNwsGAC8RGkpuc1RFYVJDSGAdERYiAAoYNhAbC2NIQ0o1ERURYQYLDWIbGxE1HgYGJxofRSgBQURIWVRFYVJDSisUBAQiBkFSYlsDDSAGQwAjCQQALwFDHSwdERdhHgwJJltYb2FSQ0hiWVYXJBEMBS8cGgEgBgoHLFtORWMaDB9iDRtFJxsbSCsNVm9hUkNIP3NURRxeaUhiWwcGIB4KBiU4GgQtCxABMVtORTp4Q0hiWVYNLgAKEi0XAAQtIQAJLhgWDC0bFxFgQ1RHMxcCDDtZCEUxExEcKxgYRT1SAQQtGh8AJVBPYmJZVEVjBAYaNhAXBC0+CgUrDRURKB0NG2BDVD5jHgobNlkbA2EEBho2EBcELVIQCyMVHQsmUgAHLBoRFy8BQTVuc1RFYVJBGzYYAAAnBw8GJwoHR3tSOEouEAcRYR0FSDENFREkFBYEYhobCDEdDQ0sDQdFNRoCHGIbGAoiGUMALQsdHy4cFwkuWQcGIB4KBiVbKUlLUkNIYlsHDSAABgwQHAcKNAAADTFbTkUaUAcJNhgWBDIXEERiGhUGKRcQRGIWBkUuBgsNMFkHDSAABgxiGxsRNR4GBicaHxZjL2lIYgRYb2FSQQksDR01IAYXDTAXB0d7UjhiYllURTp4Q0hiWVRFYwICHDYcBgtjSENKDFJFRTAHBhorHAdFPVIQESwaHBcuHAwdMVkXDSAbDRtiBVQLLlIACSERHQsmUh9INxcWCjQcBw0mWQUQJAcGG2IFVAA1EU1KbnNURWFSQ0hgFRsGIAYKByxbTkVjFAoEJ1kbF2ERDAUyFhoALwZBREhZVEVhUkNKJhwHBjMbExwrFhpHe1JBDCcNFQwtAUFESFlURWFSQ0okEAxHe1JBGicaGwgsFw0MIw0dCi9QaUhiWVQYS1JDNW5zVEVjEQILKhAaAmNIQxNIWVRFYVAQHDAYAAAmC0FSYlsaCi8XQxRiFRsGIB5DFGIdHRY1AAoKNw0RAWEOQysGN1QZYR8WBDYQWQkgCwYaYFV+RWFSQ0ohGBcNJD4CEScLB0d7UjhKLhAHEWEdBUghGBcNKBwESC8cFw0gHAobLwpUAy4HDQxgJFhvYVJDSGAeFRUyUFlIGVsDDSQABkghGBcNKBwESDERGxAtFkMKJ1kVASUXB0ofc1RFPF5pSGJbEAQ1EwEJMRwkADMUDBovGBoGJFBZSDlzVEVhUkEBLB0RHSgcBEp4WVYEJRcSHSMNEUU9UgoGMQwSAygRCg0sDVQZYQcNAywWAwtjXmlIYllURzAHBho7KRURNRcRBjFbTkUaUA0HNhgWCSRSEh0nCw1FMRMXHCcLGhZjL09iYllURWMRDAYsHBcRKB0NOC0WGAwvFUFSYhsbCi0XAgZuc1RFYVJBGicYEDckAg8BIRgHR3tSAQctFREEL3hDSD9VfkVhUBENIRYZCCQcBwk2EBsLMlBZSBlbBBcoHREBNhAOACVSEw0wHxsXLBMNCydZHQgxAAweJxQRCzUBQTVIBH5vCBwQHDAMFxEoHQ0beHNFS2E+DAcpWRIKM1IHCTYYFgQyF0MZNxwGHGECAhw2HAYLMlJLJmlIWEUsGxAbKxcTRSgcBw06HAdJYRQWBC5ZAAQjHgZIMRoVCzJbaVpsWTcNJBEISCQWBkUiEwAAKxcTRTIGEQk2HBMMJAFDQBAcEAwyXkMlJxQXBCIaBgxuWR0LbB8GBS0LDUxLQU1ICx0RCzUbBRFiCg0LIhoRBywWARZhEAwcNhURCyQRCBtiURYJLhEIASweVCxuPU9IMRwFECQcFwEjFVQkETtDCyMVGBZoeFdGYjUbCipSBQcwWRcKLxwGCzYQGwthAgwHLhAaAmERDAYkEBMQMxMXAS0XflBvUiAAJxofRScdEUgjCg0LIl0SHScMEUgjExANJlkEFy4RBhsxEBoCYQICHDYcBgsyeFVGYisREygXFEgwHAcKNAAADWIVHQgoBhBIahobCzUTCgYnC1QXJAEMHTAaERZtUhEJNhxUCSgfChwrFxNMS0VNSA4WGw5hFAwaYgkVAigcAhwrFhpFKBxDBCsKAEUkHAcYLRAaETJ4W0ZiOhwAIhlDDi0LVAc0HghILQkRFyAGCgcsClQTMlxDASwdHRMoFhYJLlkXBC0eEGJ7V1QsJRcNHCsfDUUyBgIcJx8BCWERDAUyFhoALwYQSDYRFRFhEA8HIRJUDS4AChItFwAELVIQCyMVHQsmeFJYbFkmADUHEQZiNjopGFIXACdZPjYOPEMHIBMRBjVeQwYtWRsRKRcRSDYcDBE=");
10
+ registerPrompt("premium/security-auditor", "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");
11
+ registerPrompt("pipeline/component-identifier", "GB0WSCMLEUUgHEMNOgkRFzVSEAckDQMEMxdDCTAaHAw1FwAcbFktCjQAQwItG1QMMlIXB2IQEAAvBgoOO1kREyQAGkgjCxcNKAYGCzYMBgQtHhpIMRATCygUCgsjFwBFIh0OGC0XEQs1UgoGYhhUFi4UFx8jCxFFMQAMAicaAEtLeCJIYBobCDEdDQ0sDVZFKAFDCWIdHRY1Gw0LNlkQADEeDBEjGxgAYQcNATZVVBYkABUBIRxYRSACEwQrGhURKB0NRGIVHQczExERblkbF2EBCg8sEBIMIhMNHGIUGwE0HgZGYjAaBi0HBw14c1lFAxMAAycXEEUyFxEeKxoRFm1SIjgLClhFNh0RAycLB29sUiUaLRcAAC8WQwkyCRgMIhMXAS0XB0VpBQYKblkZCiMbDw1rc1lFDRsBGiMLHQAyXRMJIRIVAiQBQ0ArF1QILhwMGicJGxZoeE5IATU9RTUdDAQxc1lFBRMXCSAYBwAyUksBJFkRHTEeCgsrDRgcYREMBiQQExAzFwdEYhxaAm9SCgZiHRsGKhcRRSEWGRUuAQZBSFRUIDkGBhosGBhFMhcRHisaERZhWgZGJVdUNyQWChtuWSYEIxAKHA8oWEUEHgIbNhAXFiQTEQsqUH5vBx0RSCcYFw1hEQwFMhYaAC8GT0gyCxsTKBYGUkhUVAwlSEMDJxsVB2wRAhsnWQcJNBVDQCdXE0ttUkEJMhBZFiQAFQ0wW1hFYwUGCm8fBgovBgYGJltdb2xSDQkvHE5FKQcOCSxUBgAgFgIKLhxUCyAfBmJvWQAcMRdZSC0XEUUuFENKJAsbCzUXDQxgVVRHIAIKSm5ZVhYkABUBIRxWSWFQFAcwEhEXY15DSi4QFhcgABpKbllWBi0bQURiWxAENRMBCTEcVklhUAQJNhwDBDhQT0hgGhUGKRdBRGJbBRAkBwZKSFRUCSALBhp4WRsLJFIMDmJbBBckAQYGNhgADC4cQURiWxUVMR4KCyMNHQovUE9IYB0VESBQT0hgHAwRJAANCS5bfkhhAgIcKkNUFyQeAhwrDxFFJRsRDSENGxc4UhMJNhFUTSRcBEZuWVYWJAAVDTBbWEVjExMYMVYDACNQSmJvWRAAMhERATINHQovSENZb0tUFiQcFw0sGhFFJRcQCzAQBBEoHQ1ILR9UFTQAEwcxHH5IYQYGCyoXGwkuFQoNMUNUBDMAAhFiFhJFKhcaSDYcFw0vHQ8HJRARFmFaBkYlV1hFGlA3ETIcJwYzGxMcYFVURwQKExonCgdHbVJBOC0KAAIzFzA5DlspTEt4MQ0xCRsLJVIUATYRVCoPPjpII1k+Ng48QwcgExEGNUhDE2JbFwosAgwGJxcAFmNIQzNsV1o4YQ8=");
12
+ registerPrompt("pipeline/connection-mapper", "GB0WSCMLEUUgHEMNOgkRFzVSEAckDQMEMxdDCTAaHAw1FwAcbFktCjQAQwItG1QMMlIXB2IUFRVhMy8kYhobCy8XABwrFhoWYRAGHDUcEQthEQwFMhYaAC8GEEgrF1QEYQEMDjYOFRckUhARMQ0RCG94aSstFxoAIgYKByxZABwxFxBSSFRURygfEwcwDVZfYRYKGicaAEUiHQcNYhAZFS4AF0cmHAQALxYGBiEAfkhhUAscNglWX2EgJjsWVhM3ETFMIBYtJEUiEw8EMXNZRWMWAhwjGxUWJFBZSCEWGRUuHAYGNlkGACAWEEc1Cx0RJAFDHC1ZFUUlExcJIBgHAEtfQ0onDxELNVBZSCMKDQsiUgYeJxcASiwXEBsjHhFFaQIWCm0KAQdtUhIdJwwRFmh4TkhgHgYVIlBZSCUrJCZhEQIELgp+SGFQFA0gChsGKhcXSnhZIwAjIQwLKRwARSIdDQYnGgAMLhwQYm9ZVgMoHgZKeFkHDSAABgxiHx0JJAEaGzYcGUUgEQANMQp+bwcdEUgnGBcNYREMBiwcFxEoHQ1SSFRUAzMdDlJiChsQMxEGSCEWGRUuHAYGNlk9IWFaDh0xDVQIIAYAAGIYGkUkCgobNhAaAmERDAUyFhoALwZDIQZZER0gERcEO1B+SGEGDFJiDRUXJhcXSCEWGRUuHAYGNlk9IWFaDh0xDVQIIAYAAGIYGkUkCgobNhAaAmERDAUyFhoALwZDIQZZER0gERcEO1B+SGEGGhgnQ1QKLxdDByRZAA0kUhcRMhwHRSAQDB4nc1lFJRcQCzAQBBEoHQ1SYhsGDCQUQwwnChcXKAIXAS0XVAonUhcAJ1kGAC0TFwEtFwcNKAJpRWIYBxwvEVlINgsBAGEbBUgjCg0LIhoRBywWARZhWgYeJxcAFm1SEh0nDBEWaHhpKS4KG0UoFgYGNhASHGFYSQ4uFgMWa1hDisLtVAAvFk4cLVQRCyVSEQ0zDBEWNVITCTYRB0U1GhEHNx4cRTUaBkgxAAcRJB9ZYm9ZGgQsF1lIJBUbEmEcAgUnWVwAbxVNRGJbIRYkAEM6Jx4dFjUAAhwrFhpHaHhOSCYcBwYzGxMcKxYaX2EFCwk2WRwEMQIGBjFzWUUyBgYYMUNUBDMAAhFiFhJFMgYRASweB0lhFwILKlkxPQAxNyQbWR0LYQYLDWIfGxcsExdIYBobCDEdDQ0sDT0BYZDl+mIaGwgxHQ0NLA09AWNSSw1sHlpJYVAUDSBUEhcuHBcNLB1Uh8fgQwkyEFkWJAAVDTBbWEVjExMBbwoRFzcXEUig/+ZFMR0QHCULERYwHkFBbFkxBCIaQxs2HARFLAcQHGIaGws1EwoGYhwMBCIGDxFiFhoAYZDl+mIYBhcuBUMfKw0cRSBSFQkuEBBFIh0OGC0XEQs1UiosYhYaRSQTAABiCh0BJFxDLC1ZOioVUhYbJ1kSFyQXThwnAQBFJRcQCzAQBBEoHQ0bYhgHRTIGBhgxV35vCD8zJxAtNSsVSEM9MRxUESkXQy0aODcxYREMBTIWGgAvBkMhBgpUAzMdDkg2ERFFIh0OGC0XEQs1AUMEKwoAS2E3FQ0wAFQDMx0ORzYWVAwvUgAHLBcRBjUbDAYxWTUrBVIGHicLDUUiHQ4YLRcRCzVSKixiEBpFJx4MH2IKAAAxAUMFNwoARTMXBQ0wHBoGJFICSDQYGAwlUgAHLwkbCyQcF0gLPVQDMx0OSDYREUUtGxAcYhgWCjcXTUgGFlQrDiZDASwPEQs1UgAHLwkbCyQcF0gLPQdFLgBDHTEcVAMzFwZFNhwMEWEWBhshCx0VNRsMBjFXfm8TFxAYLRcQRTYbFwBiNjopGFICSAgqOythHQECJxoAX0sJaUhiWxcKLxwGCzYQGwsyUFlIGVdaSxxeaUhiWxIJLgUQSnhZL0tvXD5iPw==");
13
+ registerPrompt("pipeline/flow-detector", "GB0WSCMLEUUgHEMNOgkRFzVSEAckDQMEMxdDCTAaHAw1FwAcbFk1CyAeGhInWQANJFITGi0TEQY1UgAHLA0RHTVSAgYmWR0BJBwXASQATm9LQ01IaFMREyQcFystFxoAIgYKBywKXk97UiYeJxcASCUACh4nF1QGLh8OHSwQFwQ1GwwGYgkVETUXEQYxWVwIJAEQCSUcVBQ0FxYNMVVUFTQQTBs3G1hFNhcBAC0WHxZtUgYeJxcARSQfChw2HAYWaFxpSGJZMgozUgYJIRFORTpSEx0gFR0WKRcRRGIKAQcyEREBIBwGSWERCwksFxEJbVIXDSERGgotHQQRYgR+RWFSTkgyDBYJKAELDTBWBxAjAQAaKxsRF3tSAAcvCRsLJBwXSAs9B0VpGQYKIxtZBiABBkgxFQECMltpSGJZWUUiGgIGLBwYX2EXFQ0sDVsRLgIKC20IAQA0F0MGIxQRb2FSQ0ViDREGKRwMBC0eDV9hBgsNYgoEACIbBQEhWQAAIhoNBy4WExxhBxANJllcAG8VTURiWxETJBwXRScUHRE1FxFKbllWEiQQCwctElZMS3hRRmJTXgQxGzEHNw0RFmtYWUgDKT1FMx0WHCcKWwAvFhMHKxcAFmEWBhwnGgAAJVIFGi0UVAYuFgZIMhgAESQADRtsc1RFYTQMGmIcFQYpSEMTYgkVESleQwUnDRwKJV5DACMXEAkkACUBLhxUGEt4IDoLLT0mAD5ZSA0XGBxhAAYYLQsARSQEBgY2WRcKLxwGCzYQGwsyUgIGJlkGCjQGBhtiDRwENVILCTQcVCYOPCA6By0xRQQkKiwHNzcgYRsNSDYREUUxAAweKx0RAWERDAwnWQcELAIPDTFVVBY1ExcBIVkHBiAcDQ0wWQYAMgcPHDFVVAozUicHIRIRF2EBBho0EBcAMlxDISRZAA0kUhAcIw0dBmEBAAksFxEXYQECETFZVisuUgYeJxcASCUACh4nF1QVIAYXDTAXB0UlFxcNIQ0RAWNeQxonDQEXL1IGBTINDUUkBAYGNjobCy8XABwrFhoWb1InB2I3OzFhGw0eJxcARTETFxwnCxoWYQYLCTZZFRckUg0HNlkREygWBgYhHBBFKBxDHCocVAwvAhYcbHN+NyQBEwcsHVQSKAYLSA03ODxhE0MiETY6RS4QCQ0hDU5vOnhDSGAcAgAvBiAHLBcRBjUbDAYxW05FGlxNRh9VfkVhUAIYKysbEDUXEEp4WS9Lb1w+Yj9zfiwnUg0HYgkVETUXEQYxWRIKNBwHRGILERE0AA1IJxQEEThSAhowGA0Wbw==");
14
+ registerPrompt("pipeline/service-describer", "GB0WSCMLEUUgHEMNOgkRFzVSEAckDQMEMxdDCTAaHAw1FwAcbFk1CyAeGhInWQANJFITGi0TEQY1UgAHLA0RHTVSAgYmWR0BJBwXASQATm9LQ01IaFMEFy4YBgs2PREWIgAKGDYQGwtrWFlIA1kXCSQTEUhwVEdFMhcNHCcXFwBhFgYbIQsdFTUbDAZiFhJFNhoCHGINHAwyUhMaLRMRBjVSBwcnClpvc1xDQmgJBgwsExERDhgaAjQTBA1oU05FFRoGSC8YHQthAhEHJQsVCCwbDQ9iFRULJgcCDydZXABvFU1EYlsgHDEXMAswEAQRY15DShIAAA0uHEFEYlszCmNeQ0oQDAcRY1tNYnFXVE9rFgIcIxsVFiQBSUJ4WTAENRMBCTEcB0U0AQYMYhAaRTUaChtiCQYKKxcAHGxzQEthWEkNOg0RFy8TDzsnCwIMIhcQQmhDVCA5BgYaLBgYRTIXER4rGhEWbjMzITFZFwovARYFJx1UBzhSFwArClQVMx0JDSENWm9LNAwaYh0VESAQAhsnClQELxZDDToNERcvEw87JwsCDCIXEERiCQYKNxsHDXhzWUUoFllIKRwWBCNfAAkxHFQWLQcEYm9ZGgQsF1lIKgwZBC9fEQ0jHRUHLRdDBiMUEW9sUhcRMhxORTUXAAAsFhgKJgtDHDsJEUVpF00PbFVURzEdEBwlCxEWMB5BRGJbBgAlGxBKbllWFjUAChgnW11vbFIHDTEaBgwxBgoHLENUEikTF0grDVMWYQcQDSZZEgozeE5INwoRAQMLWUgjCwYEOFIMDmIaGwgxHQ0NLA1ULAUBQxwqGABFNAEGSDYRHRZhWhYbJ1kfACMTAUUhGAcAYQEPHSUKVAggBgAAKxcTRTUaBkghFhkVLhwGBjZZGgQsFxBBSHM3NwgmKisDNU5FDhwPEWIQGgYtBwcNYh0VESAQAhsnClQELxZDDToNERcvEw9IMRwGEygRBhtiDRwENVILCTQcVCYOPCA6By0xRQQkKiwHNzcgYRsNSDYREUUiHQcNIBgHAHt4TkgSGBcOIBUGRyYcBAAvFgYGIQBUDCwCDBo2ClRNJFwERm5ZVhUmUE9IYAsRASgBQURiWwcRMxsTDWBVVEcBExQbbwoQDm4RDwEnFwBIMkFBQUhUVCAvBAoaLRcZAC8GQx4jCx0EIx4GG2ILEQMkAAYGIRAaAmEGCw0vWVwAbxVNRGI9NTEAMCI7ByYhNw1eQzoHPT02HicxJG5ZJzETOzMtHSoxJhM3NzcJPC1MS19DLC0aHwAzUiAHLwkbFiRSEA0wDx0GJAFDHysNHEUsExcLKhAaAmEbDgklHAdvbFIgBywfHQI0AAIcKxYaRScbDw0xWQYAJxcRDSwaHQsmUhcAJxR+SGE2ChonGgBFNAECDydZHQthEQwMJ1kHBCwCDw0xWQQXLgQKDCcdfm8FHUMmDS1UAjQXEBtiFgZFKBwFDTBZBwAzBAoLJwpUESkTF0gvEBMNNVIBDWIMBwAnBw9GYj0bRQ89N0grFxcJNBYGSDEcBhMoEQYbYhMBFjVSAQ0hGAEWJFIXACdZBBcuGAYLNllWBi4HDwxgWQEWJFIXACcUWkUIFEMcKhwGAGEbEEgsFlQGLhwAGicNEUUkBAoMJxcXAG1SBwdiFxsRYRsNCy4MEABhGxdGSHMmADICDAYmWQMMNRpDJww1LUUgUik7DTdUCiMYBgs2WRkENRELASweVBEpGxBIMRocACwTWWI5c1RFYwIRBygcFxEFFxALMBAEESgdDUp4WVZLb1xBREhZVEcxAAoFIwsNKSAcBB0jHhFHe1JBRmxXVklLUkNKJhgABCMTEA0xW05FGlxNRh9VfkVhUAYQNhwGCyAeMA0wDx0GJAFBUmIiWktvL2kV");
15
+ registerPrompt("pipeline/validator", "GB0WSCMLEUUgUhAHJA0DBDMXQwkwGhwMNRcAHDcLEUUzFxUBJw4RF29SNQkuEBAENRdDHCocVAQvEw8RMRAHRTMXEB0uDQdFIBwHSDEMEwIkARdIIRYGFyQRFwEtFwdLS3ggACcaH0UnHRFSSEhaRWtYLBoyERULYREMBTIWGgAvBhBCaENUJi4fEwcsHBoRMlIUATYRVB8kAAxIIRYaCyQRFwEtFwdFNRoCHGIKHAo0HgdIIBxUBi4cDQ0hDREBS0BNSGhTIxcuHARIIRYZFS4cBgY2WQAcMRcQQmhDVABvFU1EYhhUNyQTABxiGAQVYQYaGCcdVAQyUkEbJwsCDCIXQUgxERsQLRZDCidZVgMzHQ0cJxcQR0tBTUhoUzkMMgEKBiVZFwovHAYLNhAbCzJYSVJiNhYTKB0WG2ILEQkgBgoHLAocDDEBQwYtDVQGIAIXHTAcEG91XENCaC4RBCpSBw0xGgYMMQYKBywKXk97UiAHLwkbCyQcFxtiDh0RKVIGBTINDUUuAEMdLBoYACAAQwwnChcXKAIXAS0XB0Wj8vdIMgsbEygWBkggHAARJABDBywcB290XENCaD0BFS0bAAk2HFsXJBYWBiYYGhFhEQwFMhYaAC8GEEJoQ1QmLh8TBywcGhEyUhcAIw1UFikdFgQmWRYAYR8GGiUcEG9LIAYbMhYaAWEFChwqWTsrDStDCWIzJyoPUgwKKBwXEXt4GGJiWVYGLh8TBywcGhEVCxMNARYGFyQRFwEtFwdHe1IYSGAaGwgxHQ0NLA1ZDCVQWUhgGhsXMxcAHG8NDRUkUEMVbnNURWMRDAUyFhoALwYnDTEaBgwxBgoHLApWX2EJQ0ohFhkVLhwGBjZUHQFjSENKIBwAESQAQwwnChcXKAIXAS0XVkU8XmlIYlsVASUXBystFxoAIgYKBywKVl9hKRhIYB8GCixQWUhgEBBHbVJBHC1bTkVjGwdKbllWETgCBkp4WVYROAIGSm5ZVgEkAQAaKwkADC4cQVJiWxAAMhFBRGJbFRY4HABKeFkSBC0BBkg/JFhvYVJBGicUGxMkFiAHLBcRBjUbDAYJHA0WY0hDM2AfBgosSFkcLUNOETgCBkofVX5FYVAABywfHQEkHAANYENUVW9KVkRIWVRHKAEQHScKVl9hKUEMJwoXFygCFwEtF1QKJ1ICBjtZBgAsEwoGKxcTRSgBEB0nClY4Sw9pYhcKEUUkHxMcO1kbBysXABwxVhUXMxMaG2IQEkUvHUMLLQsGACIGCgcsClQLJBcHDSZXVDEpF0MLLRcSDCUXDQsnWQcGLgAGSGpJWVRoUhENJBURBjUBQxEtDAZFLgQGGiMVGEUiHQ0OKx0RCyIXQwEsWQANJFICBiMVDRYoAUMZNxgYDDULTQ==");
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Build-time utility: Encodes agent system prompts with XOR obfuscation.
4
+ * Run: npx tsx agents/prompts-encode.ts
5
+ *
6
+ * Reads plain-text prompt from stdin or argument and outputs the encoded base64 string.
7
+ * Usage: echo "Your prompt text" | npx tsx agents/prompts-encode.ts
8
+ */
9
+ export declare function encode(text: string): string;
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Build-time utility: Encodes agent system prompts with XOR obfuscation.
4
+ * Run: npx tsx agents/prompts-encode.ts
5
+ *
6
+ * Reads plain-text prompt from stdin or argument and outputs the encoded base64 string.
7
+ * Usage: echo "Your prompt text" | npx tsx agents/prompts-encode.ts
8
+ */
9
+ const K = [0x41, 0x72, 0x63, 0x68, 0x42, 0x79, 0x74, 0x65]; // "ArchByte"
10
+ export function encode(text) {
11
+ const buf = Buffer.from(text, "utf-8");
12
+ const out = Buffer.alloc(buf.length);
13
+ for (let i = 0; i < buf.length; i++) {
14
+ out[i] = buf[i] ^ K[i % K.length];
15
+ }
16
+ return out.toString("base64");
17
+ }
18
+ // If run directly, encode stdin
19
+ if (process.argv[1]?.endsWith("prompts-encode.ts")) {
20
+ let input = "";
21
+ process.stdin.setEncoding("utf-8");
22
+ process.stdin.on("data", (chunk) => { input += chunk; });
23
+ process.stdin.on("end", () => {
24
+ console.log(encode(input));
25
+ });
26
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Agent Prompt Store — Obfuscated
3
+ *
4
+ * System prompts are XOR-encoded so they don't appear as plaintext strings
5
+ * in compiled JavaScript. This prevents casual extraction via grep, strings,
6
+ * or code browsing. Not cryptographically secure — a determined reverse
7
+ * engineer can still extract them — but raises the bar significantly.
8
+ *
9
+ * To add/update a prompt: run `npx tsx agents/prompts-encode.ts`
10
+ */
11
+ export declare function getPrompt(id: string): string;
12
+ export declare function registerPrompt(id: string, encoded: string): void;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Agent Prompt Store — Obfuscated
3
+ *
4
+ * System prompts are XOR-encoded so they don't appear as plaintext strings
5
+ * in compiled JavaScript. This prevents casual extraction via grep, strings,
6
+ * or code browsing. Not cryptographically secure — a determined reverse
7
+ * engineer can still extract them — but raises the bar significantly.
8
+ *
9
+ * To add/update a prompt: run `npx tsx agents/prompts-encode.ts`
10
+ */
11
+ const K = [0x41, 0x72, 0x63, 0x68, 0x42, 0x79, 0x74, 0x65]; // "ArchByte"
12
+ function d(encoded) {
13
+ const buf = Buffer.from(encoded, "base64");
14
+ const out = Buffer.alloc(buf.length);
15
+ for (let i = 0; i < buf.length; i++) {
16
+ out[i] = buf[i] ^ K[i % K.length];
17
+ }
18
+ return out.toString("utf-8");
19
+ }
20
+ // Prompt registry — populated by prompts-encode.ts
21
+ const store = new Map();
22
+ export function getPrompt(id) {
23
+ const encoded = store.get(id);
24
+ if (!encoded)
25
+ throw new Error(`Unknown prompt: ${id}`);
26
+ return d(encoded);
27
+ }
28
+ export function registerPrompt(id, encoded) {
29
+ store.set(id, encoded);
30
+ }
@@ -0,0 +1,10 @@
1
+ import type { LLMProvider, ChatParams, LLMResponse, LLMChunk } from "../runtime/types.js";
2
+ export declare class AnthropicProvider implements LLMProvider {
3
+ name: "anthropic";
4
+ private client;
5
+ constructor(apiKey: string);
6
+ chat(params: ChatParams): Promise<LLMResponse>;
7
+ stream(params: ChatParams): AsyncIterable<LLMChunk>;
8
+ private toAnthropicBlock;
9
+ private fromAnthropicBlock;
10
+ }