@cortexkit/aft-opencode 0.18.0 → 0.18.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAoJlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,MAAM,EAAE,MAugBb,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAsJlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,MAAM,EAAE,MAohBb,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -23452,6 +23452,7 @@ function runAutoInstall(projectRoot, config2, fetchImpl = fetch) {
23452
23452
  const cachedBinDirs = [];
23453
23453
  const skipped = [];
23454
23454
  const installPromises = [];
23455
+ const installingBinaries = [];
23455
23456
  let installsStarted = 0;
23456
23457
  let projectExtensions = null;
23457
23458
  const getProjectExtensions = () => {
@@ -23475,6 +23476,7 @@ function runAutoInstall(projectRoot, config2, fetchImpl = fetch) {
23475
23476
  continue;
23476
23477
  }
23477
23478
  installsStarted += 1;
23479
+ installingBinaries.push(spec.binary);
23478
23480
  const controller = new AbortController;
23479
23481
  const promise2 = ensureServerInstalled(spec, config2, fetchImpl, controller.signal).then((outcome) => {
23480
23482
  if (!outcome.started)
@@ -23492,6 +23494,7 @@ function runAutoInstall(projectRoot, config2, fetchImpl = fetch) {
23492
23494
  }
23493
23495
  return {
23494
23496
  cachedBinDirs,
23497
+ installingBinaries,
23495
23498
  get installsStarted() {
23496
23499
  return installsStarted;
23497
23500
  },
@@ -24069,6 +24072,7 @@ function runGithubAutoInstall(relevantServers, config2, fetchImpl = fetch) {
24069
24072
  const cachedBinDirs = [];
24070
24073
  const skipped = [];
24071
24074
  const installPromises = [];
24075
+ const installingBinaries = [];
24072
24076
  let installsStarted = 0;
24073
24077
  const host = detectHostPlatform();
24074
24078
  if (!host) {
@@ -24082,6 +24086,7 @@ function runGithubAutoInstall(relevantServers, config2, fetchImpl = fetch) {
24082
24086
  return {
24083
24087
  cachedBinDirs,
24084
24088
  installsStarted: 0,
24089
+ installingBinaries: [],
24085
24090
  skipped,
24086
24091
  installsComplete: Promise.resolve()
24087
24092
  };
@@ -24103,6 +24108,7 @@ function runGithubAutoInstall(relevantServers, config2, fetchImpl = fetch) {
24103
24108
  continue;
24104
24109
  }
24105
24110
  installsStarted += 1;
24111
+ installingBinaries.push(spec.binary);
24106
24112
  const controller = new AbortController;
24107
24113
  const promise2 = ensureGithubInstalled(spec, config2, fetchImpl, host.platform, host.arch, controller.signal).then((outcome) => {
24108
24114
  if (!outcome.started)
@@ -24120,6 +24126,7 @@ function runGithubAutoInstall(relevantServers, config2, fetchImpl = fetch) {
24120
24126
  }
24121
24127
  return {
24122
24128
  cachedBinDirs,
24129
+ installingBinaries,
24123
24130
  get installsStarted() {
24124
24131
  return installsStarted;
24125
24132
  },
@@ -24428,8 +24435,9 @@ function writeWarnedTools(storageDir, warned) {
24428
24435
  } catch {}
24429
24436
  }
24430
24437
  function warningKey(warning, projectRoot) {
24438
+ const scope = warning.kind === "lsp_binary_missing" ? "_" : projectRoot ?? "_";
24431
24439
  return [
24432
- projectRoot ?? "_",
24440
+ scope,
24433
24441
  warning.kind,
24434
24442
  warning.language ?? warning.server ?? "_",
24435
24443
  warning.tool ?? warning.binary ?? "_",
@@ -29169,7 +29177,7 @@ var plugin = async (input) => {
29169
29177
  configOverrides.formatter = aftConfig.formatter;
29170
29178
  if (aftConfig.checker !== undefined)
29171
29179
  configOverrides.checker = aftConfig.checker;
29172
- configOverrides.restrict_to_project_root = aftConfig.restrict_to_project_root ?? true;
29180
+ configOverrides.restrict_to_project_root = aftConfig.restrict_to_project_root ?? false;
29173
29181
  configOverrides.bash_permissions = true;
29174
29182
  if (aftConfig.search_index !== undefined)
29175
29183
  configOverrides.search_index = aftConfig.search_index;
@@ -29201,6 +29209,9 @@ var plugin = async (input) => {
29201
29209
  const lspGraceDays = aftConfig.lsp?.grace_days ?? 7;
29202
29210
  const lspVersions = aftConfig.lsp?.versions ?? {};
29203
29211
  const lspDisabled = new Set(aftConfig.lsp?.disabled ?? []);
29212
+ configOverrides.lsp_auto_install_binaries = [
29213
+ ...new Set([...NPM_LSP_TABLE, ...GITHUB_LSP_TABLE].map((spec) => spec.binary))
29214
+ ];
29204
29215
  const npmResult = runAutoInstall(input.directory, {
29205
29216
  autoInstall: lspAutoInstall,
29206
29217
  graceDays: lspGraceDays,
@@ -29218,6 +29229,12 @@ var plugin = async (input) => {
29218
29229
  if (mergedBinDirs.length > 0) {
29219
29230
  configOverrides.lsp_paths_extra = mergedBinDirs;
29220
29231
  }
29232
+ const lspInflightInstalls = [
29233
+ ...new Set([...npmResult.installingBinaries, ...ghResult.installingBinaries])
29234
+ ];
29235
+ if (lspInflightInstalls.length > 0) {
29236
+ configOverrides.lsp_inflight_installs = lspInflightInstalls;
29237
+ }
29221
29238
  if (npmResult.installsStarted > 0 || ghResult.installsStarted > 0) {
29222
29239
  log(`[lsp] auto-install: ${npmResult.installsStarted} npm + ${ghResult.installsStarted} github install(s) running in background`);
29223
29240
  }
@@ -44,6 +44,8 @@ export interface AutoInstallResult {
44
44
  cachedBinDirs: string[];
45
45
  /** Number of background installs kicked off. */
46
46
  installsStarted: number;
47
+ /** Binary names whose installs are actively in flight at return time. */
48
+ installingBinaries: string[];
47
49
  /**
48
50
  * Servers that were disabled or skipped at decision time (synchronous).
49
51
  *
@@ -1 +1 @@
1
- {"version":3,"file":"lsp-auto-install.d.ts","sourceRoot":"","sources":["../src/lsp-auto-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAsBH,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,kGAAkG;IAClG,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C;;;;;;;;;OASG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAkDD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/D;AAwTD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,EACzB,SAAS,GAAE,OAAO,KAAa,GAC9B,iBAAiB,CAqEnB"}
1
+ {"version":3,"file":"lsp-auto-install.d.ts","sourceRoot":"","sources":["../src/lsp-auto-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAsBH,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,kGAAkG;IAClG,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;;;;OAOG;IACH,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C;;;;;;;;;OASG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAkDD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/D;AAwTD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,EACzB,SAAS,GAAE,OAAO,KAAa,GAC9B,iBAAiB,CAwEnB"}
@@ -61,6 +61,8 @@ export declare function validateExtraction(stagingRoot: string): void;
61
61
  export interface GithubAutoInstallResult {
62
62
  cachedBinDirs: string[];
63
63
  installsStarted: number;
64
+ /** Binary names whose installs are actively in flight at return time. */
65
+ installingBinaries: string[];
64
66
  skipped: Array<{
65
67
  id: string;
66
68
  reason: string;
@@ -1 +1 @@
1
- {"version":3,"file":"lsp-github-install.d.ts","sourceRoot":"","sources":["../src/lsp-github-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAsCH,OAAO,EACL,KAAK,IAAI,EACT,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAqB/B,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAG/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CASrF;AASD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAmUD,iBAAS,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAgBrD;AA6ED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA0E5D;AAuTD,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAsBD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAMjE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,EACpC,MAAM,EAAE,mBAAmB,EAC3B,SAAS,GAAE,OAAO,KAAa,GAC9B,uBAAuB,CAiFzB;AAID;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAyC9E;AAID;;;;;;;GAOG;AACH,OAAO,EACL,KAAK,IAAI,EACT,wBAAwB,IAAI,mCAAmC,EAC/D,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,GACd,CAAC"}
1
+ {"version":3,"file":"lsp-github-install.d.ts","sourceRoot":"","sources":["../src/lsp-github-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAsCH,OAAO,EACL,KAAK,IAAI,EACT,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAqB/B,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAG/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CASrF;AASD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAmUD,iBAAS,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAgBrD;AA6ED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA0E5D;AAuTD,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAsBD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAMjE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,EACpC,MAAM,EAAE,mBAAmB,EAC3B,SAAS,GAAE,OAAO,KAAa,GAC9B,uBAAuB,CAqFzB;AAID;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAyC9E;AAID;;;;;;;GAOG;AACH,OAAO,EACL,KAAK,IAAI,EACT,wBAAwB,IAAI,mCAAmC,EAC/D,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,GACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../src/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiOH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,yBAAyB,GAAG,uBAAuB,GAAG,oBAAoB,CAAC;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3F;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C1F;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAuED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C9E"}
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../src/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiOH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,yBAAyB,GAAG,uBAAuB,GAAG,oBAAoB,CAAC;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3F;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C1F;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAwED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C9E"}
package/dist/tui.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // package.json
3
3
  var package_default = {
4
4
  name: "@cortexkit/aft-opencode",
5
- version: "0.18.0",
5
+ version: "0.18.2",
6
6
  type: "module",
7
7
  description: "OpenCode plugin for Agent File Tools (AFT) \u2014 tree-sitter and lsp powered code analysis",
8
8
  main: "dist/index.js",
@@ -16,6 +16,7 @@ var package_default = {
16
16
  "dist",
17
17
  "src/tui",
18
18
  "src/shared",
19
+ "src/logger.ts",
19
20
  "README.md"
20
21
  ],
21
22
  scripts: {
@@ -34,11 +35,11 @@ var package_default = {
34
35
  zod: "^4.1.8"
35
36
  },
36
37
  optionalDependencies: {
37
- "@cortexkit/aft-darwin-arm64": "0.18.0",
38
- "@cortexkit/aft-darwin-x64": "0.18.0",
39
- "@cortexkit/aft-linux-arm64": "0.18.0",
40
- "@cortexkit/aft-linux-x64": "0.18.0",
41
- "@cortexkit/aft-win32-x64": "0.18.0"
38
+ "@cortexkit/aft-darwin-arm64": "0.18.2",
39
+ "@cortexkit/aft-darwin-x64": "0.18.2",
40
+ "@cortexkit/aft-linux-arm64": "0.18.2",
41
+ "@cortexkit/aft-linux-x64": "0.18.2",
42
+ "@cortexkit/aft-win32-x64": "0.18.2"
42
43
  },
43
44
  devDependencies: {
44
45
  "@types/node": "^22.0.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/aft-opencode",
3
- "version": "0.18.0",
3
+ "version": "0.18.2",
4
4
  "type": "module",
5
5
  "description": "OpenCode plugin for Agent File Tools (AFT) — tree-sitter and lsp powered code analysis",
6
6
  "main": "dist/index.js",
@@ -14,6 +14,7 @@
14
14
  "dist",
15
15
  "src/tui",
16
16
  "src/shared",
17
+ "src/logger.ts",
17
18
  "README.md"
18
19
  ],
19
20
  "scripts": {
@@ -32,11 +33,11 @@
32
33
  "zod": "^4.1.8"
33
34
  },
34
35
  "optionalDependencies": {
35
- "@cortexkit/aft-darwin-arm64": "0.18.0",
36
- "@cortexkit/aft-darwin-x64": "0.18.0",
37
- "@cortexkit/aft-linux-arm64": "0.18.0",
38
- "@cortexkit/aft-linux-x64": "0.18.0",
39
- "@cortexkit/aft-win32-x64": "0.18.0"
36
+ "@cortexkit/aft-darwin-arm64": "0.18.2",
37
+ "@cortexkit/aft-darwin-x64": "0.18.2",
38
+ "@cortexkit/aft-linux-arm64": "0.18.2",
39
+ "@cortexkit/aft-linux-x64": "0.18.2",
40
+ "@cortexkit/aft-win32-x64": "0.18.2"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@types/node": "^22.0.0",
package/src/logger.ts ADDED
@@ -0,0 +1,99 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+
5
+ const TAG = "[aft-plugin]";
6
+ const logFile = path.join(os.tmpdir(), "aft-plugin.log");
7
+
8
+ /**
9
+ * When AFT_LOG_STDERR=1, logs go to stderr (useful for subprocess tests that
10
+ * capture stderr output). Otherwise logs go to the temp file.
11
+ */
12
+ const useStderr = process.env.AFT_LOG_STDERR === "1";
13
+
14
+ let buffer: string[] = [];
15
+ let flushTimer: ReturnType<typeof setTimeout> | null = null;
16
+ const FLUSH_INTERVAL_MS = 500;
17
+ const BUFFER_SIZE_LIMIT = 50;
18
+
19
+ function flush(): void {
20
+ if (buffer.length === 0) return;
21
+ const data = buffer.join("");
22
+ buffer = [];
23
+ try {
24
+ if (useStderr) {
25
+ process.stderr.write(data);
26
+ } else {
27
+ fs.appendFileSync(logFile, data);
28
+ }
29
+ } catch {
30
+ // Intentional: logging must never throw
31
+ }
32
+ }
33
+
34
+ function scheduleFlush(): void {
35
+ if (flushTimer) return;
36
+ flushTimer = setTimeout(() => {
37
+ flushTimer = null;
38
+ flush();
39
+ }, FLUSH_INTERVAL_MS);
40
+ // Don't prevent Node from exiting
41
+ if (flushTimer && typeof flushTimer === "object" && "unref" in flushTimer) {
42
+ flushTimer.unref();
43
+ }
44
+ }
45
+
46
+ function write(level: string, message: string, data?: unknown, sessionId?: string): void {
47
+ try {
48
+ const timestamp = new Date().toISOString();
49
+ const serialized = data === undefined ? "" : ` ${JSON.stringify(data)}`;
50
+ const sessionPrefix = sessionId ? ` [${sessionId}]` : "";
51
+ const line = `[${timestamp}] ${level} ${TAG}${sessionPrefix} ${message}${serialized}\n`;
52
+ if (useStderr) {
53
+ // Write immediately in stderr mode (subprocess tests need it before exit)
54
+ process.stderr.write(line);
55
+ return;
56
+ }
57
+ buffer.push(line);
58
+ if (buffer.length >= BUFFER_SIZE_LIMIT) {
59
+ flush();
60
+ } else {
61
+ scheduleFlush();
62
+ }
63
+ } catch {
64
+ // Intentional: logging must never throw
65
+ }
66
+ }
67
+ export function log(message: string, data?: unknown): void {
68
+ write("INFO", message, data);
69
+ }
70
+
71
+ export function warn(message: string, data?: unknown): void {
72
+ write("WARN", message, data);
73
+ }
74
+
75
+ export function error(message: string, data?: unknown): void {
76
+ write("ERROR", message, data);
77
+ }
78
+
79
+ /**
80
+ * Log with a session-id prefix. Use for messages that originate from a
81
+ * specific OpenCode session (per-request errors, timeouts, crashes during
82
+ * a session's tool call). Bridge-lifecycle logs (spawn, version, idle) are
83
+ * project-scoped, not session-scoped — use `log`/`warn`/`error` for those.
84
+ */
85
+ export function sessionLog(sessionId: string, message: string, data?: unknown): void {
86
+ write("INFO", message, data, sessionId);
87
+ }
88
+
89
+ export function sessionWarn(sessionId: string, message: string, data?: unknown): void {
90
+ write("WARN", message, data, sessionId);
91
+ }
92
+
93
+ export function sessionError(sessionId: string, message: string, data?: unknown): void {
94
+ write("ERROR", message, data, sessionId);
95
+ }
96
+
97
+ export function getLogFilePath(): string {
98
+ return logFile;
99
+ }