asdm-cli 0.1.0 → 0.1.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/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  > **Write Once, Emit Many.**
4
4
  > One source of truth for all your AI coding assistant configurations.
5
5
 
6
- [![npm version](https://img.shields.io/npm/v/@asdm/cli.svg)](https://www.npmjs.com/package/@asdm/cli)
6
+ [![npm version](https://img.shields.io/npm/v/asdm-cli.svg)](https://www.npmjs.com/package/asdm-cli)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
8
  [![Node.js ≥ 18](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org)
9
9
 
@@ -13,7 +13,7 @@
13
13
 
14
14
  ```bash
15
15
  # 1. Install globally (or use npx for zero-install)
16
- npm install -g @asdm/cli
16
+ npm install -g asdm-cli
17
17
 
18
18
  # 2. Initialize your project
19
19
  asdm init --registry github://your-org/asdm-registry --profile fullstack-engineer
@@ -65,14 +65,14 @@ ASDM is designed for teams. The registry includes a **corporate policy** that tr
65
65
  ### Global install (recommended)
66
66
 
67
67
  ```bash
68
- npm install -g @asdm/cli
68
+ npm install -g asdm-cli
69
69
  asdm --help
70
70
  ```
71
71
 
72
72
  ### Zero-install via npx
73
73
 
74
74
  ```bash
75
- npx @asdm/cli sync
75
+ npx asdm-cli sync
76
76
  ```
77
77
 
78
78
  ### Requirements
@@ -355,7 +355,7 @@ Created automatically by `asdm use <profile>`. Never edit this manually.
355
355
 
356
356
  ### `.asdm-lock.json` — Lockfile (committed to git)
357
357
 
358
- Generated by `asdm sync`. Records the exact SHA-256 of every emitted file, the manifest version, and the registry commit. Enables:
358
+ Generated by `asdm sync`. Records the exact SHA-256 of every emitted file and the manifest version. Enables:
359
359
 
360
360
  - **Offline integrity checks** — `asdm verify` works without network access
361
361
  - **Incremental sync** — only re-download changed assets
package/dist/index.mjs CHANGED
@@ -755,7 +755,7 @@ var TelemetryWriter = class {
755
755
  const fullEvent = {
756
756
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
757
757
  machineId: machineId(),
758
- version: "0.1.0",
758
+ version: "0.1.1",
759
759
  ...event
760
760
  };
761
761
  const line = JSON.stringify(fullEvent) + "\n";
@@ -939,7 +939,7 @@ var init_default = defineCommand({
939
939
  const alreadyExists = await exists(configPath);
940
940
  if (alreadyExists && !ctx.args.force) {
941
941
  logger.warn(".asdm.json already exists. Use --force to overwrite.");
942
- process.exit(0);
942
+ return;
943
943
  }
944
944
  const profile = ctx.args.profile || "base";
945
945
  const registry = ctx.args.registry || DEFAULT_REGISTRY;
@@ -965,7 +965,8 @@ var init_default = defineCommand({
965
965
  } catch (err) {
966
966
  const message = err instanceof Error ? err.message : String(err);
967
967
  logger.error(message);
968
- process.exit(1);
968
+ process.exitCode = 1;
969
+ return;
969
970
  }
970
971
  }
971
972
  });
@@ -979,6 +980,7 @@ import path11 from "path";
979
980
  // src/core/registry-client.ts
980
981
  var GITHUB_API_BASE = "https://api.github.com";
981
982
  var GITHUB_RAW_BASE = "https://github.com";
983
+ var FETCH_TIMEOUT_MS = 1e4;
982
984
  function getGithubToken() {
983
985
  return process.env["ASDM_GITHUB_TOKEN"] ?? process.env["GITHUB_TOKEN"];
984
986
  }
@@ -1000,8 +1002,10 @@ async function fetchWithRetry(url, options, maxRetries = 3) {
1000
1002
  if (attempt > 0) {
1001
1003
  await new Promise((resolve) => setTimeout(resolve, 1e3 * Math.pow(2, attempt - 1)));
1002
1004
  }
1005
+ const controller = new AbortController();
1006
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
1003
1007
  try {
1004
- const response = await fetch(url, options);
1008
+ const response = await fetch(url, { ...options, signal: controller.signal });
1005
1009
  if (response.status === 403 || response.status === 429) {
1006
1010
  const retryAfter = response.headers.get("Retry-After");
1007
1011
  const waitMs = retryAfter ? parseInt(retryAfter, 10) * 1e3 : 6e4;
@@ -1017,6 +1021,8 @@ async function fetchWithRetry(url, options, maxRetries = 3) {
1017
1021
  `Network request failed after ${maxRetries} attempts: ${lastError.message}`,
1018
1022
  "Check your internet connection and GitHub token"
1019
1023
  );
1024
+ } finally {
1025
+ clearTimeout(timer);
1020
1026
  }
1021
1027
  }
1022
1028
  throw new NetworkError(
@@ -1114,7 +1120,14 @@ var RegistryClient = class {
1114
1120
  async ping() {
1115
1121
  try {
1116
1122
  const url = `${GITHUB_API_BASE}/repos/${this.org}/${this.repo}`;
1117
- const response = await fetch(url, { headers: this.headers });
1123
+ const controller = new AbortController();
1124
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
1125
+ let response;
1126
+ try {
1127
+ response = await fetch(url, { headers: this.headers, signal: controller.signal });
1128
+ } finally {
1129
+ clearTimeout(timer);
1130
+ }
1118
1131
  return response.status === 200;
1119
1132
  } catch {
1120
1133
  return false;
@@ -1365,7 +1378,7 @@ async function loadAdapters(providers) {
1365
1378
  return adapters;
1366
1379
  }
1367
1380
  async function getCliVersion() {
1368
- return "0.1.0";
1381
+ return "0.1.1";
1369
1382
  }
1370
1383
  async function sync(options) {
1371
1384
  const startTime = Date.now();
@@ -1603,7 +1616,8 @@ var sync_default = defineCommand2({
1603
1616
  const message = err instanceof Error ? err.message : String(err);
1604
1617
  const suggestion = err.suggestion ?? void 0;
1605
1618
  logger.error(message, suggestion);
1606
- process.exit(1);
1619
+ process.exitCode = 1;
1620
+ return;
1607
1621
  }
1608
1622
  }
1609
1623
  });
@@ -1723,18 +1737,21 @@ var verify_default = defineCommand3({
1723
1737
  logger.error(`${icon} ${v.filePath} (${v.type})`);
1724
1738
  }
1725
1739
  }
1726
- process.exit(result.exitCode);
1740
+ process.exitCode = result.exitCode;
1741
+ return;
1727
1742
  }
1728
1743
  try {
1729
1744
  const result = await verify(cwd, void 0, true, telemetry);
1730
1745
  if (useJson) {
1731
1746
  console.log(JSON.stringify(result, null, 2));
1732
- process.exit(result.exitCode);
1747
+ process.exitCode = result.exitCode;
1748
+ return;
1733
1749
  }
1734
1750
  if (result.exitCode === VERIFY_EXIT_CODES.NO_LOCK) {
1735
1751
  logger.warn("No lockfile found (.asdm-lock.json)");
1736
1752
  logger.info("Run `asdm sync` to initialize");
1737
- process.exit(VERIFY_EXIT_CODES.NO_LOCK);
1753
+ process.exitCode = VERIFY_EXIT_CODES.NO_LOCK;
1754
+ return;
1738
1755
  }
1739
1756
  logger.asdm(`Verified ${result.checkedFiles} managed file(s)`);
1740
1757
  logger.divider();
@@ -1758,11 +1775,13 @@ var verify_default = defineCommand3({
1758
1775
  logger.warn(`Manifest is outdated (local: ${result.currentManifestVersion}, latest: ${result.latestManifestVersion})`);
1759
1776
  logger.info("Run `asdm sync` to update");
1760
1777
  }
1761
- process.exit(result.exitCode);
1778
+ process.exitCode = result.exitCode;
1779
+ return;
1762
1780
  } catch (err) {
1763
1781
  const message = err instanceof Error ? err.message : String(err);
1764
1782
  logger.error(message);
1765
- process.exit(1);
1783
+ process.exitCode = 1;
1784
+ return;
1766
1785
  }
1767
1786
  }
1768
1787
  });
@@ -1782,7 +1801,8 @@ var status_default = defineCommand4({
1782
1801
  } catch (err) {
1783
1802
  if (err instanceof ConfigError) {
1784
1803
  logger.warn("Not initialized. Run `asdm init` first.");
1785
- process.exit(1);
1804
+ process.exitCode = 1;
1805
+ return;
1786
1806
  }
1787
1807
  throw err;
1788
1808
  }
@@ -1842,14 +1862,16 @@ var use_default = defineCommand5({
1842
1862
  const profile = ctx.args.profile;
1843
1863
  if (!profile) {
1844
1864
  logger.error("Profile name is required", "Usage: asdm use <profile>");
1845
- process.exit(1);
1865
+ process.exitCode = 1;
1866
+ return;
1846
1867
  }
1847
1868
  try {
1848
1869
  await readProjectConfig(cwd);
1849
1870
  } catch (err) {
1850
1871
  if (err instanceof ConfigError) {
1851
1872
  logger.error("No .asdm.json found", "Run `asdm init` first");
1852
- process.exit(1);
1873
+ process.exitCode = 1;
1874
+ return;
1853
1875
  }
1854
1876
  throw err;
1855
1877
  }
@@ -1861,7 +1883,8 @@ var use_default = defineCommand5({
1861
1883
  `Profile "${profile}" not found in manifest`,
1862
1884
  `Available profiles: ${available}`
1863
1885
  );
1864
- process.exit(1);
1886
+ process.exitCode = 1;
1887
+ return;
1865
1888
  }
1866
1889
  } else {
1867
1890
  logger.warn("No cached manifest found \u2014 skipping profile validation");
@@ -1877,7 +1900,8 @@ var use_default = defineCommand5({
1877
1900
  const message = err instanceof Error ? err.message : String(err);
1878
1901
  const suggestion = err.suggestion ?? void 0;
1879
1902
  logger.error(message, suggestion);
1880
- process.exit(1);
1903
+ process.exitCode = 1;
1904
+ return;
1881
1905
  }
1882
1906
  }
1883
1907
  });
@@ -2228,7 +2252,7 @@ var version_default = defineCommand10({
2228
2252
  description: "Print CLI version and environment info"
2229
2253
  },
2230
2254
  run(_ctx) {
2231
- console.log(`asdm v${"0.1.0"}`);
2255
+ console.log(`asdm v${"0.1.1"}`);
2232
2256
  console.log(`node ${process.version}`);
2233
2257
  console.log(`os ${os3.type()} ${os3.release()} (${process.platform})`);
2234
2258
  }
@@ -2457,7 +2481,8 @@ var doctor_default = defineCommand11({
2457
2481
  logger.divider();
2458
2482
  if (anyFailed) {
2459
2483
  logger.error("Some checks failed \u2014 review the output above");
2460
- process.exit(1);
2484
+ process.exitCode = 1;
2485
+ return;
2461
2486
  } else {
2462
2487
  logger.success("All checks passed");
2463
2488
  }
@@ -2905,7 +2930,7 @@ init_fs();
2905
2930
  import path17 from "path";
2906
2931
  var CACHE_FILENAME = "version-check-cache.json";
2907
2932
  var CHECK_INTERVAL_MS = 24 * 60 * 60 * 1e3;
2908
- var FETCH_TIMEOUT_MS = 3e3;
2933
+ var FETCH_TIMEOUT_MS2 = 3e3;
2909
2934
  function isNewerVersion(current, latest) {
2910
2935
  const parse = (v) => {
2911
2936
  const parts = v.replace(/^v/, "").split(".");
@@ -2933,12 +2958,16 @@ async function checkForUpdate(currentVersion) {
2933
2958
  }
2934
2959
  try {
2935
2960
  const controller = new AbortController();
2936
- const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
2937
- const response = await fetch("https://registry.npmjs.org/@asdm/cli/latest", {
2938
- signal: controller.signal,
2939
- headers: { Accept: "application/json" }
2940
- });
2941
- clearTimeout(timer);
2961
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS2);
2962
+ let response;
2963
+ try {
2964
+ response = await fetch("https://registry.npmjs.org/asdm-cli/latest", {
2965
+ signal: controller.signal,
2966
+ headers: { Accept: "application/json" }
2967
+ });
2968
+ } finally {
2969
+ clearTimeout(timer);
2970
+ }
2942
2971
  if (!response.ok) return null;
2943
2972
  const data = await response.json();
2944
2973
  const latestVersion = data.version;
@@ -2958,7 +2987,7 @@ async function checkForUpdate(currentVersion) {
2958
2987
  var rootCommand = defineCommand16({
2959
2988
  meta: {
2960
2989
  name: "asdm",
2961
- version: "0.1.0",
2990
+ version: "0.1.1",
2962
2991
  description: "Agentic Software Delivery Model \u2014 Write Once, Emit Many"
2963
2992
  },
2964
2993
  subCommands: {
@@ -2984,7 +3013,7 @@ function printUpdateBox(currentVersion, latestVersion) {
2984
3013
  const BOLD2 = "\x1B[1m";
2985
3014
  const RESET2 = "\x1B[0m";
2986
3015
  const updateLine = ` Update available: ${currentVersion} \u2192 ${latestVersion}`;
2987
- const cmdLine = ` Run: npm install -g @asdm/cli`;
3016
+ const cmdLine = ` Run: npm install -g asdm-cli`;
2988
3017
  const MIN_WIDTH = 45;
2989
3018
  const innerWidth = Math.max(
2990
3019
  Math.max(updateLine.length, cmdLine.length) + 2,
@@ -3002,12 +3031,14 @@ ${bot}${RESET2}`);
3002
3031
  }
3003
3032
  async function main() {
3004
3033
  await runMain(rootCommand);
3034
+ if (process.exitCode !== void 0 && process.exitCode !== 0) return;
3005
3035
  try {
3006
- const latestVersion = await checkForUpdate("0.1.0");
3036
+ const latestVersion = await checkForUpdate("0.1.1");
3007
3037
  if (latestVersion) {
3008
- printUpdateBox("0.1.0", latestVersion);
3038
+ printUpdateBox("0.1.1", latestVersion);
3009
3039
  }
3010
3040
  } catch {
3011
3041
  }
3012
3042
  }
3013
- main();
3043
+ main().catch(() => {
3044
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asdm-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Agentic Software Delivery Model — CLI for unified AI coding assistant governance",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://asdm.dev/schemas/manifest.schema.json",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "policy": {
5
5
  "locked_fields": [
6
6
  "telemetry",
@@ -22,7 +22,7 @@
22
22
  "claude-code",
23
23
  "copilot"
24
24
  ],
25
- "min_cli_version": "0.1.0"
25
+ "min_cli_version": "0.1.1"
26
26
  },
27
27
  "profiles": {
28
28
  "base": {
@@ -0,0 +1,253 @@
1
+ {
2
+ "$schema": "https://asdm.dev/schemas/manifest.schema.json",
3
+ "version": "0.1.1",
4
+ "policy": {
5
+ "locked_fields": [
6
+ "telemetry",
7
+ "install_hooks",
8
+ "auto_verify"
9
+ ],
10
+ "telemetry": true,
11
+ "auto_verify": true,
12
+ "install_hooks": true,
13
+ "allowed_profiles": [
14
+ "base",
15
+ "fullstack-engineer",
16
+ "data-analytics",
17
+ "mobile",
18
+ "security"
19
+ ],
20
+ "allowed_providers": [
21
+ "opencode",
22
+ "claude-code",
23
+ "copilot"
24
+ ],
25
+ "min_cli_version": "0.1.1"
26
+ },
27
+ "profiles": {
28
+ "base": {
29
+ "agents": [
30
+ "code-reviewer",
31
+ "documentation-writer"
32
+ ],
33
+ "skills": [
34
+ "plan-protocol",
35
+ "code-review"
36
+ ],
37
+ "commands": [
38
+ "check-file",
39
+ "summarize"
40
+ ],
41
+ "providers": [
42
+ "opencode",
43
+ "claude-code",
44
+ "copilot"
45
+ ]
46
+ },
47
+ "data-analytics": {
48
+ "extends": [
49
+ "base"
50
+ ],
51
+ "agents": [
52
+ "code-reviewer",
53
+ "data-analyst",
54
+ "documentation-writer"
55
+ ],
56
+ "skills": [
57
+ "plan-protocol",
58
+ "code-review",
59
+ "data-pipeline"
60
+ ],
61
+ "commands": [
62
+ "check-file",
63
+ "summarize",
64
+ "analyze-schema"
65
+ ],
66
+ "providers": [
67
+ "opencode",
68
+ "claude-code",
69
+ "copilot"
70
+ ]
71
+ },
72
+ "fullstack-engineer": {
73
+ "extends": [
74
+ "base"
75
+ ],
76
+ "agents": [
77
+ "code-reviewer",
78
+ "documentation-writer",
79
+ "architect",
80
+ "test-engineer"
81
+ ],
82
+ "skills": [
83
+ "plan-protocol",
84
+ "code-review",
85
+ "frontend-design",
86
+ "api-design"
87
+ ],
88
+ "commands": [
89
+ "check-file",
90
+ "summarize",
91
+ "generate-types",
92
+ "scaffold-component"
93
+ ],
94
+ "providers": [
95
+ "opencode",
96
+ "claude-code",
97
+ "copilot"
98
+ ]
99
+ },
100
+ "mobile": {
101
+ "extends": [
102
+ "base"
103
+ ],
104
+ "agents": [
105
+ "code-reviewer",
106
+ "documentation-writer",
107
+ "mobile-engineer"
108
+ ],
109
+ "skills": [
110
+ "plan-protocol",
111
+ "code-review",
112
+ "mobile-patterns"
113
+ ],
114
+ "commands": [
115
+ "check-file",
116
+ "summarize",
117
+ "scaffold-component"
118
+ ],
119
+ "providers": [
120
+ "opencode",
121
+ "claude-code",
122
+ "copilot"
123
+ ]
124
+ },
125
+ "security": {
126
+ "extends": [
127
+ "base"
128
+ ],
129
+ "agents": [
130
+ "code-reviewer",
131
+ "security-auditor",
132
+ "documentation-writer"
133
+ ],
134
+ "skills": [
135
+ "plan-protocol",
136
+ "code-review",
137
+ "threat-modeling"
138
+ ],
139
+ "commands": [
140
+ "check-file",
141
+ "summarize",
142
+ "audit-deps"
143
+ ],
144
+ "providers": [
145
+ "opencode",
146
+ "claude-code",
147
+ "copilot"
148
+ ]
149
+ }
150
+ },
151
+ "assets": {
152
+ "agents/architect.asdm.md": {
153
+ "sha256": "cac0b010fd350f9d23bfbb090327dc2e8e971be9daafa764269619224c5ca742",
154
+ "size": 3011,
155
+ "version": "1.0.0"
156
+ },
157
+ "agents/code-reviewer.asdm.md": {
158
+ "sha256": "682c73710a84ad8c40e3d8548f82811390ce3db32c6f136116afcde7f87fc75d",
159
+ "size": 2911,
160
+ "version": "1.0.0"
161
+ },
162
+ "agents/data-analyst.asdm.md": {
163
+ "sha256": "bb0ce105b9dd19eaef3be5d6b76f5ad273b4b95057d3bb2c998acbaf3dfc7589",
164
+ "size": 2865,
165
+ "version": "1.0.0"
166
+ },
167
+ "agents/documentation-writer.asdm.md": {
168
+ "sha256": "05f22780898bdc7dc9e842caab967241b99e02ca7d43d30b09ca8d19fc85d63a",
169
+ "size": 2788,
170
+ "version": "1.0.0"
171
+ },
172
+ "agents/mobile-engineer.asdm.md": {
173
+ "sha256": "ab51f952dcc8ce72cf3f48359e11c30fc7a3f5b32b534e56b04ee47cd382c3bd",
174
+ "size": 2903,
175
+ "version": "1.0.0"
176
+ },
177
+ "agents/security-auditor.asdm.md": {
178
+ "sha256": "8285378a7b30009a02f537d9fc882344c50444c1c1fe1b0ff35b8e49e475b2eb",
179
+ "size": 3167,
180
+ "version": "1.0.0"
181
+ },
182
+ "agents/test-engineer.asdm.md": {
183
+ "sha256": "e23266b82c0e3ccb96d613167c3c27d88651ff159fcb8e9b8eaf34b125681278",
184
+ "size": 2811,
185
+ "version": "1.0.0"
186
+ },
187
+ "skills/api-design/SKILL.asdm.md": {
188
+ "sha256": "637fc8014c22ddd8fa9122a44eb68cef70ffecfed724e8535b8d7d54091c579c",
189
+ "size": 3506,
190
+ "version": "1.0.0"
191
+ },
192
+ "skills/code-review/SKILL.asdm.md": {
193
+ "sha256": "de2011667b7f9e5c07cef878d43e85bb2d9fa2109c4ba64e161b6038012fab20",
194
+ "size": 3112,
195
+ "version": "1.0.0"
196
+ },
197
+ "skills/data-pipeline/SKILL.asdm.md": {
198
+ "sha256": "35e45153c4eafc4f1654b46865a226509634b3659365b03e19de482d10233699",
199
+ "size": 3686,
200
+ "version": "1.0.0"
201
+ },
202
+ "skills/frontend-design/SKILL.asdm.md": {
203
+ "sha256": "9cdddedd6f2b6caa8bafb8f8fa9864b6473c89170c4feedd05aaa9f1a30a8d3f",
204
+ "size": 3267,
205
+ "version": "1.0.0"
206
+ },
207
+ "skills/mobile-patterns/SKILL.asdm.md": {
208
+ "sha256": "9f336da4b1979cbdadad95012a4347f0e9830597f60e98e9084d6a0d07459acd",
209
+ "size": 3561,
210
+ "version": "1.0.0"
211
+ },
212
+ "skills/plan-protocol/SKILL.asdm.md": {
213
+ "sha256": "c0226a04e91caedc6dd9b51946508b9c05c29b51aa3402217c176161c0e7a16c",
214
+ "size": 2781,
215
+ "version": "1.0.0"
216
+ },
217
+ "skills/threat-modeling/SKILL.asdm.md": {
218
+ "sha256": "255ec1cc1773315b994bff8f09e647750210bc34f233c5ff83053fb6568f67e5",
219
+ "size": 4256,
220
+ "version": "1.0.0"
221
+ },
222
+ "commands/analyze-schema.asdm.md": {
223
+ "sha256": "2c855b9b02257cecc71c5a03faa05da52e215df148aa141c9258db8e0d2b6174",
224
+ "size": 2538,
225
+ "version": "1.0.0"
226
+ },
227
+ "commands/audit-deps.asdm.md": {
228
+ "sha256": "b5d54e07d9596b996090aae8e83476fb2d53b62301dd3feef82facd3d08f7150",
229
+ "size": 2781,
230
+ "version": "1.0.0"
231
+ },
232
+ "commands/check-file.asdm.md": {
233
+ "sha256": "3090793fb1eb3484626f7a4c9569df87ff486586e2e3f4046c15749003a4af73",
234
+ "size": 1700,
235
+ "version": "1.0.0"
236
+ },
237
+ "commands/generate-types.asdm.md": {
238
+ "sha256": "d1b1401c495410ee68aedc055700cfb11794228d8f363bdf6463b75e58bdff20",
239
+ "size": 2259,
240
+ "version": "1.0.0"
241
+ },
242
+ "commands/scaffold-component.asdm.md": {
243
+ "sha256": "312cf07c16a44fe334037281213aed99d8410070acbfe35e6ae0968ec8a5263f",
244
+ "size": 2327,
245
+ "version": "1.0.0"
246
+ },
247
+ "commands/summarize.asdm.md": {
248
+ "sha256": "0f52ab9a25f6f802aa2a9025d8a4e9a5825aa04ba94173884bb189566ad07ad0",
249
+ "size": 1919,
250
+ "version": "1.0.0"
251
+ }
252
+ }
253
+ }