@aligndottech/cli 0.57.0 → 0.58.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 +31 -18
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +14 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +24 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/import/git.d.ts.map +1 -1
- package/dist/commands/import/git.js +8 -4
- package/dist/commands/import/git.js.map +1 -1
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +26 -12
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/use.d.ts +2 -0
- package/dist/commands/use.d.ts.map +1 -1
- package/dist/commands/use.js +19 -1
- package/dist/commands/use.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +91 -53
- package/dist/commands/why.js.map +1 -1
- package/dist/lib/agent-rules.d.ts +11 -4
- package/dist/lib/agent-rules.d.ts.map +1 -1
- package/dist/lib/agent-rules.js +163 -190
- package/dist/lib/agent-rules.js.map +1 -1
- package/dist/lib/ask-listing.d.ts +30 -0
- package/dist/lib/ask-listing.d.ts.map +1 -0
- package/dist/lib/ask-listing.js +60 -0
- package/dist/lib/ask-listing.js.map +1 -0
- package/dist/lib/capture-report.d.ts.map +1 -1
- package/dist/lib/capture-report.js +11 -3
- package/dist/lib/capture-report.js.map +1 -1
- package/dist/lib/claude-presence.d.ts +12 -0
- package/dist/lib/claude-presence.d.ts.map +1 -0
- package/dist/lib/claude-presence.js +19 -0
- package/dist/lib/claude-presence.js.map +1 -0
- package/dist/lib/config.d.ts +2 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +4 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/doctor.d.ts +9 -1
- package/dist/lib/doctor.d.ts.map +1 -1
- package/dist/lib/doctor.js +19 -1
- package/dist/lib/doctor.js.map +1 -1
- package/dist/lib/embedding-assets.d.ts +40 -0
- package/dist/lib/embedding-assets.d.ts.map +1 -0
- package/dist/lib/embedding-assets.js +74 -0
- package/dist/lib/embedding-assets.js.map +1 -0
- package/dist/lib/embedding-runtime.d.ts +41 -0
- package/dist/lib/embedding-runtime.d.ts.map +1 -0
- package/dist/lib/embedding-runtime.js +224 -0
- package/dist/lib/embedding-runtime.js.map +1 -0
- package/dist/lib/fetchers/git.d.ts +3 -0
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +9 -5
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/found-summary.d.ts.map +1 -1
- package/dist/lib/found-summary.js +19 -3
- package/dist/lib/found-summary.js.map +1 -1
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +21 -1
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/git.d.ts +7 -0
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +7 -2
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/import-defaults.d.ts +11 -4
- package/dist/lib/import-defaults.d.ts.map +1 -1
- package/dist/lib/import-defaults.js +11 -4
- package/dist/lib/import-defaults.js.map +1 -1
- package/dist/lib/launch/mcp-child-env.d.ts.map +1 -1
- package/dist/lib/launch/mcp-child-env.js +6 -4
- package/dist/lib/launch/mcp-child-env.js.map +1 -1
- package/dist/lib/local-db.d.ts +13 -0
- package/dist/lib/local-db.d.ts.map +1 -1
- package/dist/lib/local-db.js +23 -0
- package/dist/lib/local-db.js.map +1 -1
- package/dist/lib/local-embeddings-native.d.ts +17 -0
- package/dist/lib/local-embeddings-native.d.ts.map +1 -0
- package/dist/lib/local-embeddings-native.js +78 -0
- package/dist/lib/local-embeddings-native.js.map +1 -0
- package/dist/lib/local-embeddings.d.ts.map +1 -1
- package/dist/lib/local-embeddings.js +46 -47
- package/dist/lib/local-embeddings.js.map +1 -1
- package/dist/lib/local-gateway-client.d.ts +2 -2
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +43 -31
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/local-thresholds.d.ts +8 -0
- package/dist/lib/local-thresholds.d.ts.map +1 -1
- package/dist/lib/local-thresholds.js +8 -0
- package/dist/lib/local-thresholds.js.map +1 -1
- package/dist/lib/model-cache.d.ts +13 -0
- package/dist/lib/model-cache.d.ts.map +1 -1
- package/dist/lib/model-cache.js +26 -0
- package/dist/lib/model-cache.js.map +1 -1
- package/dist/lib/next-step.d.ts +2 -0
- package/dist/lib/next-step.d.ts.map +1 -1
- package/dist/lib/next-step.js +37 -16
- package/dist/lib/next-step.js.map +1 -1
- package/dist/lib/node-floor.d.ts +6 -0
- package/dist/lib/node-floor.d.ts.map +1 -0
- package/dist/lib/node-floor.js +15 -0
- package/dist/lib/node-floor.js.map +1 -0
- package/dist/lib/safe-config-write.d.ts +24 -1
- package/dist/lib/safe-config-write.d.ts.map +1 -1
- package/dist/lib/safe-config-write.js +113 -26
- package/dist/lib/safe-config-write.js.map +1 -1
- package/dist/lib/scope-real.d.ts.map +1 -1
- package/dist/lib/search-query.d.ts +21 -0
- package/dist/lib/search-query.d.ts.map +1 -1
- package/dist/lib/search-query.js +1 -1
- package/dist/lib/search-query.js.map +1 -1
- package/dist/lib/search-rerank.d.ts +23 -0
- package/dist/lib/search-rerank.d.ts.map +1 -0
- package/dist/lib/search-rerank.js +63 -0
- package/dist/lib/search-rerank.js.map +1 -0
- package/dist/lib/suppress-sqlite-warning.d.ts +13 -0
- package/dist/lib/suppress-sqlite-warning.d.ts.map +1 -0
- package/dist/lib/suppress-sqlite-warning.js +21 -0
- package/dist/lib/suppress-sqlite-warning.js.map +1 -0
- package/dist/lib/sync/real-env.d.ts.map +1 -1
- package/dist/lib/sync/spawn-background.d.ts +1 -1
- package/dist/lib/sync/spawn-background.d.ts.map +1 -1
- package/dist/lib/sync/spawn-background.js +1 -1
- package/dist/lib/sync/spawn-background.js.map +1 -1
- package/dist/lib/tar-lite.d.ts +18 -0
- package/dist/lib/tar-lite.d.ts.map +1 -0
- package/dist/lib/tar-lite.js +120 -0
- package/dist/lib/tar-lite.js.map +1 -0
- package/dist/lib/user-hooks.d.ts.map +1 -1
- package/dist/lib/user-hooks.js +13 -3
- package/dist/lib/user-hooks.js.map +1 -1
- package/dist/lib/verified-download.d.ts +19 -0
- package/dist/lib/verified-download.d.ts.map +1 -0
- package/dist/lib/verified-download.js +105 -0
- package/dist/lib/verified-download.js.map +1 -0
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/user-hooks.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAiBnE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;
|
|
1
|
+
{"version":3,"file":"user-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/user-hooks.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAiBnE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAUxE;AAkHD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,SAAS;AACrB,4FAA4F;AAC5F,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAqDT;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAwB/D;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
package/dist/lib/user-hooks.js
CHANGED
|
@@ -6,10 +6,17 @@ import { safeWriteJson } from './safe-config-write.js';
|
|
|
6
6
|
// The hook budget on every host is <=10s (check.ts); the same number Claude Code's hook uses.
|
|
7
7
|
const HOOK_TIMEOUT_SECONDS = 10;
|
|
8
8
|
const OURS = 'align check --advisory';
|
|
9
|
+
const COPILOT_ABSENT_GUARD = 'command -v align >/dev/null 2>&1 || exit 0; ';
|
|
9
10
|
export function advisoryHookCommand(host, env) {
|
|
10
11
|
// prod is the default env, so leave it off - the same rule agent-rules.ts follows.
|
|
11
12
|
const envArg = env && env !== 'prod' ? ` --env ${env}` : '';
|
|
12
|
-
|
|
13
|
+
const command = `${OURS} --format ${host}${envArg}`;
|
|
14
|
+
// Copilot CLI denies a tool call when a preToolUse hook exits non-zero, and this file is the
|
|
15
|
+
// user's, so it fires in every project. A missing align (uninstalled, or not on the hook
|
|
16
|
+
// shell's PATH) is exit 127 and would block every edit. Guard the absent case only: a present
|
|
17
|
+
// align keeps its own exit status and output. The entry only has a `bash` field, so this guard covers hosts that run it; Windows is unchanged.
|
|
18
|
+
// The other hosts treat a non-zero exit as a non-blocking error, so they keep the bare form.
|
|
19
|
+
return host === 'copilot' ? `${COPILOT_ABSENT_GUARD}${command}` : command;
|
|
13
20
|
}
|
|
14
21
|
// Every field name here comes from the host's published hook schema:
|
|
15
22
|
// Codex ~/.codex/hooks.json {hooks:{PreToolUse:[{matcher, hooks:[{type,command,timeout}]}]}}
|
|
@@ -63,8 +70,11 @@ function isOurs(spec, entry) {
|
|
|
63
70
|
function isPristine(host, spec, entry) {
|
|
64
71
|
const command = spec.commandsOf(entry).find((c) => c.includes(OURS));
|
|
65
72
|
// The command itself must be one align writes: an appended flag or a wrapper is an edit too.
|
|
66
|
-
|
|
67
|
-
|
|
73
|
+
// Copilot's command carries the absent-align guard (ALI-1749); the bare form older versions
|
|
74
|
+
// wrote is pristine too, which is what lets a re-run migrate it.
|
|
75
|
+
const bare = host === 'copilot' && command?.startsWith(COPILOT_ABSENT_GUARD) ? command.slice(COPILOT_ABSENT_GUARD.length) : command;
|
|
76
|
+
return command !== undefined && bare !== undefined
|
|
77
|
+
&& new RegExp(`^${OURS} --format ${host}( --env \\S+)?$`).test(bare)
|
|
68
78
|
&& isDeepStrictEqual(entry, spec.entry(command));
|
|
69
79
|
}
|
|
70
80
|
// Throws on a file we cannot parse rather than rewriting it - the same rule every JSON
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-hooks.js","sourceRoot":"","sources":["../../src/lib/user-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAkB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAwBvD,8FAA8F;AAC9F,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,IAAI,GAAG,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"user-hooks.js","sourceRoot":"","sources":["../../src/lib/user-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type DownloadFailure = 'network' | 'http' | 'size' | 'checksum';
|
|
2
|
+
export declare class DownloadError extends Error {
|
|
3
|
+
readonly kind: DownloadFailure;
|
|
4
|
+
constructor(kind: DownloadFailure, message: string);
|
|
5
|
+
}
|
|
6
|
+
export interface FetchVerifiedOptions {
|
|
7
|
+
/** Lower-case hex SHA-256 of the bytes this call returns (after gunzip, when `gunzip`). */
|
|
8
|
+
sha256: string;
|
|
9
|
+
/** Hard cap on the returned (decompressed) size. Also bounds what a gzip bomb can expand to. */
|
|
10
|
+
maxBytes: number;
|
|
11
|
+
/** Treat the body as gzip and verify the DECOMPRESSED content. Digest of content, not of the
|
|
12
|
+
* compressor's output: zlib versions differ, so a digest of the .gz would not reproduce. */
|
|
13
|
+
gunzip?: boolean;
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
fetchImpl?: typeof fetch;
|
|
16
|
+
}
|
|
17
|
+
export declare const DEFAULT_TIMEOUT_MS = 120000;
|
|
18
|
+
export declare function fetchVerified(url: string, opts: FetchVerifiedOptions): Promise<Buffer>;
|
|
19
|
+
//# sourceMappingURL=verified-download.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-download.d.ts","sourceRoot":"","sources":["../../src/lib/verified-download.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE,qBAAa,aAAc,SAAQ,KAAK;IAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe;gBAArB,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM;CAI5D;AAED,MAAM,WAAW,oBAAoB;IACnC,2FAA2F;IAC3F,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB;iGAC6F;IAC7F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAwD1C,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5F"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Download a file and refuse it unless its SHA-256 matches a digest pinned in OUR source.
|
|
3
|
+
*
|
|
4
|
+
* Everything the on-device embedding path fetches goes through here (the native runtime
|
|
5
|
+
* bundle, the model weights, the tokenizer). The digest, not the host, is the trust anchor:
|
|
6
|
+
* GitHub, huggingface.co and any mirror a user points us at are all equally untrusted until
|
|
7
|
+
* the bytes hash to the value that shipped inside this package.
|
|
8
|
+
*
|
|
9
|
+
* Fails closed and loud. A mismatch, a short read, an over-size body, an HTTP error and a
|
|
10
|
+
* network failure each throw a `DownloadError` and return nothing, so a caller can never end
|
|
11
|
+
* up holding unverified bytes. Nothing here writes to disk: persisting is the caller's job and
|
|
12
|
+
* only ever happens after this returned.
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from 'node:crypto';
|
|
15
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
16
|
+
import { fileURLToPath } from 'node:url';
|
|
17
|
+
import { gunzipSync } from 'node:zlib';
|
|
18
|
+
export class DownloadError extends Error {
|
|
19
|
+
kind;
|
|
20
|
+
constructor(kind, message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.kind = kind;
|
|
23
|
+
this.name = 'DownloadError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export const DEFAULT_TIMEOUT_MS = 120_000;
|
|
27
|
+
function sha256Hex(data) {
|
|
28
|
+
return createHash('sha256').update(data).digest('hex');
|
|
29
|
+
}
|
|
30
|
+
async function readBody(url, maxBytes, timeoutMs, fetchImpl) {
|
|
31
|
+
if (url.startsWith('file:')) {
|
|
32
|
+
// Used by CI and mirrors that pre-stage the files. Same digest check applies afterwards.
|
|
33
|
+
const path = fileURLToPath(url);
|
|
34
|
+
// Regular file, size checked BEFORE reading: file:///dev/zero or a multi-GB file must not be slurped.
|
|
35
|
+
const st = statSync(path);
|
|
36
|
+
if (!st.isFile())
|
|
37
|
+
throw new DownloadError('network', `${url} is not a regular file`);
|
|
38
|
+
if (st.size > maxBytes)
|
|
39
|
+
throw new DownloadError('size', `${url} is ${st.size} bytes, over the ${maxBytes} byte limit`);
|
|
40
|
+
return readFileSync(path);
|
|
41
|
+
}
|
|
42
|
+
// An IDLE timeout, re-armed on every chunk: a slow link may take as long as it needs as long as
|
|
43
|
+
// bytes keep arriving, while a stalled or silent server is cut after `timeoutMs`.
|
|
44
|
+
const ctl = new AbortController();
|
|
45
|
+
let timer = setTimeout(() => ctl.abort(), timeoutMs);
|
|
46
|
+
const rearm = () => { clearTimeout(timer); timer = setTimeout(() => ctl.abort(), timeoutMs); };
|
|
47
|
+
try {
|
|
48
|
+
return await readHttp(url, maxBytes, fetchImpl, ctl.signal, rearm);
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function readHttp(url, maxBytes, fetchImpl, signal, rearm) {
|
|
55
|
+
let res;
|
|
56
|
+
try {
|
|
57
|
+
res = await fetchImpl(url, { signal, redirect: 'follow' });
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
throw new DownloadError('network', `could not reach ${new URL(url).host}: ${err.message}`);
|
|
61
|
+
}
|
|
62
|
+
rearm();
|
|
63
|
+
if (!res.ok)
|
|
64
|
+
throw new DownloadError('http', `${new URL(url).host} answered HTTP ${res.status} for ${url}`);
|
|
65
|
+
const declared = Number(res.headers.get('content-length') ?? '0');
|
|
66
|
+
if (declared > maxBytes)
|
|
67
|
+
throw new DownloadError('size', `${url} declares ${declared} bytes, over the ${maxBytes} byte limit`);
|
|
68
|
+
const chunks = [];
|
|
69
|
+
let total = 0;
|
|
70
|
+
try {
|
|
71
|
+
if (!res.body)
|
|
72
|
+
throw new Error('empty response body');
|
|
73
|
+
for await (const chunk of res.body) {
|
|
74
|
+
rearm();
|
|
75
|
+
total += chunk.length;
|
|
76
|
+
if (total > maxBytes)
|
|
77
|
+
throw new DownloadError('size', `${url} sent more than the ${maxBytes} byte limit`);
|
|
78
|
+
chunks.push(Buffer.from(chunk));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (err instanceof DownloadError)
|
|
83
|
+
throw err;
|
|
84
|
+
throw new DownloadError('network', `connection to ${new URL(url).host} broke mid-download: ${err.message}`);
|
|
85
|
+
}
|
|
86
|
+
return Buffer.concat(chunks);
|
|
87
|
+
}
|
|
88
|
+
export async function fetchVerified(url, opts) {
|
|
89
|
+
const raw = await readBody(url, opts.maxBytes, opts.timeoutMs ?? DEFAULT_TIMEOUT_MS, opts.fetchImpl ?? fetch);
|
|
90
|
+
let content = raw;
|
|
91
|
+
if (opts.gunzip) {
|
|
92
|
+
try {
|
|
93
|
+
content = gunzipSync(raw, { maxOutputLength: opts.maxBytes });
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
throw new DownloadError('size', `${url} is not a valid gzip file or expands past ${opts.maxBytes} bytes: ${err.message}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const actual = sha256Hex(content);
|
|
100
|
+
if (actual !== opts.sha256.toLowerCase()) {
|
|
101
|
+
throw new DownloadError('checksum', `${url} hashed to ${actual}, expected ${opts.sha256}. Refusing to use it.`);
|
|
102
|
+
}
|
|
103
|
+
return content;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=verified-download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-download.js","sourceRoot":"","sources":["../../src/lib/verified-download.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aligndottech/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.58.0",
|
|
4
4
|
"mcpName": "io.github.aligndottech/cli",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Align CLI - capture decisions, check alignment, and manage connectors",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"url": "https://github.com/aligndottech/align-cli/issues"
|
|
22
22
|
},
|
|
23
23
|
"bin": {
|
|
24
|
-
"align": "./dist/
|
|
24
|
+
"align": "./dist/bin.js"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "tsc -p tsconfig.json",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@aligndottech/connector-core": "^0.10.1",
|
|
39
39
|
"@clack/prompts": "^1.7.0",
|
|
40
|
+
"@huggingface/tokenizers": "0.2.0",
|
|
40
41
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
41
42
|
"chalk": "^5.3.0",
|
|
42
43
|
"ci-info": "^4.4.0",
|
|
@@ -53,6 +54,7 @@
|
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"@eslint/js": "^9.0.0",
|
|
57
|
+
"@huggingface/transformers": "^4.2.0",
|
|
56
58
|
"@types/eventsource": "^1.1.15",
|
|
57
59
|
"@types/js-yaml": "^4.0.9",
|
|
58
60
|
"@types/node": "^22.0.0",
|
|
@@ -67,9 +69,6 @@
|
|
|
67
69
|
"typescript": "^5.6.0",
|
|
68
70
|
"vitest": "^3.2.4"
|
|
69
71
|
},
|
|
70
|
-
"optionalDependencies": {
|
|
71
|
-
"@huggingface/transformers": "^4.2.0"
|
|
72
|
-
},
|
|
73
72
|
"overrides": {
|
|
74
73
|
"hono": "4.13.7",
|
|
75
74
|
"@hono/node-server": "1.19.17",
|
|
@@ -77,7 +76,8 @@
|
|
|
77
76
|
"fast-uri": "3.1.7",
|
|
78
77
|
"ip-address": "10.7.0",
|
|
79
78
|
"qs": "6.16.0",
|
|
80
|
-
"body-parser": "2.3.0"
|
|
79
|
+
"body-parser": "2.3.0",
|
|
80
|
+
"onnxruntime-node": "1.30.0"
|
|
81
81
|
},
|
|
82
82
|
"engines": {
|
|
83
83
|
"node": ">=22.16"
|