Visual Studio Code version 1.112.0 introduced the Integrated Browser that supports web application debugging entirely within Visual Studio Code.
To set up the debugging configuration see Integratee Browser
Knowledge Base for IT Professionals, Teachers and Astronauts
Visual Studio Code version 1.112.0 introduced the Integrated Browser that supports web application debugging entirely within Visual Studio Code.
To set up the debugging configuration see Integratee Browser
Node.js has multiple unit testing frameworks, one of the most popular for web applications is Vitest. If a unit test fails, debugging is the best way to find the problem. To debug Vitest JavaScript and TypeScript unit tests in Visual Studio Code

cd PATH_TO_THE_APPLICATION && pnpm vitest run app/routes/THE_UNIT_TESTFILE_NAME.ts -t "THE_NAME_OF_THE_UNIT_TEST_IN_THE_it_STATEMENT"
When the test reaches the breakpoint, the execution stops, and the variable values are available by hovering over them and on the left side of the screen.
The Microsoft Azure Entra ID provides federated authentication and authorization services for applications running in the Azure Cloud. Easy Auth enables application to use Single Sign On (SSO) services transparent to the user to detect the identity of the user of the application. To set up Easy Auth
There are two ways to set up Easy Auth for an Azure Container App: automatically from the Container App or manually using Entra ID by an administrator.







az account show


Make sure the Microsoft Graph User.Read permission is enabled










In the Azure Container Apps deployment script update the application to use the Easy Auth feature with the authTenantId and authClientId values extracted above:
# Entra ID issuer URL for built-in authentication (Easy Auth)
authIssuer="https://login.microsoftonline.com/${authTenantId}/v2.0"
# Enable Entra ID (Azure AD) built-in authentication (Easy Auth)
# This injects the X-MS-CLIENT-PRINCIPAL-NAME header with the user's UPN on every authenticated request.
echo "Configuring Entra ID authentication..."
az containerapp auth microsoft update \
--name $applicationName \
--resource-group $resourceGroupName \
--client-id $authClientId \
--issuer $authIssuer \
--yes
In the loader() function of the React Router 7 (Remix) web application read the “x-ms-client-principal-name” header value. It will contain the email address of the user.
export async function loader({ request }: Route.LoaderArgs) {
let userName = "";
// 1. Check for Azure AD / Entra ID auth header (production)
const principalName = request.headers.get("x-ms-client-principal-name");
}
For more information on configuring Azure Container Apps for Easy Auth see Authentication and authorization in Azure Container Apps
React web applications run code at two places.
loader() and action() functions in the React Router (formerly Remix) framework.export function FileUploader()As we can see, our application runs at two separate locations, so we need to debug them, at those places too.
To debug the server side code, we can start the application in the Visual Studio Code Debugger
and set breakpoints in the code editor margin
If we picked the correct function, and the code really runs on the server side, the execution will stop when it reaches that point. If the breakpoint is ignored, most likely that function is executed in the browser, so we need to debug it there.
To debug the code that runs in the browser, we use the same Debugger in Visual Studio Code,
but set the breakpoint in the Developer Tools of the Chrome browser. When the application started in the Visual Studio Code debugger



If the MSSQL Server is not needed all the time on the workstation, we can run it in a Docker container. It allows us to easily upgrade the server version and shut it down when it is not used. To set up MSSQL Server in a Docker container we will follow the steps in Nawaz Dhandala’ excellent article at How to Run SQL Server in a Windows Docker Container
Install the Docker Desktop application from https://www.docker.com/products/docker-desktop/
We will start the MSSQL server in a Docker container. This script sets up a volume for the database, so when the container is stopped, or destroyed, the data stays on the host’s hard drive. The detached mode keeps the container running in the background. We will use a Linux container, as it has smaller memory and CPU requirements, and runs faster. In the port argument the first number specifies the outside port, the second number the inside port. To run multiple MSSQL server instances on the same host, increment the first number to use a unique number, like 1434. In a terminal execute
docker run -d \
--name sqlserver \
-e "ACCEPT_EULA=Y" \
-e "MSSQL_SA_PASSWORD=TheSA#Databas4ServerPassword" \
-e "MSSQL_PID=Developer" \
-p 1433:1433 \
-v sqlserver-data:/var/opt/mssql \
mcr.microsoft.com/mssql/server:2022-latest
To test the server from inside the container we can remote into the container to execute SQL commands from the command line.
# Remote into the MSSQL Server container and start the sqlcmd command line tool
docker exec -it sqlserver opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "TheSA#Databas4ServerPassword" -C
To test the server from the workstation, we can connect to it from outside. To test from the command line install the sqlcmd commadn line tool and execute
# Or install sqlcmd locally and connect to the mapped port
sqlcmd -S localhost,1433 -U sa -P "TheSA#Databas4ServerPassword"
To connect to the server from Microsoft SQL Server Management Studio, use the following settings. This example shows how to specify the port in the server name field using a comma. If we use the default 1433 port, it is not necessary to include it in the server name.

If we use the MSSQL server mainly for testing it is very useful to script the database initialization. This way we can always recreate the entire data infrastructure by running a script.
Create a Dockerfile to build a custom image that includes the initialization script
# Dockerfile - to build an MSSQL Server image with automatic database setup
FROM mcr.microsoft.com/mssql/server:2022-latest
# Switch to the root user for file operations
USER root
# Create a directory in the image for the initialization scripts
RUN mkdir -p /docker-entrypoint-initdb
# Copy the SQL initialization scripts from the init-scripts subdirectory of the workstation
COPY ./init-scripts/ /docker-entrypoint-initdb/
# Copy the entrypoint wrapper script from the current directory of the workstation
COPY ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Switch back to the mssql user
USER mssql
# Environment variables with defaults
ENV ACCEPT_EULA=Y
ENV MSSQL_PID=Developer
# When the container starts. execute the entrypoint.sh bash script
ENTRYPOINT ["/entrypoint.sh"]
Create the entrypoint.sh bash script in the same directory to execute the initialization scripts
#!/bin/bash
# entrypoint.sh - Start the MSSQL Server and run the init scripts
# Start SQL Server in the background
/opt/mssql/bin/sqlservr &
SQLSERVER_PID=$!
# Wait for SQL Server to become available
echo "Waiting for SQL Server to start..."
for i in {1..60}; do
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$MSSQL_SA_PASSWORD" -C -Q "SELECT 1" > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "SQL Server is ready."
break
fi
sleep 1
done
# Run the initialization scripts in the docker-entrypoint-initdb subdirectory of the container
for script in /docker-entrypoint-initdb/*.sql; do
if [ -f "$script" ]; then
echo "Running $script..."
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$MSSQL_SA_PASSWORD" -C -i "$script"
fi
done
echo "Initialization complete."
# Keep the container running by waiting on the SQL Server process
wait $SQLSERVER_PID
In the init-scripts subdirectory of the workstation create the SQL script to initialize the database and call it create-database.sql
-- init-scripts/01-create-database.sql
-- Create the application database
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'MyDB')
BEGIN
CREATE DATABASE MyDB;
END
GO
USE MyDB;
GO
-- Create tables
CREATE TABLE Tasks(
Id INT PRIMARY KEY IDENTITY(1,1),
TaskName NVARCHAR(50) NOT NULL UNIQUE,
Description NVARCHAR(100) NOT NULL,
CreatedAt DATETIME2 DEFAULT GETUTCDATE()
);
GO
CREATE TABLE Data(
Id INT PRIMARY KEY IDENTITY(1,1),
TaskId INT FOREIGN KEY REFERENCES Tasks(Id),
Count INT NOT NULL,
Status NVARCHAR(20) DEFAULT 'pending',
CreatedAt DATETIME2 DEFAULT GETUTCDATE()
);
GO
Execute the scrip in the directory where the Dockerfile is located
docker build -t myapp-sqlserver .
Run the custom container
docker run -d --name myapp-db -e "MSSQL_SA_PASSWORD=TheSA#Databas4ServerPassword" -p 1433:1433 myapp-sqlserver
MCP servers provide standardized tools for AI agents to access providers and services, like GitHub, AWS, Azure. If MCP servers run unchecked on the workstation, those have full access to the filesystem. MCP Servers can cause catastrophic disasters, like deleting all files form the hard drive.
Kiro provides a sandbox to securely run MCP Servers in an isolated environment. Credentials are stored outside of the sandbox, MCP Servers can only access them through Kiro.
To run Kiro and MCP Serves on the workstation install the Docker Desktop application from https://www.docker.com/products/docker-desktop/
An interesting post on the Kiro demo at Supercharging Kiro with Docker Sandboxes and MCP Catalog
As AgentCraft uses your Claude Pro or Max subscription, first, you need to log into Claude CLI.
claude
/login
Follow the instructions to authorize Claude CLI to use your Anthropic subscription and paste the token from the browser window into the CLI.
npx @idosal/agentcraft
The AgentCraft UI opens in your default web browser
If Manual approval is selected in the lower right corner (the button is hidden behind the thick fancy border), AgentCraft will ask for approval. 
To approve the action
In a terminal execute
irm https://claude.ai/install.ps1 | iex
The Claude Code installation will check your system path environment variable, and if missing it will ask you to add the following to it:
C:\Users\YOUR_USER_NAME.local\bin
claude
AgentCraft is an AI Orchestrator with Real Time Strategy Game user interface.
It uses Claude Code CLI to access your Pro or Max Claude agent subscription. It does not need to know any tokens or credentials. To use AgentCraft, first, you need start Claude CLI and uses its infrastructure to connect to Claude Code.
AgentCraft is a Node.js package it requires Node.js version 18 or higher from https://nodejs.org/en/download
To run AgentCraft directly from the NPM registry, execute the command in a terminal. This will always run the latest available version without a need for update.
npx @idosal/agentcraft
This is an NPM package for running AI agents in your project folder. It allows them to interact with your local files in that location. The user interface opens in a your default web browser.
To start AgentCraft in the background
npx @idosal/agentcraft start -d
To stop the server in the background
npx @idosal/agentcraft stop
The default MSSQL server installation only enables the Shared Memory network protocol for connection.
Node.js can only connect using TCP/IP protocol. The error message is
Failed to connect to localhost/…. Error: Failed to connect to localhost:1433 – Could not connect (sequence) Failed to connect to localhost:1433 – Could not connect (sequence) ConnectionError: Failed to connect to localhost:1433 – Could not connect (sequence)
To be able to connect to a local MSSQL Server from a Node.js application, we need to enable the TCP/IP protocol.



