@clossys/launcher 0.1.2 → 0.3.0

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 (114) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +231 -19
  3. package/contracts/conversation-contract.md +40 -0
  4. package/dist/apply-plan-cli.d.ts +7 -0
  5. package/dist/apply-plan-cli.d.ts.map +1 -0
  6. package/dist/apply-plan-cli.js +96 -0
  7. package/dist/apply-plan-cli.js.map +1 -0
  8. package/dist/apply-plan.d.ts +79 -0
  9. package/dist/apply-plan.d.ts.map +1 -0
  10. package/dist/apply-plan.js +129 -0
  11. package/dist/apply-plan.js.map +1 -0
  12. package/dist/check-cli.d.ts.map +1 -1
  13. package/dist/check-cli.js +7 -0
  14. package/dist/check-cli.js.map +1 -1
  15. package/dist/cli.d.ts +2 -1
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/cli.js +43 -14
  18. package/dist/cli.js.map +1 -1
  19. package/dist/contract.d.ts +28 -0
  20. package/dist/contract.d.ts.map +1 -0
  21. package/dist/contract.js +78 -0
  22. package/dist/contract.js.map +1 -0
  23. package/dist/core.d.ts +50 -8
  24. package/dist/core.d.ts.map +1 -1
  25. package/dist/core.js +458 -40
  26. package/dist/core.js.map +1 -1
  27. package/dist/doctor-cli.d.ts +4 -0
  28. package/dist/doctor-cli.d.ts.map +1 -0
  29. package/dist/doctor-cli.js +32 -0
  30. package/dist/doctor-cli.js.map +1 -0
  31. package/dist/doctor.d.ts +28 -0
  32. package/dist/doctor.d.ts.map +1 -0
  33. package/dist/doctor.js +68 -0
  34. package/dist/doctor.js.map +1 -0
  35. package/dist/host.d.ts.map +1 -1
  36. package/dist/host.js +19 -1
  37. package/dist/host.js.map +1 -1
  38. package/dist/hosts.d.ts +14 -0
  39. package/dist/hosts.d.ts.map +1 -0
  40. package/dist/hosts.js +61 -0
  41. package/dist/hosts.js.map +1 -0
  42. package/dist/index.d.ts +15 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +7 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/inventory-adoption.d.ts +20 -0
  47. package/dist/inventory-adoption.d.ts.map +1 -0
  48. package/dist/inventory-adoption.js +67 -0
  49. package/dist/inventory-adoption.js.map +1 -0
  50. package/dist/manifest.d.ts +20 -0
  51. package/dist/manifest.d.ts.map +1 -0
  52. package/dist/manifest.js +106 -0
  53. package/dist/manifest.js.map +1 -0
  54. package/dist/model-profile.d.ts +46 -0
  55. package/dist/model-profile.d.ts.map +1 -0
  56. package/dist/model-profile.js +98 -0
  57. package/dist/model-profile.js.map +1 -0
  58. package/dist/product-repository.d.ts +26 -0
  59. package/dist/product-repository.d.ts.map +1 -0
  60. package/dist/product-repository.js +49 -0
  61. package/dist/product-repository.js.map +1 -0
  62. package/dist/skills.d.ts +39 -0
  63. package/dist/skills.d.ts.map +1 -0
  64. package/dist/skills.js +197 -0
  65. package/dist/skills.js.map +1 -0
  66. package/dist/types.d.ts +78 -1
  67. package/dist/types.d.ts.map +1 -1
  68. package/model-profiles/claude-code.json +10 -0
  69. package/model-profiles/codex.json +10 -0
  70. package/model-profiles/cursor.json +10 -0
  71. package/package.json +11 -5
  72. package/skeleton/README.md +15 -20
  73. package/skeleton/package.json +1 -1
  74. package/skill/SKILL.md +53 -0
  75. package/skill-catalogue/advisor/SKILL.md +52 -0
  76. package/skill-catalogue/architect/SKILL.md +42 -0
  77. package/skill-catalogue/bouncer/SKILL.md +43 -0
  78. package/skill-catalogue/builder/SKILL.md +42 -0
  79. package/skill-catalogue/butler/SKILL.md +43 -0
  80. package/skill-catalogue/controller/SKILL.md +50 -0
  81. package/skill-catalogue/customer/SKILL.md +92 -0
  82. package/skill-catalogue/designer/SKILL.md +66 -0
  83. package/skill-catalogue/giver/SKILL.md +43 -0
  84. package/skill-catalogue/influencer/SKILL.md +43 -0
  85. package/skill-catalogue/inspector/SKILL.md +42 -0
  86. package/skill-catalogue/integrator/SKILL.md +42 -0
  87. package/skill-catalogue/keeper/SKILL.md +43 -0
  88. package/skill-catalogue/launcher/SKILL.md +53 -0
  89. package/skill-catalogue/locksmith/SKILL.md +42 -0
  90. package/skill-catalogue/messenger/SKILL.md +43 -0
  91. package/skill-catalogue/observer/SKILL.md +42 -0
  92. package/skill-catalogue/publisher/SKILL.md +64 -0
  93. package/skill-catalogue/starter/SKILL.md +48 -0
  94. package/skill-catalogue/strategist/SKILL.md +85 -0
  95. package/skill-catalogue/writer/SKILL.md +56 -0
  96. package/src/apply-plan-cli.ts +94 -0
  97. package/src/apply-plan.ts +172 -0
  98. package/src/check-cli.ts +7 -0
  99. package/src/cli.ts +51 -13
  100. package/src/contract.ts +81 -0
  101. package/src/core.ts +555 -38
  102. package/src/doctor-cli.ts +33 -0
  103. package/src/doctor.ts +145 -0
  104. package/src/host.ts +17 -1
  105. package/src/hosts.ts +79 -0
  106. package/src/index.ts +36 -0
  107. package/src/inventory-adoption.ts +85 -0
  108. package/src/manifest.ts +103 -0
  109. package/src/model-profile.ts +148 -0
  110. package/src/product-repository.ts +73 -0
  111. package/src/skills.ts +225 -0
  112. package/src/types.ts +74 -1
  113. /package/skeleton/{.clossys → clossys/.state}/inventory.json +0 -0
  114. /package/skeleton/{.clossys → clossys/.state}/workspace.json +0 -0
package/dist/core.d.ts CHANGED
@@ -1,10 +1,24 @@
1
- import type { HubDocument, HubHealthReport, InventoryObservation, InventoryValidationReport, WorkspaceApplyResult, WorkspaceDecision, WorkspaceHost, WorkspaceObservation, WorkspacePlan } from "./types.js";
1
+ import type { ApplyWorkspaceOptions, HubDocument, HubHealthReport, InventoryObservation, InventoryValidationReport, WorkspaceApplyResult, WorkspaceDecision, WorkspaceHost, WorkspaceObservation, WorkspacePlan } from "./types.js";
2
2
  export declare const DEFAULT_REPOSITORY_NAME = "workspace";
3
- export declare const WORKSPACE_MARKER_REL = ".clossys/workspace.json";
4
- export declare const WORKSPACE_INVENTORY_REL = ".clossys/inventory.json";
3
+ /** The one visible, per-repository Clossys folder (#1171). Every role's output lives under it. */
4
+ export declare const CLOSSYS_DIR_REL = "clossys";
5
+ /** Machine files only: hub marker, inventory, skills manifest. Visible (not dot-hidden) so it is easy to find, but not a place a person edits by hand. */
6
+ export declare const STATE_DIR_REL: string;
7
+ export declare const WORKSPACE_MARKER_REL: string;
8
+ export declare const WORKSPACE_INVENTORY_REL: string;
9
+ export declare const CLOSSYS_README_REL: string;
10
+ /** Pre-#1171 machine-state directory. Resume migrates it automatically; see `locateHub`. */
11
+ export declare const LEGACY_STATE_DIR_REL = ".clossys";
12
+ export declare const LEGACY_WORKSPACE_MARKER_REL: string;
13
+ export declare const LEGACY_WORKSPACE_INVENTORY_REL: string;
5
14
  export declare const ADVISOR_PACKAGE = "@clossys/advisor";
15
+ export declare const LAUNCHER_PACKAGE = "@clossys/launcher";
6
16
  /** Written at generate time so this package never ships a nested AGENTS.md. */
7
- export declare const CONSUMER_AGENTS_MD = "# Account workspace\n\nThis repository is the account hub for Foundry packages. It inventories\nwhere packages are installed and coordinates engagement. It is not a\nproduct application and does not need the whole catalogue installed here.\n\nOpen this folder in your coding agent. Advisor is read-only until you\napprove a next action.\n\nRun `npx @clossys/launcher` again to resume. Public npm reads\nneed no token.\n";
17
+ export declare const CONSUMER_AGENTS_MD = "# Account workspace\n\nThis folder is the account hub for Foundry packages.\n\nAfter `npx @clossys/launcher`, the same `@clossys-*` team is composed in\nevery inventoried checkout beside this hub. Talk with `@clossys-advisor` and\n`@clossys-<package>` here or in a product repository. A missing `@` mention\nis not how we signal incompatibility \u2014 `@clossys-advisor` is the hiring check.\n\nRun `npx @clossys/launcher` again for hub health and to refresh voices on\nclones next to the hub, not as how you talk to packages.\n\nThe person in this folder is a founder, not an engineer. Speak like a\nperson. Do not dump machine identifiers, JSON, hashes, or grant fields\nunless they ask.\n\nAdvisor is read-only until the sponsor approves a next action.\n";
18
+ /** Canned guidance for inventoried product checkouts (not the hub). */
19
+ export declare const SISTER_CONSUMER_AGENTS_MD = "# Product repository\n\nThis repository is part of the same account engagement. The same\n`@clossys-<package>` team is here for intro and questions;\n`@clossys-advisor` decides hiring and compatibility. This folder is not the\nhub \u2014 engines are hired per repository, not dumped here.\n";
20
+ /** Previous generate-time guidance; used to refresh stale hub AGENTS.md on resume. */
21
+ export declare const LEGACY_CONSUMER_AGENTS_MD = "# Account workspace\n\nThis repository is the account hub for Foundry packages. It inventories\nwhere packages are installed and coordinates engagement. It is not a\nproduct application and does not need the whole catalogue installed here.\n\nThe person in this folder is a founder, not an engineer. Speak like a\nperson. Do not dump machine identifiers, JSON, hashes, or grant fields\nunless they ask.\n\nWhen there is a next step, say only:\n\n1. Where we are (one sentence).\n2. What you should do next (one sentence).\n3. What we will not do until you say yes.\n4. Whether anything will be saved to git (usually no).\n\nWait for a plain yes before changing files. \"Approved\" in chat is\npermission for that one step only. It is not a lasting grant and it\ndoes not become a commit unless someone later saves a file.\n\nOpen this folder in your coding agent. Advisor is read-only until you\napprove a next action.\n\nRun `npx @clossys/launcher` again to resume. Public npm reads\nneed no token.\n";
8
22
  export declare const CONSUMER_CLAUDE_MD = "@AGENTS.md\n";
9
23
  /** Parses a GitHub git remote. Any other host is rejected. */
10
24
  export declare function parseGitHubRemote(url: string): {
@@ -13,12 +27,23 @@ export declare function parseGitHubRemote(url: string): {
13
27
  } | null;
14
28
  /** True when the marker is a v1 account-hub document. */
15
29
  export declare function isHubDocument(value: unknown): value is HubDocument;
16
- /** Classifies a generated hub inventory (packed template skeleton/.clossys/inventory.json; the generated path does not ship) without inventing repositories. */
30
+ /** Classifies a generated hub inventory (packed template skeleton/clossys/.state/inventory.json; the generated path does not ship) without inventing repositories. */
17
31
  export declare function inspectInventory(raw: string | null): InventoryObservation;
18
32
  /** True when the tree already pins Advisor in some bucket, so adopt would not need a new version. */
19
33
  export declare function hasAdvisorPin(manifest: unknown): boolean;
20
34
  /** Collects GitHub owner, cwd shape, default-hub presence, and the public Advisor pin. */
35
+ /**
36
+ * Reads the public `@clossys/launcher` registry version, used only to grade
37
+ * catalogue-sourced skill staleness in the health report (#1183). A missing
38
+ * or unparseable read leaves staleness ungraded rather than refusing.
39
+ */
40
+ export declare function readLiveLauncherVersion(host: WorkspaceHost): string | undefined;
21
41
  export declare function observeWorkspace(host: WorkspaceHost): WorkspaceObservation;
42
+ /**
43
+ * Decides create, resume, or adopt from a cwd observation.
44
+ * Appointing means: run this from the GitHub repository that should own the hub.
45
+ */
46
+ export declare function readInventoryRepositories(host: WorkspaceHost, source: string, label: string): readonly string[];
22
47
  export declare function planWorkspace(observation: WorkspaceObservation, host: WorkspaceHost, options?: {
23
48
  inventoryPath?: string;
24
49
  }): WorkspaceDecision;
@@ -28,7 +53,7 @@ export declare function planWorkspace(observation: WorkspaceObservation, host: W
28
53
  * registry version, marking a pin older than live as a stale-pin finding and a
29
54
  * degraded report.
30
55
  */
31
- export declare function reportHubHealth(host: WorkspaceHost, directory: string, liveAdvisorVersion?: string): HubHealthReport;
56
+ export declare function reportHubHealth(host: WorkspaceHost, directory: string, liveAdvisorVersion?: string, liveLauncherVersion?: string, retiredThisRun?: readonly string[], migration?: HubHealthReport["migration"]): HubHealthReport;
32
57
  export declare function formatHubHealth(report: HubHealthReport): string;
33
58
  /**
34
59
  * Read-only inventory validation: runs `gh repo view --json name` for each
@@ -36,7 +61,24 @@ export declare function formatHubHealth(report: HubHealthReport): string;
36
61
  * a note; marks ids whose check fails as unknown. Never mutates the inventory.
37
62
  */
38
63
  export declare function checkInventoryEntries(host: WorkspaceHost, directory: string): InventoryValidationReport;
39
- /** Applies a create, resume, or adopt plan through the host. Resume does not write. */
40
- export declare function applyWorkspacePlan(host: WorkspaceHost, plan: WorkspacePlan, skeletonRoot: string): WorkspaceApplyResult;
64
+ export interface CloneMissingOutcome {
65
+ readonly inventoryId: string;
66
+ readonly result: "cloned" | "skipped-other-reason" | "failed";
67
+ readonly note: string;
68
+ }
69
+ /**
70
+ * Explicit, approved action (#1179, the #1045 pattern): clones every
71
+ * inventoried repository that resolveSisterCloneTargets's own skip pass
72
+ * identified as "just needs a clone" (CLONE_NOT_BESIDE_HUB_NOTE), and only
73
+ * those -- every other skip reason (wrong account, foundry supplier tree,
74
+ * origin mismatch, invalid slug) is left exactly as skipped, never
75
+ * attempted. Never called from resume's default path; only from the
76
+ * --clone-missing flag. Reverses the launcher README's own no-clone
77
+ * default for exactly this one approved action.
78
+ */
79
+ export declare function cloneMissingInventoryRepositories(host: WorkspaceHost, hubDirectory: string, hubOwner: string): readonly CloneMissingOutcome[];
80
+ /** Applies a create, resume, or adopt plan through the host. Resume refreshes composed skills and stale AGENTS.md guidance. */
81
+ export declare function applyWorkspacePlan(host: WorkspaceHost, plan: WorkspacePlan, skeletonRoot: string, options?: ApplyWorkspaceOptions): WorkspaceApplyResult;
82
+ export declare function launcherPackageRootFromModule(moduleUrl: string): string;
41
83
  export declare function skeletonRootFromModule(moduleUrl: string): string;
42
84
  //# sourceMappingURL=core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,WAAW,EACX,eAAe,EACf,oBAAoB,EAEpB,yBAAyB,EAEzB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,aAAa,EAGd,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,uBAAuB,cAAc,CAAC;AACnD,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAC9D,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AACjE,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAmBlD,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,waAW9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,iBAC9B,CAAC;AAoBF,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqB3F;AA8BD,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CASlE;AAaD,gKAAgK;AAChK,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,oBAAoB,CAYzE;AAkCD,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAGxD;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,oBAAoB,CAiE1E;AAwFD,wBAAgB,aAAa,CAC3B,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACvC,iBAAiB,CAgFnB;AAyJD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,eAAe,CA0CpH;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAyB/D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,yBAAyB,CA4BvG;AAgBD,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,oBAAoB,CAsCvH;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}