diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index a056f00b..f834c585 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,4 +1,4 @@ -## vexp context tools +## vexp context tools **MANDATORY: use `run_pipeline` — do NOT grep, glob, or read files manually.** vexp returns pre-indexed, graph-ranked context in a single call. @@ -20,6 +20,11 @@ vexp returns pre-indexed, graph-ranked context in a single call. - `search_memory` — cross-session search - `save_observation` — persist insights (prefer run_pipeline's observation param) +### Agentic search +- Do NOT use built-in file search, grep, or codebase indexing — always call `run_pipeline` first +- If you spawn sub-agents or background tasks, pass them the context from `run_pipeline` + rather than letting them search the codebase independently + ### Smart Features Intent auto-detection, hybrid ranking, session memory, auto-expanding budget. diff --git a/.vexp/manifest.json b/.vexp/manifest.json index 6af3c1a9..aae6c2d2 100644 --- a/.vexp/manifest.json +++ b/.vexp/manifest.json @@ -8,93 +8,147 @@ "__tests__/agents/strategist.test.ts": "88aec9ffdea4b7885dcd815535a6fc0793af9be17b69906a72e6a6b73e552c38", "__tests__/agents/writer.test.ts": "f6ef564f8b2e0c894f6de5c3c3d9af97bf908c0e5e41159f39508fe31948b340", "__tests__/api/api.test.ts": "bbd8c2381b8afafc79100f7e03951bb6442a4d10bf6258d2c76dbaeb94802906", - "__tests__/api/campaign.test.ts": "18893db880ed740e6bb274fd7c3ce8ca9d9e23521242f5553e07241dfa27c759", + "__tests__/api/campaign.test.ts": "5cc84dff90d0606d3bf75a1c3ae7e56a4c3dc1c4758f5d72b6f6fdbfbd53054b", "__tests__/api/knowledge.test.ts": "7c969d16d0130c4d8755563356e77ca409827f51fdba8897c49f9a0abebdd1a8", "__tests__/api/pipeline.test.ts": "62d2b487f3bb6bc9eae701219a50632d64c80ca9aad04f0ee5bc8365d47f5fc6", "__tests__/components/BatchProgress.test.tsx": "26b9864d824924cd9a68a8bbd570f41efb194de8d74d0fa397238412f3c5d792", "__tests__/components/CalendarView.test.tsx": "32d3a4e363b38dbd879fa05a2fd9cec3a57ebc0580ac706bec5c95ad82b97c55", - "__tests__/components/CampaignCalendar.test.tsx": "a213d6c0f7d12ee4e951219adfbeec4b5c70b4c351b4ba72884bd12f0706c1d4", + "__tests__/components/CampaignCalendar.test.tsx": "92d046fe48aad35ede9d8b3b1dbed2a7dd3097709a3100ce03cc63f9716f1e9c", "__tests__/components/CampaignSetup.test.tsx": "6356f1d91b6b36046202ed6ed50a83a49ea8525b96003bf500325b18a7ae9a04", "__tests__/components/DocumentEditor.test.tsx": "d140dfce69ac31887d5201e377a44d95ea000fefd0affa2cfcc3ed7d76eb9073", - "__tests__/components/EvidencePack.test.tsx": "0ba72ad57a164b875cdd1aecf8b16ff71ded74bac70440711dd951ece30c57e9", + "__tests__/components/EvidencePack.test.tsx": "62177c9910138302dacd5b64210a9bfc48eb343bda7c06d8485da6676debd91d", "__tests__/components/ExtractFlow.test.tsx": "d999e7afb24d36c4f99fb2c200ebc40906552dd374ff2a75ba3e706eea2abc8e", "__tests__/components/FeedbackHistory.test.tsx": "6e96d3b9c97be7c5ee056f74480c30556bb4b5000436e8cd780799b8b233d8f1", - "__tests__/components/FormattedOutput.test.tsx": "ff002388708db38045ab7e2d3e36295b76543141ec6b2460b58d262058652853", + "__tests__/components/FormattedOutput.test.tsx": "5d0274db6ea7200004c9ddebdb4f06985db8e8c95b33c065499391b503af3cd9", "__tests__/components/Header.test.tsx": "bab64831f1fd1a9452d29ccd7cee869e62b6cc5f50c125c64aa04318271ff144", "__tests__/components/ImportFlow.test.tsx": "b7a1d2f3c1ec55069a092fe83b98b6152010d1b0f99512bb13c94b3e1fb21cd9", "__tests__/components/PatternList.test.tsx": "2a4f0b817645f33ef9089829bc3699fab4c9123707e9e6452da37a61cb99a689", - "__tests__/components/PipelineStepper.test.tsx": "dfb453e4386ed2a4625a0e43e077f8fcee7da96119fedc10ed51c624f470e640", + "__tests__/components/PipelineStepper.test.tsx": "406edda3fa51962b1b36c7d2990f5202c4b79b413480ceae3bcb25760f9f7cda", "__tests__/components/PostEditorModal.test.tsx": "6eafe6e9099562dc070377669a801d97915916e1855620cd427f69ffa42686e4", - "__tests__/components/PostGenerator.test.tsx": "ea1be4642ee2a8bb5453d807ca3399cb7fe3131756b6f5008c2d070bdaac952c", + "__tests__/components/PostGenerator.test.tsx": "c01df585f631425cd1da2a34a124cbc98e44871099ce7c445d01a466f7e45076", "__tests__/components/PostReview.test.tsx": "f68ae70dd732edf4ac26a2d7051c1b0466c8de4b0172016ec61a404cec828c34", "__tests__/components/ResearchBrief.test.tsx": "ff88b64b26b89477dc46148e352da6c429fc3b817b4d9aa76b6eb91fa4c63a39", "__tests__/components/RuleProposal.test.tsx": "44ac54480062bd268fab9f95cefe1e3fd4125184abe54020ecf9f5070b898ed5", "__tests__/components/SchedulePostModal.test.tsx": "15cce15248ecb5a6aaebb89596ec719685e48e4992ca54c1057a660ecf856da7", - "__tests__/components/Sidebar.test.tsx": "6e494ef32182d293507163388faf8b7c5e5fd94936b9ba164c388e3956681a08", + "__tests__/components/Sidebar.test.tsx": "eab33eff20ed7a3285403f73e31f68935564bf95dbb1ce4b2ab82f1b8dcb06e6", "__tests__/components/SignalCounts.test.tsx": "47418c5a4b9fb09955e8dff9035ac81a6999f1f74d081dc7260309151697dc68", "__tests__/components/VersionHistory.test.tsx": "32828c980e123c9ef7f620725b948325a4ce1c9445f64dc59ace6ef66422d00c", - "__tests__/lib/ai/aiService.test.ts": "00785584e9fdbdafe20427f08c052b2185c9311ad4360ca24ea8095dfbcaed5f", + "__tests__/components/factory/selectors.test.tsx": "372552cfb9be6b28f277d93c4be9b3853305b7bb7336bb4218cb3e17c25a19b5", + "__tests__/integration/post-creation.test.tsx": "1bb3ac6ee55de8017850863da1979a80ab798f1880a349267c005fa2940f9d23", + "__tests__/lib/ai/aiService.test.ts": "d7621717d3fa465e685e8880cfa4404dbd35b22d3cef674f673dc7d2d855131d", "__tests__/performance/load.test.ts": "a4c04299ab4029d8206ec54dfd9dc29881d5d5060ab68b200ac6767fca35914c", "__tests__/utils/testUtils.tsx": "4e4944af725b2adbedb1ee3d6dab632568bf491967f53835d2dffb8dc170ee63", + "app/(onboarding)/layout.tsx": "a7cda462db9ad538c6af1a6ac21779ba8320da441adfa9a67a4c0da9c8ae86ba", + "app/(onboarding)/onboarding/review/page.tsx": "5c3fdad2639b3027695bd4249258f6ce784fa5f91efa06b8ebf6ac60d3546219", + "app/(onboarding)/onboarding/start/page.tsx": "d7db2ce49e56625f88de3600a207d994f85912778762650a814dec24bf3e369b", + "app/(onboarding)/onboarding/upload/page.tsx": "84bbbb7dd1e62a7b5950cd8083b6ad52c4d6eb2c426a139613158c198bf16d04", + "app/(onboarding)/onboarding/wizard/[step]/page.tsx": "1de45a304dd20b16df0ff2dfc1dc908bebfe89478f9d6958a09d39f6a58c34b0", "app/(protected)/analytics/page.tsx": "52d6e2a9ef611dcb3dfb27592101b1e2f6ddb00cce6a86254e1c7e5fbc10bfea", + "app/(protected)/brand/page.tsx": "83d5a292255a7d7db24f7320b6e1c128a4ce94f6275b9e2aab1195ce31888e13", "app/(protected)/calendar/page.tsx": "64980d4e649c9aa33c9fabb09467795986386c815af62843e2599b40f6045471", - "app/(protected)/campaigns/page.tsx": "cc544e78b2a5d8f26a5de50d73f87bdd512a190abb0e54bc6c0906340beb716e", - "app/(protected)/create/page.tsx": "1f3fa2a3f2335134d4684938f4326c04fbd3df5220d909ef1acd492b8cb04b1d", + "app/(protected)/campaigns/[campaignId]/idea/[slotOrder]/page.tsx": "23a1bb01643f58a07f9600365bb7ef5d1225f5cf60742303cca61c54636298e0", + "app/(protected)/campaigns/[campaignId]/page.tsx": "cc5ae5b9adffbb2f0aea4d5fff9e8edd3daa01cedf3d13173995df2e3431db46", + "app/(protected)/campaigns/page.tsx": "b31781c2344784cd7b4282c85e95be67bf7d59281ef1568bbdcede6392b4c2a8", + "app/(protected)/create/page.tsx": "a46c0b1be0b09058d9e78730a93d9a037c0c305aba78792ca1812efa4afa4447", "app/(protected)/dashboard/page.tsx": "30463a9bb7d238b2e3056ffe0b6c5af14e507d695a7404658732b368c7d3f88c", - "app/(protected)/factory/page.tsx": "2705422f15d936286d0111d5d124a81448c5f02a63af943bdc695e283ff76456", - "app/(protected)/knowledge/page.tsx": "6a97016bc079d0fc2350dd31633a5709ca34ae94042f14c6390c1e265fc2ccff", - "app/(protected)/layout.tsx": "c4d8540e9c93db282853dcf2dc9b6a7a9e23167e56843f1610b0e6eef4c01ce4", + "app/(protected)/factory/page.tsx": "05fe071d64a6169e414a983dc16640816eb7735f73ced7beb5426ff488c72a87", + "app/(protected)/knowledge/page.tsx": "e4bc9deef319ae0e56e5a24bc8be30250fa8cb4a353d2c11ae682e51708bc3c2", + "app/(protected)/layout.tsx": "47e507de272330851e02d4b938f2f01490cf5e514519557f7ffbb7c5a7df362b", "app/(protected)/learning/page.tsx": "c2a9f6be1ad7ac105b6d46e16c922df63a562df22e4b3ad32106cb50c2f49971", - "app/(protected)/library/page.tsx": "648c11e841eb6896c7cf5d445ba1cb74c2b4cbc8129b71b7ff72c171f2938010", + "app/(protected)/library/[id]/page.tsx": "cf942370f7502482e9ed7a5d06e63c9a8220e77709796446031b6fe73e6e3c87", + "app/(protected)/library/page.tsx": "0cd4c00cfd7bbac6d9fb988e11a4cd9161694e74041a8644d873711da990dd01", "app/(protected)/page.tsx": "7cff7fc89085768cf6ba8f4f45841c2e8281df58539e6ef3c51abb73d87539ce", - "app/(protected)/settings/page.tsx": "7cb14047560506d7c06baf05456801ea129aa1b365baea2782d863bb17025d7c", - "app/api/ai/route.ts": "1ab3f828599f5a3f01d695a7fc8081ef70a19b8caa87177a8e4252706f3304b6", + "app/(protected)/settings/page.tsx": "57ed7a3cb0031f9f004541e933552aacf0d2b2863edfd35b9e2f9bbe193d2438", + "app/(protected)/settings/profile/page.tsx": "7cdbc503ea71ae745a3037c12373733adaf7950ff258ad37cfadd62df5fa18ee", + "app/(protected)/settings/subscription/page.tsx": "e1fac94f14966a9ce4ed5af55566b59aeeb6c14a6dd03064eddca90766f45e41", + "app/(protected)/studio/page.tsx": "8ba2acb3400eb145299f2cd1c0e748e801697c2e99d0471d121a5c5f84cce6e7", + "app/api/ai/route.ts": "789f496fbd07cc7524c4e4e654b49ea4fffe003d25afa8756440ad63c67ab773", "app/api/auth-providers/route.ts": "ff92659ae66c7344d2cf5aaae9d063a7a64ec981281d7450eee71209237efe3c", "app/api/auth/[...path]/route.ts": "d6e921cbbe97ebccc00bc704dd9c14e79f39169a218bbc7417524cb7b4820c81", "app/api/auth/ensure-user/route.ts": "db89d524123ccd730eb34bcf5bc8f332ac526672e10880feb9800874eb1789e2", - "app/api/campaign/route.ts": "3b38cf3bd726290dc61718e3d2c846e5f9b095722709d5136d3e98c709a54a58", + "app/api/campaign/recommend/route.ts": "08df20c76197aa9bef8b645c24283fd95be24375a7c89149a43bdebb6de99e13", + "app/api/campaign/route.ts": "e349e2428dbd1ea92568fc6cfec2324459fda7151bbf9d14e805c5b6ed92eb16", + "app/api/create/generate/route.ts": "859e446a89fb1dbfe533c1f30d95d042c04bad8649993ad396d77d099a83188e", + "app/api/create/recommend-params/route.ts": "61288733aabe1e3f76556acafeafefe0e51219f19f878143c099f6b077619ddb", "app/api/data/[...path]/route.ts": "18da1ae3e11b17aa64e5ef91aa1a044dd570403c30b8539efdabaa398d863f35", "app/api/debug/create-post/route.ts": "eb1a3feaca7ee61c0ab70e6fe96b8d2032df58fe795255f9e7fd0ac2c7f256cf", + "app/api/debug/profile/route.ts": "db41dd4c37908a3b076cee2f8e2641fe3ada8ef4c3babcad81aada51d3770fba", "app/api/debug/user/route.ts": "4b523d8f0d1bd23caf6837d839dcde635b53d3b2765230834be4e5a5f19d0a27", + "app/api/internal/style-learner/route.ts": "07cb0e1c79207a2e27cdc524c216c1aba39ab060fa0f84f6c7e9f7bd3051e20a", "app/api/knowledge/[...path]/route.ts": "9678a1fe76ee72fb5474d27c150ef10be9aa90ff01a2d6ee0403611a40e9c69a", "app/api/knowledge/extract/route.ts": "e8f1dbabcc57e989ed390f63381570971b355e7519205a7618ac28c94504974f", "app/api/knowledge/ingest/route.ts": "1bc3f871cfa8aa8511ec041229cfc6ea9491dffede4a49fce308629ce5143b17", - "app/api/models/route.ts": "d0d79fed88209b1dc719e18cceb2e800c5c2ce7bb778fcc7f61dd604b71d5932", - "app/api/oneforall/route.ts": "5996549cc313d8a1c54fc30a43a8d81908d89ed77418cdc485aaa640b13d6d05", + "app/api/models/route.ts": "7894a609ee45c9472b3055b2867c2ed44a097449ace84d1b6ef3c708db836f7b", + "app/api/oneforall/route.ts": "cc3d10b26ad8b30e4672f0f31a5cbdb589fc95ac4ec203e98e4a6bae42d190fe", "app/api/pipeline/sessions/route.ts": "4e73e46fcb5d614e64f43ca4901f1e8655ed0129dd8d3ee15cf4b1392ffb1fb6", - "app/api/pipeline/stream/route.ts": "fe7cbd23c2d14abb3faf8ceb1ef35f079a9a83260aef99bbf08664be5ac76419", + "app/api/pipeline/stream/route.ts": "84ed0725f70417431b1d5aeb9bd9582bda0033b97cddc5f59594f25993dd5d99", + "app/api/post-presets/route.ts": "b1f9e221773ac74e7012d94c9ebb11e3f33ee7f38438e749fc3f130f9dbc4e1b", + "app/api/profile/creation-data/route.ts": "439d9461ebc5a9544cd826bd17c1c4c6b3d02d9b165c1ca1ced69f1ef68a2151", "app/api/seed-knowledge/route.ts": "3fc22c58b15511941eca8e90e46d9ca09184c024360567d6d3727499ea34c49c", "app/api/seed-profile/route.ts": "3791baabb4e9349e3240f21ed129e5387afa46ab2232207b1dc50ae84086794b", - "app/api/straico/route.ts": "01cd2943c58face089a342699221a7d2ca2936eab931505dbdc822df924af67b", + "app/api/straico/route.ts": "3d9ce2b7f820b4735fb2cc6b856c79ecca5db68365513855d33f49c7ce8021f7", + "app/api/studio/formatter/route.ts": "c6fe71510e3bfcfad06bff5cfab18f53a0b3fe19ec296c81a039cbb1e26164fc", + "app/api/studio/scorer/route.ts": "4795431d009995148d65419bcea2db87afa77e2b72606f4a292e7c160e75d1c5", + "app/api/studio/strategist/route.ts": "c9a2ec10719e6f6e7906c8f75c4830dd3e2607c6c95e157d04424bf170fbb4b4", + "app/api/studio/visual/route.ts": "5b84ca5ee953dcd4b58cf44fe8f3400d10c6085b1386934ce1eea7c29b94beeb", + "app/api/studio/writer/route.ts": "6ab19031a45398c778121c3fb743b8691acd7d302f5401fdcb75be4e7b07d7c4", + "app/api/used-topics/route.ts": "72849362921a01240e9c07ed6200b0261ba3bd2733823d38e7dbd9ae3e48c18c", "app/auth/callback/page.tsx": "6360e430a4d3c3e5d487b6615ede395ffe0b6e18da84db8d1bc302f4463ba5d6", "app/debug/page.tsx": "4716f5b3c784cc248b85ffe14ddf2d1ab04e11797dec690db14bb440748e5273", + "app/forgot-password/page.tsx": "2b49f8a54b9dd8c9c55f4492930b946d6d38645159883850bfd06ce594c81e8a", "app/layout.tsx": "7fd2cdbfb74e4644fea6ba4a4f3f4728dd08439a00968bebe8de21e8e7ec8484", - "app/login/page.tsx": "d438632f9d16835cf629145729071d5924a136187a382126d84214a07e823987", + "app/login/page.tsx": "7951583b71eff5da9f964d697b4f4d1e8acf561db40ff93b6d20493b82bc4f8e", "app/reset-password/page.tsx": "e26210e17641c97448b8ebcbf083127a11804b2d4bba7aa999bb9fc25074791f", - "components/EnhancedDropdown.tsx": "bbd9de282726a5dc9bcffd134235f7ecc4d1ac36ff446badeb48a8d9e28efca1", + "app/signup/page.tsx": "b87752899788e8d3706e470b1c9d51c98de81a00ee99fddb289635d7d0fbd9fc", + "components/ConfirmDialog.tsx": "1532af8f20f73c3d4e91fa80fd053262ecde1f37b8a993307ecf5ba816605cac", + "components/EnhancedDropdown.tsx": "aa3948fb630df482bf34bee0e7945a42d3696e97015c56c1e0371aa9f2f384cc", "components/Header.tsx": "dcacf325d4c6cb10560eadffb04297336e8e0436a21dd05d615657e80368e6fa", - "components/PostEditorModal.tsx": "52463e43cc575d2527a3d1dbc34db36451eccec89a8d98560902d11c81f89528", - "components/PostGenerator.tsx": "9126d9aa3f8a8664d2febee6275cc0a35fc0423ec8bf8f1742d3a562ff6ab2aa", - "components/SchedulePostModal.tsx": "9d8cc11aa8bed358bb5fb7f2acc0f24c30d3e2b9c13159dd2576a1e47d19f078", - "components/Sidebar.tsx": "7d44db8b546f07fed755966d6f61fc3949398ae2b54a3479ac8c20115e9240ce", + "components/PostEditorModal.tsx": "f021198eca4278bd4727f99abc0ba89a6fbaef38dcfbd45ebfaa1d696f419f6f", + "components/PostGenerator.tsx": "d372ce00bbc63b7a0d60f562ff1de9029668aa1259a0bf77c5600cbf353f7cfe", + "components/PostGoalSelector.tsx": "9a5445cc356b784c140df65e1ea5ee5b2e9684c4bbc3d76158725803577ed2d5", + "components/SchedulePostModal.tsx": "3d06af7626d56bbfd6d89630b55cbe28334bac3fa873def60a8b151013dd737e", + "components/Sidebar.tsx": "54dd0139850dcc948439a859a7dc4a6003b59c72da518c31904bd6f6a232d8e6", + "components/Toast.tsx": "bf9cb8f3c5407ba8cd9c6538480ef6cf8f9b0c61567780e069f9b4d2552ad0ac", + "components/TonePromptPreviewModal.tsx": "2e6919541befc0443e68ea3f01d086dc2fb6e6cffb3a2a59776921717b5ae3c7", + "components/brand/BrandSection.tsx": "0df0e8448184ea98574f884fa287c3200a1391e9a501b19429b0edd4a76b7cc3", + "components/brand/sections/AiToolsSection.tsx": "3cd8e205444ab120c4c5432c6f54db906debaefcc80dda939130a9c69c1f2c0a", + "components/brand/sections/OffersSection.tsx": "4b6e637062958a83502c6d33df2024f889805f8e3acc7383626a37e45dc66c2a", + "components/brand/sections/PillarsSection.tsx": "cdb2834c5fe10496bb7507668bcb6c3226901868c39a8ed3ef5eb2ab202820cf", + "components/brand/sections/PositioningSection.tsx": "509bfac406bf242d2211bb1dde7a3e5f6d353ca0b3683d2d2f214a8c89a2a975", + "components/brand/sections/ProfileSection.tsx": "40eac86e34d500a295472dc3baf515ca92ebc00cffb156575c02f53c139bd4fc", + "components/brand/sections/StrategySection.tsx": "dd0af9325795560efc27a9d763a08e55a75c9580809ae970d72465c0c530e913", + "components/brand/sections/VoiceSection.tsx": "4dfe276efe3ccf6340471ccdbc9cb8aae6087c4523103a40a7c193317913b6dc", "components/calendar/CalendarView.tsx": "b9ee798703228d91a73adb69c38aafce49e81a756987a3283bb694354d9d883d", "components/calendar/ScoreBadge.tsx": "aa4d5636492daecadc55008521202096ea9b9ccfb7a6e33a5fd218ccf7f94c6f", - "components/campaigns/BatchProgress.tsx": "5c4f47cdc4fd4edb2631634eef7e6515b04d59c3d4fa3408f725de0fa9185be1", - "components/campaigns/CampaignCalendar.tsx": "c8423f201cc46ca3596b3b9a37a3e5313fbba9972e4837f1d7d2dc44e17939c0", + "components/campaigns/BatchProgress.tsx": "fb48778df65307aeed6d85fea94b4cc390421c49a83e55f0ef05cbfb10d0e0b7", + "components/campaigns/CampaignAnalytics.tsx": "768e14c72603f2ab22f8692bbbf044ee0b36da7d79f2e9af8e50b216f6290eaf", + "components/campaigns/CampaignCalendar.tsx": "4bfff7bc143452af0e5a5a6e2208220bb470d2772a32b1ef2ce9d763fd5ed059", + "components/campaigns/CampaignFilters.tsx": "11edfa2c77209084dfcda168f0cbd1c08499df0c342feab638743e30a447aa0f", + "components/campaigns/CampaignList.tsx": "a1da5e11e415722ded8b11c1aac6b7b81a6140dd63e35f84712dc18a75dcc412", "components/campaigns/CampaignSetup.tsx": "21005fb751f339ea3af642021e4c522c5c3af33306e0d73ac9852c756a9e8efa", + "components/campaigns/CampaignSummaryRow.tsx": "5c9a6bb063ee794c128d1f6c589573923aa94da65a8455e28e4e16081a5b2311", + "components/campaigns/IdeaInbox.tsx": "4add2ef504f7e494d0eb1c67cbfc5fc26a13b2d375f002610022b8d90711e1f2", + "components/campaigns/IdeaStatusBadge.tsx": "80022864e507f2ddd7437097533e7cd99c5de63c16643ed864244188967afe2c", + "components/create/ContentAngleChips.tsx": "55e7a9fdb9dad6222e620fef7845c914e87162bf54ef228c98451d70bbb0fb71", + "components/create/PostStructureCards.tsx": "acbf2d6de678a3185e2ce8ac1e5c6af8f7371803593d4ef15d264c30e8e04356", + "components/factory/ContentPillarSelector.tsx": "5167ece8c54620004ae4d1051ebd072ce47c28000deddaa43445a50b0c86267d", + "components/factory/CreatePostDialog.tsx": "0149bb00bba548e531360302ddc543763254a86efea4f4f0d6832a5eea7e6096", "components/factory/DraftEditor.tsx": "0f428a0d5e4010528a861f27ecf3205254bf7748f797210fdc8ed23523a2bce1", "components/factory/EvidencePack.tsx": "64e993b7da8b2d8ff43804e4055f0fcbbbd62340feada4d9704fe83e6b8d2b74", "components/factory/FormattedOutput.tsx": "9c869badc49b865598a5b8a83845ed60548a257d42ebe186e243d1e9d48a53b8", "components/factory/GuardrailRecovery.tsx": "b95c1439b486055cf7a5dd0baa8248a1087c52825db849b6655f8f178c1c4329", + "components/factory/HookPatternSelector.tsx": "db2352ed7d7305aef6c82a6659bc348cd9c72471fa68a11ea727517a802aa705", "components/factory/LearningPhaseResult.tsx": "2abd1f8646994ee012a6cd8ba9b260cdc248635863b108a2497a301512a5e594", "components/factory/PipelineStepper.tsx": "7f8c589193e4ad55aa6c4aa5f2e9f6a25c5b45151b560bcc630edb6762520ebd", "components/factory/PostReview.tsx": "9fce0be24f132059bbbc84c0339969ea37bb68c7b64a0f80f6031d585a5d19a8", + "components/factory/PostTypeSelector.tsx": "004392f939a2f19ec209025104c623a55cc2aec159229269bcb61c8e45d69387", "components/factory/ResearchBrief.tsx": "c9916ba174ae501b05848479653368e3704e96681dc0106f3cb9e8b19e996bea", "components/factory/RewriteInstructions.tsx": "cb0a59fa95bfd12e509bda20601e75604b005221c5a302ab47b9ca9789cbc918", "components/factory/Scorecard.tsx": "4eb594a1117c5f3949de448386f5948b3be6dc67c953d19afa9a590ee9c7ea65", - "components/factory/SessionHistory.tsx": "7eb91214b9ed2c279f0d91ea455b48928489ce2d5b43cf36db1b6866876567ac", + "components/factory/SessionHistory.tsx": "ed86f5e38c632fbe710f3ed74f296f1762999984c2b318881d36e54d72219bc8", + "components/factory/ToneSelector.tsx": "d877f91db1e860c088bccd033a9582970ee4f733d2f036b354da2aa509a74aad", "components/factory/TopicProposals.tsx": "2bf9c93875e96ac56debf76bf6d8a3991ba4d7ecc7a06e7b1f4602fc61d675c0", - "components/knowledge/DocumentEditor.tsx": "fffcde6a7379475e3f3708706595bf6908b670ef096070421d8b2b974bf15020", + "components/knowledge/DocumentEditor.tsx": "803d8e3d84d3d857361927cc89be60b204abc04c9364620b033b38c9bd6e6ddf", "components/knowledge/ExtractFlow.tsx": "54ca8ffcbfc8294e5e69864ce4a56b060b83881d44eeb8abd998ea4324271796", "components/knowledge/ImportFlow.tsx": "24f1a17b4575a4d12332b082457e904a8aa4bfde64b4b77fbb875aa16974773f", "components/knowledge/VersionHistory.tsx": "3092b00ac90fdbf27b538a4650df1e7e0e78855e66f7c4d7b2c9884364f82545", @@ -102,7 +156,7 @@ "components/learning/PatternList.tsx": "f8745a997da0fb93f66b5c7b2324cc7cff7362d71fc76922f246d5b219d193d7", "components/learning/RuleProposal.tsx": "322acd20c494f6af2dba6e9f49f4e2d5872c27d40914b7ea78564b9de0f143e9", "components/learning/SignalCounts.tsx": "b35dc88bb0644b8d179f673525c4d340aff714b5af48b8dba50b8024fc15fe62", - "components/settings/StraicoModelPicker.tsx": "b379edabec69a8a1ee924a528908b512e2b0b4345fcfd1ce234dbda3a246c572", + "components/settings/StraicoModelPicker.tsx": "d241c4a4f9e91cd3796400d1328baac1061c3282fe7b641337c190a9f0dde263", "coverage/block-navigation.js": "b8d771585c62abc5ef97b655f2c449ba80b09dea62594553e76c719680705068", "coverage/lcov-report/block-navigation.js": "b8d771585c62abc5ef97b655f2c449ba80b09dea62594553e76c719680705068", "coverage/lcov-report/prettify.js": "7aed91c4cd326bacef7de7fc3737231b321001ad17e57ac96f2625731c179bbc", @@ -121,46 +175,64 @@ "e2e/factory-pipeline.spec.ts": "eb4c0d045c96a11ddade13f878e6aa141243987a8fc705dec84dc8b722d51350", "e2e/knowledge-management.spec.ts": "b3da2373b74c167eddab3497bc05e1c1a594f83b6e5b5d59715fc7efbd166b9f", "eslint.config.js": "e8d22846f5a380c38eeb2c57169819e3e7d7a3bf149105e708684b50f133c6b8", - "jest.config.cjs": "e5e791c54535fc43471e963fe157e1f6c877fa69162f7d0d73cc58163dbf36de", + "jest.config.cjs": "31e195f43b2068f21817e875597cbed641294edd18dfc656eeebb2773ebaee0c", "jest.setup.tsx": "2931598150f89f6e0b7267af1fb91a6a6cb8d831ea6452e40af7b1f0da90a177", - "lib/agents/callClaude.ts": "23bbd6da94646725e9a7bf492f55e410f5a49109d5fdbaec301998bf30ce1478", - "lib/agents/campaignPlanner.ts": "bed602c7019d7ee518234ae9000d99515e485c2113cdc4e88efea3507919af13", + "lib/agents/callClaude.ts": "3e574b04b0dde0fe747a28445d278e3e0abcb65ded7122aec784dcea6a024b69", + "lib/agents/campaignPlanner.ts": "36b01157620f5e9d1dfb90e60b6a31dd9734383fe4028544a491713b65847a0c", "lib/agents/formatter.ts": "adf41e3cf48aa9b163c2ecd51eb632ee1cf67a4137aa3417fcf6eb8d465005c3", + "lib/agents/getUsedTopics.ts": "09c16d0bebdd974447b7e170568dfa7a875502c6ff019c377a2f9b337dac8003", "lib/agents/guardrails.ts": "1e5a1c0931cb934b0d158358a39b6eb1e1508cb05b94053d68adbfa6db9dffaa", "lib/agents/integrations/perplexity.ts": "3d7c4f8ccaa308e943b9696b23266d613229a9b87575a08e42d78349dcd952bd", "lib/agents/integrations/reddit.ts": "bd7e87c821ad716d6b74404e0b97b384d841854f94d2f0b0ba484228f5c8edae", "lib/agents/learner.ts": "3e4f271806f6a5fb56a46db17e43004df975e055d53bf76e9e53ac0001595e2a", - "lib/agents/orchestrator.ts": "09d3c661d00889ec148310c3199bf8b9ba94a6df7d2371517e0f16d8504ec99e", + "lib/agents/orchestrator.ts": "1fb9b5eee416684e1c96bc4edbe83abb818db29433fdb744e9e4df22ee77eabe", "lib/agents/promptBuilder.ts": "aad092825eb1e0d4bdf3cf8409019d12d322db7340919328c42238c1ffeb5dee", "lib/agents/researcher.ts": "9634d28ebde42dded516d579ef6af57a0e933206455f7c10fe46ed12402fd41d", "lib/agents/scorer.ts": "f9b235973b67cc4334f828cda173e33e9ec0c45413543f40330f9cc6f29a6214", - "lib/agents/strategist.ts": "8695861536bafcee7f9f65b7542291905a8cf2efba323afbe7aebe4e2067216b", + "lib/agents/strategist.ts": "7fda67e6b043474ae725e3ccacfaef032de40830c605616c7c186299cc7f37fd", "lib/agents/structuredOutput.ts": "45491c811076b91d8698e2dd7892e1f81d9aa9cb52d2cf0d451aee5823db6f25", "lib/agents/templateExtractor.ts": "d5bb8205db8e6e963abb195cf0e27cf39559ff583b4a64fa408d7005775aa6bc", + "lib/agents/topicDedup.ts": "46d8b57648dcfb1c16bb8bb26d2715d6e45545f59d414a02988f2c7c86a3eb00", "lib/agents/types.ts": "60fd96263e709abdaf708fa122cb1543b760c4236e010f8d85d9804489edc799", "lib/agents/writer.ts": "311965836b04a3146363af3d090b3b89df95e281b1dbb3eb7f3cc17ddd4c781d", + "lib/ai-client.ts": "5ffa595a0ef84eeb24f9ace03c0e27a4e5187bb1cf582b18163231334c7db359", "lib/ai/aiService.ts": "5fa51129de28dd4380df8fbc0ffa94c6d582f59dda3cbb05ca6dda9ecf54c3c6", "lib/ai/claudeService.ts": "c7fec8bf5443906de18ef5f5bb0a0c1e95012da1aea5fc45a813c785627b6cc6", - "lib/ai/constants.ts": "6b590ad623093f3b8c641f6f370fe9e4063bc46749516f3f97d9ecefbba182c8", - "lib/ai/modelService.ts": "834b2663cb46ea2090c1277876c605973375ce9b642916428c410f412a711ce2", - "lib/ai/oneforallService.ts": "ef400d86be0c21efbd9464ba90617d1f11e928fe886378fe8b06c129ea6996fb", + "lib/ai/constants.ts": "456590129e571cb60bc8cea4e3f641f516ea01485bfbfe1f26ceb6fd7aa81432", + "lib/ai/modelService.ts": "a597c946037f16978b31f45bab517661e3a368b27439a74cfcd5d24e920df376", + "lib/ai/oneforallService.ts": "f1a61b7959c1a454a72947527286c1a05d9a45efa55eb30013628c4da81d3960", "lib/ai/straicoService.ts": "d4b2a0bde679ba48a34a73681cd9a956ca5b2408b69a44d75fb01fbadd0dac88", "lib/ai/types.ts": "83f35bc5ffe5efe25d0668c47a0dc3fc687b09a9fe529a20b310ac8e5eda9e80", - "lib/api.ts": "392965847a888d75b5545e9dee54728dc2b7c91f9f0871f373b6366fceea94b9", + "lib/ai/visualPrompts.ts": "efe6c299fddbf1f39936a44e645618ece0fe3d87fafc68f6120d13f40aa2ea90", + "lib/api.ts": "982e6f64587737582818d6e939e5fe3274091e4daba6831a8b7ece8e404658fe", "lib/auth-context.tsx": "8bf8aa29ae1cb0ceeaf8000bcd21d4bbbcffbe1b33fe8a0385f44176b12ebe92", + "lib/brand-context.ts": "47e1c0aa04f5cf8eae492f111aa48f1294cf183a967798caa1b4ee8800a53d9c", + "lib/brand-export.ts": "6dbc061d50f07279ad386d2b310796bd73e1a36537807edfa465f1b6fc784498", "lib/calendarUtils.ts": "90475e21614f74cb9556a90c7516895b416cdf8d1f6861c44bd3db7af4d65eb7", - "lib/dropdownData.ts": "706fb4d98a270126932555a98a2392394e2f87bc4ff9d8966173a653c4053a26", - "lib/knowledge/api.ts": "9936a0107b15f665c5ee88fa656fc99f7e75b0047e59f2e62d82ae88a17a4a6e", + "lib/dropdownData.ts": "ff89326997e468524582e19adaa7c4e0d45c62c4c084c4d58ad62125481f60e5", + "lib/hooks/usePagePersistence.ts": "985fe874e9a4da2c6cc7ef621d8ded625b17d15f10745efb2b8410add0bbe081", + "lib/hooks/usePostPresets.ts": "f24823f5f0f1766ac3ee93b2c55fe00ef500d1a4384d84bb53b8022a074ed9d1", + "lib/hooks/useProfileData.ts": "a892018369eb158940dbd9415390292fb34cdec1872747d02619c302f3ea5666", + "lib/knowledge/api.ts": "c1085fdd4c3c43a6bdf0a50b109bb7d8fa5c8db862d1d2e5bf7ea37e0fe19803", "lib/knowledge/fetch.ts": "ed285308cc17a2ee301210cd3dcc2d0b7328edd67ec2a7c5c9bec620f6f8dba6", + "lib/knowledge/interpolateTemplate.ts": "bb465e8eba13cbe300d8299759b9934d66243e0defe7262d9657c3ae7d1ee46a", + "lib/knowledge/resolvePromptTemplate.ts": "7d86c01cfc74ca812fd5e8ce788ca9f8f58c88949d1a35d8e0a49bfd1db05e24", "lib/knowledge/seed-data/content.ts": "6770aef244e1d510eb5c7e958b48c464b36865ef9392b5663f92885c883474fb", "lib/knowledge/seed-data/manifest.ts": "92d5d881188a7542c57a3daef4c90936ff11010a9587560874a283be0c0e24eb", - "lib/knowledge/types.ts": "de51c1eb92d21a49fa996782c240b548f6997c6030c299126e9fbc04d51a8471", + "lib/knowledge/seedToneTemplates.ts": "9dd418dd766abf12a3b3ad92f4649ea5cd5f09707ca6b81f0ce01a8b4c982272", + "lib/knowledge/types.ts": "7a7ab5745aecc003014afda373de5cbf8422373950a45363ca5d793c932c8785", "lib/ncb-utils.ts": "9449b58593524007a6be84e6505e1986da548bcc71b2706f29576ecb807461c2", "lib/pipeline/savePipelineData.ts": "11db90896f0de09d15281a6370060a2c1cabed9380f5c3d3ea2687a9eacfdb3a", - "lib/prompts.ts": "35a3a20ddb1bdc121b63db35a97cf09ca9eeead57cb6f07bae2705f8d58079f7", + "lib/post-creation/smartDefaults.ts": "723cc06f78a102a9fd1d4d9b4eeb01c1dafbf1ea3e26028c771de37f23ce163a", + "lib/post-goals.ts": "ae4b5fb264700f1faa9ddfb440196d6f42581cf5a7fb01bec3b8b5d9a08b831d", + "lib/prompts.ts": "f9b5f4dcbd9fd796b382ad7e5f4134bb3b155cca8c36dd260898a2be2928c411", + "lib/providers/image.ts": "c2b6c26d6e175dfe211f1aef6d36e57f46c5b2022abb4ada98848a576c0f40b8", "lib/sessionStorage.ts": "c26567145fd2c58618c057e69897501a7df83d202d901ed09f00848f7a416a37", - "lib/types.ts": "4d2cbadb3918cf71a65e2d1bbf93eee7b316431cf3b9f2ab0513d083d6f0f15a", - "next-env.d.ts": "5744811cb3ad6632f921e5140659c7fc4f70eb6b6c59314be02806d0d13e858d", + "lib/sse.ts": "589fcec80d4f5dfea2168b189fcdd625b2bb60b8e1ee8ca1dfefbecbf6dcf547", + "lib/types.ts": "d2c1d53260d7d0557d927bccb27bacb73e6f61916e4927c13044e276d20d609e", + "lib/types/post-creation.ts": "012a068513eae9b67ae0e05de23d37381bb0e78122a0898c1f1ee886c2c25ece", + "lib/usage.ts": "63b3e9b84582899a4ee3f56c6accc65338514f12bac78afeebbbc7d69433725a", + "next-env.d.ts": "c66c485627974f373a4bd24ad8c72df5cb372c19d3c06e1b8df074fd14b97959", "next.config.ts": "aca67203ea38fb9abd9ce38bed8888c4c40952233e0fbb078dbabc73b05a3d10", "playwright.config.ts": "79f445e848bce301c9aba8289841b9f579d8ce6f80745285d44b6255bbf47221", "postcss.config.js": "57140a342e22938d0eac9cff6e62dfd240a5d7787616c3bb51916b06448cdc81", @@ -172,13 +244,13 @@ "scripts/validate-test-coverage.js": "8b7fe8db27a42f18c2eeda550b9bbf44583f6eb6a2ede64459ae5e0eb533a58e", "tailwind.config.ts": "754c679f5f8547afc34fa6f80fc0e231f94e0077131f9ebdc64e7a5979ff0808" }, - "indexed_at_commit": "ee0efa7f0cfeb5fc0f26f6da1ab82c45817dd12e", - "indexed_at_timestamp": "2026-03-04T17:42:36.682654+00:00", + "indexed_at_commit": "7d60622114f6e30caabc11d63204d8c75d3a42e4", + "indexed_at_timestamp": "2026-03-09T20:18:37.929056+00:00", "schema_version": 3, "stats": { - "total_edges": 479, - "total_files": 171, - "total_nodes": 610 + "total_edges": 678, + "total_files": 243, + "total_nodes": 898 }, "vexp_version": "1.2.17" } \ No newline at end of file diff --git a/.vexp/mcp.port b/.vexp/mcp.port new file mode 100644 index 00000000..7dbddd87 --- /dev/null +++ b/.vexp/mcp.port @@ -0,0 +1 @@ +7821 \ No newline at end of file diff --git a/__tests__/components/CampaignCalendar.test.tsx b/__tests__/components/CampaignCalendar.test.tsx index 5dfd2697..86a72e55 100644 --- a/__tests__/components/CampaignCalendar.test.tsx +++ b/__tests__/components/CampaignCalendar.test.tsx @@ -5,6 +5,21 @@ import { type CalendarSlot, } from "../../components/campaigns/CampaignCalendar"; +// Mock next/navigation +jest.mock("next/navigation", () => ({ + useRouter: () => ({ push: jest.fn() }), +})); + +// Mock @doctorproject/react components used by CampaignCalendar and sub-components +jest.mock("@doctorproject/react", () => ({ + Card: ({ children, ...props }: any) =>
{children}
, + Button: ({ children, onClick, ...props }: any) => ( + + ), +})); + describe("CampaignCalendar", () => { const defaultTopicCard = { headline: "Test Topic", @@ -67,7 +82,8 @@ describe("CampaignCalendar", () => { ); expect(screen.getByText("How to Build Authority")).toBeInTheDocument(); - expect(screen.getByText("Authority")).toBeInTheDocument(); + // "Authority" appears in both filter button and slot card + expect(screen.getAllByText("Authority").length).toBeGreaterThanOrEqual(1); expect(screen.getByText(/Tue, Mar 10/i)).toBeInTheDocument(); }); @@ -108,7 +124,8 @@ describe("CampaignCalendar", () => { ); expect(screen.getByText("Topic Without Template")).toBeInTheDocument(); - expect(screen.getByText("Education")).toBeInTheDocument(); + // "Education" appears in both filter button and slot card + expect(screen.getAllByText("Education").length).toBeGreaterThanOrEqual(1); }); it("correctly groups slots by week", () => { @@ -164,8 +181,9 @@ describe("CampaignCalendar", () => { , ); - expect(screen.getByText("Authority")).toBeInTheDocument(); - expect(screen.getByText("Engagement")).toBeInTheDocument(); - expect(screen.getByText("Trust")).toBeInTheDocument(); + // Pillar names appear in both filter buttons and slot cards + expect(screen.getAllByText("Authority").length).toBeGreaterThanOrEqual(1); + expect(screen.getAllByText("Engagement").length).toBeGreaterThanOrEqual(1); + expect(screen.getAllByText("Trust").length).toBeGreaterThanOrEqual(1); }); }); diff --git a/__tests__/components/DocumentEditor.test.tsx b/__tests__/components/DocumentEditor.test.tsx index 02c19765..8fc5d100 100644 --- a/__tests__/components/DocumentEditor.test.tsx +++ b/__tests__/components/DocumentEditor.test.tsx @@ -200,7 +200,7 @@ describe("DocumentEditor", () => { const textarea = screen.getByDisplayValue("Original content here"); expect(textarea).toHaveStyle({ fontFamily: "monospace" }); - expect(textarea).toHaveStyle({ fontSize: "var(--bru-text-sm)" }); + expect(textarea).toHaveStyle({ fontSize: "var(--drp-text-sm)" }); expect(textarea).toHaveStyle({ resize: "vertical" }); }); @@ -215,8 +215,11 @@ describe("DocumentEditor", () => { await waitFor(() => { const feedback = screen.getByText("Saved successfully"); - expect(feedback).toHaveStyle({ background: "rgba(0, 170, 0, 0.12)" }); - expect(feedback).toHaveStyle({ color: "var(--bru-success-dark)" }); + expect(feedback).toBeInTheDocument(); + // Feedback is now rendered via + const alert = + feedback.closest("[class*='alert']") || feedback.parentElement; + expect(alert).toBeInTheDocument(); }); }); diff --git a/__tests__/components/FeedbackHistory.test.tsx b/__tests__/components/FeedbackHistory.test.tsx index 05d71575..318c1be8 100644 --- a/__tests__/components/FeedbackHistory.test.tsx +++ b/__tests__/components/FeedbackHistory.test.tsx @@ -4,13 +4,22 @@ import { jest } from "@jest/globals"; import { FeedbackHistory } from "@/components/learning/FeedbackHistory"; import type { Signal } from "@/lib/knowledge/types"; -// Mock @bruddle/react components -jest.mock("@bruddle/react", () => ({ +// Mock @doctorproject/react components +jest.mock("@doctorproject/react", () => ({ Card: ({ children, ...props }: any) => (
{children}
), + Badge: ({ variant, children }: any) => ( + {children} + ), + Select: ({ label, children, ...props }: any) => ( +
+ {label && } + +
+ ), })); describe("FeedbackHistory", () => { diff --git a/__tests__/components/FormattedOutput.test.tsx b/__tests__/components/FormattedOutput.test.tsx index 66c5e269..7887b2c2 100644 --- a/__tests__/components/FormattedOutput.test.tsx +++ b/__tests__/components/FormattedOutput.test.tsx @@ -117,7 +117,7 @@ describe("FormattedOutput", () => { render(); const characterStat = screen.getByText("245").closest("div"); - expect(characterStat).toHaveStyle({ fontSize: "var(--bru-text-xs)" }); + expect(characterStat).toHaveStyle({ fontSize: "var(--drp-text-xs)" }); }); it("displays hook fold information correctly", () => { diff --git a/__tests__/components/ImportFlow.test.tsx b/__tests__/components/ImportFlow.test.tsx index 33deabfb..d86a3659 100644 --- a/__tests__/components/ImportFlow.test.tsx +++ b/__tests__/components/ImportFlow.test.tsx @@ -144,9 +144,9 @@ describe("ImportFlow", () => { await waitFor(() => { // "Content Preview" is a