github analyzed 181e21d

hugolsramos01-bit/mcp-agentic-server

github

Local coding tools for ChatGPT Developer Mode and MCP clients with safe editing and shell execution.

maintainer
hugolsramos01-bit
license
first seen
2026-08-13
last seen
2026-08-13
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 21 tools
transport stdio · streamable-http · http verified reported listed in the official MCP registry counts 21 tools · 0 res · 0 prompts permission surface via README inference

tools

  • agentic_doctor

    Diagnose Node, package managers, Git and native SQLite availability.

  • bash

    Fallback for shell interactions that have no typed tool; prefer run_package_script for package scripts and the Git tools for Git.

  • changed_files_summary

    Fast Git status and diff abstraction.

  • context_budget

    Estimate token count for files.

  • edit

    Targeted string replacements.

  • edit_dry_run

    Preview edits without writing.

  • expand_compressed_block

    Expand omitted blocks from read_compressed.

  • file_dependencies

    Inward and outward dependency map.

  • open_workspace

    Opens a project. Supports mode="checkout" or mode="worktree".

  • project_bootstrap

    Scans package managers, monorepo bounds, and base dependencies.

  • read

    Hardened file reader with startLine, endLine, offset, limit.

  • read_many

    Read multiple files at once.

  • risk_assess_command

    Preview policy assessment before bash.

  • semantic_pack

    Compact goal-relevant summary with token budget.

  • suggest_checks

    Advisory planner returning a deterministic VerificationPlan.

  • task_context

    Computes a RiskProfile (risk level, score, blast radius) from focused paths.

  • token_audit

    Analyze token usage across files read.

  • tree

    Directory tree visualization.

  • workspace_summary

    Compact architectural summary of the workspace.

  • worktree_install_deps

    Install dependencies in a managed worktree; use verify: true to load native bindings.

  • write

    Create or overwrite files.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 181e21d · analyzer v33 · 2d ago

skills & prompt files 2

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 184

filesystem 76

  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/eval/run.mjs :12 import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/extract-tools.cjs :1 const fs = require('fs');
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/fix-tests.cjs :1 const fs = require('fs');
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/perf/_executor-synthetic-workflow.mjs :1 import fs from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/perf/_executor-warm.mjs :1 import fs from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/perf/_executor.mjs :1 import fs from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/perf/agent-loop.mjs :1 import fs from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/perf/code-regions.mjs :14 import { readFileSync, statSync, mkdirSync, writeFileSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/perf/tool-latency.mjs :2 import { mkdirSync, writeFileSync, existsSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/clean.mjs :1 import { rmSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/dev-server.mjs :2 import { readdirSync, statSync, watch } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/fix-node-pty-permissions.mjs :1 import { chmod } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/smoke-package.mjs :3 import { mkdtemp, rm } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/test-http.mjs :5 import { mkdtemp, rm } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/test-runtime-mcp.mjs :3 import { mkdir, rm, writeFile, cp, readdir, stat } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/analysis-regression.test.ts :3 import { mkdtemp, writeFile, rm, mkdir } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/apply-patch.test.ts :2 import { chmod, mkdtemp, readFile, stat, symlink, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/apply-patch.ts :3 import { constants, type Stats } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/assistant-tools.test.ts :5 import { writeFileSync, mkdirSync, rmSync } from "fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/assistant-tools.ts :4 import { existsSync, readFileSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/ast-tools.test.ts :3 import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/ast-tools.ts :2 import { existsSync, readFileSync, statSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/bootstrap-tools.ts :2 import { existsSync, readFileSync, readdirSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/code-region-cache.test.ts :5 import { writeFileSync, mkdirSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/code-region-cache.ts :1 import { stat, readFile } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/git-change-paths.test.ts :5 import { mkdtempSync, rmSync, writeFileSync, mkdirSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/git-change-paths.ts :2 import { existsSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/task-context.test.ts :5 import { mkdtemp, writeFile, mkdir, rm } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/test-proximity.test.ts :5 import { mkdtemp, writeFile, mkdir } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/test-proximity.ts :2 import { access } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/verification-evidence.test.ts :3 import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/verification-evidence.ts :1 import { existsSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/checkpoint-tools.test.ts :3 import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/checkpoint-tools.ts :2 import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, rmSync, copyFileSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/cli.test.ts :3 import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/cli.ts :5 import { mkdtempSync, writeFileSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/config.test.ts :2 import { existsSync, mkdtempSync, readFileSync, writeFileSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/db/client.ts :1 import { chmodSync, mkdirSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/diagnostics.ts :2 import { readFileSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/fastapi-tools.ts :1 import { readdir, readFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/git-worktrees.ts :4 import { mkdir, realpath, rm, stat } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/git.test.ts :3 import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/git.ts :3 import { realpathSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/import-resolver.test.ts :9 import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/import-resolver.ts :19 import { existsSync, statSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/knowledge-tools.ts :2 import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/local-agent-path.ts :1 import { existsSync, readFileSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/local-agent-profiles.test.ts :2 import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/local-agent-profiles.ts :1 import { existsSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/local-agent-store.test.ts :2 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/native-dependency-verifier.test.ts :2 import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/oauth-store.test.ts :3 import { mkdtemp, rm, stat } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/process-runner/resolve-executable.ts :2 import * as fs from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/process-runner/run-process.ts :2 import { existsSync, readFileSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/regression.test.ts :14 import { mkdtemp, mkdir, writeFile } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/review-checkpoints.test.ts :2 import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/review-checkpoints.ts :1 import { mkdtemp, rm } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/roots.ts :10 import { realpathSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/security/path-resolution.ts :1 import { existsSync, realpathSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/security/secure-fs.ts :1 import { readFileSync, writeFileSync, statSync, lstatSync, readdirSync, existsSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/security/security-regression.test.ts :3 import { mkdtempSync, mkdirSync, realpathSync, writeFileSync } from 'node:fs';
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/semantic-tools.ts :2 import { existsSync, statSync, readFileSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/server.ts :4 import { readFileSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/server/atomic-mutation.test.ts :9 } from "node:fs/promises";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/server/mutation-receipt.test.ts :5 import { mkdtemp, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/server/mutation-receipt.ts :1 import { stat, access } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/server/tool-utils.ts :2 import { readFileSync, existsSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/skills.test.ts :1 import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/skills.ts :1 import { existsSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/tournament-tools.ts :2 import { existsSync, writeFileSync, readFileSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/user-config.ts :7 } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/visual-review.ts :2 import { existsSync, readFileSync, rmSync } from "node:fs";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/workspace-index.ts :10 import { existsSync, readFileSync, readdirSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/workspace-store.test.ts :3 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/workspaces.test.ts :2 import { mkdtemp, mkdir, rm, stat, symlink, writeFile } from "node:fs/promises";
  • fs hugolsramos01-bit-mcp-agentic-server-181e21d/src/workspaces.ts :2 import type { Stats } from "node:fs";

shell / exec 41

  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/fix-tests.cjs :7 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/perf/agent-loop.mjs :4 import { spawnSync } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/perf/server-hot-path.mjs :1 import { spawn } from 'child_process';
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/perf/tool-latency.mjs :1 import { spawnSync } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/dev-server.mjs :1 import { spawn } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/smoke-package.mjs :1 import { spawnSync, spawn } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/test-http.mjs :1 import { spawn } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/test-runtime-mcp.mjs :1 import { spawn } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/analysis-regression.test.ts :6 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/assistant-tools.ts :6 import { execFile } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/ast-tools.test.ts :2 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/ast-tools.ts :5 import { exec } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/bootstrap-tools.ts :4 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/file-dependencies-internal.ts :1 import { execFile } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/git-change-paths.test.ts :3 import { execFileSync } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/git-change-paths.ts :1 import { execFile } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/task-context.test.ts :8 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/task-context.ts :1 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/check-selector.ts :1 import { execFile } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/checkpoint-tools.test.ts :2 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/checkpoint-tools.ts :3 import { execFile, execFileSync } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/cli.test.ts :2 import { execFileSync } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/cli.ts :4 import { spawn } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/git-worktrees.ts :2 import { execFile } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/git.test.ts :2 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/git.ts :2 import { execFile } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/import-resolver.test.ts :12 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/local-agent-adapters.ts :1 import { spawn, spawnSync, type ChildProcessWithoutNullStreams } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/local-agent-availability.ts :1 import { spawnSync } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/process-runner/process-runner.test.ts :59 // If it's Windows, the resolver should have appended .cmd so spawn() succeeds.
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/process-runner/resolve-executable.ts :16 // when `shell: false` is used in child_process.
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/process-runner/run-process.ts :1 import { spawn, type ChildProcess } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/process-sessions.test.ts :2 import * as childProcess from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/process-sessions.ts :9 import { spawn } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/review-checkpoints.test.ts :1 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/server.ts :340 const cp = await import("node:child_process");
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/server/mutation-receipt.test.ts :7 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/server/mutation-receipt.ts :39 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/visual-review.ts :1 import { execFile } from "node:child_process";
  • shell hugolsramos01-bit-mcp-agentic-server-181e21d/src/workspace-index.ts :12 import { execFile } from "node:child_process";
  • shell (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/workspaces.test.ts :1 import { execFile } from "node:child_process";

network 5

  • net (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/debug-token.mjs :12 import http from "node:http";
  • net (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/smoke-package.mjs :65 const noTokenRes = await fetch(`http://127.0.0.1:${actualPort}/mcp`);
  • net (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/scripts/test-http.mjs :76 const noTokenRes = await fetch(`http://127.0.0.1:${port}/mcp`);
  • net (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/change-intelligence/task-context.test.ts :1311 "export async function apiFetch(path) { return fetch(path); }",
  • net (weak) hugolsramos01-bit-mcp-agentic-server-181e21d/src/visual-review.test.ts :3 import { createServer } from "node:http";

secrets 1

  • secrets hugolsramos01-bit-mcp-agentic-server-181e21d/src/cli.ts :94 if (process.env.AGENTIC_OAUTH_OWNER_TOKEN) return;

database 3

  • db hugolsramos01-bit-mcp-agentic-server-181e21d/src/cli.ts :716 const Database = require("better-sqlite3") as typeof import("better-sqlite3");
  • db hugolsramos01-bit-mcp-agentic-server-181e21d/src/db/client.ts :3 import Database from "better-sqlite3";
  • db hugolsramos01-bit-mcp-agentic-server-181e21d/src/db/migrations.ts :1 import type Database from "better-sqlite3";

install hooks 1

  • postinstall hugolsramos01-bit-mcp-agentic-server-181e21d/package.json :31 node scripts/fix-node-pty-permissions.mjs

declared dependencies 29

  • @modelcontextprotocol/ext-apps@^1.7.2
  • @modelcontextprotocol/sdk@1.30.0
  • @agentclientprotocol/sdk@^1.1.0
  • @anthropic-ai/claude-agent-sdk@^0.3.200
  • @clack/prompts@^1.5.1
  • @hugolsramos01-bit/pi-coding-agent@0.80.7-agentic.1
  • @openai/codex-sdk@^0.142.5
  • @opencode-ai/sdk@^1.17.13
  • @pierre/diffs@^1.2.5
  • better-sqlite3@^12.10.0
  • diff@^8.0.3
  • drizzle-orm@^0.45.2
  • express@^5.2.1
  • react@^19.2.6
  • react-dom@^19.2.6
  • semver@^7.8.4
  • yaml@^2.9.0
  • zod@^4.4.3
  • typescript@^6.0.3
  • @types/better-sqlite3@^7.6.13
  • @types/express@^5.0.6
  • @types/node@^25.9.1
  • @types/react@^19.2.15
  • @types/react-dom@^19.2.3
  • @types/semver@^7.7.1
  • @vitejs/plugin-react@^6.0.2
  • tsx@^4.22.3
  • vite@^8.0.14
  • node-pty@^1.1.0