neotoma 0.3.0 → 0.3.2
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/README.md +9 -9
- package/dist/actions.js +2 -2
- package/dist/actions.js.map +1 -1
- package/dist/cli/bootstrap.js +0 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +158 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/crypto/auth.js +1 -1
- package/dist/crypto/auth.js.map +1 -1
- package/dist/mcp_ws_bridge.js +1 -1
- package/dist/mcp_ws_bridge.js.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/services/field_converters.js +3 -3
- package/dist/services/field_converters.js.map +1 -1
- package/dist/services/field_validation.js +1 -1
- package/dist/services/field_validation.js.map +1 -1
- package/dist/services/mcp_auth.js +1 -1
- package/dist/services/mcp_auth.js.map +1 -1
- package/dist/services/mcp_oauth.js +1 -1
- package/dist/services/mcp_oauth.js.map +1 -1
- package/dist/services/parquet_reader.js +1 -1
- package/dist/services/parquet_reader.js.map +1 -1
- package/dist/services/public_key_registry.js +2 -2
- package/dist/services/public_key_registry.js.map +1 -1
- package/package.json +27 -7
- package/.claude/CLAUDE.md +0 -81
- package/.claude/rules/agent_constraints.md +0 -201
- package/.claude/rules/agent_instructions_sync_rules.md +0 -100
- package/.claude/rules/agent_test_execution.md +0 -358
- package/.claude/rules/autonomous_execution.md +0 -119
- package/.claude/rules/bug_fix_detection.md +0 -145
- package/.claude/rules/bug_learning.md +0 -154
- package/.claude/rules/checkpoint_management.md +0 -194
- package/.claude/rules/configuration_management.md +0 -159
- package/.claude/rules/content_style_enforcement.md +0 -141
- package/.claude/rules/dependency_installation.md +0 -148
- package/.claude/rules/document_loading_order.md +0 -197
- package/.claude/rules/documentation_rules.md +0 -169
- package/.claude/rules/downstream_doc_updates.md +0 -269
- package/.claude/rules/env_check.md +0 -55
- package/.claude/rules/environment_variables_1password.md +0 -315
- package/.claude/rules/environment_variables_env_file.md +0 -124
- package/.claude/rules/feature_unit_detection.md +0 -132
- package/.claude/rules/file_naming.md +0 -34
- package/.claude/rules/git_remote_sync.md +0 -242
- package/.claude/rules/instruction_documentation.md +0 -287
- package/.claude/rules/native_browser_debugging.md +0 -68
- package/.claude/rules/plan_execution_testing.md +0 -101
- package/.claude/rules/plan_format.md +0 -38
- package/.claude/rules/post_build_testing.md +0 -162
- package/.claude/rules/prefer_cli_tools.md +0 -233
- package/.claude/rules/readme_maintenance.md +0 -156
- package/.claude/rules/release_detection.md +0 -95
- package/.claude/rules/release_status_readme_update.md +0 -62
- package/.claude/rules/risk_management.md +0 -170
- package/.claude/rules/security.md +0 -168
- package/.claude/rules/social_media_conventions.md +0 -42
- package/.claude/rules/test_first_workflow.md +0 -344
- package/.claude/rules/worktree_env.md +0 -56
- package/.claude/settings.json +0 -5
- package/.claude/skills/commit.md +0 -762
- package/.claude/skills/create_feature_unit.md +0 -176
- package/.claude/skills/create_release.md +0 -428
- package/.claude/skills/fix_feature_bug.md +0 -93
- package/.claude/skills/pull.md +0 -314
- package/.claude/skills/setup_symlinks.md +0 -228
- package/.codex/config.toml +0 -92
- package/.cursor/commands/analyze.md +0 -574
- package/.cursor/commands/commit.md +0 -768
- package/.cursor/commands/create_feature_unit.md +0 -182
- package/.cursor/commands/create_prototype.md +0 -95
- package/.cursor/commands/create_release.md +0 -434
- package/.cursor/commands/create_rule.md +0 -296
- package/.cursor/commands/debug.md +0 -985
- package/.cursor/commands/final_review.md +0 -97
- package/.cursor/commands/fix_feature_bug.md +0 -99
- package/.cursor/commands/manage_error_debugging.md +0 -186
- package/.cursor/commands/migrate_plans.md +0 -499
- package/.cursor/commands/publish.md +0 -559
- package/.cursor/commands/pull.md +0 -320
- package/.cursor/commands/push.md +0 -259
- package/.cursor/commands/report.md +0 -1506
- package/.cursor/commands/report_error.md +0 -1505
- package/.cursor/commands/run_feature_workflow.md +0 -83
- package/.cursor/commands/setup_commands.md +0 -87
- package/.cursor/commands/setup_symlinks.md +0 -234
- package/.cursor/commands/sync_env_from_1password.md +0 -321
- package/.cursor/commands.json +0 -100
- package/.cursor/environment.json +0 -5
- package/.cursor/mcp.json.template +0 -16
- package/.cursor/plans/agent_skills_analysis_aac0f1b6.plan.md +0 -949
- package/.cursor/plans/agent_trust_framework_eb38ca7d.plan.md +0 -634
- package/.cursor/plans/all-storage-unstructured_provenance_df0b7a8f.plan.md +0 -112
- package/.cursor/plans/automated_error_debugging_cloud_agents.plan.md +0 -526
- package/.cursor/plans/automated_error_debugging_cursor_cli.plan.md +0 -599
- package/.cursor/plans/automated_error_debugging_localhost_clarified.plan.md +0 -510
- package/.cursor/plans/bug_report_and_contribution_client_guidance.plan.md +0 -143
- package/.cursor/plans/convert_1password_sync_to_mcp_343ca61c.plan.md +0 -282
- package/.cursor/plans/debug_pending_errors_command.plan.md +0 -531
- package/.cursor/plans/error_reporting_command_8868f27b.plan.md +0 -255
- package/.cursor/plans/mcp-cli-action-item-01-openapi-core.plan.md +0 -30
- package/.cursor/plans/mcp-cli-action-item-02-openapi-mcp-cli-mapping.plan.md +0 -18
- package/.cursor/plans/mcp-cli-action-item-03-cli-equivalent-logging.plan.md +0 -18
- package/.cursor/plans/mcp-cli-action-item-06-error-taxonomy.plan.md +0 -18
- package/.cursor/plans/mcp-cli-action-item-07-fixture-replay-graphs.plan.md +0 -18
- package/.cursor/plans/mcp-cli-action-item-08-cli-reference-executor.plan.md +0 -18
- package/.cursor/plans/mcp-cli-action-item-09-mcp-tools-atomic.plan.md +0 -18
- package/.cursor/plans/mcp-cli-action-item-10-canonical-walkthrough.plan.md +0 -18
- package/.cursor/plans/mcp-cli-action-item-11-fixtures-expected-outputs.plan.md +0 -18
- package/.cursor/plans/mcp-cli-action-item-12-failure-gallery.plan.md +0 -18
- package/.cursor/plans/mcp_source-path_documentation_5ce48609.plan.md +0 -83
- package/.cursor/plans/me_and_get_authenticated_user_response_updates.plan.md +0 -125
- package/.cursor/plans/multi-llm_provider_support_3fdeb361.plan.md +0 -120
- package/.cursor/plans/plan_migration_command_integrated.plan.md +0 -393
- package/.cursor/plans/schema_icon_enhancements_plan.md +0 -533
- package/.cursor/plans/site-react-tailwind-parity.plan.md +0 -82
- package/.cursor/plans/sources-first-ingestion-v8.plan.md +0 -0
- package/.cursor/plans/sources-first_ingestion_v10_baef2ba2.plan.md +0 -363
- package/.cursor/plans/test_coverage_gap_analysis_9cb70022.plan.md +0 -39
- package/.cursor/port_to_foundation_analysis.md +0 -217
- package/.cursor/rules/agent_constraints.mdc +0 -210
- package/.cursor/rules/autonomous_execution.mdc +0 -128
- package/.cursor/rules/configuration_management.mdc +0 -168
- package/.cursor/rules/cursor_rules_editing.mdc +0 -99
- package/.cursor/rules/cursor_rules_sync.mdc +0 -74
- package/.cursor/rules/cursor_rules_sync_requirement.mdc +0 -156
- package/.cursor/rules/developer_agent_instructions_sync_rules.mdc +0 -109
- package/.cursor/rules/document_loading_order.mdc +0 -206
- package/.cursor/rules/instruction_documentation.mdc +0 -296
- package/.cursor/rules/risk_management.mdc +0 -179
- package/.cursor/rules/security.mdc +0 -177
- package/.cursor/skipped_records/companies_skipped.json +0 -27
- package/.cursor/skipped_records/contacts_skipped.json +0 -23
- package/.cursor/skipped_records/goals_skipped.json +0 -7
- package/.cursor/skipped_records/people_skipped.json +0 -14
- package/.cursor/skipped_records/projects_skipped.json +0 -39
- package/.cursor/worktrees.json +0 -12
- package/.dockerignore +0 -9
- package/.env.example +0 -84
- package/.eslintrc.json +0 -11
- package/.github/workflows/deploy-pages-site.yml +0 -55
- package/.gitmodules +0 -12
- package/.husky/pre-commit +0 -42
- package/.mcp.json +0 -13
- package/.nvmrc +0 -1
- package/.prettierrc.json +0 -7
- package/.vscode/extensions.json +0 -5
- package/.vscode/settings.json +0 -47
- package/CONTRIBUTING.md +0 -23
- package/Dockerfile +0 -28
- package/SECURITY.md +0 -41
- package/components.json +0 -21
- package/cursor_rules_manifest.json +0 -28
- package/dist/__fixtures__/helpers.d.ts +0 -91
- package/dist/__fixtures__/helpers.d.ts.map +0 -1
- package/dist/__fixtures__/helpers.js +0 -384
- package/dist/__fixtures__/helpers.js.map +0 -1
- package/dist/__fixtures__/types.d.ts +0 -285
- package/dist/__fixtures__/types.d.ts.map +0 -1
- package/dist/__fixtures__/types.js +0 -7
- package/dist/__fixtures__/types.js.map +0 -1
- package/dist/__fixtures__/validation.d.ts +0 -45
- package/dist/__fixtures__/validation.d.ts.map +0 -1
- package/dist/__fixtures__/validation.js +0 -311
- package/dist/__fixtures__/validation.js.map +0 -1
- package/dist/config/plaid.d.ts +0 -21
- package/dist/config/plaid.d.ts.map +0 -1
- package/dist/config/plaid.js +0 -38
- package/dist/config/plaid.js.map +0 -1
- package/dist/events/event_emitter.d.ts +0 -24
- package/dist/events/event_emitter.d.ts.map +0 -1
- package/dist/events/event_emitter.js +0 -85
- package/dist/events/event_emitter.js.map +0 -1
- package/dist/events/event_log.d.ts +0 -23
- package/dist/events/event_log.d.ts.map +0 -1
- package/dist/events/event_log.js +0 -77
- package/dist/events/event_log.js.map +0 -1
- package/dist/events/event_schema.d.ts +0 -58
- package/dist/events/event_schema.d.ts.map +0 -1
- package/dist/events/event_schema.js +0 -43
- package/dist/events/event_schema.js.map +0 -1
- package/dist/events/event_validator.d.ts +0 -23
- package/dist/events/event_validator.d.ts.map +0 -1
- package/dist/events/event_validator.js +0 -90
- package/dist/events/event_validator.js.map +0 -1
- package/dist/events/index.d.ts +0 -9
- package/dist/events/index.d.ts.map +0 -1
- package/dist/events/index.js +0 -9
- package/dist/events/index.js.map +0 -1
- package/dist/events/replay.d.ts +0 -27
- package/dist/events/replay.d.ts.map +0 -1
- package/dist/events/replay.js +0 -62
- package/dist/events/replay.js.map +0 -1
- package/dist/hashing/hash_chain.d.ts +0 -31
- package/dist/hashing/hash_chain.d.ts.map +0 -1
- package/dist/hashing/hash_chain.js +0 -52
- package/dist/hashing/hash_chain.js.map +0 -1
- package/dist/integrations/plaid/client.d.ts +0 -53
- package/dist/integrations/plaid/client.d.ts.map +0 -1
- package/dist/integrations/plaid/client.js +0 -224
- package/dist/integrations/plaid/client.js.map +0 -1
- package/dist/integrations/plaid/normalizers.d.ts +0 -26
- package/dist/integrations/plaid/normalizers.d.ts.map +0 -1
- package/dist/integrations/plaid/normalizers.js +0 -166
- package/dist/integrations/plaid/normalizers.js.map +0 -1
- package/dist/integrations/providers/asana.d.ts +0 -9
- package/dist/integrations/providers/asana.d.ts.map +0 -1
- package/dist/integrations/providers/asana.js +0 -62
- package/dist/integrations/providers/asana.js.map +0 -1
- package/dist/integrations/providers/base.d.ts +0 -17
- package/dist/integrations/providers/base.d.ts.map +0 -1
- package/dist/integrations/providers/base.js +0 -64
- package/dist/integrations/providers/base.js.map +0 -1
- package/dist/integrations/providers/facebook.d.ts +0 -9
- package/dist/integrations/providers/facebook.d.ts.map +0 -1
- package/dist/integrations/providers/facebook.js +0 -58
- package/dist/integrations/providers/facebook.js.map +0 -1
- package/dist/integrations/providers/gmail.d.ts +0 -10
- package/dist/integrations/providers/gmail.d.ts.map +0 -1
- package/dist/integrations/providers/gmail.js +0 -67
- package/dist/integrations/providers/gmail.js.map +0 -1
- package/dist/integrations/providers/index.d.ts +0 -6
- package/dist/integrations/providers/index.d.ts.map +0 -1
- package/dist/integrations/providers/index.js +0 -25
- package/dist/integrations/providers/index.js.map +0 -1
- package/dist/integrations/providers/instagram.d.ts +0 -9
- package/dist/integrations/providers/instagram.d.ts.map +0 -1
- package/dist/integrations/providers/instagram.js +0 -47
- package/dist/integrations/providers/instagram.js.map +0 -1
- package/dist/integrations/providers/metadata.d.ts +0 -25
- package/dist/integrations/providers/metadata.d.ts.map +0 -1
- package/dist/integrations/providers/metadata.js +0 -407
- package/dist/integrations/providers/metadata.js.map +0 -1
- package/dist/integrations/providers/types.d.ts +0 -39
- package/dist/integrations/providers/types.d.ts.map +0 -1
- package/dist/integrations/providers/types.js +0 -2
- package/dist/integrations/providers/types.js.map +0 -1
- package/dist/integrations/providers/x.d.ts +0 -9
- package/dist/integrations/providers/x.d.ts.map +0 -1
- package/dist/integrations/providers/x.js +0 -78
- package/dist/integrations/providers/x.js.map +0 -1
- package/dist/reducers/record_reducer.d.ts +0 -25
- package/dist/reducers/record_reducer.d.ts.map +0 -1
- package/dist/reducers/record_reducer.js +0 -93
- package/dist/reducers/record_reducer.js.map +0 -1
- package/dist/reducers/reducer_registry.d.ts +0 -47
- package/dist/reducers/reducer_registry.d.ts.map +0 -1
- package/dist/reducers/reducer_registry.js +0 -82
- package/dist/reducers/reducer_registry.js.map +0 -1
- package/dist/repositories/db/event_repo.d.ts +0 -14
- package/dist/repositories/db/event_repo.d.ts.map +0 -1
- package/dist/repositories/db/event_repo.js +0 -67
- package/dist/repositories/db/event_repo.js.map +0 -1
- package/dist/repositories/db/state_repo.d.ts +0 -14
- package/dist/repositories/db/state_repo.d.ts.map +0 -1
- package/dist/repositories/db/state_repo.js +0 -61
- package/dist/repositories/db/state_repo.js.map +0 -1
- package/dist/repositories/file/event_repo.d.ts +0 -18
- package/dist/repositories/file/event_repo.d.ts.map +0 -1
- package/dist/repositories/file/event_repo.js +0 -148
- package/dist/repositories/file/event_repo.js.map +0 -1
- package/dist/repositories/file/state_repo.d.ts +0 -21
- package/dist/repositories/file/state_repo.d.ts.map +0 -1
- package/dist/repositories/file/state_repo.js +0 -89
- package/dist/repositories/file/state_repo.js.map +0 -1
- package/dist/repositories/sqlite/supabase_adapter.d.ts +0 -135
- package/dist/repositories/sqlite/supabase_adapter.d.ts.map +0 -1
- package/dist/repositories/sqlite/supabase_adapter.js +0 -810
- package/dist/repositories/sqlite/supabase_adapter.js.map +0 -1
- package/dist/services/connectors.d.ts +0 -89
- package/dist/services/connectors.d.ts.map +0 -1
- package/dist/services/connectors.js +0 -248
- package/dist/services/connectors.js.map +0 -1
- package/dist/services/event_generation.d.ts +0 -37
- package/dist/services/event_generation.d.ts.map +0 -1
- package/dist/services/event_generation.js +0 -236
- package/dist/services/event_generation.js.map +0 -1
- package/dist/services/extraction/rules.d.ts +0 -26
- package/dist/services/extraction/rules.d.ts.map +0 -1
- package/dist/services/extraction/rules.js +0 -691
- package/dist/services/extraction/rules.js.map +0 -1
- package/dist/services/file_analysis.d.ts +0 -38
- package/dist/services/file_analysis.d.ts.map +0 -1
- package/dist/services/file_analysis.js +0 -325
- package/dist/services/file_analysis.js.map +0 -1
- package/dist/services/graph_builder.d.ts +0 -51
- package/dist/services/graph_builder.d.ts.map +0 -1
- package/dist/services/graph_builder.js +0 -279
- package/dist/services/graph_builder.js.map +0 -1
- package/dist/services/importers.d.ts +0 -28
- package/dist/services/importers.d.ts.map +0 -1
- package/dist/services/importers.js +0 -174
- package/dist/services/importers.js.map +0 -1
- package/dist/services/observation_ingestion.d.ts +0 -26
- package/dist/services/observation_ingestion.d.ts.map +0 -1
- package/dist/services/observation_ingestion.js +0 -364
- package/dist/services/observation_ingestion.js.map +0 -1
- package/dist/services/payload_compiler.d.ts +0 -36
- package/dist/services/payload_compiler.d.ts.map +0 -1
- package/dist/services/payload_compiler.js +0 -121
- package/dist/services/payload_compiler.js.map +0 -1
- package/dist/services/payload_identity.d.ts +0 -35
- package/dist/services/payload_identity.d.ts.map +0 -1
- package/dist/services/payload_identity.js +0 -101
- package/dist/services/payload_identity.js.map +0 -1
- package/dist/services/payload_schema.d.ts +0 -104
- package/dist/services/payload_schema.d.ts.map +0 -1
- package/dist/services/payload_schema.js +0 -46
- package/dist/services/payload_schema.js.map +0 -1
- package/dist/services/plaid_sync.d.ts +0 -77
- package/dist/services/plaid_sync.d.ts.map +0 -1
- package/dist/services/plaid_sync.js +0 -273
- package/dist/services/plaid_sync.js.map +0 -1
- package/dist/services/record_comparison.d.ts +0 -29
- package/dist/services/record_comparison.d.ts.map +0 -1
- package/dist/services/record_comparison.js +0 -84
- package/dist/services/record_comparison.js.map +0 -1
- package/dist/services/records.d.ts +0 -31
- package/dist/services/records.d.ts.map +0 -1
- package/dist/services/records.js +0 -184
- package/dist/services/records.js.map +0 -1
- package/dist/services/search.d.ts +0 -15
- package/dist/services/search.d.ts.map +0 -1
- package/dist/services/search.js +0 -81
- package/dist/services/search.js.map +0 -1
- package/dist/services/summary.d.ts +0 -5
- package/dist/services/summary.d.ts.map +0 -1
- package/dist/services/summary.js +0 -118
- package/dist/services/summary.js.map +0 -1
- package/docs/NEOTOMA_MANIFEST.md +0 -152
- package/docs/api/rest_api.md +0 -466
- package/docs/architecture/agentic_portfolio_overview.md +0 -99
- package/docs/architecture/agentic_wallet_overview.md +0 -93
- package/docs/architecture/architectural_decisions.md +0 -462
- package/docs/architecture/architecture.md +0 -842
- package/docs/architecture/blockchain_readiness_assessment.md +0 -248
- package/docs/architecture/consistency.md +0 -539
- package/docs/architecture/conversational_ux_architecture.md +0 -240
- package/docs/architecture/determinism.md +0 -762
- package/docs/architecture/idempotence_pattern.md +0 -139
- package/docs/architecture/mcp_actions_assessment.md +0 -182
- package/docs/architecture/ner_vs_schema_first_extraction.md +0 -280
- package/docs/architecture/schema_expansion.md +0 -260
- package/docs/architecture/schema_handling.md +0 -209
- package/docs/architecture/source_material_model.md +0 -281
- package/docs/assets/neotoma_banner.png +0 -0
- package/docs/conventions/TEST_EXECUTION_IMPROVEMENTS.md +0 -205
- package/docs/conventions/always_on_rules_review.md +0 -66
- package/docs/conventions/code_conventions_implementation.md +0 -111
- package/docs/conventions/code_conventions_plan.md +0 -124
- package/docs/conventions/code_review_summary.md +0 -96
- package/docs/conventions/documentation_standards.md +0 -104
- package/docs/conventions/estimation_methodology.md +0 -146
- package/docs/conventions/file_naming_migration_status.md +0 -94
- package/docs/conventions/readme_generation_framework.md +0 -230
- package/docs/conventions/time_tracking_template.md +0 -60
- package/docs/conventions/writing_style_guide.md +0 -252
- package/docs/developer/agent_cli_configuration.md +0 -140
- package/docs/developer/agent_instructions_sync_rules.mdc +0 -97
- package/docs/developer/canonical_walkthrough.md +0 -137
- package/docs/developer/cli_agent_instructions.md +0 -141
- package/docs/developer/cli_overview.md +0 -207
- package/docs/developer/cli_reference.md +0 -518
- package/docs/developer/developer_preview_launch_checklist.md +0 -128
- package/docs/developer/developer_preview_storage.md +0 -35
- package/docs/developer/developer_release_manual_test_checklist.md +0 -209
- package/docs/developer/development_workflow.md +0 -308
- package/docs/developer/environment/CONNECTOR_SECRET_KEY_SETUP.md +0 -96
- package/docs/developer/environment/DEV_CONNECTOR_SECRET_KEY_EXPLANATION.md +0 -80
- package/docs/developer/environment/ENV_MAPPINGS_STATUS.md +0 -86
- package/docs/developer/environment/ENV_VAR_NAMING_STRATEGY.md +0 -145
- package/docs/developer/environment/MIGRATION_TO_SINGLE_VAR_NAMES.md +0 -89
- package/docs/developer/environment/QUICK_START_1PASSWORD.md +0 -126
- package/docs/developer/environment/README.md +0 -27
- package/docs/developer/environment/SETUP_ENV_MAPPINGS.md +0 -256
- package/docs/developer/environment_distinction_audit.md +0 -43
- package/docs/developer/fix_doc_inconsistencies_plan.md +0 -63
- package/docs/developer/getting_started.md +0 -100
- package/docs/developer/import_interpretation_debug.md +0 -69
- package/docs/developer/launchd_dev_servers.md +0 -51
- package/docs/developer/launchd_watch_build.md +0 -37
- package/docs/developer/mcp/instructions.md +0 -71
- package/docs/developer/mcp/invalid_connection_id_handling.md +0 -181
- package/docs/developer/mcp/tool_descriptions.yaml +0 -41
- package/docs/developer/mcp/unauthenticated.md +0 -30
- package/docs/developer/mcp_chatgpt_setup.md +0 -159
- package/docs/developer/mcp_claude_code_setup.md +0 -519
- package/docs/developer/mcp_https_testing.md +0 -178
- package/docs/developer/mcp_https_testing_status.md +0 -130
- package/docs/developer/mcp_https_tunnel_status.md +0 -147
- package/docs/developer/mcp_oauth_migration_guide.md +0 -196
- package/docs/developer/mcp_overview.md +0 -145
- package/docs/developer/mcp_server_examples_from_cursor_docs.md +0 -485
- package/docs/developer/observation_architecture_documentation_integration.md +0 -368
- package/docs/developer/release_orchestrator.md +0 -197
- package/docs/developer/repository_cleanup_plan.md +0 -87
- package/docs/developer/resolved_blockers.md +0 -49
- package/docs/developer/schema_initialization.md +0 -182
- package/docs/developer/secrets/README.md +0 -15
- package/docs/developer/secrets/secrets_architecture.md +0 -95
- package/docs/developer/secrets/secrets_manager_value.md +0 -53
- package/docs/developer/secrets/secrets_secure_approach.md +0 -103
- package/docs/developer/secrets/secrets_setup.md +0 -116
- package/docs/developer/shared_components_submodule_setup.md +0 -273
- package/docs/developer/spec_compliance_validation_system.md +0 -261
- package/docs/developer/test_coverage_gap_analysis_plan.md +0 -36
- package/docs/developer/tunnels.md +0 -327
- package/docs/developer/vite_troubleshooting.md +0 -111
- package/docs/doc_dependencies.yaml +0 -497
- package/docs/examples/schema_breaking_change_reconciliation.md +0 -515
- package/docs/feature_units/completed/FU-050/FU-050_spec.md +0 -341
- package/docs/feature_units/completed/FU-050/manifest.yaml +0 -330
- package/docs/feature_units/completed/FU-051/FU-051_spec.md +0 -173
- package/docs/feature_units/completed/FU-051/manifest.yaml +0 -229
- package/docs/feature_units/completed/FU-052/FU-052_spec.md +0 -158
- package/docs/feature_units/completed/FU-052/manifest.yaml +0 -188
- package/docs/feature_units/completed/FU-053/FU-053_spec.md +0 -144
- package/docs/feature_units/completed/FU-053/manifest.yaml +0 -145
- package/docs/feature_units/completed/FU-054/FU-054_spec.md +0 -144
- package/docs/feature_units/completed/FU-054/manifest.yaml +0 -139
- package/docs/feature_units/completed/FU-702/billing_spec.md +0 -413
- package/docs/feature_units/completed/FU-702/manifest.yaml +0 -418
- package/docs/feature_units/standards/DISCOVERY_CAGAN_ALIGNMENT.md +0 -214
- package/docs/feature_units/standards/creating_feature_units.md +0 -385
- package/docs/feature_units/standards/discovery_process.md +0 -821
- package/docs/feature_units/standards/error_protocol.md +0 -60
- package/docs/feature_units/standards/execution_instructions.md +0 -87
- package/docs/feature_units/standards/feature_unit_spec.md +0 -325
- package/docs/feature_units/standards/integration_test_execution.md +0 -127
- package/docs/feature_units/standards/manifest_template.yaml +0 -370
- package/docs/feature_units/standards/model_selection.md +0 -207
- package/docs/feature_units/standards/multi_agent_orchestration.md +0 -411
- package/docs/feature_units/standards/release_report_generation.md +0 -448
- package/docs/feature_units/standards/release_report_spec.md +0 -444
- package/docs/feature_units/standards/release_report_template.md +0 -76
- package/docs/feature_units/standards/spec_compliance_validation.md +0 -147
- package/docs/feature_units/standards/worker_agent_template.md +0 -191
- package/docs/foundation/ai_safety.md +0 -10
- package/docs/foundation/composability_analysis.md +0 -308
- package/docs/foundation/core_identity.md +0 -50
- package/docs/foundation/documentation_design_system.md +0 -505
- package/docs/foundation/entity_resolution.md +0 -34
- package/docs/foundation/layered_architecture.md +0 -99
- package/docs/foundation/mmry_comparison.md +0 -176
- package/docs/foundation/philosophy.md +0 -103
- package/docs/foundation/problem_statement.md +0 -41
- package/docs/foundation/product_positioning.md +0 -69
- package/docs/foundation/product_principles.md +0 -18
- package/docs/foundation/quality_requirements.md +0 -68
- package/docs/foundation/timeline_events.md +0 -19
- package/docs/foundation/user_workflows.md +0 -38
- package/docs/implementation/PARQUET_MCP_SERVER_FIXES.md +0 -373
- package/docs/implementation/PARQUET_SUPPORT_IMPLEMENTATION.md +0 -207
- package/docs/infrastructure/deployment.md +0 -372
- package/docs/legal/README.md +0 -51
- package/docs/legal/compliance.md +0 -854
- package/docs/legal/privacy_policy.md +0 -114
- package/docs/legal/privacy_policy_changelog.md +0 -49
- package/docs/legal/terms_of_service.md +0 -185
- package/docs/legal/terms_of_service_changelog.md +0 -62
- package/docs/migration/llm_extraction_removal.md +0 -387
- package/docs/migration/llm_interpretation_docs_update.md +0 -130
- package/docs/observability/logging.md +0 -50
- package/docs/observability/metrics_standard.md +0 -38
- package/docs/observability/tracing.md +0 -41
- package/docs/operations/debugging/README.md +0 -11
- package/docs/operations/debugging/error_debug_instructions.md +0 -55
- package/docs/operations/health_check.md +0 -73
- package/docs/operations/runbook.md +0 -88
- package/docs/prompts/llm_extraction_system_prompt.md +0 -31
- package/docs/proposals/IMPLEMENTATION_SUMMARY.md +0 -198
- package/docs/proposals/MIGRATION_REPORT.md +0 -65
- package/docs/proposals/PROPOSAL_TEMPLATE.md +0 -58
- package/docs/proposals/README.md +0 -57
- package/docs/proposals/agent-trust-framework.md +0 -621
- package/docs/proposals/conversation_turn_identity_reverts_forks.md +0 -144
- package/docs/proposals/document-v023-release.md +0 -898
- package/docs/proposals/iterative_chat_store_mcp_instructions.md +0 -155
- package/docs/proposals/llm_sampling_parameters_interpretation_config.md +0 -196
- package/docs/proposals/mcp-cli-action-items.md +0 -207
- package/docs/proposals/plan-migration-command-integrated-with-commit.md +0 -386
- package/docs/proposals/sources-first-ingestion-v10.md +0 -348
- package/docs/proposals/test-coverage-gap-analysis.md +0 -26
- package/docs/prototypes/PROTOTYPE_QUICKSTART.md +0 -56
- package/docs/prototypes/README.md +0 -74
- package/docs/reference/error_codes.md +0 -223
- package/docs/releases/archived/aspirational/README.md +0 -57
- package/docs/releases/archived/aspirational/v0.4.0/manifest.yaml +0 -94
- package/docs/releases/archived/aspirational/v0.4.0/release_plan.md +0 -51
- package/docs/releases/archived/aspirational/v0.5.0/manifest.yaml +0 -152
- package/docs/releases/archived/aspirational/v0.5.0/release_plan.md +0 -236
- package/docs/releases/archived/aspirational/v0.9.0/README.md +0 -78
- package/docs/releases/archived/aspirational/v0.9.0/manifest.yaml +0 -111
- package/docs/releases/archived/aspirational/v0.9.0/release_plan.md +0 -238
- package/docs/releases/archived/aspirational/v0.9.0/status.md +0 -89
- package/docs/releases/archived/aspirational/v1.0.0/UI_REFACTORING_PLAN.md +0 -239
- package/docs/releases/archived/aspirational/v1.0.0/acceptance_criteria.md +0 -88
- package/docs/releases/archived/aspirational/v1.0.0/approach_comparison.md +0 -558
- package/docs/releases/archived/aspirational/v1.0.0/architectural_impact_chat_ui.md +0 -195
- package/docs/releases/archived/aspirational/v1.0.0/blog_post_update_directives.md +0 -491
- package/docs/releases/archived/aspirational/v1.0.0/business_viability_discovery_plan.md +0 -135
- package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-100_compliance.md +0 -23
- package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-101_compliance.md +0 -23
- package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-102_compliance.md +0 -23
- package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-103_compliance.md +0 -23
- package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-105_compliance.md +0 -23
- package/docs/releases/archived/aspirational/v1.0.0/continuous_discovery_log.md +0 -77
- package/docs/releases/archived/aspirational/v1.0.0/continuous_discovery_plan.md +0 -145
- package/docs/releases/archived/aspirational/v1.0.0/cross_platform_signal_detection.md +0 -181
- package/docs/releases/archived/aspirational/v1.0.0/deployment_strategy.md +0 -115
- package/docs/releases/archived/aspirational/v1.0.0/discovery_checklist.md +0 -195
- package/docs/releases/archived/aspirational/v1.0.0/discovery_filtering_criteria.md +0 -197
- package/docs/releases/archived/aspirational/v1.0.0/discovery_filtering_keywords.md +0 -143
- package/docs/releases/archived/aspirational/v1.0.0/discovery_lead_sourcing_tools.md +0 -438
- package/docs/releases/archived/aspirational/v1.0.0/discovery_plan.md +0 -185
- package/docs/releases/archived/aspirational/v1.0.0/execution_schedule.md +0 -130
- package/docs/releases/archived/aspirational/v1.0.0/feasibility_validation_plan.md +0 -116
- package/docs/releases/archived/aspirational/v1.0.0/handle_registration.md +0 -263
- package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-100_implementation_log.md +0 -51
- package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-101_implementation_log.md +0 -51
- package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-102_implementation_log.md +0 -51
- package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-103_implementation_log.md +0 -51
- package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-105_implementation_log.md +0 -51
- package/docs/releases/archived/aspirational/v1.0.0/manifest.yaml +0 -160
- package/docs/releases/archived/aspirational/v1.0.0/marketing_agent_instructions.md +0 -209
- package/docs/releases/archived/aspirational/v1.0.0/marketing_automation_implementation.md +0 -996
- package/docs/releases/archived/aspirational/v1.0.0/marketing_automation_plan.md +0 -291
- package/docs/releases/archived/aspirational/v1.0.0/marketing_dogfooding_analysis.md +0 -295
- package/docs/releases/archived/aspirational/v1.0.0/marketing_metrics_plan.md +0 -120
- package/docs/releases/archived/aspirational/v1.0.0/marketing_plan.md +0 -280
- package/docs/releases/archived/aspirational/v1.0.0/marketing_segments_plan.md +0 -128
- package/docs/releases/archived/aspirational/v1.0.0/participant_recruitment_log.md +0 -392
- package/docs/releases/archived/aspirational/v1.0.0/post_launch_marketing_plan.md +0 -252
- package/docs/releases/archived/aspirational/v1.0.0/pre_launch_marketing_plan.md +0 -748
- package/docs/releases/archived/aspirational/v1.0.0/pre_mortem.md +0 -122
- package/docs/releases/archived/aspirational/v1.0.0/subscription_detection_strategy.md +0 -160
- package/docs/releases/archived/aspirational/v1.0.0/usability_discovery_plan.md +0 -115
- package/docs/releases/archived/aspirational/v1.0.0/value_discovery_plan.md +0 -279
- package/docs/releases/archived/aspirational/v1.0.0/visibility_timing_analysis.md +0 -402
- package/docs/releases/archived/aspirational/v2.0.0/status.md +0 -120
- package/docs/releases/archived/aspirational/v2.1.0/manifest.yaml +0 -469
- package/docs/releases/archived/aspirational/v2.2.0/manifest.yaml +0 -165
- package/docs/releases/archived/aspirational/v2.2.0/status.md +0 -283
- package/docs/releases/compliance_reports/all_fus_compliance_summary.md +0 -112
- package/docs/releases/in_progress/v0.2.0/agent_status.json +0 -420
- package/docs/releases/in_progress/v0.2.0/status.md +0 -90
- package/docs/releases/v0.1.0/agent_status.json +0 -242
- package/docs/releases/v0.1.0/agent_status.json.example +0 -76
- package/docs/releases/v0.1.0/compliance_reports/FU-000_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-002_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-050_compliance.md +0 -59
- package/docs/releases/v0.1.0/compliance_reports/FU-051_compliance.md +0 -39
- package/docs/releases/v0.1.0/compliance_reports/FU-052_compliance.md +0 -44
- package/docs/releases/v0.1.0/compliance_reports/FU-053_compliance.md +0 -25
- package/docs/releases/v0.1.0/compliance_reports/FU-054_compliance.md +0 -31
- package/docs/releases/v0.1.0/compliance_reports/FU-055_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-056_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-057_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-058_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-059_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-061_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-100_compliance.md +0 -97
- package/docs/releases/v0.1.0/compliance_reports/FU-104_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-200_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-201_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-202_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-203_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-204_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-205_compliance.md +0 -23
- package/docs/releases/v0.1.0/compliance_reports/FU-206_compliance.md +0 -23
- package/docs/releases/v0.1.0/execution_schedule.md +0 -174
- package/docs/releases/v0.1.0/fu_spec_status.md +0 -83
- package/docs/releases/v0.1.0/implementation_logs/FU-000_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-002_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-050_implementation_log.md +0 -111
- package/docs/releases/v0.1.0/implementation_logs/FU-051_implementation_log.md +0 -91
- package/docs/releases/v0.1.0/implementation_logs/FU-052_implementation_log.md +0 -81
- package/docs/releases/v0.1.0/implementation_logs/FU-053_implementation_log.md +0 -71
- package/docs/releases/v0.1.0/implementation_logs/FU-054_implementation_log.md +0 -71
- package/docs/releases/v0.1.0/implementation_logs/FU-055_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-056_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-057_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-058_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-059_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-061_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-100_implementation_log.md +0 -251
- package/docs/releases/v0.1.0/implementation_logs/FU-104_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-200_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-201_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-202_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-203_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-204_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-205_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/implementation_logs/FU-206_implementation_log.md +0 -51
- package/docs/releases/v0.1.0/integration_tests.md +0 -316
- package/docs/releases/v0.1.0/manifest.yaml +0 -291
- package/docs/releases/v0.1.0/mcp_actions_status.md +0 -101
- package/docs/releases/v0.1.0/release_plan.md +0 -196
- package/docs/releases/v0.1.0/status.md +0 -148
- package/docs/releases/v0.1.0/test_coverage_setup_notes.md +0 -39
- package/docs/releases/v0.1.1/manifest.yaml +0 -153
- package/docs/releases/v0.2.0/status.md +0 -167
- package/docs/releases/v0.2.1/acceptance_criteria.md +0 -200
- package/docs/releases/v0.2.1/execution_schedule.md +0 -114
- package/docs/releases/v0.2.1/feature_unit_overview.md +0 -246
- package/docs/releases/v0.2.1/integration_tests.md +0 -281
- package/docs/releases/v0.2.1/manifest.yaml +0 -141
- package/docs/releases/v0.2.1/release_plan.md +0 -211
- package/docs/releases/v0.2.1/status.md +0 -106
- package/docs/releases/v0.2.15/README.md +0 -79
- package/docs/releases/v0.2.15/migrations/01_add_source_graph_edges.sql +0 -109
- package/docs/releases/v0.2.15/migrations/02_drop_legacy_tables.sql +0 -130
- package/docs/releases/v0.2.2/execution_schedule.md +0 -123
- package/docs/releases/v0.2.2/integration_tests.md +0 -258
- package/docs/releases/v0.2.2/manifest.yaml +0 -108
- package/docs/releases/v0.2.2/release_plan.md +0 -246
- package/docs/releases/v0.2.2/status.md +0 -113
- package/docs/releases/v0.2.3/agent_skills_alignment.md +0 -738
- package/docs/releases/v0.2.3/enhancements_summary.md +0 -309
- package/docs/releases/v0.2.3/integration_guide.md +0 -3400
- package/docs/releases/v0.2.3/manifest.yaml +0 -212
- package/docs/releases/v0.2.3/mcp_actions.md +0 -491
- package/docs/releases/v0.2.3/plan_completion_review.md +0 -410
- package/docs/releases/v0.2.3/release_overview.md +0 -13
- package/docs/releases/v0.2.3/schema_extensions/agent_decision.md +0 -311
- package/docs/releases/v0.2.3/schema_extensions/agent_session.md +0 -464
- package/docs/releases/v0.2.3/schema_extensions/architectural_decision.md +0 -390
- package/docs/releases/v0.2.3/schema_extensions/codebase_entity.md +0 -404
- package/docs/releases/v0.2.3/schema_extensions/feature_unit.md +0 -307
- package/docs/releases/v0.2.3/schema_extensions/release.md +0 -338
- package/docs/releases/v0.2.3/schema_extensions/validation_result.md +0 -377
- package/docs/releases/v0.2.3/spec.md +0 -569
- package/docs/releases/v0.3.0/manifest.yaml +0 -77
- package/docs/releases/v0.3.0/migrations/01_add_source_graph_edges.sql +0 -110
- package/docs/releases/v0.3.0/migrations/02_drop_legacy_tables.sql +0 -131
- package/docs/releases/v0.3.0/status.md +0 -193
- package/docs/reports/AUTO_ENHANCEMENT_TEST_RESULTS.md +0 -51
- package/docs/reports/AUTO_ENHANCEMENT_TEST_SUMMARY.md +0 -64
- package/docs/reports/BIGINT_SERIALIZATION_DEBUG.md +0 -75
- package/docs/reports/BUG_LEARNING_PROTOCOL_ESTABLISHED.md +0 -179
- package/docs/reports/CONSOLE_LOG_MCP_PROTOCOL_FIX.md +0 -58
- package/docs/reports/CRYPTO_TRANSACTION_DISCREPANCY_RESOLUTION.md +0 -108
- package/docs/reports/CRYPTO_TRANSACTION_SIDE_BY_SIDE_COMPARISON.md +0 -165
- package/docs/reports/FAILING_TESTS_ANALYSIS.md +0 -140
- package/docs/reports/FAILING_TESTS_SUMMARY.md +0 -106
- package/docs/reports/FINAL_PARQUET_COMPARISON.md +0 -226
- package/docs/reports/FINAL_TEST_STATUS.md +0 -145
- package/docs/reports/LEGACY_REMOVAL_SUMMARY.md +0 -108
- package/docs/reports/MCP_ACTIONS_SUMMARY.md +0 -329
- package/docs/reports/MCP_ACTION_TEST_COVERAGE.md +0 -132
- package/docs/reports/MCP_SPEC_COMPARISON.md +0 -306
- package/docs/reports/MCP_SPEC_COMPARISON_UPDATED.md +0 -247
- package/docs/reports/MCP_SPEC_VOCABULARY_CONFORMANCE.md +0 -220
- package/docs/reports/MCP_TEST_SUITE_IMPLEMENTATION.md +0 -180
- package/docs/reports/MCP_TEST_SUITE_RESULTS.md +0 -182
- package/docs/reports/PARQUET_MCP_BUG_REPORT.md +0 -70
- package/docs/reports/PARQUET_MCP_STORAGE_COMPLETE.md +0 -214
- package/docs/reports/PARQUET_SAMPLE_FILES_CREATED.md +0 -49
- package/docs/reports/PARQUET_STORAGE_SUCCESS.md +0 -263
- package/docs/reports/PARQUET_VS_NEOTOMA_COMPARISON.md +0 -241
- package/docs/reports/REIMPORT_TASKS_BLOCKER.md +0 -50
- package/docs/reports/SAMPLE_FILE_STRUCTURE_UPDATE.md +0 -68
- package/docs/reports/SAMPLE_PARQUET_IMPORT_TEST_RESULTS.md +0 -91
- package/docs/reports/SCHEMA_ENHANCEMENT_STATUS.md +0 -84
- package/docs/reports/SCHEMA_ENHANCEMENT_TEST_RESULTS.md +0 -78
- package/docs/reports/TASK_RELOAD_BLOCKER.md +0 -40
- package/docs/reports/TEST_FIXES_SUMMARY.md +0 -96
- package/docs/reports/VOCABULARY_CONFORMANCE_REVIEW.md +0 -177
- package/docs/reports/WHY_TESTS_MISSED_BIGINT_ISSUE.md +0 -144
- package/docs/reports/beyond_rag_agent_memory_neotoma_architecture_report.md +0 -103
- package/docs/reports/dhh_clankers_with_claws_neotoma_report.md +0 -102
- package/docs/reports/dr_cintas_pageindex_structure_over_embeddings_report.md +0 -77
- package/docs/reports/failure_gallery.md +0 -97
- package/docs/reports/fixture_expansion_summary.md +0 -204
- package/docs/reports/mcp_action_names_review.md +0 -131
- package/docs/reports/mcp_cli_action_items_fidelity_report.md +0 -189
- package/docs/reports/neotoma_pdf_interpreted_as_note_investigation_2026_02_23.md +0 -89
- package/docs/reports/plan_execution_changes_report.md +0 -122
- package/docs/reports/schema_distinctions.md +0 -210
- package/docs/reports/schema_redundancy_analysis.md +0 -304
- package/docs/specs/FUNCTIONAL_REQUIREMENTS.md +0 -160
- package/docs/specs/GENERAL_REQUIREMENTS.md +0 -30
- package/docs/specs/ICP_PRIORITY_TIERS.md +0 -132
- package/docs/specs/ICP_PROFILES.md +0 -2345
- package/docs/specs/INTERNAL_MCP_RELEASE.md +0 -300
- package/docs/specs/MANIFEST_ALIGNMENT_SUMMARY.md +0 -162
- package/docs/specs/MCP_SPEC.md +0 -2275
- package/docs/specs/METRICS_REQUIREMENTS.md +0 -386
- package/docs/specs/MVP_EXECUTION_PLAN.md +0 -956
- package/docs/specs/MVP_FEATURE_UNITS.md +0 -1821
- package/docs/specs/MVP_OVERVIEW.md +0 -184
- package/docs/specs/NONFUNCTIONAL_REQUIREMENTS.md +0 -98
- package/docs/specs/ONBOARDING_SPEC.md +0 -591
- package/docs/specs/PARQUET_MCP_RESOURCES_SPEC.md +0 -328
- package/docs/specs/TEST_PLAN.md +0 -116
- package/docs/specs/UI_SPEC.md +0 -93
- package/docs/subsystems/accessibility.md +0 -48
- package/docs/subsystems/auth.md +0 -170
- package/docs/subsystems/deletion.md +0 -494
- package/docs/subsystems/entity_merge.md +0 -300
- package/docs/subsystems/errors.md +0 -82
- package/docs/subsystems/events.md +0 -50
- package/docs/subsystems/i18n.md +0 -42
- package/docs/subsystems/ingestion/ingestion.md +0 -772
- package/docs/subsystems/ingestion/state_machines.md +0 -49
- package/docs/subsystems/observation_architecture.md +0 -379
- package/docs/subsystems/privacy.md +0 -71
- package/docs/subsystems/record_types.md +0 -753
- package/docs/subsystems/reducer.md +0 -436
- package/docs/subsystems/relationships.md +0 -455
- package/docs/subsystems/schema.md +0 -1213
- package/docs/subsystems/schema_registry.md +0 -588
- package/docs/subsystems/schema_snapshots/.gitkeep +0 -6
- package/docs/subsystems/schema_snapshots/README.md +0 -209
- package/docs/subsystems/schema_snapshots/account/v1.0.json +0 -52
- package/docs/subsystems/schema_snapshots/address/v1.0.json +0 -79
- package/docs/subsystems/schema_snapshots/agent_message/v1.0.json +0 -96
- package/docs/subsystems/schema_snapshots/balance/v1.0.json +0 -64
- package/docs/subsystems/schema_snapshots/company/v1.0.json +0 -86
- package/docs/subsystems/schema_snapshots/contact/v1.0.json +0 -68
- package/docs/subsystems/schema_snapshots/contact/v1.1.json +0 -112
- package/docs/subsystems/schema_snapshots/contract/v1.0.json +0 -48
- package/docs/subsystems/schema_snapshots/conversation/v1.0.json +0 -102
- package/docs/subsystems/schema_snapshots/crypto_transaction/v1.0.json +0 -76
- package/docs/subsystems/schema_snapshots/email/v1.0.json +0 -87
- package/docs/subsystems/schema_snapshots/event/v1.0.json +0 -79
- package/docs/subsystems/schema_snapshots/exercise/v1.0.json +0 -72
- package/docs/subsystems/schema_snapshots/fixed_cost/v1.0.json +0 -112
- package/docs/subsystems/schema_snapshots/flow/v1.0.json +0 -84
- package/docs/subsystems/schema_snapshots/goal/v1.0.json +0 -71
- package/docs/subsystems/schema_snapshots/holding/v1.0.json +0 -75
- package/docs/subsystems/schema_snapshots/income/v1.0.json +0 -68
- package/docs/subsystems/schema_snapshots/liability/v1.0.json +0 -60
- package/docs/subsystems/schema_snapshots/location/v1.0.json +0 -79
- package/docs/subsystems/schema_snapshots/meal/v1.0.json +0 -68
- package/docs/subsystems/schema_snapshots/message/v1.0.json +0 -72
- package/docs/subsystems/schema_snapshots/note/v1.0.json +0 -64
- package/docs/subsystems/schema_snapshots/order/v1.0.json +0 -72
- package/docs/subsystems/schema_snapshots/person/v1.0.json +0 -86
- package/docs/subsystems/schema_snapshots/project/v1.0.json +0 -75
- package/docs/subsystems/schema_snapshots/property/v1.0.json +0 -64
- package/docs/subsystems/schema_snapshots/purchase/v1.0.json +0 -75
- package/docs/subsystems/schema_snapshots/relationship/v1.0.json +0 -63
- package/docs/subsystems/schema_snapshots/task/v1.0.json +0 -91
- package/docs/subsystems/schema_snapshots/tax_event/v1.0.json +0 -72
- package/docs/subsystems/schema_snapshots/tax_filing/v1.0.json +0 -83
- package/docs/subsystems/schema_snapshots/transaction/v1.0.json +0 -40
- package/docs/subsystems/schema_snapshots/transfer/v1.0.json +0 -76
- package/docs/subsystems/schema_snapshots/wallet/v1.0.json +0 -68
- package/docs/subsystems/search/search.md +0 -63
- package/docs/subsystems/sources.md +0 -493
- package/docs/subsystems/vector_ops.md +0 -72
- package/docs/templates/issue_template.md +0 -36
- package/docs/templates/pr_template.md +0 -74
- package/docs/testing/ROUTE_COVERAGE_MATRIX.md +0 -104
- package/docs/testing/WHY_PARTIAL_ROUTE_COVERAGE.md +0 -183
- package/docs/testing/automated_test_catalog.md +0 -353
- package/docs/testing/cli_command_coverage_review.md +0 -130
- package/docs/testing/fixtures_standard.md +0 -202
- package/docs/testing/test_coverage_audit_summary.md +0 -571
- package/docs/testing/testing_standard.md +0 -146
- package/docs/ui/DESIGN_SYSTEM_UPDATE_SUMMARY.md +0 -152
- package/docs/ui/SHADCN_INTEGRATION_COMPLETE.md +0 -255
- package/docs/ui/design_constraints_template.yaml +0 -228
- package/docs/ui/design_system/accessibility.md +0 -38
- package/docs/ui/design_system/authentication_components.md +0 -38
- package/docs/ui/design_system/billing_components.md +0 -36
- package/docs/ui/design_system/brand_alignment.md +0 -35
- package/docs/ui/design_system/color_palette.md +0 -95
- package/docs/ui/design_system/component_styles.md +0 -241
- package/docs/ui/design_system/dark_mode.md +0 -30
- package/docs/ui/design_system/empty_states.md +0 -47
- package/docs/ui/design_system/error_states.md +0 -35
- package/docs/ui/design_system/file_upload_components.md +0 -60
- package/docs/ui/design_system/future_considerations.md +0 -19
- package/docs/ui/design_system/iconography.md +0 -21
- package/docs/ui/design_system/icp_aesthetic_analysis.md +0 -35
- package/docs/ui/design_system/icp_preference_alignment.md +0 -33
- package/docs/ui/design_system/implementation_notes.md +0 -119
- package/docs/ui/design_system/loading_states.md +0 -40
- package/docs/ui/design_system/motion_and_animation.md +0 -45
- package/docs/ui/design_system/navigation_components.md +0 -63
- package/docs/ui/design_system/onboarding_components.md +0 -48
- package/docs/ui/design_system/responsive_design.md +0 -26
- package/docs/ui/design_system/search_components.md +0 -32
- package/docs/ui/design_system/settings_components.md +0 -29
- package/docs/ui/design_system/spacing_and_layout.md +0 -67
- package/docs/ui/design_system/style_guide.md +0 -395
- package/docs/ui/design_system/typography.md +0 -88
- package/docs/ui/design_system/visual_hierarchy.md +0 -64
- package/docs/ui/design_system.md +0 -124
- package/docs/ui/dsl_spec.md +0 -97
- package/docs/ui/patterns/dashboard.md +0 -58
- package/docs/ui/patterns/detail.md +0 -68
- package/docs/ui/patterns/list.md +0 -72
- package/docs/ui/patterns/navigation.md +0 -314
- package/docs/ui/patterns/settings.md +0 -52
- package/docs/ui/patterns/wizard.md +0 -53
- package/docs/ui/prototype_guide.md +0 -300
- package/docs/ui/shadcn_components.md +0 -189
- package/docs/ui/style_guide_updates.md +0 -74
- package/docs/vocabulary/canonical_terms.md +0 -318
- package/fly.toml +0 -29
- package/foundation/.cursor/rules/agent_constraints.mdc +0 -198
- package/foundation/.cursor/rules/agent_test_execution.mdc +0 -356
- package/foundation/.cursor/rules/autonomous_execution.mdc +0 -117
- package/foundation/.cursor/rules/behavioral_self_adaptation.mdc +0 -531
- package/foundation/.cursor/rules/bug_fix_detection.mdc +0 -142
- package/foundation/.cursor/rules/checkpoint_management.mdc +0 -191
- package/foundation/.cursor/rules/configuration_management.mdc +0 -156
- package/foundation/.cursor/rules/content_style_enforcement.mdc +0 -138
- package/foundation/.cursor/rules/dependency_installation.mdc +0 -146
- package/foundation/.cursor/rules/document_loading_order.mdc +0 -194
- package/foundation/.cursor/rules/documentation_rules.mdc +0 -166
- package/foundation/.cursor/rules/downstream_doc_updates.mdc +0 -266
- package/foundation/.cursor/rules/environment_variables_1password.mdc +0 -307
- package/foundation/.cursor/rules/environment_variables_env_file.mdc +0 -121
- package/foundation/.cursor/rules/feature_unit_detection.mdc +0 -129
- package/foundation/.cursor/rules/file_naming.mdc +0 -31
- package/foundation/.cursor/rules/git_remote_sync.mdc +0 -240
- package/foundation/.cursor/rules/instruction_documentation.mdc +0 -302
- package/foundation/.cursor/rules/native_browser_debugging.mdc +0 -65
- package/foundation/.cursor/rules/plan_execution_testing.mdc +0 -98
- package/foundation/.cursor/rules/post_build_testing.mdc +0 -159
- package/foundation/.cursor/rules/prefer_cli_tools.mdc +0 -234
- package/foundation/.cursor/rules/readme_maintenance.mdc +0 -153
- package/foundation/.cursor/rules/release_detection.mdc +0 -92
- package/foundation/.cursor/rules/release_status_readme_update.mdc +0 -64
- package/foundation/.cursor/rules/risk_management.mdc +0 -167
- package/foundation/.cursor/rules/security.mdc +0 -158
- package/foundation/.cursor/rules/test_first_workflow.mdc +0 -341
- package/foundation/.cursor/rules/worktree_env.mdc +0 -53
- package/foundation/.cursor/skills/analyze/SKILL.md +0 -566
- package/foundation/.cursor/skills/commit/SKILL.md +0 -782
- package/foundation/.cursor/skills/create-feature-unit/SKILL.md +0 -180
- package/foundation/.cursor/skills/create-prototype/SKILL.md +0 -91
- package/foundation/.cursor/skills/create-release/SKILL.md +0 -432
- package/foundation/.cursor/skills/create-rule/SKILL.md +0 -292
- package/foundation/.cursor/skills/debug/SKILL.md +0 -980
- package/foundation/.cursor/skills/final-review/SKILL.md +0 -93
- package/foundation/.cursor/skills/fix-feature-bug/SKILL.md +0 -100
- package/foundation/.cursor/skills/manage-error-debugging/SKILL.md +0 -182
- package/foundation/.cursor/skills/publish/SKILL.md +0 -554
- package/foundation/.cursor/skills/pull/SKILL.md +0 -315
- package/foundation/.cursor/skills/push/SKILL.md +0 -254
- package/foundation/.cursor/skills/report/SKILL.md +0 -1501
- package/foundation/.cursor/skills/report-error/SKILL.md +0 -1501
- package/foundation/.cursor/skills/run-feature-workflow/SKILL.md +0 -79
- package/foundation/.cursor/skills/setup-commands/SKILL.md +0 -28
- package/foundation/.cursor/skills/setup-cursor-copies/SKILL.md +0 -233
- package/foundation/.cursor/skills/sync-env-from-1password/SKILL.md +0 -302
- package/foundation/CONTRIBUTING.md +0 -202
- package/foundation/LICENSE +0 -22
- package/foundation/MIGRATION.md +0 -396
- package/foundation/README.md +0 -391
- package/foundation/agent_instructions/README.md +0 -559
- package/foundation/config/foundation-config.yaml +0 -498
- package/foundation/config/foundation_config.yaml +0 -475
- package/foundation/config/repo_adapters/personal.yaml +0 -40
- package/foundation/config/repo_adapters/template.yaml +0 -45
- package/foundation/conventions/code_conventions.md +0 -908
- package/foundation/conventions/documentation_standards.md +0 -459
- package/foundation/conventions/naming_patterns.yaml +0 -139
- package/foundation/conventions/testing_conventions.md +0 -374
- package/foundation/conventions/writing_style_guide.md +0 -221
- package/foundation/development/branch_strategy.md +0 -266
- package/foundation/development/feature_unit_workflow.md +0 -423
- package/foundation/development/pr_process.md +0 -385
- package/foundation/development/release_workflow.md +0 -2296
- package/foundation/development/templates/feature_unit_spec_template.md +0 -312
- package/foundation/development/templates/manifest_template_extended.yaml +0 -303
- package/foundation/development/templates/manifest_template_simple.yaml +0 -148
- package/foundation/development/workflow.md +0 -509
- package/foundation/development/worktree_setup.sh +0 -207
- package/foundation/scripts/README.md +0 -230
- package/foundation/scripts/__pycache__/op_sync_env_from_1password.cpython-314.pyc +0 -0
- package/foundation/scripts/install-foundation.sh +0 -232
- package/foundation/scripts/install_foundation.sh +0 -232
- package/foundation/scripts/op_sync_env_from_1password.py +0 -1007
- package/foundation/scripts/report_error_create_dirs.sh +0 -14
- package/foundation/scripts/report_error_generate_id.sh +0 -10
- package/foundation/scripts/report_error_update_queue.sh +0 -24
- package/foundation/scripts/report_error_validate_target.sh +0 -34
- package/foundation/scripts/report_error_wait_resolution.sh +0 -69
- package/foundation/scripts/validate_setup.sh +0 -147
- package/foundation/security/credential_management.md +0 -263
- package/foundation/security/pre_commit_audit.sh +0 -78
- package/foundation/security/security_rules.md +0 -163
- package/foundation/strategy/README.md +0 -279
- package/foundation/strategy/competitive_analysis_template.md +0 -271
- package/foundation/strategy/partnership_analysis_template.md +0 -423
- package/foundation/strategy/project_assessment_framework.md +0 -485
- package/foundation/strategy/relevance_analysis_template.md +0 -297
- package/foundation/tooling/README.md +0 -198
- package/foundation/validation/README.md +0 -120
- package/foundation-config.yaml +0 -543
- package/frontend/docs.html +0 -43
- package/frontend/frontend/.vite-prototype/deps/@noble_curves_ed25519__js.js +0 -2859
- package/frontend/frontend/.vite-prototype/deps/@noble_curves_ed25519__js.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@noble_hashes_utils__js.js +0 -62
- package/frontend/frontend/.vite-prototype/deps/@noble_hashes_utils__js.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-dialog.js +0 -464
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-dialog.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-dropdown-menu.js +0 -1488
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-dropdown-menu.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-label.js +0 -84
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-label.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-scroll-area.js +0 -757
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-scroll-area.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-select.js +0 -1351
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-select.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-slot.js +0 -18
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-slot.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-toast.js +0 -675
- package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-toast.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/@tanstack_react-table.js +0 -3254
- package/frontend/frontend/.vite-prototype/deps/@tanstack_react-table.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/_metadata.json +0 -187
- package/frontend/frontend/.vite-prototype/deps/chunk-557GXNYU.js +0 -23
- package/frontend/frontend/.vite-prototype/deps/chunk-557GXNYU.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-6FYWT56J.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-C7HFWHWH.js +0 -271
- package/frontend/frontend/.vite-prototype/deps/chunk-C7HFWHWH.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-CJDTXCAB.js +0 -49
- package/frontend/frontend/.vite-prototype/deps/chunk-CJDTXCAB.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-DC5AMYBS.js +0 -39
- package/frontend/frontend/.vite-prototype/deps/chunk-DC5AMYBS.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-F4FBYZZO.js +0 -2258
- package/frontend/frontend/.vite-prototype/deps/chunk-F4FBYZZO.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-GIBJ3MQP.js +0 -129
- package/frontend/frontend/.vite-prototype/deps/chunk-GIBJ3MQP.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-IMIZXM4S.js +0 -218
- package/frontend/frontend/.vite-prototype/deps/chunk-IMIZXM4S.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-K236IVZX.js +0 -21628
- package/frontend/frontend/.vite-prototype/deps/chunk-K236IVZX.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-LPO6FEV6.js +0 -21
- package/frontend/frontend/.vite-prototype/deps/chunk-LPO6FEV6.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-PZJDTVNM.js +0 -144
- package/frontend/frontend/.vite-prototype/deps/chunk-PZJDTVNM.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-RGYP7AMI.js +0 -1116
- package/frontend/frontend/.vite-prototype/deps/chunk-RGYP7AMI.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-SMVRXQSC.js +0 -928
- package/frontend/frontend/.vite-prototype/deps/chunk-SMVRXQSC.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-SPBFJIQZ.js +0 -49
- package/frontend/frontend/.vite-prototype/deps/chunk-SPBFJIQZ.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-UQF5EARV.js +0 -9
- package/frontend/frontend/.vite-prototype/deps/chunk-UQF5EARV.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-VEFHXNY4.js +0 -186
- package/frontend/frontend/.vite-prototype/deps/chunk-VEFHXNY4.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/chunk-Z55WIHBM.js +0 -349
- package/frontend/frontend/.vite-prototype/deps/chunk-Z55WIHBM.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/class-variance-authority.js +0 -51
- package/frontend/frontend/.vite-prototype/deps/class-variance-authority.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/clsx.js +0 -10
- package/frontend/frontend/.vite-prototype/deps/clsx.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/lucide-react.js +0 -31586
- package/frontend/frontend/.vite-prototype/deps/lucide-react.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/package.json +0 -3
- package/frontend/frontend/.vite-prototype/deps/papaparse.js +0 -431
- package/frontend/frontend/.vite-prototype/deps/papaparse.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/react-dom.js +0 -7
- package/frontend/frontend/.vite-prototype/deps/react-dom.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/react-dom_client.js +0 -39
- package/frontend/frontend/.vite-prototype/deps/react-dom_client.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/react.js +0 -6
- package/frontend/frontend/.vite-prototype/deps/react.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/react_jsx-dev-runtime.js +0 -913
- package/frontend/frontend/.vite-prototype/deps/react_jsx-dev-runtime.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/react_jsx-runtime.js +0 -7
- package/frontend/frontend/.vite-prototype/deps/react_jsx-runtime.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/sonner.js +0 -1139
- package/frontend/frontend/.vite-prototype/deps/sonner.js.map +0 -7
- package/frontend/frontend/.vite-prototype/deps/tailwind-merge.js +0 -2534
- package/frontend/frontend/.vite-prototype/deps/tailwind-merge.js.map +0 -7
- package/frontend/index.html +0 -38
- package/frontend/src/App.tsx +0 -15
- package/frontend/src/bridge/discovery.ts +0 -126
- package/frontend/src/bridge/index.ts +0 -9
- package/frontend/src/bridge/mcp.ts +0 -85
- package/frontend/src/bridge/types.ts +0 -24
- package/frontend/src/bridge/websocket.ts +0 -349
- package/frontend/src/components/AIAgentBridge.tsx +0 -75
- package/frontend/src/components/AboutPage.tsx +0 -102
- package/frontend/src/components/AppNavigationSidebar.tsx +0 -181
- package/frontend/src/components/AppSidebar.tsx +0 -206
- package/frontend/src/components/AuthErrorHandler.tsx +0 -23
- package/frontend/src/components/Dashboard.tsx +0 -303
- package/frontend/src/components/DashboardPage.tsx +0 -78
- package/frontend/src/components/EmptyPlaceholder.tsx +0 -58
- package/frontend/src/components/EntityDetail.tsx +0 -801
- package/frontend/src/components/EntityList.tsx +0 -409
- package/frontend/src/components/ErrorBoundary.tsx +0 -131
- package/frontend/src/components/FileUploadView.tsx +0 -246
- package/frontend/src/components/FloatingSettingsButton.tsx +0 -46
- package/frontend/src/components/Header.tsx +0 -43
- package/frontend/src/components/IntegrationsPage.tsx +0 -46
- package/frontend/src/components/InterpretationList.tsx +0 -246
- package/frontend/src/components/KeyManagementDialog.tsx +0 -227
- package/frontend/src/components/Layout.tsx +0 -67
- package/frontend/src/components/MCPChatGPTPage.tsx +0 -128
- package/frontend/src/components/MCPClaudePage.tsx +0 -112
- package/frontend/src/components/MCPCodeiumPage.tsx +0 -100
- package/frontend/src/components/MCPConfigurationPage.tsx +0 -624
- package/frontend/src/components/MCPConnectionDialog.tsx +0 -177
- package/frontend/src/components/MCPConnectionsList.tsx +0 -197
- package/frontend/src/components/MCPContinuePage.tsx +0 -90
- package/frontend/src/components/MCPCursorPage.tsx +0 -379
- package/frontend/src/components/MCPGeminiPage.tsx +0 -102
- package/frontend/src/components/MCPGitHubCopilotPage.tsx +0 -100
- package/frontend/src/components/MCPGrokPage.tsx +0 -99
- package/frontend/src/components/MCPJetBrainsPage.tsx +0 -107
- package/frontend/src/components/MCPManusPage.tsx +0 -104
- package/frontend/src/components/MCPSetupDialog.tsx +0 -268
- package/frontend/src/components/MCPVSCodePage.tsx +0 -100
- package/frontend/src/components/MCPWindsurfPage.tsx +0 -99
- package/frontend/src/components/MainApp.tsx +0 -19
- package/frontend/src/components/NotFound.tsx +0 -46
- package/frontend/src/components/OAuthPage.tsx +0 -426
- package/frontend/src/components/ObservationList.tsx +0 -277
- package/frontend/src/components/ProtectedRoute.tsx +0 -38
- package/frontend/src/components/QuickEntryPanel.tsx +0 -99
- package/frontend/src/components/RealtimeStatusIndicator.tsx +0 -32
- package/frontend/src/components/RecentActivityFeed.tsx +0 -198
- package/frontend/src/components/RelationshipDetail.tsx +0 -232
- package/frontend/src/components/RelationshipList.tsx +0 -269
- package/frontend/src/components/SchemaDetail.test.tsx +0 -53
- package/frontend/src/components/SchemaDetail.tsx +0 -230
- package/frontend/src/components/SchemaList.tsx +0 -228
- package/frontend/src/components/SearchResults.tsx +0 -318
- package/frontend/src/components/SeoHead.tsx +0 -40
- package/frontend/src/components/SitePage.tsx +0 -654
- package/frontend/src/components/SourceDetail.tsx +0 -382
- package/frontend/src/components/SourceTable.tsx +0 -243
- package/frontend/src/components/StyleGuide.md +0 -48
- package/frontend/src/components/StyleGuide.tsx +0 -2316
- package/frontend/src/components/TimelineView.tsx +0 -321
- package/frontend/src/components/UniversalSearch.tsx +0 -518
- package/frontend/src/components/design-system/BadgesPage.tsx +0 -47
- package/frontend/src/components/design-system/ButtonsPage.tsx +0 -67
- package/frontend/src/components/design-system/CardsPage.tsx +0 -31
- package/frontend/src/components/design-system/CollapsiblePage.tsx +0 -84
- package/frontend/src/components/design-system/ColorsPage.tsx +0 -125
- package/frontend/src/components/design-system/DesignSystemIndex.tsx +0 -73
- package/frontend/src/components/design-system/DesignSystemLayout.tsx +0 -22
- package/frontend/src/components/design-system/DesignSystemRouter.tsx +0 -43
- package/frontend/src/components/design-system/InputsPage.tsx +0 -40
- package/frontend/src/components/design-system/PageFormatsPage.tsx +0 -263
- package/frontend/src/components/design-system/ProgressPage.tsx +0 -54
- package/frontend/src/components/design-system/SkeletonPage.tsx +0 -68
- package/frontend/src/components/design-system/SpacingPage.tsx +0 -45
- package/frontend/src/components/design-system/StyleGuidePage.tsx +0 -313
- package/frontend/src/components/design-system/SwitchPage.tsx +0 -60
- package/frontend/src/components/design-system/TablesPage.tsx +0 -206
- package/frontend/src/components/design-system/TabsPage.tsx +0 -88
- package/frontend/src/components/design-system/TooltipPage.tsx +0 -94
- package/frontend/src/components/design-system/TypographyPage.tsx +0 -81
- package/frontend/src/components/icons/CursorIcon.tsx +0 -26
- package/frontend/src/components/quick-entry/ContactDialog.tsx +0 -177
- package/frontend/src/components/quick-entry/EventDialog.tsx +0 -204
- package/frontend/src/components/quick-entry/TaskDialog.tsx +0 -204
- package/frontend/src/components/quick-entry/TransactionDialog.tsx +0 -188
- package/frontend/src/components/ui/alert.tsx +0 -59
- package/frontend/src/components/ui/badge.tsx +0 -36
- package/frontend/src/components/ui/breadcrumb.tsx +0 -120
- package/frontend/src/components/ui/button.tsx +0 -56
- package/frontend/src/components/ui/card.tsx +0 -68
- package/frontend/src/components/ui/collapsible.tsx +0 -9
- package/frontend/src/components/ui/dialog.tsx +0 -81
- package/frontend/src/components/ui/dropdown-menu.tsx +0 -195
- package/frontend/src/components/ui/input-group.tsx +0 -26
- package/frontend/src/components/ui/input.tsx +0 -24
- package/frontend/src/components/ui/label.tsx +0 -19
- package/frontend/src/components/ui/progress.tsx +0 -26
- package/frontend/src/components/ui/scroll-area.tsx +0 -35
- package/frontend/src/components/ui/select.tsx +0 -173
- package/frontend/src/components/ui/separator.tsx +0 -31
- package/frontend/src/components/ui/sheet.tsx +0 -139
- package/frontend/src/components/ui/sidebar.tsx +0 -851
- package/frontend/src/components/ui/skeleton.tsx +0 -15
- package/frontend/src/components/ui/switch.tsx +0 -35
- package/frontend/src/components/ui/table-scroll-wrapper.tsx +0 -96
- package/frontend/src/components/ui/table.tsx +0 -127
- package/frontend/src/components/ui/tabs.tsx +0 -53
- package/frontend/src/components/ui/textarea.tsx +0 -23
- package/frontend/src/components/ui/toast.tsx +0 -122
- package/frontend/src/components/ui/toaster.tsx +0 -32
- package/frontend/src/components/ui/tooltip.tsx +0 -28
- package/frontend/src/components/ui/use-toast.ts +0 -194
- package/frontend/src/constants/integrations.ts +0 -51
- package/frontend/src/contexts/AuthContext.tsx +0 -205
- package/frontend/src/contexts/RealtimeContext.tsx +0 -119
- package/frontend/src/docs/DocumentationApp.tsx +0 -104
- package/frontend/src/docs/DocumentationDirectory.tsx +0 -159
- package/frontend/src/docs/DocumentationLayout.tsx +0 -31
- package/frontend/src/docs/DocumentationPage.tsx +0 -38
- package/frontend/src/docs/DocumentationSidebar.tsx +0 -15
- package/frontend/src/docs/MarkdownContent.tsx +0 -212
- package/frontend/src/docs/README.md +0 -198
- package/frontend/src/docs/main.tsx +0 -12
- package/frontend/src/hooks/use-mobile.tsx +0 -19
- package/frontend/src/hooks/useKeys.ts +0 -202
- package/frontend/src/hooks/useMCPConfig.ts +0 -175
- package/frontend/src/hooks/useRealtimeEntities.ts +0 -56
- package/frontend/src/hooks/useRealtimeObservations.ts +0 -56
- package/frontend/src/hooks/useRealtimeRelationships.ts +0 -56
- package/frontend/src/hooks/useRealtimeSources.ts +0 -53
- package/frontend/src/hooks/useRealtimeTimeline.ts +0 -53
- package/frontend/src/hooks/useSettings.ts +0 -95
- package/frontend/src/hooks/useStorageQuota.ts +0 -65
- package/frontend/src/hooks/useTheme.tsx +0 -42
- package/frontend/src/index.css +0 -247
- package/frontend/src/lib/api_client.ts +0 -8
- package/frontend/src/lib/auth.ts +0 -100
- package/frontend/src/lib/idempotency.ts +0 -25
- package/frontend/src/lib/utils.ts +0 -7
- package/frontend/src/main.tsx +0 -40
- package/frontend/src/sample-data/sets-medium.csv +0 -55
- package/frontend/src/sample-data/sets-medium.ts +0 -45
- package/frontend/src/shared/.eslintrc.json +0 -35
- package/frontend/src/shared/.github/README.md +0 -55
- package/frontend/src/shared/.github/workflows/ci.yml +0 -88
- package/frontend/src/shared/.github/workflows/release.yml +0 -34
- package/frontend/src/shared/.github/workflows/setup.yml +0 -56
- package/frontend/src/shared/README.md +0 -163
- package/frontend/src/shared/SETUP.md +0 -121
- package/frontend/src/shared/components.json +0 -20
- package/frontend/src/shared/package-lock.json +0 -4508
- package/frontend/src/shared/package.json +0 -78
- package/frontend/src/shared/src/components/AppSidebar.tsx +0 -77
- package/frontend/src/shared/src/components/ErrorBoundary.tsx +0 -87
- package/frontend/src/shared/src/components/Layout.tsx +0 -262
- package/frontend/src/shared/src/components/ui/breadcrumb.tsx +0 -115
- package/frontend/src/shared/src/components/ui/button.tsx +0 -56
- package/frontend/src/shared/src/components/ui/calendar.tsx +0 -211
- package/frontend/src/shared/src/components/ui/input.tsx +0 -22
- package/frontend/src/shared/src/components/ui/popover.tsx +0 -29
- package/frontend/src/shared/src/components/ui/separator.tsx +0 -29
- package/frontend/src/shared/src/components/ui/sheet.tsx +0 -140
- package/frontend/src/shared/src/components/ui/sidebar.tsx +0 -519
- package/frontend/src/shared/src/components/ui/skeleton.tsx +0 -15
- package/frontend/src/shared/src/components/ui/tooltip.tsx +0 -28
- package/frontend/src/shared/src/hooks/use-mobile.tsx +0 -19
- package/frontend/src/shared/src/index.css +0 -75
- package/frontend/src/shared/src/index.ts +0 -34
- package/frontend/src/shared/src/lib/utils.ts +0 -6
- package/frontend/src/shared/tailwind.config.mjs +0 -67
- package/frontend/src/shared/tsconfig.json +0 -29
- package/frontend/src/site/seo_metadata.ts +0 -133
- package/frontend/src/site/site_data.test.ts +0 -36
- package/frontend/src/site/site_data.ts +0 -575
- package/frontend/src/store/README.md +0 -10
- package/frontend/src/utils/api_access.ts +0 -24
- package/frontend/src/utils/csv.test.ts +0 -42
- package/frontend/src/utils/csv.ts +0 -45
- package/frontend/src/utils/csv_summary.ts +0 -139
- package/frontend/src/utils/debounce.ts +0 -24
- package/frontend/src/utils/entity_display.test.ts +0 -334
- package/frontend/src/utils/entity_display.ts +0 -23
- package/frontend/src/utils/entity_type_formatter.ts +0 -56
- package/frontend/src/utils/error_utils.ts +0 -137
- package/frontend/src/utils/property_keys.ts +0 -36
- package/frontend/src/utils/schema_icons.test.ts +0 -59
- package/frontend/src/utils/schema_icons.ts +0 -229
- package/frontend/src/utils/time.ts +0 -37
- package/frontend/src/vite-env.d.ts +0 -14
- package/frontend/tsconfig.json +0 -27
- package/frontend/tsconfig.node.json +0 -11
- package/mcp/web-scraper/README.md +0 -475
- package/mcp/web-scraper/SETUP.md +0 -150
- package/mcp/web-scraper/__init__.py +0 -3
- package/mcp/web-scraper/chatgpt_scraper_mcp_server.py +0 -435
- package/mcp/web-scraper/create_repo.sh +0 -50
- package/mcp/web-scraper/imports/spotify/playlist_3i0FY58V7n8XIUyWDm3AYA.json +0 -1052
- package/mcp/web-scraper/nytimes_article.json +0 -7
- package/mcp/web-scraper/plugins/__init__.py +0 -3
- package/mcp/web-scraper/plugins/chatgpt_scraper.py +0 -105
- package/mcp/web-scraper/plugins/metacast_scraper.py +0 -828
- package/mcp/web-scraper/plugins/nyt_podcast_scraper.py +0 -538
- package/mcp/web-scraper/plugins/spotify_scraper.py +0 -618
- package/mcp/web-scraper/plugins/twitter_scraper.py +0 -576
- package/mcp/web-scraper/plugins/url_body_fetcher.py +0 -172
- package/mcp/web-scraper/pytest.ini +0 -11
- package/mcp/web-scraper/requirements-test.txt +0 -6
- package/mcp/web-scraper/requirements.txt +0 -6
- package/mcp/web-scraper/run-web-scraper-mcp.sh +0 -38
- package/mcp/web-scraper/scrape_spotify_playlist.py +0 -77
- package/mcp/web-scraper/scraper.py +0 -819
- package/mcp/web-scraper/scraper_base.py +0 -88
- package/mcp/web-scraper/scraper_registry.py +0 -32
- package/mcp/web-scraper/scripts/scrape_tweet_and_verify_referenced.py +0 -65
- package/mcp/web-scraper/store_songs_to_parquet.py +0 -120
- package/mcp/web-scraper/tests/__init__.py +0 -0
- package/mcp/web-scraper/tests/conftest.py +0 -40
- package/mcp/web-scraper/tests/integration/__init__.py +0 -0
- package/mcp/web-scraper/tests/unit/__init__.py +0 -0
- package/mcp/web-scraper/tests/unit/test_source_detection.py +0 -60
- package/mcp/web-scraper/web_scraper_mcp_server.py +0 -639
- package/openapi.yaml +0 -2071
- package/playwright/fixtures/servers.ts +0 -180
- package/playwright/global_setup.ts +0 -3
- package/playwright/tests/auto-enhancement.spec.ts +0 -370
- package/playwright/tests/coverage-map.json +0 -135
- package/playwright/tests/design-system.spec.ts +0 -216
- package/playwright/tests/entity-detail.spec.ts +0 -268
- package/playwright/tests/entity-list.spec.ts +0 -266
- package/playwright/tests/floating-settings-button.spec.ts +0 -95
- package/playwright/tests/graph-integrity.spec.ts +0 -344
- package/playwright/tests/helpers.ts +0 -560
- package/playwright/tests/interpretations.spec.ts +0 -285
- package/playwright/tests/mcp-configuration.spec.ts +0 -208
- package/playwright/tests/mcp-relationships.spec.ts +0 -631
- package/playwright/tests/mcp-store-retrieve.spec.ts +0 -288
- package/playwright/tests/not-found.spec.ts +0 -30
- package/playwright/tests/oauth-flow.spec.ts +0 -790
- package/playwright/tests/observations.spec.ts +0 -295
- package/playwright/tests/relationship-detail.spec.ts +0 -305
- package/playwright/tests/relationships-list.spec.ts +0 -275
- package/playwright/tests/schema-detail.spec.ts +0 -300
- package/playwright/tests/schemas-list.spec.ts +0 -262
- package/playwright/tests/search-flow.spec.ts +0 -216
- package/playwright/tests/site-page.spec.ts +0 -23
- package/playwright/tests/source-detail.spec.ts +0 -300
- package/playwright/tests/sources-list.spec.ts +0 -254
- package/playwright/tests/upload-flow.spec.ts +0 -279
- package/playwright/tsconfig.json +0 -17
- package/playwright/types.d.ts +0 -14
- package/playwright/utils/servers.ts +0 -435
- package/playwright.config.ts +0 -77
- package/postcss.config.mjs +0 -7
- package/scripts/add_ngrok_mapping.py +0 -99
- package/scripts/add_required_observation_fields.js +0 -96
- package/scripts/add_required_source_fields.js +0 -95
- package/scripts/analyze-data-dir-schemas.js +0 -256
- package/scripts/analyze_data_dir_for_schemas.ts +0 -378
- package/scripts/analyze_low_confidence_fields.ts +0 -235
- package/scripts/analyze_schema_redundancies.ts +0 -228
- package/scripts/apply_documentation_rules.sh +0 -81
- package/scripts/apply_file_naming_convention.sh +0 -75
- package/scripts/backfill_entity_embeddings.ts +0 -95
- package/scripts/branch.js +0 -47
- package/scripts/build_github_pages_site.tsx +0 -65
- package/scripts/check-playwright-coverage.ts +0 -159
- package/scripts/check_agent_conversations.js +0 -72
- package/scripts/check_agent_status.js +0 -156
- package/scripts/check_auto_enhancement_status.ts +0 -215
- package/scripts/check_auto_test_schemas.ts +0 -43
- package/scripts/check_claude_sync.sh +0 -35
- package/scripts/check_raw_fragments.ts +0 -46
- package/scripts/check_remaining_eligibility.ts +0 -46
- package/scripts/check_remaining_fields.ts +0 -58
- package/scripts/check_sendgrid_credits.sh +0 -122
- package/scripts/check_sendgrid_email_logs.sh +0 -150
- package/scripts/check_snapshot_schema.ts +0 -18
- package/scripts/check_sources.ts +0 -34
- package/scripts/check_stale_snapshots.ts +0 -80
- package/scripts/cleanup-auto-test-schemas.ts +0 -80
- package/scripts/cleanup_test_schemas.ts +0 -275
- package/scripts/com.neotoma.dev-servers.plist.template +0 -27
- package/scripts/com.neotoma.watch-build.plist.template +0 -27
- package/scripts/complete_submodule_setup.sh +0 -101
- package/scripts/configure_sendgrid_dns.sh +0 -162
- package/scripts/copy-env-to-worktree.js +0 -109
- package/scripts/copy_pdf_worker_wrapper.js +0 -19
- package/scripts/create_sample_parquet_files.py +0 -120
- package/scripts/create_sample_parquet_files.ts +0 -146
- package/scripts/create_sample_parquet_files_mcp.ts +0 -196
- package/scripts/create_sample_parquet_files_simple.sh +0 -132
- package/scripts/cursor-worktree-init.sh +0 -24
- package/scripts/debug-ssl.sh +0 -86
- package/scripts/debug_pdf_extraction.ts +0 -69
- package/scripts/debug_vec_knn.ts +0 -69
- package/scripts/dev-proxy.js +0 -406
- package/scripts/dev-serve.js +0 -349
- package/scripts/disable-dns.sh +0 -47
- package/scripts/doctor.ts +0 -97
- package/scripts/export_schema_snapshots.ts +0 -253
- package/scripts/fix-ssl-cert.sh +0 -72
- package/scripts/fix_mcp_phase1_tests.sh +0 -51
- package/scripts/fix_observation_column_names.js +0 -51
- package/scripts/fix_observation_priority_ordering.js +0 -45
- package/scripts/fix_observation_properties_to_fields.js +0 -48
- package/scripts/fix_sqlite_schema_mismatch.js +0 -75
- package/scripts/generate-dev-cert.sh +0 -69
- package/scripts/generate_pdf_fixtures.ts +0 -330
- package/scripts/generate_schema_icons.ts +0 -216
- package/scripts/get_branch_ports.js +0 -56
- package/scripts/get_mcp_token.sh +0 -47
- package/scripts/get_secrets_for_agents.js +0 -45
- package/scripts/ingest_data_dir.ts +0 -215
- package/scripts/ingest_finances_data.ts +0 -255
- package/scripts/initialize-schemas.ts +0 -350
- package/scripts/install_launchd_dev_servers.js +0 -54
- package/scripts/install_launchd_watch_build.js +0 -53
- package/scripts/instruct_agents_credential_setup.js +0 -130
- package/scripts/instruct_agents_env_check.js +0 -99
- package/scripts/instruct_agents_run_tests_until_passing.js +0 -128
- package/scripts/kill_port.js +0 -174
- package/scripts/linters/sync_agent_instructions_pre_commit.sh +0 -34
- package/scripts/manage_error_debugging.sh +0 -228
- package/scripts/manually_queue_enhancements.ts +0 -156
- package/scripts/merge-dev.js +0 -319
- package/scripts/migrate_auto_enhanced_fields.ts +0 -83
- package/scripts/migrate_env_to_secrets.js +0 -69
- package/scripts/migrate_plans.ts +0 -870
- package/scripts/monitor_and_fix_snapshots.ts +0 -165
- package/scripts/move_docs_rules_to_cursor.js +0 -54
- package/scripts/move_docs_rules_to_cursor.sh +0 -24
- package/scripts/neotoma-npm-reserve/README.md +0 -8
- package/scripts/neotoma-npm-reserve/package.json +0 -10
- package/scripts/notify_agents_env_vars.js +0 -109
- package/scripts/notify_agents_setup_script.js +0 -148
- package/scripts/notify_running_agents_credentials.js +0 -177
- package/scripts/pdf_worker_polyfill.mjs +0 -27
- package/scripts/pick-port.js +0 -108
- package/scripts/postinstall.js +0 -84
- package/scripts/process_remaining_eligible.ts +0 -70
- package/scripts/prototypes/run-prototype.sh +0 -40
- package/scripts/prune-merged-branches.js +0 -115
- package/scripts/recompute_bob.ts +0 -64
- package/scripts/recompute_snapshots.ts +0 -72
- package/scripts/release_orchestrator.js +0 -1995
- package/scripts/remove_duplicate_source_fields.js +0 -61
- package/scripts/rename-branch-from-commit.js +0 -111
- package/scripts/respawn_agents_with_credentials.js +0 -358
- package/scripts/respawn_single_agent.js +0 -324
- package/scripts/run-dev-server-with-tunnel-url.sh +0 -16
- package/scripts/run-dev-task.js +0 -160
- package/scripts/run_dev_servers_launchd.sh +0 -14
- package/scripts/run_integration_tests.js +0 -523
- package/scripts/run_migrations.js +0 -55
- package/scripts/run_neotoma_mcp_stdio.sh +0 -11
- package/scripts/run_neotoma_mcp_stdio_dev_watch.sh +0 -10
- package/scripts/run_neotoma_mcp_stdio_prod.sh +0 -11
- package/scripts/run_neotoma_mcp_stdio_prod_watch.sh +0 -12
- package/scripts/run_watch_build_launchd.sh +0 -18
- package/scripts/scrape_nytimes_article.py +0 -182
- package/scripts/scrape_nytimes_simple.py +0 -152
- package/scripts/secrets_manager.js +0 -232
- package/scripts/send_agent_followup.js +0 -136
- package/scripts/setup-data-symlink.js +0 -88
- package/scripts/setup-dns.sh +0 -54
- package/scripts/setup-env-copy-hook.sh +0 -67
- package/scripts/setup-foundation-symlink.js +0 -45
- package/scripts/setup-https-tunnel.sh +0 -409
- package/scripts/setup-test-env.sh +0 -18
- package/scripts/setup_agent_credentials.sh +0 -27
- package/scripts/setup_agent_environment.sh +0 -39
- package/scripts/setup_claude_instructions.sh +0 -437
- package/scripts/setup_cloudflare_email_routing.sh +0 -158
- package/scripts/setup_shared_submodule.sh +0 -100
- package/scripts/simulate_npm_install.js +0 -70
- package/scripts/spec_compliance_patterns.js +0 -260
- package/scripts/sync-env-from-1password.sh +0 -100
- package/scripts/sync_mcp_configs.js +0 -106
- package/scripts/test-base64-store.ts +0 -53
- package/scripts/test-error-handling.ts +0 -44
- package/scripts/test-file-path-store.ts +0 -142
- package/scripts/test-raw-fragments-idempotence.ts +0 -157
- package/scripts/test-raw-fragments-insert.ts +0 -88
- package/scripts/test-store-response-structure.ts +0 -125
- package/scripts/test-store-structured-response.ts +0 -126
- package/scripts/test_agent_env_spawn.js +0 -82
- package/scripts/test_confidence.ts +0 -36
- package/scripts/test_dsnp_parquet_reading.ts +0 -72
- package/scripts/test_mcp_semantic_search.ts +0 -36
- package/scripts/test_parquet_ingestion.ts +0 -52
- package/scripts/test_raw_fragments_in_response.ts +0 -31
- package/scripts/test_sendgrid_smtp.sh +0 -45
- package/scripts/test_store_parquet_via_mcp.ts +0 -66
- package/scripts/trigger_error_debug_cli.js +0 -271
- package/scripts/unblock_agents.js +0 -208
- package/scripts/validate-coverage-map.ts +0 -187
- package/scripts/validate-doc-dependencies.js +0 -410
- package/scripts/validate_all_fu_compliance.js +0 -752
- package/scripts/validate_schema_sync.ts +0 -135
- package/scripts/validate_spec_compliance.js +0 -669
- package/scripts/watch_site.js +0 -68
- package/scripts/wipe-local-database.js +0 -191
- package/scripts/with_branch_ports.js +0 -496
- package/site_pages/.nojekyll +0 -0
- package/site_pages/FAVICON_CANDIDATES.md +0 -22
- package/site_pages/favicon-1-diamond.svg +0 -3
- package/site_pages/favicon-2-n-box.svg +0 -10
- package/site_pages/favicon-3-waves.svg +0 -3
- package/site_pages/favicon-4-n-minimal.svg +0 -3
- package/site_pages/favicon-5-bars.svg +0 -5
- package/site_pages/favicon.svg +0 -10
- package/site_pages/index.html +0 -40
- package/site_pages/robots.txt +0 -4
- package/site_pages/sitemap.xml +0 -5
- package/src/actions.ts +0 -4468
- package/src/cli/agent_instructions_scan.ts +0 -793
- package/src/cli/bootstrap.ts +0 -35
- package/src/cli/config.ts +0 -338
- package/src/cli/format.ts +0 -337
- package/src/cli/index.ts +0 -11417
- package/src/cli/init_abort.ts +0 -7
- package/src/cli/mcp_config_scan.ts +0 -1359
- package/src/cli/pack_rat.ts +0 -134
- package/src/config/record_types.ts +0 -562
- package/src/config.ts +0 -164
- package/src/crypto/agent_identity.ts +0 -46
- package/src/crypto/auth.ts +0 -110
- package/src/crypto/column_encryption.ts +0 -109
- package/src/crypto/crypto.test.ts +0 -311
- package/src/crypto/envelope.ts +0 -240
- package/src/crypto/export.ts +0 -131
- package/src/crypto/index.ts +0 -13
- package/src/crypto/key_derivation.ts +0 -176
- package/src/crypto/keys.ts +0 -85
- package/src/crypto/mcp_auth_token.ts +0 -35
- package/src/crypto/signature.ts +0 -50
- package/src/crypto/types.ts +0 -48
- package/src/db.ts +0 -66
- package/src/embeddings.ts +0 -76
- package/src/index.ts +0 -25
- package/src/mcp_ws_bridge.ts +0 -222
- package/src/middleware/encrypt_response.ts +0 -39
- package/src/normalize.ts +0 -351
- package/src/record_types.test.ts +0 -36
- package/src/reducers/index.ts +0 -5
- package/src/reducers/observation_reducer.ts +0 -458
- package/src/reducers/relationship_reducer.ts +0 -291
- package/src/repositories/db/capability_repo.ts +0 -29
- package/src/repositories/file/capability_repo.ts +0 -29
- package/src/repositories/index.ts +0 -7
- package/src/repositories/interfaces.ts +0 -112
- package/src/repositories/sqlite/__tests__/local_db_adapter.test.ts +0 -138
- package/src/repositories/sqlite/local_db_adapter.ts +0 -961
- package/src/repositories/sqlite/sqlite_client.ts +0 -378
- package/src/server.ts +0 -6157
- package/src/services/__tests__/csv_chunking.test.ts +0 -125
- package/src/services/__tests__/deletion.test.ts +0 -358
- package/src/services/__tests__/entity_semantic_search.test.ts +0 -45
- package/src/services/__tests__/local_auth.test.ts +0 -52
- package/src/services/__tests__/local_entity_embedding.test.ts +0 -108
- package/src/services/__tests__/mcp_oauth.test.ts +0 -407
- package/src/services/__tests__/oauth_key_gate.test.ts +0 -50
- package/src/services/__tests__/oauth_state.test.ts +0 -40
- package/src/services/__tests__/schema_icon_service.test.ts +0 -151
- package/src/services/auto_enhancement_processor.ts +0 -237
- package/src/services/capability_registry.ts +0 -202
- package/src/services/correction.ts +0 -87
- package/src/services/csv_chunking.ts +0 -128
- package/src/services/csv_row_extraction.ts +0 -124
- package/src/services/dashboard_stats.ts +0 -115
- package/src/services/deletion.ts +0 -482
- package/src/services/deletion_monitor.ts +0 -314
- package/src/services/encryption_service.ts +0 -110
- package/src/services/entity_merge.ts +0 -100
- package/src/services/entity_queries.ts +0 -518
- package/src/services/entity_resolution.ts +0 -367
- package/src/services/entity_semantic_search.ts +0 -64
- package/src/services/entity_snapshot_embedding.ts +0 -115
- package/src/services/field_canonicalization.ts +0 -393
- package/src/services/field_converters.ts +0 -173
- package/src/services/field_validation.ts +0 -173
- package/src/services/file_text_extraction.ts +0 -213
- package/src/services/finances_field_mapping.ts +0 -473
- package/src/services/gdpr_deletion.ts +0 -497
- package/src/services/interpretation.ts +0 -939
- package/src/services/llm_extraction.ts +0 -548
- package/src/services/local_auth.ts +0 -154
- package/src/services/local_entity_embedding.ts +0 -196
- package/src/services/mcp_auth.ts +0 -75
- package/src/services/mcp_oauth.ts +0 -1625
- package/src/services/mcp_oauth_errors.ts +0 -139
- package/src/services/oauth_key_gate.ts +0 -116
- package/src/services/oauth_state.ts +0 -70
- package/src/services/observation_identity.ts +0 -161
- package/src/services/observation_storage.ts +0 -162
- package/src/services/parquet_reader.ts +0 -375
- package/src/services/public_key_registry.ts +0 -103
- package/src/services/raw_fragments.ts +0 -217
- package/src/services/raw_storage.ts +0 -267
- package/src/services/relationships.ts +0 -495
- package/src/services/schema_definitions.ts +0 -2041
- package/src/services/schema_icon_service.ts +0 -260
- package/src/services/schema_inference.ts +0 -401
- package/src/services/schema_recommendation.ts +0 -1475
- package/src/services/schema_registry.ts +0 -1403
- package/src/services/snapshot_computation.ts +0 -92
- package/src/services/source_identity.ts +0 -22
- package/src/services/timeline_events.ts +0 -198
- package/src/shared/action_handlers/entity_handlers.ts +0 -115
- package/src/shared/action_schemas.test.ts +0 -59
- package/src/shared/action_schemas.ts +0 -317
- package/src/shared/api_client.ts +0 -86
- package/src/shared/contract_mappings.ts +0 -646
- package/src/shared/entity_display_name.ts +0 -64
- package/src/shared/local_transport.ts +0 -126
- package/src/shared/openapi_schema.ts +0 -175
- package/src/shared/openapi_types.ts +0 -2810
- package/src/shared/record_display_summary.ts +0 -133
- package/src/utils/__tests__/csv_summary.test.ts +0 -53
- package/src/utils/__tests__/lucide_icons.test.ts +0 -133
- package/src/utils/chat.test.ts +0 -42
- package/src/utils/chat.ts +0 -35
- package/src/utils/csv.test.ts +0 -41
- package/src/utils/csv.ts +0 -77
- package/src/utils/csv_summary.ts +0 -195
- package/src/utils/log_encrypt.ts +0 -144
- package/src/utils/logger.ts +0 -94
- package/src/utils/lucide_icons.ts +0 -279
- package/src/utils/property_keys.test.ts +0 -109
- package/src/utils/property_keys.ts +0 -66
- package/src/utils/property_sanitizer.test.ts +0 -105
- package/src/utils/property_sanitizer.ts +0 -135
- package/src/version_check.test.ts +0 -107
- package/src/version_check.ts +0 -58
- package/supabase/.temp/cli-latest +0 -0
- package/tailwind.config.mjs +0 -134
- package/tests/TEST_ACTION_MATRIX.md +0 -387
- package/tests/agent/mcp_instruction_behavior.test.ts +0 -72
- package/tests/agent/runner/agent_runner.ts +0 -27
- package/tests/agent/runner/claude_code_runner.ts +0 -128
- package/tests/agent/runner/cursor_cli_runner.ts +0 -7
- package/tests/cli/api_client_offline_fallback.test.ts +0 -89
- package/tests/cli/cli_admin_commands.test.ts +0 -268
- package/tests/cli/cli_api_commands.test.ts +0 -75
- package/tests/cli/cli_auth_commands.test.ts +0 -67
- package/tests/cli/cli_command_coverage_guard.test.ts +0 -50
- package/tests/cli/cli_correction_commands.test.ts +0 -277
- package/tests/cli/cli_direct_invocation_parity.test.ts +0 -46
- package/tests/cli/cli_entity_commands.test.ts +0 -324
- package/tests/cli/cli_entity_subcommands.test.ts +0 -422
- package/tests/cli/cli_infra_commands.test.ts +0 -475
- package/tests/cli/cli_mcp_commands.test.ts +0 -51
- package/tests/cli/cli_observation_commands.test.ts +0 -232
- package/tests/cli/cli_query_commands.test.ts +0 -369
- package/tests/cli/cli_relationship_commands.test.ts +0 -410
- package/tests/cli/cli_schema_commands.test.ts +0 -296
- package/tests/cli/cli_session_startup_ux.test.ts +0 -112
- package/tests/cli/cli_smoke.test.ts +0 -456
- package/tests/cli/cli_source_commands.test.ts +0 -214
- package/tests/cli/cli_stats_commands.test.ts +0 -51
- package/tests/cli/cli_store_commands.test.ts +0 -339
- package/tests/cli/cli_timeline_commands.test.ts +0 -294
- package/tests/cli/config.test.ts +0 -36
- package/tests/cli/config_api_discovery.test.ts +0 -91
- package/tests/cli/test_command_detection.test.ts +0 -128
- package/tests/cli/test_debug_tty.test.ts +0 -32
- package/tests/contract/contract_mapping.test.ts +0 -131
- package/tests/contract/contract_mcp_cli_parity.test.ts +0 -223
- package/tests/contract/openapi_schema.test.ts +0 -15
- package/tests/fixtures/README.md +0 -22
- package/tests/fixtures/agent_mcp/insurance_policy.txt +0 -5
- package/tests/fixtures/agent_mcp_cases.json +0 -137
- package/tests/fixtures/csv/sample_balances.csv +0 -7
- package/tests/fixtures/csv/sample_contacts.csv +0 -6
- package/tests/fixtures/csv/sample_crypto_transactions.csv +0 -6
- package/tests/fixtures/csv/sample_flows.csv +0 -7
- package/tests/fixtures/csv/sample_holdings.csv +0 -7
- package/tests/fixtures/csv/sample_income.csv +0 -7
- package/tests/fixtures/csv/sample_purchases.csv +0 -7
- package/tests/fixtures/csv/sample_tax_events.csv +0 -7
- package/tests/fixtures/csv/sample_transactions.csv +0 -7
- package/tests/fixtures/csv/sample_transfers.csv +0 -6
- package/tests/fixtures/expected/contact_snapshot.json +0 -19
- package/tests/fixtures/expected/transaction_snapshot.json +0 -21
- package/tests/fixtures/helpers.ts +0 -522
- package/tests/fixtures/json/account.json +0 -63
- package/tests/fixtures/json/argument.json +0 -39
- package/tests/fixtures/json/balance.json +0 -56
- package/tests/fixtures/json/belief.json +0 -44
- package/tests/fixtures/json/contact.json +0 -83
- package/tests/fixtures/json/contract.json +0 -62
- package/tests/fixtures/json/crypto_transaction.json +0 -67
- package/tests/fixtures/json/domain.json +0 -41
- package/tests/fixtures/json/emotion.json +0 -31
- package/tests/fixtures/json/fixed_cost.json +0 -75
- package/tests/fixtures/json/flow.json +0 -71
- package/tests/fixtures/json/habit.json +0 -54
- package/tests/fixtures/json/habit_completion.json +0 -31
- package/tests/fixtures/json/habit_objective.json +0 -40
- package/tests/fixtures/json/holding.json +0 -65
- package/tests/fixtures/json/income.json +0 -59
- package/tests/fixtures/json/liability.json +0 -50
- package/tests/fixtures/json/order.json +0 -62
- package/tests/fixtures/json/outcome.json +0 -56
- package/tests/fixtures/json/process.json +0 -43
- package/tests/fixtures/json/property.json +0 -52
- package/tests/fixtures/json/purchase.json +0 -66
- package/tests/fixtures/json/research.json +0 -53
- package/tests/fixtures/json/strategy.json +0 -68
- package/tests/fixtures/json/task_attachment.json +0 -62
- package/tests/fixtures/json/task_comment.json +0 -54
- package/tests/fixtures/json/task_dependency.json +0 -51
- package/tests/fixtures/json/task_story.json +0 -53
- package/tests/fixtures/json/tax_event.json +0 -60
- package/tests/fixtures/json/tax_filing.json +0 -61
- package/tests/fixtures/json/transaction.json +0 -62
- package/tests/fixtures/json/transfer.json +0 -60
- package/tests/fixtures/json/wallet.json +0 -51
- package/tests/fixtures/json/workout.json +0 -45
- package/tests/fixtures/pdf/sample-upload.txt +0 -2
- package/tests/fixtures/pdf/sample_bank_statement.md +0 -32
- package/tests/fixtures/pdf/sample_bank_statement.pdf +0 -0
- package/tests/fixtures/pdf/sample_contract.md +0 -27
- package/tests/fixtures/pdf/sample_contract.pdf +0 -0
- package/tests/fixtures/pdf/sample_exercise.md +0 -31
- package/tests/fixtures/pdf/sample_exercise.pdf +0 -0
- package/tests/fixtures/pdf/sample_holding_statement.md +0 -29
- package/tests/fixtures/pdf/sample_holding_statement.pdf +0 -0
- package/tests/fixtures/pdf/sample_invoice.md +0 -27
- package/tests/fixtures/pdf/sample_invoice.pdf +0 -108
- package/tests/fixtures/pdf/sample_meal.md +0 -28
- package/tests/fixtures/pdf/sample_meal.pdf +0 -111
- package/tests/fixtures/pdf/sample_note.md +0 -28
- package/tests/fixtures/pdf/sample_note.pdf +0 -0
- package/tests/fixtures/pdf/sample_receipt.md +0 -28
- package/tests/fixtures/pdf/sample_receipt.pdf +0 -0
- package/tests/fixtures/pdf/sample_research.md +0 -31
- package/tests/fixtures/pdf/sample_research.pdf +0 -0
- package/tests/fixtures/pdf/sample_tax_form.md +0 -38
- package/tests/fixtures/pdf/sample_tax_form.pdf +0 -0
- package/tests/fixtures/pdf/sample_transaction_receipt.md +0 -28
- package/tests/fixtures/pdf/sample_transaction_receipt.pdf +0 -0
- package/tests/fixtures/replay_graph.test.ts +0 -125
- package/tests/fixtures/sample_invoice.pdf +0 -1
- package/tests/fixtures/types.ts +0 -321
- package/tests/fixtures/validation.ts +0 -333
- package/tests/helpers/cleanup_helpers.ts +0 -550
- package/tests/helpers/create_test_parquet.ts +0 -187
- package/tests/helpers/cross_layer_helpers.ts +0 -130
- package/tests/helpers/mcp_action_helper.ts +0 -55
- package/tests/helpers/mcp_spec_validators.ts +0 -433
- package/tests/helpers/test_data_helpers.ts +0 -226
- package/tests/helpers/test_schema_helpers.ts +0 -264
- package/tests/integration/cli_to_mcp_entities.test.ts +0 -211
- package/tests/integration/cli_to_mcp_relationships.test.ts +0 -196
- package/tests/integration/cli_to_mcp_schemas.test.ts +0 -232
- package/tests/integration/cli_to_mcp_stats_snapshots.test.ts +0 -67
- package/tests/integration/cli_to_mcp_store.test.ts +0 -249
- package/tests/integration/dashboard_stats.test.ts +0 -180
- package/tests/integration/entity_queries.test.ts +0 -666
- package/tests/integration/field_converters.test.ts +0 -266
- package/tests/integration/fixture_mcp_store_replay.test.ts +0 -255
- package/tests/integration/gdpr_deletion.test.ts +0 -433
- package/tests/integration/llm_extraction.test.ts +0 -554
- package/tests/integration/mcp_actions_matrix.test.ts +0 -969
- package/tests/integration/mcp_auto_enhancement.test.ts +0 -659
- package/tests/integration/mcp_auto_schema_creation.test.ts +0 -658
- package/tests/integration/mcp_correction_variations.test.ts +0 -641
- package/tests/integration/mcp_entity_creation.test.ts +0 -333
- package/tests/integration/mcp_entity_variations.test.ts +0 -474
- package/tests/integration/mcp_graph_variations.test.ts +0 -380
- package/tests/integration/mcp_npm_check_update.test.ts +0 -54
- package/tests/integration/mcp_query_variations.test.ts +0 -392
- package/tests/integration/mcp_relationship_variations.test.ts +0 -433
- package/tests/integration/mcp_resource_variations.test.ts +0 -423
- package/tests/integration/mcp_resources.test.ts +0 -452
- package/tests/integration/mcp_schema_actions.test.ts +0 -673
- package/tests/integration/mcp_schema_variations.test.ts +0 -428
- package/tests/integration/mcp_store_parquet.test.ts +0 -466
- package/tests/integration/mcp_store_unstructured.test.ts +0 -413
- package/tests/integration/mcp_store_variations.test.ts +0 -452
- package/tests/integration/nonjson_csv_store_behavior.test.ts +0 -348
- package/tests/integration/nonjson_fixtures_mcp_replay.test.ts +0 -253
- package/tests/integration/observation_ingestion.test.ts +0 -362
- package/tests/integration/payload/payload_submission.test.ts +0 -296
- package/tests/integration/payload_compiler.test.ts +0 -347
- package/tests/integration/public_key_registry.test.ts +0 -204
- package/tests/integration/relationship_snapshots.test.ts +0 -235
- package/tests/integration/schema_recommendation_integration.test.ts +0 -418
- package/tests/integration/setup_v0.2.0_schemas.ts +0 -61
- package/tests/integration/v0.2.0_ingestion.test.ts +0 -527
- package/tests/services/auto_enhancement_converter_detection.test.ts +0 -663
- package/tests/services/auto_enhancement_processor.test.ts +0 -445
- package/tests/services/capability_registry.test.ts +0 -254
- package/tests/services/converter_detection_unit.test.ts +0 -168
- package/tests/services/encryption_service.test.ts +0 -147
- package/tests/services/entity_resolution.test.ts +0 -285
- package/tests/services/field_canonicalization.test.ts +0 -215
- package/tests/services/field_converters.test.ts +0 -211
- package/tests/services/field_validation.test.ts +0 -318
- package/tests/services/finances_field_mapping.test.ts +0 -245
- package/tests/services/interpretation.test.ts +0 -144
- package/tests/services/mcp_auth.test.ts +0 -34
- package/tests/services/observation_identity.test.ts +0 -154
- package/tests/services/payload_identity.test.ts +0 -325
- package/tests/services/payload_schema.test.ts +0 -282
- package/tests/services/raw_storage.test.ts +0 -546
- package/tests/services/schema_definitions.test.ts +0 -119
- package/tests/services/schema_recommendation.test.ts +0 -590
- package/tests/services/schema_registry_incremental.test.ts +0 -882
- package/tests/services/summary.test.ts +0 -26
- package/tests/unit/bigint_serialization.test.ts +0 -220
- package/tests/unit/observation_reducer_converters.test.ts +0 -430
- package/tests/unit/parquet_reader.test.ts +0 -155
- package/tests/unit/relationship_reducer.test.ts +0 -208
- package/tests/unit/schema_inference.test.ts +0 -358
- package/tests/unit/seo_metadata.test.ts +0 -52
- package/tsconfig.json +0 -22
- package/vite.config.ts +0 -165
- package/vitest.config.ts +0 -111
- package/vitest.global_setup.ts +0 -42
- package/vitest.setup.ts +0 -89
|
@@ -1,996 +0,0 @@
|
|
|
1
|
-
## Marketing Automation Implementation Guide
|
|
2
|
-
### Purpose
|
|
3
|
-
This document provides step-by-step implementation guidance to address the four missing components for marketing automation:
|
|
4
|
-
1. Social media posting APIs (current X provider only reads)
|
|
5
|
-
2. Content generation from release data
|
|
6
|
-
3. Automated posting workflow
|
|
7
|
-
4. Performance measurement integration
|
|
8
|
-
### 1. Social Media Posting APIs
|
|
9
|
-
#### 1.1 Extend X Provider with Write Capabilities
|
|
10
|
-
**Current State**: `src/integrations/providers/x.ts` only implements `fetchUpdates()` (read-only)
|
|
11
|
-
**Implementation Steps**:
|
|
12
|
-
1. **Add posting method to XProviderClient**:
|
|
13
|
-
**Compatibility**: ✅ Fully compatible. `XProviderClient` extends `RestProviderClient` which provides:
|
|
14
|
-
- `requireAccessToken()` - for token extraction from secrets
|
|
15
|
-
- `fetchJson()` - for HTTP requests with retry logic
|
|
16
|
-
- Protected methods that can be used by subclasses
|
|
17
|
-
The new methods are **additive** (don't modify existing interface) and follow the same patterns as `fetchUpdates()`.
|
|
18
|
-
```typescript
|
|
19
|
-
// Add to src/integrations/providers/x.ts
|
|
20
|
-
import { setTimeout as delay } from 'node:timers/promises';
|
|
21
|
-
import type { ConnectorSecrets } from '../../services/connectors.js';
|
|
22
|
-
interface PostTweetInput {
|
|
23
|
-
text: string;
|
|
24
|
-
replyToTweetId?: string;
|
|
25
|
-
mediaIds?: string[];
|
|
26
|
-
}
|
|
27
|
-
interface PostTweetResult {
|
|
28
|
-
tweetId: string;
|
|
29
|
-
text: string;
|
|
30
|
-
createdAt: string;
|
|
31
|
-
}
|
|
32
|
-
interface PostTweetResponse {
|
|
33
|
-
data: {
|
|
34
|
-
id: string;
|
|
35
|
-
text: string;
|
|
36
|
-
created_at: string;
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
// Add these methods to XProviderClient class:
|
|
40
|
-
async postTweet(input: PostTweetInput, secrets: ConnectorSecrets | null): Promise<PostTweetResult> {
|
|
41
|
-
const token = this.requireAccessToken(secrets);
|
|
42
|
-
// Twitter API v2 POST /2/tweets endpoint
|
|
43
|
-
// Documentation: https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets
|
|
44
|
-
// Required: OAuth 2.0 with tweet.write scope
|
|
45
|
-
// Endpoint: POST https://api.twitter.com/2/tweets
|
|
46
|
-
const body: any = { text: input.text };
|
|
47
|
-
// Reply to existing tweet
|
|
48
|
-
if (input.replyToTweetId) {
|
|
49
|
-
body.reply = { in_reply_to_tweet_id: input.replyToTweetId };
|
|
50
|
-
}
|
|
51
|
-
// Attach media (requires media_ids from media upload API)
|
|
52
|
-
if (input.mediaIds && input.mediaIds.length > 0) {
|
|
53
|
-
body.media = { media_ids: input.mediaIds };
|
|
54
|
-
}
|
|
55
|
-
// Note: fetchJson handles POST requests - it passes ...init to fetch()
|
|
56
|
-
const response = await this.fetchJson<PostTweetResponse>(
|
|
57
|
-
'https://api.twitter.com/2/tweets',
|
|
58
|
-
{
|
|
59
|
-
method: 'POST',
|
|
60
|
-
headers: {
|
|
61
|
-
Authorization: `Bearer ${token}`,
|
|
62
|
-
'Content-Type': 'application/json',
|
|
63
|
-
},
|
|
64
|
-
body: JSON.stringify(body),
|
|
65
|
-
}
|
|
66
|
-
);
|
|
67
|
-
return {
|
|
68
|
-
tweetId: response.data.id,
|
|
69
|
-
text: response.data.text,
|
|
70
|
-
createdAt: response.data.created_at,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
async postThread(tweets: string[], secrets: ConnectorSecrets | null): Promise<PostTweetResult[]> {
|
|
74
|
-
const results: PostTweetResult[] = [];
|
|
75
|
-
let replyToTweetId: string | undefined;
|
|
76
|
-
for (const tweetText of tweets) {
|
|
77
|
-
const result = await this.postTweet(
|
|
78
|
-
{ text: tweetText, replyToTweetId },
|
|
79
|
-
secrets
|
|
80
|
-
);
|
|
81
|
-
results.push(result);
|
|
82
|
-
replyToTweetId = result.tweetId;
|
|
83
|
-
// Small delay between tweets in thread (1 second)
|
|
84
|
-
await delay(1000);
|
|
85
|
-
}
|
|
86
|
-
return results;
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
**Key Compatibility Points**:
|
|
90
|
-
- ✅ Uses `this.requireAccessToken()` from base class
|
|
91
|
-
- ✅ Uses `this.fetchJson()` from base class (handles POST with body)
|
|
92
|
-
- ✅ Follows same error handling patterns
|
|
93
|
-
- ✅ Doesn't modify `ProviderClient` interface (additive methods)
|
|
94
|
-
- ✅ Uses same `ConnectorSecrets` type as `fetchUpdates()`
|
|
95
|
-
**X API v2 Support**:
|
|
96
|
-
- ✅ **POST `/2/tweets` endpoint exists** - Official Twitter API v2 endpoint
|
|
97
|
-
- ✅ **OAuth 2.0 Bearer token** - Same auth method as `fetchUpdates()`
|
|
98
|
-
- ✅ **Request/Response format** - Matches API documentation
|
|
99
|
-
- ✅ **Thread support** - Via `reply.in_reply_to_tweet_id` parameter
|
|
100
|
-
- ⚠️ **Media upload** - Requires separate OAuth 1.0a endpoint (can defer to Phase 2)
|
|
101
|
-
- ⚠️ **Rate limits** - Vary by API tier (Free: 1,500 tweets/month)
|
|
102
|
-
**API Documentation**: https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets
|
|
103
|
-
2. **Update OAuth scopes**:
|
|
104
|
-
**Current**: `tweet.read`, `users.read` (read-only)
|
|
105
|
-
**Required for posting**: `tweet.read`, `tweet.write`, `users.read`
|
|
106
|
-
**API Requirements**:
|
|
107
|
-
- Twitter API v2 supports POST `/2/tweets` endpoint ✅
|
|
108
|
-
- Requires OAuth 2.0 authentication with `tweet.write` scope ✅
|
|
109
|
-
- Endpoint: `POST https://api.twitter.com/2/tweets` ✅
|
|
110
|
-
- Request body: `{ text: string, reply?: { in_reply_to_tweet_id: string }, media?: { media_ids: string[] } }` ✅
|
|
111
|
-
- Response: `{ data: { id: string, text: string, created_at: string } }` ✅
|
|
112
|
-
**Update**: `src/integrations/providers/metadata.ts` OAuth scopes:
|
|
113
|
-
```typescript
|
|
114
|
-
// Update oauthScopes from:
|
|
115
|
-
oauthScopes: ["tweet.read", "users.read"];
|
|
116
|
-
// To:
|
|
117
|
-
oauthScopes: ["tweet.read", "tweet.write", "users.read"];
|
|
118
|
-
```
|
|
119
|
-
**API Limitations**:
|
|
120
|
-
- Rate limit: Varies by tier (Free tier: 1,500 tweets/month, Basic: 3,000/month)
|
|
121
|
-
- Character limit: 280 characters per tweet
|
|
122
|
-
- Thread limit: No official limit, but rate limits apply
|
|
123
|
-
- Media: Requires separate media upload API call first
|
|
124
|
-
3. **Add media upload support** (optional, for images):
|
|
125
|
-
**Twitter Media Upload API**:
|
|
126
|
-
- Endpoint: `POST https://upload.twitter.com/1.1/media/upload.json`
|
|
127
|
-
- Requires: OAuth 1.0a (not OAuth 2.0) for media upload
|
|
128
|
-
- Format: `multipart/form-data`
|
|
129
|
-
- Returns: `media_id_string` for use in `postTweet()`
|
|
130
|
-
**Note**: Media upload uses OAuth 1.0a, which is different from OAuth 2.0 used for tweet posting. This requires additional implementation.
|
|
131
|
-
```typescript
|
|
132
|
-
async uploadMedia(filePath: string, secrets: ConnectorSecrets): Promise<string> {
|
|
133
|
-
// Twitter media upload API v1.1
|
|
134
|
-
// Endpoint: POST https://upload.twitter.com/1.1/media/upload.json
|
|
135
|
-
// Requires: OAuth 1.0a (different from OAuth 2.0 for tweets)
|
|
136
|
-
// Format: multipart/form-data
|
|
137
|
-
// Returns: media_id_string
|
|
138
|
-
// Implementation requires:
|
|
139
|
-
// 1. OAuth 1.0a signing (different from OAuth 2.0 Bearer token)
|
|
140
|
-
// 2. Multipart form data handling
|
|
141
|
-
// 3. File reading and streaming
|
|
142
|
-
// For MVP, can skip media upload and post text-only tweets
|
|
143
|
-
throw new Error('Media upload not yet implemented - requires OAuth 1.0a');
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
**Alternative**: For MVP, post text-only tweets (no media). Add media support in Phase 2.
|
|
147
|
-
#### 1.2 Create LinkedIn Provider Client
|
|
148
|
-
**New File**: `src/integrations/providers/linkedin.ts`
|
|
149
|
-
```typescript
|
|
150
|
-
import { RestProviderClient } from "./base.js";
|
|
151
|
-
import type { ConnectorSecrets } from "../../services/connectors.js";
|
|
152
|
-
interface PostLinkedInInput {
|
|
153
|
-
text: string;
|
|
154
|
-
visibility?: "PUBLIC" | "CONNECTIONS";
|
|
155
|
-
}
|
|
156
|
-
interface PostLinkedInResult {
|
|
157
|
-
postId: string;
|
|
158
|
-
text: string;
|
|
159
|
-
createdAt: string;
|
|
160
|
-
}
|
|
161
|
-
export class LinkedInProviderClient extends RestProviderClient {
|
|
162
|
-
readonly id = "linkedin";
|
|
163
|
-
readonly capabilities = ["messages"] as const;
|
|
164
|
-
readonly defaultRecordType = "message";
|
|
165
|
-
async fetchUpdates(input: FetchUpdatesInput): Promise<FetchUpdatesResult> {
|
|
166
|
-
// Read implementation (if needed)
|
|
167
|
-
throw new Error("LinkedIn read not implemented");
|
|
168
|
-
}
|
|
169
|
-
async postUpdate(
|
|
170
|
-
input: PostLinkedInInput,
|
|
171
|
-
secrets: ConnectorSecrets
|
|
172
|
-
): Promise<PostLinkedInResult> {
|
|
173
|
-
const token = this.requireAccessToken(secrets);
|
|
174
|
-
const userId = this.requireField(secrets?.userId as string, "userId");
|
|
175
|
-
// LinkedIn API v2 posting
|
|
176
|
-
const response = await this.fetchJson<{ id: string }>(
|
|
177
|
-
`https://api.linkedin.com/v2/ugcPosts`,
|
|
178
|
-
{
|
|
179
|
-
method: "POST",
|
|
180
|
-
headers: {
|
|
181
|
-
Authorization: `Bearer ${token}`,
|
|
182
|
-
"Content-Type": "application/json",
|
|
183
|
-
"X-Restli-Protocol-Version": "2.0.0",
|
|
184
|
-
},
|
|
185
|
-
body: JSON.stringify({
|
|
186
|
-
author: `urn:li:person:${userId}`,
|
|
187
|
-
lifecycleState: "PUBLISHED",
|
|
188
|
-
specificContent: {
|
|
189
|
-
"com.linkedin.ugc.ShareContent": {
|
|
190
|
-
shareCommentary: {
|
|
191
|
-
text: input.text,
|
|
192
|
-
},
|
|
193
|
-
shareMediaCategory: "NONE",
|
|
194
|
-
},
|
|
195
|
-
},
|
|
196
|
-
visibility: {
|
|
197
|
-
"com.linkedin.ugc.MemberNetworkVisibility":
|
|
198
|
-
input.visibility || "PUBLIC",
|
|
199
|
-
},
|
|
200
|
-
}),
|
|
201
|
-
}
|
|
202
|
-
);
|
|
203
|
-
return {
|
|
204
|
-
postId: response.id,
|
|
205
|
-
text: input.text,
|
|
206
|
-
createdAt: new Date().toISOString(),
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
```
|
|
211
|
-
**OAuth Setup**:
|
|
212
|
-
- Create LinkedIn app at https://www.linkedin.com/developers/
|
|
213
|
-
- Request `w_member_social` scope (write posts)
|
|
214
|
-
- Store credentials in environment variables
|
|
215
|
-
#### 1.3 Create Product Hunt Provider Client
|
|
216
|
-
**New File**: `src/integrations/providers/product_hunt.ts`
|
|
217
|
-
```typescript
|
|
218
|
-
import { RestProviderClient } from "./base.js";
|
|
219
|
-
import type { ConnectorSecrets } from "../../services/connectors.js";
|
|
220
|
-
interface PostProductHuntInput {
|
|
221
|
-
name: string;
|
|
222
|
-
tagline: string;
|
|
223
|
-
description: string;
|
|
224
|
-
topics: string[];
|
|
225
|
-
website: string;
|
|
226
|
-
screenshotUrls: string[];
|
|
227
|
-
}
|
|
228
|
-
interface PostProductHuntResult {
|
|
229
|
-
postId: string;
|
|
230
|
-
url: string;
|
|
231
|
-
}
|
|
232
|
-
export class ProductHuntProviderClient extends RestProviderClient {
|
|
233
|
-
readonly id = "product_hunt";
|
|
234
|
-
readonly capabilities = ["messages"] as const;
|
|
235
|
-
readonly defaultRecordType = "message";
|
|
236
|
-
async fetchUpdates(input: FetchUpdatesInput): Promise<FetchUpdatesResult> {
|
|
237
|
-
throw new Error("Product Hunt read not implemented");
|
|
238
|
-
}
|
|
239
|
-
async submitProduct(
|
|
240
|
-
input: PostProductHuntInput,
|
|
241
|
-
secrets: ConnectorSecrets
|
|
242
|
-
): Promise<PostProductHuntResult> {
|
|
243
|
-
const token = this.requireAccessToken(secrets);
|
|
244
|
-
// Product Hunt API (check current API docs for exact endpoint)
|
|
245
|
-
const response = await this.fetchJson<{
|
|
246
|
-
post: { id: string; url: string };
|
|
247
|
-
}>("https://api.producthunt.com/v2/api/graphql", {
|
|
248
|
-
method: "POST",
|
|
249
|
-
headers: {
|
|
250
|
-
Authorization: `Bearer ${token}`,
|
|
251
|
-
"Content-Type": "application/json",
|
|
252
|
-
},
|
|
253
|
-
body: JSON.stringify({
|
|
254
|
-
query: `
|
|
255
|
-
mutation CreatePost($input: CreatePostInput!) {
|
|
256
|
-
createPost(input: $input) {
|
|
257
|
-
post { id url }
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
`,
|
|
261
|
-
variables: {
|
|
262
|
-
input: {
|
|
263
|
-
name: input.name,
|
|
264
|
-
tagline: input.tagline,
|
|
265
|
-
description: input.description,
|
|
266
|
-
topics: input.topics,
|
|
267
|
-
website: input.website,
|
|
268
|
-
screenshotUrls: input.screenshotUrls,
|
|
269
|
-
},
|
|
270
|
-
},
|
|
271
|
-
}),
|
|
272
|
-
});
|
|
273
|
-
return {
|
|
274
|
-
postId: response.post.id,
|
|
275
|
-
url: response.post.url,
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
```
|
|
280
|
-
**Note**: Product Hunt API may require manual submission or different endpoint. Check current API documentation.
|
|
281
|
-
#### 1.4 Create Hacker News Provider Client
|
|
282
|
-
**New File**: `src/integrations/providers/hacker_news.ts`
|
|
283
|
-
```typescript
|
|
284
|
-
import { RestProviderClient } from "./base.js";
|
|
285
|
-
interface PostHackerNewsInput {
|
|
286
|
-
title: string;
|
|
287
|
-
url?: string;
|
|
288
|
-
text?: string;
|
|
289
|
-
}
|
|
290
|
-
interface PostHackerNewsResult {
|
|
291
|
-
postId: string;
|
|
292
|
-
url: string;
|
|
293
|
-
}
|
|
294
|
-
export class HackerNewsProviderClient extends RestProviderClient {
|
|
295
|
-
readonly id = "hacker_news";
|
|
296
|
-
readonly capabilities = ["messages"] as const;
|
|
297
|
-
readonly defaultRecordType = "message";
|
|
298
|
-
async fetchUpdates(input: FetchUpdatesInput): Promise<FetchUpdatesResult> {
|
|
299
|
-
throw new Error("Hacker News read not implemented");
|
|
300
|
-
}
|
|
301
|
-
async submitPost(
|
|
302
|
-
input: PostHackerNewsInput,
|
|
303
|
-
secrets: ConnectorSecrets
|
|
304
|
-
): Promise<PostHackerNewsResult> {
|
|
305
|
-
// Hacker News uses Firebase API
|
|
306
|
-
// Requires authentication cookie (username/password)
|
|
307
|
-
// Note: HN doesn't have official API, this is unofficial
|
|
308
|
-
const username = this.requireField(secrets?.username as string, "username");
|
|
309
|
-
const password = this.requireField(secrets?.password as string, "password");
|
|
310
|
-
// Login to get session cookie
|
|
311
|
-
const loginResponse = await fetch("https://news.ycombinator.com/login", {
|
|
312
|
-
method: "POST",
|
|
313
|
-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
314
|
-
body: new URLSearchParams({
|
|
315
|
-
acct: username,
|
|
316
|
-
pw: password,
|
|
317
|
-
goto: "news",
|
|
318
|
-
}),
|
|
319
|
-
});
|
|
320
|
-
const cookie = loginResponse.headers.get("set-cookie");
|
|
321
|
-
if (!cookie) {
|
|
322
|
-
throw new Error("Hacker News login failed");
|
|
323
|
-
}
|
|
324
|
-
// Submit post
|
|
325
|
-
const submitResponse = await this.fetchJson<{ id: string }>(
|
|
326
|
-
"https://news.ycombinator.com/submit",
|
|
327
|
-
{
|
|
328
|
-
method: "POST",
|
|
329
|
-
headers: {
|
|
330
|
-
Cookie: cookie,
|
|
331
|
-
"Content-Type": "application/x-www-form-urlencoded",
|
|
332
|
-
},
|
|
333
|
-
body: new URLSearchParams({
|
|
334
|
-
title: input.title,
|
|
335
|
-
url: input.url || "",
|
|
336
|
-
text: input.text || "",
|
|
337
|
-
}),
|
|
338
|
-
}
|
|
339
|
-
);
|
|
340
|
-
return {
|
|
341
|
-
postId: submitResponse.id,
|
|
342
|
-
url: `https://news.ycombinator.com/item?id=${submitResponse.id}`,
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
```
|
|
347
|
-
**Note**: Hacker News doesn't have an official API. Consider manual posting or using unofficial APIs with caution.
|
|
348
|
-
### 2. Content Generation from Release Data
|
|
349
|
-
#### 2.1 Create Marketing Automation Service
|
|
350
|
-
**New File**: `src/services/marketing_automation.ts`
|
|
351
|
-
```typescript
|
|
352
|
-
import { promises as fs } from "fs";
|
|
353
|
-
import path from "path";
|
|
354
|
-
import OpenAI from "openai";
|
|
355
|
-
import { config } from "../config.js";
|
|
356
|
-
const openai = config.openaiApiKey
|
|
357
|
-
? new OpenAI({ apiKey: config.openaiApiKey })
|
|
358
|
-
: null;
|
|
359
|
-
interface ReleaseData {
|
|
360
|
-
releaseId: string;
|
|
361
|
-
releaseName: string;
|
|
362
|
-
status: string;
|
|
363
|
-
batches: Array<{ id: string; status: string; featureUnits: string[] }>;
|
|
364
|
-
featureUnits: Array<{ id: string; name: string; status: string }>;
|
|
365
|
-
metrics: {
|
|
366
|
-
batchCompletion: number;
|
|
367
|
-
fuCompletion: number;
|
|
368
|
-
testPassRate: number;
|
|
369
|
-
};
|
|
370
|
-
}
|
|
371
|
-
interface ContentTemplate {
|
|
372
|
-
platform: string;
|
|
373
|
-
format: "thread" | "post" | "article";
|
|
374
|
-
maxLength?: number;
|
|
375
|
-
}
|
|
376
|
-
export class MarketingAutomationService {
|
|
377
|
-
async loadReleaseData(releaseId: string): Promise<ReleaseData> {
|
|
378
|
-
const basePath = `docs/releases/${releaseId}`;
|
|
379
|
-
// Load release report
|
|
380
|
-
const reportPath = path.join(basePath, "release_report.md");
|
|
381
|
-
const reportContent = await fs.readFile(reportPath, "utf-8");
|
|
382
|
-
// Parse release report (simplified - use proper parser)
|
|
383
|
-
const batches = this.parseBatches(reportContent);
|
|
384
|
-
const featureUnits = this.parseFeatureUnits(reportContent);
|
|
385
|
-
const metrics = this.parseMetrics(reportContent);
|
|
386
|
-
// Load manifest
|
|
387
|
-
const manifestPath = path.join(basePath, "manifest.yaml");
|
|
388
|
-
const manifestContent = await fs.readFile(manifestPath, "utf-8");
|
|
389
|
-
const manifest = this.parseYAML(manifestContent);
|
|
390
|
-
return {
|
|
391
|
-
releaseId: manifest.release.id,
|
|
392
|
-
releaseName: manifest.release.name,
|
|
393
|
-
status: manifest.release.status,
|
|
394
|
-
batches,
|
|
395
|
-
featureUnits,
|
|
396
|
-
metrics,
|
|
397
|
-
};
|
|
398
|
-
}
|
|
399
|
-
async generateContent(
|
|
400
|
-
releaseData: ReleaseData,
|
|
401
|
-
template: ContentTemplate
|
|
402
|
-
): Promise<string> {
|
|
403
|
-
if (!openai) {
|
|
404
|
-
throw new Error("OpenAI API key not configured");
|
|
405
|
-
}
|
|
406
|
-
const prompt = this.buildPrompt(releaseData, template);
|
|
407
|
-
const response = await openai.chat.completions.create({
|
|
408
|
-
model: "gpt-4o-mini",
|
|
409
|
-
temperature: 0.7,
|
|
410
|
-
messages: [
|
|
411
|
-
{
|
|
412
|
-
role: "system",
|
|
413
|
-
content: this.getSystemPrompt(template),
|
|
414
|
-
},
|
|
415
|
-
{
|
|
416
|
-
role: "user",
|
|
417
|
-
content: prompt,
|
|
418
|
-
},
|
|
419
|
-
],
|
|
420
|
-
});
|
|
421
|
-
const content = response.choices[0]?.message?.content;
|
|
422
|
-
if (!content) {
|
|
423
|
-
throw new Error("No content generated");
|
|
424
|
-
}
|
|
425
|
-
return this.formatContent(content, template);
|
|
426
|
-
}
|
|
427
|
-
private buildPrompt(
|
|
428
|
-
releaseData: ReleaseData,
|
|
429
|
-
template: ContentTemplate
|
|
430
|
-
): string {
|
|
431
|
-
return `
|
|
432
|
-
Generate a ${template.platform} ${template.format} for the following release:
|
|
433
|
-
Release: ${releaseData.releaseName} (${releaseData.releaseId})
|
|
434
|
-
Status: ${releaseData.status}
|
|
435
|
-
Key Metrics:
|
|
436
|
-
- Batch Completion: ${releaseData.metrics.batchCompletion}%
|
|
437
|
-
- Feature Unit Completion: ${releaseData.metrics.fuCompletion}%
|
|
438
|
-
- Test Pass Rate: ${releaseData.metrics.testPassRate}%
|
|
439
|
-
Completed Feature Units:
|
|
440
|
-
${releaseData.featureUnits
|
|
441
|
-
.filter((fu) => fu.status === "Complete")
|
|
442
|
-
.map((fu) => `- ${fu.id}: ${fu.name}`)
|
|
443
|
-
.join("\n")}
|
|
444
|
-
Requirements:
|
|
445
|
-
- Platform: ${template.platform}
|
|
446
|
-
- Format: ${template.format}
|
|
447
|
-
${template.maxLength ? `- Max length: ${template.maxLength} characters` : ""}
|
|
448
|
-
- Tone: Technical but accessible
|
|
449
|
-
- Include call-to-action with UTM parameters
|
|
450
|
-
- Highlight key achievements and value proposition
|
|
451
|
-
`;
|
|
452
|
-
}
|
|
453
|
-
private getSystemPrompt(template: ContentTemplate): string {
|
|
454
|
-
const platformPrompts: Record<string, string> = {
|
|
455
|
-
twitter:
|
|
456
|
-
"You are a technical marketing writer creating Twitter threads. Use emojis sparingly. Break into logical thread segments. Include technical details but keep accessible.",
|
|
457
|
-
linkedin:
|
|
458
|
-
"You are a professional marketing writer creating LinkedIn posts. Use professional tone. Highlight business value and technical achievements.",
|
|
459
|
-
product_hunt:
|
|
460
|
-
"You are creating a Product Hunt launch description. Focus on what makes the product unique, key features, and value proposition. Include clear tagline.",
|
|
461
|
-
hacker_news:
|
|
462
|
-
'You are creating a "Show HN" post for Hacker News. Be technical, honest, and direct. Focus on what you built and why it matters.',
|
|
463
|
-
};
|
|
464
|
-
return (
|
|
465
|
-
platformPrompts[template.platform] ||
|
|
466
|
-
"You are a marketing content writer."
|
|
467
|
-
);
|
|
468
|
-
}
|
|
469
|
-
private formatContent(content: string, template: ContentTemplate): string {
|
|
470
|
-
if (template.format === "thread") {
|
|
471
|
-
// Split into thread segments (280 chars per tweet)
|
|
472
|
-
return this.splitIntoThread(content);
|
|
473
|
-
}
|
|
474
|
-
return content;
|
|
475
|
-
}
|
|
476
|
-
private splitIntoThread(content: string): string {
|
|
477
|
-
// Simple thread splitting (improve with better logic)
|
|
478
|
-
const sentences = content.split(/[.!?]\s+/);
|
|
479
|
-
const threads: string[] = [];
|
|
480
|
-
let currentThread = "";
|
|
481
|
-
for (const sentence of sentences) {
|
|
482
|
-
if ((currentThread + sentence).length > 250) {
|
|
483
|
-
if (currentThread) threads.push(currentThread.trim());
|
|
484
|
-
currentThread = sentence;
|
|
485
|
-
} else {
|
|
486
|
-
currentThread += (currentThread ? " " : "") + sentence;
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
if (currentThread) threads.push(currentThread.trim());
|
|
490
|
-
return threads.join("\n\n---\n\n");
|
|
491
|
-
}
|
|
492
|
-
private parseBatches(
|
|
493
|
-
content: string
|
|
494
|
-
): Array<{ id: string; status: string; featureUnits: string[] }> {
|
|
495
|
-
// Simplified parser - implement proper markdown parsing
|
|
496
|
-
const batchMatches = content.matchAll(
|
|
497
|
-
/\| Batch ID \| Feature Units \| Status \|/g
|
|
498
|
-
);
|
|
499
|
-
// Extract batch data from markdown table
|
|
500
|
-
return [];
|
|
501
|
-
}
|
|
502
|
-
private parseFeatureUnits(
|
|
503
|
-
content: string
|
|
504
|
-
): Array<{ id: string; name: string; status: string }> {
|
|
505
|
-
// Simplified parser - implement proper markdown parsing
|
|
506
|
-
return [];
|
|
507
|
-
}
|
|
508
|
-
private parseMetrics(content: string): {
|
|
509
|
-
batchCompletion: number;
|
|
510
|
-
fuCompletion: number;
|
|
511
|
-
testPassRate: number;
|
|
512
|
-
} {
|
|
513
|
-
// Extract metrics from report
|
|
514
|
-
return { batchCompletion: 0, fuCompletion: 0, testPassRate: 0 };
|
|
515
|
-
}
|
|
516
|
-
private parseYAML(content: string): any {
|
|
517
|
-
// Use yaml parser library
|
|
518
|
-
return {};
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
```
|
|
522
|
-
#### 2.2 Content Templates
|
|
523
|
-
**New File**: `src/services/marketing_templates.ts`
|
|
524
|
-
```typescript
|
|
525
|
-
export const CONTENT_TEMPLATES = {
|
|
526
|
-
twitter_launch: {
|
|
527
|
-
platform: "twitter",
|
|
528
|
-
format: "thread",
|
|
529
|
-
maxLength: 280 * 10, // 10 tweets max
|
|
530
|
-
systemPrompt:
|
|
531
|
-
"Create an engaging Twitter thread announcing a product release.",
|
|
532
|
-
},
|
|
533
|
-
linkedin_launch: {
|
|
534
|
-
platform: "linkedin",
|
|
535
|
-
format: "post",
|
|
536
|
-
maxLength: 3000,
|
|
537
|
-
systemPrompt:
|
|
538
|
-
"Create a professional LinkedIn post highlighting technical achievements.",
|
|
539
|
-
},
|
|
540
|
-
product_hunt_launch: {
|
|
541
|
-
platform: "product_hunt",
|
|
542
|
-
format: "post",
|
|
543
|
-
systemPrompt: "Create a compelling Product Hunt launch description.",
|
|
544
|
-
},
|
|
545
|
-
hacker_news_show_hn: {
|
|
546
|
-
platform: "hacker_news",
|
|
547
|
-
format: "post",
|
|
548
|
-
maxLength: 2000,
|
|
549
|
-
systemPrompt: 'Create a "Show HN" post that is technical and honest.',
|
|
550
|
-
},
|
|
551
|
-
} as const;
|
|
552
|
-
```
|
|
553
|
-
### 3. Automated Posting Workflow
|
|
554
|
-
#### 3.1 Create Workflow Orchestrator
|
|
555
|
-
**New File**: `src/services/marketing_workflow.ts`
|
|
556
|
-
```typescript
|
|
557
|
-
import { MarketingAutomationService } from "./marketing_automation.js";
|
|
558
|
-
import { XProviderClient } from "../integrations/providers/x.js";
|
|
559
|
-
import { LinkedInProviderClient } from "../integrations/providers/linkedin.js";
|
|
560
|
-
import { CONTENT_TEMPLATES } from "./marketing_templates.js";
|
|
561
|
-
import type { ConnectorSecrets } from "./connectors.js";
|
|
562
|
-
interface PostingSchedule {
|
|
563
|
-
platform: string;
|
|
564
|
-
time: string; // ISO time or relative (e.g., "00:01 PST")
|
|
565
|
-
template: string;
|
|
566
|
-
}
|
|
567
|
-
export class MarketingWorkflow {
|
|
568
|
-
private automationService: MarketingAutomationService;
|
|
569
|
-
private providers: Map<string, any>;
|
|
570
|
-
constructor() {
|
|
571
|
-
this.automationService = new MarketingAutomationService();
|
|
572
|
-
this.providers = new Map([
|
|
573
|
-
["twitter", new XProviderClient()],
|
|
574
|
-
["linkedin", new LinkedInProviderClient()],
|
|
575
|
-
]);
|
|
576
|
-
}
|
|
577
|
-
async executeLaunchWorkflow(
|
|
578
|
-
releaseId: string,
|
|
579
|
-
schedule: PostingSchedule[],
|
|
580
|
-
secrets: Record<string, ConnectorSecrets>
|
|
581
|
-
): Promise<void> {
|
|
582
|
-
// Load release data
|
|
583
|
-
const releaseData = await this.automationService.loadReleaseData(releaseId);
|
|
584
|
-
// Generate content for each scheduled post
|
|
585
|
-
const posts = await Promise.all(
|
|
586
|
-
schedule.map(async (item) => {
|
|
587
|
-
const template =
|
|
588
|
-
CONTENT_TEMPLATES[item.template as keyof typeof CONTENT_TEMPLATES];
|
|
589
|
-
const content = await this.automationService.generateContent(
|
|
590
|
-
releaseData,
|
|
591
|
-
template
|
|
592
|
-
);
|
|
593
|
-
return { ...item, content };
|
|
594
|
-
})
|
|
595
|
-
);
|
|
596
|
-
// Schedule and post
|
|
597
|
-
for (const post of posts) {
|
|
598
|
-
await this.schedulePost(post, secrets[post.platform]);
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
private async schedulePost(
|
|
602
|
-
post: PostingSchedule & { content: string },
|
|
603
|
-
secrets: ConnectorSecrets
|
|
604
|
-
): Promise<void> {
|
|
605
|
-
const provider = this.providers.get(post.platform);
|
|
606
|
-
if (!provider) {
|
|
607
|
-
throw new Error(`Provider not found: ${post.platform}`);
|
|
608
|
-
}
|
|
609
|
-
// Parse time and schedule
|
|
610
|
-
const postTime = this.parseTime(post.time);
|
|
611
|
-
const now = Date.now();
|
|
612
|
-
const delay = postTime.getTime() - now;
|
|
613
|
-
if (delay > 0) {
|
|
614
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
615
|
-
}
|
|
616
|
-
// Post based on platform
|
|
617
|
-
if (post.platform === "twitter") {
|
|
618
|
-
if (post.content.includes("---")) {
|
|
619
|
-
// Thread
|
|
620
|
-
const tweets = post.content.split("---").map((t) => t.trim());
|
|
621
|
-
await provider.postThread(tweets, secrets);
|
|
622
|
-
} else {
|
|
623
|
-
await provider.postTweet({ text: post.content }, secrets);
|
|
624
|
-
}
|
|
625
|
-
} else if (post.platform === "linkedin") {
|
|
626
|
-
await provider.postUpdate({ text: post.content }, secrets);
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
private parseTime(timeStr: string): Date {
|
|
630
|
-
// Parse "00:01 PST" or ISO string
|
|
631
|
-
// Implementation depends on timezone handling
|
|
632
|
-
return new Date();
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
```
|
|
636
|
-
#### 3.2 Integrate with Release Orchestrator
|
|
637
|
-
**Update**: `scripts/release_orchestrator.js`
|
|
638
|
-
Add hook after release deployment:
|
|
639
|
-
```javascript
|
|
640
|
-
// After release status changes to 'deployed'
|
|
641
|
-
if (releaseStatus === "deployed" && manifest.release.marketing_required) {
|
|
642
|
-
console.log("[INFO] Triggering marketing automation");
|
|
643
|
-
// Import marketing workflow (if implemented)
|
|
644
|
-
// const { MarketingWorkflow } = await import('../src/services/marketing_workflow.js');
|
|
645
|
-
// const workflow = new MarketingWorkflow();
|
|
646
|
-
// await workflow.executeLaunchWorkflow(RELEASE_ID, schedule, secrets);
|
|
647
|
-
console.log("[INFO] Marketing automation triggered (not yet implemented)");
|
|
648
|
-
}
|
|
649
|
-
```
|
|
650
|
-
### 4. Performance Measurement Integration
|
|
651
|
-
#### 4.1 Create Metrics Collection Service
|
|
652
|
-
**New File**: `src/services/marketing_metrics.ts`
|
|
653
|
-
```typescript
|
|
654
|
-
interface PostMetrics {
|
|
655
|
-
postId: string;
|
|
656
|
-
platform: string;
|
|
657
|
-
postedAt: string;
|
|
658
|
-
engagement: {
|
|
659
|
-
likes?: number;
|
|
660
|
-
retweets?: number;
|
|
661
|
-
shares?: number;
|
|
662
|
-
comments?: number;
|
|
663
|
-
clicks?: number;
|
|
664
|
-
};
|
|
665
|
-
utmParams: {
|
|
666
|
-
source: string;
|
|
667
|
-
medium: string;
|
|
668
|
-
campaign: string;
|
|
669
|
-
};
|
|
670
|
-
}
|
|
671
|
-
export class MarketingMetricsService {
|
|
672
|
-
async trackPost(
|
|
673
|
-
postId: string,
|
|
674
|
-
platform: string,
|
|
675
|
-
utmParams: Record<string, string>
|
|
676
|
-
): Promise<void> {
|
|
677
|
-
// Store post tracking data
|
|
678
|
-
// Link to analytics system
|
|
679
|
-
}
|
|
680
|
-
async collectEngagementMetrics(
|
|
681
|
-
postId: string,
|
|
682
|
-
platform: string
|
|
683
|
-
): Promise<PostMetrics["engagement"]> {
|
|
684
|
-
const provider = this.getProvider(platform);
|
|
685
|
-
switch (platform) {
|
|
686
|
-
case "twitter":
|
|
687
|
-
return await this.collectTwitterMetrics(postId, provider);
|
|
688
|
-
case "linkedin":
|
|
689
|
-
return await this.collectLinkedInMetrics(postId, provider);
|
|
690
|
-
default:
|
|
691
|
-
return {};
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
private async collectTwitterMetrics(
|
|
695
|
-
tweetId: string,
|
|
696
|
-
provider: XProviderClient
|
|
697
|
-
): Promise<any> {
|
|
698
|
-
// Use Twitter API to fetch tweet metrics
|
|
699
|
-
const response = await provider.fetchJson(
|
|
700
|
-
`https://api.twitter.com/2/tweets/${tweetId}?tweet.fields=public_metrics`,
|
|
701
|
-
{ headers: { Authorization: `Bearer ${token}` } }
|
|
702
|
-
);
|
|
703
|
-
return {
|
|
704
|
-
likes: response.data.public_metrics?.like_count,
|
|
705
|
-
retweets: response.data.public_metrics?.retweet_count,
|
|
706
|
-
replies: response.data.public_metrics?.reply_count,
|
|
707
|
-
};
|
|
708
|
-
}
|
|
709
|
-
async generatePerformanceReport(releaseId: string): Promise<string> {
|
|
710
|
-
// Aggregate metrics from all posts
|
|
711
|
-
// Generate markdown report
|
|
712
|
-
return `# Marketing Performance Report\n\n...`;
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
```
|
|
716
|
-
#### 4.2 UTM Tracking Integration
|
|
717
|
-
**Update**: Signup analytics to capture UTM parameters
|
|
718
|
-
```typescript
|
|
719
|
-
// In signup handler
|
|
720
|
-
const utmSource = req.query.utm_source;
|
|
721
|
-
const utmMedium = req.query.utm_medium;
|
|
722
|
-
const utmCampaign = req.query.utm_campaign;
|
|
723
|
-
// Store with signup record
|
|
724
|
-
await db.signups.create({
|
|
725
|
-
userId,
|
|
726
|
-
utmSource,
|
|
727
|
-
utmMedium,
|
|
728
|
-
utmCampaign,
|
|
729
|
-
createdAt: new Date(),
|
|
730
|
-
});
|
|
731
|
-
```
|
|
732
|
-
#### 4.3 Link Metrics to Signups
|
|
733
|
-
```typescript
|
|
734
|
-
async function linkPostToSignups(
|
|
735
|
-
postId: string,
|
|
736
|
-
campaign: string
|
|
737
|
-
): Promise<void> {
|
|
738
|
-
// Query signups with matching UTM campaign
|
|
739
|
-
const signups = await db.signups.findMany({
|
|
740
|
-
where: { utmCampaign: campaign },
|
|
741
|
-
});
|
|
742
|
-
// Link to post metrics
|
|
743
|
-
await db.postMetrics.update({
|
|
744
|
-
where: { postId },
|
|
745
|
-
data: { signupCount: signups.length },
|
|
746
|
-
});
|
|
747
|
-
}
|
|
748
|
-
```
|
|
749
|
-
### 5. Implementation Priority
|
|
750
|
-
**Phase 1 (MVP - Manual with Automation Prep)**:
|
|
751
|
-
1. ✅ Extend X provider with `postTweet()` method (fully compatible with existing architecture)
|
|
752
|
-
2. ✅ Create content generation service skeleton
|
|
753
|
-
3. ✅ Create workflow orchestrator skeleton
|
|
754
|
-
4. ⏳ Manual posting with generated content
|
|
755
|
-
**Architecture Compatibility**:
|
|
756
|
-
- ✅ `XProviderClient` architecture supports posting methods
|
|
757
|
-
- ✅ Base class (`RestProviderClient`) provides all needed utilities
|
|
758
|
-
- ✅ No interface changes required (additive methods only)
|
|
759
|
-
- ✅ Follows existing patterns from `fetchUpdates()` implementation
|
|
760
|
-
**Phase 2 (Post-MVP - Full Automation)**:
|
|
761
|
-
**Timeline**: After v1.0.0 MVP launch (evaluate manual marketing performance first)
|
|
762
|
-
**Goal**: Fully automated marketing workflow that generates content, posts to all platforms, and measures performance without manual intervention.
|
|
763
|
-
#### 2.1 Complete Social Media Provider Clients
|
|
764
|
-
**Priority**: P0 platforms first, then P1/P2
|
|
765
|
-
**2.1.1 LinkedIn Provider** (`src/integrations/providers/linkedin.ts`):
|
|
766
|
-
- ✅ Create `LinkedInProviderClient` class (structure defined in Section 1.2)
|
|
767
|
-
- Implement `postUpdate()` method with LinkedIn API v2 UGC Posts endpoint
|
|
768
|
-
- Handle OAuth 2.0 authentication (`w_member_social` scope)
|
|
769
|
-
- Test with LinkedIn Developer account
|
|
770
|
-
- **Timeline**: Week 1-4 (P1 platform, secondary priority)
|
|
771
|
-
**2.1.2 Product Hunt Provider** (`src/integrations/providers/product_hunt.ts`):
|
|
772
|
-
- ✅ Create `ProductHuntProviderClient` class (structure defined in Section 1.3)
|
|
773
|
-
- Implement `submitProduct()` method with Product Hunt GraphQL API
|
|
774
|
-
- Handle OAuth authentication
|
|
775
|
-
- Support product submission with screenshots, tagline, description
|
|
776
|
-
- **Timeline**: Day 0 launch (P0 platform, critical for launch announcement)
|
|
777
|
-
- **Note**: May require manual submission if API unavailable
|
|
778
|
-
**2.1.3 Hacker News Provider** (`src/integrations/providers/hacker_news.ts`):
|
|
779
|
-
- ✅ Create `HackerNewsProviderClient` class (structure defined in Section 1.4)
|
|
780
|
-
- Implement `submitPost()` method with HN Firebase API
|
|
781
|
-
- Handle cookie-based authentication (username/password)
|
|
782
|
-
- Support "Show HN" format posts
|
|
783
|
-
- **Timeline**: Day 0 launch (P0 platform, critical for launch announcement)
|
|
784
|
-
- **Note**: HN has no official API - may require manual posting or unofficial API
|
|
785
|
-
**2.1.4 Indie Hackers Integration**:
|
|
786
|
-
- Research Indie Hackers API availability
|
|
787
|
-
- If API exists: Create `IndieHackersProviderClient`
|
|
788
|
-
- If no API: Manual posting workflow with content generation
|
|
789
|
-
- **Timeline**: Day 0 launch (P0 platform)
|
|
790
|
-
**2.1.5 Reddit/Discord Integration** (P1 platforms):
|
|
791
|
-
- Reddit: Create `RedditProviderClient` with Reddit API
|
|
792
|
-
- Discord: Create `DiscordProviderClient` with Discord Bot API
|
|
793
|
-
- **Timeline**: Week 1-4 (P1 platforms, organic growth phase)
|
|
794
|
-
#### 2.2 Implement Full Content Generation Service
|
|
795
|
-
**File**: `src/services/marketing_automation.ts`
|
|
796
|
-
**2.2.1 Release Report Parsing**:
|
|
797
|
-
- Implement proper markdown parser for `release_report.md`
|
|
798
|
-
- Extract batch completion data from markdown tables
|
|
799
|
-
- Extract feature unit status and completion percentages
|
|
800
|
-
- Extract integration test results
|
|
801
|
-
- Parse metrics (batch completion %, FU completion %, test pass rate)
|
|
802
|
-
- **Dependencies**: Markdown parser library (`marked` or `remark`)
|
|
803
|
-
**2.2.2 Manifest Parsing**:
|
|
804
|
-
- Parse `manifest.yaml` for release metadata
|
|
805
|
-
- Extract release ID, name, status, target date
|
|
806
|
-
- Extract feature unit list and dependencies
|
|
807
|
-
- **Dependencies**: YAML parser (`js-yaml`)
|
|
808
|
-
**2.2.3 Content Generation with LLM**:
|
|
809
|
-
- ✅ Basic structure defined in Section 2.1
|
|
810
|
-
- Enhance prompts with release-specific context:
|
|
811
|
-
- Key achievements and completed feature units
|
|
812
|
-
- Technical highlights (deterministic extraction, MCP integration)
|
|
813
|
-
- Value propositions for target segments
|
|
814
|
-
- Implement platform-specific formatting:
|
|
815
|
-
- Twitter: Thread splitting (280 chars per tweet)
|
|
816
|
-
- LinkedIn: Professional tone, business value focus
|
|
817
|
-
- Product Hunt: Tagline + description format
|
|
818
|
-
- Hacker News: Technical, honest "Show HN" format
|
|
819
|
-
- Add UTM parameter injection to all content
|
|
820
|
-
- **Dependencies**: OpenAI API (already configured)
|
|
821
|
-
**2.2.4 Content Templates** (`src/services/marketing_templates.ts`):
|
|
822
|
-
- ✅ Structure defined in Section 2.2
|
|
823
|
-
- Create templates for:
|
|
824
|
-
- Launch announcement (all platforms)
|
|
825
|
-
- Feature highlight posts
|
|
826
|
-
- Metrics showcase posts
|
|
827
|
-
- Technical deep-dive posts
|
|
828
|
-
- Template variables: `{releaseId}`, `{releaseName}`, `{metrics}`, `{featureUnits}`, etc.
|
|
829
|
-
**2.2.5 Content Quality Validation**:
|
|
830
|
-
- Implement content review checks:
|
|
831
|
-
- Character limits per platform
|
|
832
|
-
- UTM parameter presence
|
|
833
|
-
- Call-to-action inclusion
|
|
834
|
-
- Technical accuracy validation
|
|
835
|
-
- Optional: Human review flagging for complex content
|
|
836
|
-
#### 2.3 Implement Scheduling System
|
|
837
|
-
**File**: `src/services/marketing_workflow.ts`
|
|
838
|
-
**2.3.1 Timezone-Aware Scheduling**:
|
|
839
|
-
- Parse schedule times (e.g., "00:01 PST", "08:00 PST")
|
|
840
|
-
- Convert to UTC for scheduling
|
|
841
|
-
- Handle timezone conversions correctly
|
|
842
|
-
- **Dependencies**: Timezone library (`date-fns-tz` or `luxon`)
|
|
843
|
-
**2.3.2 Post Scheduling**:
|
|
844
|
-
- Implement queue system for scheduled posts
|
|
845
|
-
- Use cron jobs or task queue (e.g., `node-cron`, `bull`)
|
|
846
|
-
- Store scheduled posts in database or file system
|
|
847
|
-
- Handle retries for failed posts
|
|
848
|
-
- **Dependencies**: Scheduling library (`node-cron`)
|
|
849
|
-
**2.3.3 Launch Day Sequence**:
|
|
850
|
-
- Implement launch day posting sequence per `post_launch_marketing_plan.md`:
|
|
851
|
-
- 00:01 PST: Product Hunt launch
|
|
852
|
-
- 06:00 PST: Hacker News Show HN post
|
|
853
|
-
- 08:00 PST: Twitter announcement thread
|
|
854
|
-
- 09:00 PST: Email to waitlist
|
|
855
|
-
- 10:00 PST: Indie Hacker launch post
|
|
856
|
-
- 12:00 PST: Blog post announcement
|
|
857
|
-
- Ensure sequential posting with delays between platforms
|
|
858
|
-
- Handle failures gracefully (continue with remaining posts)
|
|
859
|
-
**2.3.4 Weekly Organic Growth**:
|
|
860
|
-
- Schedule weekly posts for Week 1-4:
|
|
861
|
-
- Twitter threads (use cases, tips, workflows)
|
|
862
|
-
- LinkedIn posts (professional use cases)
|
|
863
|
-
- Reddit/Discord engagement
|
|
864
|
-
- Content rotation based on release data and user feedback
|
|
865
|
-
#### 2.4 Implement Metrics Collection
|
|
866
|
-
**File**: `src/services/marketing_metrics.ts`
|
|
867
|
-
**2.4.1 Engagement Metrics Collection**:
|
|
868
|
-
- **Twitter**: Use Twitter API v2 to fetch tweet metrics (`public_metrics`)
|
|
869
|
-
- Likes, retweets, replies, quote tweets
|
|
870
|
-
- Click-through rate (if available)
|
|
871
|
-
- **LinkedIn**: Use LinkedIn API to fetch post metrics
|
|
872
|
-
- Views, likes, comments, shares
|
|
873
|
-
- **Product Hunt**: Track upvotes, comments via Product Hunt API
|
|
874
|
-
- **Hacker News**: Track points, comments (if API available)
|
|
875
|
-
- **Schedule**: Collect metrics 1 hour, 24 hours, 7 days after posting
|
|
876
|
-
**2.4.2 UTM Tracking Integration**:
|
|
877
|
-
- Link UTM parameters to signup analytics
|
|
878
|
-
- Track signups by UTM source/medium/campaign
|
|
879
|
-
- Calculate conversion rates per platform
|
|
880
|
-
- **Integration**: Update signup handler to capture UTM params (see Section 4.2)
|
|
881
|
-
**2.4.3 Performance Reports**:
|
|
882
|
-
- Generate `marketing_performance_report.md`:
|
|
883
|
-
- Post-level metrics (engagement, clicks, signups)
|
|
884
|
-
- Platform-level comparison
|
|
885
|
-
- Campaign-level aggregation
|
|
886
|
-
- Pre vs post-launch comparison
|
|
887
|
-
- **Schedule**: Generate reports daily (Week 1), weekly (Week 2-4)
|
|
888
|
-
**2.4.4 Metrics Dashboard** (Optional):
|
|
889
|
-
- Real-time metrics dashboard
|
|
890
|
-
- Visualize engagement trends
|
|
891
|
-
- Platform performance comparison
|
|
892
|
-
- **Dependencies**: Dashboard framework (optional, can use markdown reports)
|
|
893
|
-
#### 2.5 Release Orchestrator Integration
|
|
894
|
-
**File**: `scripts/release_orchestrator.js`
|
|
895
|
-
**2.5.1 Release Lifecycle Hooks**:
|
|
896
|
-
- Add hook when release status changes to `ready_for_deployment`:
|
|
897
|
-
- Trigger pre-launch marketing content generation
|
|
898
|
-
- Schedule pre-launch posts (Week -4 to Week 0)
|
|
899
|
-
- Add hook when release status changes to `deployed`:
|
|
900
|
-
- Trigger launch announcement workflow
|
|
901
|
-
- Execute launch day posting sequence
|
|
902
|
-
- Add hook for post-launch milestones:
|
|
903
|
-
- Day 1: Waitlist conversion content
|
|
904
|
-
- Week 1-4: Organic growth content
|
|
905
|
-
**2.5.2 Configuration Integration**:
|
|
906
|
-
- Read `marketing_plan.md` for automation configuration
|
|
907
|
-
- Parse platform priorities and schedules
|
|
908
|
-
- Load OAuth credentials from environment/secrets
|
|
909
|
-
- **Integration**: Use existing manifest loading logic
|
|
910
|
-
**2.5.3 Error Handling**:
|
|
911
|
-
- Handle API failures gracefully
|
|
912
|
-
- Log errors for manual intervention
|
|
913
|
-
- Continue with remaining posts if one fails
|
|
914
|
-
- Alert on critical failures (launch day posts)
|
|
915
|
-
**2.5.4 Manual Override**:
|
|
916
|
-
- Support manual trigger: `node scripts/marketing_automation.js <release_id>`
|
|
917
|
-
- Support content approval workflow (optional)
|
|
918
|
-
- Emergency stop mechanism
|
|
919
|
-
#### 2.6 Testing and Validation
|
|
920
|
-
**2.6.1 Unit Tests**:
|
|
921
|
-
- Test content generation with mock release data
|
|
922
|
-
- Test platform-specific formatting
|
|
923
|
-
- Test UTM parameter injection
|
|
924
|
-
- Test scheduling logic
|
|
925
|
-
**2.6.2 Integration Tests**:
|
|
926
|
-
- Test posting to test accounts (Twitter, LinkedIn)
|
|
927
|
-
- Test full workflow: release → content → post → metrics
|
|
928
|
-
- Test error handling and retries
|
|
929
|
-
**2.6.3 E2E Tests**:
|
|
930
|
-
- Test launch day sequence end-to-end
|
|
931
|
-
- Test metrics collection pipeline
|
|
932
|
-
- Test UTM tracking → signup flow
|
|
933
|
-
#### 2.7 Implementation Checklist
|
|
934
|
-
**Pre-Implementation**:
|
|
935
|
-
- [ ] Evaluate Phase 1 (manual marketing) performance
|
|
936
|
-
- [ ] Set up OAuth apps for all platforms
|
|
937
|
-
- [ ] Configure API credentials in environment
|
|
938
|
-
- [ ] Install dependencies (`js-yaml`, `marked`, `node-cron`, `date-fns-tz`)
|
|
939
|
-
**Provider Clients** (Priority Order):
|
|
940
|
-
- [ ] Complete LinkedIn provider (P1, Week 1-4)
|
|
941
|
-
- [ ] Complete Product Hunt provider (P0, Day 0)
|
|
942
|
-
- [ ] Complete Hacker News provider (P0, Day 0)
|
|
943
|
-
- [ ] Complete Indie Hackers integration (P0, Day 0)
|
|
944
|
-
- [ ] Complete Reddit/Discord providers (P1, Week 1-4)
|
|
945
|
-
**Content Generation**:
|
|
946
|
-
- [ ] Implement release report parser
|
|
947
|
-
- [ ] Implement manifest parser
|
|
948
|
-
- [ ] Enhance LLM prompts with release context
|
|
949
|
-
- [ ] Create all content templates
|
|
950
|
-
- [ ] Implement content validation
|
|
951
|
-
**Scheduling**:
|
|
952
|
-
- [ ] Implement timezone-aware scheduling
|
|
953
|
-
- [ ] Implement launch day sequence
|
|
954
|
-
- [ ] Implement weekly organic growth schedule
|
|
955
|
-
- [ ] Test scheduling with dry runs
|
|
956
|
-
**Metrics**:
|
|
957
|
-
- [ ] Implement engagement metrics collection
|
|
958
|
-
- [ ] Integrate UTM tracking with signups
|
|
959
|
-
- [ ] Implement performance report generation
|
|
960
|
-
- [ ] Test metrics pipeline
|
|
961
|
-
**Integration**:
|
|
962
|
-
- [ ] Add release orchestrator hooks
|
|
963
|
-
- [ ] Integrate with `marketing_plan.md`
|
|
964
|
-
- [ ] Test end-to-end workflow
|
|
965
|
-
- [ ] Document manual override procedures
|
|
966
|
-
**Timeline Estimate**: 2-3 weeks after MVP launch (depending on manual marketing evaluation period)
|
|
967
|
-
### 6. Quick Start Implementation
|
|
968
|
-
**Minimal Viable Implementation** (can be done now):
|
|
969
|
-
1. **Extend X provider** (30 minutes):
|
|
970
|
-
- Add `postTweet()` method
|
|
971
|
-
- Test with manual API call
|
|
972
|
-
2. **Create content generator** (1 hour):
|
|
973
|
-
- Basic LLM prompt with release data
|
|
974
|
-
- Generate Twitter thread
|
|
975
|
-
3. **Manual workflow** (immediate):
|
|
976
|
-
- Generate content
|
|
977
|
-
- Copy/paste to Twitter
|
|
978
|
-
- Track metrics manually
|
|
979
|
-
This provides immediate value while building toward full automation.
|
|
980
|
-
### 7. Dependencies
|
|
981
|
-
**Required**:
|
|
982
|
-
- OpenAI API key (already configured in codebase)
|
|
983
|
-
- Twitter API v2 credentials with write permissions
|
|
984
|
-
- OAuth apps for LinkedIn, Product Hunt (if automating)
|
|
985
|
-
**Optional**:
|
|
986
|
-
- YAML parser library (`js-yaml`)
|
|
987
|
-
- Markdown parser (`marked` or `remark`)
|
|
988
|
-
- Scheduling library (`node-cron`)
|
|
989
|
-
### 8. Testing Strategy
|
|
990
|
-
1. **Unit Tests**: Test content generation with mock release data
|
|
991
|
-
2. **Integration Tests**: Test posting to test accounts
|
|
992
|
-
3. **E2E Tests**: Full workflow from release → content → post → metrics
|
|
993
|
-
### 9. Related Documents
|
|
994
|
-
- `marketing_automation_plan.md` — High-level automation plan
|
|
995
|
-
- `marketing_plan.md` — Marketing overview
|
|
996
|
-
- `post_launch_marketing_plan.md` — Post-launch activities
|