@sweny-ai/core 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.
- package/dist/__tests__/claude.test.d.ts +1 -0
- package/dist/__tests__/claude.test.js +328 -0
- package/dist/__tests__/executor.test.d.ts +1 -0
- package/dist/__tests__/executor.test.js +296 -0
- package/dist/__tests__/integration/datadog.integration.test.d.ts +1 -0
- package/dist/__tests__/integration/datadog.integration.test.js +23 -0
- package/dist/__tests__/integration/e2e-workflow.integration.test.d.ts +1 -0
- package/dist/__tests__/integration/e2e-workflow.integration.test.js +75 -0
- package/dist/__tests__/integration/github.integration.test.d.ts +1 -0
- package/dist/__tests__/integration/github.integration.test.js +37 -0
- package/dist/__tests__/integration/harness.d.ts +24 -0
- package/dist/__tests__/integration/harness.js +34 -0
- package/dist/__tests__/integration/linear.integration.test.d.ts +1 -0
- package/dist/__tests__/integration/linear.integration.test.js +15 -0
- package/dist/__tests__/integration/sentry.integration.test.d.ts +1 -0
- package/dist/__tests__/integration/sentry.integration.test.js +20 -0
- package/dist/__tests__/integration/slack.integration.test.d.ts +1 -0
- package/dist/__tests__/integration/slack.integration.test.js +22 -0
- package/dist/__tests__/schema.test.d.ts +1 -0
- package/dist/__tests__/schema.test.js +239 -0
- package/dist/__tests__/skills-index.test.d.ts +1 -0
- package/dist/__tests__/skills-index.test.js +122 -0
- package/dist/__tests__/skills.test.d.ts +1 -0
- package/dist/__tests__/skills.test.js +296 -0
- package/dist/__tests__/studio.test.d.ts +1 -0
- package/dist/__tests__/studio.test.js +172 -0
- package/dist/__tests__/testing.test.d.ts +1 -0
- package/dist/__tests__/testing.test.js +224 -0
- package/dist/browser.d.ts +17 -0
- package/dist/browser.js +22 -0
- package/dist/claude.d.ts +48 -0
- package/dist/claude.js +293 -0
- package/dist/cli/check.d.ts +11 -0
- package/dist/cli/check.js +237 -0
- package/dist/cli/config-file.d.ts +12 -0
- package/dist/cli/config-file.js +208 -0
- package/dist/cli/config.d.ts +77 -0
- package/dist/cli/config.js +565 -0
- package/dist/cli/main.d.ts +10 -0
- package/dist/cli/main.js +744 -0
- package/dist/cli/output.d.ts +26 -0
- package/dist/cli/output.js +357 -0
- package/dist/cli/renderer.d.ts +33 -0
- package/dist/cli/renderer.js +423 -0
- package/dist/cli/renderer.test.d.ts +1 -0
- package/dist/cli/renderer.test.js +302 -0
- package/dist/cli/setup.d.ts +11 -0
- package/dist/cli/setup.js +310 -0
- package/dist/executor.d.ts +29 -0
- package/dist/executor.js +173 -0
- package/dist/executor.test.d.ts +1 -0
- package/dist/executor.test.js +314 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +36 -0
- package/dist/mcp.d.ts +11 -0
- package/dist/mcp.js +183 -0
- package/dist/mcp.test.d.ts +1 -0
- package/dist/mcp.test.js +334 -0
- package/dist/schema.d.ts +318 -0
- package/dist/schema.js +207 -0
- package/dist/skills/betterstack.d.ts +7 -0
- package/dist/skills/betterstack.js +114 -0
- package/dist/skills/datadog.d.ts +7 -0
- package/dist/skills/datadog.js +107 -0
- package/dist/skills/github.d.ts +8 -0
- package/dist/skills/github.js +155 -0
- package/dist/skills/index.d.ts +68 -0
- package/dist/skills/index.js +134 -0
- package/dist/skills/linear.d.ts +7 -0
- package/dist/skills/linear.js +89 -0
- package/dist/skills/notification.d.ts +11 -0
- package/dist/skills/notification.js +142 -0
- package/dist/skills/sentry.d.ts +7 -0
- package/dist/skills/sentry.js +105 -0
- package/dist/skills/slack.d.ts +8 -0
- package/dist/skills/slack.js +115 -0
- package/dist/studio.d.ts +124 -0
- package/dist/studio.js +174 -0
- package/dist/testing.d.ts +88 -0
- package/dist/testing.js +253 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.js +11 -0
- package/dist/workflow-builder.d.ts +45 -0
- package/dist/workflow-builder.js +120 -0
- package/dist/workflow-builder.test.d.ts +1 -0
- package/dist/workflow-builder.test.js +117 -0
- package/dist/workflows/implement.d.ts +11 -0
- package/dist/workflows/implement.js +83 -0
- package/dist/workflows/index.d.ts +2 -0
- package/dist/workflows/index.js +2 -0
- package/dist/workflows/triage.d.ts +18 -0
- package/dist/workflows/triage.js +108 -0
- package/package.json +83 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { buildWorkflow, refineWorkflow } from "./workflow-builder.js";
|
|
3
|
+
import { MockClaude } from "./testing.js";
|
|
4
|
+
// ─── Test fixtures ────────────────────────────────────────────────
|
|
5
|
+
const mockSkill = {
|
|
6
|
+
id: "github",
|
|
7
|
+
name: "GitHub",
|
|
8
|
+
description: "Interact with GitHub repositories and pull requests",
|
|
9
|
+
category: "git",
|
|
10
|
+
config: {},
|
|
11
|
+
tools: [],
|
|
12
|
+
};
|
|
13
|
+
const validWorkflow = {
|
|
14
|
+
id: "triage-errors",
|
|
15
|
+
name: "Triage Errors",
|
|
16
|
+
description: "Queries Sentry for errors and creates a ticket",
|
|
17
|
+
entry: "gather",
|
|
18
|
+
nodes: {
|
|
19
|
+
gather: {
|
|
20
|
+
name: "Gather Errors",
|
|
21
|
+
instruction: "Query Sentry for unresolved errors from the last 24 hours. Group by fingerprint. Return top 10 by frequency.",
|
|
22
|
+
skills: ["github"],
|
|
23
|
+
},
|
|
24
|
+
report: {
|
|
25
|
+
name: "Report",
|
|
26
|
+
instruction: "Summarize the gathered errors and output a final report.",
|
|
27
|
+
skills: [],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
edges: [{ from: "gather", to: "report" }],
|
|
31
|
+
};
|
|
32
|
+
// ─── buildWorkflow ────────────────────────────────────────────────
|
|
33
|
+
describe("buildWorkflow", () => {
|
|
34
|
+
it("returns a validated Workflow when Claude produces valid output", async () => {
|
|
35
|
+
const claude = new MockClaude({
|
|
36
|
+
responses: {
|
|
37
|
+
build: { data: { ...validWorkflow } },
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
const opts = { claude, skills: [mockSkill] };
|
|
41
|
+
const result = await buildWorkflow("Triage Sentry errors", opts);
|
|
42
|
+
expect(result.id).toBe("triage-errors");
|
|
43
|
+
expect(result.entry).toBe("gather");
|
|
44
|
+
expect(Object.keys(result.nodes)).toHaveLength(2);
|
|
45
|
+
expect(result.edges).toHaveLength(1);
|
|
46
|
+
});
|
|
47
|
+
it("throws when Claude produces invalid output (missing entry)", async () => {
|
|
48
|
+
const badWorkflow = { ...validWorkflow, entry: "nonexistent-node" };
|
|
49
|
+
const claude = new MockClaude({
|
|
50
|
+
responses: {
|
|
51
|
+
build: { data: { ...badWorkflow } },
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
const opts = { claude, skills: [mockSkill] };
|
|
55
|
+
await expect(buildWorkflow("Triage Sentry errors", opts)).rejects.toThrow();
|
|
56
|
+
});
|
|
57
|
+
it("throws when Claude returns empty data", async () => {
|
|
58
|
+
const claude = new MockClaude({
|
|
59
|
+
responses: {
|
|
60
|
+
build: { data: {} },
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const opts = { claude, skills: [mockSkill] };
|
|
64
|
+
await expect(buildWorkflow("Triage Sentry errors", opts)).rejects.toThrow();
|
|
65
|
+
});
|
|
66
|
+
it("includes skill descriptions in the prompt context", async () => {
|
|
67
|
+
let capturedInstruction = "";
|
|
68
|
+
const capturingClaude = {
|
|
69
|
+
async run(opts) {
|
|
70
|
+
capturedInstruction = opts.instruction;
|
|
71
|
+
return { status: "success", data: { ...validWorkflow }, toolCalls: [] };
|
|
72
|
+
},
|
|
73
|
+
async evaluate() {
|
|
74
|
+
return "";
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
const opts = { claude: capturingClaude, skills: [mockSkill] };
|
|
78
|
+
await buildWorkflow("Triage Sentry errors", opts);
|
|
79
|
+
expect(capturedInstruction).toContain("github");
|
|
80
|
+
expect(capturedInstruction).toContain("Interact with GitHub repositories");
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
// ─── refineWorkflow ───────────────────────────────────────────────
|
|
84
|
+
describe("refineWorkflow", () => {
|
|
85
|
+
it("returns a modified workflow", async () => {
|
|
86
|
+
const refinedWorkflow = {
|
|
87
|
+
...validWorkflow,
|
|
88
|
+
id: "triage-errors-refined",
|
|
89
|
+
name: "Triage Errors (Refined)",
|
|
90
|
+
};
|
|
91
|
+
const claude = new MockClaude({
|
|
92
|
+
responses: {
|
|
93
|
+
refine: { data: { ...refinedWorkflow } },
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
const opts = { claude, skills: [mockSkill] };
|
|
97
|
+
const result = await refineWorkflow(validWorkflow, "Add a node that creates a Linear ticket", opts);
|
|
98
|
+
expect(result.id).toBe("triage-errors-refined");
|
|
99
|
+
expect(result.name).toBe("Triage Errors (Refined)");
|
|
100
|
+
});
|
|
101
|
+
it("includes the current workflow in the prompt", async () => {
|
|
102
|
+
let capturedInstruction = "";
|
|
103
|
+
const capturingClaude = {
|
|
104
|
+
async run(opts) {
|
|
105
|
+
capturedInstruction = opts.instruction;
|
|
106
|
+
return { status: "success", data: { ...validWorkflow }, toolCalls: [] };
|
|
107
|
+
},
|
|
108
|
+
async evaluate() {
|
|
109
|
+
return "";
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
const opts = { claude: capturingClaude, skills: [mockSkill] };
|
|
113
|
+
await refineWorkflow(validWorkflow, "Add a notification node", opts);
|
|
114
|
+
expect(capturedInstruction).toContain("triage-errors");
|
|
115
|
+
expect(capturedInstruction).toContain("gather");
|
|
116
|
+
});
|
|
117
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implement Workflow
|
|
3
|
+
*
|
|
4
|
+
* Given an issue, implement a fix and open a pull request.
|
|
5
|
+
*
|
|
6
|
+
* Compare: the previous version was 8 files, ~2000 lines.
|
|
7
|
+
* This version is a DAG definition — Claude does the implementation
|
|
8
|
+
* work at each node using the available skill tools.
|
|
9
|
+
*/
|
|
10
|
+
import type { Workflow } from "../types.js";
|
|
11
|
+
export declare const implementWorkflow: Workflow;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implement Workflow
|
|
3
|
+
*
|
|
4
|
+
* Given an issue, implement a fix and open a pull request.
|
|
5
|
+
*
|
|
6
|
+
* Compare: the previous version was 8 files, ~2000 lines.
|
|
7
|
+
* This version is a DAG definition — Claude does the implementation
|
|
8
|
+
* work at each node using the available skill tools.
|
|
9
|
+
*/
|
|
10
|
+
export const implementWorkflow = {
|
|
11
|
+
id: "implement",
|
|
12
|
+
name: "Implement Fix",
|
|
13
|
+
description: "Implement a code fix for an issue and open a pull request",
|
|
14
|
+
entry: "analyze",
|
|
15
|
+
nodes: {
|
|
16
|
+
analyze: {
|
|
17
|
+
name: "Analyze Issue",
|
|
18
|
+
instruction: `Read the issue details and understand what needs to be fixed:
|
|
19
|
+
|
|
20
|
+
1. Fetch the issue from the tracker (GitHub or Linear).
|
|
21
|
+
2. Read the relevant source files to understand the current code.
|
|
22
|
+
3. Identify the exact files and lines that need to change.
|
|
23
|
+
4. Plan the fix approach.
|
|
24
|
+
|
|
25
|
+
Output a clear analysis of what needs to change and why.`,
|
|
26
|
+
skills: ["github", "linear"],
|
|
27
|
+
output: {
|
|
28
|
+
type: "object",
|
|
29
|
+
properties: {
|
|
30
|
+
issue_summary: { type: "string" },
|
|
31
|
+
files_to_change: { type: "array", items: { type: "string" } },
|
|
32
|
+
fix_plan: { type: "string" },
|
|
33
|
+
risk_level: { type: "string", enum: ["low", "medium", "high"] },
|
|
34
|
+
},
|
|
35
|
+
required: ["issue_summary", "fix_plan"],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
implement: {
|
|
39
|
+
name: "Implement Fix",
|
|
40
|
+
instruction: `Implement the planned fix:
|
|
41
|
+
|
|
42
|
+
1. Create a feature branch.
|
|
43
|
+
2. Make the necessary code changes.
|
|
44
|
+
3. Ensure changes are minimal and focused — fix the bug, nothing more.
|
|
45
|
+
4. Stage and commit with a clear commit message referencing the issue.
|
|
46
|
+
|
|
47
|
+
If the fix is too risky or complex, explain why and skip.`,
|
|
48
|
+
skills: ["github"],
|
|
49
|
+
},
|
|
50
|
+
create_pr: {
|
|
51
|
+
name: "Open Pull Request",
|
|
52
|
+
instruction: `Open a pull request for the fix:
|
|
53
|
+
|
|
54
|
+
1. Push the branch to the remote.
|
|
55
|
+
2. Create a PR with a clear title and description.
|
|
56
|
+
3. Reference the original issue in the PR body.
|
|
57
|
+
4. Add appropriate reviewers or labels if possible.
|
|
58
|
+
|
|
59
|
+
Return the PR URL.`,
|
|
60
|
+
skills: ["github"],
|
|
61
|
+
},
|
|
62
|
+
notify: {
|
|
63
|
+
name: "Notify",
|
|
64
|
+
instruction: `Send a notification about the implementation result:
|
|
65
|
+
|
|
66
|
+
1. Include: issue reference, PR link, brief summary of changes.
|
|
67
|
+
2. Keep it concise — one message, not a wall of text.`,
|
|
68
|
+
skills: ["slack", "notification"],
|
|
69
|
+
},
|
|
70
|
+
skip: {
|
|
71
|
+
name: "Skip — Too Complex",
|
|
72
|
+
instruction: `The fix was determined to be too complex or risky for automated implementation.
|
|
73
|
+
Add a comment to the issue explaining what was found and why it needs manual attention.`,
|
|
74
|
+
skills: ["github", "linear"],
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
edges: [
|
|
78
|
+
{ from: "analyze", to: "implement", when: "Fix risk level is low or medium and a clear plan exists" },
|
|
79
|
+
{ from: "analyze", to: "skip", when: "Fix is too complex, risky, or unclear" },
|
|
80
|
+
{ from: "implement", to: "create_pr" },
|
|
81
|
+
{ from: "create_pr", to: "notify" },
|
|
82
|
+
],
|
|
83
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triage Workflow
|
|
3
|
+
*
|
|
4
|
+
* Investigate a production alert → gather context from available
|
|
5
|
+
* providers → determine root cause → create issue → notify team.
|
|
6
|
+
*
|
|
7
|
+
* Provider-agnostic: nodes list all compatible skills per category.
|
|
8
|
+
* The executor uses whichever skills are configured. Pre-execution
|
|
9
|
+
* validation ensures required categories have at least one provider.
|
|
10
|
+
*
|
|
11
|
+
* Categories used:
|
|
12
|
+
* git: github (+ bitbucket, gitlab in future)
|
|
13
|
+
* observability: sentry, datadog, betterstack (+ aws, pagerduty in future)
|
|
14
|
+
* tasks: linear, github (issues) (+ jira in future)
|
|
15
|
+
* notification: slack, notification (discord/teams/webhook)
|
|
16
|
+
*/
|
|
17
|
+
import type { Workflow } from "../types.js";
|
|
18
|
+
export declare const triageWorkflow: Workflow;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triage Workflow
|
|
3
|
+
*
|
|
4
|
+
* Investigate a production alert → gather context from available
|
|
5
|
+
* providers → determine root cause → create issue → notify team.
|
|
6
|
+
*
|
|
7
|
+
* Provider-agnostic: nodes list all compatible skills per category.
|
|
8
|
+
* The executor uses whichever skills are configured. Pre-execution
|
|
9
|
+
* validation ensures required categories have at least one provider.
|
|
10
|
+
*
|
|
11
|
+
* Categories used:
|
|
12
|
+
* git: github (+ bitbucket, gitlab in future)
|
|
13
|
+
* observability: sentry, datadog, betterstack (+ aws, pagerduty in future)
|
|
14
|
+
* tasks: linear, github (issues) (+ jira in future)
|
|
15
|
+
* notification: slack, notification (discord/teams/webhook)
|
|
16
|
+
*/
|
|
17
|
+
export const triageWorkflow = {
|
|
18
|
+
id: "triage",
|
|
19
|
+
name: "Alert Triage",
|
|
20
|
+
description: "Investigate a production alert, determine root cause, create an issue, and notify the team",
|
|
21
|
+
entry: "gather",
|
|
22
|
+
nodes: {
|
|
23
|
+
gather: {
|
|
24
|
+
name: "Gather Context",
|
|
25
|
+
instruction: `You are investigating a production alert. Gather all relevant context using the available tools:
|
|
26
|
+
|
|
27
|
+
1. **Observability**: Pull error details, stack traces, recent logs, metrics, and active incidents around the time of the alert. Use whichever observability tools are available to you.
|
|
28
|
+
2. **Source control**: Check recent commits, pull requests, and deploys that might be related.
|
|
29
|
+
3. **Issue tracker**: Search for similar past issues or known problems.
|
|
30
|
+
|
|
31
|
+
Be thorough — the investigation step depends on complete context. Use every tool available to you.`,
|
|
32
|
+
skills: ["github", "sentry", "datadog", "betterstack", "linear"],
|
|
33
|
+
},
|
|
34
|
+
investigate: {
|
|
35
|
+
name: "Root Cause Analysis",
|
|
36
|
+
instruction: `Based on the gathered context, perform a root cause analysis:
|
|
37
|
+
|
|
38
|
+
1. Correlate the error with recent code changes, deploys, or config changes.
|
|
39
|
+
2. Identify the most likely root cause.
|
|
40
|
+
3. Assess severity: critical (service down), high (major feature broken), medium (degraded), low (cosmetic/minor).
|
|
41
|
+
4. Determine affected services and users.
|
|
42
|
+
5. Recommend a fix approach.
|
|
43
|
+
|
|
44
|
+
If this is a known issue that already has a ticket, mark it as duplicate.`,
|
|
45
|
+
skills: ["github"],
|
|
46
|
+
output: {
|
|
47
|
+
type: "object",
|
|
48
|
+
properties: {
|
|
49
|
+
root_cause: { type: "string" },
|
|
50
|
+
severity: { type: "string", enum: ["critical", "high", "medium", "low"] },
|
|
51
|
+
affected_services: { type: "array", items: { type: "string" } },
|
|
52
|
+
is_duplicate: { type: "boolean" },
|
|
53
|
+
duplicate_of: { type: "string", description: "Issue ID if duplicate" },
|
|
54
|
+
recommendation: { type: "string" },
|
|
55
|
+
fix_approach: { type: "string" },
|
|
56
|
+
},
|
|
57
|
+
required: ["root_cause", "severity", "recommendation"],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
create_issue: {
|
|
61
|
+
name: "Create Issue",
|
|
62
|
+
instruction: `Create an issue documenting the investigation findings:
|
|
63
|
+
|
|
64
|
+
1. Use a clear, actionable title.
|
|
65
|
+
2. Include: root cause, severity, affected services, reproduction steps, and recommended fix.
|
|
66
|
+
3. Add appropriate labels (bug, severity level, affected service).
|
|
67
|
+
4. Link to relevant commits, PRs, or existing issues.
|
|
68
|
+
|
|
69
|
+
Create the issue in whichever tracker is available to you.`,
|
|
70
|
+
skills: ["linear", "github"],
|
|
71
|
+
},
|
|
72
|
+
notify: {
|
|
73
|
+
name: "Notify Team",
|
|
74
|
+
instruction: `Send a notification summarizing the triage result:
|
|
75
|
+
|
|
76
|
+
1. Include: alert summary, severity, root cause (1-2 sentences), and a link to the created issue.
|
|
77
|
+
2. For critical/high severity, make the notification urgent.
|
|
78
|
+
3. For medium/low, a standard notification is fine.
|
|
79
|
+
|
|
80
|
+
Use whichever notification channel is available to you.`,
|
|
81
|
+
skills: ["slack", "notification"],
|
|
82
|
+
},
|
|
83
|
+
skip: {
|
|
84
|
+
name: "Skip — Duplicate or Low Priority",
|
|
85
|
+
instruction: `This alert was determined to be a duplicate or low-priority.
|
|
86
|
+
Log a brief note about why it was skipped. No further action needed.`,
|
|
87
|
+
skills: [],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
edges: [
|
|
91
|
+
// gather → investigate (always)
|
|
92
|
+
{ from: "gather", to: "investigate" },
|
|
93
|
+
// investigate → create_issue (if novel and actionable)
|
|
94
|
+
{
|
|
95
|
+
from: "investigate",
|
|
96
|
+
to: "create_issue",
|
|
97
|
+
when: "The issue is novel (not a duplicate) and severity is medium or higher",
|
|
98
|
+
},
|
|
99
|
+
// investigate → skip (if duplicate or low priority)
|
|
100
|
+
{
|
|
101
|
+
from: "investigate",
|
|
102
|
+
to: "skip",
|
|
103
|
+
when: "The issue is a duplicate of an existing ticket, or severity is low",
|
|
104
|
+
},
|
|
105
|
+
// create_issue → notify (always)
|
|
106
|
+
{ from: "create_issue", to: "notify" },
|
|
107
|
+
],
|
|
108
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sweny-ai/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"bin": {
|
|
6
|
+
"sweny": "./dist/cli/main.js"
|
|
7
|
+
},
|
|
8
|
+
"description": "Skill library + DAG workflow orchestration powered by Claude",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./dist/index.js",
|
|
12
|
+
"./browser": "./dist/browser.js",
|
|
13
|
+
"./studio": "./dist/studio.js",
|
|
14
|
+
"./skills": "./dist/skills/index.js",
|
|
15
|
+
"./workflows": "./dist/workflows/index.js",
|
|
16
|
+
"./testing": "./dist/testing.js",
|
|
17
|
+
"./schema": "./dist/schema.js"
|
|
18
|
+
},
|
|
19
|
+
"typesVersions": {
|
|
20
|
+
"*": {
|
|
21
|
+
"browser": [
|
|
22
|
+
"dist/browser.d.ts"
|
|
23
|
+
],
|
|
24
|
+
"studio": [
|
|
25
|
+
"dist/studio.d.ts"
|
|
26
|
+
],
|
|
27
|
+
"skills": [
|
|
28
|
+
"dist/skills/index.d.ts"
|
|
29
|
+
],
|
|
30
|
+
"workflows": [
|
|
31
|
+
"dist/workflows/index.d.ts"
|
|
32
|
+
],
|
|
33
|
+
"testing": [
|
|
34
|
+
"dist/testing.d.ts"
|
|
35
|
+
],
|
|
36
|
+
"schema": [
|
|
37
|
+
"dist/schema.d.ts"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist"
|
|
43
|
+
],
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsc",
|
|
46
|
+
"typecheck": "tsc --noEmit",
|
|
47
|
+
"test": "vitest run --exclude 'src/__tests__/integration/**'",
|
|
48
|
+
"test:integration": "vitest run --config vitest.integration.config.ts"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.84",
|
|
52
|
+
"chalk": "^5",
|
|
53
|
+
"commander": "^13",
|
|
54
|
+
"yaml": "^2",
|
|
55
|
+
"zod": "^4.0.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@anthropic-ai/claude-code": "^2.1.84",
|
|
59
|
+
"vitest": "^3.2.1"
|
|
60
|
+
},
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"access": "public"
|
|
63
|
+
},
|
|
64
|
+
"homepage": "https://sweny.ai",
|
|
65
|
+
"bugs": {
|
|
66
|
+
"url": "https://github.com/swenyai/sweny/issues"
|
|
67
|
+
},
|
|
68
|
+
"repository": {
|
|
69
|
+
"type": "git",
|
|
70
|
+
"url": "https://github.com/swenyai/sweny.git",
|
|
71
|
+
"directory": "packages/core"
|
|
72
|
+
},
|
|
73
|
+
"keywords": [
|
|
74
|
+
"workflow",
|
|
75
|
+
"dag",
|
|
76
|
+
"skills",
|
|
77
|
+
"claude",
|
|
78
|
+
"ai",
|
|
79
|
+
"automation",
|
|
80
|
+
"devops",
|
|
81
|
+
"sweny"
|
|
82
|
+
]
|
|
83
|
+
}
|