@memi-design/cli
Advanced tools
@@ -5,11 +5,26 @@ { | ||
| "intent": "Implement a compact React Native and Expo unread-count badge for Buzzr's existing icon-only chat bottom tab. Preserve the current Buzzr design system and selected indicator, show exact counts from 1 through 99 and 99+ above that, keep the visual badge hidden from screen readers because the tab's accessibility label already announces the full count, preserve the pulse activity dot, and add focused component coverage without adding a dependency.", | ||
| "maximumDurationMs": 1200000, | ||
| "maximumDurationMs": 720000, | ||
| "focusPaths": [ | ||
| "components/ui/CustomTabBar.tsx", | ||
| "tests/components/ui/custom-tab-bar.test.tsx", | ||
| "tests/components/ui/memi-custom-tab-bar-unread.test.tsx", | ||
| "src/theme/layout.ts", | ||
| "src/theme/palette.ts", | ||
| "app/(protected)/(tabs)/_layout.tsx" | ||
| ], | ||
| "agentBudget": { | ||
| "maxToolCalls": 16, | ||
| "maxToolOutputBytes": 160000, | ||
| "maxInputTokens": 375000, | ||
| "maxOutputTokens": 10000, | ||
| "maxReasoningTokens": 4000 | ||
| }, | ||
| "steps": [ | ||
| "Inspect CustomTabBar, its component tests, theme tokens, and existing unread semantics before editing.", | ||
| "Inspect only the listed CustomTabBar, direct test, token, and call-site evidence before editing.", | ||
| "Implement the smallest reusable unread-count presentation inside the existing tab item.", | ||
| "Render no numeric badge for zero or undefined counts and preserve the pulse activity-dot behavior.", | ||
| "Expose stable test identifiers while keeping decorative badge content out of the accessibility tree.", | ||
| "Expose stable test identifiers while keeping decorative badge content out of the accessibility tree. Do not change global Jest or React Native Testing Library configuration; query the decorative hidden badge with an explicit includeHiddenElements option.", | ||
| "Use existing spacing, color, radius, and typography tokens without adding dependencies or visible text labels.", | ||
| "Add or update focused unit coverage for exact counts, the 99+ cap, selected state, and accessible full-count labels.", | ||
| "Run the complete Expo web export and rendered React Native component contract and repair every failure." | ||
| "Use the supplied focused contract for exact counts, the 99+ cap, selected state, and accessible full-count labels; add a test only for an uncovered behavior.", | ||
| "Run only the manifest typecheck and rendered React Native contract. Report unrelated Expo web-export failures without attempting to repair them." | ||
| ], | ||
@@ -20,3 +35,6 @@ "preparation": [ | ||
| "args": [ | ||
| "ci" | ||
| "ci", | ||
| "--prefer-offline", | ||
| "--no-audit", | ||
| "--no-fund" | ||
| ], | ||
@@ -29,3 +47,3 @@ "timeoutMs": 900000 | ||
| "path": "tests/components/ui/memi-custom-tab-bar-unread.test.tsx", | ||
| "content": "import React from 'react';\nimport { render } from '@testing-library/react-native';\n\njest.mock('@/src/lib/haptics', () => ({ haptic: { selection: jest.fn() } }));\njest.mock('@expo/vector-icons/Feather', () => {\n const React = require('react');\n const { Text } = require('react-native');\n return ({ name }: { name: string }) => React.createElement(Text, null, `feather:${name}`);\n});\njest.mock('@expo/vector-icons/MaterialCommunityIcons', () => {\n const React = require('react');\n const { Text } = require('react-native');\n return ({ name }: { name: string }) => React.createElement(Text, null, `mci:${name}`);\n});\n\nimport { CustomTabBar, VISIBLE_TAB_NAMES } from '@/components/ui/CustomTabBar';\nimport { getAppPalette } from '@/src/theme/palette';\n\nconst routes = VISIBLE_TAB_NAMES.map((name) => ({ key: `${name}-key`, name, params: undefined, path: undefined }));\n\nfunction renderTabs(chatUnreadCount?: number, hasUnreadFeed = false) {\n const descriptors = Object.fromEntries(routes.map((route) => [route.key, { options: { title: route.name } }]));\n return render(\n <CustomTabBar\n chatUnreadCount={chatUnreadCount}\n descriptors={descriptors as any}\n dynamicDockGradient={['transparent', 'transparent', 'transparent']}\n feedUnreadIndicatorEnabled\n glossColor=\"transparent\"\n hasUnreadFeed={hasUnreadFeed}\n insets={{ bottom: 0, left: 0, right: 0, top: 0 }}\n navigation={{ emit: jest.fn(() => ({ defaultPrevented: false })), navigate: jest.fn() } as any}\n palette={getAppPalette()}\n responsiveMaxContentWidth={480}\n selectedVisibleRoute=\"chat\"\n state={{ history: [], index: 4, key: 'tabs', routeNames: [...VISIBLE_TAB_NAMES], routes, stale: false, type: 'tab' } as any}\n tabBarHeight={72}\n bottomPadding={8}\n />,\n );\n}\n\ndescribe('Buzzr chat unread badge contract', () => {\n it('shows exact unread counts and announces the full count on the tab', () => {\n const screen = renderTabs(7);\n expect(screen.getByTestId('tab-unread-count-chat')).toHaveTextContent('7');\n expect(screen.getByLabelText('chat, 7 unread')).toBeTruthy();\n expect(screen.getByTestId('tab-button-chat').props.accessibilityState).toEqual({ selected: true });\n });\n\n it('caps only the visual badge while preserving the full accessible count', () => {\n const screen = renderTabs(120);\n expect(screen.getByTestId('tab-unread-count-chat')).toHaveTextContent('99+');\n expect(screen.getByLabelText('chat, 120 unread')).toBeTruthy();\n expect(screen.getByTestId('tab-unread-count-chat').props.accessibilityElementsHidden).toBe(true);\n });\n\n it('renders no chat count for zero and preserves the pulse activity dot', () => {\n const screen = renderTabs(0, true);\n expect(screen.queryByTestId('tab-unread-count-chat')).toBeNull();\n expect(screen.getByTestId('tab-unread-dot-pulse')).toBeTruthy();\n });\n});\n" | ||
| "content": "import React from 'react';\nimport { render } from '@testing-library/react-native';\n\njest.mock('@/src/lib/haptics', () => ({ haptic: { selection: jest.fn() } }));\njest.mock('@expo/vector-icons/Feather', () => {\n const React = require('react');\n const { Text } = require('react-native');\n return ({ name }: { name: string }) => React.createElement(Text, null, `feather:${name}`);\n});\njest.mock('@expo/vector-icons/MaterialCommunityIcons', () => {\n const React = require('react');\n const { Text } = require('react-native');\n return ({ name }: { name: string }) => React.createElement(Text, null, `mci:${name}`);\n});\n\nimport { CustomTabBar, VISIBLE_TAB_NAMES } from '@/components/ui/CustomTabBar';\nimport { getAppPalette } from '@/src/theme/palette';\n\nconst routes = VISIBLE_TAB_NAMES.map((name) => ({ key: `${name}-key`, name, params: undefined, path: undefined }));\n\nfunction renderTabs(chatUnreadCount?: number, hasUnreadFeed = false) {\n const descriptors = Object.fromEntries(routes.map((route) => [route.key, { options: { title: route.name } }]));\n return render(\n <CustomTabBar\n chatUnreadCount={chatUnreadCount}\n descriptors={descriptors as any}\n dynamicDockGradient={['transparent', 'transparent', 'transparent']}\n feedUnreadIndicatorEnabled\n glossColor=\"transparent\"\n hasUnreadFeed={hasUnreadFeed}\n insets={{ bottom: 0, left: 0, right: 0, top: 0 }}\n navigation={{ emit: jest.fn(() => ({ defaultPrevented: false })), navigate: jest.fn() } as any}\n palette={getAppPalette()}\n responsiveMaxContentWidth={480}\n selectedVisibleRoute=\"chat\"\n state={{ history: [], index: 4, key: 'tabs', routeNames: [...VISIBLE_TAB_NAMES], routes, stale: false, type: 'tab' } as any}\n tabBarHeight={72}\n bottomPadding={8}\n />,\n );\n}\n\ndescribe('Buzzr chat unread badge contract', () => {\n it('shows exact unread counts and announces the full count on the tab', () => {\n const screen = renderTabs(7);\n expect(screen.getByTestId('tab-unread-count-chat', { includeHiddenElements: true })).toHaveTextContent('7');\n expect(screen.getByLabelText('chat, 7 unread')).toBeTruthy();\n expect(screen.getByTestId('tab-button-chat').props.accessibilityState).toEqual({ selected: true });\n });\n\n it('caps only the visual badge while preserving the full accessible count', () => {\n const screen = renderTabs(120);\n expect(screen.getByTestId('tab-unread-count-chat', { includeHiddenElements: true })).toHaveTextContent('99+');\n expect(screen.getByLabelText('chat, 120 unread')).toBeTruthy();\n expect(screen.getByTestId('tab-unread-count-chat', { includeHiddenElements: true }).props.accessibilityElementsHidden).toBe(true);\n });\n\n it('renders no chat count for zero and preserves the pulse activity dot', () => {\n const screen = renderTabs(0, true);\n expect(screen.queryByTestId('tab-unread-count-chat', { includeHiddenElements: true })).toBeNull();\n expect(screen.getByTestId('tab-unread-dot-pulse')).toBeTruthy();\n });\n});\n" | ||
| } | ||
@@ -39,3 +57,3 @@ ], | ||
| "run", | ||
| "web:export" | ||
| "typecheck" | ||
| ], | ||
@@ -46,2 +64,3 @@ "timeoutMs": 900000 | ||
| "kind": "rendered-flow", | ||
| "preflightExpectedExitCode": 1, | ||
| "command": "npm", | ||
@@ -52,2 +71,3 @@ "args": [ | ||
| "--runInBand", | ||
| "--forceExit", | ||
| "tests/components/ui/memi-custom-tab-bar-unread.test.tsx" | ||
@@ -54,0 +74,0 @@ ], |
@@ -5,5 +5,17 @@ { | ||
| "intent": "Implement a read-only SwiftUI system-status row in Nate the Bait's existing Options sheet that reports whether the iOS Reduce Motion accessibility setting is On or Off. Read the real accessibilityReduceMotion environment value, do not pretend the app can toggle the system setting, preserve the LightWood visual system and existing settings, provide a stable identifier and a combined accessible label, meet a 44-point minimum target size, and verify the journey in the real iOS app on Simulator.", | ||
| "maximumDurationMs": 1800000, | ||
| "maximumDurationMs": 720000, | ||
| "focusPaths": [ | ||
| "NateTheBait/App/GameRootView.swift", | ||
| "NateTheBaitUITests/MemiReduceMotionStatusUITests.swift", | ||
| "project.yml" | ||
| ], | ||
| "agentBudget": { | ||
| "maxToolCalls": 16, | ||
| "maxToolOutputBytes": 160000, | ||
| "maxInputTokens": 375000, | ||
| "maxOutputTokens": 10000, | ||
| "maxReasoningTokens": 4000 | ||
| }, | ||
| "steps": [ | ||
| "Inspect OptionsSheet, LightWood settings controls, typography, accessibility behavior, and existing UI tests before editing.", | ||
| "Inspect only OptionsSheet, the direct LightWood controls it uses, and the supplied UI contract before editing.", | ||
| "Implement the smallest reusable read-only status row inside the existing SwiftUI component boundaries.", | ||
@@ -13,4 +25,5 @@ "Read the real accessibilityReduceMotion environment value and display a truthful On or Off status without adding a fake toggle.", | ||
| "Expose the options-reduce-motion-status identifier and one combined accessible label containing Reduce Motion and On or Off.", | ||
| "Preserve all existing settings, legal links, sheet behavior, and application navigation.", | ||
| "Build the generated Xcode project and complete the protected Options journey on the pinned iOS Simulator." | ||
| "Keep the production target at 44 points or more; the UI fixture uses a half-point XCTest accessibility-frame projection tolerance for simulator coordinate quantization.", | ||
| "Preserve existing settings, legal links, sheet behavior, and navigation.", | ||
| "Run only the generated Xcode build and protected Options journey on the pinned iOS Simulator." | ||
| ], | ||
@@ -29,3 +42,3 @@ "preparation": [ | ||
| "path": "NateTheBaitUITests/MemiReduceMotionStatusUITests.swift", | ||
| "content": "import XCTest\n\nfinal class MemiReduceMotionStatusUITests: XCTestCase {\n @MainActor\n func testOptionsExposeTruthfulSystemReduceMotionStatus() {\n let app = XCUIApplication()\n app.launchArguments = [\"-ui-testing\"]\n app.launch()\n\n let options = app.buttons[\"Options\"]\n XCTAssertTrue(options.waitForExistence(timeout: 5))\n options.tap()\n\n let status = app.descendants(matching: .any)[\"options-reduce-motion-status\"]\n XCTAssertTrue(status.waitForExistence(timeout: 3))\n XCTAssertTrue(status.label.localizedCaseInsensitiveContains(\"Reduce Motion\"))\n XCTAssertTrue(\n status.label.localizedCaseInsensitiveContains(\"On\") ||\n status.label.localizedCaseInsensitiveContains(\"Off\")\n )\n XCTAssertGreaterThanOrEqual(status.frame.height, 44)\n XCTAssertTrue(status.isHittable)\n XCTAssertGreaterThanOrEqual(status.frame.minX, 0)\n XCTAssertLessThanOrEqual(status.frame.maxX, app.frame.maxX)\n\n let attachment = XCTAttachment(screenshot: XCUIScreen.main.screenshot())\n attachment.name = \"Nate Options Reduce Motion status\"\n attachment.lifetime = .keepAlways\n add(attachment)\n }\n}\n" | ||
| "content": "import XCTest\n\nfinal class MemiReduceMotionStatusUITests: XCTestCase {\n @MainActor\n func testOptionsExposeTruthfulSystemReduceMotionStatus() {\n let app = XCUIApplication()\n app.launchArguments = [\"-ui-testing\"]\n app.launch()\n\n let options = app.buttons[\"Options\"]\n XCTAssertTrue(options.waitForExistence(timeout: 5))\n options.tap()\n\n let status = app.descendants(matching: .any)[\"options-reduce-motion-status\"]\n XCTAssertTrue(status.waitForExistence(timeout: 3))\n XCTAssertTrue(status.label.localizedCaseInsensitiveContains(\"Reduce Motion\"))\n XCTAssertTrue(\n status.label.localizedCaseInsensitiveContains(\"On\") ||\n status.label.localizedCaseInsensitiveContains(\"Off\")\n )\n XCTAssertGreaterThanOrEqual(status.frame.height, 43.5)\n XCTAssertTrue(status.isHittable)\n XCTAssertGreaterThanOrEqual(status.frame.minX, 0)\n XCTAssertLessThanOrEqual(status.frame.maxX, app.frame.maxX)\n\n let attachment = XCTAttachment(screenshot: XCUIScreen.main.screenshot())\n attachment.name = \"Nate Options Reduce Motion status\"\n attachment.lifetime = .keepAlways\n add(attachment)\n }\n}\n" | ||
| } | ||
@@ -52,2 +65,3 @@ ], | ||
| "kind": "ios-simulator", | ||
| "preflightExpectedExitCode": 65, | ||
| "command": "xcodebuild", | ||
@@ -54,0 +68,0 @@ "args": [ |
@@ -5,5 +5,20 @@ { | ||
| "intent": "Apply emil-design-eng and interaction-design craft to implement an accessible keyboard command menu in Paraform's existing React recruiter and hiring-manager workspaces. Preserve the current Paraform visual system, open the menu from a compact chrome trigger or Control/Command-K, filter destinations without mutating navigation state, support keyboard selection, close with Escape, restore focus to the opener, and respect reduced-motion preferences without adding a production dependency.", | ||
| "maximumDurationMs": 1200000, | ||
| "maximumDurationMs": 720000, | ||
| "focusPaths": [ | ||
| "src/app/Chrome.tsx", | ||
| "src/app/recruiter/RecruiterApp.tsx", | ||
| "src/app/manager/ManagerApp.tsx", | ||
| "src/ui/kit.tsx", | ||
| "src/App.tsx", | ||
| "playwright.memi.config.ts" | ||
| ], | ||
| "agentBudget": { | ||
| "maxToolCalls": 16, | ||
| "maxToolOutputBytes": 160000, | ||
| "maxInputTokens": 375000, | ||
| "maxOutputTokens": 10000, | ||
| "maxReasoningTokens": 4000 | ||
| }, | ||
| "steps": [ | ||
| "Inspect Chrome, recruiter and manager navigation, shared UI primitives, motion tokens, and existing verification scripts before editing.", | ||
| "Inspect only Chrome, the direct recruiter and manager navigation it composes, shared UI primitives, and the supplied browser contract.", | ||
| "Implement the smallest reusable command-menu component inside the existing application boundaries.", | ||
@@ -14,3 +29,3 @@ "Expose a compact chrome trigger named Open command menu and keep the existing sidebar navigation intact.", | ||
| "Close with Escape, restore focus to the opener, preserve the established Paraform tokens, and disable decorative motion when reduced motion is requested.", | ||
| "Run the production build and the rendered recruiter keyboard journey and repair every failure." | ||
| "Run only the production build and rendered recruiter keyboard journey; report unrelated failures without broadening scope." | ||
| ], | ||
@@ -21,3 +36,6 @@ "preparation": [ | ||
| "args": [ | ||
| "ci" | ||
| "ci", | ||
| "--prefer-offline", | ||
| "--no-audit", | ||
| "--no-fund" | ||
| ], | ||
@@ -32,2 +50,5 @@ "timeoutMs": 600000 | ||
| "--package-lock=false", | ||
| "--prefer-offline", | ||
| "--no-audit", | ||
| "--no-fund", | ||
| "@playwright/test@1.60.0" | ||
@@ -69,2 +90,3 @@ ], | ||
| "kind": "rendered-flow", | ||
| "preflightExpectedExitCode": 1, | ||
| "command": "npx", | ||
@@ -71,0 +93,0 @@ "args": [ |
@@ -5,5 +5,5 @@ # Current Memi release truth | ||
| Manifest updated: 2026-07-31 | ||
| Manifest updated: 2026-08-01 | ||
| > Engine 2.7.1 is not the current public release. The public activation path remains 2.7.0 until independent live-release verification passes. | ||
| > Engine 2.7.3 is not the current public release. The public activation path remains 2.7.1 until independent live-release verification passes. | ||
@@ -15,3 +15,3 @@ | ||
| |---|---:|---| | ||
| | Engine candidate (unreleased) | `2.7.1` | [GitHub release](https://github.com/memi-design/memi/releases/tag/v2.7.0) · [npm](https://www.npmjs.com/package/@memi-design/cli) | | ||
| | Engine candidate (unreleased) | `2.7.3` | [GitHub release](https://github.com/memi-design/memi/releases/tag/v2.7.1) · [npm](https://www.npmjs.com/package/@memi-design/cli) | | ||
| | Studio | `2.5.0` | [Studio release](https://github.com/memi-design/memi-studio/releases/tag/v2.5.0) | | ||
@@ -24,3 +24,3 @@ | Website | `1.0.4` | [memoire.cv](https://www.memoire.cv) | | ||
| - Source commit: Not assigned. npm provenance must bind the eventual publish commit. | ||
| - GitHub tag: `v2.7.1` | ||
| - GitHub tag: `v2.7.3` | ||
| - GitHub Action major channel: `v2` | ||
@@ -38,3 +38,3 @@ - MCP server: `io.github.sarveshsea/memi` | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.0 diagnose . --json --no-write --fail-on none | ||
| npx -y @memi-design/cli@2.7.1 diagnose . --json --no-write --fail-on none | ||
| ``` | ||
@@ -41,0 +41,0 @@ |
@@ -9,3 +9,3 @@ # Release Gates | ||
| Current verified engine release: `2.7.0`. | ||
| Current verified engine release: `2.7.1`. | ||
@@ -141,3 +141,3 @@ Use these checks before announcing, tagging, or publishing a public release. | ||
| - npm latest: current `package.json` version, currently `2.7.0` | ||
| - npm latest: current `package.json` version, currently `2.7.1` | ||
| - npm README phrase: `read-only design engineering audit and skill layer for coding agents` | ||
@@ -144,0 +144,0 @@ - npm install command: `npm i -g @memi-design/cli` |
@@ -5,3 +5,3 @@ { | ||
| "display_name": "memi", | ||
| "version": "2.7.1", | ||
| "version": "2.7.3", | ||
| "description": "Memi is the read-only design engineering audit and skill layer for coding agents.", | ||
@@ -8,0 +8,0 @@ "long_description": "memi gives MCP-compatible agents design-system memory and interface-quality tools. It exposes Apple-platform briefs, approval-gated SwiftUI scaffolds, UI audits, Tailwind tokens, shadcn registry workflows, Figma context, design docs, and implementation diagnostics through the @memi-design/cli npm package.", |
@@ -6,3 +6,3 @@ const { spawn } = require("node:child_process"); | ||
| "-y", | ||
| "@memi-design/cli@2.7.1", | ||
| "@memi-design/cli@2.7.3", | ||
| "mcp", "start", "--no-figma", | ||
@@ -9,0 +9,0 @@ ]; |
+3
-3
| { | ||
| "name": "@memi-design/cli", | ||
| "version": "2.7.1", | ||
| "version": "2.7.3", | ||
| "mcpName": "io.github.sarveshsea/memi", | ||
@@ -29,3 +29,3 @@ "description": "Memi is the read-only design engineering audit and skill layer for coding agents.", | ||
| "build:codex-plugin-assets": "node scripts/generate-codex-plugin-assets.mjs", | ||
| "build:mcpb": "mkdir -p .dist && npx -y @anthropic-ai/mcpb@latest validate mcpb/manifest.json && npx -y @anthropic-ai/mcpb@latest pack mcpb .dist/memi-2.7.1.mcpb", | ||
| "build:mcpb": "mkdir -p .dist && npx -y @anthropic-ai/mcpb@latest validate mcpb/manifest.json && npx -y @anthropic-ai/mcpb@latest pack mcpb .dist/memi-2.7.3.mcpb", | ||
| "bench:cli": "node scripts/bench-cli.mjs", | ||
@@ -58,3 +58,3 @@ "growth:status": "node scripts/growth-status.mjs", | ||
| "check:public-release": "node scripts/check-public-release-gate.mjs", | ||
| "publish:smithery": "npm run build:mcpb && npx -y smithery@latest mcp publish .dist/memi-2.7.1.mcpb -n sarveshsea/memi", | ||
| "publish:smithery": "npm run build:mcpb && npx -y smithery@latest mcp publish .dist/memi-2.7.3.mcpb -n sarveshsea/memi", | ||
| "security:audit": "npm audit --omit=dev --audit-level=high", | ||
@@ -61,0 +61,0 @@ "validate:presets": "node scripts/build-presets.mjs", |
+5
-5
@@ -30,3 +30,3 @@ <p align="center"> | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.0 diagnose . --json --no-write --fail-on none | ||
| npx -y @memi-design/cli@2.7.1 diagnose . --json --no-write --fail-on none | ||
| ``` | ||
@@ -160,6 +160,6 @@ | ||
| | --- | --- | --- | | ||
| | One-time CLI audit | `npx -y @memi-design/cli@2.7.0 diagnose . --no-write` | Trying Memi without installing | | ||
| | One-time CLI audit | `npx -y @memi-design/cli@2.7.1 diagnose . --no-write` | Trying Memi without installing | | ||
| | Global CLI | `npm i -g @memi-design/cli` | Daily local use | | ||
| | Agent Skill | `npx skills add memi-design/memi --skill audit-frontend-design` | Codex, Claude, Cursor, and compatible agents | | ||
| | GitHub Action | `uses: memi-design/memi@00be64b9bd49fab57f4f54f678550a2021f6d1ae` | Pull-request design CI | | ||
| | GitHub Action | `uses: memi-design/memi@5c694ba7a64ab395bdf5bfe7aedc0f6b3e81612f` | Pull-request design CI | | ||
| | MCP server | `memi mcp start --no-figma` | Any MCP client | | ||
@@ -191,5 +191,5 @@ | Studio | `brew install --cask memi-design/memi/memi-studio` | Supervised macOS workflows | | ||
| fetch-depth: 0 | ||
| - uses: memi-design/memi@00be64b9bd49fab57f4f54f678550a2021f6d1ae # v2.7.0 | ||
| - uses: memi-design/memi@5c694ba7a64ab395bdf5bfe7aedc0f6b3e81612f # v2.7.1 | ||
| with: | ||
| version: "2.7.0" | ||
| version: "2.7.1" | ||
| report: true | ||
@@ -196,0 +196,0 @@ upload-sarif: true |
+3
-3
@@ -6,3 +6,3 @@ { | ||
| "description": "Memi is the read-only design engineering audit and skill layer for coding agents.", | ||
| "version": "2.7.1", | ||
| "version": "2.7.3", | ||
| "websiteUrl": "https://memoire.cv", | ||
@@ -18,3 +18,3 @@ "repository": { | ||
| "identifier": "@memi-design/cli", | ||
| "version": "2.7.1", | ||
| "version": "2.7.3", | ||
| "transport": { | ||
@@ -42,5 +42,5 @@ "type": "stdio" | ||
| "tool": "memi-release", | ||
| "version": "2.7.1" | ||
| "version": "2.7.3" | ||
| } | ||
| } | ||
| } |
@@ -15,3 +15,3 @@ --- | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 diagnose . --json --no-write --fail-on none | ||
| npx -y @memi-design/cli@2.7.3 diagnose . --json --no-write --fail-on none | ||
| ``` | ||
@@ -22,4 +22,4 @@ | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 ux audit . --json --no-write | ||
| npx -y @memi-design/cli@2.7.1 craft audit . --json --no-write | ||
| npx -y @memi-design/cli@2.7.3 ux audit . --json --no-write | ||
| npx -y @memi-design/cli@2.7.3 craft audit . --json --no-write | ||
| ``` | ||
@@ -26,0 +26,0 @@ |
@@ -13,3 +13,3 @@ --- | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 ios brief --platform ios --intent "<task>" --detail compact --json | ||
| npx -y @memi-design/cli@2.7.3 ios brief --platform ios --intent "<task>" --detail compact --json | ||
| ``` | ||
@@ -24,3 +24,3 @@ | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 ios scaffold FeatureName \ | ||
| npx -y @memi-design/cli@2.7.3 ios scaffold FeatureName \ | ||
| --kind screen \ | ||
@@ -27,0 +27,0 @@ --module AppModule \ |
@@ -15,3 +15,3 @@ --- | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 init --team --kit universal --json | ||
| npx -y @memi-design/cli@2.7.3 init --team --kit universal --json | ||
| ``` | ||
@@ -24,3 +24,3 @@ | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 ci . --no-scope --report --json | ||
| npx -y @memi-design/cli@2.7.3 ci . --no-scope --report --json | ||
| ``` | ||
@@ -49,3 +49,3 @@ | ||
| with: | ||
| version: "2.7.1" | ||
| version: "2.7.3" | ||
| ``` | ||
@@ -52,0 +52,0 @@ |
@@ -27,3 +27,3 @@ --- | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 agent brief . --intent "<interface task>" --detail compact --json | ||
| npx -y @memi-design/cli@2.7.3 agent brief . --intent "<interface task>" --detail compact --json | ||
| ``` | ||
@@ -30,0 +30,0 @@ |
| { | ||
| "version": "2.7.1", | ||
| "version": "2.7.3", | ||
| "description": "Mémoire skill registry — defines available skills, activation contexts, and dependencies", | ||
@@ -4,0 +4,0 @@ "defaultSkill": "SUPERPOWER", |
@@ -15,3 +15,3 @@ --- | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 agent brief . --intent "<user's interface task>" --detail compact --json | ||
| npx -y @memi-design/cli@2.7.3 agent brief . --intent "<user's interface task>" --detail compact --json | ||
| ``` | ||
@@ -22,3 +22,3 @@ | ||
| ```bash | ||
| npx -y @memi-design/cli@2.7.1 tokens --from ./src --report --json | ||
| npx -y @memi-design/cli@2.7.3 tokens --from ./src --report --json | ||
| ``` | ||
@@ -25,0 +25,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
1990260
-1.47%12923
-22.64%