@nanocollective/roster 0.1.0-alpha.30 → 0.1.0-alpha.32

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/docs/cost.md CHANGED
@@ -12,9 +12,9 @@ Three separate bills, and they behave differently.
12
12
 
13
13
  The largest by far, and the one that scales with how much work you ask for.
14
14
 
15
- On a Claude subscription, through a Claude Code OAuth token, it is a flat subscription rather
16
- than spend per token, and what grows with a session is how much of its usage you take. That is
17
- how Pip's staff run.
15
+ Roster needs access to a coding agent, not any one provider: Claude Code, Codex, Nanocoder or
16
+ your own. On a subscription plan it is a flat cost rather than spend per token, and what grows
17
+ with a session is how much of its usage you take. Pip's staff run that way.
18
18
 
19
19
  A session's cost is roughly its length. Ours run 11 to 55 minutes of wall clock, and a longer
20
20
  session is a bigger bill as well as a slower one. The lever that matters is not the model
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanocollective/roster",
3
- "version": "0.1.0-alpha.30",
3
+ "version": "0.1.0-alpha.32",
4
4
  "description": "An agent-run org, powered by GitHub. Scaffold AI staff members whose brain is a repo.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -361,7 +361,9 @@ function mdAsset(src, opts) {
361
361
  return path ? "/api/file?path=" + encodeURIComponent(opts.file.staffDir + "/" + path) : src;
362
362
  }
363
363
 
364
- const REF_RE = /(^|[\s(>])([\w.-]+\/[\w.-]+)?#(\d+)\b/g;
364
+ /* #123, repo#123 and owner/repo#123. The short repo form is how the staff write about the other
365
+ repos in their own org (pip-web#172), and it was left as plain text. */
366
+ const REF_RE = /(^|[\s(>])((?:[\w.-]+\/)?[\w.-]+)?#(\d+)\b/g;
365
367
  // GitHub's own username shape, plus the short aliases the agents answer to.
366
368
  const AT_RE = /(^|[\s(>])@([a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38})\b/gi;
367
369
 
@@ -381,7 +383,8 @@ export function chips(html, opts = {}) {
381
383
  if (inA) return p;
382
384
  return p
383
385
  .replace(REF_RE, (m, pre, repo, n) => {
384
- const target = repo || opts.repo;
386
+ const owner = String(opts.repo ?? "").split("/")[0];
387
+ const target = !repo ? opts.repo : repo.includes("/") ? repo : owner ? owner + "/" + repo : "";
385
388
  if (!target) return m;
386
389
  // /issues/N redirects to /pull/N when it is a PR, so one form is always right.
387
390
  return pre + '<a class="ref" href="https://github.com/' + target + "/issues/" + n +
@@ -240,7 +240,9 @@ function inboxScreen(m, opts) {
240
240
  request; the inbox is everything else. An inbox that also listed the PRs said the same
241
241
  thing twice and made the badge beside it a number you could not act on. */
242
242
  const mine = S.inbox.items
243
- .filter((i) => (issuesOnly ? products.has(i.repo) : belongsTo(i, whoseStaff)))
243
+ /* A staff member's link is their tracker: what is in their repo, whoever filed it. Matching
244
+ on who filed or was named put an issue the CMO filed for the CTO under both of them. */
245
+ .filter((i) => (issuesOnly ? products.has(i.repo) : !whoseStaff || i.repo === whoseStaff.brain))
244
246
  .filter((i) => (i.kind === "pr") === !!opts.prs);
245
247
  const isOpen = (i) => i.state === "OPEN";
246
248
  const scoped = mine.filter(