@forwardimpact/pathway 0.25.9 → 0.25.11

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.
@@ -104,7 +104,7 @@ GETTING STARTED
104
104
  init Create ./data/ with example data
105
105
  dev [--port=PORT] Run live development server
106
106
  build [--output=PATH] [--url=URL] Generate static site + distribution bundle
107
- update [--url=URL] Update local ~/.fit/pathway/ installation
107
+ update [--url=URL] Update local ~/.fit/data/pathway/ installation
108
108
 
109
109
  ────────────────────────────────────────────────────────────────────────────────
110
110
  ENTITY COMMANDS
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forwardimpact/pathway",
3
- "version": "0.25.9",
3
+ "version": "0.25.11",
4
4
  "description": "Career progression web app and CLI for exploring roles and generating agent teams",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -450,7 +450,10 @@ export async function runAgentCommand({
450
450
 
451
451
  // Output to console (default) or write to files (with --output)
452
452
  if (!options.output) {
453
- const teamInstructions = interpolateTeamInstructions(agentTrack, humanDiscipline);
453
+ const teamInstructions = interpolateTeamInstructions(
454
+ agentTrack,
455
+ humanDiscipline,
456
+ );
454
457
  if (teamInstructions) {
455
458
  console.log("# Team Instructions (CLAUDE.md)\n");
456
459
  console.log(teamInstructions.trim());
@@ -460,7 +463,10 @@ export async function runAgentCommand({
460
463
  return;
461
464
  }
462
465
 
463
- const teamInstructions = interpolateTeamInstructions(agentTrack, humanDiscipline);
466
+ const teamInstructions = interpolateTeamInstructions(
467
+ agentTrack,
468
+ humanDiscipline,
469
+ );
464
470
  await writeTeamInstructions(teamInstructions, baseDir);
465
471
  await writeProfile(profile, baseDir, agentTemplate);
466
472
  await generateClaudeCodeSettings(baseDir, agentData.claudeCodeSettings);
@@ -540,7 +546,10 @@ export async function runAgentCommand({
540
546
 
541
547
  // Output to console (default) or write to files (with --output)
542
548
  if (!options.output) {
543
- const teamInstructions = interpolateTeamInstructions(agentTrack, humanDiscipline);
549
+ const teamInstructions = interpolateTeamInstructions(
550
+ agentTrack,
551
+ humanDiscipline,
552
+ );
544
553
  if (teamInstructions) {
545
554
  console.log("# Team Instructions (CLAUDE.md)\n");
546
555
  console.log(teamInstructions.trim());
@@ -553,7 +562,10 @@ export async function runAgentCommand({
553
562
  return;
554
563
  }
555
564
 
556
- const teamInstructions = interpolateTeamInstructions(agentTrack, humanDiscipline);
565
+ const teamInstructions = interpolateTeamInstructions(
566
+ agentTrack,
567
+ humanDiscipline,
568
+ );
557
569
  await writeTeamInstructions(teamInstructions, baseDir);
558
570
  for (const profile of profiles) {
559
571
  await writeProfile(profile, baseDir, agentTemplate);
@@ -2,7 +2,7 @@
2
2
  * Update Command
3
3
  *
4
4
  * Re-downloads the distribution bundle from the published site URL
5
- * and updates the local ~/.fit/pathway/ installation.
5
+ * and updates the local ~/.fit/data/pathway/ installation.
6
6
  * Updates the global @forwardimpact/pathway package if the version changed.
7
7
  */
8
8
 
@@ -10,9 +10,11 @@ import { cp, mkdir, rm, readFile, writeFile, access } from "fs/promises";
10
10
  import { join } from "path";
11
11
  import { homedir } from "os";
12
12
  import { execFileSync } from "child_process";
13
+ import { tmpdir } from "os";
13
14
  import { createDataLoader } from "@forwardimpact/map/loader";
14
15
 
15
- const INSTALL_DIR = join(homedir(), ".fit", "pathway");
16
+ const BASE_DIR = join(homedir(), ".fit", "data");
17
+ const INSTALL_DIR = join(BASE_DIR, "pathway");
16
18
 
17
19
  /**
18
20
  * Run the update command.
@@ -24,13 +26,11 @@ const INSTALL_DIR = join(homedir(), ".fit", "pathway");
24
26
  * @param {Object} params.options - Command options
25
27
  */
26
28
  export async function runUpdateCommand({ dataDir: _dataDir, options }) {
27
- const installDataDir = join(INSTALL_DIR, "data");
28
-
29
29
  // Verify we have a home-directory installation
30
30
  try {
31
- await access(installDataDir);
31
+ await access(INSTALL_DIR);
32
32
  } catch {
33
- console.error("Error: No local installation found at ~/.fit/pathway/");
33
+ console.error("Error: No local installation found at ~/.fit/data/pathway/");
34
34
  console.error(
35
35
  "Install first using the install.sh script from your organization's pathway site.",
36
36
  );
@@ -39,12 +39,12 @@ export async function runUpdateCommand({ dataDir: _dataDir, options }) {
39
39
 
40
40
  // Load framework config to get siteUrl
41
41
  const loader = createDataLoader();
42
- const framework = await loader.loadFrameworkConfig(installDataDir);
42
+ const framework = await loader.loadFrameworkConfig(INSTALL_DIR);
43
43
  const siteUrl = options.url || framework.distribution?.siteUrl;
44
44
 
45
45
  if (!siteUrl) {
46
46
  console.error(
47
- "Error: No siteUrl found in ~/.fit/pathway/data/framework.yaml (distribution.siteUrl)",
47
+ "Error: No siteUrl found in ~/.fit/data/pathway/framework.yaml (distribution.siteUrl)",
48
48
  );
49
49
  console.error("Provide one with --url=<URL> or add it to framework.yaml.");
50
50
  process.exit(1);
@@ -56,7 +56,7 @@ export async function runUpdateCommand({ dataDir: _dataDir, options }) {
56
56
  console.log(`\n🔄 Updating from ${baseUrl}...\n`);
57
57
 
58
58
  // 1. Download bundle to temp location
59
- const tmpDir = join(INSTALL_DIR, "_update_tmp");
59
+ const tmpDir = join(tmpdir(), "fit-pathway-update");
60
60
  await mkdir(tmpDir, { recursive: true });
61
61
 
62
62
  const tmpBundle = join(tmpDir, bundleName);
@@ -86,7 +86,7 @@ export async function runUpdateCommand({ dataDir: _dataDir, options }) {
86
86
 
87
87
  // 3. Compare versions from bundle's package.json (version manifest)
88
88
  const newPkgPath = join(extractDir, "package.json");
89
- const oldPkgPath = join(INSTALL_DIR, "package.json");
89
+ const oldPkgPath = join(BASE_DIR, "package.json");
90
90
  const newPkg = JSON.parse(await readFile(newPkgPath, "utf8"));
91
91
  let oldPkg;
92
92
  try {
@@ -102,8 +102,8 @@ export async function runUpdateCommand({ dataDir: _dataDir, options }) {
102
102
 
103
103
  // 4. Replace data
104
104
  console.log(" Updating data files...");
105
- await rm(installDataDir, { recursive: true });
106
- await cp(join(extractDir, "data"), installDataDir, { recursive: true });
105
+ await rm(INSTALL_DIR, { recursive: true });
106
+ await cp(join(extractDir, "data"), INSTALL_DIR, { recursive: true });
107
107
  console.log(" ✓ Data updated");
108
108
 
109
109
  // 5. Update version manifest
@@ -3,7 +3,7 @@
3
3
  # Generated by @forwardimpact/pathway v{{{version}}}
4
4
  #
5
5
  # Installs fit-pathway globally via bun and downloads organization data
6
- # to ~/.fit/pathway/data/.
6
+ # to ~/.fit/data/pathway/.
7
7
  #
8
8
  # Usage:
9
9
  # curl -fsSL {{{siteUrl}}}/install.sh | bash
@@ -11,7 +11,7 @@
11
11
  set -euo pipefail
12
12
 
13
13
  SITE_URL="{{{siteUrl}}}"
14
- INSTALL_DIR="${HOME}/.fit/pathway"
14
+ INSTALL_DIR="${HOME}/.fit/data/pathway"
15
15
 
16
16
  command -v bun >/dev/null 2>&1 || { echo "Error: Bun 1.2+ is required. https://bun.sh"; exit 1; }
17
17
 
@@ -19,14 +19,16 @@ command -v bun >/dev/null 2>&1 || { echo "Error: Bun 1.2+ is required. https://b
19
19
  echo "Installing @forwardimpact/pathway globally..."
20
20
  bun install -g @forwardimpact/pathway@{{{version}}}
21
21
 
22
- # Download organization data to ~/.fit/pathway/data/
23
- echo "Downloading organization data to ${INSTALL_DIR}/data/..."
22
+ # Download organization data to ~/.fit/data/pathway/
23
+ echo "Downloading organization data to ${INSTALL_DIR}..."
24
24
  mkdir -p "${INSTALL_DIR}"
25
25
 
26
- TMPFILE=$(mktemp)
27
- trap 'rm -f "$TMPFILE"' EXIT
28
- curl -fsSL "${SITE_URL}/bundle.tar.gz" -o "$TMPFILE"
29
- tar -xzf "$TMPFILE" -C "${INSTALL_DIR}" --strip-components=1
26
+ TMPDIR_INSTALL=$(mktemp -d)
27
+ trap 'rm -rf "$TMPDIR_INSTALL"' EXIT
28
+ curl -fsSL "${SITE_URL}/bundle.tar.gz" -o "${TMPDIR_INSTALL}/bundle.tar.gz"
29
+ tar -xzf "${TMPDIR_INSTALL}/bundle.tar.gz" -C "${TMPDIR_INSTALL}" --strip-components=1
30
+ cp -R "${TMPDIR_INSTALL}/data/." "${INSTALL_DIR}/"
31
+ cp "${TMPDIR_INSTALL}/package.json" "${HOME}/.fit/data/package.json" 2>/dev/null || true
30
32
 
31
33
  echo ""
32
34
  echo "Done. Usage:"