@ghl-ai/aw 0.1.48-beta.0 → 0.1.48-beta.1

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/commands/push.mjs CHANGED
@@ -36,6 +36,7 @@ import {
36
36
  AW_DOCS_SEED_BRANCH,
37
37
  AW_DOCS_PUBLISH_DIR,
38
38
  AW_DOCS_PUBLIC_BASE_URL,
39
+ AW_DOCS_TEAMOFONE_ORIGIN,
39
40
  AW_DOCS_TEAMOFONE_BASE_URL,
40
41
  AW_CO_AUTHOR,
41
42
  defaultAwDocsGithubDocsConfig,
@@ -220,11 +221,11 @@ function resolveAwDocsPublishConfig(projectRoot) {
220
221
  const teamofoneBaseUrl = String(
221
222
  process.env.AW_DOCS_TEAMOFONE_BASE_URL
222
223
  || githubDocs.teamofone_base_url
223
- || AW_DOCS_TEAMOFONE_BASE_URL
224
- || '',
224
+ || AW_DOCS_TEAMOFONE_BASE_URL,
225
225
  ).trim();
226
226
  const publicBaseUrl = process.env.AW_DOCS_PUBLIC_BASE_URL
227
227
  || githubDocs.public_base_url
228
+ || AW_DOCS_PUBLIC_BASE_URL
228
229
  || `https://github.com/${String(repo).replace(/\.git$/, '')}/blob/${branch}`;
229
230
 
230
231
  return {
@@ -234,7 +235,7 @@ function resolveAwDocsPublishConfig(projectRoot) {
234
235
  branch,
235
236
  seedBranch: process.env.AW_DOCS_SEED_BRANCH || githubDocs.seed_branch || AW_DOCS_SEED_BRANCH,
236
237
  dest,
237
- teamofoneBaseUrl,
238
+ teamofoneBaseUrl: normalizeTeamOfOneBaseUrl(teamofoneBaseUrl),
238
239
  publicBaseUrl,
239
240
  };
240
241
  }
@@ -389,6 +390,14 @@ function appendPathToUrl(baseUrl, path) {
389
390
  return `${basePath.replace(/\/$/, '')}/${encodedPath}${query}${hash}`;
390
391
  }
391
392
 
393
+ function normalizeTeamOfOneBaseUrl(baseUrl) {
394
+ const value = String(baseUrl || '').trim();
395
+ if (!value) return '';
396
+ if (/^https?:\/\//i.test(value)) return value;
397
+ if (value.startsWith('/')) return `${AW_DOCS_TEAMOFONE_ORIGIN.replace(/\/$/, '')}${value}`;
398
+ return `https://${value.replace(/^\/+/, '')}`;
399
+ }
400
+
392
401
  function appendQueryParam(url, key, value) {
393
402
  const hashIndex = url.indexOf('#');
394
403
  const withoutHash = hashIndex === -1 ? url : url.slice(0, hashIndex);
@@ -422,8 +431,13 @@ function awDocsRepositoryUrl(publishedPath, publishConfig) {
422
431
  }
423
432
 
424
433
  function printAwDocsLinks(links, limit = 10) {
434
+ fmt.logInfo(chalk.bold('Remote Docs'));
425
435
  for (const link of links.slice(0, limit)) {
426
- fmt.logInfo(chalk.cyan(link.remoteUrl));
436
+ fmt.logInfo(` ${chalk.dim(link.relPath)}`);
437
+ fmt.logInfo(` TeamOfOne: ${chalk.cyan(link.remoteUrl)}`);
438
+ if (link.repositoryUrl && link.repositoryUrl !== link.remoteUrl) {
439
+ fmt.logInfo(` GitHub: ${chalk.cyan(link.repositoryUrl)}`);
440
+ }
427
441
  }
428
442
  if (links.length > limit) {
429
443
  fmt.logInfo(chalk.dim(`...and ${links.length - limit} more`));
package/constants.mjs CHANGED
@@ -33,7 +33,8 @@ export const AW_DOCS_BASE_BRANCH = 'master-sync';
33
33
  export const AW_DOCS_SEED_BRANCH = process.env.AW_DOCS_SEED_BRANCH || 'scaffold';
34
34
  export const AW_DOCS_PUBLISH_DIR = 'aw_docs';
35
35
  export const AW_DOCS_PUBLIC_BASE_URL = process.env.AW_DOCS_PUBLIC_BASE_URL || `https://github.com/${AW_DOCS_REPO}/blob/${AW_DOCS_BASE_BRANCH}`;
36
- export const AW_DOCS_TEAMOFONE_BASE_URL = process.env.AW_DOCS_TEAMOFONE_BASE_URL || `https://teamofone.msgsndr.net/too/docs/${AW_DOCS_REPO}`;
36
+ export const AW_DOCS_TEAMOFONE_ORIGIN = process.env.AW_DOCS_TEAMOFONE_ORIGIN || 'https://teamofone.msgsndr.net';
37
+ export const AW_DOCS_TEAMOFONE_BASE_URL = process.env.AW_DOCS_TEAMOFONE_BASE_URL || `${AW_DOCS_TEAMOFONE_ORIGIN}/too/docs/GoHighLevel/ghl-aw-docs`;
37
38
 
38
39
  export function defaultAwDocsGithubDocsConfig() {
39
40
  return {
package/ecc.mjs CHANGED
@@ -12,7 +12,7 @@ import { applyStoredStartupPreferences } from "./startup.mjs";
12
12
 
13
13
  const AW_ECC_REPO_SSH = "git@github.com:shreyansh-ghl/aw-ecc.git";
14
14
  const AW_ECC_REPO_HTTPS = "https://github.com/shreyansh-ghl/aw-ecc.git";
15
- export const AW_ECC_TAG = "v1.4.57";
15
+ export const AW_ECC_TAG = "v1.4.55";
16
16
 
17
17
  const MARKETPLACE_NAME = "aw-marketplace";
18
18
  const PLUGIN_KEY = `aw@${MARKETPLACE_NAME}`;
package/integrations.mjs CHANGED
@@ -45,6 +45,8 @@ export const INTEGRATIONS = {
45
45
  type: 'universal-installer',
46
46
  label: 'LeanCTX',
47
47
  description: 'Context OS for AI — compresses file reads + shell output + memory (60-99% fewer input tokens)',
48
+ autoInstall: false, // opt-in only — install via: aw integrations add lean-ctx
49
+ uninstallCmd: 'lean-ctx uninstall', // runs on: aw integrations remove lean-ctx
48
50
  scripts: {
49
51
  win32: null, // no PS1 — uses npm fallback (lean-ctx-bin)
50
52
  posix: 'https://leanctx.com/install.sh',
@@ -773,12 +775,25 @@ export async function removeIntegration(key, { silent = false } = {}) {
773
775
  );
774
776
  }
775
777
  } else if (integration.type === 'universal-installer') {
776
- if (!silent) {
777
- fmt.logWarn(
778
- `Removed ${integration.label} from the aw manifest.\n` +
779
- ` To fully uninstall: follow the uninstall instructions for ${integration.label} in its documentation.`,
780
- 'Manual Cleanup',
781
- );
778
+ if (integration.uninstallCmd) {
779
+ if (!silent) fmt.logStep(`Running ${integration.uninstallCmd}...`);
780
+ try {
781
+ execSync(integration.uninstallCmd, { stdio: silent ? 'ignore' : 'inherit' });
782
+ if (!silent) fmt.logSuccess(`${integration.label} uninstalled`);
783
+ } catch {
784
+ if (!silent) fmt.logWarn(
785
+ `${integration.uninstallCmd} failed or not found. Manual cleanup may be needed.`,
786
+ 'Uninstall Warning',
787
+ );
788
+ }
789
+ } else {
790
+ if (!silent) {
791
+ fmt.logWarn(
792
+ `Removed ${integration.label} from the aw manifest.\n` +
793
+ ` To fully uninstall: follow the uninstall instructions for ${integration.label} in its documentation.`,
794
+ 'Manual Cleanup',
795
+ );
796
+ }
782
797
  }
783
798
  }
784
799
 
@@ -816,6 +831,8 @@ export function suggestForTeam(namespace) {
816
831
 
817
832
  return Object.entries(INTEGRATIONS)
818
833
  .filter(([, integration]) => {
834
+ // Skip opt-in only integrations (autoInstall: false)
835
+ if (integration.autoInstall === false) return false;
819
836
  // Show if: team is in the integration's teams list OR teams list is empty (universal)
820
837
  return (
821
838
  integration.teams.length === 0 || integration.teams.includes(team)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ghl-ai/aw",
3
- "version": "0.1.48-beta.0",
3
+ "version": "0.1.48-beta.1",
4
4
  "description": "Agentic Workspace CLI — pull, push & manage agents, skills and commands from the registry",
5
5
  "type": "module",
6
6
  "bin": {