silas 0.1.0 → 0.2.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/README.md +7 -8
- package/dist/cli.js +88 -91
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -58,7 +58,7 @@ silas cache clear -y # Delete all cached data
|
|
|
58
58
|
Start the Model Context Protocol server for integration with Claude and other AI assistants:
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
|
-
silas
|
|
61
|
+
silas mcp
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
## Supported Ecosystems
|
|
@@ -71,14 +71,13 @@ silas serve
|
|
|
71
71
|
|
|
72
72
|
## Configuration
|
|
73
73
|
|
|
74
|
-
Configuration is stored at `~/.config/
|
|
74
|
+
Configuration is stored at `~/.config/silas/config.json`:
|
|
75
75
|
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
type: claude-code # or: codex, aider, goose, custom
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"cache_max_gb": 10,
|
|
79
|
+
"agent": "claude-code"
|
|
80
|
+
}
|
|
82
81
|
```
|
|
83
82
|
|
|
84
83
|
## License
|
package/dist/cli.js
CHANGED
|
@@ -39469,55 +39469,6 @@ var require_public_api = __commonJS((exports) => {
|
|
|
39469
39469
|
exports.stringify = stringify;
|
|
39470
39470
|
});
|
|
39471
39471
|
|
|
39472
|
-
// node_modules/yaml/dist/index.js
|
|
39473
|
-
var composer, Document, Schema, errors, Alias, identity4, Pair, Scalar, YAMLMap, YAMLSeq, cst, lexer, lineCounter, parser, publicApi, visit, $Composer, $Document, $Schema, $YAMLError, $YAMLParseError, $YAMLWarning, $Alias, $isAlias, $isCollection, $isDocument, $isMap, $isNode, $isPair, $isScalar, $isSeq, $Pair, $Scalar, $YAMLMap, $YAMLSeq, $Lexer, $LineCounter, $Parser, $parse, $parseAllDocuments, $parseDocument, $stringify, $visit, $visitAsync;
|
|
39474
|
-
var init_dist = __esm(() => {
|
|
39475
|
-
composer = require_composer();
|
|
39476
|
-
Document = require_Document();
|
|
39477
|
-
Schema = require_Schema();
|
|
39478
|
-
errors = require_errors();
|
|
39479
|
-
Alias = require_Alias();
|
|
39480
|
-
identity4 = require_identity();
|
|
39481
|
-
Pair = require_Pair();
|
|
39482
|
-
Scalar = require_Scalar();
|
|
39483
|
-
YAMLMap = require_YAMLMap();
|
|
39484
|
-
YAMLSeq = require_YAMLSeq();
|
|
39485
|
-
cst = require_cst();
|
|
39486
|
-
lexer = require_lexer();
|
|
39487
|
-
lineCounter = require_line_counter();
|
|
39488
|
-
parser = require_parser2();
|
|
39489
|
-
publicApi = require_public_api();
|
|
39490
|
-
visit = require_visit();
|
|
39491
|
-
$Composer = composer.Composer;
|
|
39492
|
-
$Document = Document.Document;
|
|
39493
|
-
$Schema = Schema.Schema;
|
|
39494
|
-
$YAMLError = errors.YAMLError;
|
|
39495
|
-
$YAMLParseError = errors.YAMLParseError;
|
|
39496
|
-
$YAMLWarning = errors.YAMLWarning;
|
|
39497
|
-
$Alias = Alias.Alias;
|
|
39498
|
-
$isAlias = identity4.isAlias;
|
|
39499
|
-
$isCollection = identity4.isCollection;
|
|
39500
|
-
$isDocument = identity4.isDocument;
|
|
39501
|
-
$isMap = identity4.isMap;
|
|
39502
|
-
$isNode = identity4.isNode;
|
|
39503
|
-
$isPair = identity4.isPair;
|
|
39504
|
-
$isScalar = identity4.isScalar;
|
|
39505
|
-
$isSeq = identity4.isSeq;
|
|
39506
|
-
$Pair = Pair.Pair;
|
|
39507
|
-
$Scalar = Scalar.Scalar;
|
|
39508
|
-
$YAMLMap = YAMLMap.YAMLMap;
|
|
39509
|
-
$YAMLSeq = YAMLSeq.YAMLSeq;
|
|
39510
|
-
$Lexer = lexer.Lexer;
|
|
39511
|
-
$LineCounter = lineCounter.LineCounter;
|
|
39512
|
-
$Parser = parser.Parser;
|
|
39513
|
-
$parse = publicApi.parse;
|
|
39514
|
-
$parseAllDocuments = publicApi.parseAllDocuments;
|
|
39515
|
-
$parseDocument = publicApi.parseDocument;
|
|
39516
|
-
$stringify = publicApi.stringify;
|
|
39517
|
-
$visit = visit.visit;
|
|
39518
|
-
$visitAsync = visit.visitAsync;
|
|
39519
|
-
});
|
|
39520
|
-
|
|
39521
39472
|
// node_modules/effect/dist/esm/Secret.js
|
|
39522
39473
|
var fromString4;
|
|
39523
39474
|
var init_Secret = __esm(() => {
|
|
@@ -70318,7 +70269,7 @@ var init_errors2 = __esm(() => {
|
|
|
70318
70269
|
});
|
|
70319
70270
|
|
|
70320
70271
|
// src/config/config.ts
|
|
70321
|
-
var Agent, LogLevel, ConfigFile,
|
|
70272
|
+
var Agent, LogLevel, ConfigFile, SilasConfigSchema, parseEnvAgent = (value6) => {
|
|
70322
70273
|
if (!value6)
|
|
70323
70274
|
return;
|
|
70324
70275
|
const valid = ["claude-code", "codex", "aider", "goose", "custom"];
|
|
@@ -70328,17 +70279,17 @@ var Agent, LogLevel, ConfigFile, ShelfConfigSchema, parseEnvAgent = (value6) =>
|
|
|
70328
70279
|
return;
|
|
70329
70280
|
const valid = ["debug", "info", "warn", "error"];
|
|
70330
70281
|
return valid.includes(value6) ? value6 : undefined;
|
|
70331
|
-
},
|
|
70282
|
+
}, parseJson2 = (schema) => (content) => exports_Effect.gen(function* () {
|
|
70332
70283
|
const parsed = yield* exports_Effect.try({
|
|
70333
|
-
try: () =>
|
|
70334
|
-
catch: (e) => new Error(`
|
|
70284
|
+
try: () => JSON.parse(content),
|
|
70285
|
+
catch: (e) => new Error(`JSON parse error: ${e}`)
|
|
70335
70286
|
});
|
|
70336
70287
|
return yield* exports_Schema.decodeUnknown(schema)(parsed ?? {}).pipe(exports_Effect.mapError((e) => new Error(`Schema validation error: ${e}`)));
|
|
70337
70288
|
}), loadConfigFile = (fs, configPath) => fs.exists(configPath).pipe(exports_Effect.flatMap((exists4) => {
|
|
70338
70289
|
if (!exists4) {
|
|
70339
70290
|
return exports_Effect.logDebug("No config file found, using defaults", { configPath }).pipe(exports_Effect.map(() => ({})));
|
|
70340
70291
|
}
|
|
70341
|
-
return fs.readFileString(configPath).pipe(exports_Effect.flatMap(
|
|
70292
|
+
return fs.readFileString(configPath).pipe(exports_Effect.flatMap(parseJson2(ConfigFile)));
|
|
70342
70293
|
}), exports_Effect.tapError((e) => exports_Effect.logWarning("Failed to parse config file, using defaults", {
|
|
70343
70294
|
configPath,
|
|
70344
70295
|
error: String(e)
|
|
@@ -70347,15 +70298,14 @@ var Agent, LogLevel, ConfigFile, ShelfConfigSchema, parseEnvAgent = (value6) =>
|
|
|
70347
70298
|
const xdgConfigHome = process.env["XDG_CONFIG_HOME"];
|
|
70348
70299
|
const xdgCacheHome = process.env["XDG_CACHE_HOME"];
|
|
70349
70300
|
const xdgStateHome = process.env["XDG_STATE_HOME"];
|
|
70350
|
-
const configDir = xdgConfigHome ? pathService.join(xdgConfigHome, "
|
|
70351
|
-
const cacheDir = xdgCacheHome ? pathService.join(xdgCacheHome, "
|
|
70352
|
-
const stateDir = xdgStateHome ? pathService.join(xdgStateHome, "
|
|
70301
|
+
const configDir = xdgConfigHome ? pathService.join(xdgConfigHome, "silas") : pathService.join(homeDir, ".config", "silas");
|
|
70302
|
+
const cacheDir = xdgCacheHome ? pathService.join(xdgCacheHome, "silas") : pathService.join(homeDir, ".cache", "silas");
|
|
70303
|
+
const stateDir = xdgStateHome ? pathService.join(xdgStateHome, "silas") : pathService.join(homeDir, ".local", "state", "silas");
|
|
70353
70304
|
return { configDir, cacheDir, stateDir };
|
|
70354
70305
|
}, Config2;
|
|
70355
70306
|
var init_config3 = __esm(() => {
|
|
70356
70307
|
init_esm3();
|
|
70357
70308
|
init_esm4();
|
|
70358
|
-
init_dist();
|
|
70359
70309
|
init_errors2();
|
|
70360
70310
|
Agent = exports_Schema.Literal("claude-code", "codex", "aider", "goose", "custom");
|
|
70361
70311
|
LogLevel = exports_Schema.Literal("debug", "info", "warn", "error");
|
|
@@ -70367,10 +70317,10 @@ var init_config3 = __esm(() => {
|
|
|
70367
70317
|
cache_max_gb: exports_Schema.optional(exports_Schema.Number),
|
|
70368
70318
|
log_level: exports_Schema.optional(LogLevel)
|
|
70369
70319
|
});
|
|
70370
|
-
|
|
70320
|
+
SilasConfigSchema = exports_Schema.Struct({
|
|
70371
70321
|
agent: Agent,
|
|
70372
70322
|
model: exports_Schema.String,
|
|
70373
|
-
customCommand: exports_Schema.
|
|
70323
|
+
customCommand: exports_Schema.UndefinedOr(exports_Schema.String),
|
|
70374
70324
|
timeout: exports_Schema.Number,
|
|
70375
70325
|
cacheMaxGb: exports_Schema.Number,
|
|
70376
70326
|
logLevel: LogLevel,
|
|
@@ -70378,18 +70328,18 @@ var init_config3 = __esm(() => {
|
|
|
70378
70328
|
cacheDir: exports_Schema.String,
|
|
70379
70329
|
stateDir: exports_Schema.String
|
|
70380
70330
|
});
|
|
70381
|
-
Config2 = class Config2 extends exports_Context.Tag("@
|
|
70331
|
+
Config2 = class Config2 extends exports_Context.Tag("@silas/Config")() {
|
|
70382
70332
|
static layer = exports_Layer.effect(Config2, exports_Effect.gen(function* () {
|
|
70383
70333
|
const fs = yield* exports_FileSystem.FileSystem;
|
|
70384
70334
|
const path4 = yield* exports_Path.Path;
|
|
70385
70335
|
const { configDir, cacheDir, stateDir } = getDirectories(path4);
|
|
70386
|
-
const configPath = path4.join(configDir, "config.
|
|
70336
|
+
const configPath = path4.join(configDir, "config.json");
|
|
70387
70337
|
const fileConfig = yield* loadConfigFile(fs, configPath);
|
|
70388
|
-
const envAgent = process.env["
|
|
70389
|
-
const envModel = process.env["
|
|
70390
|
-
const envTimeout = process.env["
|
|
70391
|
-
const envCacheMaxGb = process.env["
|
|
70392
|
-
const envLogLevel = process.env["
|
|
70338
|
+
const envAgent = process.env["SILAS_AGENT"];
|
|
70339
|
+
const envModel = process.env["SILAS_MODEL"];
|
|
70340
|
+
const envTimeout = process.env["SILAS_TIMEOUT"];
|
|
70341
|
+
const envCacheMaxGb = process.env["SILAS_CACHE_MAX_GB"];
|
|
70342
|
+
const envLogLevel = process.env["SILAS_LOG_LEVEL"];
|
|
70393
70343
|
const agent = parseEnvAgent(envAgent) ?? fileConfig.agent ?? "claude-code";
|
|
70394
70344
|
const model = envModel ?? fileConfig.model ?? "claude-sonnet-4-20250514";
|
|
70395
70345
|
const customCommand = fileConfig.custom_command;
|
|
@@ -70407,7 +70357,7 @@ var init_config3 = __esm(() => {
|
|
|
70407
70357
|
cacheDir,
|
|
70408
70358
|
stateDir
|
|
70409
70359
|
};
|
|
70410
|
-
const validated = yield* exports_Schema.decodeUnknown(
|
|
70360
|
+
const validated = yield* exports_Schema.decodeUnknown(SilasConfigSchema)(candidate).pipe(exports_Effect.mapError((e) => ConfigError.make({
|
|
70411
70361
|
message: `Invalid configuration: ${e}`
|
|
70412
70362
|
})));
|
|
70413
70363
|
return Config2.of(validated);
|
|
@@ -70419,9 +70369,9 @@ var init_config3 = __esm(() => {
|
|
|
70419
70369
|
timeout: 10,
|
|
70420
70370
|
cacheMaxGb: 1,
|
|
70421
70371
|
logLevel: "debug",
|
|
70422
|
-
configDir: "/tmp/
|
|
70423
|
-
cacheDir: "/tmp/
|
|
70424
|
-
stateDir: "/tmp/
|
|
70372
|
+
configDir: "/tmp/silas/config",
|
|
70373
|
+
cacheDir: "/tmp/silas/cache",
|
|
70374
|
+
stateDir: "/tmp/silas/state",
|
|
70425
70375
|
...overrides
|
|
70426
70376
|
}));
|
|
70427
70377
|
};
|
|
@@ -70434,7 +70384,7 @@ var RequestId, currentRequestId, withRequestId = (effect3) => exports_Effect.gen
|
|
|
70434
70384
|
});
|
|
70435
70385
|
var init_request_id = __esm(() => {
|
|
70436
70386
|
init_esm3();
|
|
70437
|
-
RequestId = class RequestId extends exports_Context.Tag("@
|
|
70387
|
+
RequestId = class RequestId extends exports_Context.Tag("@silas/RequestId")() {
|
|
70438
70388
|
static generate = exports_Effect.try({
|
|
70439
70389
|
try: () => {
|
|
70440
70390
|
const bytes = new Uint8Array(4);
|
|
@@ -70460,7 +70410,7 @@ var levelPriority, writeLogEntry = (fs, logsDir, getLogFile, entry) => fs.makeDi
|
|
|
70460
70410
|
const line4 = JSON.stringify(entry) + `
|
|
70461
70411
|
`;
|
|
70462
70412
|
return fs.writeFileString(logFile, line4, { flag: "a" });
|
|
70463
|
-
}), exports_Effect.catchAll((e) => exports_Effect.sync(() => console.error(`[
|
|
70413
|
+
}), exports_Effect.catchAll((e) => exports_Effect.sync(() => console.error(`[silas:logger] Failed to write log: ${e}`)))), pruneOldLogs = (fs, pathService, logsDir, cutoffDays) => fs.exists(logsDir).pipe(exports_Effect.flatMap((exists4) => {
|
|
70464
70414
|
if (!exists4)
|
|
70465
70415
|
return exports_Effect.void;
|
|
70466
70416
|
return fs.readDirectory(logsDir).pipe(exports_Effect.flatMap((files) => {
|
|
@@ -70472,7 +70422,7 @@ var levelPriority, writeLogEntry = (fs, logsDir, getLogFile, entry) => fs.makeDi
|
|
|
70472
70422
|
}).map((file6) => fs.remove(pathService.join(logsDir, file6)));
|
|
70473
70423
|
return exports_Effect.all(removeEffects, { concurrency: "unbounded" });
|
|
70474
70424
|
}), exports_Effect.asVoid);
|
|
70475
|
-
}), exports_Effect.tapError((e) => exports_Effect.sync(() => console.error(`[
|
|
70425
|
+
}), exports_Effect.tapError((e) => exports_Effect.sync(() => console.error(`[silas:logger] Failed to prune old logs: ${e}`))), exports_Effect.catchAll(() => exports_Effect.void)), Logger;
|
|
70476
70426
|
var init_logger2 = __esm(() => {
|
|
70477
70427
|
init_esm3();
|
|
70478
70428
|
init_esm4();
|
|
@@ -70484,7 +70434,7 @@ var init_logger2 = __esm(() => {
|
|
|
70484
70434
|
warn: 2,
|
|
70485
70435
|
error: 3
|
|
70486
70436
|
};
|
|
70487
|
-
Logger = class Logger extends exports_Context.Tag("@
|
|
70437
|
+
Logger = class Logger extends exports_Context.Tag("@silas/Logger")() {
|
|
70488
70438
|
static layer = exports_Layer.effect(Logger, exports_Effect.gen(function* () {
|
|
70489
70439
|
const config2 = yield* Config2;
|
|
70490
70440
|
const fs = yield* exports_FileSystem.FileSystem;
|
|
@@ -70509,7 +70459,7 @@ var init_logger2 = __esm(() => {
|
|
|
70509
70459
|
...fields
|
|
70510
70460
|
};
|
|
70511
70461
|
yield* writeLogEntry(fs, logsDir, getLogFile, entry);
|
|
70512
|
-
const stderrLine = `[
|
|
70462
|
+
const stderrLine = `[silas:${requestId}] ${message}`;
|
|
70513
70463
|
yield* exports_Effect.sync(() => console.error(stderrLine));
|
|
70514
70464
|
});
|
|
70515
70465
|
yield* pruneOldLogs(fs, path4, logsDir, 30);
|
|
@@ -70643,7 +70593,7 @@ var init_git = __esm(() => {
|
|
|
70643
70593
|
init_errors2();
|
|
70644
70594
|
init_spawn();
|
|
70645
70595
|
init_logger2();
|
|
70646
|
-
Git = class Git extends exports_Context.Tag("@
|
|
70596
|
+
Git = class Git extends exports_Context.Tag("@silas/Git")() {
|
|
70647
70597
|
static layer = exports_Layer.effect(Git, exports_Effect.gen(function* () {
|
|
70648
70598
|
const config2 = yield* Config2;
|
|
70649
70599
|
const pathService = yield* exports_Path.Path;
|
|
@@ -70726,7 +70676,7 @@ var init_lock = __esm(() => {
|
|
|
70726
70676
|
init_config3();
|
|
70727
70677
|
init_errors2();
|
|
70728
70678
|
init_logger2();
|
|
70729
|
-
Lock = class Lock extends exports_Context.Tag("@
|
|
70679
|
+
Lock = class Lock extends exports_Context.Tag("@silas/Lock")() {
|
|
70730
70680
|
static layer = exports_Layer.effect(Lock, exports_Effect.gen(function* () {
|
|
70731
70681
|
const config2 = yield* Config2;
|
|
70732
70682
|
const pathService = yield* exports_Path.Path;
|
|
@@ -70810,7 +70760,7 @@ var init_checkout = __esm(() => {
|
|
|
70810
70760
|
branch: exports_Schema.optional(exports_Schema.String)
|
|
70811
70761
|
});
|
|
70812
70762
|
CheckoutMetaFromJson = exports_Schema.parseJson(CheckoutMeta);
|
|
70813
|
-
Checkout = class Checkout extends exports_Context.Tag("@
|
|
70763
|
+
Checkout = class Checkout extends exports_Context.Tag("@silas/Checkout")() {
|
|
70814
70764
|
static layer = exports_Layer.effect(Checkout, exports_Effect.gen(function* () {
|
|
70815
70765
|
const config2 = yield* Config2;
|
|
70816
70766
|
const fs = yield* exports_FileSystem.FileSystem;
|
|
@@ -70937,7 +70887,7 @@ var init_cache2 = __esm(() => {
|
|
|
70937
70887
|
init_cache_meta();
|
|
70938
70888
|
init_spawn();
|
|
70939
70889
|
init_logger2();
|
|
70940
|
-
Cache = class Cache extends exports_Context.Tag("@
|
|
70890
|
+
Cache = class Cache extends exports_Context.Tag("@silas/Cache")() {
|
|
70941
70891
|
static layer = exports_Layer.effect(Cache, exports_Effect.gen(function* () {
|
|
70942
70892
|
const config2 = yield* Config2;
|
|
70943
70893
|
const fs = yield* exports_FileSystem.FileSystem;
|
|
@@ -71080,7 +71030,7 @@ var init_ref_resolver = __esm(() => {
|
|
|
71080
71030
|
init_git();
|
|
71081
71031
|
init_errors2();
|
|
71082
71032
|
init_logger2();
|
|
71083
|
-
RefResolver = class RefResolver extends exports_Context.Tag("@
|
|
71033
|
+
RefResolver = class RefResolver extends exports_Context.Tag("@silas/RefResolver")() {
|
|
71084
71034
|
static layer = exports_Layer.effect(RefResolver, exports_Effect.gen(function* () {
|
|
71085
71035
|
const git = yield* Git;
|
|
71086
71036
|
const logger3 = yield* Logger;
|
|
@@ -71295,7 +71245,7 @@ var init_pypi = __esm(() => {
|
|
|
71295
71245
|
var resolveCargo = (packageName, version) => {
|
|
71296
71246
|
const url2 = `https://crates.io/api/v1/crates/${packageName}`;
|
|
71297
71247
|
return fetchRegistry(url2, packageName, "cargo", CargoRegistryResponseSchema, {
|
|
71298
|
-
"User-Agent": "
|
|
71248
|
+
"User-Agent": "silas/1.0"
|
|
71299
71249
|
}).pipe(exports_Effect.flatMap((data) => {
|
|
71300
71250
|
const resolvedVersion = version ?? data.crate?.newest_version;
|
|
71301
71251
|
if (!resolvedVersion) {
|
|
@@ -71500,7 +71450,7 @@ var init_package_resolver = __esm(() => {
|
|
|
71500
71450
|
init_esm3();
|
|
71501
71451
|
init_resolvers();
|
|
71502
71452
|
ECOSYSTEMS = ["npm", "pypi", "cargo", "go", "rubygems"];
|
|
71503
|
-
PackageResolver = class PackageResolver extends exports_Context.Tag("@
|
|
71453
|
+
PackageResolver = class PackageResolver extends exports_Context.Tag("@silas/PackageResolver")() {
|
|
71504
71454
|
static layer = exports_Layer.succeed(PackageResolver, PackageResolver.of({
|
|
71505
71455
|
resolve: exports_Effect.fn("PackageResolver.resolve")(function* (ecosystem, packageName, version) {
|
|
71506
71456
|
return yield* resolvers[ecosystem](packageName, version);
|
|
@@ -71613,7 +71563,7 @@ var init_agent = __esm(() => {
|
|
|
71613
71563
|
init_config3();
|
|
71614
71564
|
init_errors2();
|
|
71615
71565
|
init_spawn();
|
|
71616
|
-
Agent2 = class Agent2 extends exports_Context.Tag("@
|
|
71566
|
+
Agent2 = class Agent2 extends exports_Context.Tag("@silas/Agent")() {
|
|
71617
71567
|
static layer = exports_Layer.effect(Agent2, exports_Effect.gen(function* () {
|
|
71618
71568
|
const config2 = yield* Config2;
|
|
71619
71569
|
const invoke = exports_Effect.fn("Agent.invoke")(function* (workingDir, context8) {
|
|
@@ -100624,7 +100574,7 @@ var init_mcp2 = __esm(() => {
|
|
|
100624
100574
|
init_ask();
|
|
100625
100575
|
init_request_id();
|
|
100626
100576
|
server = new McpServer({
|
|
100627
|
-
name: "
|
|
100577
|
+
name: "silas",
|
|
100628
100578
|
version: "0.1.0"
|
|
100629
100579
|
});
|
|
100630
100580
|
server.tool("ask_library", `Answer questions about a published library by fetching and analyzing its source code, documentation, and API.
|
|
@@ -100751,7 +100701,7 @@ Be specific. For large repositories, mention which part of the codebase you're i
|
|
|
100751
100701
|
try: () => server.connect(transport),
|
|
100752
100702
|
catch: (error51) => new Error(`Failed to connect MCP server: ${error51}`)
|
|
100753
100703
|
});
|
|
100754
|
-
yield* exports_Console.error("
|
|
100704
|
+
yield* exports_Console.error("silas MCP server started");
|
|
100755
100705
|
});
|
|
100756
100706
|
if (false) {}
|
|
100757
100707
|
});
|
|
@@ -100816,9 +100766,56 @@ init_Ref();
|
|
|
100816
100766
|
// node_modules/@effect/cli/dist/esm/internal/files.js
|
|
100817
100767
|
init_FileSystem();
|
|
100818
100768
|
init_Effect();
|
|
100819
|
-
init_dist();
|
|
100820
100769
|
var Ini = __toESM(require_ini(), 1);
|
|
100821
100770
|
var Toml = __toESM(require_toml(), 1);
|
|
100771
|
+
|
|
100772
|
+
// node_modules/yaml/dist/index.js
|
|
100773
|
+
var composer = require_composer();
|
|
100774
|
+
var Document = require_Document();
|
|
100775
|
+
var Schema = require_Schema();
|
|
100776
|
+
var errors = require_errors();
|
|
100777
|
+
var Alias = require_Alias();
|
|
100778
|
+
var identity4 = require_identity();
|
|
100779
|
+
var Pair = require_Pair();
|
|
100780
|
+
var Scalar = require_Scalar();
|
|
100781
|
+
var YAMLMap = require_YAMLMap();
|
|
100782
|
+
var YAMLSeq = require_YAMLSeq();
|
|
100783
|
+
var cst = require_cst();
|
|
100784
|
+
var lexer = require_lexer();
|
|
100785
|
+
var lineCounter = require_line_counter();
|
|
100786
|
+
var parser = require_parser2();
|
|
100787
|
+
var publicApi = require_public_api();
|
|
100788
|
+
var visit = require_visit();
|
|
100789
|
+
var $Composer = composer.Composer;
|
|
100790
|
+
var $Document = Document.Document;
|
|
100791
|
+
var $Schema = Schema.Schema;
|
|
100792
|
+
var $YAMLError = errors.YAMLError;
|
|
100793
|
+
var $YAMLParseError = errors.YAMLParseError;
|
|
100794
|
+
var $YAMLWarning = errors.YAMLWarning;
|
|
100795
|
+
var $Alias = Alias.Alias;
|
|
100796
|
+
var $isAlias = identity4.isAlias;
|
|
100797
|
+
var $isCollection = identity4.isCollection;
|
|
100798
|
+
var $isDocument = identity4.isDocument;
|
|
100799
|
+
var $isMap = identity4.isMap;
|
|
100800
|
+
var $isNode = identity4.isNode;
|
|
100801
|
+
var $isPair = identity4.isPair;
|
|
100802
|
+
var $isScalar = identity4.isScalar;
|
|
100803
|
+
var $isSeq = identity4.isSeq;
|
|
100804
|
+
var $Pair = Pair.Pair;
|
|
100805
|
+
var $Scalar = Scalar.Scalar;
|
|
100806
|
+
var $YAMLMap = YAMLMap.YAMLMap;
|
|
100807
|
+
var $YAMLSeq = YAMLSeq.YAMLSeq;
|
|
100808
|
+
var $Lexer = lexer.Lexer;
|
|
100809
|
+
var $LineCounter = lineCounter.LineCounter;
|
|
100810
|
+
var $Parser = parser.Parser;
|
|
100811
|
+
var $parse = publicApi.parse;
|
|
100812
|
+
var $parseAllDocuments = publicApi.parseAllDocuments;
|
|
100813
|
+
var $parseDocument = publicApi.parseDocument;
|
|
100814
|
+
var $stringify = publicApi.stringify;
|
|
100815
|
+
var $visit = visit.visit;
|
|
100816
|
+
var $visitAsync = visit.visitAsync;
|
|
100817
|
+
|
|
100818
|
+
// node_modules/@effect/cli/dist/esm/internal/files.js
|
|
100822
100819
|
var fileParsers = {
|
|
100823
100820
|
json: (content) => JSON.parse(content),
|
|
100824
100821
|
yaml: (content) => $parse(content),
|
|
@@ -107930,16 +107927,16 @@ var cacheClearCommand = exports_Command.make("clear", { yes: yesOpt }, ({ yes })
|
|
|
107930
107927
|
yield* exports_Console.log("Cache cleared");
|
|
107931
107928
|
})).pipe(exports_Command.withDescription("Delete all cached data"));
|
|
107932
107929
|
var cacheCommand = exports_Command.make("cache").pipe(exports_Command.withSubcommands([cacheStatusCommand, cachePruneCommand, cacheClearCommand]), exports_Command.withDescription("Manage the local cache"));
|
|
107933
|
-
var
|
|
107934
|
-
const
|
|
107930
|
+
var mcpCommand = exports_Command.make("mcp", {}, () => exports_Effect.gen(function* () {
|
|
107931
|
+
const mcpModule = yield* exports_Effect.tryPromise({
|
|
107935
107932
|
try: () => Promise.resolve().then(() => (init_mcp2(), exports_mcp)),
|
|
107936
107933
|
catch: (error51) => ValidationError.make({
|
|
107937
107934
|
message: `Failed to load MCP module: ${error51}`
|
|
107938
107935
|
})
|
|
107939
107936
|
});
|
|
107940
|
-
yield*
|
|
107937
|
+
yield* mcpModule.startServer;
|
|
107941
107938
|
})).pipe(exports_Command.withDescription("Start the MCP server"));
|
|
107942
|
-
var mainCommand = exports_Command.make("silas").pipe(exports_Command.withSubcommands([askCommand, resolveCommand, cacheCommand,
|
|
107939
|
+
var mainCommand = exports_Command.make("silas").pipe(exports_Command.withSubcommands([askCommand, resolveCommand, cacheCommand, mcpCommand]), exports_Command.withDescription("Answer questions about library source code"));
|
|
107943
107940
|
var cli = exports_Command.run(mainCommand, {
|
|
107944
107941
|
name: "silas",
|
|
107945
107942
|
version: "0.1.0"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "silas",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "CLI and MCP server for answering questions about library source code",
|
|
5
5
|
"author": "David Turnbull",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"prepare": "effect-language-service patch",
|
|
26
26
|
"typecheck": "tsc --noEmit",
|
|
27
27
|
"test": "bun test",
|
|
28
|
-
"
|
|
28
|
+
"silas": "bun src/cli.ts",
|
|
29
29
|
"build": "bun build src/cli.ts --target=node --outdir=dist --entry-naming=[name].js && bun run build:shebang",
|
|
30
30
|
"build:shebang": "echo '#!/usr/bin/env node' | cat - dist/cli.js > dist/cli.tmp && mv dist/cli.tmp dist/cli.js",
|
|
31
31
|
"prepublishOnly": "bun run build"
|
|
@@ -45,7 +45,6 @@
|
|
|
45
45
|
"@effect/rpc": "latest",
|
|
46
46
|
"@effect/sql": "latest",
|
|
47
47
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
48
|
-
"effect": "latest"
|
|
49
|
-
"yaml": "^2.8.2"
|
|
48
|
+
"effect": "latest"
|
|
50
49
|
}
|
|
51
50
|
}
|