@starlein/paperclip-plugin-company-wizard 0.4.5 → 0.4.6

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.
Files changed (28) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/dist/manifest.js +4 -9
  4. package/dist/manifest.js.map +2 -2
  5. package/dist/ui/index.js +1 -2
  6. package/dist/ui/index.js.map +2 -2
  7. package/dist/worker.js +239 -39
  8. package/dist/worker.js.map +2 -2
  9. package/package.json +1 -1
  10. package/templates/modules/auto-assign/README.md +9 -7
  11. package/templates/modules/auto-assign/agents/ceo/heartbeat-section.md +3 -1
  12. package/templates/modules/auto-assign/agents/ceo/skills/auto-assign.fallback.md +14 -8
  13. package/templates/modules/auto-assign/agents/product-owner/heartbeat-section.md +3 -1
  14. package/templates/modules/auto-assign/module.meta.json +3 -3
  15. package/templates/modules/auto-assign/skills/auto-assign.md +2 -2
  16. package/templates/modules/backlog/docs/backlog-process.md +7 -7
  17. package/templates/modules/backlog/docs/backlog-template.md +2 -1
  18. package/templates/modules/backlog/module.meta.json +2 -2
  19. package/templates/modules/backlog/skills/backlog-health.bar.md +1 -1
  20. package/templates/modules/backlog/skills/backlog-health.md +2 -2
  21. package/templates/modules/github-repo/README.md +3 -3
  22. package/templates/modules/github-repo/agents/engineer/skills/git-workflow.md +24 -8
  23. package/templates/modules/github-repo/docs/git-workflow.md +59 -2
  24. package/templates/modules/github-repo/module.meta.json +1 -1
  25. package/templates/roles/engineer/AGENTS.md +2 -0
  26. package/templates/roles/engineer/HEARTBEAT.md +1 -1
  27. package/templates/roles/product-owner/AGENTS.md +2 -1
  28. package/templates/roles/product-owner/HEARTBEAT.md +1 -1
package/CHANGELOG.md CHANGED
@@ -4,9 +4,38 @@ All notable changes to the Company Wizard plugin are documented here.
4
4
 
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
+ ## [0.4.6] - 2026-06-18
8
+
9
+ ### Changed
10
+
11
+ - **Docker path auto-detection for companiesDir and templatesPath.** The plugin now detects Docker vs. NPX installations automatically: if `~/instances` exists (Docker, where HOME=/paperclip), paths default to `~/instances/default/companies` and `~/plugin-templates`; otherwise (NPX/local), paths default to `~/.paperclip/instances/default/companies` and `~/.paperclip/plugin-templates`. Both settings are now rarely needed — the plugin picks the right layout automatically. (`src/worker.ts`, `isDockerLayout()`, `resolveWritableCompaniesDir`, `ensureTemplatesDir`.)
12
+ - **Removed `disableBoardApprovalOnNewCompanies` setting.** This setting was never used in practice — board approval governance is always preserved for new companies. The setting has been removed from the manifest and the worker no longer reads or applies it. (`src/manifest.ts`, `src/worker.ts`.)
13
+ - **Direct assignment flow — backlog grooming assigns issues at creation, not via routine sweep.** The backlog-health skill now instructs the PM to assign each issue to its best-fit agent as it is created. The auto-assign routine is reframed as a low-frequency safety net (every 4 hours) that catches stragglers, not the primary dispatch path. (`backlog` module, `auto-assign` module.)
14
+ - **Engineer hands off to Product Owner on completion (without pr-review).** When the PR-review module is not active and no `executionPolicy` is set, the engineer moves the issue to `in_review` and reassigns to the Product Owner in the same heartbeat. Never leaves finished work in `in_review` assigned to itself. (`engineer` AGENTS.md, HEARTBEAT.md.)
15
+ - **Product Owner reviews `in_review` issues immediately.** When an issue is assigned to the PM in `in_review` and no formal executionPolicy participant is waiting, the PM reviews it against acceptance criteria and sets it `done` or sends it back to the engineer. (`product-owner` AGENTS.md, HEARTBEAT.md.)
16
+ - **Engineer merges feature branches to base when no PR review is active.** The `github-repo` git-workflow skill now has an explicit direct-to-base-ref flow: push branch → checkout base → merge → push base → delete branch. (`github-repo` module.)
17
+ - **Git identity uses real user profile instead of "Paperclip Bootstrap".** The initial empty commit in fresh repositories now uses the board user's name and email (resolved from the Paperclip session) instead of the hardcoded "Paperclip Bootstrap / bootstrap@paperclip.local". Falls back to "Paperclip Bootstrap" when no session is available (local_trusted mode). (`src/api/client.js`, `src/worker.ts`, `src/logic/assemble.js`.)
18
+ - **Engineer claims unassigned engineering work as a fallback.** When no actionable work is assigned and unassigned `todo` issues clearly match engineering, the engineer claims the highest-priority ready issue. (`engineer` AGENTS.md.)
19
+ - **Manifest setting descriptions updated.** `companiesDir` and `templatesPath` now document auto-detection behavior. `templatesRepoUrl` now notes that the default is correct for most setups. (`src/manifest.ts`.)
20
+
21
+ ### Fixed
22
+
23
+ - **Branches no longer dangle unmerged without a PR review module.** The git-workflow skill previously instructed engineers to "push to the correct configured base branch" but did not explain how to merge a feature branch back to base. Without a PR review module, branches were pushed but never merged, leaving `main` stale and the team stuck. The skill now includes explicit merge-and-push steps for the no-review case.
24
+ - **Auto-assign README and heartbeat-section schedule wording.** "Every few hours" was replaced with the actual cron schedule "every 4 hours" to match the `0 */4 * * *` routine. (`auto-assign` module.)
25
+ - **github-repo README now matches the actual direct-to-base-ref skill.** The README previously said "commits directly on the default branch, no branches" but the skill uses a feature branch + merge-to-base flow. (`github-repo` README.)
26
+
27
+ ### Removed
28
+
29
+ - `disableBoardApprovalOnNewCompanies` plugin setting. Board approval governance is always preserved for new companies — this toggle was never used in practice.
30
+
7
31
  ---
32
+
8
33
  ## [0.4.5] - 2026-06-16
9
34
 
35
+ ### Fixed
36
+
37
+ - **Fresh local project workspaces are initialized before provisioning.** Git-worktree companies now get an on-disk project repository during setup instead of letting Paperclip fall back to agent workspace directories when the project path does not exist yet.
38
+
10
39
  ### Changed
11
40
 
12
41
  - **The plugin-update notice is compact and scoped to the onboarding page.** It was a large amber banner shown on every wizard step; it is now a small one-line notice (`current → latest`, npm link) rendered only on the onboarding (plugin entry) page next to the template update action, explicitly labeled "Company Wizard plugin". (`WizardShell.tsx`, `StepOnboarding.tsx`.)
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  ---
17
17
 
18
- > **Fork:** This is a community-maintained fork of [yesterday-AI/paperclip-plugin-company-wizard](https://github.com/yesterday-AI/paperclip-plugin-company-wizard), updated for the current Paperclip API (`>=2026.529.0`) with substantial bug fixes. End-to-end company setup is governed through current Paperclip workflows as of v0.4.5.
18
+ > **Fork:** This is a community-maintained fork of [yesterday-AI/paperclip-plugin-company-wizard](https://github.com/yesterday-AI/paperclip-plugin-company-wizard), updated for the current Paperclip API (`>=2026.529.0`) with substantial bug fixes. End-to-end company setup is governed through current Paperclip workflows as of v0.4.6.
19
19
 
20
20
  <details>
21
21
  <summary><strong>What changed vs. upstream</strong></summary>
package/dist/manifest.js CHANGED
@@ -2,7 +2,7 @@
2
2
  var manifest = {
3
3
  id: "starlein.paperclip-plugin-company-wizard",
4
4
  apiVersion: 1,
5
- version: "0.4.5",
5
+ version: "0.4.6",
6
6
  displayName: "Company Wizard",
7
7
  description: "AI-powered wizard to bootstrap agent companies from composable templates",
8
8
  author: "Sascha Pietrowski <sp@speednetwork.de>",
@@ -28,16 +28,16 @@ var manifest = {
28
28
  properties: {
29
29
  companiesDir: {
30
30
  type: "string",
31
- description: "Directory where assembled company workspaces are written. Defaults to ~/.paperclip/instances/default/companies. Override for Docker setups (e.g. /paperclip/instances/default/companies)."
31
+ description: "Directory where assembled company workspaces are written. Auto-detected: ~/instances/default/companies in Docker setups, ~/.paperclip/instances/default/companies otherwise. Rarely needs manual override."
32
32
  },
33
33
  templatesPath: {
34
34
  type: "string",
35
- description: "Path to the templates directory. Defaults to ~/.paperclip/plugin-templates (auto-downloaded from templatesRepoUrl if missing). Override for Docker setups (e.g. /paperclip/plugin-templates)."
35
+ description: "Path to the templates directory. Auto-detected: ~/plugin-templates in Docker setups, ~/.paperclip/plugin-templates otherwise. Rarely needs manual override."
36
36
  },
37
37
  templatesRepoUrl: {
38
38
  type: "string",
39
39
  default: "https://github.com/starlein/paperclip-plugin-company-wizard/tree/main/templates",
40
- description: "GitHub tree URL to pull templates from when the templates directory does not exist."
40
+ description: "GitHub tree URL for template downloads. The default is correct for most setups \u2014 only change this if using a custom fork."
41
41
  },
42
42
  anthropicApiKey: {
43
43
  type: "string",
@@ -54,11 +54,6 @@ var manifest = {
54
54
  paperclipPassword: {
55
55
  type: "string",
56
56
  description: "Board login password (for authenticated instances)."
57
- },
58
- disableBoardApprovalOnNewCompanies: {
59
- type: "boolean",
60
- default: false,
61
- description: "Optional. If true, the wizard will PATCH new companies to set requireBoardApprovalForNewAgents=false during provisioning. Leave false to preserve approval-gated hiring policies."
62
57
  }
63
58
  }
64
59
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/manifest.ts"],
4
- "sourcesContent": ["import type { PaperclipPluginManifestV1 } from '@paperclipai/plugin-sdk';\n\nconst manifest: PaperclipPluginManifestV1 = {\n id: 'starlein.paperclip-plugin-company-wizard',\n apiVersion: 1,\n version: '0.4.5',\n displayName: 'Company Wizard',\n description: 'AI-powered wizard to bootstrap agent companies from composable templates',\n author: 'Sascha Pietrowski <sp@speednetwork.de>',\n categories: ['workspace', 'ui'],\n capabilities: [\n 'companies.read',\n 'issues.create',\n 'issues.read',\n 'issues.update',\n 'goals.create',\n 'goals.read',\n 'agents.read',\n 'projects.read',\n 'plugin.state.read',\n 'plugin.state.write',\n 'secrets.read-ref',\n 'events.subscribe',\n 'ui.page.register',\n 'ui.sidebar.register',\n ],\n instanceConfigSchema: {\n type: 'object',\n properties: {\n companiesDir: {\n type: 'string',\n description:\n 'Directory where assembled company workspaces are written. Defaults to ~/.paperclip/instances/default/companies. Override for Docker setups (e.g. /paperclip/instances/default/companies).',\n },\n templatesPath: {\n type: 'string',\n description:\n 'Path to the templates directory. Defaults to ~/.paperclip/plugin-templates (auto-downloaded from templatesRepoUrl if missing). Override for Docker setups (e.g. /paperclip/plugin-templates).',\n },\n templatesRepoUrl: {\n type: 'string',\n default: 'https://github.com/starlein/paperclip-plugin-company-wizard/tree/main/templates',\n description:\n 'GitHub tree URL to pull templates from when the templates directory does not exist.',\n },\n anthropicApiKey: {\n type: 'string',\n description:\n 'Anthropic API key for the AI wizard (e.g. sk-ant-...). Required to use the AI-powered company setup path.',\n },\n paperclipUrl: {\n type: 'string',\n description:\n 'Paperclip instance URL. Defaults to http://localhost:3100 or the PAPERCLIP_PUBLIC_URL env var.',\n },\n paperclipEmail: {\n type: 'string',\n description: 'Board login email (for authenticated instances).',\n },\n paperclipPassword: {\n type: 'string',\n description: 'Board login password (for authenticated instances).',\n },\n disableBoardApprovalOnNewCompanies: {\n type: 'boolean',\n default: false,\n description:\n 'Optional. If true, the wizard will PATCH new companies to set requireBoardApprovalForNewAgents=false during provisioning. Leave false to preserve approval-gated hiring policies.',\n },\n },\n },\n entrypoints: {\n worker: './dist/worker.js',\n ui: './dist/ui',\n },\n ui: {\n slots: [\n {\n type: 'page',\n id: 'company-wizard',\n displayName: 'Company Wizard',\n exportName: 'WizardPage',\n routePath: 'company-creator',\n },\n {\n type: 'sidebar',\n id: 'company-wizard-link',\n displayName: 'Create Company',\n exportName: 'SidebarLink',\n },\n ],\n },\n};\n\nexport default manifest;\n"],
5
- "mappings": ";AAEA,IAAM,WAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAa;AAAA,EACb,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY,CAAC,aAAa,IAAI;AAAA,EAC9B,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,YAAY;AAAA,MACV,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,kBAAkB;AAAA,QAChB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,mBAAmB;AAAA,QACjB,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,oCAAoC;AAAA,QAClC,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,mBAAQ;",
4
+ "sourcesContent": ["import type { PaperclipPluginManifestV1 } from '@paperclipai/plugin-sdk';\n\nconst manifest: PaperclipPluginManifestV1 = {\n id: 'starlein.paperclip-plugin-company-wizard',\n apiVersion: 1,\n version: '0.4.6',\n displayName: 'Company Wizard',\n description: 'AI-powered wizard to bootstrap agent companies from composable templates',\n author: 'Sascha Pietrowski <sp@speednetwork.de>',\n categories: ['workspace', 'ui'],\n capabilities: [\n 'companies.read',\n 'issues.create',\n 'issues.read',\n 'issues.update',\n 'goals.create',\n 'goals.read',\n 'agents.read',\n 'projects.read',\n 'plugin.state.read',\n 'plugin.state.write',\n 'secrets.read-ref',\n 'events.subscribe',\n 'ui.page.register',\n 'ui.sidebar.register',\n ],\n instanceConfigSchema: {\n type: 'object',\n properties: {\n companiesDir: {\n type: 'string',\n description:\n 'Directory where assembled company workspaces are written. Auto-detected: ~/instances/default/companies in Docker setups, ~/.paperclip/instances/default/companies otherwise. Rarely needs manual override.',\n },\n templatesPath: {\n type: 'string',\n description:\n 'Path to the templates directory. Auto-detected: ~/plugin-templates in Docker setups, ~/.paperclip/plugin-templates otherwise. Rarely needs manual override.',\n },\n templatesRepoUrl: {\n type: 'string',\n default: 'https://github.com/starlein/paperclip-plugin-company-wizard/tree/main/templates',\n description:\n 'GitHub tree URL for template downloads. The default is correct for most setups \u2014 only change this if using a custom fork.',\n },\n anthropicApiKey: {\n type: 'string',\n description:\n 'Anthropic API key for the AI wizard (e.g. sk-ant-...). Required to use the AI-powered company setup path.',\n },\n paperclipUrl: {\n type: 'string',\n description:\n 'Paperclip instance URL. Defaults to http://localhost:3100 or the PAPERCLIP_PUBLIC_URL env var.',\n },\n paperclipEmail: {\n type: 'string',\n description: 'Board login email (for authenticated instances).',\n },\n paperclipPassword: {\n type: 'string',\n description: 'Board login password (for authenticated instances).',\n },\n },\n },\n entrypoints: {\n worker: './dist/worker.js',\n ui: './dist/ui',\n },\n ui: {\n slots: [\n {\n type: 'page',\n id: 'company-wizard',\n displayName: 'Company Wizard',\n exportName: 'WizardPage',\n routePath: 'company-creator',\n },\n {\n type: 'sidebar',\n id: 'company-wizard-link',\n displayName: 'Create Company',\n exportName: 'SidebarLink',\n },\n ],\n },\n};\n\nexport default manifest;\n"],
5
+ "mappings": ";AAEA,IAAM,WAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAa;AAAA,EACb,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY,CAAC,aAAa,IAAI;AAAA,EAC9B,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,YAAY;AAAA,MACV,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,kBAAkB;AAAA,QAChB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,mBAAmB;AAAA,QACjB,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,mBAAQ;",
6
6
  "names": []
7
7
  }
package/dist/ui/index.js CHANGED
@@ -4097,8 +4097,7 @@ function StepOnboarding() {
4097
4097
  /* @__PURE__ */ jsx3("span", { className: "h-1.5 w-1.5 rounded-full bg-amber-500" }),
4098
4098
  "Company Wizard plugin update: ",
4099
4099
  updateInfo.currentVersion,
4100
- " \u2192",
4101
- " ",
4100
+ " \u2192 ",
4102
4101
  updateInfo.latestVersion,
4103
4102
  updateInfo.url && /* @__PURE__ */ jsxs(
4104
4103
  "a",