@a5c-ai/atlas-github 5.1.1-staging.0007199a1cb2

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/AGENTS.md ADDED
@@ -0,0 +1,15 @@
1
+ # Atlas Agents (GitHub Copilot)
2
+
3
+ Atlas turns a stated need into a full system design by mining the Atlas
4
+ knowledge graph.
5
+
6
+ - Use the `atlas` skill to drive the need → design pipeline.
7
+ - Use the `atlas-graph-query` skill as a reference for the Atlas MCP tool surface.
8
+ - Query the graph via the `mcp__atlas__atlas_public_*` MCP tools only; never
9
+ invent node ids.
10
+ - Delegate non-trivial runs to the `babysitter:babysit` skill using an atlas
11
+ `.a5c` process (`atlas-systems-discovery`, `atlas-process-mining`,
12
+ `atlas-data-mining`, `atlas-collect-nuances`).
13
+
14
+ The Atlas MCP server is wired natively and defaults to
15
+ `https://atlas-staging.a5c.ai/api/mcp`, overridable via `ATLAS_MCP_URL`.
package/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # Atlas Plugin for GitHub Copilot
2
+
3
+ Atlas turns a stated need into a full system design by mining the Atlas
4
+ knowledge graph. This is the GitHub Copilot harness surface for the `atlas` plugin.
5
+
6
+ ## What's Included
7
+
8
+ - **Skills**: `atlas` (the need → design brain) and `atlas-graph-query`
9
+ (a reference for the Atlas MCP tool surface).
10
+ - **Commands**: `/atlas:discover`, `/atlas:mine-processes`,
11
+ `/atlas:mine-data`, `/atlas:collect-nuances` — each delegates orchestration
12
+ to the `babysitter:babysit` skill using an atlas-specific `.a5c` process.
13
+ - **MCP**: the Atlas knowledge-graph server (`atlas`), wired natively into
14
+ GitHub Copilot's own MCP config format.
15
+
16
+ ## Atlas MCP
17
+
18
+ The Atlas MCP server is wired natively for GitHub Copilot — no manual setup. It
19
+ defaults to `https://atlas-staging.a5c.ai/api/mcp` and is overridable at
20
+ runtime via the `ATLAS_MCP_URL` environment variable. The
21
+ `mcp__atlas__atlas_public_*` tools are then available to the atlas skills.
22
+
23
+ ## Installation
24
+
25
+ Atlas commands delegate orchestration to Babysitter, so install the Babysitter
26
+ CLI once, then install this plugin for GitHub Copilot:
27
+
28
+ ```bash
29
+ npm install -g @a5c-ai/babysitter
30
+ babysitter harness:install-plugin github-copilot
31
+ ```
32
+
33
+ ## License
34
+
35
+ See the repository license.
package/bin/cli.js ADDED
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const path = require('path');
5
+ const { spawnSync } = require('child_process');
6
+
7
+ const PACKAGE_ROOT = path.resolve(__dirname, '..');
8
+ let shared;
9
+ try { shared = require('./install-shared'); } catch {}
10
+
11
+ function printUsage() {
12
+ console.error([
13
+ 'Usage:',
14
+ ' atlas-github install [--global]',
15
+ ' atlas-github install --workspace [path]',
16
+ ' atlas-github uninstall',
17
+ ].join('\n'));
18
+ }
19
+
20
+ function parseInstallArgs(argv) {
21
+ let scope = 'global';
22
+ let workspace = null;
23
+ const passthrough = [];
24
+
25
+ for (let i = 0; i < argv.length; i += 1) {
26
+ const arg = argv[i];
27
+ if (arg === '--global') {
28
+ scope = 'global';
29
+ continue;
30
+ }
31
+ if (arg === '--workspace') {
32
+ scope = 'workspace';
33
+ const next = argv[i + 1];
34
+ if (next && !next.startsWith('-')) {
35
+ workspace = path.resolve(next);
36
+ i += 1;
37
+ } else {
38
+ workspace = process.cwd();
39
+ }
40
+ continue;
41
+ }
42
+ passthrough.push(arg);
43
+ }
44
+
45
+ return { scope, workspace, passthrough };
46
+ }
47
+
48
+ function runNodeScript(scriptPath, args, extraEnv = {}) {
49
+ const result = spawnSync(process.execPath, [scriptPath, ...args], {
50
+ cwd: process.cwd(),
51
+ stdio: 'inherit',
52
+ env: { ...process.env, ...extraEnv },
53
+ });
54
+ process.exitCode = result.status ?? 1;
55
+ }
56
+
57
+ function main() {
58
+ const [command, ...rest] = process.argv.slice(2);
59
+ if (!command || command === '--help' || command === '-h' || command === 'help') {
60
+ printUsage();
61
+ process.exitCode = command ? 0 : 1;
62
+ return;
63
+ }
64
+
65
+ if (command === 'install') {
66
+ if (shared && typeof shared.harnessCliRoute === 'function' && shared.harnessCliRoute(rest, PACKAGE_ROOT, runNodeScript)) {
67
+ return;
68
+ }
69
+ const parsed = parseInstallArgs(rest);
70
+ if (parsed.scope === 'workspace') {
71
+ const args = [];
72
+ if (parsed.workspace) {
73
+ args.push('--workspace', parsed.workspace);
74
+ }
75
+ args.push(...parsed.passthrough);
76
+ runNodeScript(
77
+ path.join(PACKAGE_ROOT, 'scripts', 'team-install.js'),
78
+ args,
79
+ { PLUGIN_PACKAGE_ROOT: PACKAGE_ROOT },
80
+ );
81
+ return;
82
+ }
83
+ runNodeScript(path.join(PACKAGE_ROOT, 'bin', 'install.js'), parsed.passthrough);
84
+ return;
85
+ }
86
+
87
+ if (command === 'uninstall') {
88
+ runNodeScript(path.join(PACKAGE_ROOT, 'bin', 'uninstall.js'), rest);
89
+ return;
90
+ }
91
+
92
+ printUsage();
93
+ process.exitCode = 1;
94
+ }
95
+
96
+ main();
@@ -0,0 +1,156 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+ const os = require('os');
5
+ const path = require('path');
6
+ const { spawnSync } = require('child_process');
7
+
8
+ const PLUGIN_NAME = "atlas";
9
+ const PLUGIN_CATEGORY = 'Coding';
10
+
11
+ function getUserHome() {
12
+ return os.homedir();
13
+ }
14
+
15
+ function getHarnessHome() {
16
+ return path.join(os.homedir(), ".copilot");
17
+ }
18
+
19
+ function getHomePluginRoot(scope) {
20
+ if (scope === 'workspace') return path.join(process.cwd(), '.a5c', 'plugins', PLUGIN_NAME);
21
+ return path.join(path.join(getHarnessHome(), 'plugins'), PLUGIN_NAME);
22
+ }
23
+
24
+ function getHomeMarketplacePath() {
25
+ return path.join(getHarnessHome(), 'plugins', 'marketplace.json');
26
+ }
27
+
28
+ function writeFileIfChanged(filePath, contents) {
29
+ try {
30
+ const existing = fs.readFileSync(filePath, 'utf8');
31
+ if (existing === contents) return false;
32
+ } catch (e) { process.stderr.write('[extensions-adapter] file read failed for ' + filePath + ', overwriting: ' + (e instanceof Error ? e.message : String(e)) + '\n'); }
33
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
34
+ fs.writeFileSync(filePath, contents);
35
+ return true;
36
+ }
37
+
38
+ function copyRecursive(src, dest) {
39
+ fs.mkdirSync(dest, { recursive: true });
40
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
41
+ if (entry.name === 'node_modules' || entry.name === '.git') continue;
42
+ const s = path.join(src, entry.name);
43
+ const d = path.join(dest, entry.name);
44
+ if (entry.isDirectory()) {
45
+ copyRecursive(s, d);
46
+ } else {
47
+ fs.copyFileSync(s, d);
48
+ }
49
+ }
50
+ }
51
+
52
+ function copyPluginBundle(packageRoot, pluginRoot) {
53
+ const bundleEntries = fs.readdirSync(packageRoot).filter(
54
+ e => !['node_modules', '.git', 'test', 'dist'].includes(e)
55
+ );
56
+ fs.mkdirSync(pluginRoot, { recursive: true });
57
+ for (const entry of bundleEntries) {
58
+ const src = path.join(packageRoot, entry);
59
+ const dest = path.join(pluginRoot, entry);
60
+ const stat = fs.statSync(src);
61
+ if (stat.isDirectory()) {
62
+ copyRecursive(src, dest);
63
+ } else {
64
+ fs.copyFileSync(src, dest);
65
+ }
66
+ }
67
+ }
68
+
69
+ function readJson(filePath) {
70
+ try {
71
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
72
+ } catch {
73
+ return null;
74
+ }
75
+ }
76
+
77
+ function writeJson(filePath, value) {
78
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
79
+ fs.writeFileSync(filePath, JSON.stringify(value, null, 2) + '\n');
80
+ }
81
+
82
+ function ensureExecutable(filePath) {
83
+ try {
84
+ fs.chmodSync(filePath, 0o755);
85
+ } catch (e) { process.stderr.write('[extensions-adapter] chmod failed for ' + filePath + ': ' + (e instanceof Error ? e.message : String(e)) + '\n'); }
86
+ }
87
+
88
+ function normalizeMarketplaceSourcePath(source, marketplacePath) {
89
+ if (typeof source === 'string') {
90
+ return path.relative(path.dirname(marketplacePath), source).replace(/\\/g, '/');
91
+ }
92
+ return source;
93
+ }
94
+
95
+ function ensureMarketplaceEntry(marketplacePath, pluginRoot) {
96
+ let marketplace = readJson(marketplacePath) || {
97
+ name: "a5c.ai",
98
+ plugins: [],
99
+ };
100
+ if (!Array.isArray(marketplace.plugins)) marketplace.plugins = [];
101
+ const idx = marketplace.plugins.findIndex(p => p.name === PLUGIN_NAME);
102
+ const relSource = './' + normalizeMarketplaceSourcePath(pluginRoot, marketplacePath);
103
+ const entry = {
104
+ name: PLUGIN_NAME,
105
+ source: relSource,
106
+ description: "Turn a stated need into a full system design by mining the Atlas knowledge graph.",
107
+ version: "5.1.1-staging.0007199a1cb2",
108
+ author: { name: "a5c.ai" },
109
+ };
110
+ if (idx >= 0) marketplace.plugins[idx] = entry;
111
+ else marketplace.plugins.push(entry);
112
+ writeJson(marketplacePath, marketplace);
113
+ }
114
+
115
+ function removeMarketplaceEntry(marketplacePath) {
116
+ const marketplace = readJson(marketplacePath);
117
+ if (!marketplace || !Array.isArray(marketplace.plugins)) return;
118
+ marketplace.plugins = marketplace.plugins.filter(p => p.name !== PLUGIN_NAME);
119
+ writeJson(marketplacePath, marketplace);
120
+ }
121
+
122
+ function warnWindowsHooks() {
123
+ if (process.platform === 'win32') {
124
+ console.warn('[' + PLUGIN_NAME + '] Windows detected — shell hooks (.sh) require Git Bash or WSL.');
125
+ }
126
+ }
127
+
128
+ function runPostInstall(pluginRoot) {
129
+ const postInstall = path.join(pluginRoot, 'scripts', 'post-install.js');
130
+ if (fs.existsSync(postInstall)) {
131
+ spawnSync(process.execPath, [postInstall], {
132
+ cwd: pluginRoot, stdio: 'inherit',
133
+ env: { ...process.env, PLUGIN_ROOT: pluginRoot, CLAUDE_PLUGIN_ROOT: pluginRoot },
134
+ });
135
+ }
136
+ }
137
+
138
+ module.exports = {
139
+ PLUGIN_NAME,
140
+ PLUGIN_CATEGORY,
141
+ getUserHome,
142
+ getHarnessHome,
143
+ getHomePluginRoot,
144
+ getHomeMarketplacePath,
145
+ writeFileIfChanged,
146
+ copyRecursive,
147
+ copyPluginBundle,
148
+ readJson,
149
+ writeJson,
150
+ ensureExecutable,
151
+ normalizeMarketplaceSourcePath,
152
+ ensureMarketplaceEntry,
153
+ removeMarketplaceEntry,
154
+ warnWindowsHooks,
155
+ runPostInstall,
156
+ };
package/bin/install.js ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const path = require('path');
5
+ const shared = require('./install-shared');
6
+
7
+ const PACKAGE_ROOT = path.resolve(__dirname, '..');
8
+
9
+ function main() {
10
+ const pluginRoot = shared.getHomePluginRoot();
11
+ const marketplacePath = shared.getHomeMarketplacePath();
12
+
13
+ console.log(`[${shared.PLUGIN_NAME}] Installing plugin to ${pluginRoot}`);
14
+
15
+ try {
16
+ shared.copyPluginBundle(PACKAGE_ROOT, pluginRoot);
17
+ shared.ensureMarketplaceEntry(marketplacePath, pluginRoot);
18
+ if (typeof shared.registerCopilotPlugin === 'function') {
19
+ shared.registerCopilotPlugin(pluginRoot);
20
+ }
21
+ if (typeof shared.installCopilotSurface === 'function' && typeof shared.getCopilotHome === 'function') {
22
+ shared.installCopilotSurface(PACKAGE_ROOT, shared.getCopilotHome());
23
+ }
24
+ if (typeof shared.warnWindowsHooks === 'function') {
25
+ shared.warnWindowsHooks();
26
+ }
27
+ if (typeof shared.harnessInstall === 'function') {
28
+ shared.harnessInstall(PACKAGE_ROOT, pluginRoot);
29
+ }
30
+ shared.runPostInstall && shared.runPostInstall(pluginRoot);
31
+ console.log(`[${shared.PLUGIN_NAME}] Installation complete!`);
32
+ console.log(`[${shared.PLUGIN_NAME}] Restart your IDE/CLI to pick up the plugin.`);
33
+ } catch (err) {
34
+ console.error(`[${shared.PLUGIN_NAME}] Failed to install: ${err.message}`);
35
+ process.exitCode = 1;
36
+ }
37
+ }
38
+
39
+ main();
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const path = require('path');
5
+ const fs = require('fs');
6
+ const shared = require('./install-shared');
7
+
8
+ function main() {
9
+ const pluginRoot = shared.getHomePluginRoot();
10
+ const marketplacePath = typeof shared.getHomeMarketplacePath === 'function'
11
+ ? shared.getHomeMarketplacePath()
12
+ : null;
13
+ const copilotHome = typeof shared.getCopilotHome === 'function'
14
+ ? shared.getCopilotHome()
15
+ : null;
16
+
17
+ if (!fs.existsSync(pluginRoot)) {
18
+ console.log(`[${shared.PLUGIN_NAME}] Plugin not installed at ${pluginRoot}`);
19
+ } else {
20
+ try {
21
+ fs.rmSync(pluginRoot, { recursive: true, force: true });
22
+ console.log(`[${shared.PLUGIN_NAME}] Uninstalled from ${pluginRoot}`);
23
+ } catch (err) {
24
+ console.error(`[${shared.PLUGIN_NAME}] Failed to uninstall: ${err.message}`);
25
+ process.exitCode = 1;
26
+ return;
27
+ }
28
+ }
29
+
30
+ try {
31
+ if (typeof shared.deregisterCopilotPlugin === 'function') {
32
+ shared.deregisterCopilotPlugin(pluginRoot);
33
+ }
34
+ if (copilotHome && typeof shared.removeManagedHooks === 'function') {
35
+ shared.removeManagedHooks(copilotHome);
36
+ }
37
+ if (marketplacePath && typeof shared.removeMarketplaceEntry === 'function') {
38
+ shared.removeMarketplaceEntry(marketplacePath);
39
+ }
40
+ } catch (err) {
41
+ console.error(`[${shared.PLUGIN_NAME}] Failed to clean up uninstall state: ${err.message}`);
42
+ process.exitCode = 1;
43
+ }
44
+ }
45
+
46
+ main();
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Collect the REAL constraints/gotchas of your scanned systems (IaC drift, orphaned resources, RBAC quirks, region splits), each cited; Atlas-graph comparison secondary.
3
+ argument-hint: The sources to inspect for nuances (e.g. "our azure account and this repo into C:/work/atlas").
4
+ allowed-tools: Read, Grep, Write, Task, Bash, Edit, Glob, AskUserQuestion, TodoWrite, Skill, mcp__atlas__atlas_public_search, mcp__atlas__atlas_public_record, mcp__atlas__atlas_public_neighbors, mcp__atlas__atlas_public_kinds, mcp__atlas__atlas_public_clusters, mcp__atlas__atlas_public_wiki_page
5
+ ---
6
+
7
+ Invoke the babysitter:babysit skill (using the Skill tool) and follow its instructions (SKILL.md). Run the PRE-AUTHORED atlas process bundled with this plugin — do NOT interview the user or author a new process. Create the run directly from this bundled entry and iterate it to completion:
8
+
9
+ ```
10
+ ${COPILOT_PLUGIN_DIR}/processes/atlas-collect-nuances.mjs#process
11
+ ```
12
+
13
+ (e.g. `babysitter run:create --process-id atlas-collect-nuances --entry "${COPILOT_PLUGIN_DIR}/processes/atlas-collect-nuances.mjs#process" --harness <this-harness>`, then iterate.) Pass the user arguments below as the run's stated need / process inputs. Continue executing in this same turn; do not stop after the Skill tool returns.
14
+
15
+ This process is SCAN-FIRST: it parses the stated sources, then runs READ-ONLY scans (Bash `az` + git/fs) of the user's REAL systems to collect actual constraints/gotchas/edge-cases — IaC-as-survey drift, orphaned cloud resources, RBAC/visibility quirks, region splits, tenant/descriptor mismatches, externally-deployed systems with no in-repo pipeline — each cited to its real resource id / RG / file path (or a concrete missing-thing observation). The Atlas knowledge graph (mcp__atlas__atlas_public_*) is used only as SECONDARY comparison. Never invent constraints; only inspect the sources named in the arguments.
16
+
17
+ User arguments for this command:
18
+
19
+ $ARGUMENTS
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Scan your real systems (Azure + repos + dirs) and map them into a layered, source-cited atlas; enrich against the Atlas graph (secondary).
3
+ argument-hint: The sources to scan (e.g. "our azure account, this repo and C:/work/ into C:/work/atlas").
4
+ allowed-tools: Read, Grep, Write, Task, Bash, Edit, Glob, AskUserQuestion, TodoWrite, Skill, mcp__atlas__atlas_public_search, mcp__atlas__atlas_public_record, mcp__atlas__atlas_public_neighbors, mcp__atlas__atlas_public_kinds, mcp__atlas__atlas_public_clusters, mcp__atlas__atlas_public_wiki_page
5
+ ---
6
+
7
+ Invoke the babysitter:babysit skill (using the Skill tool) and follow its instructions (SKILL.md). Run the PRE-AUTHORED atlas process bundled with this plugin — do NOT interview the user or author a new process. Create the run directly from this bundled entry and iterate it to completion:
8
+
9
+ ```
10
+ ${COPILOT_PLUGIN_DIR}/processes/atlas-systems-discovery.mjs#process
11
+ ```
12
+
13
+ (e.g. `babysitter run:create --process-id atlas-systems-discovery --entry "${COPILOT_PLUGIN_DIR}/processes/atlas-systems-discovery.mjs#process" --harness <this-harness>`, then iterate.) Pass the user arguments below as the run's stated need / process inputs. Continue executing in this same turn; do not stop after the Skill tool returns.
14
+
15
+ This process is SCAN-FIRST: it parses the stated sources, then runs READ-ONLY scans of the user's REAL systems — Azure via `az` (Bash), git repos, and local directories — and synthesizes a cross-linked, source-cited atlas where every item cites a real resource id / RG / file path. The Atlas knowledge graph (mcp__atlas__atlas_public_*) is used only as SECONDARY enrichment/comparison, never as the primary content. Never invent resource ids or file paths; only scan the sources named in the arguments.
16
+
17
+ User arguments for this command:
18
+
19
+ $ARGUMENTS
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Mine the REAL data stores/models in your sources (cloud DBs via az, schemas/migrations, package types), each cited; Atlas-graph comparison secondary.
3
+ argument-hint: The sources to mine for data (e.g. "our azure account and this repo into C:/work/atlas").
4
+ allowed-tools: Read, Grep, Write, Task, Bash, Edit, Glob, AskUserQuestion, TodoWrite, Skill, mcp__atlas__atlas_public_search, mcp__atlas__atlas_public_record, mcp__atlas__atlas_public_neighbors, mcp__atlas__atlas_public_kinds, mcp__atlas__atlas_public_clusters, mcp__atlas__atlas_public_wiki_page
5
+ ---
6
+
7
+ Invoke the babysitter:babysit skill (using the Skill tool) and follow its instructions (SKILL.md). Run the PRE-AUTHORED atlas process bundled with this plugin — do NOT interview the user or author a new process. Create the run directly from this bundled entry and iterate it to completion:
8
+
9
+ ```
10
+ ${COPILOT_PLUGIN_DIR}/processes/atlas-data-mining.mjs#process
11
+ ```
12
+
13
+ (e.g. `babysitter run:create --process-id atlas-data-mining --entry "${COPILOT_PLUGIN_DIR}/processes/atlas-data-mining.mjs#process" --harness <this-harness>`, then iterate.) Pass the user arguments below as the run's stated need / process inputs. Continue executing in this same turn; do not stop after the Skill tool returns.
14
+
15
+ This process is SCAN-FIRST: it parses the stated sources, then runs READ-ONLY scans to mine the REAL data — cloud databases/storage/AI-Search via `az` (Bash), and schemas/migrations/ORM models/package types in the repos/dirs — binding models to the stores that back them, each cited to its real resource id / file path. The Atlas knowledge graph (mcp__atlas__atlas_public_*) is used only as SECONDARY comparison. Never invent stores or models; only mine the sources named in the arguments. Never read secret values.
16
+
17
+ User arguments for this command:
18
+
19
+ $ARGUMENTS
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Mine the REAL processes in your sources (CI/CD, npm scripts, IaC, Dockerfiles, .a5c, cron), each cited to its file; Atlas-graph comparison secondary.
3
+ argument-hint: The sources to mine (e.g. "this repo and C:/work/ into C:/work/atlas").
4
+ allowed-tools: Read, Grep, Write, Task, Bash, Edit, Glob, AskUserQuestion, TodoWrite, Skill, mcp__atlas__atlas_public_search, mcp__atlas__atlas_public_record, mcp__atlas__atlas_public_neighbors, mcp__atlas__atlas_public_kinds, mcp__atlas__atlas_public_clusters, mcp__atlas__atlas_public_wiki_page
5
+ ---
6
+
7
+ Invoke the babysitter:babysit skill (using the Skill tool) and follow its instructions (SKILL.md). Run the PRE-AUTHORED atlas process bundled with this plugin — do NOT interview the user or author a new process. Create the run directly from this bundled entry and iterate it to completion:
8
+
9
+ ```
10
+ ${COPILOT_PLUGIN_DIR}/processes/atlas-process-mining.mjs#process
11
+ ```
12
+
13
+ (e.g. `babysitter run:create --process-id atlas-process-mining --entry "${COPILOT_PLUGIN_DIR}/processes/atlas-process-mining.mjs#process" --harness <this-harness>`, then iterate.) Pass the user arguments below as the run's stated need / process inputs. Continue executing in this same turn; do not stop after the Skill tool returns.
14
+
15
+ This process is SCAN-FIRST: it parses the stated sources, then runs READ-ONLY scans (Bash) of the REAL repos/dirs/cloud automation and mines the processes that actually exist — `.github/workflows`, npm scripts, terraform/bicep/helm/k8s, Dockerfiles, babysitter `.a5c` processes, and cron/scheduled jobs — each cited to its real file path. The Atlas knowledge graph (mcp__atlas__atlas_public_*) is used only as SECONDARY comparison. Never invent files or processes; only mine the sources named in the arguments.
16
+
17
+ User arguments for this command:
18
+
19
+ $ARGUMENTS
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@a5c-ai/atlas-github",
3
+ "version": "5.1.1-staging.0007199a1cb2",
4
+ "description": "Turn a stated need into a full system design by mining the Atlas knowledge graph.",
5
+ "scripts": {
6
+ "deploy": "npm publish --access public",
7
+ "deploy:staging": "npm publish --access public --tag staging",
8
+ "plugin:install": "node bin/install.js --global",
9
+ "plugin:uninstall": "node bin/uninstall.js --global",
10
+ "team:install": "node scripts/team-install.js"
11
+ },
12
+ "bin": {
13
+ "atlas-github": "bin/cli.js"
14
+ },
15
+ "files": [
16
+ "bin/",
17
+ "AGENTS.md",
18
+ "skills/",
19
+ "commands/",
20
+ "scripts/",
21
+ "plugin.json",
22
+ "README.md",
23
+ "versions.json",
24
+ "package.json"
25
+ ],
26
+ "keywords": [
27
+ "atlas",
28
+ "github-copilot",
29
+ "orchestration"
30
+ ],
31
+ "author": "a5c.ai",
32
+ "license": "MIT",
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "dependencies": {
37
+ "@a5c-ai/babysitter-sdk": "5.1.1-staging.0007199a1cb2"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/a5c-ai/atlas-github-copilot.git"
42
+ },
43
+ "homepage": "https://github.com/a5c-ai/atlas-github-copilot#readme",
44
+ "bugs": {
45
+ "url": "https://github.com/a5c-ai/atlas-github-copilot/issues"
46
+ }
47
+ }
package/plugin.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "atlas",
3
+ "version": "5.1.1-staging.0007199a1cb2",
4
+ "description": "Turn a stated need into a full system design by mining the Atlas knowledge graph.",
5
+ "author": {
6
+ "name": "a5c.ai"
7
+ },
8
+ "license": "MIT",
9
+ "skills": "skills/",
10
+ "commands": "commands/",
11
+ "agents": "AGENTS.md",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/a5c-ai/babysitter"
15
+ },
16
+ "keywords": [
17
+ "atlas",
18
+ "knowledge-graph",
19
+ "system-design",
20
+ "discovery",
21
+ "process-mining",
22
+ "data-mining",
23
+ "mcp",
24
+ "agent",
25
+ "LLM",
26
+ "github-copilot"
27
+ ]
28
+ }
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'node:child_process';
3
+ import { existsSync, readFileSync } from 'node:fs';
4
+
5
+ function run(command, args) {
6
+ const result = spawnSync(command, args, { encoding: 'utf8', stdio: 'inherit' });
7
+ if (result.status !== 0) process.exit(result.status || 1);
8
+ }
9
+
10
+ const branch = process.env.GITHUB_REF_NAME || 'develop';
11
+ const sha = (process.env.GITHUB_SHA || '').slice(0, 12);
12
+ const version = existsSync('package.json') ? JSON.parse(readFileSync('package.json', 'utf8')).version : JSON.parse(readFileSync('versions.json', 'utf8')).sdkVersion;
13
+ const normalized = String(version).replace(/[^0-9A-Za-z._-]/g, '-');
14
+ const tag = 'release/' + branch + '/v' + normalized + '-' + sha;
15
+ run('git', ['config', 'user.name', 'github-actions[bot]']);
16
+ run('git', ['config', 'user.email', 'github-actions[bot]@users.noreply.github.com']);
17
+ run('git', ['tag', tag]);
18
+ run('git', ['push', 'origin', tag]);
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'node:child_process';
3
+ import { readFileSync } from 'node:fs';
4
+
5
+ function run(command, args, options = {}) {
6
+ const result = spawnSync(command, args, { stdio: options.stdio || 'inherit', encoding: options.encoding });
7
+ if (result.status !== 0 && !options.allowFailure) process.exit(result.status || 1);
8
+ return result;
9
+ }
10
+
11
+ function npmView(packageSpec) {
12
+ return run('npm', ['view', packageSpec, 'version'], { allowFailure: true, stdio: 'pipe', encoding: 'utf8' }).status === 0;
13
+ }
14
+
15
+ const pkg = JSON.parse(readFileSync('package.json', 'utf8'));
16
+ const ref = process.env.GITHUB_REF_NAME || '';
17
+ const branch = ref.split('/')[1] || 'develop';
18
+ const tag = branch === 'main' ? 'latest' : branch;
19
+
20
+ if (!process.env.NODE_AUTH_TOKEN) {
21
+ console.log('NODE_AUTH_TOKEN is not configured; skipping npm publish.');
22
+ process.exit(0);
23
+ }
24
+
25
+ if (npmView(pkg.name + '@' + pkg.version)) {
26
+ console.log(pkg.name + '@' + pkg.version + ' already exists; ensuring dist-tag ' + tag + '.');
27
+ run('npm', ['dist-tag', 'add', pkg.name + '@' + pkg.version, tag], { allowFailure: true });
28
+ process.exit(0);
29
+ }
30
+
31
+ for (const field of ['dependencies', 'peerDependencies', 'optionalDependencies']) {
32
+ for (const [name, version] of Object.entries(pkg[field] || {})) {
33
+ if (!name.startsWith('@a5c-ai/') || version.startsWith('^') || version.startsWith('~') || version === '*' || version.startsWith('workspace:')) continue;
34
+ if (!npmView(name + '@' + version)) {
35
+ console.log('Required internal dependency ' + name + '@' + version + ' is not published yet; skipping npm publish.');
36
+ process.exit(0);
37
+ }
38
+ }
39
+ }
40
+
41
+ run('npm', ['publish', '--access', 'public', '--tag', tag]);
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ var path = require('path');
5
+ var shared = require('../bin/install-shared');
6
+
7
+ var workspace = process.cwd();
8
+ for (var i = 0; i < process.argv.length; i++) {
9
+ if (process.argv[i] === '--workspace' && process.argv[i + 1]) {
10
+ workspace = path.resolve(process.argv[i + 1]);
11
+ }
12
+ }
13
+
14
+ var src = process.env.PLUGIN_PACKAGE_ROOT || path.resolve(__dirname, '..');
15
+ var dest = shared.getHomePluginRoot('workspace');
16
+ console.log('[atlas] Team install to ' + dest);
17
+
18
+ shared.copyPluginBundle(src, dest);
19
+ if (typeof shared.harnessTeamInstall === 'function') {
20
+ shared.harnessTeamInstall(src, dest, workspace);
21
+ }
22
+ shared.runPostInstall(dest);
23
+ console.log('[atlas] Team install complete.');
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: atlas
3
+ description: >
4
+ Atlas turns your STATED NEED into a real systems atlas by SCANNING your actual
5
+ sources (Azure via `az`, git repos, local dirs) and process/data mining them,
6
+ THEN enriching against the Atlas knowledge graph. Use this skill when asked to
7
+ inventory/map your real systems, scan your cloud + repos + directories, mine the
8
+ real processes or data they contain, or collect their real constraints/gotchas.
9
+ (atlas, scan my systems, inventory our azure account, map my repos, real systems
10
+ atlas, process mining, data mining, collect nuances, system discovery)
11
+ allowed-tools: Read, Grep, Glob, Write, Edit, Task, Bash, AskUserQuestion, TodoWrite, Skill, mcp__atlas__atlas_public_search, mcp__atlas__atlas_public_record, mcp__atlas__atlas_public_neighbors, mcp__atlas__atlas_public_kinds, mcp__atlas__atlas_public_kind, mcp__atlas__atlas_public_clusters, mcp__atlas__atlas_public_stats, mcp__atlas__atlas_public_wiki_page
12
+ version: 0.1.0
13
+ ---
14
+
15
+ # atlas
16
+
17
+ This skill turns a stated need into a **real systems atlas** by SCANNING your
18
+ actual sources — Azure subscriptions (via read-only `az`), git repos, and local
19
+ directories — and process/data mining them, THEN enriching the result against the
20
+ Atlas knowledge graph. It is the brain of the `atlas` plugin. The scan is
21
+ PRIMARY; the graph is SECONDARY. For non-trivial runs it delegates orchestration
22
+ to `babysitter:babysit` using an atlas-specific `.a5c` process; for simple
23
+ lookups it queries the graph directly.
24
+
25
+ ## 1. Scan-first, graph-second
26
+
27
+ The output you want is an evidence-backed inventory of **your** systems — e.g.
28
+ `azure-inventory.json` (every real resource id + RG from `az`),
29
+ `workspace-inventory.json` (real repo/dir scan), `processes.json` (real mined
30
+ CI/CD/IaC/.a5c processes), and a cross-linked `SYSTEMS-ATLAS.md`. Every item must
31
+ cite its REAL source. Generic catalog nodes are NOT the deliverable.
32
+
33
+ - **Primary — scan the user's real sources.** Use `Bash` to run READ-ONLY scans:
34
+ `az` (account/group/resource list + per-service list/show) for Azure;
35
+ `git` + filesystem (`Read`/`Glob`) for repos and directories. NEVER invent
36
+ resource ids, regions, SKUs, or file paths — if you didn't observe it in real
37
+ output, it does not go in the atlas. Only scan the sources named in the need
38
+ (scoping, not a fallback).
39
+ - **Secondary — the Atlas knowledge graph.** Atlas is a knowledge graph of
40
+ agents, processes, data models, capabilities, workflows, and wiki pages reached
41
+ through the `mcp__atlas__atlas_public_*` MCP tools (server URL overridable via
42
+ `ATLAS_MCP_URL`). Use it ONLY to add best-practice / comparison context for the
43
+ real systems you found — never as the primary content, never to pad the atlas
44
+ with generic nodes. See the `atlas-graph-query` skill for the tool surface.
45
+
46
+ ## 2. When to use
47
+
48
+ | Trigger phrase | Command |
49
+ |----------------|---------|
50
+ | scan/inventory my real systems (azure + repos + dirs), map them | `/atlas:discover` |
51
+ | mine the real processes in my repos/cloud (CI/CD, IaC, .a5c, cron) | `/atlas:mine-processes` |
52
+ | mine the real data stores/models in my cloud + repos | `/atlas:mine-data` |
53
+ | collect the real constraints/gotchas of my scanned systems | `/atlas:collect-nuances` |
54
+
55
+ ## 3. The need → real atlas pipeline (core method)
56
+
57
+ 1. **Parse sources** — interpret the stated need into concrete SOURCES: Azure
58
+ subscription(s), git repos, local directories, URLs, plus the output dir. If
59
+ the sources are genuinely ambiguous, run a short interview
60
+ (`AskUserQuestion`). Per repo policy, interview ONLY when truly unclear.
61
+ 2. **Scan cloud (primary)** — for each Azure source, run read-only `az` and write
62
+ a real cloud inventory citing resource ids/RGs. Skip cleanly (record a reason)
63
+ if no cloud source is in scope — only scan what's named.
64
+ 3. **Scan local (primary)** — for each repo/dir, scan the filesystem + git
65
+ (structure, submodules, manifests, languages, services, IaC) and write a real
66
+ inventory citing real paths.
67
+ 4. **Enrich (secondary)** — map the discovered real systems against the Atlas
68
+ graph for comparison context. Clearly secondary; never the headline.
69
+ 5. **Synthesize** — assemble a real, cross-linked layered atlas (components /
70
+ processes / data / integrations / nuances) where EVERY item cites its real
71
+ source, like `SYSTEMS-ATLAS.md`, plus a machine mirror.
72
+ 6. **Converge (TDD)** — each phase asserts its own checkable outputs before
73
+ proceeding (see the atlas processes), iterating until the assertions pass.
74
+
75
+ ## 4. How to delegate
76
+
77
+ For any non-trivial run, hand off to `babysitter:babysit` (via the Skill tool)
78
+ naming the matching atlas process:
79
+
80
+ - `/atlas:discover` → `atlas-systems-discovery`
81
+ - `/atlas:mine-processes` → `atlas-process-mining`
82
+ - `/atlas:mine-data` → `atlas-data-mining`
83
+ - `/atlas:collect-nuances` → `atlas-collect-nuances`
84
+
85
+ Do not hand-roll orchestration when a process exists.
86
+
87
+ ## 5. Guardrails
88
+
89
+ - No fallbacks (repo rule). Skipping an out-of-scope source class (e.g. no cloud
90
+ named) is correct scoping and must be recorded with a reason — it is NOT a
91
+ silent fallback to the public graph. If you find yourself writing a real
92
+ fallback, stop and fix the root cause.
93
+ - Scan-first: every system/item in the atlas MUST cite a REAL source (an `az`
94
+ resource id / RG, or a file path). Never invent resource ids, regions, SKUs, or
95
+ file paths. Never invent graph node ids either — only reference ids returned by
96
+ the Atlas tools, and keep graph content strictly secondary.
97
+ - Read-only scanning only: `az` read verbs, `git` status/remote/log, filesystem
98
+ reads. Never run mutating cloud/git/fs commands and never read secret values.
99
+ - Keep breakpoints sparse; use them only when the sources to scan are genuinely
100
+ ambiguous.
101
+ - The real scanning is done BY the agent via its `Bash` tool inside the agent
102
+ task prompt. Do not emit `kind: 'shell'` subtasks unless the user explicitly
103
+ asks for a shell-oriented workflow.
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: atlas-graph-query
3
+ description: >
4
+ Reference for querying the Atlas knowledge graph through its MCP tools — the
5
+ SECONDARY enrichment/comparison layer that adds best-practice context to systems
6
+ you have ALREADY scanned from your real sources (`az`, repos, dirs). Use when
7
+ you need to look up nodes, edges, kinds, clusters, stats, or wiki pages in Atlas
8
+ to compare against your real inventory. (atlas graph, query atlas, atlas mcp,
9
+ search the graph, graph neighbors, atlas record, atlas kinds, enrichment layer)
10
+ allowed-tools: mcp__atlas__atlas_public_search, mcp__atlas__atlas_public_record, mcp__atlas__atlas_public_neighbors, mcp__atlas__atlas_public_kinds, mcp__atlas__atlas_public_kind, mcp__atlas__atlas_public_edge_kinds, mcp__atlas__atlas_public_edge_kind, mcp__atlas__atlas_public_clusters, mcp__atlas__atlas_public_stats, mcp__atlas__atlas_public_wiki_page
11
+ version: 0.1.0
12
+ ---
13
+
14
+ # atlas-graph-query
15
+
16
+ A thin reference for the Atlas knowledge-graph MCP tool surface so any agent
17
+ (including sub-agents) can query the graph without re-deriving conventions. The
18
+ server URL is wired natively by the `atlas` plugin and is overridable via
19
+ `ATLAS_MCP_URL`. Never invent node ids — only use ids returned by these tools.
20
+
21
+ > **Position: this is the SECONDARY / enrichment layer.** The `atlas` plugin is
22
+ > scan-first — it inventories your REAL systems by scanning your actual sources
23
+ > (Azure via read-only `az`, git repos, local directories) and process/data
24
+ > mining them. The graph queries below are used ONLY to add best-practice /
25
+ > comparison context to those already-discovered real systems. Do NOT use the
26
+ > graph as the primary content, and never pad a real inventory with generic
27
+ > catalog nodes. Tie every graph lookup back to a real scanned system.
28
+
29
+ ## Tools
30
+
31
+ ### `mcp__atlas__atlas_public_search`
32
+ Full-text/semantic search over the graph. Key params: `q` (query), optional
33
+ `kind` filter, `limit`. Prefer it to find seed/anchor nodes from need terms.
34
+
35
+ ### `mcp__atlas__atlas_public_record`
36
+ Fetch one node's full record by `id` (fields + edges). Use `expandNeighbors` to
37
+ pull immediate relations in one call. Prefer it to read detail once you have ids.
38
+
39
+ ### `mcp__atlas__atlas_public_neighbors`
40
+ Traverse the graph from a node. Key params: `id`, `depth`, `edges` (edge-kind
41
+ filter), `kinds` (node-kind filter). Prefer it to expand a subsystem from anchors.
42
+
43
+ ### `mcp__atlas__atlas_public_kinds`
44
+ List all node kinds in the graph. Use to scope a domain to relevant kinds.
45
+
46
+ ### `mcp__atlas__atlas_public_kind`
47
+ Describe a single node kind (schema/fields). Use before relying on a kind's shape.
48
+
49
+ ### `mcp__atlas__atlas_public_edge_kinds`
50
+ List all edge kinds. Use to understand how nodes relate.
51
+
52
+ ### `mcp__atlas__atlas_public_edge_kind`
53
+ Describe a single edge kind. Use to interpret a specific relation type.
54
+
55
+ ### `mcp__atlas__atlas_public_clusters`
56
+ List graph clusters (thematic groupings). Use to scope a domain to cluster(s).
57
+
58
+ ### `mcp__atlas__atlas_public_stats`
59
+ Graph-level counts/metrics. Use for sizing and sanity checks.
60
+
61
+ ### `mcp__atlas__atlas_public_wiki_page`
62
+ Fetch a narrative wiki page for context. Use to capture human-readable nuance.
63
+
64
+ ## Query recipes
65
+
66
+ - **Find by need** — `atlas_public_search(q=<need terms>)` → take top ids.
67
+ - **Expand a subsystem** — `atlas_public_neighbors(id, depth=2, kinds=[...])`.
68
+ - **Inspect a node** — `atlas_public_record(id, expandNeighbors=true)`.
69
+ - **Browse a cluster** — `atlas_public_clusters` → pick cluster → `search`/
70
+ `neighbors` scoped to it.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: collect-nuances
3
+ description: Collect the REAL constraints/gotchas of your scanned systems (IaC drift, orphaned resources, RBAC quirks, region splits), each cited; Atlas-graph comparison secondary.
4
+ ---
5
+
6
+ # collect-nuances
7
+
8
+ Invoke the babysitter:babysit skill (using the Skill tool) and follow its instructions (SKILL.md). Run the PRE-AUTHORED atlas process bundled with this plugin — do NOT interview the user or author a new process. Create the run directly from this bundled entry and iterate it to completion:
9
+
10
+ ```
11
+ ${COPILOT_PLUGIN_DIR}/processes/atlas-collect-nuances.mjs#process
12
+ ```
13
+
14
+ (e.g. `babysitter run:create --process-id atlas-collect-nuances --entry "${COPILOT_PLUGIN_DIR}/processes/atlas-collect-nuances.mjs#process" --harness <this-harness>`, then iterate.) Pass the user arguments below as the run's stated need / process inputs. Continue executing in this same turn; do not stop after the Skill tool returns.
15
+
16
+ This process is SCAN-FIRST: it parses the stated sources, then runs READ-ONLY scans (Bash `az` + git/fs) of the user's REAL systems to collect actual constraints/gotchas/edge-cases — IaC-as-survey drift, orphaned cloud resources, RBAC/visibility quirks, region splits, tenant/descriptor mismatches, externally-deployed systems with no in-repo pipeline — each cited to its real resource id / RG / file path (or a concrete missing-thing observation). The Atlas knowledge graph (mcp__atlas__atlas_public_*) is used only as SECONDARY comparison. Never invent constraints; only inspect the sources named in the arguments.
17
+
18
+ User arguments for this command:
19
+
20
+ $ARGUMENTS
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: discover
3
+ description: Scan your real systems (Azure + repos + dirs) and map them into a layered, source-cited atlas; enrich against the Atlas graph (secondary).
4
+ ---
5
+
6
+ # discover
7
+
8
+ Invoke the babysitter:babysit skill (using the Skill tool) and follow its instructions (SKILL.md). Run the PRE-AUTHORED atlas process bundled with this plugin — do NOT interview the user or author a new process. Create the run directly from this bundled entry and iterate it to completion:
9
+
10
+ ```
11
+ ${COPILOT_PLUGIN_DIR}/processes/atlas-systems-discovery.mjs#process
12
+ ```
13
+
14
+ (e.g. `babysitter run:create --process-id atlas-systems-discovery --entry "${COPILOT_PLUGIN_DIR}/processes/atlas-systems-discovery.mjs#process" --harness <this-harness>`, then iterate.) Pass the user arguments below as the run's stated need / process inputs. Continue executing in this same turn; do not stop after the Skill tool returns.
15
+
16
+ This process is SCAN-FIRST: it parses the stated sources, then runs READ-ONLY scans of the user's REAL systems — Azure via `az` (Bash), git repos, and local directories — and synthesizes a cross-linked, source-cited atlas where every item cites a real resource id / RG / file path. The Atlas knowledge graph (mcp__atlas__atlas_public_*) is used only as SECONDARY enrichment/comparison, never as the primary content. Never invent resource ids or file paths; only scan the sources named in the arguments.
17
+
18
+ User arguments for this command:
19
+
20
+ $ARGUMENTS
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: mine-data
3
+ description: Mine the REAL data stores/models in your sources (cloud DBs via az, schemas/migrations, package types), each cited; Atlas-graph comparison secondary.
4
+ ---
5
+
6
+ # mine-data
7
+
8
+ Invoke the babysitter:babysit skill (using the Skill tool) and follow its instructions (SKILL.md). Run the PRE-AUTHORED atlas process bundled with this plugin — do NOT interview the user or author a new process. Create the run directly from this bundled entry and iterate it to completion:
9
+
10
+ ```
11
+ ${COPILOT_PLUGIN_DIR}/processes/atlas-data-mining.mjs#process
12
+ ```
13
+
14
+ (e.g. `babysitter run:create --process-id atlas-data-mining --entry "${COPILOT_PLUGIN_DIR}/processes/atlas-data-mining.mjs#process" --harness <this-harness>`, then iterate.) Pass the user arguments below as the run's stated need / process inputs. Continue executing in this same turn; do not stop after the Skill tool returns.
15
+
16
+ This process is SCAN-FIRST: it parses the stated sources, then runs READ-ONLY scans to mine the REAL data — cloud databases/storage/AI-Search via `az` (Bash), and schemas/migrations/ORM models/package types in the repos/dirs — binding models to the stores that back them, each cited to its real resource id / file path. The Atlas knowledge graph (mcp__atlas__atlas_public_*) is used only as SECONDARY comparison. Never invent stores or models; only mine the sources named in the arguments. Never read secret values.
17
+
18
+ User arguments for this command:
19
+
20
+ $ARGUMENTS
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: mine-processes
3
+ description: Mine the REAL processes in your sources (CI/CD, npm scripts, IaC, Dockerfiles, .a5c, cron), each cited to its file; Atlas-graph comparison secondary.
4
+ ---
5
+
6
+ # mine-processes
7
+
8
+ Invoke the babysitter:babysit skill (using the Skill tool) and follow its instructions (SKILL.md). Run the PRE-AUTHORED atlas process bundled with this plugin — do NOT interview the user or author a new process. Create the run directly from this bundled entry and iterate it to completion:
9
+
10
+ ```
11
+ ${COPILOT_PLUGIN_DIR}/processes/atlas-process-mining.mjs#process
12
+ ```
13
+
14
+ (e.g. `babysitter run:create --process-id atlas-process-mining --entry "${COPILOT_PLUGIN_DIR}/processes/atlas-process-mining.mjs#process" --harness <this-harness>`, then iterate.) Pass the user arguments below as the run's stated need / process inputs. Continue executing in this same turn; do not stop after the Skill tool returns.
15
+
16
+ This process is SCAN-FIRST: it parses the stated sources, then runs READ-ONLY scans (Bash) of the REAL repos/dirs/cloud automation and mines the processes that actually exist — `.github/workflows`, npm scripts, terraform/bicep/helm/k8s, Dockerfiles, babysitter `.a5c` processes, and cron/scheduled jobs — each cited to its real file path. The Atlas knowledge graph (mcp__atlas__atlas_public_*) is used only as SECONDARY comparison. Never invent files or processes; only mine the sources named in the arguments.
17
+
18
+ User arguments for this command:
19
+
20
+ $ARGUMENTS
package/versions.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "sdkVersion": "5.1.1-staging.0007199a1cb2",
3
+ "extensionVersion": "5.1.1-staging.0007199a1cb2"
4
+ }