Skip to content

Commit 6fd7121

Browse files
committed
refactor: rename MixtapeLabs to Mixtape and update related components
1 parent 394ccaa commit 6fd7121

8 files changed

Lines changed: 37 additions & 37 deletions

File tree

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: "Bug report"
3-
about: "Report a problem with MixtapeLabs Engine"
3+
about: "Report a problem with Mixtape Engine"
44
labels: [bug]
55
title: "[Bug]: "
66
---

.github/copilot-instructions.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
Core idea: this package is a framework-agnostic LangGraph workflow that orchestrates mix analysis end-to-end. Keep all work inside well-typed modules; let hosts inject real services.
44

55
## Architecture snapshot
6-
- Entry point is `runMixtapeLabsSession` (`src/index.ts`), which compiles the graph from `buildMixtapeLabsGraph` and invokes it with an `EngineState` derived from `RunSessionInput`.
7-
- State schemas live in `src/state.ts` (Zod-validated). `src/types.ts` exposes `MixtapeLabsEngineDeps` and re-exports the schemas—never bypass them when changing shapes.
6+
- Entry point is `runMixtapeSession` (`src/index.ts`), which compiles the graph from `buildMixtapeGraph` and invokes it with an `EngineState` derived from `RunSessionInput`.
7+
- State schemas live in `src/state.ts` (Zod-validated). `src/types.ts` exposes `MixtapeEngineDeps` and re-exports the schemas—never bypass them when changing shapes.
88
- Graph nodes are declared in `src/graph/mixtapelabs-graph.ts` and exported as helper functions (`validateInputNode`, `metadataStepNode`, etc.). They depend solely on injected clients: metadata → analysis → feedback → finalize.
99
- Tool interfaces under `src/tools/` define the only allowed side-effect boundaries. They wrap user-provided clients via `create*Tool` helpers so validation happens before I/O.
1010
- Prompt/LLM logic lives in `src/prompts/feedback-prompt.ts` and `src/config/llm.ts` (`OpenAIFeedbackClient`). That client requires `OPENAI_API_KEY`; never instantiate it without checking the env.

NOTICE

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# MixtapeLabs Engine (@mixtapelabs/engine)
1+
# Mixtape Engine (@mixtapelabs/engine)
22

33
LangGraph-powered workflow engine for AI-driven audio mix analysis.
44

5-
This project and its contents are proprietary to MixtapeLabs. All rights reserved.
5+
This project and its contents are proprietary to Mixtape. All rights reserved.
66
Refer to the LICENSE file for usage terms.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@mixtapelabs/engine",
33
"version": "0.0.1",
4-
"description": "MixtapeLabs engine – LangGraph-powered workflow engine for AI-driven audio mix analysis.",
4+
"description": "Mixtape engine – LangGraph-powered workflow engine for AI-driven audio mix analysis.",
55
"type": "module",
66
"main": "dist/index.cjs",
77
"module": "dist/index.js",
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* MixtapeLabs Workflow Graph - LangGraph Orchestration
2+
* Mixtape Workflow Graph - LangGraph Orchestration
33
*
44
* Implements the complete audio analysis pipeline as a LangGraph state machine.
55
* The workflow is linear and fault-tolerant:
@@ -20,7 +20,7 @@
2020
*/
2121
import { Annotation, END, START, StateGraph } from '@langchain/langgraph';
2222
import type { EngineState } from '../state.ts';
23-
import type { MixtapeLabsEngineDeps } from '../types.ts';
23+
import type { MixtapeEngineDeps } from '../types.ts';
2424

2525
/**
2626
* LangGraph annotation defining the shape of our workflow state.
@@ -82,7 +82,7 @@ const GRAPH_NODE_NAMES = [
8282
*/
8383
export async function validateInputNode(state: GraphState): Promise<GraphNodeResult> {
8484
if (!state.uploadUrl) {
85-
return { error: 'uploadUrl is required to run an MixtapeLabs session' };
85+
return { error: 'uploadUrl is required to run an Mixtape session' };
8686
}
8787

8888
return {};
@@ -103,7 +103,7 @@ export async function validateInputNode(state: GraphState): Promise<GraphNodeRes
103103
* @returns { fileInfo } on success, { error } on failure, or {} if skipped
104104
*/
105105
export async function metadataStepNode(
106-
deps: Pick<MixtapeLabsEngineDeps, 'audioMetadataClient'>,
106+
deps: Pick<MixtapeEngineDeps, 'audioMetadataClient'>,
107107
state: GraphState,
108108
): Promise<GraphNodeResult> {
109109
// Skip if no URL or already errored
@@ -137,7 +137,7 @@ export async function metadataStepNode(
137137
* @returns { analysis } on success, { error } on failure, or {} if skipped
138138
*/
139139
export async function analysisStepNode(
140-
deps: Pick<MixtapeLabsEngineDeps, 'audioAnalysisClient'>,
140+
deps: Pick<MixtapeEngineDeps, 'audioAnalysisClient'>,
141141
state: GraphState,
142142
): Promise<GraphNodeResult> {
143143
// Skip if no URL or already errored
@@ -173,7 +173,7 @@ export async function analysisStepNode(
173173
* @returns { feedbackText, suggestions } on success, { error } on failure, or {} if skipped
174174
*/
175175
export async function feedbackStepNode(
176-
deps: Pick<MixtapeLabsEngineDeps, 'feedbackClient'>,
176+
deps: Pick<MixtapeEngineDeps, 'feedbackClient'>,
177177
state: GraphState,
178178
): Promise<GraphNodeResult> {
179179
// Skip if already errored
@@ -193,7 +193,7 @@ export async function feedbackStepNode(
193193
}
194194

195195
/**
196-
* Constructs and compiles the complete MixtapeLabs workflow graph.
196+
* Constructs and compiles the complete Mixtape workflow graph.
197197
*
198198
* This function:
199199
* 1. Creates a LangGraph StateGraph with our annotation
@@ -225,7 +225,7 @@ export async function feedbackStepNode(
225225
* @param deps - Complete set of injected service clients
226226
* @returns Compiled graph ready for execution via `.invoke(initialState)`
227227
*/
228-
export function buildMixtapeLabsGraph(deps: MixtapeLabsEngineDeps) {
228+
export function buildMixtapeGraph(deps: MixtapeEngineDeps) {
229229
const workflow = new StateGraph(GraphAnnotation, {
230230
nodes: GRAPH_NODE_NAMES,
231231
}) as StateGraph<typeof GraphAnnotation, GraphState, GraphNodeResult, GraphNodeName>;

src/index.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
2-
* Mixtapelabs Engine - Core Workflow Orchestration
2+
* Mixtape Engine - Core Workflow Orchestration
33
*
4-
* Entry point for the proprietary Mixtapelabs Engine. This module coordinates
4+
* Entry point for the proprietary Mixtape Engine. This module coordinates
55
* the complete audio analysis workflow through a LangGraph state machine.
66
*
77
* Design principles:
@@ -11,12 +11,12 @@
1111
*
1212
* @module engine
1313
*/
14-
import { buildMixtapelabsGraph } from './graph/mixtapelabs-graph.ts';
14+
import { buildMixtapeGraph } from './graph/mixtape-graph.ts';
1515
import type { EngineState } from './state.ts';
16-
import type { MixtapelabsEngineDeps, RunSessionInput } from './types.ts';
16+
import type { MixtapeEngineDeps, RunSessionInput } from './types.ts';
1717

1818
/**
19-
* Executes a complete audio analysis session through the Mixtapelabs workflow.
19+
* Executes a complete audio analysis session through the Mixtape workflow.
2020
*
2121
* This function orchestrates the following pipeline:
2222
* 1. **Input validation** - Ensures uploadUrl is provided
@@ -36,7 +36,7 @@ import type { MixtapelabsEngineDeps, RunSessionInput } from './types.ts';
3636
*
3737
* @example
3838
* ```ts
39-
* const result = await runMixtapelabsSession(
39+
* const result = await runMixtapeSession(
4040
* { sessionId: 'abc123', uploadUrl: 'https://...', userContext: { daw: 'Ableton' } },
4141
* { audioMetadataClient, audioAnalysisClient, feedbackClient }
4242
* );
@@ -48,11 +48,11 @@ import type { MixtapelabsEngineDeps, RunSessionInput } from './types.ts';
4848
* }
4949
* ```
5050
*/
51-
export async function runMixtapelabsSession(
51+
export async function runMixtapeSession(
5252
input: RunSessionInput,
53-
deps: MixtapelabsEngineDeps,
53+
deps: MixtapeEngineDeps,
5454
): Promise<EngineState> {
55-
const graph = buildMixtapelabsGraph(deps);
55+
const graph = buildMixtapeGraph(deps);
5656

5757
const initialState: EngineState = {
5858
sessionId: input.sessionId,

src/types.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Engine Type Definitions & Dependency Injection Contracts
33
*
44
* Defines the interfaces that external systems must implement to integrate
5-
* with the Mixtapelabs Engine. This enables dependency injection and testability.
5+
* with the Mixtape Engine. This enables dependency injection and testability.
66
*
77
* @module engine/types
88
*/
@@ -13,7 +13,7 @@ import type { AudioAnalysisClient } from './tools/audio-analysis-tool.ts';
1313
import type { FeedbackClient } from './tools/llm-feedback-tool.ts';
1414

1515
/**
16-
* Complete set of dependencies required to run the Mixtapelabs Engine.
16+
* Complete set of dependencies required to run the Mixtape Engine.
1717
*
1818
* This interface enforces dependency injection, making the engine:
1919
* - **Testable**: Mock implementations can be injected for unit tests
@@ -23,7 +23,7 @@ import type { FeedbackClient } from './tools/llm-feedback-tool.ts';
2323
* In production, implementations will be HTTP clients calling microservices.
2424
* In tests, they'll be stub implementations returning synthetic data.
2525
*/
26-
export interface MixtapelabsEngineDeps {
26+
export interface MixtapeEngineDeps {
2727
/** Client for extracting file metadata (duration, format, sample rate, etc.) */
2828
audioMetadataClient: AudioMetadataClient;
2929
/** Client for performing DSP analysis (loudness, dynamics, spectrum, stereo) */
@@ -33,7 +33,7 @@ export interface MixtapelabsEngineDeps {
3333
}
3434

3535
/**
36-
* Input required to initiate an Mixtapelabs analysis session.
36+
* Input required to initiate an Mixtape analysis session.
3737
*
3838
* This is the minimal data needed to start the workflow. The engine
3939
* will augment this with analysis results as it progresses through

test/graph/auralyze-graph.unit.test.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { describe, expect, it, vi } from 'vitest';
22
import {
33
analysisStepNode,
4-
buildMixtapelabsGraph,
4+
buildMixtapeGraph,
55
feedbackStepNode,
66
metadataStepNode,
7-
} from '../../src/graph/mixtapelabs-graph';
7+
} from '../../src/graph/mixtape-graph';
88
import { EngineState } from '../../src/state';
99
import { AudioMetadataClient } from '../../src/tools/audio-metadata-tool';
1010
import { AudioAnalysisClient } from '../../src/tools/audio-analysis-tool';
1111
import { FeedbackClient } from '../../src/tools/llm-feedback-tool';
1212

13-
describe('Mixtapelabs LangGraph', () => {
13+
describe('Mixtape LangGraph', () => {
1414
const baseDeps = () => {
1515
const metadataClient: AudioMetadataClient = {
1616
getMetadata: vi.fn().mockResolvedValue({
@@ -48,7 +48,7 @@ describe('Mixtapelabs LangGraph', () => {
4848
it('runs through happy path', async () => {
4949
const { metadataClient, analysisClient, feedbackClient } = baseDeps();
5050

51-
const graph = buildMixtapelabsGraph({
51+
const graph = buildMixtapeGraph({
5252
audioMetadataClient: metadataClient,
5353
audioAnalysisClient: analysisClient,
5454
feedbackClient,
@@ -73,7 +73,7 @@ describe('Mixtapelabs LangGraph', () => {
7373
it('sets error when upload url missing', async () => {
7474
const { metadataClient, analysisClient, feedbackClient } = baseDeps();
7575

76-
const graph = buildMixtapelabsGraph({
76+
const graph = buildMixtapeGraph({
7777
audioMetadataClient: metadataClient,
7878
audioAnalysisClient: analysisClient,
7979
feedbackClient,
@@ -95,7 +95,7 @@ describe('Mixtapelabs LangGraph', () => {
9595
new Error('ffprobe offline'),
9696
);
9797

98-
const graph = buildMixtapelabsGraph({
98+
const graph = buildMixtapeGraph({
9999
audioMetadataClient: metadataClient,
100100
audioAnalysisClient: analysisClient,
101101
feedbackClient,
@@ -116,7 +116,7 @@ describe('Mixtapelabs LangGraph', () => {
116116
const { metadataClient, analysisClient, feedbackClient } = baseDeps();
117117
(metadataClient.getMetadata as ReturnType<typeof vi.fn>).mockRejectedValueOnce('string boom');
118118

119-
const graph = buildMixtapelabsGraph({
119+
const graph = buildMixtapeGraph({
120120
audioMetadataClient: metadataClient,
121121
audioAnalysisClient: analysisClient,
122122
feedbackClient,
@@ -136,7 +136,7 @@ describe('Mixtapelabs LangGraph', () => {
136136
new Error('analysis timeout'),
137137
);
138138

139-
const graph = buildMixtapelabsGraph({
139+
const graph = buildMixtapeGraph({
140140
audioMetadataClient: metadataClient,
141141
audioAnalysisClient: analysisClient,
142142
feedbackClient,
@@ -158,7 +158,7 @@ describe('Mixtapelabs LangGraph', () => {
158158
new Error('openai down'),
159159
);
160160

161-
const graph = buildMixtapelabsGraph({
161+
const graph = buildMixtapeGraph({
162162
audioMetadataClient: metadataClient,
163163
audioAnalysisClient: analysisClient,
164164
feedbackClient,
@@ -179,7 +179,7 @@ describe('Mixtapelabs LangGraph', () => {
179179
it('skips downstream nodes when error is already populated', async () => {
180180
const { metadataClient, analysisClient, feedbackClient } = baseDeps();
181181

182-
const graph = buildMixtapelabsGraph({
182+
const graph = buildMixtapeGraph({
183183
audioMetadataClient: metadataClient,
184184
audioAnalysisClient: analysisClient,
185185
feedbackClient,

0 commit comments

Comments
 (0)