@starlein/paperclip-plugin-company-wizard 0.6.2 → 0.6.3
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/CHANGELOG.md +21 -0
- package/README.md +8 -4
- package/dist/manifest.js +3 -3
- package/dist/manifest.js.map +1 -1
- package/dist/ui/index.js +16 -1
- package/dist/ui/index.js.map +2 -2
- package/dist/worker.js +46 -22
- package/dist/worker.js.map +2 -2
- package/docs/PAPERCLIP-COMPATIBILITY.md +3 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,27 @@ 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.6.3] - 2026-09-08
|
|
8
|
+
|
|
9
|
+
Includes PR #50 and preserves all changes from the previously published v0.6.2 tag, which had not yet been merged into main.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Empty or incorrectly nested `templatesPath` directories no longer silently return an empty catalog and leave the wizard stuck with only **Custom**. Local, bundled, and cached sources must contain a valid base CEO template; minimal CEO-only libraries remain supported without optional presets or modules.
|
|
14
|
+
- The template data endpoint returns actionable errors, and the UI blocks unusable catalogs with recovery instructions, including empty responses from older workers.
|
|
15
|
+
- **Test Configuration** validates template availability and metadata before checking Paperclip connectivity. Previously a working API login could mask unusable templates. It does not make a paid AI request or verify model entitlement.
|
|
16
|
+
- Remote template refresh validates downloaded metadata before replacing the cache, preserving the previous working copy on invalid downloads. Explicit operator-managed paths remain untouched.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- OpenAI wizard generation uses `gpt-6-astra` with `reasoning.effort: high` for both synchronous interview calls and background configuration/bootstrap generation. Anthropic behavior and provisioned CEO/team adapter model defaults are unchanged.
|
|
21
|
+
- README and settings guidance clarify that `templatesPath` overrides `templatesRepoUrl` and is not a download destination. Clear an unintended empty local path, save, and reload to use bundled release templates; keep `companiesDir` unchanged.
|
|
22
|
+
|
|
23
|
+
### Upgrade notes
|
|
24
|
+
|
|
25
|
+
- Update the installed plugin package and reload it to activate the worker/UI fixes and new OpenAI model. Refreshing templates alone is insufficient.
|
|
26
|
+
- No existing companies, agent model settings, credentials, or local template files are automatically changed by this release.
|
|
27
|
+
|
|
7
28
|
## [0.6.2] - 2026-09-07
|
|
8
29
|
|
|
9
30
|
Follow-up review of the 0.6.1 consolidation against Paperclip source `3fb4b65f9d974d8687db8a060f20ec66b6071a79` (upstream master through 2026-09-06). Fixes two template defects that silently dropped provisioned routines and a set of instruction/doc drifts left by the Skills Store migration.
|
package/README.md
CHANGED
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
|
|
18
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 Paperclip plugin API v1 and the current published SDK with substantial bug fixes. End-to-end company setup is governed through current Paperclip workflows as of v0.5.0.
|
|
19
19
|
|
|
20
|
-
**Version 0.6.
|
|
20
|
+
**Version 0.6.3:** fixes the empty-template / **Custom-only** wizard dead end, validates template sources in **Test Configuration**, and switches OpenAI wizard generation to **GPT-6-Astra with high reasoning effort**. Includes all 0.6.2 routine, Skills Store path, and review-guidance fixes. See the [changelog](CHANGELOG.md) and [compatibility notes](docs/PAPERCLIP-COMPATIBILITY.md).
|
|
21
|
+
|
|
22
|
+
**Upgrading from 0.6.2:** update the installed plugin package and reload it; refreshing templates alone does not update the worker or AI model. If `templatesPath` points to an empty directory, clear it, save, and reload the wizard to use bundled templates. Keep it only for an intentionally populated operator-managed library; it overrides the GitHub URL and refresh never populates it. `companiesDir` does not need to change.
|
|
21
23
|
|
|
22
24
|
Requires Node **24.11+**, matching the current Paperclip SDK/shared runtime requirement.
|
|
23
25
|
|
|
@@ -57,7 +59,7 @@ Requires Node **24.11+**, matching the current Paperclip SDK/shared runtime requ
|
|
|
57
59
|
|
|
58
60
|
#### AI wizard
|
|
59
61
|
|
|
60
|
-
- Choose Anthropic or OpenAI in plugin settings. Anthropic generation uses `claude-opus-5` with adaptive thinking, max effort, and a 65,536-token ceiling; OpenAI/Codex generation uses `gpt-
|
|
62
|
+
- Choose Anthropic or OpenAI in plugin settings. Anthropic generation uses `claude-opus-5` with adaptive thinking, max effort, and a 65,536-token ceiling; OpenAI/Codex generation uses `gpt-6-astra` with high reasoning effort and the same output ceiling. The AI wizard provider/model is separate from the CEO/team adapter model settings.
|
|
61
63
|
- All provider calls run as background jobs in the worker (start + poll), eliminating the 30 s RPC timeout that previously crashed config generation
|
|
62
64
|
- AI wizard now generates domain-specific initial issues from the project brief that lead the bootstrap backlog ahead of generic scaffolding issues
|
|
63
65
|
- Preset roles are defensively merged with AI-selected roles so preset roles are no longer silently dropped
|
|
@@ -74,7 +76,7 @@ Requires Node **24.11+**, matching the current Paperclip SDK/shared runtime requ
|
|
|
74
76
|
- **Explicit approval and bootstrap controls** — select pending hires from this run, approve them with board authority, then explicitly start bootstrap; the wizard never disables the company's approval policy
|
|
75
77
|
- **Repository workspace setup** — choose between a fresh local Git repo or an existing external repository (GitHub, GitLab, etc.) via the manual wizard step or inline on the review/summary screen (available in both the manual and AI paths; the external option opens a repo-URL field)
|
|
76
78
|
- **Routine schedules** tightened to run every few hours around the clock (auto-assign every 2 h, stall-detection every 3 h, backlog grooming every 4 h) with `skip_if_active` concurrency policy
|
|
77
|
-
- **"Update templates" button** on the onboarding screen —
|
|
79
|
+
- **"Update templates" button** on the onboarding screen — validates custom GitHub downloads before atomically replacing their source-specific cache; bundled templates stay release-pinned and operator-managed local paths are never overwritten
|
|
78
80
|
|
|
79
81
|
</details>
|
|
80
82
|
|
|
@@ -605,7 +607,7 @@ Configure the plugin via **Settings → Plugins → Company Wizard** in the Pape
|
|
|
605
607
|
| Field | Required | Description |
|
|
606
608
|
| --- | --- | --- |
|
|
607
609
|
| `companiesDir` | No | Where assembled company workspaces are written. Defaults to `~/.paperclip/instances/default/companies`. Override for Docker setups. |
|
|
608
|
-
| `templatesPath` | No | Existing operator-managed template
|
|
610
|
+
| `templatesPath` | No | Existing operator-managed template root, not a download destination. Overrides `templatesRepoUrl`; never populated or overwritten by refresh. Leave empty to use bundled templates or a custom GitHub source. |
|
|
609
611
|
| `templatesRepoUrl` | No | Custom GitHub tree URL opts into a source-specific remote cache. The official default uses bundled templates. Refresh explicitly before preview to update a custom source. |
|
|
610
612
|
| `paperclipUrl` | No | Paperclip instance URL. Defaults to `http://localhost:3100` or `PAPERCLIP_PUBLIC_URL` env var. |
|
|
611
613
|
| `paperclipEmail` | No | Board login email. Required for authenticated (non-`local_trusted`) instances. |
|
|
@@ -613,6 +615,8 @@ Configure the plugin via **Settings → Plugins → Company Wizard** in the Pape
|
|
|
613
615
|
| `aiProvider` | No | AI wizard provider: `anthropic` (default) or `openai`. |
|
|
614
616
|
| `anthropicApiKey` | No | Anthropic API key for AI wizard mode. Stored as a governed secret ref. Required when `aiProvider` is `anthropic`. |
|
|
615
617
|
| `openaiApiKey` | No | OpenAI API key for GPT/Codex AI wizard mode. Stored as a governed secret ref. Required when `aiProvider` is `openai`. |
|
|
618
|
+
If the wizard only shows **Custom** and `/templates` contains empty arrays, check `templatesPath` first. It must point directly to the template root (normally containing `roles/`, `modules/`, and `presets/`), not an empty directory or the repository root above `templates/`. Clear the field to use the installed release templates; the official GitHub URL does not override an explicit local path. Save and reload the wizard. **Test Configuration** now validates template availability and metadata before checking Paperclip connectivity; it does not make a paid AI generation request or verify model entitlement. A custom CEO-only library is supported, but `roles/ceo/role.meta.json` must declare `name: "ceo"` and `base: true`.
|
|
619
|
+
|
|
616
620
|
For enriched personas: there is no plugin setting. Template fragments are applied automatically when present.
|
|
617
621
|
|
|
618
622
|
For isolated worktrees: there is no plugin setting. The policy is controlled by Paperclip instance settings under **Settings → Instance → Experimental → enableIsolatedWorkspaces** and is consumed by the plugin during provisioning. External repository base refs are taken from project/worktree settings; leaving the ref blank lets Paperclip resolve its default instead of the wizard inventing `main`, `master`, or `origin/*`.
|
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.6.
|
|
5
|
+
version: "0.6.3",
|
|
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>",
|
|
@@ -38,7 +38,7 @@ var manifest = {
|
|
|
38
38
|
},
|
|
39
39
|
templatesPath: {
|
|
40
40
|
type: "string",
|
|
41
|
-
description: "Optional
|
|
41
|
+
description: "Optional existing template root containing roles/, modules/, and presets/. Overrides the GitHub URL. Leave empty to use bundled release templates or a custom GitHub source. Refresh never populates or overwrites this directory."
|
|
42
42
|
},
|
|
43
43
|
templatesRepoUrl: {
|
|
44
44
|
type: "string",
|
|
@@ -49,7 +49,7 @@ var manifest = {
|
|
|
49
49
|
type: "string",
|
|
50
50
|
enum: ["anthropic", "openai"],
|
|
51
51
|
default: "anthropic",
|
|
52
|
-
description: "AI provider used for company generation. Anthropic uses Claude Opus 5 at max effort; OpenAI uses GPT-
|
|
52
|
+
description: "AI provider used for company generation. Anthropic uses Claude Opus 5 at max effort; OpenAI uses GPT-6-Astra at high reasoning effort."
|
|
53
53
|
},
|
|
54
54
|
anthropicApiKey: {
|
|
55
55
|
// Paperclip's secret picker submits an EnvSecretRefBinding object,
|
package/dist/manifest.js.map
CHANGED
|
@@ -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.6.
|
|
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.6.3',\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 // No numeric host floor: the loader compares this against the host version\n // `createApp` resolves (git describe \u2192 stamped build version \u2192 the server\n // package version), so a packaged install reports its package version (0.3.1)\n // and `compareSemver` would reject any CalVer floor on a current host.\n // Keep API v1/capabilities explicit and validate feature availability at runtime.\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 'skills.managed',\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 'Optional existing template root containing roles/, modules/, and presets/. Overrides the GitHub URL. Leave empty to use bundled release templates or a custom GitHub source. Refresh never populates or overwrites this directory.',\n },\n templatesRepoUrl: {\n type: 'string',\n default: 'https://github.com/starlein/paperclip-plugin-company-wizard/tree/main/templates',\n description:\n 'Optional custom GitHub tree URL. The official default uses bundled release templates; a custom URL opts into a refreshable remote cache.',\n },\n aiProvider: {\n type: 'string',\n enum: ['anthropic', 'openai'],\n default: 'anthropic',\n description:\n 'AI provider used for company generation. Anthropic uses Claude Opus 5 at max effort; OpenAI uses GPT-6-Astra at high reasoning effort.',\n },\n anthropicApiKey: {\n // Paperclip's secret picker submits an EnvSecretRefBinding object,\n // while direct keys and older hosts still submit strings. Keep both\n // representations schema-valid; the host validates governed bindings\n // and the worker resolves them before calling Anthropic.\n type: ['string', 'object'],\n format: 'secret-ref',\n description:\n 'Anthropic API key for the AI wizard. Paste a key or select a saved Paperclip company secret; Paperclip stores pasted values as governed secret references.',\n },\n openaiApiKey: {\n type: ['string', 'object'],\n format: 'secret-ref',\n description:\n 'OpenAI API key for GPT/Codex company generation. Paste a key or select a saved Paperclip company secret; required when AI Provider is openai.',\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
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;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9B,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,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,YAAY;AAAA,QACV,MAAM;AAAA,QACN,MAAM,CAAC,aAAa,QAAQ;AAAA,QAC5B,SAAS;AAAA,QACT,aACE;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,QAKf,MAAM,CAAC,UAAU,QAAQ;AAAA,QACzB,QAAQ;AAAA,QACR,aACE;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM,CAAC,UAAU,QAAQ;AAAA,QACzB,QAAQ;AAAA,QACR,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
|
@@ -8074,10 +8074,25 @@ function WizardPage(_props) {
|
|
|
8074
8074
|
/* @__PURE__ */ jsx22(LoaderCircle, { className: "h-6 w-6 animate-spin text-muted-foreground" }),
|
|
8075
8075
|
/* @__PURE__ */ jsxs16("div", { className: "space-y-1.5", children: [
|
|
8076
8076
|
/* @__PURE__ */ jsx22("p", { className: "text-sm font-medium", children: "Loading templates" }),
|
|
8077
|
-
/* @__PURE__ */ jsx22("p", { className: "text-xs text-muted-foreground max-w-xs", children: "Checking
|
|
8077
|
+
/* @__PURE__ */ jsx22("p", { className: "text-xs text-muted-foreground max-w-xs", children: "Checking bundled or operator-managed templates. A custom GitHub source may need to be downloaded \u2014 this may take a moment." })
|
|
8078
8078
|
] })
|
|
8079
8079
|
] });
|
|
8080
8080
|
}
|
|
8081
|
+
if (templates.error || !templates.roles.some((role) => role.name === "ceo")) {
|
|
8082
|
+
return /* @__PURE__ */ jsxs16(
|
|
8083
|
+
"div",
|
|
8084
|
+
{
|
|
8085
|
+
role: "alert",
|
|
8086
|
+
className: "flex flex-col items-center justify-center min-h-[400px] gap-3 px-6 text-sm text-center",
|
|
8087
|
+
children: [
|
|
8088
|
+
/* @__PURE__ */ jsx22(TriangleAlert, { className: "h-6 w-6 text-destructive" }),
|
|
8089
|
+
/* @__PURE__ */ jsx22("p", { className: "font-medium", children: "Templates are unavailable" }),
|
|
8090
|
+
/* @__PURE__ */ jsx22("p", { className: "max-w-2xl text-destructive", children: templates.error || "No CEO template was loaded." }),
|
|
8091
|
+
/* @__PURE__ */ jsx22("p", { className: "max-w-2xl text-muted-foreground", children: "Open Company Wizard plugin settings. Clear templatesPath to use bundled templates or your custom GitHub source, or point it to a populated template root. The local path overrides the GitHub URL and is never populated by refresh. Test Configuration, save, then reload this page." })
|
|
8092
|
+
]
|
|
8093
|
+
}
|
|
8094
|
+
);
|
|
8095
|
+
}
|
|
8081
8096
|
return /* @__PURE__ */ jsxs16("div", { className: "space-y-3", children: [
|
|
8082
8097
|
templates.loadErrors && templates.loadErrors.length > 0 && /* @__PURE__ */ jsx22("div", { className: "mx-4 mt-4 rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-800 dark:text-amber-200", children: /* @__PURE__ */ jsxs16("div", { className: "flex items-start gap-2", children: [
|
|
8083
8098
|
/* @__PURE__ */ jsx22(TriangleAlert, { className: "h-4 w-4 shrink-0 mt-0.5" }),
|