@meltstudio/meltctl 4.157.1 → 4.159.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 (2) hide show
  1. package/dist/index.js +53 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var CLI_VERSION;
14
14
  var init_version = __esm({
15
15
  "src/utils/version.ts"() {
16
16
  "use strict";
17
- CLI_VERSION = "4.157.1";
17
+ CLI_VERSION = "4.159.0";
18
18
  }
19
19
  });
20
20
 
@@ -1067,6 +1067,26 @@ function createPmResource(config) {
1067
1067
  const res = await apiFetch(config, `/pm/projects/${projectId}/roadmap`);
1068
1068
  return unwrap("get roadmap", res);
1069
1069
  },
1070
+ // ─── Client portal ────────────────────────────────────────────────────
1071
+ /**
1072
+ * Composite snapshot that backs the per-project client portal page. Wraps
1073
+ * the roadmap with project identity + PM contact + a single `lastUpdated`
1074
+ * timestamp. Auth-only (any @meltstudio.co JWT) in v1; the external-auth
1075
+ * variant will mount on a different route with the same response shape.
1076
+ */
1077
+ async getPortal(projectId) {
1078
+ const res = await apiFetch(config, `/pm/projects/${projectId}/portal`);
1079
+ return unwrap("get portal", res);
1080
+ },
1081
+ /**
1082
+ * Fire-and-forget portal view log. Called once per page mount from the
1083
+ * dashboard. The server stamps `viewer_email` from the JWT, so the only
1084
+ * thing the client supplies is the project id.
1085
+ */
1086
+ async logPortalView(projectId) {
1087
+ const res = await apiFetch(config, `/pm/projects/${projectId}/portal-view`, { method: "POST" });
1088
+ return unwrap("log portal view", res, 201);
1089
+ },
1070
1090
  // ─── Project settings ─────────────────────────────────────────────────
1071
1091
  async getProjectSettings(projectId) {
1072
1092
  const res = await apiFetch(config, `/pm/project-settings/${projectId}`);
@@ -3996,6 +4016,26 @@ function createPmResource2(config) {
3996
4016
  const res = await apiFetch2(config, `/pm/projects/${projectId}/roadmap`);
3997
4017
  return unwrap2("get roadmap", res);
3998
4018
  },
4019
+ // ─── Client portal ────────────────────────────────────────────────────
4020
+ /**
4021
+ * Composite snapshot that backs the per-project client portal page. Wraps
4022
+ * the roadmap with project identity + PM contact + a single `lastUpdated`
4023
+ * timestamp. Auth-only (any @meltstudio.co JWT) in v1; the external-auth
4024
+ * variant will mount on a different route with the same response shape.
4025
+ */
4026
+ async getPortal(projectId) {
4027
+ const res = await apiFetch2(config, `/pm/projects/${projectId}/portal`);
4028
+ return unwrap2("get portal", res);
4029
+ },
4030
+ /**
4031
+ * Fire-and-forget portal view log. Called once per page mount from the
4032
+ * dashboard. The server stamps `viewer_email` from the JWT, so the only
4033
+ * thing the client supplies is the project id.
4034
+ */
4035
+ async logPortalView(projectId) {
4036
+ const res = await apiFetch2(config, `/pm/projects/${projectId}/portal-view`, { method: "POST" });
4037
+ return unwrap2("log portal view", res, 201);
4038
+ },
3999
4039
  // ─── Project settings ─────────────────────────────────────────────────
4000
4040
  async getProjectSettings(projectId) {
4001
4041
  const res = await apiFetch2(config, `/pm/project-settings/${projectId}`);
@@ -4729,7 +4769,7 @@ function registerProjectTools(server, getClient2) {
4729
4769
  "get_project_settings",
4730
4770
  {
4731
4771
  title: "Get project settings",
4732
- description: 'Returns the project\'s PM-skills settings: cadence (weekly/biweekly/monthly), start_day, demo_day, team_size, velocity_override, Linear workspace, Notion URLs, code repo path, tech-support contact, default language, project glossary, project stage. Includes a `warnings` array flagging settings whose absence breaks downstream behavior (e.g., "calculator: missing teamSize"). Returns sensible defaults if no settings row exists yet (cadence=weekly, start_day=Monday, demo_day=Friday, defaultLanguage=English).',
4772
+ description: 'Returns the project\'s PM-skills settings: cadence (weekly/biweekly/monthly), start_day, demo_day, team_size, velocity_override, Linear workspace, Notion URLs, code repo path, tech-support contact, default language, project glossary, project stage, default jump duration weeks. Includes a `warnings` array flagging settings whose absence breaks downstream behavior (e.g., "calculator: missing teamSize"). Returns sensible defaults if no settings row exists yet (cadence=weekly, start_day=Monday, demo_day=Friday, defaultLanguage=English, defaultJumpDurationWeeks=1).',
4733
4773
  inputSchema: {
4734
4774
  projectId: z22.number().int().positive().describe("Strapi project id from list_projects.")
4735
4775
  }
@@ -4765,6 +4805,9 @@ function registerProjectTools(server, getClient2) {
4765
4805
  projectGlossary: z22.string().nullable().optional().describe(
4766
4806
  "Free-text project glossary surfaced to skills as context. Pass null to clear."
4767
4807
  ),
4808
+ defaultJumpDurationWeeks: z22.number().positive().optional().describe(
4809
+ "Project-wide default weeks per maturity jump. New phases inherit this on insert; PMs override per phase via update_phase. Used by the maturity-jumps calculator: total_jumps \xD7 jumpDurationWeeks \xD7 teamSize = total_weeks. Tighter values (0.25-0.5) model fast iteration; longer values (2-3) model robust hardening. NOT NULL with default 1; omit to leave the existing value in place."
4810
+ ),
4768
4811
  projectStage: z22.enum(PROJECT_STAGE_VALUES).nullable().optional().describe(
4769
4812
  "Canonical PM-owned project stage that drives audit calibration: prototype | early_revenue | growth | scale. The server stamps projectStageSetBy + projectStageSetAt automatically. Pass null to clear."
4770
4813
  )
@@ -4817,7 +4860,8 @@ var createPhaseInputSchema = z3.object({
4817
4860
  targetShape: z3.enum(SHAPE_VALUES).default("walking"),
4818
4861
  isPrimary: z3.boolean().optional(),
4819
4862
  createdAt: z3.string().datetime().optional(),
4820
- closedAt: z3.string().datetime().nullable().optional()
4863
+ closedAt: z3.string().datetime().nullable().optional(),
4864
+ jumpDurationWeeks: z3.number().positive().optional()
4821
4865
  });
4822
4866
  function registerPhaseTools(server, getClient2) {
4823
4867
  server.registerTool(
@@ -4849,6 +4893,9 @@ function registerPhaseTools(server, getClient2) {
4849
4893
  ),
4850
4894
  closedAt: z3.string().datetime().nullable().optional().describe(
4851
4895
  "ISO 8601 timestamp. When set, the phase is created as historical (isActive=false, isPrimary=false). Use to backfill phases that closed months ago."
4896
+ ),
4897
+ jumpDurationWeeks: z3.number().positive().optional().describe(
4898
+ "Override the project default jump duration for this phase, in weeks. Tighter (0.25-0.5) for fast iteration / proof-of-concept; longer (2-3) for hardening. Omit to inherit pm_project_settings.defaultJumpDurationWeeks."
4852
4899
  )
4853
4900
  }
4854
4901
  },
@@ -4886,6 +4933,9 @@ function registerPhaseTools(server, getClient2) {
4886
4933
  ),
4887
4934
  closedAt: z3.string().datetime().nullable().optional().describe(
4888
4935
  "ISO 8601 timestamp or null. When set non-null, forces isActive=false + isPrimary=false. When null, clears the closed-at stamp."
4936
+ ),
4937
+ jumpDurationWeeks: z3.number().positive().optional().describe(
4938
+ "Override the project default jump duration for this phase, in weeks. Tighter (0.25-0.5) for fast iteration / proof-of-concept; longer (2-3) for hardening. The audit will eventually flag mismatches between jump duration and per-feature target stages."
4889
4939
  )
4890
4940
  }
4891
4941
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meltstudio/meltctl",
3
- "version": "4.157.1",
3
+ "version": "4.159.0",
4
4
  "description": "AI-first development tools for teams - set up AGENTS.md, Claude Code, Cursor, and OpenCode standards",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",