@vyuhlabs/dxkit 2.2.0 → 2.2.1

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 (47) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/package.json +4 -3
  3. package/dist/agents/extract.d.ts +0 -25
  4. package/dist/agents/extract.d.ts.map +0 -1
  5. package/dist/agents/extract.js +0 -186
  6. package/dist/agents/extract.js.map +0 -1
  7. package/dist/agents/schemas.d.ts +0 -106
  8. package/dist/agents/schemas.d.ts.map +0 -1
  9. package/dist/agents/schemas.js +0 -86
  10. package/dist/agents/schemas.js.map +0 -1
  11. package/dist/agents/session.d.ts +0 -28
  12. package/dist/agents/session.d.ts.map +0 -1
  13. package/dist/agents/session.js +0 -223
  14. package/dist/agents/session.js.map +0 -1
  15. package/dist/analyzers/index.d.ts +0 -3
  16. package/dist/analyzers/index.d.ts.map +0 -1
  17. package/dist/analyzers/index.js +0 -6
  18. package/dist/analyzers/index.js.map +0 -1
  19. package/dist/analyzers/security/report.d.ts +0 -6
  20. package/dist/analyzers/security/report.d.ts.map +0 -1
  21. package/dist/analyzers/security/report.js +0 -118
  22. package/dist/analyzers/security/report.js.map +0 -1
  23. package/dist/analyzers/tools/dotnet.d.ts +0 -8
  24. package/dist/analyzers/tools/dotnet.d.ts.map +0 -1
  25. package/dist/analyzers/tools/dotnet.js +0 -81
  26. package/dist/analyzers/tools/dotnet.js.map +0 -1
  27. package/dist/analyzers/tools/gather-cache.d.ts +0 -16
  28. package/dist/analyzers/tools/gather-cache.d.ts.map +0 -1
  29. package/dist/analyzers/tools/gather-cache.js +0 -126
  30. package/dist/analyzers/tools/gather-cache.js.map +0 -1
  31. package/dist/analyzers/tools/go.d.ts +0 -8
  32. package/dist/analyzers/tools/go.d.ts.map +0 -1
  33. package/dist/analyzers/tools/go.js +0 -84
  34. package/dist/analyzers/tools/go.js.map +0 -1
  35. package/dist/analyzers/tools/node.d.ts +0 -8
  36. package/dist/analyzers/tools/node.d.ts.map +0 -1
  37. package/dist/analyzers/tools/node.js +0 -160
  38. package/dist/analyzers/tools/node.js.map +0 -1
  39. package/dist/analyzers/tools/python.d.ts +0 -8
  40. package/dist/analyzers/tools/python.d.ts.map +0 -1
  41. package/dist/analyzers/tools/python.js +0 -81
  42. package/dist/analyzers/tools/python.js.map +0 -1
  43. package/dist/analyzers/tools/rust.d.ts +0 -8
  44. package/dist/analyzers/tools/rust.d.ts.map +0 -1
  45. package/dist/analyzers/tools/rust.js +0 -86
  46. package/dist/analyzers/tools/rust.js.map +0 -1
  47. package/templates/.ai/templates/session-checkpoint-template.md +0 -97
package/CHANGELOG.md CHANGED
@@ -7,6 +7,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.2.1] - 2026-04-23
11
+
12
+ Patch release hardening the publish pipeline after `v2.2.0`'s Publish
13
+ workflow failed with `403 — version already published`. The failure
14
+ was caused by a local `npm publish` that preceded the
15
+ Release-triggered CI publish, not a code defect — the tarball on npm
16
+ byte-matches main. No functional changes in this release; all work
17
+ is on the release path (tracked internally as D015).
18
+
19
+ ### Added — publish pipeline guardrails
20
+
21
+ - **`scripts/require-ci.js` + `prepublishOnly` guard** — any `npm publish`
22
+ invocation outside GitHub Actions now fails at the script hook with
23
+ a clear error pointing to `CLAUDE.md §"Release procedure"`. Prevents
24
+ accidental local publish before the registry is ever contacted.
25
+
26
+ - **`publishConfig.provenance: true`** — npm publishes now carry a
27
+ GitHub Actions provenance attestation. Provenance requires an OIDC
28
+ token that only exists inside Actions; tarball-mode publishes
29
+ (`npm publish *.tgz`, which skips `prepublishOnly`) also fail outside
30
+ CI. Belt-and-suspenders with the script guard.
31
+
32
+ - **Publish-workflow preflights** (`.github/workflows/publish.yml`) —
33
+ before `npm publish` runs, the workflow now verifies (in order):
34
+ 1. tag `vX.Y.Z` matches `package.json` version `X.Y.Z`
35
+ 2. tagged commit is reachable from `origin/main` (blocks
36
+ feature-branch tags)
37
+ 3. the `CI` workflow succeeded on the tagged commit SHA
38
+ 4. `X.Y.Z` is not already on npm (catches the exact 2.2.0 failure)
39
+
40
+ - **Explicit pack + publish + verify** — workflow packs the tarball,
41
+ records its sha1, publishes that exact file, then fetches
42
+ `npm view dist.shasum` and fails on mismatch. Eliminates drift
43
+ between "what npm packed" and "what we audited."
44
+
45
+ - **Tarball workflow artifact** — every release archives the published
46
+ `.tgz` as a workflow artifact (90-day retention) for post-mortem
47
+ auditability.
48
+
49
+ ### Documented — `CLAUDE.md`
50
+
51
+ New "Release procedure" section codifying PR → CI-green → merge → tag
52
+ → CI publishes as the only path. Explicit "no local `npm publish`"
53
+ rule.
54
+
10
55
  ## [2.2.0] - 2026-04-23
11
56
 
12
57
  Minor release adding Snyk-style top-level dep attribution across every
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vyuhlabs/dxkit",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "AI-native developer experience toolkit for any repository",
5
5
  "license": "MIT",
6
6
  "author": "Vyuh Labs",
@@ -16,7 +16,8 @@
16
16
  "vyuh-dxkit": "./dist/index.js"
17
17
  },
18
18
  "publishConfig": {
19
- "access": "public"
19
+ "access": "public",
20
+ "provenance": true
20
21
  },
21
22
  "main": "./dist/lib.js",
22
23
  "types": "./dist/lib.d.ts",
@@ -39,7 +40,7 @@
39
40
  ],
40
41
  "scripts": {
41
42
  "build": "node scripts/copy-templates.js && tsc",
42
- "prepublishOnly": "npm run build",
43
+ "prepublishOnly": "node scripts/require-ci.js && npm run build",
43
44
  "typecheck": "tsc --noEmit",
44
45
  "lint": "eslint .",
45
46
  "lint:fix": "eslint . --fix",
@@ -1,25 +0,0 @@
1
- /**
2
- * Prompt extraction — reads agent templates from src-templates/
3
- * and transforms them for use with Managed Agents.
4
- *
5
- * Source of truth: src-templates/.claude/agents-available/*.md
6
- * This module READS those files at runtime — never copies or duplicates them.
7
- */
8
- export interface ExtractedAgent {
9
- name: string;
10
- description: string;
11
- systemPrompt: string;
12
- model: string;
13
- tools: Array<{
14
- type: string;
15
- [key: string]: unknown;
16
- }>;
17
- outputSchema: object | undefined;
18
- }
19
- /** List all available agent template names. */
20
- export declare function listAgentTemplates(): string[];
21
- /** Extract a single agent's prompt from its template file. */
22
- export declare function extractAgent(name: string, modelOverride?: string): ExtractedAgent;
23
- /** Extract all available agent prompts. */
24
- export declare function extractAllAgents(modelOverride?: string): ExtractedAgent[];
25
- //# sourceMappingURL=extract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/agents/extract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACvD,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AA4DD,+CAA+C;AAC/C,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAO7C;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,cAAc,CA0CjF;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAEzE"}
@@ -1,186 +0,0 @@
1
- "use strict";
2
- /**
3
- * Prompt extraction — reads agent templates from src-templates/
4
- * and transforms them for use with Managed Agents.
5
- *
6
- * Source of truth: src-templates/.claude/agents-available/*.md
7
- * This module READS those files at runtime — never copies or duplicates them.
8
- */
9
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- var desc = Object.getOwnPropertyDescriptor(m, k);
12
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
- desc = { enumerable: true, get: function() { return m[k]; } };
14
- }
15
- Object.defineProperty(o, k2, desc);
16
- }) : (function(o, m, k, k2) {
17
- if (k2 === undefined) k2 = k;
18
- o[k2] = m[k];
19
- }));
20
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
- Object.defineProperty(o, "default", { enumerable: true, value: v });
22
- }) : function(o, v) {
23
- o["default"] = v;
24
- });
25
- var __importStar = (this && this.__importStar) || (function () {
26
- var ownKeys = function(o) {
27
- ownKeys = Object.getOwnPropertyNames || function (o) {
28
- var ar = [];
29
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
- return ar;
31
- };
32
- return ownKeys(o);
33
- };
34
- return function (mod) {
35
- if (mod && mod.__esModule) return mod;
36
- var result = {};
37
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
- __setModuleDefault(result, mod);
39
- return result;
40
- };
41
- })();
42
- Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.listAgentTemplates = listAgentTemplates;
44
- exports.extractAgent = extractAgent;
45
- exports.extractAllAgents = extractAllAgents;
46
- const fs = __importStar(require("fs"));
47
- const path = __importStar(require("path"));
48
- const schemas_1 = require("./schemas");
49
- /**
50
- * Default model per agent category.
51
- * Analysis agents use Sonnet (cheaper, good enough).
52
- * Execution agents use Opus (accuracy matters for code changes).
53
- */
54
- const AGENT_MODELS = {
55
- // Analysis — Sonnet is cost-effective
56
- 'health-auditor': 'claude-sonnet-4-6',
57
- 'vulnerability-scanner': 'claude-sonnet-4-6',
58
- 'test-gap-finder': 'claude-sonnet-4-6',
59
- 'dev-report': 'claude-sonnet-4-6',
60
- 'dependency-mapper': 'claude-sonnet-4-6',
61
- 'codebase-explorer': 'claude-sonnet-4-6',
62
- 'code-reviewer': 'claude-sonnet-4-6',
63
- 'doc-writer': 'claude-sonnet-4-6',
64
- 'dashboard-builder': 'claude-sonnet-4-6',
65
- 'knowledge-bot': 'claude-sonnet-4-6',
66
- // Execution — Opus for accuracy
67
- 'feature-planner': 'claude-opus-4-6',
68
- 'feature-builder': 'claude-opus-4-6',
69
- 'plan-executor': 'claude-opus-4-6',
70
- 'strategic-planner': 'claude-opus-4-6',
71
- 'test-writer': 'claude-opus-4-6',
72
- 'debugger': 'claude-opus-4-6',
73
- 'hooks-configurator': 'claude-sonnet-4-6',
74
- };
75
- /** Map of Claude Code slash command references to plain-language equivalents. */
76
- const COMMAND_REPLACEMENTS = {
77
- 'Run /health': 'Analyze the codebase for health metrics',
78
- 'Run /quality': 'Run available linting tools via bash',
79
- 'Run /test': 'Run the test suite via bash',
80
- 'Run /vulnerabilities': 'Scan for security vulnerabilities',
81
- '/health': 'health analysis',
82
- '/quality': 'quality check',
83
- '/test': 'test suite',
84
- };
85
- /** Lines to strip from prompts (Claude Code-specific). */
86
- const STRIP_PATTERNS = [
87
- /Save .*to \.ai\/reports\/.*/g,
88
- /Saves? reports? to \.ai\/reports\/.*/g,
89
- /\.ai\/reports\//g,
90
- /\.ai\/sessions\//g,
91
- ];
92
- /**
93
- * Resolve the templates directory.
94
- * In development: src-templates/
95
- * When published: templates/ (copied by build script)
96
- */
97
- function templatesDir() {
98
- const srcTemplates = path.resolve(__dirname, '..', '..', 'src-templates');
99
- if (fs.existsSync(srcTemplates))
100
- return srcTemplates;
101
- return path.resolve(__dirname, '..', '..', 'templates');
102
- }
103
- /** List all available agent template names. */
104
- function listAgentTemplates() {
105
- const dir = path.join(templatesDir(), '.claude', 'agents-available');
106
- if (!fs.existsSync(dir))
107
- return [];
108
- return fs
109
- .readdirSync(dir)
110
- .filter((f) => f.endsWith('.md'))
111
- .map((f) => f.replace('.md', ''));
112
- }
113
- /** Extract a single agent's prompt from its template file. */
114
- function extractAgent(name, modelOverride) {
115
- const filePath = path.join(templatesDir(), '.claude', 'agents-available', `${name}.md`);
116
- if (!fs.existsSync(filePath)) {
117
- throw new Error(`Agent template not found: ${name}`);
118
- }
119
- const raw = fs.readFileSync(filePath, 'utf-8');
120
- const { frontmatter, body } = parseFrontmatter(raw);
121
- // Clean the prompt for Managed Agent use
122
- let systemPrompt = body;
123
- // Replace Claude Code command references
124
- for (const [pattern, replacement] of Object.entries(COMMAND_REPLACEMENTS)) {
125
- systemPrompt = systemPrompt.replaceAll(pattern, replacement);
126
- }
127
- // Strip Claude Code-specific lines
128
- for (const pattern of STRIP_PATTERNS) {
129
- systemPrompt = systemPrompt.replace(pattern, '');
130
- }
131
- // Determine the agent type for schema lookup
132
- const agentType = mapNameToSchemaType(name);
133
- const outputSchema = agentType ? (0, schemas_1.getSchema)(agentType) : undefined;
134
- // Append JSON output instructions if we have a schema
135
- if (outputSchema) {
136
- systemPrompt += `\n\n## Output Format\n\nReturn your analysis as valid JSON. Wrap the JSON in a \`\`\`json code block. The JSON must match this schema:\n\n\`\`\`json\n${JSON.stringify(outputSchema, null, 2)}\n\`\`\`\n`;
137
- }
138
- // Clean up excessive blank lines
139
- systemPrompt = systemPrompt.replace(/\n{3,}/g, '\n\n').trim();
140
- return {
141
- name: `dxkit-${name}`,
142
- description: frontmatter.description || `DXKit ${name} agent`,
143
- systemPrompt,
144
- model: modelOverride || AGENT_MODELS[name] || 'claude-sonnet-4-6',
145
- tools: [{ type: 'agent_toolset_20260401' }],
146
- outputSchema,
147
- };
148
- }
149
- /** Extract all available agent prompts. */
150
- function extractAllAgents(modelOverride) {
151
- return listAgentTemplates().map((name) => extractAgent(name, modelOverride));
152
- }
153
- /** Map agent names to schema type keys. */
154
- function mapNameToSchemaType(name) {
155
- const map = {
156
- 'health-auditor': 'health',
157
- 'vulnerability-scanner': 'vulnerabilities',
158
- 'feature-planner': 'feature',
159
- 'feature-builder': 'execution',
160
- 'plan-executor': 'execution',
161
- };
162
- return map[name];
163
- }
164
- /** Parse YAML-ish frontmatter from agent markdown files. */
165
- function parseFrontmatter(raw) {
166
- const frontmatter = {};
167
- if (!raw.startsWith('---')) {
168
- return { frontmatter, body: raw };
169
- }
170
- const endIdx = raw.indexOf('---', 3);
171
- if (endIdx === -1) {
172
- return { frontmatter, body: raw };
173
- }
174
- const fmBlock = raw.slice(3, endIdx).trim();
175
- for (const line of fmBlock.split('\n')) {
176
- const colonIdx = line.indexOf(':');
177
- if (colonIdx === -1)
178
- continue;
179
- const key = line.slice(0, colonIdx).trim();
180
- const value = line.slice(colonIdx + 1).trim();
181
- frontmatter[key] = value;
182
- }
183
- const body = raw.slice(endIdx + 3).trim();
184
- return { frontmatter, body };
185
- }
186
- //# sourceMappingURL=extract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/agents/extract.ts"],"names":[],"mappings":"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"}
@@ -1,106 +0,0 @@
1
- /**
2
- * JSON output schemas for Managed Agent responses.
3
- * Each agent type returns structured JSON matching these schemas.
4
- */
5
- export interface HealthReport {
6
- repo: string;
7
- analyzedAt: string;
8
- summary: {
9
- overallScore: number;
10
- maxScore: number;
11
- grade: 'A' | 'B' | 'C' | 'D' | 'F';
12
- };
13
- dimensions: {
14
- testing: {
15
- score: number;
16
- details: string;
17
- };
18
- quality: {
19
- score: number;
20
- details: string;
21
- };
22
- documentation: {
23
- score: number;
24
- details: string;
25
- };
26
- security: {
27
- score: number;
28
- details: string;
29
- };
30
- maintainability: {
31
- score: number;
32
- details: string;
33
- };
34
- developerExperience: {
35
- score: number;
36
- details: string;
37
- };
38
- };
39
- recommendations: Array<{
40
- priority: number;
41
- title: string;
42
- description: string;
43
- affectedFiles: string[];
44
- }>;
45
- }
46
- export interface VulnerabilityReport {
47
- repo: string;
48
- analyzedAt: string;
49
- summary: {
50
- total: number;
51
- critical: number;
52
- high: number;
53
- medium: number;
54
- low: number;
55
- };
56
- findings: Array<{
57
- cwe: string;
58
- severity: 'critical' | 'high' | 'medium' | 'low';
59
- title: string;
60
- file: string;
61
- line: number | null;
62
- description: string;
63
- recommendation: string;
64
- }>;
65
- }
66
- export interface FeaturePlan {
67
- slug: string;
68
- title: string;
69
- description: string;
70
- tasks: Array<{
71
- sequence: number;
72
- title: string;
73
- description: string;
74
- type: string;
75
- affectedFiles: string[];
76
- acceptanceCriteria: string[];
77
- dependsOn: number[];
78
- }>;
79
- risks: Array<{
80
- description: string;
81
- severity: string;
82
- mitigation: string;
83
- }>;
84
- }
85
- export interface ExecutionReport {
86
- taskKey: string;
87
- status: 'success' | 'failed' | 'timeout';
88
- filesChanged: Array<{
89
- path: string;
90
- additions: number;
91
- deletions: number;
92
- }>;
93
- changeSummary: string;
94
- testResults: {
95
- passed: boolean;
96
- total: number;
97
- failed: number;
98
- output: string;
99
- };
100
- retries: number;
101
- }
102
- /** JSON schema objects for injection into system prompts. */
103
- export declare const SCHEMA_JSON: Record<string, object>;
104
- /** Map agent type names to their JSON schemas. */
105
- export declare function getSchema(agentType: string): object | undefined;
106
- //# sourceMappingURL=schemas.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/agents/schemas.ts"],"names":[],"mappings":"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"}
@@ -1,86 +0,0 @@
1
- "use strict";
2
- /**
3
- * JSON output schemas for Managed Agent responses.
4
- * Each agent type returns structured JSON matching these schemas.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.SCHEMA_JSON = void 0;
8
- exports.getSchema = getSchema;
9
- /** JSON schema objects for injection into system prompts. */
10
- exports.SCHEMA_JSON = {
11
- health: {
12
- type: 'object',
13
- properties: {
14
- repo: { type: 'string' },
15
- analyzedAt: { type: 'string' },
16
- summary: {
17
- type: 'object',
18
- properties: {
19
- overallScore: { type: 'number' },
20
- maxScore: { type: 'number', const: 60 },
21
- grade: { type: 'string', enum: ['A', 'B', 'C', 'D', 'F'] },
22
- },
23
- },
24
- dimensions: {
25
- type: 'object',
26
- properties: {
27
- testing: { type: 'object', properties: { score: { type: 'number' }, details: { type: 'string' } } },
28
- quality: { type: 'object', properties: { score: { type: 'number' }, details: { type: 'string' } } },
29
- documentation: { type: 'object', properties: { score: { type: 'number' }, details: { type: 'string' } } },
30
- security: { type: 'object', properties: { score: { type: 'number' }, details: { type: 'string' } } },
31
- maintainability: { type: 'object', properties: { score: { type: 'number' }, details: { type: 'string' } } },
32
- developerExperience: { type: 'object', properties: { score: { type: 'number' }, details: { type: 'string' } } },
33
- },
34
- },
35
- recommendations: {
36
- type: 'array',
37
- items: {
38
- type: 'object',
39
- properties: {
40
- priority: { type: 'number' },
41
- title: { type: 'string' },
42
- description: { type: 'string' },
43
- affectedFiles: { type: 'array', items: { type: 'string' } },
44
- },
45
- },
46
- },
47
- },
48
- },
49
- vulnerabilities: {
50
- type: 'object',
51
- properties: {
52
- repo: { type: 'string' },
53
- analyzedAt: { type: 'string' },
54
- summary: {
55
- type: 'object',
56
- properties: {
57
- total: { type: 'number' },
58
- critical: { type: 'number' },
59
- high: { type: 'number' },
60
- medium: { type: 'number' },
61
- low: { type: 'number' },
62
- },
63
- },
64
- findings: {
65
- type: 'array',
66
- items: {
67
- type: 'object',
68
- properties: {
69
- cwe: { type: 'string' },
70
- severity: { type: 'string' },
71
- title: { type: 'string' },
72
- file: { type: 'string' },
73
- line: { type: ['number', 'null'] },
74
- description: { type: 'string' },
75
- recommendation: { type: 'string' },
76
- },
77
- },
78
- },
79
- },
80
- },
81
- };
82
- /** Map agent type names to their JSON schemas. */
83
- function getSchema(agentType) {
84
- return exports.SCHEMA_JSON[agentType];
85
- }
86
- //# sourceMappingURL=schemas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/agents/schemas.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Managed Agent session orchestration.
3
- *
4
- * Creates sessions, mounts repos, sends tasks, streams results.
5
- * Requires @anthropic-ai/sdk and ANTHROPIC_API_KEY.
6
- */
7
- /** Stored agent config — persisted to .dxkit-agents.json */
8
- export interface AgentConfig {
9
- version: string;
10
- environment_id: string;
11
- agents: Record<string, {
12
- agent_id: string;
13
- agent_version: string;
14
- prompt_hash: string;
15
- }>;
16
- }
17
- /** Load agent config from disk. */
18
- export declare function loadConfig(cwd: string): AgentConfig | null;
19
- /**
20
- * Set up all agents on Anthropic's infrastructure.
21
- * Creates an environment and one agent per template.
22
- */
23
- export declare function setupAgents(cwd: string, modelOverride?: string): Promise<AgentConfig>;
24
- /** List registered agents. */
25
- export declare function listAgents(cwd: string): void;
26
- /** Run an agent session on a GitHub repo. */
27
- export declare function runAgent(cwd: string, agentType: string, repoUrl: string, githubToken: string, branch?: string, task?: string): Promise<string>;
28
- //# sourceMappingURL=session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/agents/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,4DAA4D;AAC5D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CACZ,MAAM,EACN;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CACF,CAAC;CACH;AAID,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQ1D;AAkBD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAsD3F;AAED,8BAA8B;AAC9B,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAe5C;AAED,6CAA6C;AAC7C,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAuFjB"}