diff --git a/README.md b/README.md index 16416d6..0121536 100644 --- a/README.md +++ b/README.md @@ -48,13 +48,15 @@ that an LLM can read, diff, and safely modify without breaking the runtime. | [`packages/contracts/`](./packages/contracts) | Post-signature contract lifecycle (CLM) — AI-extracted metadata, approvals, renewal alerts | ✅ v0 | 4003 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/contracts) | | [`packages/procurement/`](./packages/procurement) | Vendors, purchase requests, POs, goods receipt, 3-way-match rollup | ✅ v0 | 4004 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/procurement) | | [`packages/compliance/`](./packages/compliance) | SOC 2 / ISO 27001 controls, evidence with expiry, assessments | ✅ v0 | 4005 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/compliance) | -| [`packages/helpdesk/`](./packages/helpdesk) | AI-first customer support — auto-triage, suggested replies, KB recall, sentiment escalation | ✅ v0 | 4006 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/helpdesk) | +| [`packages/helpdesk/`](./packages/helpdesk) | Customer support — tickets, SLA, escalation, KB, portal; AI triage scaffolded | ✅ v0 | 4006 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/helpdesk) | | [`packages/content/`](./packages/content) | Content marketing engine — editorial calendar, competitive signals, channel ROI, 8-state piece lifecycle | ✅ v0 | 4008 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/content) | | [`packages/hr/`](./packages/hr) | People Ops — employee directory, org chart, time-off approvals, document expiry alerts | ✅ v0 | 4009 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/hr) | -| [`packages/project/`](./packages/project) | AI Project Management — portfolio tracking with AI risk prediction, delay forecasting, resource conflict detection | 🚧 v0.1-wip | 4010 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/project) | +| [`packages/project/`](./packages/project) | Project Management — PMO portfolio, milestones, risks; AI forecasting scaffolded | 🚧 v0.1-wip | 4010 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/project) | | [`packages/expense/`](./packages/expense) | Employee expense & reimbursement — multi-line reports, category policy, amount-tiered approval, reimbursement tracking | ✅ v0 | 4011 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/expense) | | `packages/sales-pipeline/` | Lite CRM (leads, opportunities, accounts) | 🚧 planned | 4007 | — | +> 📍 Planned work — including the **AI implementation plan** (several templates ship AI as a scaffold today) — lives in [docs/ROADMAP.md](./docs/ROADMAP.md). + ### Run them all at once Want every template in **one runtime, one app launcher** — as if you installed diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md new file mode 100644 index 0000000..fad6c08 --- /dev/null +++ b/docs/ROADMAP.md @@ -0,0 +1,58 @@ +# Roadmap + +Planned work across the template collection. This file tracks what's **coming**; +each template's `README.md` describes what it does **today**. Keep the two in +sync — when a feature ships, move it from here into the template and its README. +If it's still a scaffold, it belongs here, not in present-tense marketing copy. + +## AI + +Several templates lead with AI in their pitch. The honest current state is mixed, +so it's tracked here as a plan rather than implied as delivered. + +### Current state + +| Template | AI surface | Status today | +|---|---|---| +| contracts | `extract_terms` — AI metadata extraction | **Real** — calls `api.openai.com` directly ([extract_terms.action.ts](../packages/contracts/src/actions/extract_terms.action.ts)). Dark without an `OPENAI_API_KEY`. | +| content | `draft_outline_from_topic`, `suggest_cta`, `summarize_competitor_signal` | **Real** — same raw OpenAI calls. Dark without a key. | +| helpdesk | ticket triage (`ai_summary` / `ai_category` / `ai_sentiment` / `ai_suggested_reply` / `ai_suggested_kb_ids`) | **Scaffold** — deterministic baseline (`ai_summary = description.slice(0, 280)`); [`ai_triage_on_create.flow.ts`](../packages/helpdesk/src/flows/ai_triage_on_create.flow.ts) is an "insert your LLM here" stub. | +| project | risk / delay / budget forecasting (`ai_*` fields) | **Scaffold** — the flow prediction node is labelled `STUB`; seed values are illustrative, not computed. | +| todo, expense, hr, compliance, procurement | — | No AI; deterministic by design. | + +### Plan + +1. **Route AI through the platform model registry, not raw `api.openai.com`.** + Replace the direct `fetch()` calls (contracts, content) with ObjectStack's + AI / model-registry services (see the `objectstack-ai` skill). Payoff: + provider-agnostic (OpenAI, **Anthropic / Claude**, Bedrock, local), central + key management, and it actually demonstrates the "AI-native" platform instead + of bypassing it. + +2. **Degrade honestly.** With no model configured, AI fields/actions should show + an explicit "configure AI to enable" state — never a silent stub output + (helpdesk's substring) or a failing network call (contracts/content without a + key). A user must never mistake a placeholder for a prediction. + +3. **Pick one AI flagship and finish it.** `helpdesk` is the best candidate: + real triage → `ai_summary` / `ai_category` / `ai_sentiment` / + `ai_suggested_reply`, plus embedding-based KB recall for `ai_suggested_kb_ids`, + shipped end-to-end through (1) and (2). Let the others stay honest + deterministic starters until each earns the same treatment. + +4. **Stop shipping seeded numbers that look computed.** project's + `ai_completion_probability` etc. are hand-authored demo values. Once (3)'s + pattern exists, either compute them or keep them clearly marked as samples + (the field group is now labelled "AI Predictions (scaffolded)"). + +## Non-AI + +- **project** — Gantt rendering (schema ready, UI pending platform); resolve the + scope overlap with `todo` (task-level vs portfolio-level). +- **content** — trim toward the starter charter; at 9 objects / ~5,200 `src` LOC + it is over the ≤6 objects / ≤2,500 LOC budget in + [TEMPLATE_GUIDE.md](../TEMPLATE_GUIDE.md). +- **Marketplace category facets** — labels render inconsistently (Title Case for + some categories, lowercase for others). The fix belongs in the marketplace + UI's category → label map, not in the template manifests (which all use + lowercase slugs). diff --git a/packages/compliance/package.json b/packages/compliance/package.json index 7d77103..557e0e7 100644 --- a/packages/compliance/package.json +++ b/packages/compliance/package.json @@ -40,16 +40,5 @@ "engines": { "node": ">=20" }, - "packageManager": "pnpm@10.33.0", - "objectstack": { - "marketplace": { - "manifestId": "app.objectstack.template.compliance", - "displayName": "Compliance", - "description": "Compliance posture & evidence management: SOC 2 / ISO 27001 / GDPR frameworks, controls, evidence with expiry tracking, and assessments.", - "category": "starter", - "iconUrl": "https://cdn.objectos.app/icons/compliance.svg", - "homepageUrl": "https://github.com/objectstack-ai/templates/tree/main/packages/compliance", - "readmePath": "README.md" - } - } + "packageManager": "pnpm@10.33.0" } diff --git a/packages/content/package.json b/packages/content/package.json index 05fe91c..4054b80 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -40,16 +40,5 @@ "engines": { "node": ">=20" }, - "packageManager": "pnpm@10.33.0", - "objectstack": { - "marketplace": { - "manifestId": "app.objectstack.template.content", - "displayName": "Content", - "description": "Content marketing engine: pipeline → publish → measure. Editorial calendar, competitive signal capture, channel ROI rollups, and an 8-state piece workflow with approval gates.", - "category": "starter", - "iconUrl": "https://cdn.objectos.app/icons/content.svg", - "homepageUrl": "https://github.com/objectstack-ai/templates/tree/main/packages/content", - "readmePath": "README.md" - } - } + "packageManager": "pnpm@10.33.0" } diff --git a/packages/contracts/package.json b/packages/contracts/package.json index c82b7e8..130f45a 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -40,16 +40,5 @@ "engines": { "node": ">=20" }, - "packageManager": "pnpm@10.33.0", - "objectstack": { - "marketplace": { - "manifestId": "app.objectstack.template.contracts", - "displayName": "Contracts", - "description": "Post-signature contract lifecycle: AI-extracted metadata, multi-step approvals, obligation tracking, and renewal alerts. Bring your own Word + DocuSign.", - "category": "starter", - "iconUrl": "https://cdn.objectos.app/icons/contracts.svg", - "homepageUrl": "https://github.com/objectstack-ai/templates/tree/main/packages/contracts", - "readmePath": "README.md" - } - } + "packageManager": "pnpm@10.33.0" } diff --git a/packages/expense/package.json b/packages/expense/package.json index 397767d..08e5416 100644 --- a/packages/expense/package.json +++ b/packages/expense/package.json @@ -40,16 +40,5 @@ "engines": { "node": ">=20" }, - "packageManager": "pnpm@10.33.0", - "objectstack": { - "marketplace": { - "manifestId": "app.objectstack.template.expense", - "displayName": "Expense", - "description": "Employee expense & reimbursement: multi-line expense reports, category policy, amount-tiered approvals, and reimbursement tracking.", - "category": "starter", - "iconUrl": "https://cdn.objectos.app/icons/expense.svg", - "homepageUrl": "https://github.com/objectstack-ai/templates/tree/main/packages/expense", - "readmePath": "README.md" - } - } + "packageManager": "pnpm@10.33.0" } diff --git a/packages/helpdesk/README.md b/packages/helpdesk/README.md index 4d9d7f2..90d0bf5 100644 --- a/packages/helpdesk/README.md +++ b/packages/helpdesk/README.md @@ -1,6 +1,6 @@ # @objectlab/helpdesk — AI-First Customer Support -> Customer support template where **AI is a first-class citizen**, not a paid add-on. Native fields for triage, sentiment, suggested replies, and KB recall — driven by your choice of LLM provider. +> Customer support template that treats **AI as a first-class schema citizen**: triage, sentiment, suggested replies, and KB recall are native ticket fields. A deterministic baseline ships so it runs today — wire your LLM provider to make the AI fields smart. [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/objectstack-ai/templates/tree/main/packages/helpdesk) @@ -19,6 +19,8 @@ Click the StackBlitz badge above to launch this template in a WebContainer. It u | Data is locked in vendor cloud | Open SQL, exportable, no lock-in | | English-first, others bolt-on | en + zh-CN shipped; ja/ko trivial to add | +> **On the AI:** the rows above describe the *schema / architecture*. The `ai_*` behaviors ship as a deterministic baseline + flow scaffold — wire your LLM to populate them (see [Plugging in your LLM](#plugging-in-your-llm)). + ## What's in the box **6 objects** diff --git a/packages/helpdesk/objectstack.config.ts b/packages/helpdesk/objectstack.config.ts index ee51eb0..d383b4a 100644 --- a/packages/helpdesk/objectstack.config.ts +++ b/packages/helpdesk/objectstack.config.ts @@ -26,9 +26,9 @@ export default defineStack({ namespace: 'helpdesk', version: '0.1.0', type: 'app', - name: 'AI Helpdesk', + name: 'Helpdesk', description: - 'AI-first customer support: native AI triage, suggested replies, KB recall, sentiment-driven escalation, customer portal via permissions.', + 'Customer support starter on ObjectStack: tickets, SLA, sentiment-based escalation, KB, and a customer portal; AI triage fields ship with a deterministic baseline you extend with your own LLM.', }, requires: ['automation', 'triggers', 'analytics', 'auth', 'ui', 'sharing'], diff --git a/packages/helpdesk/objectstack.manifest.json b/packages/helpdesk/objectstack.manifest.json index 836175e..b7868b0 100644 --- a/packages/helpdesk/objectstack.manifest.json +++ b/packages/helpdesk/objectstack.manifest.json @@ -3,8 +3,8 @@ "name": "helpdesk", "specVersion": "^6.1.0", "manifestId": "app.objectstack.template.helpdesk", - "displayName": "AI Helpdesk", - "description": "AI-first customer support: native AI triage, suggested replies, KB recall, sentiment-driven escalation, customer portal via permissions.", + "displayName": "Helpdesk", + "description": "Customer support starter: tickets, SLA tracking, sentiment-based escalation, knowledge base, and a permission-based customer portal. AI triage, suggested replies, and KB recall are first-class ticket fields with a deterministic baseline — wire your own LLM to make them smart.", "category": "operations", "isStarter": true, "publisher": "objectstack", @@ -21,9 +21,9 @@ "readmePath": "README.md", "translations": { "zh-CN": { - "displayName": "AI 客服台", - "description": "AI 优先的客户支持:原生 AI 工单分诊、建议回复、知识库召回、基于情绪的升级,权限驱动的客户门户。", - "tagline": "AI 是一等公民的客服台。" + "displayName": "客服台", + "description": "客户支持起步模板:工单、SLA、情绪驱动升级、知识库与权限制客户门户。AI 分诊、建议回复、知识库召回为一等工单字段,内置确定性基线——接上你的 LLM 即可智能化。", + "tagline": "工单 + SLA + 升级 + 知识库 + 门户;AI 分诊预留接口。" } } } diff --git a/packages/helpdesk/package.json b/packages/helpdesk/package.json index ed69658..37b6824 100644 --- a/packages/helpdesk/package.json +++ b/packages/helpdesk/package.json @@ -40,16 +40,5 @@ "engines": { "node": ">=20" }, - "packageManager": "pnpm@10.33.0", - "objectstack": { - "marketplace": { - "manifestId": "app.objectstack.template.helpdesk", - "displayName": "AI Helpdesk", - "description": "Customer support with AI as a first-class citizen: auto-triage, suggested replies, KB recall, sentiment-driven escalation. Customer portal included via permissions.", - "category": "starter", - "iconUrl": "https://cdn.objectos.app/icons/helpdesk.svg", - "homepageUrl": "https://github.com/objectstack-ai/templates/tree/main/packages/helpdesk", - "readmePath": "README.md" - } - } + "packageManager": "pnpm@10.33.0" } diff --git a/packages/helpdesk/src/apps/helpdesk.app.ts b/packages/helpdesk/src/apps/helpdesk.app.ts index 3cab4f3..5cd7bd7 100644 --- a/packages/helpdesk/src/apps/helpdesk.app.ts +++ b/packages/helpdesk/src/apps/helpdesk.app.ts @@ -4,7 +4,7 @@ import { App } from '@objectstack/spec/ui'; export const HelpdeskApp = App.create({ name: 'helpdesk', - label: 'AI Helpdesk', + label: 'Helpdesk', description: 'AI-first customer support on ObjectStack.', icon: 'life-buoy', branding: { primaryColor: '#A855F7' }, diff --git a/packages/helpdesk/src/portals/customer.portal.ts b/packages/helpdesk/src/portals/customer.portal.ts index 7e99efa..da2e1d3 100644 --- a/packages/helpdesk/src/portals/customer.portal.ts +++ b/packages/helpdesk/src/portals/customer.portal.ts @@ -32,7 +32,7 @@ export const HelpdeskCustomerPortal = definePortal({ kind: 'portal', id: 'helpdesk_customer', label: 'Help Center', - description: 'Customer-facing help center for the AI Helpdesk template.', + description: 'Customer-facing help center for the Helpdesk template.', // -------- Routing -------- routePrefix: '/portal/helpdesk', diff --git a/packages/helpdesk/src/translations/en.ts b/packages/helpdesk/src/translations/en.ts index 865faa2..01444a8 100644 --- a/packages/helpdesk/src/translations/en.ts +++ b/packages/helpdesk/src/translations/en.ts @@ -214,7 +214,7 @@ export const en: TranslationData = { }, apps: { helpdesk: { - label: 'AI Helpdesk', + label: 'Helpdesk', description: 'AI-first customer support on ObjectStack.', navigation: { nav_workbench: { label: 'My Workbench' }, diff --git a/packages/helpdesk/src/translations/zh-CN.ts b/packages/helpdesk/src/translations/zh-CN.ts index 0dc759e..8f1db8c 100644 --- a/packages/helpdesk/src/translations/zh-CN.ts +++ b/packages/helpdesk/src/translations/zh-CN.ts @@ -198,7 +198,7 @@ export const zhCN: TranslationData = { }, apps: { helpdesk: { - label: 'AI 客服工单', + label: '客服台', description: '基于 ObjectStack 的 AI 优先客户支持系统。', navigation: { nav_workbench: { label: '我的工作台' }, diff --git a/packages/hr/objectstack.config.ts b/packages/hr/objectstack.config.ts index eead02e..584811e 100644 --- a/packages/hr/objectstack.config.ts +++ b/packages/hr/objectstack.config.ts @@ -21,7 +21,7 @@ export default defineStack({ namespace: 'hr', version: '0.1.0', type: 'app', - name: 'HR', + name: 'Human Resources', description: 'Starter template — people directory, time-off, and document expiry on ObjectStack.', }, diff --git a/packages/hr/package.json b/packages/hr/package.json index d7d7d16..a8c76fe 100644 --- a/packages/hr/package.json +++ b/packages/hr/package.json @@ -41,16 +41,5 @@ "engines": { "node": ">=20" }, - "packageManager": "pnpm@10.33.0", - "objectstack": { - "marketplace": { - "manifestId": "app.objectstack.template.hr", - "displayName": "HR", - "description": "People Ops starter — employee directory, org chart, time-off approvals, and document expiry alerts on ObjectStack.", - "category": "starter", - "iconUrl": "https://cdn.objectos.app/icons/hr.svg", - "homepageUrl": "https://github.com/objectstack-ai/templates/tree/main/packages/hr", - "readmePath": "README.md" - } - } + "packageManager": "pnpm@10.33.0" } diff --git a/packages/procurement/package.json b/packages/procurement/package.json index 1f66170..6fa921f 100644 --- a/packages/procurement/package.json +++ b/packages/procurement/package.json @@ -40,16 +40,5 @@ "engines": { "node": ">=20" }, - "packageManager": "pnpm@10.33.0", - "objectstack": { - "marketplace": { - "manifestId": "app.objectstack.template.procurement", - "displayName": "Procurement", - "description": "Source-to-pay procurement: vendor master, purchase requests with amount-tiered approvals, purchase orders, goods receipts, and 3-way-match rollup.", - "category": "starter", - "iconUrl": "https://cdn.objectos.app/icons/procurement.svg", - "homepageUrl": "https://github.com/objectstack-ai/templates/tree/main/packages/procurement", - "readmePath": "README.md" - } - } + "packageManager": "pnpm@10.33.0" } diff --git a/packages/project/README.md b/packages/project/README.md index 71d893c..71beca1 100644 --- a/packages/project/README.md +++ b/packages/project/README.md @@ -1,6 +1,6 @@ -# @objectlab/project — AI Project Management +# @objectlab/project — Project Management -> Project portfolio management with **AI-powered risk prediction**, delay forecasting, and resource conflict detection. Complements the `todo` template (task-level) with project-level planning and predictive analytics for PMOs. +> Project portfolio management for PMOs: projects, milestones, risks, resources, and timesheets. **AI risk / delay / resource forecasting ships as a bring-your-own-LLM scaffold** (fields + flow stubs), not a live model. Complements the `todo` template (task-level) with project-level planning. [![Status: v0.1 - Work in Progress](https://img.shields.io/badge/status-v0.1--wip-yellow.svg)](./CHARTER.md) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](../../LICENSE) @@ -9,15 +9,15 @@ ## Why this template -If you're managing 5-20 projects across teams and currently tracking them in spreadsheets, Notion, or basic task trackers, this template gives you **what PMOs actually need**: +If you're managing 5-20 projects across teams and currently tracking them in spreadsheets, Notion, or basic task trackers, this template gives you a **PMO starter**: -- **AI-powered predictions** — completion probability, schedule delay forecast, budget variance -- **Proactive risk management** — AI identifies risks before they become issues -- **Resource conflict detection** — alerts when team members are overallocated +- **Portfolio view** — status and health across all projects at a glance - **Milestone tracking** — automated warnings for approaching/overdue deadlines -- **Portfolio view** — see health across all projects at a glance +- **Risk & issue registers** — track risks (impact/likelihood) and issues with state machines +- **Resource & timesheet tracking** — allocations and time, with overallocation flags +- **AI forecasting fields, scaffolded** — completion probability, delay, risk, budget variance live in the schema with stub flows; wire any LLM (OpenAI, Anthropic/Claude, local) to populate them -Unlike traditional PM tools where AI is an expensive add-on, **AI fields are built into the schema** and work with any LLM provider (OpenAI, Anthropic, local models). +The AI fields are a **design pattern, not a delivered model** — see [Plugging in your AI/ML model](#plugging-in-your-aiml-model). Seed values are illustrative. --- @@ -40,12 +40,12 @@ rm -rf packages/project/.objectstack ## What's in the box ### Core Objects (6) -- **pm_project** — Project with AI prediction fields +- **pm_project** — Project with scaffolded AI forecasting fields - **pm_milestone** — Key delivery points -- **pm_risk** — Risk register with AI impact/likelihood assessment +- **pm_risk** — Risk register (impact/likelihood; AI scoring scaffolded) - **pm_issue** — Current problems requiring resolution - **pm_resource** — Team member allocations -- **pm_timesheet** — Daily time tracking (feeds AI cost forecasting) +- **pm_timesheet** — Daily time tracking (would feed AI cost forecasting) ### AI Fields on Projects ```yaml @@ -58,7 +58,7 @@ ai_recommended_action: markdown # What should we do? ``` ### Automation (3 Flows) -1. **Daily AI Risk Assessment** — Re-predicts risk daily for active projects +1. **Daily AI Risk Assessment** — runs a **stub** that stamps the AI fields for active projects (replace with your LLM) 2. **Milestone Deadline Warning** — Alerts 7 days before due, escalates overdue 3. **Resource Conflict Detection** — Detects >40 hours/week allocation @@ -121,7 +121,7 @@ The schema stays the same — only the flow nodes change. |--------|---------------|------------------| | **Focus** | Task execution | Project planning & prediction | | **Timeline** | Hours to days | Weeks to months | -| **AI** | None | Risk forecasting, resource optimization | +| **AI** | None | Forecasting fields (scaffolded) | | **Users** | Individual contributors | Project managers, PMO | | **Objects** | task, label | project, milestone, risk, resource | @@ -131,7 +131,7 @@ They're **complementary**: use project template for high-level planning, then li ## Status & Roadmap -**v0.1 (current)** — Core objects + AI flows ✅ +**v0.1 (current)** — Core objects + deterministic flows + AI scaffold ✅ **v0.2** — Views, dashboards, seed data (coming soon) **v0.3** — Gantt chart metadata, portfolio analytics diff --git a/packages/project/objectstack.config.ts b/packages/project/objectstack.config.ts index d91c1fe..d1aa72f 100644 --- a/packages/project/objectstack.config.ts +++ b/packages/project/objectstack.config.ts @@ -18,9 +18,9 @@ export default defineStack({ namespace: 'pm', version: '0.1.0', type: 'app', - name: 'AI Project Management', + name: 'Project Management', description: - 'Project portfolio management with AI-powered risk prediction and resource optimization.', + 'Project portfolio management for PMOs — projects, milestones, risks, resources; AI forecasting fields ship as a bring-your-own-LLM scaffold.', }, requires: ['automation', 'triggers', 'job', 'analytics', 'auth', 'ui', 'sharing'], diff --git a/packages/project/objectstack.manifest.json b/packages/project/objectstack.manifest.json index e41e189..834eefb 100644 --- a/packages/project/objectstack.manifest.json +++ b/packages/project/objectstack.manifest.json @@ -3,9 +3,9 @@ "name": "project", "specVersion": "^7.2.0", "manifestId": "app.objectstack.template.project", - "displayName": "AI Project Management", - "description": "Project portfolio management with AI-powered risk prediction, delay forecasting, and resource conflict detection. Complements the todo template (task-level) with project-level planning and predictive analytics for PMOs.", - "tagline": "PMO planning with AI risk & delay forecasting.", + "displayName": "Project Management", + "description": "Project portfolio management for PMOs: projects, milestones, risks, resources, and timesheets with status rollups and milestone alerts. AI forecasting fields (completion probability, delay, risk) ship as a bring-your-own-LLM scaffold, not a live model. Complements the todo template (task-level) with project-level planning.", + "tagline": "PMO portfolio, milestones & risks — AI forecasting scaffolded.", "category": "productivity", "isStarter": false, "publisher": "objectstack", diff --git a/packages/project/package.json b/packages/project/package.json index caa2070..6d0b33a 100644 --- a/packages/project/package.json +++ b/packages/project/package.json @@ -38,22 +38,6 @@ "node": ">=20" }, "objectstack": { - "port": 4010, - "marketplace": { - "manifestId": "app.objectstack.template.project", - "displayName": "AI Project Management", - "description": "Project portfolio management with AI-powered risk prediction, delay forecasting, and resource optimization", - "iconUrl": "https://api.iconify.design/lucide:folder-kanban.svg", - "category": "productivity", - "tags": [ - "project-management", - "pmo", - "risk", - "ai", - "forecasting" - ], - "screenshots": [], - "minPlatformVersion": "6.5.0" - } + "port": 4010 } } diff --git a/packages/project/src/objects/pm_project.object.ts b/packages/project/src/objects/pm_project.object.ts index 74ddcac..401fb75 100644 --- a/packages/project/src/objects/pm_project.object.ts +++ b/packages/project/src/objects/pm_project.object.ts @@ -5,11 +5,13 @@ import { tmpl } from '@objectstack/spec'; /** * Project — the central object for project portfolio management. - * **AI fields are first-class**: ai_completion_probability, ai_delay_days, - * ai_risk_score, ai_budget_variance_forecast etc. + * The `ai_*` fields (ai_completion_probability, ai_delay_days, ai_risk_score, + * ai_budget_variance_forecast …) are first-class in the SCHEMA but populated + * by a stub today — see `flows/daily_ai_risk_assessment.flow.ts`. Wire your + * own LLM/ML to make them live; seed values are illustrative, not computed. * * Unlike the `todo` template (task-level), this template operates at - * project level (weeks-months) with predictive analytics for PMOs. + * project level (weeks-months) with project-level planning for PMOs. */ export const Project = ObjectSchema.create({ name: 'pm_project', @@ -17,12 +19,12 @@ export const Project = ObjectSchema.create({ pluralLabel: 'Projects', icon: 'folder-kanban', description: - 'A time-bound initiative with milestones, resources, and AI-powered risk prediction.', + 'A time-bound initiative with milestones, resources, and scaffolded AI risk fields (bring your own LLM).', fieldGroups: [ { key: 'core', label: 'Project Details', icon: 'folder', defaultExpanded: true }, { key: 'dates', label: 'Timeline', icon: 'calendar' }, - { key: 'ai', label: 'AI Predictions', icon: 'sparkles' }, + { key: 'ai', label: 'AI Predictions (scaffolded)', icon: 'sparkles' }, { key: 'budget', label: 'Budget', icon: 'dollar-sign' }, { key: 'people', label: 'Team', icon: 'users' }, { key: 'meta', label: 'Metadata', icon: 'info', defaultExpanded: false }, @@ -125,7 +127,8 @@ export const Project = ObjectSchema.create({ group: 'ai', min: 0, max: 100, - description: 'AI-predicted likelihood of on-time completion (0-100%).', + description: + 'AI-predicted likelihood of on-time completion (0-100%). Scaffolded — sample value until you wire an LLM.', }), ai_delay_days: Field.number({ label: 'AI Predicted Delay (Days)', diff --git a/packages/project/src/translations/en.ts b/packages/project/src/translations/en.ts index 3a5660e..b0b4396 100644 --- a/packages/project/src/translations/en.ts +++ b/packages/project/src/translations/en.ts @@ -3,7 +3,7 @@ import type { TranslationData } from '@objectstack/spec/system'; /** - * English translations for the AI Project Management template. + * English translations for the Project Management template. * * Shape follows `TranslationData`: per-object label/pluralLabel/description, * field labels + select options under `objects..fields.`, list-view @@ -263,7 +263,7 @@ export const en: TranslationData = { }, apps: { pm: { - label: 'AI Project Management', + label: 'Project Management', description: 'Portfolio tracking with AI risk prediction, delay forecasting, and resource-conflict detection.', navigation: { diff --git a/packages/project/src/translations/zh-CN.ts b/packages/project/src/translations/zh-CN.ts index b7532a5..cff861b 100644 --- a/packages/project/src/translations/zh-CN.ts +++ b/packages/project/src/translations/zh-CN.ts @@ -3,7 +3,7 @@ import type { TranslationData } from '@objectstack/spec/system'; /** - * 中文翻译 - AI 项目管理模板。 + * 中文翻译 - 项目管理模板。 * * 结构遵循 `TranslationData`:每个对象的 label/pluralLabel/description, * 字段标签与下拉选项位于 `objects..fields.`,列表视图标签位于 @@ -233,7 +233,7 @@ export const zhCN: TranslationData = { }, apps: { pm: { - label: 'AI 项目管理', + label: '项目管理', description: '项目组合管理 —— AI 风险预测、延期预测与资源冲突检测。', navigation: { nav_projects: { label: '项目' }, diff --git a/packages/todo/package.json b/packages/todo/package.json index ec3ff78..82b5954 100644 --- a/packages/todo/package.json +++ b/packages/todo/package.json @@ -41,16 +41,5 @@ "engines": { "node": ">=20" }, - "packageManager": "pnpm@10.33.0", - "objectstack": { - "marketplace": { - "manifestId": "app.objectstack.template.todo", - "displayName": "Todo", - "description": "Universal task & project management starter — projects, tasks, comments, approvals, and dashboards on ObjectStack.", - "category": "starter", - "iconUrl": "https://cdn.objectos.app/icons/todo.svg", - "homepageUrl": "https://github.com/objectstack-ai/templates/tree/main/packages/todo", - "readmePath": "README.md" - } - } + "packageManager": "pnpm@10.33.0" }