Skip to content
Draft
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
e03b0e8
feat: create @kbn/llm-batch-processing package structure
patrykkopycinski Mar 21, 2026
d8339a0
feat(aesop): add remaining aesop implementation files
patrykkopycinski Mar 22, 2026
e2c8293
feat(evals): integrate autonomous skill discovery routes and agents
patrykkopycinski Mar 22, 2026
e4143b8
feat(llm-batch): restore hierarchical batch processing package
patrykkopycinski Mar 22, 2026
c1f2019
feat(evals): add skill review workflow UI with execution details
patrykkopycinski Mar 22, 2026
daa31b2
feat(evals): implement real-time workflow progress tracking
patrykkopycinski Mar 22, 2026
64e3ddc
feat(evals): add incremental exploration with intelligent change dete…
patrykkopycinski Mar 22, 2026
215a377
test(evals): add comprehensive validation and benchmarking test suites
patrykkopycinski Mar 22, 2026
e909f36
docs(evals): add production implementation planning and architecture …
patrykkopycinski Mar 22, 2026
8cd5c2f
feat(evals): implement active feedback learning loop for continuous i…
patrykkopycinski Mar 22, 2026
dd5844a
feat(evals): add performance monitoring dashboard with 8 operational …
patrykkopycinski Mar 22, 2026
61a213d
feat(evals): implement security hardening with 4-layer defense and ra…
patrykkopycinski Mar 22, 2026
57254ed
test(evals): expand test coverage to 90%+ with UI and integration tests
patrykkopycinski Mar 22, 2026
e43baff
test(evals): add Scout E2E tests and workflow error recovery system
patrykkopycinski Mar 22, 2026
f24da8a
feat(evals): add APM instrumentation and production alerting
patrykkopycinski Mar 22, 2026
0414592
docs(evals): add comprehensive production documentation and operation…
patrykkopycinski Mar 22, 2026
2ae9358
docs(evals): mark production implementation 100% complete
patrykkopycinski Mar 22, 2026
3308c21
feat(evals): add Docker and dev container setup for hypothesis valida…
patrykkopycinski Mar 22, 2026
2d866a7
feat(evals): add fully automated hypothesis validation with complete …
patrykkopycinski Mar 22, 2026
6ddcee9
feat(evals): AESOP spike - autonomous skill discovery, LLM validation…
patrykkopycinski Mar 23, 2026
d00306e
chore: remove generated spike documentation files
patrykkopycinski Mar 23, 2026
4b7c88e
fix(evals): address code quality issues in AESOP spike
patrykkopycinski Mar 23, 2026
ff25fdb
feat(evals): add skill improvement proposals, source indices, and der…
patrykkopycinski Mar 25, 2026
76fda94
fix(evals): address PR feedback and clean up non-AESOP files
patrykkopycinski Mar 25, 2026
ed20243
feat(evals): add convergence validation loop for AESOP skill auto-imp…
patrykkopycinski Mar 25, 2026
97e19f4
feat(evals): add persistent rate limiter backed by Elasticsearch
patrykkopycinski Mar 25, 2026
9cd3364
feat(evals): add deep Agent Builder conversation analysis for AESOP
patrykkopycinski Mar 25, 2026
e4b03f9
feat(evals): add skill deduplication for AESOP exploration workflow
patrykkopycinski Mar 25, 2026
2ff9821
fix(evals): production readiness fixes for AESOP spike
patrykkopycinski Mar 25, 2026
9e1537f
fix(evals): add accessibility aria-labels and error boundary to AESOP UI
patrykkopycinski Mar 25, 2026
dba5475
fix(evals): add ProposedSkillDocument type and replace `as any` casts…
patrykkopycinski Mar 25, 2026
04e50bf
test(evals): replace stub E2E tests with real route handler unit test…
patrykkopycinski Mar 25, 2026
51907d2
fix(evals): address macroscope review findings in AESOP spike
patrykkopycinski Mar 25, 2026
c07f1d3
fix(evals): address 6 macroscope review comments in AESOP spike
patrykkopycinski Mar 25, 2026
659ee42
feat(evals): define AESOP agent configurations for Agent Builder orch…
patrykkopycinski Mar 25, 2026
d2149b8
feat(evals): add agent lifecycle manager for AESOP Agent Builder agents
patrykkopycinski Mar 25, 2026
25a918e
feat(evals): add Agent Builder orchestration for AESOP with backwards…
patrykkopycinski Mar 25, 2026
717a860
fix(evals): fix duration_ms bug and add agent-based improvement route
patrykkopycinski Mar 25, 2026
95417ae
fix(evals): add agent progress tracking, conversation persistence, fi…
patrykkopycinski Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 29 additions & 76 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,76 +1,29 @@
FROM mcr.microsoft.com/devcontainers/base:ubuntu-22.04

ARG KBN_DIR

ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
ENV HOME=/home/vscode
ENV NVM_DIR=${HOME}/nvm
ENV NVM_VERSION=v0.39.1
ENV OPENSSL_PATH=${HOME}/openssl
# Only specific versions are FIPS certified.
ENV OPENSSL_VERSION='3.0.8'

RUN apt-get update && apt-get install -y curl git zsh locales docker.io perl make gcc xvfb

RUN locale-gen en_US.UTF-8

# Oh My Zsh setup
RUN if [ ! -d "$HOME/.oh-my-zsh" ]; then \
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"; \
fi && \
ZSH_CUSTOM=${ZSH_CUSTOM:-~/.oh-my-zsh/custom} && \
if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then \
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions; \
fi && \
sed -i 's/plugins=(git)/plugins=(git ssh-agent npm docker zsh-autosuggestions)/' /home/vscode/.zshrc

# Docker-in-Docker setup
RUN usermod -aG docker vscode

# FIPS setup
# https://github.com/openssl/openssl/blob/openssl-3.0/README-FIPS.md
# https://www.openssl.org/docs/man3.0/man7/fips_module.html
WORKDIR ${HOME}

RUN set -e ; \
mkdir -p "${OPENSSL_PATH}"; \
curl --retry 8 -S -L -O "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" ; \
curl --retry 8 -S -L -O "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz.sha256" ; \
echo "$(cat openssl-${OPENSSL_VERSION}.tar.gz.sha256) openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c ; \
tar -zxf "openssl-${OPENSSL_VERSION}.tar.gz" ; \
rm -rf openssl-${OPENSSL_VERSION}.tar* ; \
cd "${OPENSSL_PATH}-${OPENSSL_VERSION}" ; \
./Configure --prefix="${OPENSSL_PATH}" --openssldir="${OPENSSL_PATH}/ssl" --libdir="${OPENSSL_PATH}/lib" shared -Wl,-rpath,${OPENSSL_PATH}/lib enable-fips; \
make -j $(nproc) > /dev/null ; \
make install > /dev/null ; \
rm -rf "${OPENSSL_PATH}-${OPENSSL_VERSION}" ; \
chown -R 1000:1000 "${OPENSSL_PATH}";

WORKDIR ${KBN_DIR}

# Node and NVM setup
COPY .node-version /tmp/

# Mac will have permissions issues if Node and NVM are installed as root
USER vscode

RUN mkdir -p $NVM_DIR && \
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh | bash && \
. "$NVM_DIR/nvm.sh" && \
NODE_VERSION=$(cat /tmp/.node-version) && \
nvm install ${NODE_VERSION} && \
nvm use ${NODE_VERSION} && \
nvm alias default ${NODE_VERSION} && \
npm install -g yarn && \
echo "source $NVM_DIR/nvm.sh" >> ${HOME}/.bashrc && \
echo "source $NVM_DIR/nvm.sh" >> ${HOME}/.zshrc && \
chown -R 1000:1000 "${HOME}/.npm"

USER root

# Reload the env everytime a new shell is opened incase the .env file changed.
RUN echo "source ${KBN_DIR}/.devcontainer/scripts/env.sh" >> ${HOME}/.bashrc && \
echo "source ${KBN_DIR}/.devcontainer/scripts/env.sh" >> ${HOME}/.zshrc

# This is for documentation. Ports are exposed via devcontainer.json
EXPOSE 9200 5601 9229 9230 9231 9001
FROM mcr.microsoft.com/devcontainers/typescript-node:22-bullseye

# Install additional tools
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends \
curl \
git \
jq \
vim \
&& rm -rf /var/lib/apt/lists/*

# Install global npm packages
RUN npm install -g yarn@1.22.22

# Set up workspace
WORKDIR /workspace

# Install GitHub CLI
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& apt update \
&& apt install gh -y

# Configure git (will be overridden by user config)
RUN git config --global user.name "AESOP Dev Container" \
&& git config --global user.email "aesop@elastic.local"

USER node
78 changes: 47 additions & 31 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,48 +1,64 @@
{
"name": "Kibana",
"build": {
"dockerfile": "Dockerfile",
"context": "..",
"args": {
"KBN_DIR": "${containerWorkspaceFolder}"
}
"name": "AESOP Spike - Autonomous Skill Discovery",
"dockerComposeFile": "docker-compose.yml",
"service": "kibana-dev",
"workspaceFolder": "/workspace",

"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "22.22.0"
},
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {}
},

"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"ms-azuretools.vscode-docker",
"editorconfig.editorconfig",
"timonwong.shellcheck",
"eamodio.gitlens",
"github.vscode-pull-request-github"
]
"redhat.vscode-yaml",
"firsttris.vscode-jest-runner"
],
"settings": {
"typescript.tsdk": "node_modules/typescript/lib",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
}
},

"forwardPorts": [
9200,
5601,
9229,
9230,
9231,
9001
9200,
4318
],
"postStartCommand": "${containerWorkspaceFolder}/.devcontainer/scripts/post_start.sh",
"remoteUser": "vscode",
"containerEnv": {
"KBN_DIR": "${containerWorkspaceFolder}"
},
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"version": "latest",
"dockerDashComposeVersion": "latest"

"portsAttributes": {
"5601": {
"label": "Kibana",
"onAutoForward": "notify"
},
"ghcr.io/devcontainers/features/github-cli:1": {
"installDirectlyFromGitHubRelease": true,
"version": "latest"
"9200": {
"label": "Elasticsearch",
"onAutoForward": "silent"
},
"ghcr.io/kreemer/features/chrometesting:1": {
"version": "stable"
"4318": {
"label": "EDOT Collector (OTLP)",
"onAutoForward": "silent"
}
},

"postCreateCommand": "bash .devcontainer/setup.sh",

"remoteEnv": {
"ES_URL": "http://elasticsearch:9200",
"ES_USERNAME": "elastic",
"ES_PASSWORD": "changeme",
"KIBANA_URL": "http://localhost:5601",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://edot-collector:4318"
}
}
94 changes: 94 additions & 0 deletions .devcontainer/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
version: '3.8'

services:
# ═══════════════════════════════════════════════════════════════
# Kibana Dev Container - Main development environment
# ═══════════════════════════════════════════════════════════════
kibana-dev:
build:
context: .
dockerfile: Dockerfile
container_name: aesop-dev-container
volumes:
- ../:/workspace:cached
- node-modules:/workspace/node_modules
- build-cache:/workspace/build
command: sleep infinity
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=changeme
- OTEL_EXPORTER_OTLP_ENDPOINT=http://edot-collector:4318
networks:
- aesop-network
depends_on:
elasticsearch:
condition: service_healthy
edot-collector:
condition: service_started

# ═══════════════════════════════════════════════════════════════
# Elasticsearch - Data store with ML node
# ═══════════════════════════════════════════════════════════════
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:9.4.0-SNAPSHOT
container_name: aesop-elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=true
- ELASTIC_PASSWORD=changeme
- xpack.license.self_generated.type=trial
- xpack.ml.enabled=true
- node.roles=master,data,ingest,ml
- cluster.name=aesop-hypothesis-validation
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms4g -Xmx4g"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
ports:
- "9200:9200"
volumes:
- es-data:/usr/share/elasticsearch/data
networks:
- aesop-network
healthcheck:
test: ["CMD-SHELL", "curl -u elastic:changeme -s http://localhost:9200/_cluster/health | grep -q '\"status\":\"green\\|yellow\"'"]
interval: 10s
timeout: 5s
retries: 60

# ═══════════════════════════════════════════════════════════════
# EDOT Collector - O11y trace pipeline
# ═══════════════════════════════════════════════════════════════
edot-collector:
image: otel/opentelemetry-collector-contrib:latest
container_name: aesop-edot-collector
command: ["--config=/etc/otel/config.yaml"]
ports:
- "4318:4318" # OTLP HTTP
- "4317:4317" # OTLP gRPC
- "8888:8888" # Prometheus metrics
volumes:
- ./docker/edot-config.yaml:/etc/otel/config.yaml:ro
networks:
- aesop-network
depends_on:
elasticsearch:
condition: service_healthy

networks:
aesop-network:
driver: bridge

volumes:
es-data:
driver: local
node-modules:
driver: local
build-cache:
driver: local
Loading
Loading