@appland/appmap 3.176.0 → 3.177.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/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ # [@appland/appmap-v3.177.1](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.177.0...@appland/appmap-v3.177.1) (2024-12-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Update gitignore ([2d349b0](https://github.com/getappmap/appmap-js/commit/2d349b0f9945c41cec8e1d997231da1a1e185c10))
7
+
8
+ # [@appland/appmap-v3.177.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.176.0...@appland/appmap-v3.177.0) (2024-12-10)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * `[@review](https://github.com/review)` base branch is now main, master or develop ([77a8d86](https://github.com/getappmap/appmap-js/commit/77a8d863d8ca232aa6fd7f9924b4c4e3ba526e04))
14
+
15
+
16
+ ### Features
17
+
18
+ * Add welcome message completions ([5e627d2](https://github.com/getappmap/appmap-js/commit/5e627d20ed0bc19a92938203641848f338ac1e37))
19
+ * Dynamic welcome message is not always enabled ([24034cf](https://github.com/getappmap/appmap-js/commit/24034cfc35ecd2894ac1cba66332179501e5ce31))
20
+
1
21
  # [@appland/appmap-v3.176.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.175.0...@appland/appmap-v3.176.0) (2024-12-02)
2
22
 
3
23
 
@@ -56,7 +56,7 @@ function rpcMethods(navie, codeEditor) {
56
56
  (0, configuration_1.getConfigurationV1)(),
57
57
  (0, configuration_1.setConfigurationV2)(),
58
58
  (0, configuration_1.getConfigurationV2)(),
59
- (0, metadata_2.navieMetadataV1)(),
59
+ (0, metadata_2.navieMetadataV1)(navie),
60
60
  (0, suggest_1.navieSuggestHandlerV1)(navie),
61
61
  ];
62
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../src/cmds/index/rpc.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAoC;AAIpC,4CAAoD;AAEpD,uCAAsC;AACtC,oDAAiD;AACjD,qEAAmD;AAEnD,yEAAiD;AACjD,uFAA+D;AAC/D,uDAAoG;AACpG,oCAAsF;AACtF,4DAAoC;AACpC,iEAA+C;AAC/C,kDAAsE;AACtE,6EAA2E;AAC3E,2DAKiC;AACjC,kFAA0D;AAC1D,kDAA+C;AAE/C,uDAA2D;AAC3D,qDAAgE;AAChE,yEAA0E;AAC1E,8EAAsD;AACtD,+BAA4B;AAC5B,2BAA6B;AAEhB,QAAA,OAAO,GAAG,KAAK,CAAC;AAChB,QAAA,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,MAAM,OAAO,GAAG,CAAI,IAAmB,EAAE,EAAE;IAChD,OAAO,IAAA,8BAAY,EAAC,IAAI,CAAC;SACtB,MAAM,CAAC,MAAM,EAAE;QACd,QAAQ,EACN,wIAAwI;QAC1I,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,CAAC;KACX,CAAC;SACD,MAAM,EAAE,CAAC;AACd,CAAC,CAAC;AAVW,QAAA,OAAO,WAUlB;AAOF,SAAgB,UAAU,CAAC,KAAqB,EAAE,UAAmB;IACnE,OAAO;QACL,IAAA,eAAM,GAAE;QACR,IAAA,qBAAa,GAAE;QACf,IAAA,qBAAa,GAAE;QACf,IAAA,gBAAY,GAAE;QACd,IAAA,cAAU,GAAE;QACZ,IAAA,kBAAQ,GAAE;QACV,IAAA,yBAAe,GAAE;QACjB,IAAA,wBAAc,EAAC,KAAK,EAAE,UAAU,CAAC;QACjC,IAAA,8BAAoB,GAAE;QACtB,IAAA,2BAAiB,GAAE;QACnB,IAAA,eAAM,EAAC,KAAK,CAAC;QACb,IAAA,kCAAkB,GAAE;QACpB,IAAA,kCAAkB,GAAE;QACpB,IAAA,kCAAkB,GAAE;QACpB,IAAA,kCAAkB,GAAE;QACpB,IAAA,0BAAe,GAAE;QACjB,IAAA,+BAAqB,EAAC,KAAK,CAAC;KAC7B,CAAC;AACJ,CAAC;AApBD,gCAoBC;AAEM,MAAM,OAAO,GAAG,KAAK,EAAE,IAAsB,EAAE,EAAE;IACtD,IAAA,eAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEtB,MAAM,KAAK,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,CAAC;IACvC,IAAI,UAAU,GAAuB,IAAI,CAAC,UAAU,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE;QACf,UAAU,GAAG,IAAA,0BAAgB,GAAE,CAAC;QAChC,IAAI,UAAU;YAAE,IAAA,mBAAI,EAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;KAC7D;IAED,IAAA,0BAAiB,EAAC,KAAK,CAAC,CAAC;IACzB,MAAM,IAAA,gDAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE9C;QACE,MAAM,OAAO,GAAG,IAAA,iCAAiB,GAAE,CAAC;QACpC,MAAM,aAAa,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,iBAAO,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;KAC/C;IAED,MAAM,SAAS,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAC1E,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC,CAAC;AArBW,QAAA,OAAO,WAqBlB"}
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../src/cmds/index/rpc.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAoC;AAIpC,4CAAoD;AAEpD,uCAAsC;AACtC,oDAAiD;AACjD,qEAAmD;AAEnD,yEAAiD;AACjD,uFAA+D;AAC/D,uDAAoG;AACpG,oCAAsF;AACtF,4DAAoC;AACpC,iEAA+C;AAC/C,kDAAsE;AACtE,6EAA2E;AAC3E,2DAKiC;AACjC,kFAA0D;AAC1D,kDAA+C;AAE/C,uDAA2D;AAC3D,qDAAgE;AAChE,yEAA0E;AAC1E,8EAAsD;AACtD,+BAA4B;AAC5B,2BAA6B;AAEhB,QAAA,OAAO,GAAG,KAAK,CAAC;AAChB,QAAA,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,MAAM,OAAO,GAAG,CAAI,IAAmB,EAAE,EAAE;IAChD,OAAO,IAAA,8BAAY,EAAC,IAAI,CAAC;SACtB,MAAM,CAAC,MAAM,EAAE;QACd,QAAQ,EACN,wIAAwI;QAC1I,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,CAAC;KACX,CAAC;SACD,MAAM,EAAE,CAAC;AACd,CAAC,CAAC;AAVW,QAAA,OAAO,WAUlB;AAOF,SAAgB,UAAU,CAAC,KAAqB,EAAE,UAAmB;IACnE,OAAO;QACL,IAAA,eAAM,GAAE;QACR,IAAA,qBAAa,GAAE;QACf,IAAA,qBAAa,GAAE;QACf,IAAA,gBAAY,GAAE;QACd,IAAA,cAAU,GAAE;QACZ,IAAA,kBAAQ,GAAE;QACV,IAAA,yBAAe,GAAE;QACjB,IAAA,wBAAc,EAAC,KAAK,EAAE,UAAU,CAAC;QACjC,IAAA,8BAAoB,GAAE;QACtB,IAAA,2BAAiB,GAAE;QACnB,IAAA,eAAM,EAAC,KAAK,CAAC;QACb,IAAA,kCAAkB,GAAE;QACpB,IAAA,kCAAkB,GAAE;QACpB,IAAA,kCAAkB,GAAE;QACpB,IAAA,kCAAkB,GAAE;QACpB,IAAA,0BAAe,EAAC,KAAK,CAAC;QACtB,IAAA,+BAAqB,EAAC,KAAK,CAAC;KAC7B,CAAC;AACJ,CAAC;AApBD,gCAoBC;AAEM,MAAM,OAAO,GAAG,KAAK,EAAE,IAAsB,EAAE,EAAE;IACtD,IAAA,eAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEtB,MAAM,KAAK,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,CAAC;IACvC,IAAI,UAAU,GAAuB,IAAI,CAAC,UAAU,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE;QACf,UAAU,GAAG,IAAA,0BAAgB,GAAE,CAAC;QAChC,IAAI,UAAU;YAAE,IAAA,mBAAI,EAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;KAC7D;IAED,IAAA,0BAAiB,EAAC,KAAK,CAAC,CAAC;IACzB,MAAM,IAAA,gDAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE9C;QACE,MAAM,OAAO,GAAG,IAAA,iCAAiB,GAAE,CAAC;QACpC,MAAM,aAAa,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,iBAAO,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;KAC/C;IAED,MAAM,SAAS,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAC1E,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC,CAAC;AArBW,QAAA,OAAO,WAqBlB"}
@@ -3,9 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.executeCommand = void 0;
6
+ exports.execute = exports.executeCommand = void 0;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
- const child_process_1 = require("child_process");
8
+ const node_child_process_1 = require("node:child_process");
9
9
  const utils_1 = require("../utils");
10
10
  function commandStyle(message) {
11
11
  return chalk_1.default.gray(`$ ${message}`);
@@ -16,7 +16,7 @@ function executeCommand(cmd, printCommand = (0, utils_1.verbose)(), printStdout
16
16
  const commandOptions = {};
17
17
  if (cwd)
18
18
  commandOptions.cwd = cwd;
19
- const command = (0, child_process_1.exec)(cmd, commandOptions);
19
+ const command = (0, node_child_process_1.exec)(cmd, commandOptions);
20
20
  const result = [];
21
21
  const stderr = [];
22
22
  if (command.stdout) {
@@ -50,4 +50,34 @@ function executeCommand(cmd, printCommand = (0, utils_1.verbose)(), printStdout
50
50
  });
51
51
  }
52
52
  exports.executeCommand = executeCommand;
53
+ /**
54
+ * This is a wrapper around `execFile` that returns a promise containing the stdout. `execFile` will
55
+ * not spawn a shell, so it is less likely to be vulnerable to shell injection attacks.
56
+ *
57
+ * @param {string} command - The command to execute. This should be resolvable via `PATH`, and contain no arguments.
58
+ * @param {string[]} args - The arguments to pass to the command.
59
+ * @param {object} [options] - Options to pass to `execFile`.
60
+ * @returns {Promise<string>} A promise containing the stdout of the command.
61
+ */
62
+ const execute = (command, args, options) => new Promise((resolve, reject) => {
63
+ var _a, _b, _c, _d;
64
+ const child = (0, node_child_process_1.execFile)(command, args, Object.assign({}, (options !== null && options !== void 0 ? options : {})));
65
+ let stdout = '';
66
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.setEncoding('utf8');
67
+ (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on('data', (data) => {
68
+ stdout += data.toString();
69
+ });
70
+ let stderr = '';
71
+ (_c = child.stderr) === null || _c === void 0 ? void 0 : _c.setEncoding('utf8');
72
+ (_d = child.stderr) === null || _d === void 0 ? void 0 : _d.on('data', (data) => {
73
+ stderr += data.toString();
74
+ });
75
+ child.on('close', (code) => {
76
+ if (code === 0)
77
+ resolve(stdout);
78
+ else
79
+ reject(new Error(stderr));
80
+ });
81
+ });
82
+ exports.execute = execute;
53
83
  //# sourceMappingURL=executeCommand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executeCommand.js","sourceRoot":"","sources":["../../src/lib/executeCommand.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,iDAAkD;AAClD,oCAAmC;AAEnC,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,eAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,cAAc,CAC5B,GAAW,EACX,YAAY,GAAG,IAAA,eAAO,GAAE,EACxB,WAAW,GAAG,IAAA,eAAO,GAAE,EACvB,WAAW,GAAG,IAAA,eAAO,GAAE,EACvB,OAAO,GAAG,CAAC,CAAC,CAAC,EACb,GAAY;IAEZ,IAAI,YAAY;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,cAAc,GAAgB,EAAE,CAAC;IACvC,IAAI,GAAG;QAAE,cAAc,CAAC,GAAG,GAAG,GAAG,CAAC;IAClC,MAAM,OAAO,GAAG,IAAA,oBAAI,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1C,IAAI,WAAW;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;KACJ;IACD,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,IAAI,WAAW;YAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;YAChD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACtE;IACD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;gBACvD,IAAI,MAAM,EAAE;oBACV,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,sBAAsB,MAAM,sBAAsB,IAAI,EAAE,CAAC,CAAC;iBACvF;gBACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1B;iBAAM;gBACL,IAAI,CAAC,YAAY;oBAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC,CAAC;aACvD;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAtCD,wCAsCC"}
1
+ {"version":3,"file":"executeCommand.js","sourceRoot":"","sources":["../../src/lib/executeCommand.ts"],"names":[],"mappings":"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"}
package/built/lib/git.js CHANGED
@@ -3,11 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.findRepository = void 0;
6
+ exports.getDiffLog = exports.getWorkingDiff = exports.findBaseCommit = exports.findRepository = void 0;
7
7
  const gitconfiglocal_1 = __importDefault(require("gitconfiglocal"));
8
8
  const node_assert_1 = __importDefault(require("node:assert"));
9
9
  const node_url_1 = require("node:url");
10
10
  const util_1 = require("util");
11
+ const executeCommand_1 = require("./executeCommand");
12
+ const node_console_1 = require("node:console");
13
+ const utils_1 = require("../utils");
11
14
  // Attempt to parse special syntax allowed by git:
12
15
  // - scp-style urls ([user@]host.xz:path/to/repo.git/),
13
16
  // - bare file paths.
@@ -75,4 +78,98 @@ async function findRepository(dir) {
75
78
  return (_a = (await findAndSanitizeRepository(dir))) === null || _a === void 0 ? void 0 : _a.toString();
76
79
  }
77
80
  exports.findRepository = findRepository;
81
+ /**
82
+ * Find the distance between the base commit and the head commit.
83
+ *
84
+ * @param {string} [base='HEAD'] - The base commit to compare against.
85
+ * @param {string} [head='HEAD'] - The head commit to compare against.
86
+ * @param {string} [cwd] - The working directory to run the command in.
87
+ * @returns {Promise<number | undefined>} A promise containing the distance between the base and
88
+ * head commits, or undefined if the distance could not be resolved.
89
+ */
90
+ async function getCommitDistance(base, head, cwd) {
91
+ try {
92
+ const result = await (0, executeCommand_1.execute)('git', ['rev-list', '--count', `${base}..${head}`], { cwd });
93
+ const distance = parseInt(result);
94
+ return Number.isNaN(distance) ? undefined : distance;
95
+ }
96
+ catch (e) {
97
+ if ((0, utils_1.verbose)()) {
98
+ (0, node_console_1.warn)(`Failed to retrieve commit distance between ${base} and ${head}`);
99
+ (0, node_console_1.warn)(String(e));
100
+ }
101
+ }
102
+ }
103
+ /**
104
+ * Find the nearest base commit for the given head commit.
105
+ *
106
+ * @param {string[]} baseRefs - The base commits to compare against.
107
+ * @param {string} headRef - The head commit to compare against.
108
+ * @param {string} [cwd] - The working directory to run the command in.
109
+ * @returns {Promise<string | undefined>} A promise containing the nearest base commit, or
110
+ * undefined if no base commit could be resolved.
111
+ */
112
+ async function findNearestBranch(baseRefs, headRef, cwd) {
113
+ const distances = await Promise.all(baseRefs.map((branch) => getCommitDistance(branch, headRef, cwd)));
114
+ const validDistances = distances.filter((distance) => distance !== undefined);
115
+ if (validDistances.length === 0)
116
+ return undefined;
117
+ return baseRefs[distances.indexOf(Math.min(...validDistances))];
118
+ }
119
+ // These are the default branch names that we'll use to find the nearest base commit.
120
+ const mainBranches = ['main', 'master', 'develop'];
121
+ /**
122
+ * Find the base commit of the current branch.
123
+ *
124
+ * @param {string} [headRef='HEAD'] - The reference to identify the base commit.
125
+ * @param {string} [cwd] - The working directory to run the command in.
126
+ * @returns {Promise<string | undefined>} A promise containing the base commit, or undefined if the
127
+ * base commit could not be found.
128
+ */
129
+ async function findBaseCommit(headRef = 'HEAD', cwd) {
130
+ try {
131
+ const nearestBase = await findNearestBranch(mainBranches, headRef, cwd);
132
+ if (!nearestBase)
133
+ return;
134
+ let baseCommit = await (0, executeCommand_1.execute)('git', ['merge-base', nearestBase, headRef], { cwd });
135
+ baseCommit = baseCommit.trim();
136
+ return baseCommit !== '' ? baseCommit : undefined;
137
+ }
138
+ catch (e) {
139
+ if ((0, utils_1.verbose)()) {
140
+ (0, node_console_1.warn)(`Failed to find base commit for ${headRef}`);
141
+ (0, node_console_1.warn)(String(e));
142
+ }
143
+ }
144
+ }
145
+ exports.findBaseCommit = findBaseCommit;
146
+ /**
147
+ * This method produces the diff between your working directory and HEAD, returning the changes that
148
+ * have not yet been committed.
149
+ *
150
+ * @param {string} [baseRef='HEAD'] - The base commit to compare against.
151
+ * @param {string} [cwd] - The working directory to run the command in.
152
+ * @returns {Promise<string>} A promise containing the diff.
153
+ */
154
+ function getWorkingDiff(cwd) {
155
+ return (0, executeCommand_1.execute)('git', ['diff', 'HEAD'], { cwd });
156
+ }
157
+ exports.getWorkingDiff = getWorkingDiff;
158
+ /**
159
+ * Get the diff between the base commit and the head commit. The diff produced by this function
160
+ * is in the form of a git log, so commit messages are included.
161
+ *
162
+ * @param {string} [headCommit='HEAD'] - The head commit to compare against.
163
+ * @param {string} baseCommit - The base commit to compare against. If not provided, the base commit
164
+ * will be found automatically via {@link findBaseCommit}.
165
+ * @param {string} [cwd] - The working directory to run the command in.
166
+ * @returns {Promise<string>} A promise containing the diff.
167
+ */
168
+ async function getDiffLog(headCommit = 'HEAD', baseCommit, cwd) {
169
+ const base = baseCommit !== null && baseCommit !== void 0 ? baseCommit : (await findBaseCommit(headCommit, cwd));
170
+ if (!base)
171
+ return '';
172
+ return (0, executeCommand_1.execute)('git', ['log', '-p', '--full-diff', `${base}..${headCommit}`], { cwd });
173
+ }
174
+ exports.getDiffLog = getDiffLog;
78
175
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAuC;AACvC,8DAAiC;AACjC,uCAAyC;AACzC,+BAAwC;AAExC,kDAAkD;AAClD,uDAAuD;AACvD,qBAAqB;AACrB,SAAS,YAAY,CAAC,GAAW;IAC/B,oBAAoB;IACpB,mFAAmF;IACnF,iEAAiE;IACjE,4DAA4D;IAC5D,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;QACzE,OAAO,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,oDAAoD;AACpD,sDAAsD;AACtD,MAAM,YAAY;IAGhB,YAAY,GAAW;QACrB,IAAI;YACF,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;SACzB;QAAC,OAAO,GAAG,EAAE;YACZ,IAAA,qBAAM,EAAC,YAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE;gBAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,OAAO;oBAAE,MAAM,GAAG,CAAC;gBACxB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;aACpB;;gBAAM,MAAM,GAAG,CAAC;SAClB;QACD,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;CACF;AAED,SAAS,MAAM,CAAC,MAAe;IAC7B,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,GAAW;IAClD,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAS,EAAC,wBAAS,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAY,MAAM,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO;QAElD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAExD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACpC;IAAC,OAAO,GAAG,EAAE;QACZ,IAAA,qBAAM,EAAC,YAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO;QACjD,MAAM,GAAG,CAAC;KACX;AACH,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,GAAW;;IAC9C,OAAO,MAAA,CAAC,MAAM,yBAAyB,CAAC,GAAG,CAAC,CAAC,0CAAE,QAAQ,EAAE,CAAC;AAC5D,CAAC;AAFD,wCAEC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
@@ -5,27 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const navie_1 = require("@appland/navie");
7
7
  const configuration_1 = __importDefault(require("../configuration"));
8
- const node_child_process_1 = require("node:child_process");
9
- const exec = (command, args, options) => new Promise((resolve, reject) => {
10
- var _a, _b, _c, _d;
11
- const child = (0, node_child_process_1.execFile)(command, args, Object.assign({}, (options !== null && options !== void 0 ? options : {})));
12
- let stdout = '';
13
- (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.setEncoding('utf8');
14
- (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on('data', (data) => {
15
- stdout += data.toString();
16
- });
17
- let stderr = '';
18
- (_c = child.stderr) === null || _c === void 0 ? void 0 : _c.setEncoding('utf8');
19
- (_d = child.stderr) === null || _d === void 0 ? void 0 : _d.on('data', (data) => {
20
- stderr += data.toString();
21
- });
22
- child.on('close', (code) => {
23
- if (code === 0)
24
- resolve(stdout);
25
- else
26
- reject(new Error(stderr));
27
- });
28
- });
8
+ const git_1 = require("../../lib/git");
29
9
  /**
30
10
  * This function is responsible for transforming user context to include diff content when the
31
11
  * user has requested a review. In the event that the user has not requested a review, the function
@@ -36,7 +16,7 @@ async function handleReview(question, userContext) {
36
16
  if (mode !== '@review')
37
17
  return { applied: false };
38
18
  const result = (0, navie_1.parseOptions)(question);
39
- const base = result.options.stringValue('base', 'main');
19
+ const base = result.options.stringValue('base');
40
20
  const cwd = result.options.stringValue('project', (0, configuration_1.default)().projectDirectories[0]);
41
21
  return {
42
22
  applied: true,
@@ -47,7 +27,7 @@ async function handleReview(question, userContext) {
47
27
  {
48
28
  type: 'code-snippet',
49
29
  location: navie_1.REVIEW_DIFF_LOCATION,
50
- content: await exec('git', ['log', '-p', '--full-diff', `${base}..HEAD`], { cwd }),
30
+ content: await (0, git_1.getDiffLog)(undefined, base, cwd),
51
31
  },
52
32
  ],
53
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/rpc/explain/review.ts"],"names":[],"mappings":";;;;;AAAA,0CAAiF;AACjF,qEAA6C;AAC7C,2DAA8C;AAE9C,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,IAAc,EAAE,OAA0B,EAAE,EAAE,CAC3E,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;IACtC,MAAM,KAAK,GAAG,IAAA,6BAAQ,EAAC,OAAO,EAAE,IAAI,oBAAO,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,EAAG,CAAC;IAE9D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAA,KAAK,CAAC,MAAM,0CAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAA,KAAK,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACxC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAA,KAAK,CAAC,MAAM,0CAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAA,KAAK,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACxC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;YAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL;;;;GAIG;AACY,KAAK,UAAU,YAAY,CACxC,QAAgB,EAChB,WAAiC;IAEjC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAElD,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,IAAA,uBAAa,GAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,WAAW,EAAE;YACX,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ;gBACjC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAmC,CAAC;gBACrF,CAAC,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,CAAC;YACtB;gBACE,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,4BAAoB;gBAC9B,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;aACnF;SACF;KACF,CAAC;AACJ,CAAC;AAvBD,+BAuBC"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/rpc/explain/review.ts"],"names":[],"mappings":";;;;;AAAA,0CAAiF;AACjF,qEAA6C;AAC7C,uCAA2C;AAE3C;;;;GAIG;AACY,KAAK,UAAU,YAAY,CACxC,QAAgB,EAChB,WAAiC;IAEjC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAElD,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,IAAA,uBAAa,GAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,WAAW,EAAE;YACX,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ;gBACjC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAmC,CAAC;gBACrF,CAAC,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,CAAC;YACtB;gBACE,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,4BAAoB;gBAC9B,OAAO,EAAE,MAAM,IAAA,gBAAU,EAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC;aAChD;SACF;KACF,CAAC;AACJ,CAAC;AAvBD,+BAuBC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function isCustomWelcomeMessageEnabled(_navie) {
4
+ const disabledByEnvironmentVariable = () => process.env.NAVIE_CUSTOM_WELCOME_MESSAGE === 'false';
5
+ const enabledByEnvironmentVariable = () => process.env.NAVIE_CUSTOM_WELCOME_MESSAGE === 'true';
6
+ // TODO: This can be used to enable an incremental rollout of the feature.
7
+ // For now, we will go with the environment variables only.
8
+ // const disabledByUseOfLocalNavie = () => navie instanceof LocalNavie;
9
+ if (disabledByEnvironmentVariable())
10
+ return false;
11
+ if (enabledByEnvironmentVariable())
12
+ return true;
13
+ // return !disabledByUseOfLocalNavie();
14
+ return false;
15
+ }
16
+ exports.default = isCustomWelcomeMessageEnabled;
17
+ //# sourceMappingURL=isCustomWelcomeMessageEnabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isCustomWelcomeMessageEnabled.js","sourceRoot":"","sources":["../../../src/rpc/navie/isCustomWelcomeMessageEnabled.ts"],"names":[],"mappings":";;AAEA,SAAwB,6BAA6B,CAAC,MAAc;IAClE,MAAM,6BAA6B,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,OAAO,CAAC;IACjG,MAAM,4BAA4B,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,MAAM,CAAC;IAC/F,0EAA0E;IAC1E,2DAA2D;IAC3D,uEAAuE;IACvE,IAAI,6BAA6B,EAAE;QAAE,OAAO,KAAK,CAAC;IAElD,IAAI,4BAA4B,EAAE;QAAE,OAAO,IAAI,CAAC;IAEhD,uCAAuC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAZD,gDAYC"}
@@ -1,12 +1,86 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.navieMetadataV1 = void 0;
4
7
  const rpc_1 = require("@appland/rpc");
5
- function navieMetadataV1() {
8
+ const configuration_1 = __importDefault(require("../configuration"));
9
+ const git_1 = require("../../lib/git");
10
+ const isCustomWelcomeMessageEnabled_1 = __importDefault(require("./isCustomWelcomeMessageEnabled"));
11
+ // We don't want to support context lookups
12
+ const NOP = () => Promise.resolve([]);
13
+ function parseWelcomeSuggestion(response) {
14
+ try {
15
+ // The only time the JSON is parsable is if Navie has sent the welcome suggestion.
16
+ // We don't need to validate the object.
17
+ return JSON.parse(response);
18
+ }
19
+ catch (_a) {
20
+ return undefined;
21
+ }
22
+ }
23
+ async function getWelcomeSuggestion(navie, diffs) {
24
+ const userContext = diffs.map((diff) => ({
25
+ type: 'code-selection',
26
+ content: diff,
27
+ }));
28
+ return new Promise((resolve, reject) => {
29
+ let buffer = '';
30
+ navie
31
+ .on('token', (token) => (buffer += token))
32
+ .on('complete', () => resolve(parseWelcomeSuggestion(buffer)))
33
+ .on('error', reject)
34
+ .ask(undefined, '@welcome', userContext, undefined)
35
+ .catch(reject);
36
+ });
37
+ }
38
+ async function getChangeDiffs(projectDirectories) {
39
+ const diffs = await Promise.allSettled([
40
+ projectDirectories.map((d) => (0, git_1.getDiffLog)('HEAD', undefined, d)),
41
+ projectDirectories.map((d) => (0, git_1.getWorkingDiff)(d)),
42
+ ].flat());
43
+ return diffs
44
+ .filter((result) => result.status === 'fulfilled')
45
+ .map((result) => result.value);
46
+ }
47
+ async function getWelcomeMessage(navieProvider) {
48
+ const navie = navieProvider(NOP, NOP, NOP);
49
+ // Case 1: Custom welcome message may not be enabled at all
50
+ if (!(0, isCustomWelcomeMessageEnabled_1.default)(navie))
51
+ return "### Hi, I'm Navie!\n\nI can help you answer questions about your codebase, create diagrams, plan solutions, generate code and tests, and review code changes. Type `@` to see a list of commands.";
52
+ const result = ["### Hi, I'm Navie!", ''];
53
+ const { projectDirectories } = (0, configuration_1.default)();
54
+ // Case 2: Remote Navie, no open project directories
55
+ if (projectDirectories.length === 0) {
56
+ result.push("It looks like there's no project open in your code editor. To get started, try opening a project so I can help you more effectively.", '', 'I can help you answer questions about your codebase, create diagrams, plan solutions, generate code and tests, and review code changes. Type `@` to see a list of commands.');
57
+ return result.join('\n');
58
+ }
59
+ // Case 2: Remote Navie, check for uncommitted changes or diffs on the current branch
60
+ const diffs = await getChangeDiffs(projectDirectories);
61
+ const hasChanges = diffs.some((diff) => diff.length > 0);
62
+ // Case 2a: Remote Navie, no uncommitted changes or diff on this branch
63
+ if (!hasChanges) {
64
+ result.push("It looks like you haven't started working on a task yet, as there are no changes to your workspace or branch. To begin, you can check out a different branch or start editing files. I'll keep track of your progress, so you can return anytime for help with your task.", '', 'In the meantime, I can help you answer questions about your codebase, create diagrams, plan solutions and generate code. Type `@` to see a list of commands.');
65
+ return result.join('\n');
66
+ }
67
+ // Case 2b: Remote Navie, changes in progress
68
+ const welcomeSuggestion = await getWelcomeSuggestion(navie, diffs);
69
+ if (!welcomeSuggestion) {
70
+ // This shouldn't really ever happen, but it's possible if the LLM fails to generate a
71
+ // structured response.
72
+ result.push('I can help you answer questions about your codebase, create diagrams, plan solutions, generate code and tests, and review code changes.', '', 'Type `@` to see a list of commands.');
73
+ }
74
+ else {
75
+ result.push(`It looks like you're ${welcomeSuggestion.activity}.`, '', 'Here are some questions you might want to try:', ...welcomeSuggestion.suggestions.map((suggestion) => `- ${suggestion}`));
76
+ }
77
+ return result.join('\n');
78
+ }
79
+ function navieMetadataV1(navieProvider) {
6
80
  return {
7
81
  name: rpc_1.NavieRpc.V1.Metadata.Method,
8
- handler: () => ({
9
- welcomeMessage: "### Hi, I'm Navie!\n\nI can help you answer questions about your codebase, plan solutions, create diagrams, and generate code. Enter `@` to see a list of commands.",
82
+ handler: async () => ({
83
+ welcomeMessage: await getWelcomeMessage(navieProvider),
10
84
  inputPlaceholder: "Ask a question or enter '@' for commands",
11
85
  commands: [
12
86
  {
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/rpc/navie/metadata.ts"],"names":[],"mappings":";;;AAAA,sCAAwC;AAGxC,SAAgB,eAAe;IAI7B,OAAO;QACL,IAAI,EAAE,cAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM;QACjC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACd,cAAc,EACZ,qKAAqK;YACvK,gBAAgB,EAAE,0CAA0C;YAC5D,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,UAAU;oBAChB,WAAW,EACT,0IAA0I;oBAC5I,YAAY,EAAE,qDAAqD;iBACpE;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,WAAW,EAAE,4DAA4D;oBACzE,YAAY,EAAE,qDAAqD;oBACnE,QAAQ,EAAE,EAAE;iBACb;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,mEAAmE;oBAChF,YAAY,EAAE,kDAAkD;oBAChE,QAAQ,EAAE,CAAC,6BAA6B,CAAC;iBAC1C;gBACD;oBACE,IAAI,EAAE,WAAW;oBACjB,WAAW,EAAE,sCAAsC;oBACnD,YAAY,EAAE,sDAAsD;oBACpE,QAAQ,EAAE,CAAC,6BAA6B,CAAC;iBAC1C;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,4BAA4B;oBACzC,YAAY,EAAE,iEAAiE;iBAChF;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kCAAkC;oBAC/C,YAAY,EAAE,mEAAmE;iBAClF;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,mHAAmH;oBACrH,YAAY,EAAE,mEAAmE;iBAClF;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,oCAAoC;oBACjD,YAAY,EAAE,kDAAkD;iBACjE;aACF;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AA3DD,0CA2DC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/rpc/navie/metadata.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appland/appmap",
3
- "version": "3.176.0",
3
+ "version": "3.177.1",
4
4
  "description": "",
5
5
  "bin": "built/cli.js",
6
6
  "engines": {