From 67b8469d98d4ada86af7bc5781a184594e6913e1 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Date: Tue, 23 Jun 2026 17:50:33 +0800 Subject: [PATCH] refactor(templates): unify naming, converge metadata to one source, make AI copy honest Marketplace/catalog cleanup across the 9 templates. Naming - Drop the "AI" prefix from displayNames (AI Helpdesk -> Helpdesk, AI Project Management -> Project Management); AI stays in descriptions/field labels. Applied across manifest displayName, config manifest.name, app nav labels, and every locale translation so the catalog card and the installed-app name finally agree. - Reconcile hr app-name drift (config manifest.name "HR" -> "Human Resources"). Single source of truth - Remove the dead objectstack.marketplace block from every package.json. The publish path (scripts/publish-template.mjs) reads objectstack.manifest.json only; the package.json copies were unread and still carried the stale category:"starter" that #73 removed from the manifests. project keeps objectstack.port. Honesty - Templates that ship AI as a scaffold no longer market it as delivered. helpdesk (deterministic triage baseline) and project (stubbed forecasting, illustrative seed values) reworded in manifest/config/README; project's ai_* field group relabelled "AI Predictions (scaffolded)". - Add docs/ROADMAP.md capturing the AI implementation plan (route AI through the platform model registry instead of raw api.openai.com, degrade honestly when no model is configured, finish one flagship) plus the other findings (content over-charter, todo/project overlap, category facet casing). Category slugs left as-is: the visible facet-casing inconsistency is a marketplace-UI label-map gap, and changing the hr slug would regress the UI's existing hr -> "Human Resources" mapping. Co-Authored-By: Claude Opus 4.8 --- README.md | 6 +- docs/ROADMAP.md | 58 +++++++++++++++++++ packages/compliance/package.json | 13 +---- packages/content/package.json | 13 +---- packages/contracts/package.json | 13 +---- packages/expense/package.json | 13 +---- packages/helpdesk/README.md | 4 +- packages/helpdesk/objectstack.config.ts | 4 +- packages/helpdesk/objectstack.manifest.json | 10 ++-- packages/helpdesk/package.json | 13 +---- packages/helpdesk/src/apps/helpdesk.app.ts | 2 +- .../helpdesk/src/portals/customer.portal.ts | 2 +- packages/helpdesk/src/translations/en.ts | 2 +- packages/helpdesk/src/translations/zh-CN.ts | 2 +- packages/hr/objectstack.config.ts | 2 +- packages/hr/package.json | 13 +---- packages/procurement/package.json | 13 +---- packages/project/README.md | 28 ++++----- packages/project/objectstack.config.ts | 4 +- packages/project/objectstack.manifest.json | 6 +- packages/project/package.json | 18 +----- .../project/src/objects/pm_project.object.ts | 15 +++-- packages/project/src/translations/en.ts | 4 +- packages/project/src/translations/zh-CN.ts | 4 +- packages/todo/package.json | 13 +---- 25 files changed, 118 insertions(+), 157 deletions(-) create mode 100644 docs/ROADMAP.md 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" }