foundr-companion 0.1.7 → 0.1.8

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.
@@ -14,7 +14,7 @@ export async function runMissionWorker({ mission, hostId, mcpUrl, bearer, leaseS
14
14
  let adapter
15
15
  try {
16
16
  log(`mission ${mission.id}: ${mission.repo} @ ${mission.worktree_branch} — making worktree`)
17
- const worktreePath = await ensureWorktree({ repoPath: mission.repo, branch: mission.worktree_branch })
17
+ const worktreePath = await ensureWorktree({ repo: mission.repo, branch: mission.worktree_branch })
18
18
  const codexHome = await stageWorkerCodexConfig({ worktreePath, mcpUrl, bearer })
19
19
  await claimMission({ missionId: mission.id, hostId, repo: mission.repo, worktreeBranch: mission.worktree_branch, leaseSeconds })
20
20
  log(`mission ${mission.id}: claimed, starting codex in ${worktreePath}`)
@@ -1 +1 @@
1
- {"version":3,"file":"worker.mjs","sourceRoot":"","sources":["../../../src/bridge/fleet/worker.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.mjs","sourceRoot":"","sources":["../../../src/bridge/fleet/worker.mjs"],"names":[],"mappings":"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"}
@@ -1,14 +1,34 @@
1
- /** Ensure a git worktree for `branch` exists off `repoPath`; returns its path.
2
- * Idempotent: re-calling returns the existing path. Creates the branch off
3
- * baseRef if it doesn't exist. */
4
- export function ensureWorktree({ repoPath, branch, baseRef }: {
5
- repoPath: any;
1
+ /** Resolve a mission "repo" into { owner, name, cloneUrl }.
2
+ * - "owner/name" -> github https clone url
3
+ * - "https://github.com/owner/name" -> github https clone url
4
+ * - "git@github.com:owner/name(.git)" -> github https clone url
5
+ * - a local path / file:// / other git URL -> used verbatim as cloneUrl,
6
+ * owner/name derived from the basename (for flexibility + offline tests).
7
+ * Throws on empty/garbage. */
8
+ export function parseRepo(repo: any): {
9
+ owner: any;
10
+ name: any;
11
+ cloneUrl: string;
12
+ };
13
+ /** Ensure a local clone of the repo exists (cached under ~/.foundr-world/repos).
14
+ * Fresh clone if absent, otherwise best-effort fetch. Returns the clone path. */
15
+ export function ensureClone({ owner, name, cloneUrl }: {
16
+ owner: any;
17
+ name: any;
18
+ cloneUrl: any;
19
+ }): Promise<string>;
20
+ /** Ensure a git worktree for `branch` exists off the (cloned) repo; returns its
21
+ * path. Idempotent: re-calling returns the existing path. If `branch` exists
22
+ * locally or as origin/<branch>, it is checked out; otherwise a new branch is
23
+ * created off the repo's default branch (or baseRef when given). */
24
+ export function ensureWorktree({ repo, branch, baseRef }: {
25
+ repo: any;
6
26
  branch: any;
7
- baseRef?: string | undefined;
27
+ baseRef: any;
8
28
  }): Promise<string>;
9
- /** Remove a worktree (and prune the admin entry). */
10
- export function removeWorktree({ repoPath, worktreePath }: {
11
- repoPath: any;
29
+ /** Remove a worktree (and prune the admin entry). Best-effort. */
30
+ export function removeWorktree({ repo, worktreePath }: {
31
+ repo: any;
12
32
  worktreePath: any;
13
33
  }): Promise<void>;
14
34
  //# sourceMappingURL=worktree.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree.d.mts","sourceRoot":"","sources":["../../../src/bridge/fleet/worktree.mjs"],"names":[],"mappings":"AAUA;;mCAEmC;AACnC;;;;oBAYC;AAED,qDAAqD;AACrD;;;kBAGC"}
1
+ {"version":3,"file":"worktree.d.mts","sourceRoot":"","sources":["../../../src/bridge/fleet/worktree.mjs"],"names":[],"mappings":"AAaA;;;;;;+BAM+B;AAC/B;;;;EAwCC;AAED;kFACkF;AAClF;;;;oBAUC;AAgBD;;;qEAGqE;AACrE;;;;oBAqBC;AAED,kEAAkE;AAClE;;;kBAQC"}
@@ -2,31 +2,126 @@ import { execFile } from 'node:child_process'
2
2
  import { promisify } from 'node:util'
3
3
  import os from 'node:os'
4
4
  import path from 'node:path'
5
+ import fs from 'node:fs/promises'
5
6
  const run = promisify(execFile)
6
7
 
7
- const FLEET_ROOT = () => path.join(os.homedir(), '.foundr-world', 'worktrees')
8
+ const ROOT = () => path.join(os.homedir(), '.foundr-world')
9
+ const REPOS_ROOT = () => path.join(ROOT(), 'repos')
10
+ const WORKTREES_ROOT = () => path.join(ROOT(), 'worktrees')
8
11
 
9
- function sanitize(branch) { return branch.replace(/[^a-zA-Z0-9._-]+/g, '-') }
12
+ function sanitize(s) { return String(s).replace(/[^A-Za-z0-9._-]+/g, '-') }
10
13
 
11
- /** Ensure a git worktree for `branch` exists off `repoPath`; returns its path.
12
- * Idempotent: re-calling returns the existing path. Creates the branch off
13
- * baseRef if it doesn't exist. */
14
- export async function ensureWorktree({ repoPath, branch, baseRef = 'HEAD' }) {
15
- const dir = path.join(FLEET_ROOT(), path.basename(repoPath), sanitize(branch))
16
- // Already registered?
17
- const { stdout } = await run('git', ['-C', repoPath, 'worktree', 'list', '--porcelain'])
18
- if (stdout.includes(`worktree ${dir}\n`)) return dir
19
- const branchExists = await run('git', ['-C', repoPath, 'rev-parse', '--verify', '--quiet', branch])
14
+ /** Resolve a mission "repo" into { owner, name, cloneUrl }.
15
+ * - "owner/name" -> github https clone url
16
+ * - "https://github.com/owner/name" -> github https clone url
17
+ * - "git@github.com:owner/name(.git)" -> github https clone url
18
+ * - a local path / file:// / other git URL -> used verbatim as cloneUrl,
19
+ * owner/name derived from the basename (for flexibility + offline tests).
20
+ * Throws on empty/garbage. */
21
+ export function parseRepo(repo) {
22
+ if (typeof repo !== 'string') throw new Error(`invalid repo: ${repo}`)
23
+ const raw = repo.trim()
24
+ if (!raw) throw new Error('empty repo')
25
+
26
+ const stripGit = (s) => s.replace(/\.git$/, '')
27
+
28
+ // git@github.com:owner/name(.git)
29
+ const ssh = raw.match(/^git@github\.com:([^/]+)\/([^/]+?)(?:\.git)?$/i)
30
+ if (ssh) {
31
+ const owner = ssh[1]
32
+ const name = ssh[2]
33
+ return { owner, name, cloneUrl: `https://github.com/${owner}/${name}.git` }
34
+ }
35
+
36
+ // https://github.com/owner/name(.git)
37
+ const https = raw.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/i)
38
+ if (https) {
39
+ const owner = https[1]
40
+ const name = https[2]
41
+ return { owner, name, cloneUrl: `https://github.com/${owner}/${name}.git` }
42
+ }
43
+
44
+ // owner/name shorthand (no scheme, no extra slashes, not a local path)
45
+ const shorthand = raw.match(/^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)$/)
46
+ if (shorthand && !raw.startsWith('.') && !raw.startsWith('~')) {
47
+ const owner = shorthand[1]
48
+ const name = stripGit(shorthand[2])
49
+ return { owner, name, cloneUrl: `https://github.com/${owner}/${name}.git` }
50
+ }
51
+
52
+ // Fallback: a local filesystem path, file:// URL, or some other git URL.
53
+ // Use it verbatim as the clone source; derive owner/name from the basename.
54
+ const cloneUrl = raw
55
+ const withoutScheme = raw.replace(/^[a-z][a-z0-9+.-]*:\/\//i, '')
56
+ const segments = stripGit(withoutScheme).split('/').filter(Boolean)
57
+ const name = segments[segments.length - 1]
58
+ const owner = segments.length >= 2 ? segments[segments.length - 2] : 'local'
59
+ if (!name) throw new Error(`invalid repo: ${repo}`)
60
+ return { owner, name, cloneUrl }
61
+ }
62
+
63
+ /** Ensure a local clone of the repo exists (cached under ~/.foundr-world/repos).
64
+ * Fresh clone if absent, otherwise best-effort fetch. Returns the clone path. */
65
+ export async function ensureClone({ owner, name, cloneUrl }) {
66
+ const clonePath = path.join(REPOS_ROOT(), sanitize(owner), sanitize(name))
67
+ const hasGit = await fs.stat(path.join(clonePath, '.git')).then(() => true).catch(() => false)
68
+ if (!hasGit) {
69
+ await fs.mkdir(path.dirname(clonePath), { recursive: true })
70
+ await run('git', ['clone', cloneUrl, clonePath])
71
+ } else {
72
+ await run('git', ['-C', clonePath, 'fetch', '--all', '--prune']).catch(() => {})
73
+ }
74
+ return clonePath
75
+ }
76
+
77
+ /** Resolve the repo's default branch ref to base a new branch on. */
78
+ async function defaultBaseRef(clonePath) {
79
+ const head = await run('git', ['-C', clonePath, 'symbolic-ref', '--quiet', 'refs/remotes/origin/HEAD'])
80
+ .then((r) => r.stdout.trim().replace(/^refs\/remotes\//, ''))
81
+ .catch(() => '')
82
+ if (head) return head
83
+ for (const ref of ['origin/main', 'origin/master']) {
84
+ const ok = await run('git', ['-C', clonePath, 'rev-parse', '--verify', '--quiet', ref])
85
+ .then(() => true).catch(() => false)
86
+ if (ok) return ref
87
+ }
88
+ return 'HEAD'
89
+ }
90
+
91
+ /** Ensure a git worktree for `branch` exists off the (cloned) repo; returns its
92
+ * path. Idempotent: re-calling returns the existing path. If `branch` exists
93
+ * locally or as origin/<branch>, it is checked out; otherwise a new branch is
94
+ * created off the repo's default branch (or baseRef when given). */
95
+ export async function ensureWorktree({ repo, branch, baseRef }) {
96
+ const { owner, name, cloneUrl } = parseRepo(repo)
97
+ const clonePath = await ensureClone({ owner, name, cloneUrl })
98
+ const wtDir = path.join(WORKTREES_ROOT(), sanitize(owner), sanitize(name), sanitize(branch))
99
+
100
+ // Already registered as a worktree?
101
+ const { stdout } = await run('git', ['-C', clonePath, 'worktree', 'list', '--porcelain'])
102
+ if (stdout.includes(`worktree ${wtDir}\n`)) return wtDir
103
+
104
+ const localExists = await run('git', ['-C', clonePath, 'rev-parse', '--verify', '--quiet', branch])
105
+ .then(() => true).catch(() => false)
106
+ const remoteExists = await run('git', ['-C', clonePath, 'rev-parse', '--verify', '--quiet', `origin/${branch}`])
20
107
  .then(() => true).catch(() => false)
21
- const args = branchExists
22
- ? ['-C', repoPath, 'worktree', 'add', dir, branch]
23
- : ['-C', repoPath, 'worktree', 'add', '-b', branch, dir, baseRef]
24
- await run('git', args)
25
- return dir
108
+
109
+ if (localExists || remoteExists) {
110
+ await run('git', ['-C', clonePath, 'worktree', 'add', wtDir, branch])
111
+ } else {
112
+ const base = baseRef ?? (await defaultBaseRef(clonePath))
113
+ await run('git', ['-C', clonePath, 'worktree', 'add', '-b', branch, wtDir, base])
114
+ }
115
+ return wtDir
26
116
  }
27
117
 
28
- /** Remove a worktree (and prune the admin entry). */
29
- export async function removeWorktree({ repoPath, worktreePath }) {
30
- await run('git', ['-C', repoPath, 'worktree', 'remove', '--force', worktreePath]).catch(() => {})
31
- await run('git', ['-C', repoPath, 'worktree', 'prune']).catch(() => {})
118
+ /** Remove a worktree (and prune the admin entry). Best-effort. */
119
+ export async function removeWorktree({ repo, worktreePath }) {
120
+ const { owner, name, cloneUrl } = parseRepo(repo)
121
+ const clonePath = path.join(REPOS_ROOT(), sanitize(owner), sanitize(name))
122
+ // clonePath derivation doesn't need the network; cloneUrl is unused here but
123
+ // parseRepo validates `repo` and yields the owner/name we key the cache on.
124
+ void cloneUrl
125
+ await run('git', ['-C', clonePath, 'worktree', 'remove', '--force', worktreePath]).catch(() => {})
126
+ await run('git', ['-C', clonePath, 'worktree', 'prune']).catch(() => {})
32
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worktree.mjs","sourceRoot":"","sources":["../../../src/bridge/fleet/worktree.mjs"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAE/B,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,WAAW,CAAC,CAAA;AAE9E,SAAS,QAAQ,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAA,CAAC,CAAC;AAE7E;;mCAEmC;AACnC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9E,sBAAsB;IACtB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;IACxF,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC;QAAE,OAAO,GAAG,CAAA;IACpD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;SAChG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,YAAY;QACvB,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC;QAClD,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IACnE,MAAM,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACtB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC7D,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACjG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AACzE,CAAC"}
1
+ {"version":3,"file":"worktree.mjs","sourceRoot":"","sources":["../../../src/bridge/fleet/worktree.mjs"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAE/B,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAA;AAC3D,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;AACnD,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAA;AAE3D,SAAS,QAAQ,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAA,CAAC,CAAC;AAE3E;;;;;;+BAM+B;AAC/B,MAAM,UAAU,SAAS,CAAC,IAAI;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IACvB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;IAEvC,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAE/C,kCAAkC;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACvE,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,sBAAsB,KAAK,IAAI,IAAI,MAAM,EAAE,CAAA;IAC7E,CAAC;IAED,sCAAsC;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;IACpF,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,sBAAsB,KAAK,IAAI,IAAI,MAAM,EAAE,CAAA;IAC7E,CAAC;IAED,uEAAuE;IACvE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACrE,IAAI,SAAS,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,sBAAsB,KAAK,IAAI,IAAI,MAAM,EAAE,CAAA;IAC7E,CAAC;IAED,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,GAAG,CAAA;IACpB,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAA;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IAC5E,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;IACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAClC,CAAC;AAED;kFACkF;AAClF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IAC9F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;IAClD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,qEAAqE;AACrE,KAAK,UAAU,cAAc,CAAC,SAAS;IACrC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;SACpG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;SAC5D,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IAClB,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IACrB,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE,CAAC;QACnD,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;aACpF,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAA;IACpB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;qEAGqE;AACrE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAC5D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IACjD,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IAE5F,oCAAoC;IACpC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;IACzF,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAExD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;SAChG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;SAC7G,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IAEtC,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACvE,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,CAAC,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC,CAAA;QACzD,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IACnF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE;IACzD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1E,6EAA6E;IAC7E,4EAA4E;IAC5E,KAAK,QAAQ,CAAA;IACb,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAClG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAC1E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foundr-companion",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"